From 05a3975b70e42ad096b6dafcc1287075977a8663 Mon Sep 17 00:00:00 2001 From: Mara Nikola Kiefer Date: Sun, 23 Aug 2026 21:43:27 +0200 Subject: [PATCH 01/11] Implement Value Grader --- .github/skills/aw-value/SKILL.md | 133 ++++ .../aw-value/scripts/value-function-path.sh | 16 + .../aw-value/scripts/verify-value-function.sh | 70 ++ .github/skills/aw-value/tests/test.sh | 78 +++ actions/setup/js/trace_graders.cjs | 86 ++- actions/setup/js/trace_graders.test.cjs | 18 + actions/setup/js/value_grader.cjs | 221 ++++++ actions/setup/js/value_grader.test.cjs | 146 ++++ cmd/gh-aw/main.go | 6 +- .../content/docs/reference/trace-graders.md | 33 +- .../docs/specs/graders-specification.md | 92 ++- pkg/cli/experiments_grader_observations.go | 43 +- pkg/cli/graders_command.go | 52 ++ pkg/cli/graders_value_regrade.go | 635 ++++++++++++++++++ pkg/cli/graders_value_regrade_test.go | 139 ++++ pkg/constants/job_constants.go | 3 + pkg/parser/schema_test.go | 17 + pkg/parser/schemas/main_workflow_schema.json | 7 +- pkg/workflow/compiler.go | 4 + pkg/workflow/compiler_yaml_artifacts.go | 1 + pkg/workflow/compiler_yaml_graders.go | 27 +- pkg/workflow/graders_config.go | 84 ++- pkg/workflow/graders_config_test.go | 99 ++- pkg/workflow/graders_value.go | 73 ++ pkg/workflow/graders_value_test.go | 118 ++++ 25 files changed, 2136 insertions(+), 65 deletions(-) create mode 100644 .github/skills/aw-value/SKILL.md create mode 100755 .github/skills/aw-value/scripts/value-function-path.sh create mode 100755 .github/skills/aw-value/scripts/verify-value-function.sh create mode 100755 .github/skills/aw-value/tests/test.sh create mode 100644 actions/setup/js/value_grader.cjs create mode 100644 actions/setup/js/value_grader.test.cjs create mode 100644 pkg/cli/graders_command.go create mode 100644 pkg/cli/graders_value_regrade.go create mode 100644 pkg/cli/graders_value_regrade_test.go create mode 100644 pkg/workflow/graders_value.go create mode 100644 pkg/workflow/graders_value_test.go diff --git a/.github/skills/aw-value/SKILL.md b/.github/skills/aw-value/SKILL.md new file mode 100644 index 00000000000..9b721a9f03a --- /dev/null +++ b/.github/skills/aw-value/SKILL.md @@ -0,0 +1,133 @@ +--- +name: aw-value +description: "Design and verify a deterministic operational-value grader for a GitHub Agentic Workflow. Use for per-run value, evidence attribution, maturation, baselines, and value grader functions. Usage: /aw-value OWNER/REPO WORKFLOW-NAME." +argument-hint: "OWNER/REPO WORKFLOW-NAME" +allowed-tools: bash jq gh +metadata: + version: "1.0.0" +--- + +# Operational Value Grader + +Design one deterministic `value` grader that reports absolute operational attainment for each workflow run. + +Operational value is the degree to which the workflow's intended repository outcome is attained for the opportunity assigned to a run, demonstrated by accepted repository evidence under a frozen contract. It is not execution quality, output volume, safe-output creation, or an agent's assessment. + +## Output + +Create one executable function at: + +```text +.github/graders/WORKFLOW-NAME-value.sh +``` + +Configure the workflow: + +```yaml +graders: + value: + function: .github/graders/WORKFLOW-NAME-value.sh +``` + +The grader's primary `value` is absolute attainment in `[0,1]`. A comparable frozen baseline may be reported separately as `baselineValue`; gh-aw derives `deltaFromBaseline`. Never define the primary value as a difference from baseline. + +## Design Procedure + +1. Validate `OWNER/REPO` and resolve `.github/workflows/WORKFLOW-NAME.md`. Do not infer inputs from the workspace or remotes. +2. Recover adoption-time intent from the workflow's first commit and first parent. Use only adoption-time workflow content and pre-adoption evidence to choose opportunities, accepted evidence, formulas, targets, or a baseline. +3. Define how every workflow run binds to one operational case: + - produce a stable `opportunityKey`; + - prevent overlapping ownership where possible; + - preserve repeated keys when duplicate runs target the same opportunity so downstream analysis can cluster or deduplicate them; + - treat reruns with the same GitHub run ID as the same subject. +4. Freeze accepted evidence, evidence repositories, matching rules, zero-versus-missing behavior, and `maturesAt` computation. +5. Choose exactly one direct primary metric in `[0,1]`. Higher must always mean greater attainment. Keep trace graders and activity counts separate. +6. If comparable pre-adoption evidence exists, score it with the same metric and freeze it under `baseline`. Otherwise use `attainment-only` with a null baseline value. +7. Implement the function interface below and run: + + ```bash + .github/skills/aw-value/scripts/verify-value-function.sh .github/graders/WORKFLOW-NAME-value.sh + gh aw compile .github/workflows/WORKFLOW-NAME.md + ``` + +## Function Interface + +The function uses Bash 3.2-compatible Bash plus `jq` and supports: + +- `--definition`: print the frozen schema-version 4 contract. +- `--metric`: read one evidence object on stdin and print a deterministic number in `[0,1]` or `null`. +- `--grade-run`: read a run request on stdin and print one value observation. + +`--grade-run` receives: + +```json +{ + "schemaVersion": 1, + "run": { + "id": "12345", + "attempt": 1, + "repository": "OWNER/REPO", + "workflow": "Workflow name", + "ref": "refs/heads/main", + "sha": "...", + "eventName": "schedule", + "createdAt": "2026-08-23T11:58:00Z" + }, + "evidenceAt": "2026-08-23T12:00:00.000Z", + "case": null, + "event": null, + "config": {} +} +``` + +It returns: + +```json +{ + "value": 0.75, + "opportunityKey": "issue:42", + "case": {"issue": 42}, + "evidenceCutoff": "2026-08-23T12:00:00.000Z", + "maturesAt": "2026-08-30T12:00:00.000Z", + "provenance": [ + {"repository": "OWNER/REPO", "kind": "issue", "ref": "42"} + ], + "diagnostics": {} +} +``` + +The function must cap `evidenceCutoff` at the earlier of `evidenceAt` and `maturesAt`. A run is never intrinsically pending: the value is an as-of observation and may be recomputed until maturity. After maturity, the cap makes the result stable. + +## Regrade a Historical Run + +Recompute a run at an explicit evidence time with the same local function used by the original run: + +```bash +gh aw graders value RUN-ID \ + --evidence-at 2026-08-30T12:00:00.000Z \ + --json +``` + +Add `--repo [HOST/]OWNER/REPO` when the run is not in the current repository. The command downloads the original grader artifact, reuses its operational case and complete run subject, and refuses to execute unless the archived function's SHA-256 matches both digest records. It prints a new observation and never modifies the original artifact. + +## Definition Contract + +`--definition` must contain: + +- `schemaVersion: 4` and `grader: "value"`; +- repository, workflow name, source path, and adoption commit/time; +- operational-value statement; +- evidence opportunity, assignment, accepted evidence, repositories, collection, maturation, zero rule, and missing rule; +- one primary metric with formula and validation examples; +- baseline mode, value, cutoff, and provenance. + +For `baseline-comparable`, baseline value must be in `[0,1]` and have immutable provenance. For `attainment-only`, baseline value and cutoff must be null. + +## Interpretation Rules + +- `value` answers “how fully was this run's assigned opportunity attained?” +- `deltaFromBaseline` answers “how far is this observation above or below the frozen pre-adoption reference?” +- Neither establishes that the workflow caused the outcome. +- Compare runs only under the same function digest and evidence horizon. +- Identify a replayed observation by `(runId, functionDigest, evidenceAt)`. +- Do not treat repeated observations of one run, duplicate opportunity keys, or overlapping state windows as independent samples. \ No newline at end of file diff --git a/.github/skills/aw-value/scripts/value-function-path.sh b/.github/skills/aw-value/scripts/value-function-path.sh new file mode 100755 index 00000000000..929dfb40da0 --- /dev/null +++ b/.github/skills/aw-value/scripts/value-function-path.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash + +set -euo pipefail + +fail() { + printf 'error: %s\n' "$*" >&2 + exit 1 +} + +[[ $# -eq 1 ]] || fail "usage: value-function-path.sh WORKFLOW-NAME" + +workflow_name=$1 +[[ $workflow_name =~ ^[a-z0-9]+(-[a-z0-9]+)*$ ]] \ + || fail "workflow name must contain lowercase letters, numbers, and single hyphens" + +printf '.github/graders/%s-value.sh\n' "$workflow_name" \ No newline at end of file diff --git a/.github/skills/aw-value/scripts/verify-value-function.sh b/.github/skills/aw-value/scripts/verify-value-function.sh new file mode 100755 index 00000000000..d9ef1d66f8b --- /dev/null +++ b/.github/skills/aw-value/scripts/verify-value-function.sh @@ -0,0 +1,70 @@ +#!/usr/bin/env bash + +set -euo pipefail + +fail() { + printf 'error: %s\n' "$*" >&2 + exit 1 +} + +[[ $# -eq 1 ]] || fail "usage: verify-value-function.sh " + +value_function=$1 +[[ -f $value_function ]] || fail "value function not found: $value_function" +[[ -x $value_function ]] || fail "value function is not executable: $value_function" +command -v jq >/dev/null 2>&1 || fail "jq is required" +bash -n "$value_function" + +definition=$("$value_function" --definition) +printf '%s\n' "$definition" | jq -e ' + .schemaVersion == 4 + and .grader == "value" + and (.repository | type == "string" and test("^[^/]+/[^/]+$")) + and (.workflowName | type == "string" and length > 0) + and (.sourcePath | type == "string" and startswith(".github/workflows/") and endswith(".md")) + and (.adoption.commit | type == "string" and test("^[0-9a-f]{40}$")) + and (.adoption.adoptedAt | type == "string" and test("^[0-9]{4}-[0-9]{2}-[0-9]{2}T")) + and (.operationalValue | type == "string" and length > 0) + and (.evidence.opportunity | type == "string" and length > 0) + and (.evidence.assignment | type == "string" and length > 0) + and (.evidence.accepted | type == "string" and length > 0) + and (.evidence.repositories | type == "array" and length > 0) + and (all(.evidence.repositories[]; type == "string" and test("^[^/]+/[^/]+$"))) + and (.evidence.collection | type == "string" and length > 0) + and (.evidence.maturation | type == "string" and length > 0) + and (.evidence.zeroRule | type == "string" and length > 0) + and (.evidence.missingRule | type == "string" and length > 0) + and (.primaryMetric.id | type == "string" and length > 0) + and (.primaryMetric.formula | type == "string" and length > 0) + and (.primaryMetric.direction == "higher_is_better") + and (.validationExamples | has("targetAttained") and has("targetMissed") and has("missing") and has("malformed")) + and (.baseline.mode == "baseline-comparable" or .baseline.mode == "attainment-only") + and (if .baseline.mode == "baseline-comparable" then + (.baseline.value | type == "number" and . >= 0 and . <= 1) + and (.baseline.evidenceCutoff | type == "string" and length > 0) + and (.baseline.provenance | type == "array" and length > 0) + else + .baseline.value == null + and .baseline.evidenceCutoff == null + end) +' >/dev/null || fail "value-function definition is invalid" + +for example_name in targetAttained targetMissed missing malformed; do + evidence=$(printf '%s\n' "$definition" | jq -c --arg name "$example_name" '.validationExamples[$name]') + result=$(printf '%s\n' "$evidence" | "$value_function" --metric) + printf '%s\n' "$result" | jq -e '. == null or (type == "number" and . >= 0 and . <= 1)' >/dev/null \ + || fail "--metric returned an invalid score for $example_name" + case $example_name in + targetAttained) target_attained=$result ;; + targetMissed) target_missed=$result ;; + missing|malformed) + [[ $result == null ]] || fail "--metric must return null for $example_name" + ;; + esac +done + +jq -en --argjson attained "$target_attained" --argjson missed "$target_missed" \ + '$attained != null and $missed != null and $attained > $missed' >/dev/null \ + || fail "targetAttained must score higher than targetMissed" + +printf 'verified %s\n' "$value_function" \ No newline at end of file diff --git a/.github/skills/aw-value/tests/test.sh b/.github/skills/aw-value/tests/test.sh new file mode 100755 index 00000000000..184a4b401be --- /dev/null +++ b/.github/skills/aw-value/tests/test.sh @@ -0,0 +1,78 @@ +#!/usr/bin/env bash + +set -euo pipefail + +skill_dir=$(CDPATH='' cd -- "$(dirname -- "$0")/.." && pwd) +repo_root=$(CDPATH='' cd -- "$skill_dir/../../.." && pwd) +work_dir=$(mktemp -d "$repo_root/.aw-value-test.XXXXXX") +trap 'rm -rf "$work_dir"' EXIT HUP INT TERM + +path=$("$skill_dir/scripts/value-function-path.sh" daily-file-diet) +[[ $path == .github/graders/daily-file-diet-value.sh ]] +if "$skill_dir/scripts/value-function-path.sh" ../escape >/dev/null 2>&1; then + printf 'invalid workflow name was accepted\n' >&2 + exit 1 +fi + +function_path="$work_dir/value.sh" +cat > "$function_path" <<'EOF' +#!/usr/bin/env bash + +set -euo pipefail + +case ${1:-} in + --definition) + cat <<'JSON' +{ + "schemaVersion": 4, + "grader": "value", + "repository": "owner/repo", + "workflowName": "Example", + "sourcePath": ".github/workflows/example.md", + "adoption": { + "commit": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "adoptedAt": "2026-01-01T00:00:00Z" + }, + "operationalValue": "For eligible issues, attain closure demonstrated by a closed issue.", + "evidence": { + "opportunity": "The issue assigned to the workflow run.", + "assignment": "Bind the triggering issue number to the run ID.", + "accepted": "The issue is closed by the evidence cutoff.", + "repositories": ["owner/repo"], + "collection": "Read immutable issue events through the capped cutoff.", + "maturation": "Seven days after the run was created.", + "zeroRule": "An eligible open issue at the cutoff scores zero.", + "missingRule": "An unavailable issue or event history scores null." + }, + "primaryMetric": { + "id": "issue-closure", + "formula": "1 when closed, otherwise 0", + "direction": "higher_is_better" + }, + "baseline": { + "mode": "baseline-comparable", + "value": 0.4, + "evidenceCutoff": "2025-12-31T00:00:00Z", + "provenance": [{"repository": "owner/repo", "kind": "issue-events", "ref": "baseline"}] + }, + "validationExamples": { + "targetAttained": {"eligible": true, "closed": true}, + "targetMissed": {"eligible": true, "closed": false}, + "missing": {"eligible": false}, + "malformed": {"eligible": "yes"} + } +} +JSON + ;; + --metric) + jq 'if (.eligible | type) != "boolean" or .eligible == false or (.closed | type) != "boolean" then null elif .closed then 1 else 0 end' + ;; + *) + exit 1 + ;; +esac +EOF +chmod +x "$function_path" + +"$skill_dir/scripts/verify-value-function.sh" "$function_path" >/dev/null +printf 'aw-value skill tests passed\n' \ No newline at end of file diff --git a/actions/setup/js/trace_graders.cjs b/actions/setup/js/trace_graders.cjs index 2348670bff8..c692ee70a95 100644 --- a/actions/setup/js/trace_graders.cjs +++ b/actions/setup/js/trace_graders.cjs @@ -8,12 +8,14 @@ const crypto = require("crypto"); const { getErrorMessage } = require("./error_helpers.cjs"); const { readExperimentAssignments } = require("./experiment_helpers.cjs"); const { calculateWorkingSetFromEntries } = require("./working_set_metrics.cjs"); +const { executeValueFunction } = require("./value_grader.cjs"); // --- Constants --- const TMP_GH_AW = "/tmp/gh-aw"; const GRADERS_DIR = path.join(TMP_GH_AW, "agent", "graders"); const MANIFEST_PATH = path.join(GRADERS_DIR, "grader_manifest.json"); const RESULTS_PATH = path.join(GRADERS_DIR, "grader_results.json"); +const VALUE_FUNCTION_PATH = path.join(GRADERS_DIR, "value_function.sh"); // Trace source file paths const TOKEN_USAGE_PATHS = [ @@ -442,7 +444,11 @@ function evaluateThreshold(value, direction, threshold) { * @property {string} [details] * @property {string} [message] * @property {string} [error] - * @property {string} source - "builtin" | "inline" + * @property {string} source - "builtin" | "inline" | "value" + * @property {object} [observation] + * @property {object} [diagnostics] + * @property {number|null} [baselineValue] + * @property {number|null} [deltaFromBaseline] * @property {{id: string, version: number, digest?: string}} implementation */ @@ -493,10 +499,20 @@ function normalizeResult(id, rawResult, meta) { if (rawResult.details) base.details = String(rawResult.details); if (rawResult.message) base.message = String(rawResult.message); if (typeof rawResult.passed === "boolean") base.passed = rawResult.passed; + if (isRecord(rawResult.observation)) base.observation = deepClone(rawResult.observation); + if (isRecord(rawResult.diagnostics)) base.diagnostics = deepClone(rawResult.diagnostics); + if (typeof rawResult.baselineValue === "number" || rawResult.baselineValue === null) base.baselineValue = rawResult.baselineValue; + if (typeof rawResult.deltaFromBaseline === "number" || rawResult.deltaFromBaseline === null) base.deltaFromBaseline = rawResult.deltaFromBaseline; } else { value = rawResult; } + if (value === null || value === undefined) { + base.status = "unavailable"; + base.message ||= "grader returned no value"; + return base; + } + if (typeof value !== "number" || !isFinite(value)) { base.status = "error"; base.error = `grader ${id} returned non-finite value: ${value}`; @@ -612,6 +628,27 @@ function runCustomGrader(id, script, trace, meta) { } } +function runValueGrader(id, functionContent, meta, options) { + try { + const rawResult = executeValueFunction(functionContent, meta, options); + return normalizeResult(id, rawResult, meta); + } catch (err) { + const result = normalizeResult(id, null, meta); + result.status = "error"; + result.error = `grader ${id} runtime error: ${getErrorMessage(err)}`; + return result; + } +} + +function archiveValueFunction(functionContent, expectedDigest, outputPath = VALUE_FUNCTION_PATH) { + const actualDigest = crypto.createHash("sha256").update(functionContent, "utf8").digest("hex"); + if (!expectedDigest || actualDigest !== expectedDigest) { + throw new Error(`value function digest mismatch: expected ${expectedDigest || "none"}, got ${actualDigest}`); + } + fs.mkdirSync(path.dirname(outputPath), { recursive: true }); + fs.writeFileSync(outputPath, functionContent, { encoding: "utf8", mode: 0o600 }); +} + /** * Legacy adapter for existing tests. Runs a grader by id. * @param {string} id @@ -652,14 +689,14 @@ async function main(manifestB64, execSpecB64) { } // Decode execution spec (custom scripts) - /** @type {Record} */ - const scriptMap = {}; + /** @type {Record} */ + const executionMap = {}; if (execSpecB64) { try { const specJson = Buffer.from(execSpecB64, "base64").toString("utf-8"); const specs = JSON.parse(specJson); for (const s of specs) { - if (s.id && s.script) scriptMap[s.id] = s.script; + if (s.id && (s.script || s.function)) executionMap[s.id] = { script: s.script, function: s.function }; } } catch (err) { core.warning(`Graders: failed to parse exec spec: ${getErrorMessage(err)}`); @@ -682,9 +719,35 @@ async function main(manifestB64, execSpecB64) { return; } + let valueFunctionArchiveError; + const valueManifest = enabledGraders.find(grader => grader.source === "value"); + if (valueManifest) { + try { + const functionContent = executionMap[valueManifest.id]?.function; + if (!functionContent) throw new Error("value function is missing from the execution specification"); + archiveValueFunction(functionContent, valueManifest.digest); + } catch (err) { + valueFunctionArchiveError = getErrorMessage(err); + core.warning(`Graders: unable to archive value function: ${valueFunctionArchiveError}`); + } + } + // Single preprocessing pass core.info(`Graders: preprocessing trace files for ${enabledGraders.length} grader(s)...`); const trace = preprocessTrace(); + let valueRunMetadata; + if (enabledGraders.some(grader => grader.source === "value")) { + try { + const response = await github.rest.actions.getWorkflowRun({ + owner: context.repo.owner, + repo: context.repo.repo, + run_id: Number(process.env.GITHUB_RUN_ID), + }); + valueRunMetadata = { createdAt: response.data.created_at }; + } catch (err) { + core.warning(`Graders: unable to load workflow-run creation time: ${getErrorMessage(err)}`); + } + } // Run all graders /** @type {GraderResult[]} */ @@ -704,8 +767,14 @@ async function main(manifestB64, execSpecB64) { let result; if (grader.source === "builtin" && BUILTIN_GRADERS[grader.id]) { result = runBuiltinGrader(grader.id, trace, meta); - } else if (scriptMap[grader.id]) { - result = runCustomGrader(grader.id, scriptMap[grader.id], trace, meta); + } else if (grader.source === "value" && valueFunctionArchiveError) { + result = normalizeResult(grader.id, null, meta); + result.status = "error"; + result.error = `grader ${grader.id} runtime error: ${valueFunctionArchiveError}`; + } else if (grader.source === "value" && executionMap[grader.id]?.function) { + result = runValueGrader(grader.id, executionMap[grader.id].function, meta, { runMetadata: valueRunMetadata }); + } else if (executionMap[grader.id]?.script) { + result = runCustomGrader(grader.id, executionMap[grader.id].script, trace, meta); } else { result = normalizeResult(grader.id, null, meta); result.status = "unavailable"; @@ -725,6 +794,8 @@ async function main(manifestB64, execSpecB64) { const output = { version: GRADER_VERSION, run: { + id: String(process.env.GITHUB_RUN_ID || ""), + attempt: Number(process.env.GITHUB_RUN_ATTEMPT) || 1, graderCount: results.length, passed, failed, @@ -788,6 +859,7 @@ module.exports = { runGrader, runBuiltinGrader, runCustomGrader, + runValueGrader, normalizeResult, evaluateThreshold, BUILTIN_GRADERS, @@ -797,6 +869,8 @@ module.exports = { GRADERS_DIR, MANIFEST_PATH, RESULTS_PATH, + VALUE_FUNCTION_PATH, + archiveValueFunction, MAX_FILE_SIZE, MAX_LINE_LENGTH, SCRIPT_TIMEOUT_MS, diff --git a/actions/setup/js/trace_graders.test.cjs b/actions/setup/js/trace_graders.test.cjs index 062bac1fc30..012b30845c5 100644 --- a/actions/setup/js/trace_graders.test.cjs +++ b/actions/setup/js/trace_graders.test.cjs @@ -4,6 +4,7 @@ const fs = require("fs"); const path = require("path"); const os = require("os"); +const crypto = require("crypto"); const { main, @@ -26,6 +27,7 @@ const { IMPLEMENTATION_ID, MANIFEST_PATH, RESULTS_PATH, + archiveValueFunction, MAX_FILE_SIZE, MAX_LINE_LENGTH, SCRIPT_TIMEOUT_MS, @@ -66,6 +68,22 @@ function makeTrace(overrides = {}) { } describe("trace_graders", () => { + describe("archiveValueFunction", () => { + it("writes only function bytes matching the frozen digest", () => { + const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "value-function-archive-")); + const outputPath = path.join(tempDir, "value_function.sh"); + const content = "#!/usr/bin/env bash\nprintf 'ok\\n'\n"; + const digest = crypto.createHash("sha256").update(content, "utf8").digest("hex"); + try { + archiveValueFunction(content, digest, outputPath); + expect(fs.readFileSync(outputPath, "utf8")).toBe(content); + expect(() => archiveValueFunction(content, "invalid", outputPath)).toThrow("digest mismatch"); + } finally { + fs.rmSync(tempDir, { recursive: true, force: true }); + } + }); + }); + // --- safeParseJsonl --- describe("safeParseJsonl", () => { it("parses valid JSONL", () => { diff --git a/actions/setup/js/value_grader.cjs b/actions/setup/js/value_grader.cjs new file mode 100644 index 00000000000..f35cc0d0b99 --- /dev/null +++ b/actions/setup/js/value_grader.cjs @@ -0,0 +1,221 @@ +// @ts-check + +const cp = require("child_process"); +const fs = require("fs"); +const os = require("os"); +const path = require("path"); +const { getErrorMessage } = require("./error_helpers.cjs"); + +const VALUE_FUNCTION_TIMEOUT_MS = 120000; +const VALUE_FUNCTION_MAX_OUTPUT = 1024 * 1024; +const VALUE_EVENT_MAX_SIZE = 1024 * 1024; + +/** @param {unknown} value @returns {value is Record} */ +function isRecord(value) { + return value !== null && typeof value === "object" && !Array.isArray(value); +} + +/** @param {string} value @param {string} label @returns {number} */ +function parseTimestamp(value, label) { + if (typeof value !== "string" || !/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{3})?Z$/.test(value)) { + throw new Error(`${label} must be a UTC ISO-8601 timestamp`); + } + const timestamp = Date.parse(value); + if (!Number.isFinite(timestamp)) { + throw new Error(`${label} must be a valid timestamp`); + } + return timestamp; +} + +/** @param {NodeJS.ProcessEnv} env @param {{createdAt?: string}} [metadata] */ +function buildRunSubject(env, metadata = {}) { + const runId = String(env.GITHUB_RUN_ID || ""); + if (!/^\d+$/.test(runId) || runId === "0") { + throw new Error("GITHUB_RUN_ID must identify the workflow run"); + } + return { + id: runId, + attempt: Number(env.GITHUB_RUN_ATTEMPT) || 1, + repository: String(env.GITHUB_REPOSITORY || ""), + workflow: String(env.GITHUB_WORKFLOW || ""), + ref: String(env.GITHUB_REF || ""), + sha: String(env.GITHUB_SHA || ""), + eventName: String(env.GITHUB_EVENT_NAME || ""), + createdAt: metadata.createdAt || null, + }; +} + +/** @param {NodeJS.ProcessEnv} env */ +function readEventPayload(env) { + const eventPath = env.GITHUB_EVENT_PATH; + if (!eventPath) return null; + try { + const stat = fs.statSync(eventPath); + if (!stat.isFile() || stat.size > VALUE_EVENT_MAX_SIZE) return null; + const event = JSON.parse(fs.readFileSync(eventPath, "utf8")); + return isRecord(event) ? event : null; + } catch { + return null; + } +} + +/** @param {NodeJS.ProcessEnv} env */ +function safeFunctionEnv(env) { + /** @type {NodeJS.ProcessEnv} */ + const result = {}; + for (const key of ["PATH", "HOME", "TMPDIR", "TEMP", "TMP", "SystemRoot", "ComSpec", "GH_TOKEN", "GH_HOST", "GITHUB_API_URL", "GITHUB_SERVER_URL"]) { + if (env[key]) result[key] = env[key]; + } + return result; +} + +function parseBaselineDefinition(rawDefinition) { + let definition; + try { + definition = JSON.parse(rawDefinition || "{}"); + } catch (err) { + throw new Error(`value function returned an invalid definition: ${getErrorMessage(err)}`, { cause: err }); + } + if (!isRecord(definition) || definition.schemaVersion !== 4 || definition.grader !== "value" || !isRecord(definition.baseline)) { + throw new Error("value function definition must use schemaVersion 4 and grader 'value'"); + } + if (definition.baseline.mode === "attainment-only") { + if (definition.baseline.value !== null) throw new Error("attainment-only value functions must have a null baseline value"); + return null; + } + if (definition.baseline.mode !== "baseline-comparable") { + throw new Error("value function baseline mode must be 'baseline-comparable' or 'attainment-only'"); + } + const baselineValue = definition.baseline.value; + if (typeof baselineValue !== "number" || !Number.isFinite(baselineValue) || baselineValue < 0 || baselineValue > 1) { + throw new Error("baseline-comparable value functions require a baseline value in [0,1]"); + } + return baselineValue; +} + +/** + * Execute and validate one trusted, frozen value function. + * @param {string} functionContent + * @param {{digest?: string, config?: object}} meta + * @param {{evidenceAt?: string, env?: NodeJS.ProcessEnv, event?: object|null, case?: object|null, runMetadata?: {createdAt?: string}, bashPath?: string}} [options] + */ +function executeValueFunction(functionContent, meta, options = {}) { + const env = options.env || process.env; + const evidenceAt = options.evidenceAt || new Date().toISOString(); + const evidenceAtMs = parseTimestamp(evidenceAt, "evidenceAt"); + const run = buildRunSubject(env, options.runMetadata); + const request = { + schemaVersion: 1, + run, + evidenceAt, + case: options.case || null, + event: options.event === undefined ? readEventPayload(env) : options.event, + config: meta.config || {}, + }; + + const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "gh-aw-value-grader-")); + const functionPath = path.join(tempDir, "value.sh"); + const bashPath = options.bashPath || "/bin/bash"; + try { + fs.writeFileSync(functionPath, functionContent, { encoding: "utf8", mode: 0o700 }); + const syntax = cp.spawnSync(bashPath, ["-n", functionPath], { + encoding: "utf8", + timeout: 5000, + env: safeFunctionEnv(env), + }); + if (syntax.error || syntax.status !== 0) { + throw new Error(`value function has invalid Bash syntax: ${syntax.stderr?.trim() || getErrorMessage(syntax.error)}`); + } + + const definitionExecution = cp.spawnSync(bashPath, [functionPath, "--definition"], { + encoding: "utf8", + timeout: 5000, + maxBuffer: VALUE_FUNCTION_MAX_OUTPUT, + env: safeFunctionEnv(env), + }); + if (definitionExecution.error) throw definitionExecution.error; + if (definitionExecution.status !== 0) { + throw new Error(definitionExecution.stderr?.trim() || `value function --definition exited with status ${String(definitionExecution.status)}`); + } + const baselineValue = parseBaselineDefinition(definitionExecution.stdout); + + const execution = cp.spawnSync(bashPath, [functionPath, "--grade-run"], { + input: JSON.stringify(request), + encoding: "utf8", + timeout: VALUE_FUNCTION_TIMEOUT_MS, + maxBuffer: VALUE_FUNCTION_MAX_OUTPUT, + env: safeFunctionEnv(env), + }); + if (execution.error) throw execution.error; + if (execution.status !== 0) { + throw new Error(execution.stderr?.trim() || `value function exited with status ${String(execution.status)}`); + } + + let output; + try { + output = JSON.parse(execution.stdout || "{}"); + } catch (err) { + throw new Error(`value function returned invalid JSON: ${getErrorMessage(err)}`, { cause: err }); + } + if (!isRecord(output)) throw new Error("value function output must be an object"); + if (output.value !== null && (typeof output.value !== "number" || !Number.isFinite(output.value) || output.value < 0 || output.value > 1)) { + throw new Error("value function value must be null or a finite number in [0,1]"); + } + if (!isRecord(output.case)) throw new Error("value function output.case must be an object"); + if (typeof output.opportunityKey !== "string" || output.opportunityKey.trim() === "") { + throw new Error("value function opportunityKey must be a non-empty string"); + } + const evidenceCutoffMs = parseTimestamp(output.evidenceCutoff, "evidenceCutoff"); + const maturesAtMs = parseTimestamp(output.maturesAt, "maturesAt"); + if (evidenceCutoffMs > evidenceAtMs) throw new Error("value function evidenceCutoff cannot follow evidenceAt"); + if (evidenceCutoffMs > maturesAtMs) throw new Error("value function evidenceCutoff cannot follow maturesAt"); + if (!Array.isArray(output.provenance) || (output.value !== null && output.provenance.length === 0)) { + throw new Error("value function must return provenance for a numeric value"); + } + for (const provenance of output.provenance) { + if (!isRecord(provenance) || !["repository", "kind", "ref"].every(key => typeof provenance[key] === "string" && provenance[key].length > 0)) { + throw new Error("value function provenance entries require repository, kind, and ref"); + } + } + return { + value: output.value, + ...(typeof output.message === "string" ? { message: output.message } : {}), + ...(isRecord(output.diagnostics) ? { diagnostics: output.diagnostics } : {}), + observation: { + subject: { + type: "workflow-run", + runId: run.id, + attempt: run.attempt, + repository: run.repository, + workflow: run.workflow, + ref: run.ref, + sha: run.sha, + eventName: run.eventName, + createdAt: run.createdAt, + }, + opportunityKey: output.opportunityKey, + evidenceAt, + evidenceCutoff: output.evidenceCutoff, + maturesAt: output.maturesAt, + mature: evidenceAtMs >= maturesAtMs, + case: output.case, + provenance: output.provenance, + }, + baselineValue, + deltaFromBaseline: typeof output.value === "number" && baselineValue !== null ? output.value - baselineValue : null, + }; + } finally { + fs.rmSync(tempDir, { recursive: true, force: true }); + } +} + +module.exports = { + executeValueFunction, + buildRunSubject, + readEventPayload, + parseTimestamp, + parseBaselineDefinition, + VALUE_FUNCTION_TIMEOUT_MS, + VALUE_FUNCTION_MAX_OUTPUT, + VALUE_EVENT_MAX_SIZE, +}; diff --git a/actions/setup/js/value_grader.test.cjs b/actions/setup/js/value_grader.test.cjs new file mode 100644 index 00000000000..44e96fc6155 --- /dev/null +++ b/actions/setup/js/value_grader.test.cjs @@ -0,0 +1,146 @@ +// @ts-check + +const { executeValueFunction, buildRunSubject } = require("./value_grader.cjs"); + +const TEST_ENV = { + PATH: process.env.PATH, + HOME: process.env.HOME, + TMPDIR: process.env.TMPDIR, + GITHUB_RUN_ID: "12345", + GITHUB_RUN_ATTEMPT: "2", + GITHUB_REPOSITORY: "github/gh-aw", + GITHUB_WORKFLOW: "Example", + GITHUB_REF: "refs/heads/main", + GITHUB_SHA: "0123456789abcdef", + GITHUB_EVENT_NAME: "schedule", +}; + +function valueFunction(output, baseline = { mode: "baseline-comparable", value: 0.25 }) { + return `#!/usr/bin/env bash +set -euo pipefail +case \${1:-} in +--definition) +cat <<'DEFINITION' +${JSON.stringify({ schemaVersion: 4, grader: "value", baseline })} +DEFINITION +;; +--grade-run) +cat >/dev/null +cat <<'RESULT' +${JSON.stringify(output)} +RESULT +;; +*) exit 1 ;; +esac +`; +} + +describe("value_grader", () => { + it("builds a stable workflow-run subject", () => { + expect(buildRunSubject(TEST_ENV)).toEqual({ + id: "12345", + attempt: 2, + repository: "github/gh-aw", + workflow: "Example", + ref: "refs/heads/main", + sha: "0123456789abcdef", + eventName: "schedule", + createdAt: null, + }); + }); + + it("returns absolute value with a secondary baseline delta", () => { + const output = executeValueFunction( + valueFunction({ + value: 0.75, + opportunityKey: "schedule:2026-08-23", + case: { key: "schedule:2026-08-23" }, + evidenceCutoff: "2026-08-23T12:00:00Z", + maturesAt: "2026-08-30T12:00:00Z", + provenance: [{ repository: "github/gh-aw", kind: "git-commit", ref: "abc123" }], + }), + { digest: "abc" }, + { evidenceAt: "2026-08-24T12:00:00Z", env: TEST_ENV } + ); + + expect(output.value).toBe(0.75); + expect(output.baselineValue).toBe(0.25); + expect(output.deltaFromBaseline).toBe(0.5); + expect(output.observation.subject).toEqual({ + type: "workflow-run", + runId: "12345", + attempt: 2, + repository: "github/gh-aw", + workflow: "Example", + ref: "refs/heads/main", + sha: "0123456789abcdef", + eventName: "schedule", + createdAt: null, + }); + expect(output.observation.mature).toBe(false); + }); + + it("caps evidence at maturation and marks mature observations", () => { + const output = executeValueFunction( + valueFunction( + { + value: 1, + opportunityKey: "issue:42", + case: { issue: 42 }, + evidenceCutoff: "2026-08-30T12:00:00Z", + maturesAt: "2026-08-30T12:00:00Z", + provenance: [{ repository: "github/gh-aw", kind: "issue", ref: "42" }], + }, + { mode: "attainment-only", value: null } + ), + {}, + { evidenceAt: "2026-09-01T12:00:00Z", env: TEST_ENV } + ); + + expect(output.observation.mature).toBe(true); + expect(output.observation.evidenceCutoff).toBe("2026-08-30T12:00:00Z"); + expect(output.baselineValue).toBeNull(); + expect(output.deltaFromBaseline).toBeNull(); + }); + + it("rejects invalid values and uncapped evidence", () => { + expect(() => + executeValueFunction( + valueFunction({ + value: 2, + opportunityKey: "issue:42", + case: { issue: 42 }, + evidenceCutoff: "2026-09-01T12:00:00Z", + maturesAt: "2026-08-30T12:00:00Z", + provenance: [], + }), + {}, + { evidenceAt: "2026-09-01T12:00:00Z", env: TEST_ENV } + ) + ).toThrow("value must be null or a finite number in [0,1]"); + }); + + it("rejects invalid Bash", () => { + expect(() => executeValueFunction("#!/usr/bin/env bash\nif", {}, { evidenceAt: "2026-08-24T12:00:00Z", env: TEST_ENV })).toThrow("invalid Bash syntax"); + }); + + it("rejects an invalid frozen baseline", () => { + expect(() => + executeValueFunction( + valueFunction( + { + value: 1, + opportunityKey: "issue:42", + case: { issue: 42 }, + evidenceCutoff: "2026-08-24T12:00:00Z", + maturesAt: "2026-08-30T12:00:00Z", + provenance: [{ repository: "github/gh-aw", kind: "issue", ref: "42" }], + }, + { mode: "baseline-comparable", value: 2 } + ), + {}, + { evidenceAt: "2026-08-24T12:00:00Z", env: TEST_ENV } + ) + ).toThrow("baseline value in [0,1]"); + }); +}); diff --git a/cmd/gh-aw/main.go b/cmd/gh-aw/main.go index d8294ce4cee..4e41bb71f78 100644 --- a/cmd/gh-aw/main.go +++ b/cmd/gh-aw/main.go @@ -556,7 +556,7 @@ type commandSet struct { addCmd, addWizardCmd, updateCmd, deployCmd, trialCmd, initCmd, statusCmd, listCmd *cobra.Command mcpCmd, logsCmd, auditCmd, viewCmd, healthCmd, outcomesCmd, mcpServerCmd, prCmd, secretsCmd *cobra.Command fixCmd, upgradeCmd, completionCmd, hashCmd, projectCmd, doctorCmd, checksCmd, validateCmd, lintCmd *cobra.Command - domainsCmd, experimentsCmd, forecastCmd, envCmd *cobra.Command + domainsCmd, experimentsCmd, forecastCmd, gradersCmd, envCmd *cobra.Command } func fixPathForCommand(s string) string { @@ -735,6 +735,7 @@ func createCommandSet() commandSet { domainsCmd: cli.NewDomainsCommand(), experimentsCmd: cli.NewExperimentsCommand(), forecastCmd: cli.NewForecastCommand(), + gradersCmd: cli.NewGradersCommand(), envCmd: cli.NewEnvCommand(), } cli.RegisterEngineFlagCompletion(cmds.initCmd) @@ -851,6 +852,7 @@ func assignCommandGroups(cmds commandSet) { cmds.logsCmd.GroupID, cmds.auditCmd.GroupID, cmds.viewCmd.GroupID = "analysis", "analysis", "analysis" cmds.healthCmd.GroupID, cmds.outcomesCmd.GroupID, cmds.checksCmd.GroupID = "analysis", "analysis", "analysis" cmds.statusCmd.GroupID, cmds.listCmd.GroupID, cmds.experimentsCmd.GroupID, cmds.forecastCmd.GroupID = "analysis", "analysis", "analysis", "analysis" + cmds.gradersCmd.GroupID = "analysis" cmds.mcpServerCmd.GroupID, cmds.prCmd.GroupID, cmds.completionCmd.GroupID, cmds.hashCmd.GroupID, cmds.projectCmd.GroupID = "utilities", "utilities", "utilities", "utilities", "utilities" } @@ -860,7 +862,7 @@ func addCommandsToRoot(cmds commandSet) { runCmd, removeCmd, cmds.statusCmd, cmds.listCmd, enableCmd, disableCmd, cmds.logsCmd, cmds.auditCmd, cmds.viewCmd, cmds.healthCmd, cmds.outcomesCmd, cmds.checksCmd, cmds.mcpCmd, cmds.mcpServerCmd, cmds.prCmd, versionCmd, cmds.secretsCmd, cmds.fixCmd, cmds.validateCmd, cmds.lintCmd, cmds.completionCmd, cmds.hashCmd, cmds.projectCmd, cmds.doctorCmd, - cmds.domainsCmd, cmds.experimentsCmd, cmds.forecastCmd, cmds.envCmd, + cmds.domainsCmd, cmds.experimentsCmd, cmds.forecastCmd, cmds.gradersCmd, cmds.envCmd, ) } diff --git a/docs/src/content/docs/reference/trace-graders.md b/docs/src/content/docs/reference/trace-graders.md index 51bd527135f..29426920c73 100644 --- a/docs/src/content/docs/reference/trace-graders.md +++ b/docs/src/content/docs/reference/trace-graders.md @@ -1,9 +1,9 @@ --- title: Graders -description: Deterministic metrics computed from agent execution traces +description: Deterministic execution and operational value metrics --- -Graders compute deterministic metrics from post-agent execution trace files (token usage, MCP gateway logs, agent output) without LLM calls or network access. Results are persisted in the agent artifact for downstream consumption by detection jobs and reporting tools. +Graders compute deterministic metrics without LLM calls. Built-in and custom inline graders inspect post-agent execution traces. The reserved `value` grader evaluates operational repository outcomes under a frozen function and explicit evidence cutoff. Results are persisted in the agent artifact for downstream tools. For normative requirements, see the [Graders Specification](/gh-aw/specs/graders-specification/). @@ -56,12 +56,39 @@ graders: Custom scripts must return a value and stay within 4096 characters (no `require`, `import`, `fetch`, `eval`, or `process.exit`). +## Operational value grader + +Configure the reserved `value` grader with a repository-relative Bash function: + +```aw wrap +graders: + value: + function: .github/graders/daily-file-diet-value.sh +``` + +The compiler freezes the function bytes and records their SHA-256 digest. The function returns absolute operational attainment in `[0,1]` for the run's assigned case. A frozen baseline is optional metadata; when present, gh-aw derives `deltaFromBaseline` without changing the primary value. + +Each result records the complete run subject, operational case, evidence time, maturity, and provenance. Value functions may query the repositories declared by their frozen evidence contract. They receive the workflow token through `GH_TOKEN` but do not receive workflow secrets. + +Use the `aw-value` skill to design and verify a value function. + +### Regrade a historical run + +```bash +gh aw graders value 123456789 \ + --evidence-at 2026-08-30T12:00:00.000Z \ + --json +``` + +The command downloads the original grader artifact and reuses its case, run subject, and frozen function. The archived function must match the digest recorded by both the original manifest and result. Regrading emits a new observation identified by `(runId, functionDigest, evidenceAt)` and never modifies the original artifact. Use `--repo [HOST/]OWNER/REPO` to target another repository. + ## Output files | File | Description | |---|---| | `grader_manifest.json` | Which graders were configured and their enabled state | -| `grader_results.json` | Normalized metric values with trace summary | +| `grader_results.json` | Normalized values, status, implementation identity, and value observations | +| `value_function.sh` | Exact frozen value function used for initial grading and historical replay | Both files are included in the unified `agent` artifact. diff --git a/docs/src/content/docs/specs/graders-specification.md b/docs/src/content/docs/specs/graders-specification.md index e0cd469ea62..f30d94b5148 100644 --- a/docs/src/content/docs/specs/graders-specification.md +++ b/docs/src/content/docs/specs/graders-specification.md @@ -7,7 +7,7 @@ sidebar: # Graders Specification -**Version**: 0.1.0 +**Version**: 0.2.0 **Status**: Draft Specification **Feature Status**: Experimental **Latest Version**: [graders-specification](/gh-aw/specs/graders-specification/) @@ -17,7 +17,7 @@ sidebar: ## Abstract -This specification defines the `graders` feature in gh-aw: deterministic, post-agent metrics computed from execution traces and persisted as structured artifacts. It specifies configuration, built-in grader behavior, custom inline grader constraints, execution ordering, artifact outputs, experiment metric references, and conformance requirements. +This specification defines the `graders` feature in gh-aw: deterministic execution metrics and operational value observations persisted as structured artifacts. It specifies configuration, built-in grader behavior, custom inline grader constraints, value grader behavior, execution ordering, artifact outputs, historical regrading, experiment metric references, and conformance requirements. ## Status of This Document @@ -33,13 +33,14 @@ This feature is experimental and implementations SHOULD expect iteration before 4. [Configuration Model](#4-configuration-model) 5. [Built-in Graders](#5-built-in-graders) 6. [Custom Inline Graders](#6-custom-inline-graders) -7. [Execution and Artifacts](#7-execution-and-artifacts) -8. [Experiment Metric References](#8-experiment-metric-references) -9. [Security and Isolation](#9-security-and-isolation) -10. [Compliance Testing](#10-compliance-testing) -11. [Norms](#11-norms) -12. [References](#12-references) -13. [Change Log](#13-change-log) +7. [Operational Value Grader](#7-operational-value-grader) +8. [Execution and Artifacts](#8-execution-and-artifacts) +9. [Experiment Metric References](#9-experiment-metric-references) +10. [Security and Isolation](#10-security-and-isolation) +11. [Compliance Testing](#11-compliance-testing) +12. [Norms](#12-norms) +13. [References](#13-references) +14. [Change Log](#14-change-log) --- @@ -47,7 +48,7 @@ This feature is experimental and implementations SHOULD expect iteration before ### 1.1 Purpose -The `graders` feature provides deterministic quality and behavior metrics derived from workflow trace artifacts without issuing additional LLM calls. +The `graders` feature provides deterministic execution metrics and operational value observations without issuing additional LLM calls. ### 1.2 Scope @@ -56,6 +57,7 @@ This specification covers: - Frontmatter configuration under `graders` - Built-in grader identifiers and semantics - Custom inline grader script requirements +- Operational value function and replay requirements - Output artifact contracts - Experiment metric integration for grader references @@ -69,9 +71,9 @@ This specification does NOT cover: A conforming implementation: -1. MUST compute grader values deterministically from run artifacts. +1. MUST compute grader values deterministically for the same inputs and evidence cutoff. 2. MUST preserve stable grader IDs for experiment references. -3. SHOULD keep grading isolated from network-dependent behavior. +3. MUST keep trace grading isolated from network-dependent behavior. 4. MUST emit machine-readable grader artifacts for downstream tooling. --- @@ -102,7 +104,7 @@ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "S 1. Parse and validate frontmatter `graders`. 2. Build grader manifest and execution spec. 3. Preprocess trace artifacts once. -4. Execute enabled graders (built-in and custom inline). +4. Execute enabled graders (built-in, custom inline, and operational value). 5. Write normalized outputs to grader artifact files. The grading step MUST run with `if: always()` semantics and SHOULD continue even when individual graders fail, recording per-grader errors in results. @@ -127,8 +129,9 @@ The configuration key MUST be `graders`. - Built-in grader entries MAY be `null` to enable defaults. - Custom grader entries MUST be objects and MUST include `script`. +- The reserved `value` entry MUST be an object and MUST include `function`. -Supported object fields include `enabled`, `name`, `description`, `unit`, `direction`, `threshold`, `min`, `max`, `config`, and `script`. +Supported object fields include `enabled`, `name`, `description`, `unit`, `direction`, `threshold`, `min`, `max`, `config`, `script`, and `function`. Only the reserved `value` grader accepts `function`. --- @@ -181,32 +184,54 @@ Inline scripts MUST be rejected if they contain any forbidden pattern, including --- -## 7. Execution and Artifacts +## 7. Operational Value Grader -### 7.1 Output Directory +The reserved grader ID MUST be `value`. It MUST NOT accept an inline `script`. + +The compiler MUST resolve `function` within the repository, reject symlinks and non-regular files, validate Bash syntax prerequisites, freeze the function bytes, and record their SHA-256 digest in the grader manifest and result implementation. + +The function MUST implement `--definition` and `--grade-run`. Its primary `value` MUST be absolute operational attainment in `[0,1]` or `null`. A baseline MAY be frozen separately; gh-aw MUST derive `deltaFromBaseline` and MUST NOT replace the primary value with that delta. + +A value observation MUST include: + +- the complete workflow run subject and run attempt; +- a stable opportunity key and replayable operational case; +- requested evidence time, effective evidence cutoff, and maturity time; +- accepted evidence provenance for every numeric value. + +The effective evidence cutoff MUST NOT follow either the requested evidence time or the maturity time. A replayed observation MUST be identified by `(runId, functionDigest, evidenceAt)`. + +Historical regrading MUST reuse the original case, run subject, and archived function. It MUST verify that the archived function matches the digest recorded by both the original manifest and result before execution. It MUST emit a new observation and MUST NOT mutate the original run artifact. + +--- + +## 8. Execution and Artifacts + +### 8.1 Output Directory Graders output MUST be written under: `/tmp/gh-aw/agent/graders` -### 7.2 Required Files +### 8.2 Required Files The implementation MUST produce: - `grader_manifest.json` - `grader_results.json` +- `value_function.sh` when the `value` grader is enabled -### 7.3 Artifact Inclusion +### 8.3 Artifact Inclusion Both files MUST be included in the unified `agent` artifact. -### 7.4 Deterministic Output Contract +### 8.4 Deterministic Output Contract `grader_results.json` SHOULD include normalized run/result structures suitable for downstream programmatic reads, including per-grader value/status and run-level pass/fail/error counts. --- -## 8. Experiment Metric References +## 9. Experiment Metric References Experiment metric fields MAY reference grader outputs. @@ -241,18 +266,20 @@ semantic task correctness. The normative readiness, decision, and JSON contracts --- -## 9. Security and Isolation +## 10. Security and Isolation - Grading MUST operate on local run artifacts and MUST NOT require outbound network access for built-ins. - Custom inline graders MUST execute in a restricted context with blocked dangerous primitives. +- Value graders MAY access declared repository evidence using `GH_TOKEN`; they MUST NOT receive workflow secrets. +- Historical regrading MUST verify archived function bytes against both digest records before execution. - Implementations SHOULD enforce bounded execution time for inline scripts. - Implementations SHOULD redact grader outputs when custom scripts are enabled to reduce secret leakage risk. --- -## 10. Compliance Testing +## 11. Compliance Testing -### 10.1 Test Suite Requirements +### 11.1 Test Suite Requirements - **T-GRD-001**: Omitted `graders` key disables grading step emission. - **T-GRD-002**: `graders: {}` enables all built-ins. @@ -265,8 +292,11 @@ semantic task correctness. The normative readiness, decision, and JSON contracts - **T-GRD-009**: Grader files are present in `agent` artifact. - **T-GRD-010**: `experiments.*.metric` with `grader:` validates declared enabled grader. - **T-GRD-011**: `experiments.*.metric` with `graders..value` validates declared enabled grader. +- **T-GRD-012**: `graders.value.function` is frozen and its digest is recorded. +- **T-GRD-013**: Value output, evidence cutoff, maturity, and provenance are validated. +- **T-GRD-014**: Historical regrading rejects function or run identity mismatches. -### 10.2 Compliance Checklist +### 11.2 Compliance Checklist | Requirement | Test ID | Level | Status | |---|---|---|---| @@ -276,20 +306,23 @@ semantic task correctness. The normative readiness, decision, and JSON contracts | Script safety constraints enforced | T-GRD-004, T-GRD-005 | 2 | Required | | Required artifact files emitted | T-GRD-007, T-GRD-008 | 1 | Required | | Experiment grader references validate | T-GRD-010, T-GRD-011 | 3 | Required | +| Value functions and observations validate | T-GRD-012, T-GRD-013 | 2 | Required | +| Historical regrading preserves identity | T-GRD-014 | 2 | Required | --- -## 11. Norms +## 12. Norms - **N-GRD-001**: Implementations MUST treat `graders` as experimental. - **N-GRD-002**: Implementations MUST preserve built-in grader ID stability across patch releases. - **N-GRD-003**: Implementations SHOULD preserve deterministic output for identical trace inputs. - **N-GRD-004**: Implementations MUST fail fast on invalid custom grader scripts. - **N-GRD-005**: Implementations MUST keep grader artifact paths stable unless a major version change is issued. +- **N-GRD-006**: Implementations MUST keep operational value separate from execution quality metrics. --- -## 12. References +## 13. References ### Normative References @@ -303,7 +336,12 @@ semantic task correctness. The normative readiness, decision, and JSON contracts --- -## 13. Change Log +## 14. Change Log + +### Version 0.2.0 (Draft Specification) + +- Defines the operational value grader and absolute attainment semantics. +- Defines evidence-bounded historical regrading and observation identity. ### Version 0.1.0 (Draft Specification) diff --git a/pkg/cli/experiments_grader_observations.go b/pkg/cli/experiments_grader_observations.go index 6288c1a975a..11e9f939dec 100644 --- a/pkg/cli/experiments_grader_observations.go +++ b/pkg/cli/experiments_grader_observations.go @@ -62,13 +62,50 @@ type graderMetricObservationSet struct { type graderResultsArtifact struct { Version int `json:"version"` + Run graderArtifactRun `json:"run"` Results []graderArtifactResult `json:"results"` } +type graderArtifactRun struct { + ID string `json:"id"` + Attempt int `json:"attempt"` +} + type graderArtifactResult struct { - ID string `json:"id"` - Status string `json:"status"` - Value json.RawMessage `json:"value"` + ID string `json:"id"` + Status string `json:"status"` + Value json.RawMessage `json:"value"` + Observation *graderArtifactObservation `json:"observation,omitempty"` + Implementation graderArtifactImplementation `json:"implementation"` +} + +type graderArtifactObservation struct { + Subject graderArtifactSubject `json:"subject"` + OpportunityKey string `json:"opportunityKey"` + EvidenceAt string `json:"evidenceAt"` + EvidenceCutoff string `json:"evidenceCutoff"` + MaturesAt string `json:"maturesAt"` + Mature bool `json:"mature"` + Case map[string]any `json:"case"` + Provenance []map[string]any `json:"provenance"` +} + +type graderArtifactSubject struct { + Type string `json:"type"` + RunID string `json:"runId"` + Attempt int `json:"attempt"` + Repository string `json:"repository"` + Workflow string `json:"workflow"` + Ref string `json:"ref"` + SHA string `json:"sha"` + EventName string `json:"eventName"` + CreatedAt *string `json:"createdAt"` +} + +type graderArtifactImplementation struct { + ID string `json:"id"` + Version int `json:"version"` + Digest string `json:"digest,omitempty"` } type graderRunData struct { diff --git a/pkg/cli/graders_command.go b/pkg/cli/graders_command.go new file mode 100644 index 00000000000..97dd1134963 --- /dev/null +++ b/pkg/cli/graders_command.go @@ -0,0 +1,52 @@ +package cli + +import ( + "errors" + "strconv" + + "github.com/github/gh-aw/pkg/constants" + "github.com/spf13/cobra" +) + +// NewGradersCommand creates commands for inspecting and replaying workflow graders. +func NewGradersCommand() *cobra.Command { + cmd := &cobra.Command{ + Use: "graders", + Short: "Inspect and replay workflow graders", + } + cmd.AddCommand(newGradersValueCommand()) + return cmd +} + +func newGradersValueCommand() *cobra.Command { + cmd := &cobra.Command{ + Use: "value ", + Short: "Regrade a workflow run's operational value", + Long: `Regrade the value observation from a completed workflow run at an explicit +evidence cutoff. The command verifies and executes the exact value function archived +by the run. The original artifact is not modified.`, + Example: ` ` + string(constants.CLIExtensionPrefix) + ` graders value 123456789 \ + --evidence-at 2026-08-30T12:00:00.000Z --json`, + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + runID, err := strconv.ParseInt(args[0], 10, 64) + if err != nil || runID <= 0 { + return errors.New("run ID must be a positive integer") + } + evidenceAt, _ := cmd.Flags().GetString("evidence-at") + repoOverride, _ := cmd.Flags().GetString("repo") + jsonOutput, _ := cmd.Flags().GetBool("json") + return RunValueRegrade(cmd.Context(), ValueRegradeConfig{ + RunID: runID, + EvidenceAt: evidenceAt, + RepoOverride: repoOverride, + JSONOutput: jsonOutput, + }) + }, + } + cmd.Flags().String("evidence-at", "", "UTC evidence cutoff for this observation") + _ = cmd.MarkFlagRequired("evidence-at") + addRepoFlag(cmd) + addJSONFlag(cmd) + return cmd +} diff --git a/pkg/cli/graders_value_regrade.go b/pkg/cli/graders_value_regrade.go new file mode 100644 index 00000000000..ff051b7321d --- /dev/null +++ b/pkg/cli/graders_value_regrade.go @@ -0,0 +1,635 @@ +package cli + +import ( + "bytes" + "context" + "crypto/sha256" + "encoding/hex" + "encoding/json" + "errors" + "fmt" + "io" + "math" + "os" + "os/exec" + "path/filepath" + "strconv" + "strings" + "time" + "unicode/utf8" + + "github.com/github/gh-aw/pkg/console" + "github.com/github/gh-aw/pkg/constants" + "github.com/github/gh-aw/pkg/repoutil" +) + +const ( + maxValueRegradeFunctionBytes = 64 * 1024 + maxValueRegradeOutputBytes = 1024 * 1024 + valueDefinitionTimeout = 5 * time.Second + valueFunctionTimeout = 2 * time.Minute +) + +// ValueRegradeConfig configures historical value regrading. +type ValueRegradeConfig struct { + RunID int64 + EvidenceAt string + RepoOverride string + JSONOutput bool +} + +type valueGraderManifest struct { + Version int `json:"version"` + Graders []valueGraderManifestEntry `json:"graders"` +} + +type valueGraderManifestEntry struct { + ID string `json:"id"` + Name string `json:"name"` + Source string `json:"source"` + Enabled bool `json:"enabled"` + Unit string `json:"unit,omitempty"` + Direction string `json:"direction,omitempty"` + Threshold *float64 `json:"threshold,omitempty"` + Digest string `json:"digest"` + Function string `json:"function"` + Config map[string]any `json:"config,omitempty"` +} + +type valueRunSubject struct { + ID string `json:"id"` + Attempt int `json:"attempt"` + Repository string `json:"repository"` + Workflow string `json:"workflow"` + Ref string `json:"ref"` + SHA string `json:"sha"` + EventName string `json:"eventName"` + CreatedAt *string `json:"createdAt"` +} + +type valueRunRequest struct { + SchemaVersion int `json:"schemaVersion"` + Run valueRunSubject `json:"run"` + EvidenceAt string `json:"evidenceAt"` + Case map[string]any `json:"case"` + Event any `json:"event"` + Config map[string]any `json:"config"` +} + +type valueRegradeObservation struct { + Subject graderArtifactSubject `json:"subject"` + OpportunityKey string `json:"opportunityKey"` + EvidenceAt string `json:"evidenceAt"` + EvidenceCutoff string `json:"evidenceCutoff"` + MaturesAt string `json:"maturesAt"` + Mature bool `json:"mature"` + Case map[string]any `json:"case"` + Provenance []map[string]any `json:"provenance"` +} + +type valueRegradeResult struct { + ID string `json:"id"` + Name string `json:"name"` + Value *float64 `json:"value"` + Unit string `json:"unit"` + Passed *bool `json:"passed"` + Status string `json:"status"` + Source string `json:"source"` + Message string `json:"message,omitempty"` + Observation valueRegradeObservation `json:"observation"` + Diagnostics map[string]any `json:"diagnostics,omitempty"` + BaselineValue *float64 `json:"baselineValue"` + DeltaFromBaseline *float64 `json:"deltaFromBaseline"` + Implementation graderArtifactImplementation `json:"implementation"` +} + +type valueRegradeMetadata struct { + Identity valueRegradeIdentity `json:"identity"` + OriginalEvidenceAt string `json:"originalEvidenceAt"` +} + +type valueRegradeIdentity struct { + RunID string `json:"runId"` + FunctionDigest string `json:"functionDigest"` + EvidenceAt string `json:"evidenceAt"` +} + +type valueRegradeArtifact struct { + Version int `json:"version"` + Run graderArtifactRun `json:"run"` + Regrade valueRegradeMetadata `json:"regrade"` + Results []valueRegradeResult `json:"results"` +} + +type valueFunctionExecution struct { + Value *float64 + Message string + Diagnostics map[string]any + Observation valueRegradeObservation + BaselineValue *float64 + DeltaFromBaseline *float64 +} + +type boundedCommandBuffer struct { + bytes.Buffer + limit int + exceeded bool +} + +func (b *boundedCommandBuffer) Write(data []byte) (int, error) { + written := len(data) + remaining := b.limit - b.Len() + if remaining > 0 { + if len(data) < remaining { + remaining = len(data) + } + _, _ = b.Buffer.Write(data[:remaining]) + } + if written > remaining { + b.exceeded = true + } + return written, nil +} + +// RunValueRegrade downloads a historical grader observation and recomputes it as of EvidenceAt. +func RunValueRegrade(ctx context.Context, config ValueRegradeConfig) error { + evidenceAt, err := parseValueTimestamp(config.EvidenceAt, "evidence-at") + if err != nil { + return err + } + repoSlug, artifactRepo, err := resolveValueRegradeRepo(config.RepoOverride) + if err != nil { + return err + } + + tempDir, err := os.MkdirTemp("", "gh-aw-value-regrade-*") + if err != nil { + return fmt.Errorf("failed to create value regrade directory: %w", err) + } + defer os.RemoveAll(tempDir) + + runIDText := strconv.FormatInt(config.RunID, 10) + source := newGitHubGraderRunArtifactSource(tempDir, artifactRepo) + runData := source.downloadGraderArtifact(ctx, config.RunID, runIDText) + if runData.ExclusionReason != "" { + return fmt.Errorf("cannot regrade run %d: grader artifact %s", config.RunID, runData.ExclusionReason) + } + runDir := filepath.Join(tempDir, runIDText) + functionContent, functionDigest, err := readArchivedValueFunction(runDir) + if err != nil { + return err + } + manifest, err := readValueGraderManifest(runDir) + if err != nil { + return err + } + manifestEntry, originalResult, err := selectHistoricalValueGrader(manifest, runData.Artifact, runIDText) + if err != nil { + return err + } + if err := verifyHistoricalValueIdentity(repoSlug, functionDigest, manifestEntry, originalResult, runData.Artifact.Run, runIDText); err != nil { + return err + } + + execution, err := executeHistoricalValueFunction(ctx, functionContent, *manifestEntry, *originalResult.Observation, config.EvidenceAt, evidenceAt) + if err != nil { + return err + } + artifact := buildValueRegradeArtifact(runData.Artifact.Run, *manifestEntry, *originalResult, functionDigest, execution) + return renderValueRegradeArtifact(artifact, config.JSONOutput) +} + +func resolveValueRegradeRepo(repoOverride string) (repoSlug, artifactRepo string, err error) { + if repoOverride == "" { + repoSlug, err = GetCurrentRepoSlug() + return repoSlug, "", err + } + ownerRepo, _ := repoutil.NormalizeRepoForAPI(repoOverride) + owner, repo, splitErr := repoutil.SplitRepoSlug(ownerRepo) + if splitErr != nil { + return "", "", fmt.Errorf("invalid --repo %q: expected [HOST/]owner/repo", repoOverride) + } + return strings.Join([]string{owner, repo}, "/"), repoOverride, nil +} + +func readArchivedValueFunction(runDir string) (string, string, error) { + functionPath := filepath.Join(runDir, "agent", "graders", constants.ValueGraderFunctionFilename) + if _, err := os.Stat(functionPath); err != nil { + functionPath = filepath.Join(runDir, "graders", constants.ValueGraderFunctionFilename) + } + file, err := os.Open(functionPath) + if err != nil { + return "", "", fmt.Errorf("cannot read archived value function: %w", err) + } + defer file.Close() + info, err := file.Stat() + if err != nil { + return "", "", fmt.Errorf("cannot inspect archived value function: %w", err) + } + if !info.Mode().IsRegular() { + return "", "", errors.New("archived value function must be a regular file") + } + content, err := io.ReadAll(io.LimitReader(file, maxValueRegradeFunctionBytes+1)) + if err != nil { + return "", "", fmt.Errorf("cannot read archived value function: %w", err) + } + if len(content) > maxValueRegradeFunctionBytes { + return "", "", fmt.Errorf("archived value function exceeds the %d-byte limit", maxValueRegradeFunctionBytes) + } + if !utf8.Valid(content) { + return "", "", errors.New("archived value function must be valid UTF-8") + } + functionContent := string(content) + if !strings.HasPrefix(functionContent, "#!/usr/bin/env bash\n") && !strings.HasPrefix(functionContent, "#!/bin/bash\n") { + return "", "", errors.New("archived value function must start with a Bash shebang") + } + digest := sha256.Sum256(content) + return functionContent, hex.EncodeToString(digest[:]), nil +} + +func readValueGraderManifest(runDir string) (*valueGraderManifest, error) { + manifestPath := filepath.Join(runDir, "agent", "graders", constants.GraderManifestFilename) + if _, err := os.Stat(manifestPath); err != nil { + manifestPath = filepath.Join(runDir, "graders", constants.GraderManifestFilename) + } + file, err := os.Open(manifestPath) + if err != nil { + return nil, fmt.Errorf("cannot read grader manifest: %w", err) + } + defer file.Close() + data, err := io.ReadAll(io.LimitReader(file, maxGraderResultsBytes+1)) + if err != nil { + return nil, fmt.Errorf("cannot read grader manifest: %w", err) + } + if len(data) > maxGraderResultsBytes { + return nil, fmt.Errorf("grader manifest exceeds the %d-byte limit", maxGraderResultsBytes) + } + var manifest valueGraderManifest + if err := json.Unmarshal(data, &manifest); err != nil || manifest.Version <= 0 { + return nil, errors.New("grader manifest is malformed") + } + return &manifest, nil +} + +func selectHistoricalValueGrader(manifest *valueGraderManifest, artifact *graderResultsArtifact, runID string) (*valueGraderManifestEntry, *graderArtifactResult, error) { + if manifest == nil || artifact == nil { + return nil, nil, fmt.Errorf("run %s has no grader data", runID) + } + var manifestEntry *valueGraderManifestEntry + for index := range manifest.Graders { + if manifest.Graders[index].ID != "value" { + continue + } + if manifestEntry != nil { + return nil, nil, fmt.Errorf("run %s grader manifest contains duplicate value graders", runID) + } + manifestEntry = &manifest.Graders[index] + } + var result *graderArtifactResult + for index := range artifact.Results { + if artifact.Results[index].ID != "value" { + continue + } + if result != nil { + return nil, nil, fmt.Errorf("run %s grader artifact contains duplicate value results", runID) + } + result = &artifact.Results[index] + } + if manifestEntry == nil || !manifestEntry.Enabled || manifestEntry.Source != "value" { + return nil, nil, fmt.Errorf("run %s did not use an enabled value grader", runID) + } + if result == nil || result.Observation == nil { + return nil, nil, fmt.Errorf("run %s has no replayable value observation", runID) + } + return manifestEntry, result, nil +} + +func verifyHistoricalValueIdentity(repoSlug, functionDigest string, manifest *valueGraderManifestEntry, result *graderArtifactResult, run graderArtifactRun, runID string) error { + if run.ID != runID || run.Attempt <= 0 { + return fmt.Errorf("grader artifact run identity does not match run %s", runID) + } + if manifest.Digest == "" || result.Implementation.Digest == "" || manifest.Digest != result.Implementation.Digest { + return fmt.Errorf("run %s has inconsistent value function provenance", runID) + } + if functionDigest != manifest.Digest { + return fmt.Errorf("value function digest mismatch: run %s recorded %s, local function is %s", runID, manifest.Digest, functionDigest) + } + subject := result.Observation.Subject + if subject.Type != "workflow-run" || subject.RunID != runID || subject.Attempt != run.Attempt { + return fmt.Errorf("value observation subject does not match run %s attempt %d", runID, run.Attempt) + } + if subject.Repository == "" || subject.Repository != repoSlug { + return fmt.Errorf("value observation repository %q does not match %q", subject.Repository, repoSlug) + } + if result.Observation.Case == nil { + return fmt.Errorf("run %s value observation has no replayable case", runID) + } + return nil +} + +func executeHistoricalValueFunction(ctx context.Context, functionContent string, manifest valueGraderManifestEntry, original graderArtifactObservation, evidenceAtText string, evidenceAt time.Time) (*valueFunctionExecution, error) { + bashPath := "/bin/bash" + if _, err := os.Stat(bashPath); err != nil { + return nil, fmt.Errorf("bash is required to regrade value: %w", err) + } + tempDir, err := os.MkdirTemp("", "gh-aw-value-function-*") + if err != nil { + return nil, fmt.Errorf("failed to create value function directory: %w", err) + } + defer os.RemoveAll(tempDir) + functionPath := filepath.Join(tempDir, "value.sh") + if err := os.WriteFile(functionPath, []byte(functionContent), constants.FilePermExecutable); err != nil { + return nil, fmt.Errorf("failed to stage value function: %w", err) + } + if _, err := runValueBash(ctx, bashPath, functionPath, []string{"-n", functionPath}, nil, valueDefinitionTimeout); err != nil { + return nil, fmt.Errorf("value function has invalid Bash syntax: %w", err) + } + definitionJSON, err := runValueBash(ctx, bashPath, functionPath, []string{functionPath, "--definition"}, nil, valueDefinitionTimeout) + if err != nil { + return nil, fmt.Errorf("value function --definition failed: %w", err) + } + baselineValue, err := parseValueDefinition(definitionJSON) + if err != nil { + return nil, err + } + functionConfig := manifest.Config + if functionConfig == nil { + functionConfig = map[string]any{} + } + request := valueRunRequest{ + SchemaVersion: 1, + Run: valueRunSubject{ + ID: original.Subject.RunID, + Attempt: original.Subject.Attempt, + Repository: original.Subject.Repository, + Workflow: original.Subject.Workflow, + Ref: original.Subject.Ref, + SHA: original.Subject.SHA, + EventName: original.Subject.EventName, + CreatedAt: original.Subject.CreatedAt, + }, + EvidenceAt: evidenceAtText, + Case: original.Case, + Event: nil, + Config: functionConfig, + } + requestJSON, err := json.Marshal(request) + if err != nil { + return nil, fmt.Errorf("failed to encode value regrade request: %w", err) + } + outputJSON, err := runValueBash(ctx, bashPath, functionPath, []string{functionPath, "--grade-run"}, requestJSON, valueFunctionTimeout) + if err != nil { + return nil, fmt.Errorf("value function --grade-run failed: %w", err) + } + return parseValueFunctionOutput(outputJSON, original.Subject, evidenceAtText, evidenceAt, baselineValue) +} + +func runValueBash(ctx context.Context, bashPath, functionPath string, args []string, input []byte, timeout time.Duration) ([]byte, error) { + commandCtx, cancel := context.WithTimeout(ctx, timeout) + defer cancel() + cmd := exec.CommandContext(commandCtx, bashPath, args...) + cmd.Dir = filepath.Dir(functionPath) + cmd.Env = valueFunctionEnvironment() + cmd.Stdin = bytes.NewReader(input) + stdout := &boundedCommandBuffer{limit: maxValueRegradeOutputBytes} + stderr := &boundedCommandBuffer{limit: maxValueRegradeOutputBytes} + cmd.Stdout = stdout + cmd.Stderr = stderr + err := cmd.Run() + if errors.Is(commandCtx.Err(), context.DeadlineExceeded) { + return nil, fmt.Errorf("timed out after %s", timeout) + } + if stdout.exceeded || stderr.exceeded { + return nil, fmt.Errorf("output exceeded the %d-byte limit", maxValueRegradeOutputBytes) + } + if err != nil { + message := strings.TrimSpace(stderr.String()) + if message != "" { + return nil, errors.New(message) + } + return nil, err + } + return stdout.Bytes(), nil +} + +func valueFunctionEnvironment() []string { + keys := []string{ + "PATH", "HOME", "TMPDIR", "TEMP", "TMP", "SystemRoot", "ComSpec", + "GH_TOKEN", "GH_HOST", "GITHUB_API_URL", "GITHUB_SERVER_URL", + } + env := make([]string, 0, len(keys)) + for _, key := range keys { + if value, ok := os.LookupEnv(key); ok && value != "" { + env = append(env, key+"="+value) + } + } + return env +} + +func parseValueDefinition(data []byte) (*float64, error) { + var definition struct { + SchemaVersion int `json:"schemaVersion"` + Grader string `json:"grader"` + Baseline struct { + Mode string `json:"mode"` + Value json.RawMessage `json:"value"` + } `json:"baseline"` + } + if err := json.Unmarshal(data, &definition); err != nil { + return nil, fmt.Errorf("value function returned an invalid definition: %w", err) + } + if definition.SchemaVersion != 4 || definition.Grader != "value" { + return nil, errors.New("value function definition must use schemaVersion 4 and grader \"value\"") + } + valueJSON := bytes.TrimSpace(definition.Baseline.Value) + switch definition.Baseline.Mode { + case "attainment-only": + if !bytes.Equal(valueJSON, []byte("null")) { + return nil, errors.New("attainment-only value functions must have a null baseline value") + } + return nil, nil + case "baseline-comparable": + value, err := parseNullableValue(valueJSON) + if err != nil || value == nil || *value < 0 || *value > 1 { + return nil, errors.New("baseline-comparable value functions require a baseline value in [0,1]") + } + return value, nil + default: + return nil, errors.New("value function baseline mode must be \"baseline-comparable\" or \"attainment-only\"") + } +} + +func parseValueFunctionOutput(data []byte, subject graderArtifactSubject, evidenceAtText string, evidenceAt time.Time, baselineValue *float64) (*valueFunctionExecution, error) { + var fields map[string]json.RawMessage + if err := json.Unmarshal(data, &fields); err != nil || fields == nil { + return nil, errors.New("value function returned invalid JSON") + } + value, err := parseNullableValue(fields["value"]) + if err != nil || (value != nil && (*value < 0 || *value > 1)) { + return nil, errors.New("value function value must be null or a finite number in [0,1]") + } + var caseValue map[string]any + if err := json.Unmarshal(fields["case"], &caseValue); err != nil || caseValue == nil { + return nil, errors.New("value function output.case must be an object") + } + var opportunityKey, evidenceCutoffText, maturesAtText string + if err := json.Unmarshal(fields["opportunityKey"], &opportunityKey); err != nil || strings.TrimSpace(opportunityKey) == "" { + return nil, errors.New("value function opportunityKey must be a non-empty string") + } + if err := json.Unmarshal(fields["evidenceCutoff"], &evidenceCutoffText); err != nil { + return nil, errors.New("value function evidenceCutoff must be a UTC ISO-8601 timestamp") + } + if err := json.Unmarshal(fields["maturesAt"], &maturesAtText); err != nil { + return nil, errors.New("value function maturesAt must be a UTC ISO-8601 timestamp") + } + evidenceCutoff, err := parseValueTimestamp(evidenceCutoffText, "evidenceCutoff") + if err != nil { + return nil, err + } + maturesAt, err := parseValueTimestamp(maturesAtText, "maturesAt") + if err != nil { + return nil, err + } + if evidenceCutoff.After(evidenceAt) { + return nil, errors.New("value function evidenceCutoff cannot follow evidenceAt") + } + if evidenceCutoff.After(maturesAt) { + return nil, errors.New("value function evidenceCutoff cannot follow maturesAt") + } + var provenance []map[string]any + if err := json.Unmarshal(fields["provenance"], &provenance); err != nil || (value != nil && len(provenance) == 0) { + return nil, errors.New("value function must return provenance for a numeric value") + } + for _, item := range provenance { + for _, key := range []string{"repository", "kind", "ref"} { + text, ok := item[key].(string) + if !ok || text == "" { + return nil, errors.New("value function provenance entries require repository, kind, and ref") + } + } + } + var message string + _ = json.Unmarshal(fields["message"], &message) + var diagnostics map[string]any + _ = json.Unmarshal(fields["diagnostics"], &diagnostics) + var delta *float64 + if value != nil && baselineValue != nil { + computed := *value - *baselineValue + delta = &computed + } + return &valueFunctionExecution{ + Value: value, + Message: message, + Diagnostics: diagnostics, + Observation: valueRegradeObservation{ + Subject: subject, + OpportunityKey: opportunityKey, + EvidenceAt: evidenceAtText, + EvidenceCutoff: evidenceCutoffText, + MaturesAt: maturesAtText, + Mature: !evidenceAt.Before(maturesAt), + Case: caseValue, + Provenance: provenance, + }, + BaselineValue: baselineValue, + DeltaFromBaseline: delta, + }, nil +} + +func parseNullableValue(data []byte) (*float64, error) { + data = bytes.TrimSpace(data) + if bytes.Equal(data, []byte("null")) { + return nil, nil + } + var value float64 + if len(data) == 0 || json.Unmarshal(data, &value) != nil || math.IsNaN(value) || math.IsInf(value, 0) { + return nil, errors.New("expected a finite number or null") + } + return &value, nil +} + +func parseValueTimestamp(value, label string) (time.Time, error) { + for _, layout := range []string{"2006-01-02T15:04:05Z", "2006-01-02T15:04:05.000Z"} { + if parsed, err := time.Parse(layout, value); err == nil { + return parsed, nil + } + } + return time.Time{}, fmt.Errorf("%s must be a UTC ISO-8601 timestamp", label) +} + +func buildValueRegradeArtifact(run graderArtifactRun, manifest valueGraderManifestEntry, original graderArtifactResult, digest string, execution *valueFunctionExecution) valueRegradeArtifact { + passed := evaluateValueThreshold(execution.Value, manifest.Direction, manifest.Threshold) + status := "unavailable" + if execution.Value != nil { + status = "pass" + if passed != nil && !*passed { + status = "fail" + } + } + return valueRegradeArtifact{ + Version: 1, + Run: run, + Regrade: valueRegradeMetadata{ + Identity: valueRegradeIdentity{ + RunID: run.ID, + FunctionDigest: digest, + EvidenceAt: execution.Observation.EvidenceAt, + }, + OriginalEvidenceAt: original.Observation.EvidenceAt, + }, + Results: []valueRegradeResult{{ + ID: "value", + Name: manifest.Name, + Value: execution.Value, + Unit: manifest.Unit, + Passed: passed, + Status: status, + Source: "value", + Message: execution.Message, + Observation: execution.Observation, + Diagnostics: execution.Diagnostics, + BaselineValue: execution.BaselineValue, + DeltaFromBaseline: execution.DeltaFromBaseline, + Implementation: graderArtifactImplementation{ + ID: "gh-aw-graders-value-regrade", + Version: 1, + Digest: digest, + }, + }}, + } +} + +func evaluateValueThreshold(value *float64, direction string, threshold *float64) *bool { + if value == nil || threshold == nil { + return nil + } + passed := *value >= *threshold + if direction == "lower_is_better" { + passed = *value <= *threshold + } + return &passed +} + +func renderValueRegradeArtifact(artifact valueRegradeArtifact, jsonOutput bool) error { + result := artifact.Results[0] + if jsonOutput { + data, err := marshalIndentJSONOrWrap(artifact, "value regrade observation") + if err != nil { + return err + } + fmt.Fprintln(os.Stdout, string(data)) + return nil + } + value := "null" + if result.Value != nil { + value = strconv.FormatFloat(*result.Value, 'f', -1, 64) + } + fmt.Fprintln(os.Stdout, console.FormatSuccessMessage(fmt.Sprintf("Regraded value for run %s: %s", artifact.Run.ID, value))) + fmt.Fprintf(os.Stdout, "Evidence cutoff: %s\n", result.Observation.EvidenceCutoff) + fmt.Fprintf(os.Stdout, "Mature: %t\n", result.Observation.Mature) + if result.BaselineValue != nil { + fmt.Fprintf(os.Stdout, "Baseline value: %s\n", strconv.FormatFloat(*result.BaselineValue, 'f', -1, 64)) + fmt.Fprintf(os.Stdout, "Delta from baseline: %s\n", strconv.FormatFloat(*result.DeltaFromBaseline, 'f', -1, 64)) + } + return nil +} diff --git a/pkg/cli/graders_value_regrade_test.go b/pkg/cli/graders_value_regrade_test.go new file mode 100644 index 00000000000..89c69e6604c --- /dev/null +++ b/pkg/cli/graders_value_regrade_test.go @@ -0,0 +1,139 @@ +package cli + +import ( + "context" + "strings" + "testing" + "time" +) + +func historicalValueFixture() (valueGraderManifestEntry, graderArtifactResult, graderArtifactRun) { + digest := strings.Repeat("a", 64) + createdAt := "2026-08-23T11:58:00Z" + manifest := valueGraderManifestEntry{ + ID: "value", + Name: "Operational value", + Source: "value", + Enabled: true, + Direction: "higher_is_better", + Digest: digest, + Config: map[string]any{"window": "7d"}, + } + result := graderArtifactResult{ + ID: "value", + Implementation: graderArtifactImplementation{ + ID: "gh-aw-graders", + Version: 1, + Digest: digest, + }, + Observation: &graderArtifactObservation{ + Subject: graderArtifactSubject{ + Type: "workflow-run", + RunID: "12345", + Attempt: 2, + Repository: "github/gh-aw", + Workflow: "Example", + Ref: "refs/heads/main", + SHA: "0123456789abcdef", + EventName: "schedule", + CreatedAt: &createdAt, + }, + EvidenceAt: "2026-08-24T12:00:00Z", + Case: map[string]any{"issue": float64(42)}, + }, + } + return manifest, result, graderArtifactRun{ID: "12345", Attempt: 2} +} + +func TestVerifyHistoricalValueIdentity(t *testing.T) { + manifest, result, run := historicalValueFixture() + if err := verifyHistoricalValueIdentity("github/gh-aw", manifest.Digest, &manifest, &result, run, run.ID); err != nil { + t.Fatalf("expected valid identity, got %v", err) + } + + t.Run("digest mismatch", func(t *testing.T) { + err := verifyHistoricalValueIdentity("github/gh-aw", strings.Repeat("b", 64), &manifest, &result, run, run.ID) + if err == nil || !strings.Contains(err.Error(), "digest mismatch") { + t.Fatalf("expected digest mismatch, got %v", err) + } + }) + + t.Run("repository mismatch", func(t *testing.T) { + err := verifyHistoricalValueIdentity("github/other", manifest.Digest, &manifest, &result, run, run.ID) + if err == nil || !strings.Contains(err.Error(), "repository") { + t.Fatalf("expected repository mismatch, got %v", err) + } + }) +} + +func TestExecuteHistoricalValueFunction(t *testing.T) { + manifest, result, _ := historicalValueFixture() + manifest.Config = nil + functionContent := `#!/usr/bin/env bash +set -euo pipefail +case ${1:-} in +--definition) + printf '%s\n' '{"schemaVersion":4,"grader":"value","baseline":{"mode":"baseline-comparable","value":0.25}}' + ;; +--grade-run) + request=$(cat) + [[ "$request" == *'"evidenceAt":"2026-09-01T12:00:00Z"'* ]] + [[ "$request" == *'"case":{"issue":42}'* ]] + [[ "$request" == *'"config":{}'* ]] + printf '%s\n' '{"value":0.75,"opportunityKey":"issue:42","case":{"issue":42},"evidenceCutoff":"2026-08-30T12:00:00Z","maturesAt":"2026-08-30T12:00:00Z","provenance":[{"repository":"github/gh-aw","kind":"issue","ref":"42"}]}' + ;; +*) exit 1 ;; +esac +` + evidenceAt, err := parseValueTimestamp("2026-09-01T12:00:00Z", "evidence-at") + if err != nil { + t.Fatal(err) + } + execution, err := executeHistoricalValueFunction( + context.Background(), functionContent, manifest, *result.Observation, + "2026-09-01T12:00:00Z", evidenceAt, + ) + if err != nil { + t.Fatalf("executeHistoricalValueFunction() error = %v", err) + } + if execution.Value == nil || *execution.Value != 0.75 { + t.Fatalf("value = %v, want 0.75", execution.Value) + } + if execution.DeltaFromBaseline == nil || *execution.DeltaFromBaseline != 0.5 { + t.Fatalf("delta = %v, want 0.5", execution.DeltaFromBaseline) + } + if !execution.Observation.Mature || execution.Observation.Subject.RunID != "12345" { + t.Fatalf("unexpected replay observation: %+v", execution.Observation) + } +} + +func TestParseValueFunctionOutputRejectsFutureEvidence(t *testing.T) { + evidenceAt, err := time.Parse(time.RFC3339, "2026-08-24T12:00:00Z") + if err != nil { + t.Fatal(err) + } + _, err = parseValueFunctionOutput([]byte(`{ + "value": 1, + "opportunityKey": "issue:42", + "case": {"issue": 42}, + "evidenceCutoff": "2026-08-25T12:00:00Z", + "maturesAt": "2026-08-30T12:00:00Z", + "provenance": [{"repository":"github/gh-aw","kind":"issue","ref":"42"}] +}`), graderArtifactSubject{}, "2026-08-24T12:00:00Z", evidenceAt, nil) + if err == nil || !strings.Contains(err.Error(), "cannot follow evidenceAt") { + t.Fatalf("expected future evidence rejection, got %v", err) + } +} + +func TestNewGradersCommand(t *testing.T) { + command := NewGradersCommand() + valueCommand, _, err := command.Find([]string{"value"}) + if err != nil { + t.Fatal(err) + } + for _, name := range []string{"evidence-at", "repo", "json"} { + if valueCommand.Flags().Lookup(name) == nil { + t.Fatalf("value command missing --%s", name) + } + } +} diff --git a/pkg/constants/job_constants.go b/pkg/constants/job_constants.go index 4a2c316f899..702a8ed9f76 100644 --- a/pkg/constants/job_constants.go +++ b/pkg/constants/job_constants.go @@ -140,6 +140,9 @@ const GraderManifestFilename = "grader_manifest.json" // by trace_graders.cjs. Contains deterministic metric values computed from trace files. const GraderResultsFilename = "grader_results.json" +// ValueGraderFunctionFilename is the filename of the frozen value function archived for replay. +const ValueGraderFunctionFilename = "value_function.sh" + // GradersDir is the subdirectory under TmpGhAwAgentDir where grader output files are written. const GradersDir = TmpGhAwDir + "/agent/graders" diff --git a/pkg/parser/schema_test.go b/pkg/parser/schema_test.go index 572edf34215..9ec2fe9efdb 100644 --- a/pkg/parser/schema_test.go +++ b/pkg/parser/schema_test.go @@ -1044,6 +1044,23 @@ func TestValidateMainWorkflowFrontmatterWithSchemaAndLocation_SandboxAgentPlatfo }) } +func TestValidateMainWorkflowFrontmatterWithSchemaAndLocation_ValueGrader(t *testing.T) { + t.Parallel() + + frontmatter := map[string]any{ + "on": "workflow_dispatch", + "graders": map[string]any{ + "value": map[string]any{ + "function": ".github/graders/value.sh", + }, + }, + } + + if err := ValidateMainWorkflowFrontmatterWithSchemaAndLocation(frontmatter, "/tmp/gh-aw/value-grader-test.md"); err != nil { + t.Fatalf("expected value grader function to pass schema validation, got: %v", err) + } +} + func TestMainWorkflowSchema_WorkflowDispatchNumberTypeDocumentation(t *testing.T) { t.Parallel() diff --git a/pkg/parser/schemas/main_workflow_schema.json b/pkg/parser/schemas/main_workflow_schema.json index acba0e34a8e..37f2beef26e 100644 --- a/pkg/parser/schemas/main_workflow_schema.json +++ b/pkg/parser/schemas/main_workflow_schema.json @@ -12849,7 +12849,7 @@ "examples": ["gpt-5.4", "claude-3-5-sonnet-20241022", "gpt-4"] }, "graders": { - "description": "\u26a0\ufe0f Experimental. Deterministic graders to compute post-agent metrics from execution artifacts. Map keys are grader IDs. Built-in graders can be configured by ID; custom graders require a script.", + "description": "\u26a0\ufe0f Experimental. Deterministic graders for workflow-run observations. Built-in graders use execution artifacts, custom graders use inline scripts, and the value grader uses a repository function.", "type": "object", "propertyNames": { "pattern": "^[a-z][a-z0-9-]{0,63}$", @@ -12908,6 +12908,11 @@ "minLength": 1, "maxLength": 4096, "description": "Custom grader JavaScript script body (trusted workflows only)." + }, + "function": { + "type": "string", + "pattern": "^\\.github/graders/.+\\.sh$", + "description": "Repository-relative Bash function for the value grader. Supported only for the reserved value grader ID." } } } diff --git a/pkg/workflow/compiler.go b/pkg/workflow/compiler.go index 3851e5d3768..67ae5580abd 100644 --- a/pkg/workflow/compiler.go +++ b/pkg/workflow/compiler.go @@ -99,6 +99,10 @@ func (c *Compiler) configureGHESCompatibility() { // - validatePermissions: permissions parsing, MCP tool constraints, workflow_run security // - validateToolConfiguration: safe-outputs, GitHub tools, dispatches, and resources func (c *Compiler) validateWorkflowData(workflowData *WorkflowData, markdownPath string) error { + if err := c.prepareValueGrader(workflowData, markdownPath); err != nil { + return formatCompilerError(markdownPath, "error", err.Error(), err) + } + if err := validateRunnerConfig(workflowData.RunnerConfig); err != nil { return formatCompilerError(markdownPath, "error", err.Error(), err) } diff --git a/pkg/workflow/compiler_yaml_artifacts.go b/pkg/workflow/compiler_yaml_artifacts.go index 2f91bb04eb1..bbd1102a23e 100644 --- a/pkg/workflow/compiler_yaml_artifacts.go +++ b/pkg/workflow/compiler_yaml_artifacts.go @@ -81,6 +81,7 @@ func (c *Compiler) generateAgentOutputFallbackUpload(yaml *strings.Builder, data paths = append(paths, constants.GradersDirSlash+constants.GraderManifestFilename, constants.GradersDirSlash+constants.GraderResultsFilename, + constants.GradersDirSlash+constants.ValueGraderFunctionFilename, ) } diff --git a/pkg/workflow/compiler_yaml_graders.go b/pkg/workflow/compiler_yaml_graders.go index 9002fcffae4..404bef931b1 100644 --- a/pkg/workflow/compiler_yaml_graders.go +++ b/pkg/workflow/compiler_yaml_graders.go @@ -53,6 +53,10 @@ func (c *Compiler) generateGradersStep(yaml *strings.Builder, data *WorkflowData yaml.WriteString(" setupGlobals(core, github, context, exec, io, getOctokit);\n") yaml.WriteString(" const { main } = require('" + SetupActionDestination + "/trace_graders.cjs');\n") fmt.Fprintf(yaml, " await main('%s', '%s');\n", manifestB64, execB64) + if valueGrader, ok := data.Graders.Graders["value"]; ok && (valueGrader.Enabled == nil || *valueGrader.Enabled) { + yaml.WriteString(" env:\n") + yaml.WriteString(" GH_TOKEN: ${{ github.token }}\n") + } compilerYamlGradersLog.Print("Generated graders step") } @@ -63,7 +67,7 @@ type graderManifestEntry struct { ID string `json:"id"` Name string `json:"name"` Description string `json:"description,omitempty"` - Source string `json:"source"` // "builtin" or "inline" + Source string `json:"source"` // "builtin", "inline", or "value" Enabled bool `json:"enabled"` Unit string `json:"unit,omitempty"` Direction string `json:"direction,omitempty"` @@ -71,6 +75,7 @@ type graderManifestEntry struct { Max *float64 `json:"max,omitempty"` Min *float64 `json:"min,omitempty"` Digest string `json:"digest,omitempty"` // SHA-256 of inline script + Function string `json:"function,omitempty"` Config map[string]any `json:"config,omitempty"` } @@ -82,8 +87,9 @@ type graderManifest struct { // graderExecEntry carries the script body for a custom grader, keyed by ID. type graderExecEntry struct { - ID string `json:"id"` - Script string `json:"script"` + ID string `json:"id"` + Script string `json:"script,omitempty"` + Function string `json:"function,omitempty"` } // buildGraderManifest constructs the manifest for the JS runtime. @@ -115,6 +121,13 @@ func buildGraderManifest(cfg *GradersConfig) *graderManifest { if _, ok := builtinSet[id]; !ok { source = "inline" } + if id == "value" { + source = "value" + } + digest := g.ScriptDigest() + if source == "value" { + digest = g.FunctionDigest() + } name := g.Name if name == "" { name = id @@ -130,7 +143,8 @@ func buildGraderManifest(cfg *GradersConfig) *graderManifest { Threshold: g.Threshold, Max: g.Max, Min: g.Min, - Digest: g.ScriptDigest(), + Digest: digest, + Function: g.Function, Config: g.Config, }) } @@ -159,7 +173,9 @@ func buildGraderExecSpec(cfg *GradersConfig) []graderExecEntry { var specs []graderExecEntry for _, id := range cfg.EnabledGraderIDs() { g := cfg.Graders[id] - if _, ok := builtinSet[id]; !ok && g.Script != "" { + if id == "value" && g.functionContent != "" { + specs = append(specs, graderExecEntry{ID: id, Function: g.functionContent}) + } else if _, ok := builtinSet[id]; !ok && g.Script != "" { specs = append(specs, graderExecEntry{ID: id, Script: g.Script}) } } @@ -211,5 +227,6 @@ func collectGraderArtifactPaths() []string { return []string{ constants.GradersDirSlash + constants.GraderManifestFilename, constants.GradersDirSlash + constants.GraderResultsFilename, + constants.GradersDirSlash + constants.ValueGraderFunctionFilename, } } diff --git a/pkg/workflow/graders_config.go b/pkg/workflow/graders_config.go index bde913668b3..4d8e2d3c870 100644 --- a/pkg/workflow/graders_config.go +++ b/pkg/workflow/graders_config.go @@ -62,17 +62,19 @@ var builtinGraderMetaByID = func() map[string]*BuiltinGraderMeta { // GraderDefinition represents a single grader entry in the graders map. type GraderDefinition struct { - ID string // grader identifier (must be unique) - Enabled *bool // explicit enable/disable; nil means use default (true for built-ins) - Name string // human-readable name (defaults from registry for built-ins) - Description string // description of the metric - Unit string // e.g. "ratio", "count", "ms", "factor" - Direction string // "higher_is_better" or "lower_is_better" - Threshold *float64 // quality threshold (pass/fail boundary) - Max *float64 // theoretical maximum - Min *float64 // theoretical minimum - Script string // inline JS body for trusted custom graders (built-ins leave empty) - Config map[string]any // arbitrary config passed to grader at runtime + ID string // grader identifier (must be unique) + Enabled *bool // explicit enable/disable; nil means use default (true for built-ins) + Name string // human-readable name (defaults from registry for built-ins) + Description string // description of the metric + Unit string // e.g. "ratio", "count", "ms", "factor" + Direction string // "higher_is_better" or "lower_is_better" + Threshold *float64 // quality threshold (pass/fail boundary) + Max *float64 // theoretical maximum + Min *float64 // theoretical minimum + Function string // repository-relative value grader function + Script string // inline JS body for trusted custom graders (built-ins leave empty) + Config map[string]any // arbitrary config passed to grader at runtime + functionContent string } // ScriptDigest returns the SHA-256 hex digest of the script, or "" if no script. @@ -84,6 +86,15 @@ func (g *GraderDefinition) ScriptDigest() string { return hex.EncodeToString(h[:]) } +// FunctionDigest returns the SHA-256 hex digest of the frozen value function. +func (g *GraderDefinition) FunctionDigest() string { + if g.functionContent == "" { + return "" + } + h := sha256.Sum256([]byte(g.functionContent)) + return hex.EncodeToString(h[:]) +} + // GradersConfig holds the configuration for deterministic graders declared // in workflow frontmatter. Graders run as an always() post-agent step in the agent job. type GradersConfig struct { @@ -104,13 +115,13 @@ func (gc *GradersConfig) HasGraders() bool { return false } -// HasCustomScripts returns true if any enabled grader has a custom script. +// HasCustomScripts returns true if any enabled grader has trusted custom code. func (gc *GradersConfig) HasCustomScripts() bool { if gc == nil { return false } for _, g := range gc.Graders { - if (g.Enabled == nil || *g.Enabled) && g.Script != "" { + if (g.Enabled == nil || *g.Enabled) && (g.Script != "" || g.functionContent != "") { return true } } @@ -224,6 +235,12 @@ func (c *Compiler) parseGradersFromFrontmatter(frontmatter map[string]any) (*Gra // Apply built-in defaults if this is a built-in if meta, ok := builtinGraderMetaByID[id]; ok { def = builtinDefFromMeta(meta) + } else if id == "value" { + def.Name = "Operational Value" + def.Unit = "ratio" + def.Direction = "higher_is_better" + def.Min = new(0.0) + def.Max = new(1.0) } _, isBuiltin := builtinSet[id] @@ -244,8 +261,11 @@ func (c *Compiler) parseGradersFromFrontmatter(frontmatter map[string]any) (*Gra return nil, err } - // Custom graders must have a script - if !isBuiltin && def.Script == "" && (def.Enabled == nil || *def.Enabled) { + // The value grader uses a repository function; other custom graders use inline scripts. + if id == "value" && def.Function == "" && (def.Enabled == nil || *def.Enabled) { + return nil, errors.New("graders.value requires a 'function' field") + } + if !isBuiltin && id != "value" && def.Script == "" && (def.Enabled == nil || *def.Enabled) { return nil, fmt.Errorf("graders.%s is not a built-in grader and requires a 'script' field. Built-in graders: %s", id, strings.Join(BuiltinGraderIDs, ", ")) } @@ -361,6 +381,21 @@ func parseGraderEntryFields(def *GraderDefinition, entry map[string]any, id stri def.Config = m } + if functionRaw, ok := entry["function"]; ok { + functionPath, ok := functionRaw.(string) + if !ok { + return fmt.Errorf("graders.%s.function must be a string, got %T", id, functionRaw) + } + functionPath = strings.TrimSpace(functionPath) + if id != "value" { + return fmt.Errorf("graders.%s.function is only supported by the value grader", id) + } + if !isValidValueFunctionPath(functionPath) { + return fmt.Errorf("graders.value.function must be a repository-relative .sh file under .github/graders, got %q", functionPath) + } + def.Function = functionPath + } + if scriptRaw, ok := entry["script"]; ok { s, ok := scriptRaw.(string) if !ok { @@ -373,6 +408,9 @@ func parseGraderEntryFields(def *GraderDefinition, entry map[string]any, id stri if isBuiltin { return fmt.Errorf("graders.%s is a built-in grader and cannot have a custom script", id) } + if id == "value" { + return errors.New("graders.value cannot have an inline script; use 'function'") + } scriptCharCount := utf8.RuneCountInString(s) if scriptCharCount > 4096 { return fmt.Errorf("graders.%s.script exceeds maximum length of 4096 characters (%d)", id, scriptCharCount) @@ -389,6 +427,22 @@ func parseGraderEntryFields(def *GraderDefinition, entry map[string]any, id stri return nil } +func isValidValueFunctionPath(functionPath string) bool { + if functionPath == "" || strings.Contains(functionPath, "\\") { + return false + } + parts := strings.Split(functionPath, "/") + if len(parts) < 3 || parts[0] != ".github" || parts[1] != "graders" { + return false + } + for _, part := range parts { + if part == "" || part == "." || part == ".." { + return false + } + } + return strings.HasSuffix(functionPath, ".sh") +} + // parseOptionalFloat parses an optional float64 field from a map. func parseOptionalFloat(m map[string]any, key string, graderID string, target **float64) error { v, ok := m[key] diff --git a/pkg/workflow/graders_config_test.go b/pkg/workflow/graders_config_test.go index 18b759b3955..093272af231 100644 --- a/pkg/workflow/graders_config_test.go +++ b/pkg/workflow/graders_config_test.go @@ -116,6 +116,68 @@ func TestParseGradersFromFrontmatter_CustomGrader(t *testing.T) { } } +func TestParseGradersFromFrontmatter_ValueGrader(t *testing.T) { + var c Compiler + cfg, err := c.parseGradersFromFrontmatter(map[string]any{ + "graders": map[string]any{ + "value": map[string]any{ + "function": ".github/graders/value.sh", + }, + }, + }) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + grader := cfg.Graders["value"] + if grader.Function != ".github/graders/value.sh" { + t.Fatalf("unexpected value function: %q", grader.Function) + } + if grader.Unit != "ratio" || grader.Direction != "higher_is_better" { + t.Fatalf("unexpected value defaults: unit=%q direction=%q", grader.Unit, grader.Direction) + } + if grader.Min == nil || *grader.Min != 0 || grader.Max == nil || *grader.Max != 1 { + t.Fatalf("expected value range [0,1], got min=%v max=%v", grader.Min, grader.Max) + } +} + +func TestParseGradersFromFrontmatter_ValueGraderValidation(t *testing.T) { + var c Compiler + tests := []struct { + name string + entry map[string]any + }{ + {name: "missing function", entry: map[string]any{}}, + {name: "path traversal", entry: map[string]any{"function": ".github/graders/../secret.sh"}}, + {name: "wrong directory", entry: map[string]any{"function": "scripts/value.sh"}}, + {name: "wrong extension", entry: map[string]any{"function": ".github/graders/value.js"}}, + {name: "inline script", entry: map[string]any{"function": ".github/graders/value.sh", "script": "return 1"}}, + } + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + _, err := c.parseGradersFromFrontmatter(map[string]any{ + "graders": map[string]any{"value": test.entry}, + }) + if err == nil { + t.Fatal("expected value grader validation error") + } + }) + } +} + +func TestParseGradersFromFrontmatter_FunctionRejectedForOtherGraders(t *testing.T) { + var c Compiler + _, err := c.parseGradersFromFrontmatter(map[string]any{ + "graders": map[string]any{ + "custom": map[string]any{ + "function": ".github/graders/value.sh", + }, + }, + }) + if err == nil { + t.Fatal("expected function to be rejected for a non-value grader") + } +} + // TestParseGradersFromFrontmatter_InvalidType verifies error for wrong type. func TestParseGradersFromFrontmatter_InvalidType(t *testing.T) { var c Compiler @@ -326,6 +388,34 @@ func TestBuildGraderManifest(t *testing.T) { } } +func TestBuildGraderManifest_ValueGrader(t *testing.T) { + grader := &GraderDefinition{ + ID: "value", + Function: ".github/graders/value.sh", + } + grader.functionContent = "#!/usr/bin/env bash\necho '{}'\n" + cfg := &GradersConfig{Graders: map[string]*GraderDefinition{"value": grader}} + + manifest := buildGraderManifest(cfg) + if len(manifest.Graders) != 1 { + t.Fatalf("expected one grader, got %d", len(manifest.Graders)) + } + if manifest.Graders[0].Source != "value" { + t.Fatalf("expected value source, got %q", manifest.Graders[0].Source) + } + if manifest.Graders[0].Digest != grader.FunctionDigest() { + t.Fatalf("expected frozen function digest, got %q", manifest.Graders[0].Digest) + } + + execSpec := buildGraderExecSpec(cfg) + if len(execSpec) != 1 || execSpec[0].Function != grader.functionContent { + t.Fatal("expected frozen function in execution spec") + } + if execSpec[0].Script != "" { + t.Fatal("value grader must not be serialized as an inline script") + } +} + // TestGenerateGradersStep_Absent verifies no step when graders nil. func TestGenerateGradersStep_Absent(t *testing.T) { c := &Compiler{} @@ -400,11 +490,11 @@ func TestGenerateGradersStep_BeforeArtifactUpload(t *testing.T) { } } -// TestCollectGraderArtifactPaths verifies paths include manifest and results. +// TestCollectGraderArtifactPaths verifies paths include all replay artifacts. func TestCollectGraderArtifactPaths(t *testing.T) { paths := collectGraderArtifactPaths() - if len(paths) != 2 { - t.Fatalf("expected 2 paths, got %d", len(paths)) + if len(paths) != 3 { + t.Fatalf("expected 3 paths, got %d", len(paths)) } if !strings.Contains(paths[0], "grader_manifest.json") { t.Fatal("expected grader_manifest.json in paths") @@ -412,6 +502,9 @@ func TestCollectGraderArtifactPaths(t *testing.T) { if !strings.Contains(paths[1], "grader_results.json") { t.Fatal("expected grader_results.json in paths") } + if !strings.Contains(paths[2], "value_function.sh") { + t.Fatal("expected value_function.sh in paths") + } } // initActionPinCacheForTest sets up minimal action pin resolution for tests. diff --git a/pkg/workflow/graders_value.go b/pkg/workflow/graders_value.go new file mode 100644 index 00000000000..a37ba5c26d6 --- /dev/null +++ b/pkg/workflow/graders_value.go @@ -0,0 +1,73 @@ +package workflow + +import ( + "errors" + "fmt" + "io" + "os" + "path/filepath" + "strings" + "unicode/utf8" + + "github.com/github/gh-aw/pkg/fileutil" + "github.com/github/gh-aw/pkg/gitutil" +) + +const maxValueFunctionSize = 64 * 1024 + +func (c *Compiler) prepareValueGrader(data *WorkflowData, markdownPath string) error { + if data == nil || data.Graders == nil { + return nil + } + grader, ok := data.Graders.Graders["value"] + if !ok || (grader.Enabled != nil && !*grader.Enabled) { + return nil + } + if grader.Function == "" { + return errors.New("graders.value requires a 'function' field") + } + + repoRoot, err := gitutil.FindGitRootFrom(filepath.Dir(markdownPath)) + if err != nil { + return fmt.Errorf("cannot resolve graders.value.function %q: workflow is not inside a Git repository", grader.Function) + } + functionPath := filepath.Join(repoRoot, filepath.FromSlash(grader.Function)) + if err := fileutil.ValidatePathWithinBase(repoRoot, functionPath); err != nil { + return fmt.Errorf("graders.value.function %q escapes the Git repository", grader.Function) + } + + file, err := os.Open(functionPath) + if err != nil { + return fmt.Errorf("cannot read graders.value.function %q: %w", grader.Function, err) + } + defer file.Close() + + info, err := file.Stat() + if err != nil { + return fmt.Errorf("cannot inspect graders.value.function %q: %w", grader.Function, err) + } + if !info.Mode().IsRegular() { + return fmt.Errorf("graders.value.function %q must be a regular file", grader.Function) + } + if info.Size() > maxValueFunctionSize { + return fmt.Errorf("graders.value.function %q exceeds the %d-byte limit", grader.Function, maxValueFunctionSize) + } + + content, err := io.ReadAll(io.LimitReader(file, maxValueFunctionSize+1)) + if err != nil { + return fmt.Errorf("cannot read graders.value.function %q: %w", grader.Function, err) + } + if len(content) > maxValueFunctionSize { + return fmt.Errorf("graders.value.function %q exceeds the %d-byte limit", grader.Function, maxValueFunctionSize) + } + if !utf8.Valid(content) { + return fmt.Errorf("graders.value.function %q must be valid UTF-8", grader.Function) + } + functionContent := string(content) + if !strings.HasPrefix(functionContent, "#!/usr/bin/env bash\n") && !strings.HasPrefix(functionContent, "#!/bin/bash\n") { + return fmt.Errorf("graders.value.function %q must start with a Bash shebang", grader.Function) + } + + grader.functionContent = functionContent + return nil +} diff --git a/pkg/workflow/graders_value_test.go b/pkg/workflow/graders_value_test.go new file mode 100644 index 00000000000..7687c186ca4 --- /dev/null +++ b/pkg/workflow/graders_value_test.go @@ -0,0 +1,118 @@ +package workflow + +import ( + "os" + "path/filepath" + "runtime" + "strings" + "testing" +) + +func TestPrepareValueGrader(t *testing.T) { + repoRoot := t.TempDir() + if err := os.Mkdir(filepath.Join(repoRoot, ".git"), 0o755); err != nil { + t.Fatal(err) + } + workflowPath := filepath.Join(repoRoot, ".github", "workflows", "example.md") + functionPath := filepath.Join(repoRoot, ".github", "graders", "value.sh") + if err := os.MkdirAll(filepath.Dir(workflowPath), 0o755); err != nil { + t.Fatal(err) + } + if err := os.MkdirAll(filepath.Dir(functionPath), 0o755); err != nil { + t.Fatal(err) + } + content := "#!/usr/bin/env bash\nset -euo pipefail\n" + if err := os.WriteFile(functionPath, []byte(content), 0o755); err != nil { + t.Fatal(err) + } + data := valueGraderWorkflowData(".github/graders/value.sh") + + if err := (&Compiler{}).prepareValueGrader(data, workflowPath); err != nil { + t.Fatalf("unexpected error: %v", err) + } + grader := data.Graders.Graders["value"] + if grader.functionContent != content { + t.Fatal("expected value function content to be frozen") + } + if len(grader.FunctionDigest()) != 64 { + t.Fatalf("expected SHA-256 digest, got %q", grader.FunctionDigest()) + } +} + +func TestPrepareValueGraderRejectsInvalidFiles(t *testing.T) { + tests := []struct { + name string + content string + errText string + }{ + {name: "missing", errText: "cannot read"}, + {name: "not bash", content: "echo value\n", errText: "Bash shebang"}, + {name: "oversized", content: "#!/usr/bin/env bash\n" + strings.Repeat("x", maxValueFunctionSize), errText: "exceeds"}, + } + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + repoRoot := t.TempDir() + if err := os.Mkdir(filepath.Join(repoRoot, ".git"), 0o755); err != nil { + t.Fatal(err) + } + workflowPath := filepath.Join(repoRoot, ".github", "workflows", "example.md") + functionPath := filepath.Join(repoRoot, ".github", "graders", "value.sh") + if err := os.MkdirAll(filepath.Dir(workflowPath), 0o755); err != nil { + t.Fatal(err) + } + if test.content != "" { + if err := os.MkdirAll(filepath.Dir(functionPath), 0o755); err != nil { + t.Fatal(err) + } + if err := os.WriteFile(functionPath, []byte(test.content), 0o755); err != nil { + t.Fatal(err) + } + } + + err := (&Compiler{}).prepareValueGrader(valueGraderWorkflowData(".github/graders/value.sh"), workflowPath) + if err == nil || !strings.Contains(err.Error(), test.errText) { + t.Fatalf("expected error containing %q, got %v", test.errText, err) + } + }) + } +} + +func TestPrepareValueGraderRejectsSymlinkEscape(t *testing.T) { + if runtime.GOOS == "windows" { + t.Skip("symlink creation requires additional privileges on Windows") + } + repoRoot := t.TempDir() + outside := filepath.Join(t.TempDir(), "value.sh") + if err := os.WriteFile(outside, []byte("#!/usr/bin/env bash\n"), 0o755); err != nil { + t.Fatal(err) + } + if err := os.Mkdir(filepath.Join(repoRoot, ".git"), 0o755); err != nil { + t.Fatal(err) + } + workflowPath := filepath.Join(repoRoot, ".github", "workflows", "example.md") + functionPath := filepath.Join(repoRoot, ".github", "graders", "value.sh") + if err := os.MkdirAll(filepath.Dir(workflowPath), 0o755); err != nil { + t.Fatal(err) + } + if err := os.MkdirAll(filepath.Dir(functionPath), 0o755); err != nil { + t.Fatal(err) + } + if err := os.Symlink(outside, functionPath); err != nil { + t.Fatal(err) + } + + err := (&Compiler{}).prepareValueGrader(valueGraderWorkflowData(".github/graders/value.sh"), workflowPath) + if err == nil || !strings.Contains(err.Error(), "escapes") { + t.Fatalf("expected symlink escape error, got %v", err) + } +} + +func valueGraderWorkflowData(functionPath string) *WorkflowData { + return &WorkflowData{ + Graders: &GradersConfig{ + Graders: map[string]*GraderDefinition{ + "value": {ID: "value", Function: functionPath}, + }, + }, + } +} From ea4700be30d26fe7c41704a34a9e5accb264a641 Mon Sep 17 00:00:00 2001 From: Mara Nikola Kiefer Date: Mon, 24 Aug 2026 07:45:48 +0200 Subject: [PATCH 02/11] Refactor value grader to operational-value evaluator --- .github/skills/aw-value/SKILL.md | 30 +- ...sh => operational-value-evaluator-path.sh} | 4 +- ... => verify-operational-value-evaluator.sh} | 20 +- .github/skills/aw-value/tests/test.sh | 16 +- ...rader.cjs => operational_value_grader.cjs} | 82 +-- ....cjs => operational_value_grader.test.cjs} | 28 +- actions/setup/js/trace_graders.cjs | 60 +- actions/setup/js/trace_graders.test.cjs | 14 +- .../content/docs/reference/trace-graders.md | 20 +- .../docs/specs/graders-specification.md | 64 +- pkg/cli/graders_command.go | 14 +- pkg/cli/graders_operational_value_regrade.go | 658 ++++++++++++++++++ ...graders_operational_value_regrade_test.go} | 46 +- pkg/cli/graders_value_regrade.go | 635 ----------------- pkg/constants/job_constants.go | 4 +- pkg/parser/schema_test.go | 10 +- pkg/parser/schemas/main_workflow_schema.json | 6 +- pkg/workflow/compiler.go | 2 +- pkg/workflow/compiler_yaml_artifacts.go | 2 +- pkg/workflow/compiler_yaml_graders.go | 32 +- pkg/workflow/graders_config.go | 79 ++- pkg/workflow/graders_config_test.go | 80 ++- pkg/workflow/graders_operational_value.go | 73 ++ ...t.go => graders_operational_value_test.go} | 52 +- pkg/workflow/graders_value.go | 73 -- 25 files changed, 1072 insertions(+), 1032 deletions(-) rename .github/skills/aw-value/scripts/{value-function-path.sh => operational-value-evaluator-path.sh} (63%) rename .github/skills/aw-value/scripts/{verify-value-function.sh => verify-operational-value-evaluator.sh} (83%) rename actions/setup/js/{value_grader.cjs => operational_value_grader.cjs} (62%) rename actions/setup/js/{value_grader.test.cjs => operational_value_grader.test.cjs} (79%) create mode 100644 pkg/cli/graders_operational_value_regrade.go rename pkg/cli/{graders_value_regrade_test.go => graders_operational_value_regrade_test.go} (64%) delete mode 100644 pkg/cli/graders_value_regrade.go create mode 100644 pkg/workflow/graders_operational_value.go rename pkg/workflow/{graders_value_test.go => graders_operational_value_test.go} (50%) delete mode 100644 pkg/workflow/graders_value.go diff --git a/.github/skills/aw-value/SKILL.md b/.github/skills/aw-value/SKILL.md index 9b721a9f03a..77096ac7355 100644 --- a/.github/skills/aw-value/SKILL.md +++ b/.github/skills/aw-value/SKILL.md @@ -1,6 +1,6 @@ --- name: aw-value -description: "Design and verify a deterministic operational-value grader for a GitHub Agentic Workflow. Use for per-run value, evidence attribution, maturation, baselines, and value grader functions. Usage: /aw-value OWNER/REPO WORKFLOW-NAME." +description: "Design and verify a deterministic operational-value grader for a GitHub Agentic Workflow. Use for per-run operational value, evidence attribution, maturation, baselines, and operational-value evaluators. Usage: /aw-value OWNER/REPO WORKFLOW-NAME." argument-hint: "OWNER/REPO WORKFLOW-NAME" allowed-tools: bash jq gh metadata: @@ -9,24 +9,24 @@ metadata: # Operational Value Grader -Design one deterministic `value` grader that reports absolute operational attainment for each workflow run. +Design one deterministic `operational-value` grader that reports absolute operational attainment for each workflow run. Operational value is the degree to which the workflow's intended repository outcome is attained for the opportunity assigned to a run, demonstrated by accepted repository evidence under a frozen contract. It is not execution quality, output volume, safe-output creation, or an agent's assessment. ## Output -Create one executable function at: +Create one executable evaluator at: ```text -.github/graders/WORKFLOW-NAME-value.sh +.github/graders/WORKFLOW-NAME-operational-value.sh ``` Configure the workflow: ```yaml graders: - value: - function: .github/graders/WORKFLOW-NAME-value.sh + operational-value: + run: .github/graders/WORKFLOW-NAME-operational-value.sh ``` The grader's primary `value` is absolute attainment in `[0,1]`. A comparable frozen baseline may be reported separately as `baselineValue`; gh-aw derives `deltaFromBaseline`. Never define the primary value as a difference from baseline. @@ -43,16 +43,16 @@ The grader's primary `value` is absolute attainment in `[0,1]`. A comparable fro 4. Freeze accepted evidence, evidence repositories, matching rules, zero-versus-missing behavior, and `maturesAt` computation. 5. Choose exactly one direct primary metric in `[0,1]`. Higher must always mean greater attainment. Keep trace graders and activity counts separate. 6. If comparable pre-adoption evidence exists, score it with the same metric and freeze it under `baseline`. Otherwise use `attainment-only` with a null baseline value. -7. Implement the function interface below and run: +7. Implement the evaluator interface below and run: ```bash - .github/skills/aw-value/scripts/verify-value-function.sh .github/graders/WORKFLOW-NAME-value.sh + .github/skills/aw-value/scripts/verify-operational-value-evaluator.sh .github/graders/WORKFLOW-NAME-operational-value.sh gh aw compile .github/workflows/WORKFLOW-NAME.md ``` -## Function Interface +## Evaluator Interface -The function uses Bash 3.2-compatible Bash plus `jq` and supports: +The evaluator uses Bash 3.2-compatible Bash plus `jq` and supports: - `--definition`: print the frozen schema-version 4 contract. - `--metric`: read one evidence object on stdin and print a deterministic number in `[0,1]` or `null`. @@ -103,18 +103,18 @@ The function must cap `evidenceCutoff` at the earlier of `evidenceAt` and `matur Recompute a run at an explicit evidence time with the same local function used by the original run: ```bash -gh aw graders value RUN-ID \ +gh aw graders operational-value RUN-ID \ --evidence-at 2026-08-30T12:00:00.000Z \ --json ``` -Add `--repo [HOST/]OWNER/REPO` when the run is not in the current repository. The command downloads the original grader artifact, reuses its operational case and complete run subject, and refuses to execute unless the archived function's SHA-256 matches both digest records. It prints a new observation and never modifies the original artifact. +Add `--repo [HOST/]OWNER/REPO` when the run is not in the current repository. The command downloads the original grader artifact, reuses its operational case and complete run subject, and refuses to execute unless the archived evaluator's SHA-256 matches both digest records. It prints a new observation and never modifies the original artifact. ## Definition Contract `--definition` must contain: -- `schemaVersion: 4` and `grader: "value"`; +- `schemaVersion: 4` and `grader: "operational-value"`; - repository, workflow name, source path, and adoption commit/time; - operational-value statement; - evidence opportunity, assignment, accepted evidence, repositories, collection, maturation, zero rule, and missing rule; @@ -128,6 +128,6 @@ For `baseline-comparable`, baseline value must be in `[0,1]` and have immutable - `value` answers “how fully was this run's assigned opportunity attained?” - `deltaFromBaseline` answers “how far is this observation above or below the frozen pre-adoption reference?” - Neither establishes that the workflow caused the outcome. -- Compare runs only under the same function digest and evidence horizon. -- Identify a replayed observation by `(runId, functionDigest, evidenceAt)`. +- Compare runs only under the same evaluator digest and evidence horizon. +- Identify a replayed observation by `(runId, evaluatorDigest, evidenceAt)`. - Do not treat repeated observations of one run, duplicate opportunity keys, or overlapping state windows as independent samples. \ No newline at end of file diff --git a/.github/skills/aw-value/scripts/value-function-path.sh b/.github/skills/aw-value/scripts/operational-value-evaluator-path.sh similarity index 63% rename from .github/skills/aw-value/scripts/value-function-path.sh rename to .github/skills/aw-value/scripts/operational-value-evaluator-path.sh index 929dfb40da0..b43f0ca2d72 100755 --- a/.github/skills/aw-value/scripts/value-function-path.sh +++ b/.github/skills/aw-value/scripts/operational-value-evaluator-path.sh @@ -7,10 +7,10 @@ fail() { exit 1 } -[[ $# -eq 1 ]] || fail "usage: value-function-path.sh WORKFLOW-NAME" +[[ $# -eq 1 ]] || fail "usage: operational-value-evaluator-path.sh WORKFLOW-NAME" workflow_name=$1 [[ $workflow_name =~ ^[a-z0-9]+(-[a-z0-9]+)*$ ]] \ || fail "workflow name must contain lowercase letters, numbers, and single hyphens" -printf '.github/graders/%s-value.sh\n' "$workflow_name" \ No newline at end of file +printf '.github/graders/%s-operational-value.sh\n' "$workflow_name" \ No newline at end of file diff --git a/.github/skills/aw-value/scripts/verify-value-function.sh b/.github/skills/aw-value/scripts/verify-operational-value-evaluator.sh similarity index 83% rename from .github/skills/aw-value/scripts/verify-value-function.sh rename to .github/skills/aw-value/scripts/verify-operational-value-evaluator.sh index d9ef1d66f8b..4ac6a82e8db 100755 --- a/.github/skills/aw-value/scripts/verify-value-function.sh +++ b/.github/skills/aw-value/scripts/verify-operational-value-evaluator.sh @@ -7,18 +7,18 @@ fail() { exit 1 } -[[ $# -eq 1 ]] || fail "usage: verify-value-function.sh " +[[ $# -eq 1 ]] || fail "usage: verify-operational-value-evaluator.sh " -value_function=$1 -[[ -f $value_function ]] || fail "value function not found: $value_function" -[[ -x $value_function ]] || fail "value function is not executable: $value_function" +evaluator=$1 +[[ -f $evaluator ]] || fail "operational-value evaluator not found: $evaluator" +[[ -x $evaluator ]] || fail "operational-value evaluator is not executable: $evaluator" command -v jq >/dev/null 2>&1 || fail "jq is required" -bash -n "$value_function" +bash -n "$evaluator" -definition=$("$value_function" --definition) +definition=$("$evaluator" --definition) printf '%s\n' "$definition" | jq -e ' .schemaVersion == 4 - and .grader == "value" + and .grader == "operational-value" and (.repository | type == "string" and test("^[^/]+/[^/]+$")) and (.workflowName | type == "string" and length > 0) and (.sourcePath | type == "string" and startswith(".github/workflows/") and endswith(".md")) @@ -47,11 +47,11 @@ printf '%s\n' "$definition" | jq -e ' .baseline.value == null and .baseline.evidenceCutoff == null end) -' >/dev/null || fail "value-function definition is invalid" +' >/dev/null || fail "operational-value evaluator definition is invalid" for example_name in targetAttained targetMissed missing malformed; do evidence=$(printf '%s\n' "$definition" | jq -c --arg name "$example_name" '.validationExamples[$name]') - result=$(printf '%s\n' "$evidence" | "$value_function" --metric) + result=$(printf '%s\n' "$evidence" | "$evaluator" --metric) printf '%s\n' "$result" | jq -e '. == null or (type == "number" and . >= 0 and . <= 1)' >/dev/null \ || fail "--metric returned an invalid score for $example_name" case $example_name in @@ -67,4 +67,4 @@ jq -en --argjson attained "$target_attained" --argjson missed "$target_missed" \ '$attained != null and $missed != null and $attained > $missed' >/dev/null \ || fail "targetAttained must score higher than targetMissed" -printf 'verified %s\n' "$value_function" \ No newline at end of file +printf 'verified %s\n' "$evaluator" \ No newline at end of file diff --git a/.github/skills/aw-value/tests/test.sh b/.github/skills/aw-value/tests/test.sh index 184a4b401be..5dc72ffbb1e 100755 --- a/.github/skills/aw-value/tests/test.sh +++ b/.github/skills/aw-value/tests/test.sh @@ -7,15 +7,15 @@ repo_root=$(CDPATH='' cd -- "$skill_dir/../../.." && pwd) work_dir=$(mktemp -d "$repo_root/.aw-value-test.XXXXXX") trap 'rm -rf "$work_dir"' EXIT HUP INT TERM -path=$("$skill_dir/scripts/value-function-path.sh" daily-file-diet) -[[ $path == .github/graders/daily-file-diet-value.sh ]] -if "$skill_dir/scripts/value-function-path.sh" ../escape >/dev/null 2>&1; then +path=$("$skill_dir/scripts/operational-value-evaluator-path.sh" daily-file-diet) +[[ $path == .github/graders/daily-file-diet-operational-value.sh ]] +if "$skill_dir/scripts/operational-value-evaluator-path.sh" ../escape >/dev/null 2>&1; then printf 'invalid workflow name was accepted\n' >&2 exit 1 fi -function_path="$work_dir/value.sh" -cat > "$function_path" <<'EOF' +evaluator_path="$work_dir/operational-value.sh" +cat > "$evaluator_path" <<'EOF' #!/usr/bin/env bash set -euo pipefail @@ -25,7 +25,7 @@ case ${1:-} in cat <<'JSON' { "schemaVersion": 4, - "grader": "value", + "grader": "operational-value", "repository": "owner/repo", "workflowName": "Example", "sourcePath": ".github/workflows/example.md", @@ -72,7 +72,7 @@ JSON ;; esac EOF -chmod +x "$function_path" +chmod +x "$evaluator_path" -"$skill_dir/scripts/verify-value-function.sh" "$function_path" >/dev/null +"$skill_dir/scripts/verify-operational-value-evaluator.sh" "$evaluator_path" >/dev/null printf 'aw-value skill tests passed\n' \ No newline at end of file diff --git a/actions/setup/js/value_grader.cjs b/actions/setup/js/operational_value_grader.cjs similarity index 62% rename from actions/setup/js/value_grader.cjs rename to actions/setup/js/operational_value_grader.cjs index f35cc0d0b99..e4efb527fcf 100644 --- a/actions/setup/js/value_grader.cjs +++ b/actions/setup/js/operational_value_grader.cjs @@ -6,9 +6,9 @@ const os = require("os"); const path = require("path"); const { getErrorMessage } = require("./error_helpers.cjs"); -const VALUE_FUNCTION_TIMEOUT_MS = 120000; -const VALUE_FUNCTION_MAX_OUTPUT = 1024 * 1024; -const VALUE_EVENT_MAX_SIZE = 1024 * 1024; +const OPERATIONAL_VALUE_EVALUATOR_TIMEOUT_MS = 120000; +const OPERATIONAL_VALUE_EVALUATOR_MAX_OUTPUT = 1024 * 1024; +const OPERATIONAL_VALUE_EVENT_MAX_SIZE = 1024 * 1024; /** @param {unknown} value @returns {value is Record} */ function isRecord(value) { @@ -51,7 +51,7 @@ function readEventPayload(env) { if (!eventPath) return null; try { const stat = fs.statSync(eventPath); - if (!stat.isFile() || stat.size > VALUE_EVENT_MAX_SIZE) return null; + if (!stat.isFile() || stat.size > OPERATIONAL_VALUE_EVENT_MAX_SIZE) return null; const event = JSON.parse(fs.readFileSync(eventPath, "utf8")); return isRecord(event) ? event : null; } catch { @@ -69,37 +69,37 @@ function safeFunctionEnv(env) { return result; } -function parseBaselineDefinition(rawDefinition) { +function parseOperationalValueBaselineDefinition(rawDefinition) { let definition; try { definition = JSON.parse(rawDefinition || "{}"); } catch (err) { - throw new Error(`value function returned an invalid definition: ${getErrorMessage(err)}`, { cause: err }); + throw new Error(`operational-value evaluator returned an invalid definition: ${getErrorMessage(err)}`, { cause: err }); } - if (!isRecord(definition) || definition.schemaVersion !== 4 || definition.grader !== "value" || !isRecord(definition.baseline)) { - throw new Error("value function definition must use schemaVersion 4 and grader 'value'"); + if (!isRecord(definition) || definition.schemaVersion !== 4 || definition.grader !== "operational-value" || !isRecord(definition.baseline)) { + throw new Error("operational-value evaluator definition must use schemaVersion 4 and grader 'operational-value'"); } if (definition.baseline.mode === "attainment-only") { - if (definition.baseline.value !== null) throw new Error("attainment-only value functions must have a null baseline value"); + if (definition.baseline.value !== null) throw new Error("attainment-only operational-value evaluators must have a null baseline value"); return null; } if (definition.baseline.mode !== "baseline-comparable") { - throw new Error("value function baseline mode must be 'baseline-comparable' or 'attainment-only'"); + throw new Error("operational-value evaluator baseline mode must be 'baseline-comparable' or 'attainment-only'"); } const baselineValue = definition.baseline.value; if (typeof baselineValue !== "number" || !Number.isFinite(baselineValue) || baselineValue < 0 || baselineValue > 1) { - throw new Error("baseline-comparable value functions require a baseline value in [0,1]"); + throw new Error("baseline-comparable operational-value evaluators require a baseline value in [0,1]"); } return baselineValue; } /** - * Execute and validate one trusted, frozen value function. - * @param {string} functionContent + * Execute and validate one trusted, frozen operational-value evaluator. + * @param {string} evaluatorContent * @param {{digest?: string, config?: object}} meta * @param {{evidenceAt?: string, env?: NodeJS.ProcessEnv, event?: object|null, case?: object|null, runMetadata?: {createdAt?: string}, bashPath?: string}} [options] */ -function executeValueFunction(functionContent, meta, options = {}) { +function executeOperationalValueEvaluator(evaluatorContent, meta, options = {}) { const env = options.env || process.env; const evidenceAt = options.evidenceAt || new Date().toISOString(); const evidenceAtMs = parseTimestamp(evidenceAt, "evidenceAt"); @@ -113,68 +113,68 @@ function executeValueFunction(functionContent, meta, options = {}) { config: meta.config || {}, }; - const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "gh-aw-value-grader-")); - const functionPath = path.join(tempDir, "value.sh"); + const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "gh-aw-operational-value-grader-")); + const evaluatorPath = path.join(tempDir, "operational-value.sh"); const bashPath = options.bashPath || "/bin/bash"; try { - fs.writeFileSync(functionPath, functionContent, { encoding: "utf8", mode: 0o700 }); - const syntax = cp.spawnSync(bashPath, ["-n", functionPath], { + fs.writeFileSync(evaluatorPath, evaluatorContent, { encoding: "utf8", mode: 0o700 }); + const syntax = cp.spawnSync(bashPath, ["-n", evaluatorPath], { encoding: "utf8", timeout: 5000, env: safeFunctionEnv(env), }); if (syntax.error || syntax.status !== 0) { - throw new Error(`value function has invalid Bash syntax: ${syntax.stderr?.trim() || getErrorMessage(syntax.error)}`); + throw new Error(`operational-value evaluator has invalid Bash syntax: ${syntax.stderr?.trim() || getErrorMessage(syntax.error)}`); } - const definitionExecution = cp.spawnSync(bashPath, [functionPath, "--definition"], { + const definitionExecution = cp.spawnSync(bashPath, [evaluatorPath, "--definition"], { encoding: "utf8", timeout: 5000, - maxBuffer: VALUE_FUNCTION_MAX_OUTPUT, + maxBuffer: OPERATIONAL_VALUE_EVALUATOR_MAX_OUTPUT, env: safeFunctionEnv(env), }); if (definitionExecution.error) throw definitionExecution.error; if (definitionExecution.status !== 0) { - throw new Error(definitionExecution.stderr?.trim() || `value function --definition exited with status ${String(definitionExecution.status)}`); + throw new Error(definitionExecution.stderr?.trim() || `operational-value evaluator --definition exited with status ${String(definitionExecution.status)}`); } - const baselineValue = parseBaselineDefinition(definitionExecution.stdout); + const baselineValue = parseOperationalValueBaselineDefinition(definitionExecution.stdout); - const execution = cp.spawnSync(bashPath, [functionPath, "--grade-run"], { + const execution = cp.spawnSync(bashPath, [evaluatorPath, "--grade-run"], { input: JSON.stringify(request), encoding: "utf8", - timeout: VALUE_FUNCTION_TIMEOUT_MS, - maxBuffer: VALUE_FUNCTION_MAX_OUTPUT, + timeout: OPERATIONAL_VALUE_EVALUATOR_TIMEOUT_MS, + maxBuffer: OPERATIONAL_VALUE_EVALUATOR_MAX_OUTPUT, env: safeFunctionEnv(env), }); if (execution.error) throw execution.error; if (execution.status !== 0) { - throw new Error(execution.stderr?.trim() || `value function exited with status ${String(execution.status)}`); + throw new Error(execution.stderr?.trim() || `operational-value evaluator exited with status ${String(execution.status)}`); } let output; try { output = JSON.parse(execution.stdout || "{}"); } catch (err) { - throw new Error(`value function returned invalid JSON: ${getErrorMessage(err)}`, { cause: err }); + throw new Error(`operational-value evaluator returned invalid JSON: ${getErrorMessage(err)}`, { cause: err }); } - if (!isRecord(output)) throw new Error("value function output must be an object"); + if (!isRecord(output)) throw new Error("operational-value evaluator output must be an object"); if (output.value !== null && (typeof output.value !== "number" || !Number.isFinite(output.value) || output.value < 0 || output.value > 1)) { - throw new Error("value function value must be null or a finite number in [0,1]"); + throw new Error("operational-value evaluator result.value must be null or a finite number in [0,1]"); } - if (!isRecord(output.case)) throw new Error("value function output.case must be an object"); + if (!isRecord(output.case)) throw new Error("operational-value evaluator output.case must be an object"); if (typeof output.opportunityKey !== "string" || output.opportunityKey.trim() === "") { - throw new Error("value function opportunityKey must be a non-empty string"); + throw new Error("operational-value evaluator opportunityKey must be a non-empty string"); } const evidenceCutoffMs = parseTimestamp(output.evidenceCutoff, "evidenceCutoff"); const maturesAtMs = parseTimestamp(output.maturesAt, "maturesAt"); - if (evidenceCutoffMs > evidenceAtMs) throw new Error("value function evidenceCutoff cannot follow evidenceAt"); - if (evidenceCutoffMs > maturesAtMs) throw new Error("value function evidenceCutoff cannot follow maturesAt"); + if (evidenceCutoffMs > evidenceAtMs) throw new Error("operational-value evaluator evidenceCutoff cannot follow evidenceAt"); + if (evidenceCutoffMs > maturesAtMs) throw new Error("operational-value evaluator evidenceCutoff cannot follow maturesAt"); if (!Array.isArray(output.provenance) || (output.value !== null && output.provenance.length === 0)) { - throw new Error("value function must return provenance for a numeric value"); + throw new Error("operational-value evaluator must return provenance for a numeric value"); } for (const provenance of output.provenance) { if (!isRecord(provenance) || !["repository", "kind", "ref"].every(key => typeof provenance[key] === "string" && provenance[key].length > 0)) { - throw new Error("value function provenance entries require repository, kind, and ref"); + throw new Error("operational-value evaluator provenance entries require repository, kind, and ref"); } } return { @@ -210,12 +210,12 @@ function executeValueFunction(functionContent, meta, options = {}) { } module.exports = { - executeValueFunction, + executeOperationalValueEvaluator, buildRunSubject, readEventPayload, parseTimestamp, - parseBaselineDefinition, - VALUE_FUNCTION_TIMEOUT_MS, - VALUE_FUNCTION_MAX_OUTPUT, - VALUE_EVENT_MAX_SIZE, + parseOperationalValueBaselineDefinition, + OPERATIONAL_VALUE_EVALUATOR_TIMEOUT_MS, + OPERATIONAL_VALUE_EVALUATOR_MAX_OUTPUT, + OPERATIONAL_VALUE_EVENT_MAX_SIZE, }; diff --git a/actions/setup/js/value_grader.test.cjs b/actions/setup/js/operational_value_grader.test.cjs similarity index 79% rename from actions/setup/js/value_grader.test.cjs rename to actions/setup/js/operational_value_grader.test.cjs index 44e96fc6155..8ebdfd25040 100644 --- a/actions/setup/js/value_grader.test.cjs +++ b/actions/setup/js/operational_value_grader.test.cjs @@ -1,6 +1,6 @@ // @ts-check -const { executeValueFunction, buildRunSubject } = require("./value_grader.cjs"); +const { executeOperationalValueEvaluator, buildRunSubject } = require("./operational_value_grader.cjs"); const TEST_ENV = { PATH: process.env.PATH, @@ -15,13 +15,13 @@ const TEST_ENV = { GITHUB_EVENT_NAME: "schedule", }; -function valueFunction(output, baseline = { mode: "baseline-comparable", value: 0.25 }) { +function operationalValueEvaluator(output, baseline = { mode: "baseline-comparable", value: 0.25 }) { return `#!/usr/bin/env bash set -euo pipefail case \${1:-} in --definition) cat <<'DEFINITION' -${JSON.stringify({ schemaVersion: 4, grader: "value", baseline })} +${JSON.stringify({ schemaVersion: 4, grader: "operational-value", baseline })} DEFINITION ;; --grade-run) @@ -35,7 +35,7 @@ esac `; } -describe("value_grader", () => { +describe("operational_value_grader", () => { it("builds a stable workflow-run subject", () => { expect(buildRunSubject(TEST_ENV)).toEqual({ id: "12345", @@ -50,8 +50,8 @@ describe("value_grader", () => { }); it("returns absolute value with a secondary baseline delta", () => { - const output = executeValueFunction( - valueFunction({ + const output = executeOperationalValueEvaluator( + operationalValueEvaluator({ value: 0.75, opportunityKey: "schedule:2026-08-23", case: { key: "schedule:2026-08-23" }, @@ -81,8 +81,8 @@ describe("value_grader", () => { }); it("caps evidence at maturation and marks mature observations", () => { - const output = executeValueFunction( - valueFunction( + const output = executeOperationalValueEvaluator( + operationalValueEvaluator( { value: 1, opportunityKey: "issue:42", @@ -105,8 +105,8 @@ describe("value_grader", () => { it("rejects invalid values and uncapped evidence", () => { expect(() => - executeValueFunction( - valueFunction({ + executeOperationalValueEvaluator( + operationalValueEvaluator({ value: 2, opportunityKey: "issue:42", case: { issue: 42 }, @@ -117,17 +117,17 @@ describe("value_grader", () => { {}, { evidenceAt: "2026-09-01T12:00:00Z", env: TEST_ENV } ) - ).toThrow("value must be null or a finite number in [0,1]"); + ).toThrow("result.value must be null or a finite number in [0,1]"); }); it("rejects invalid Bash", () => { - expect(() => executeValueFunction("#!/usr/bin/env bash\nif", {}, { evidenceAt: "2026-08-24T12:00:00Z", env: TEST_ENV })).toThrow("invalid Bash syntax"); + expect(() => executeOperationalValueEvaluator("#!/usr/bin/env bash\nif", {}, { evidenceAt: "2026-08-24T12:00:00Z", env: TEST_ENV })).toThrow("invalid Bash syntax"); }); it("rejects an invalid frozen baseline", () => { expect(() => - executeValueFunction( - valueFunction( + executeOperationalValueEvaluator( + operationalValueEvaluator( { value: 1, opportunityKey: "issue:42", diff --git a/actions/setup/js/trace_graders.cjs b/actions/setup/js/trace_graders.cjs index c692ee70a95..3a6bffc3e34 100644 --- a/actions/setup/js/trace_graders.cjs +++ b/actions/setup/js/trace_graders.cjs @@ -8,14 +8,14 @@ const crypto = require("crypto"); const { getErrorMessage } = require("./error_helpers.cjs"); const { readExperimentAssignments } = require("./experiment_helpers.cjs"); const { calculateWorkingSetFromEntries } = require("./working_set_metrics.cjs"); -const { executeValueFunction } = require("./value_grader.cjs"); +const { executeOperationalValueEvaluator } = require("./operational_value_grader.cjs"); // --- Constants --- const TMP_GH_AW = "/tmp/gh-aw"; const GRADERS_DIR = path.join(TMP_GH_AW, "agent", "graders"); const MANIFEST_PATH = path.join(GRADERS_DIR, "grader_manifest.json"); const RESULTS_PATH = path.join(GRADERS_DIR, "grader_results.json"); -const VALUE_FUNCTION_PATH = path.join(GRADERS_DIR, "value_function.sh"); +const OPERATIONAL_VALUE_EVALUATOR_PATH = path.join(GRADERS_DIR, "operational_value_evaluator.sh"); // Trace source file paths const TOKEN_USAGE_PATHS = [ @@ -628,9 +628,9 @@ function runCustomGrader(id, script, trace, meta) { } } -function runValueGrader(id, functionContent, meta, options) { +function runOperationalValueGrader(id, evaluatorContent, meta, options) { try { - const rawResult = executeValueFunction(functionContent, meta, options); + const rawResult = executeOperationalValueEvaluator(evaluatorContent, meta, options); return normalizeResult(id, rawResult, meta); } catch (err) { const result = normalizeResult(id, null, meta); @@ -640,13 +640,13 @@ function runValueGrader(id, functionContent, meta, options) { } } -function archiveValueFunction(functionContent, expectedDigest, outputPath = VALUE_FUNCTION_PATH) { - const actualDigest = crypto.createHash("sha256").update(functionContent, "utf8").digest("hex"); +function archiveOperationalValueEvaluator(evaluatorContent, expectedDigest, outputPath = OPERATIONAL_VALUE_EVALUATOR_PATH) { + const actualDigest = crypto.createHash("sha256").update(evaluatorContent, "utf8").digest("hex"); if (!expectedDigest || actualDigest !== expectedDigest) { - throw new Error(`value function digest mismatch: expected ${expectedDigest || "none"}, got ${actualDigest}`); + throw new Error(`operational-value evaluator digest mismatch: expected ${expectedDigest || "none"}, got ${actualDigest}`); } fs.mkdirSync(path.dirname(outputPath), { recursive: true }); - fs.writeFileSync(outputPath, functionContent, { encoding: "utf8", mode: 0o600 }); + fs.writeFileSync(outputPath, evaluatorContent, { encoding: "utf8", mode: 0o600 }); } /** @@ -675,7 +675,7 @@ function runGrader(id, builtin, script, trace, config) { /** * Main entry point. Called from the github-script step with base64 manifest and exec spec. * @param {string} manifestB64 - Base64-encoded JSON manifest - * @param {string} [execSpecB64] - Base64-encoded JSON array of {id, script} + * @param {string} [execSpecB64] - Base64-encoded JSON array of {id, script|run} */ async function main(manifestB64, execSpecB64) { /** @type {{version: number, graders: any[]}} */ @@ -688,15 +688,15 @@ async function main(manifestB64, execSpecB64) { return; } - // Decode execution spec (custom scripts) - /** @type {Record} */ + // Decode trusted executable payloads for custom graders. + /** @type {Record} */ const executionMap = {}; if (execSpecB64) { try { const specJson = Buffer.from(execSpecB64, "base64").toString("utf-8"); const specs = JSON.parse(specJson); for (const s of specs) { - if (s.id && (s.script || s.function)) executionMap[s.id] = { script: s.script, function: s.function }; + if (s.id && (s.script || s.run)) executionMap[s.id] = { script: s.script, run: s.run }; } } catch (err) { core.warning(`Graders: failed to parse exec spec: ${getErrorMessage(err)}`); @@ -719,31 +719,31 @@ async function main(manifestB64, execSpecB64) { return; } - let valueFunctionArchiveError; - const valueManifest = enabledGraders.find(grader => grader.source === "value"); - if (valueManifest) { + let operationalValueEvaluatorArchiveError; + const operationalValueManifest = enabledGraders.find(grader => grader.source === "operational-value"); + if (operationalValueManifest) { try { - const functionContent = executionMap[valueManifest.id]?.function; - if (!functionContent) throw new Error("value function is missing from the execution specification"); - archiveValueFunction(functionContent, valueManifest.digest); + const evaluatorContent = executionMap[operationalValueManifest.id]?.run; + if (!evaluatorContent) throw new Error("operational-value evaluator is missing from the execution specification"); + archiveOperationalValueEvaluator(evaluatorContent, operationalValueManifest.digest); } catch (err) { - valueFunctionArchiveError = getErrorMessage(err); - core.warning(`Graders: unable to archive value function: ${valueFunctionArchiveError}`); + operationalValueEvaluatorArchiveError = getErrorMessage(err); + core.warning(`Graders: unable to archive operational-value evaluator: ${operationalValueEvaluatorArchiveError}`); } } // Single preprocessing pass core.info(`Graders: preprocessing trace files for ${enabledGraders.length} grader(s)...`); const trace = preprocessTrace(); - let valueRunMetadata; - if (enabledGraders.some(grader => grader.source === "value")) { + let operationalValueRunMetadata; + if (enabledGraders.some(grader => grader.source === "operational-value")) { try { const response = await github.rest.actions.getWorkflowRun({ owner: context.repo.owner, repo: context.repo.repo, run_id: Number(process.env.GITHUB_RUN_ID), }); - valueRunMetadata = { createdAt: response.data.created_at }; + operationalValueRunMetadata = { createdAt: response.data.created_at }; } catch (err) { core.warning(`Graders: unable to load workflow-run creation time: ${getErrorMessage(err)}`); } @@ -767,12 +767,12 @@ async function main(manifestB64, execSpecB64) { let result; if (grader.source === "builtin" && BUILTIN_GRADERS[grader.id]) { result = runBuiltinGrader(grader.id, trace, meta); - } else if (grader.source === "value" && valueFunctionArchiveError) { + } else if (grader.source === "operational-value" && operationalValueEvaluatorArchiveError) { result = normalizeResult(grader.id, null, meta); result.status = "error"; - result.error = `grader ${grader.id} runtime error: ${valueFunctionArchiveError}`; - } else if (grader.source === "value" && executionMap[grader.id]?.function) { - result = runValueGrader(grader.id, executionMap[grader.id].function, meta, { runMetadata: valueRunMetadata }); + result.error = `grader ${grader.id} runtime error: ${operationalValueEvaluatorArchiveError}`; + } else if (grader.source === "operational-value" && executionMap[grader.id]?.run) { + result = runOperationalValueGrader(grader.id, executionMap[grader.id].run, meta, { runMetadata: operationalValueRunMetadata }); } else if (executionMap[grader.id]?.script) { result = runCustomGrader(grader.id, executionMap[grader.id].script, trace, meta); } else { @@ -859,7 +859,7 @@ module.exports = { runGrader, runBuiltinGrader, runCustomGrader, - runValueGrader, + runOperationalValueGrader, normalizeResult, evaluateThreshold, BUILTIN_GRADERS, @@ -869,8 +869,8 @@ module.exports = { GRADERS_DIR, MANIFEST_PATH, RESULTS_PATH, - VALUE_FUNCTION_PATH, - archiveValueFunction, + OPERATIONAL_VALUE_EVALUATOR_PATH, + archiveOperationalValueEvaluator, MAX_FILE_SIZE, MAX_LINE_LENGTH, SCRIPT_TIMEOUT_MS, diff --git a/actions/setup/js/trace_graders.test.cjs b/actions/setup/js/trace_graders.test.cjs index 012b30845c5..7b4aa60e201 100644 --- a/actions/setup/js/trace_graders.test.cjs +++ b/actions/setup/js/trace_graders.test.cjs @@ -27,7 +27,7 @@ const { IMPLEMENTATION_ID, MANIFEST_PATH, RESULTS_PATH, - archiveValueFunction, + archiveOperationalValueEvaluator, MAX_FILE_SIZE, MAX_LINE_LENGTH, SCRIPT_TIMEOUT_MS, @@ -68,16 +68,16 @@ function makeTrace(overrides = {}) { } describe("trace_graders", () => { - describe("archiveValueFunction", () => { - it("writes only function bytes matching the frozen digest", () => { - const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "value-function-archive-")); - const outputPath = path.join(tempDir, "value_function.sh"); + describe("archiveOperationalValueEvaluator", () => { + it("writes only evaluator bytes matching the frozen digest", () => { + const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "operational-value-evaluator-archive-")); + const outputPath = path.join(tempDir, "operational_value_evaluator.sh"); const content = "#!/usr/bin/env bash\nprintf 'ok\\n'\n"; const digest = crypto.createHash("sha256").update(content, "utf8").digest("hex"); try { - archiveValueFunction(content, digest, outputPath); + archiveOperationalValueEvaluator(content, digest, outputPath); expect(fs.readFileSync(outputPath, "utf8")).toBe(content); - expect(() => archiveValueFunction(content, "invalid", outputPath)).toThrow("digest mismatch"); + expect(() => archiveOperationalValueEvaluator(content, "invalid", outputPath)).toThrow("digest mismatch"); } finally { fs.rmSync(tempDir, { recursive: true, force: true }); } diff --git a/docs/src/content/docs/reference/trace-graders.md b/docs/src/content/docs/reference/trace-graders.md index 29426920c73..70d050de378 100644 --- a/docs/src/content/docs/reference/trace-graders.md +++ b/docs/src/content/docs/reference/trace-graders.md @@ -58,29 +58,29 @@ Custom scripts must return a value and stay within 4096 characters (no `require` ## Operational value grader -Configure the reserved `value` grader with a repository-relative Bash function: +Configure the reserved `operational-value` grader with a repository-relative Bash evaluator: ```aw wrap graders: - value: - function: .github/graders/daily-file-diet-value.sh + operational-value: + run: .github/graders/daily-file-diet-operational-value.sh ``` -The compiler freezes the function bytes and records their SHA-256 digest. The function returns absolute operational attainment in `[0,1]` for the run's assigned case. A frozen baseline is optional metadata; when present, gh-aw derives `deltaFromBaseline` without changing the primary value. +The compiler freezes the evaluator bytes and records their SHA-256 digest. The evaluator returns absolute operational attainment in `[0,1]` for the run's assigned case. A frozen baseline is optional metadata; when present, gh-aw derives `deltaFromBaseline` without changing the primary value. -Each result records the complete run subject, operational case, evidence time, maturity, and provenance. Value functions may query the repositories declared by their frozen evidence contract. They receive the workflow token through `GH_TOKEN` but do not receive workflow secrets. +Each result records the complete run subject, operational case, evidence time, maturity, and provenance. Operational-value evaluators may query the repositories declared by their frozen evidence contract. They receive the workflow token through `GH_TOKEN` but do not receive workflow secrets. -Use the `aw-value` skill to design and verify a value function. +Use the `aw-value` skill to design and verify an operational-value evaluator. ### Regrade a historical run ```bash -gh aw graders value 123456789 \ +gh aw graders operational-value 123456789 \ --evidence-at 2026-08-30T12:00:00.000Z \ --json ``` -The command downloads the original grader artifact and reuses its case, run subject, and frozen function. The archived function must match the digest recorded by both the original manifest and result. Regrading emits a new observation identified by `(runId, functionDigest, evidenceAt)` and never modifies the original artifact. Use `--repo [HOST/]OWNER/REPO` to target another repository. +The command downloads the original grader artifact and reuses its case, run subject, and frozen evaluator. The archived evaluator must match the digest recorded by both the original manifest and result. Regrading emits a new observation identified by `(runId, evaluatorDigest, evidenceAt)` and never modifies the original artifact. Use `--repo [HOST/]OWNER/REPO` to target another repository. ## Output files @@ -88,9 +88,9 @@ The command downloads the original grader artifact and reuses its case, run subj |---|---| | `grader_manifest.json` | Which graders were configured and their enabled state | | `grader_results.json` | Normalized values, status, implementation identity, and value observations | -| `value_function.sh` | Exact frozen value function used for initial grading and historical replay | +| `operational_value_evaluator.sh` | Exact frozen operational-value evaluator used for initial grading and historical replay | -Both files are included in the unified `agent` artifact. +All files are included in the unified `agent` artifact. ## Execution diff --git a/docs/src/content/docs/specs/graders-specification.md b/docs/src/content/docs/specs/graders-specification.md index f30d94b5148..275111f524c 100644 --- a/docs/src/content/docs/specs/graders-specification.md +++ b/docs/src/content/docs/specs/graders-specification.md @@ -7,17 +7,17 @@ sidebar: # Graders Specification -**Version**: 0.2.0 -**Status**: Draft Specification -**Feature Status**: Experimental -**Latest Version**: [graders-specification](/gh-aw/specs/graders-specification/) +**Version**: 0.2.0 +**Status**: Draft Specification +**Feature Status**: Experimental +**Latest Version**: [graders-specification](/gh-aw/specs/graders-specification/) **Editor**: GitHub Agentic Workflows Team --- ## Abstract -This specification defines the `graders` feature in gh-aw: deterministic execution metrics and operational value observations persisted as structured artifacts. It specifies configuration, built-in grader behavior, custom inline grader constraints, value grader behavior, execution ordering, artifact outputs, historical regrading, experiment metric references, and conformance requirements. +This specification defines the `graders` feature in gh-aw: deterministic execution metrics and operational value observations persisted as structured artifacts. It specifies configuration, built-in grader behavior, custom inline grader constraints, operational-value grader behavior, execution ordering, artifact outputs, historical regrading, experiment metric references, and conformance requirements. ## Status of This Document @@ -27,19 +27,19 @@ This feature is experimental and implementations SHOULD expect iteration before ## Table of Contents -1. [Introduction](#1-introduction) -2. [Conformance](#2-conformance) -3. [Architecture](#3-architecture) -4. [Configuration Model](#4-configuration-model) -5. [Built-in Graders](#5-built-in-graders) -6. [Custom Inline Graders](#6-custom-inline-graders) -7. [Operational Value Grader](#7-operational-value-grader) -8. [Execution and Artifacts](#8-execution-and-artifacts) -9. [Experiment Metric References](#9-experiment-metric-references) -10. [Security and Isolation](#10-security-and-isolation) -11. [Compliance Testing](#11-compliance-testing) -12. [Norms](#12-norms) -13. [References](#13-references) +1. [Introduction](#1-introduction) +2. [Conformance](#2-conformance) +3. [Architecture](#3-architecture) +4. [Configuration Model](#4-configuration-model) +5. [Built-in Graders](#5-built-in-graders) +6. [Custom Inline Graders](#6-custom-inline-graders) +7. [Operational Value Grader](#7-operational-value-grader) +8. [Execution and Artifacts](#8-execution-and-artifacts) +9. [Experiment Metric References](#9-experiment-metric-references) +10. [Security and Isolation](#10-security-and-isolation) +11. [Compliance Testing](#11-compliance-testing) +12. [Norms](#12-norms) +13. [References](#13-references) 14. [Change Log](#14-change-log) --- @@ -57,7 +57,7 @@ This specification covers: - Frontmatter configuration under `graders` - Built-in grader identifiers and semantics - Custom inline grader script requirements -- Operational value function and replay requirements +- Operational-value evaluator and replay requirements - Output artifact contracts - Experiment metric integration for grader references @@ -186,22 +186,22 @@ Inline scripts MUST be rejected if they contain any forbidden pattern, including ## 7. Operational Value Grader -The reserved grader ID MUST be `value`. It MUST NOT accept an inline `script`. +The reserved grader ID MUST be `operational-value`. It MUST NOT accept an inline `script`. -The compiler MUST resolve `function` within the repository, reject symlinks and non-regular files, validate Bash syntax prerequisites, freeze the function bytes, and record their SHA-256 digest in the grader manifest and result implementation. +The compiler MUST resolve `run` within the repository, reject symlinks and non-regular files, validate Bash syntax prerequisites, freeze the evaluator bytes, and record their SHA-256 digest in the grader manifest and result implementation. -The function MUST implement `--definition` and `--grade-run`. Its primary `value` MUST be absolute operational attainment in `[0,1]` or `null`. A baseline MAY be frozen separately; gh-aw MUST derive `deltaFromBaseline` and MUST NOT replace the primary value with that delta. +The evaluator MUST implement `--definition` and `--grade-run`. Its primary `value` MUST be absolute operational attainment in `[0,1]` or `null`. A baseline MAY be frozen separately; gh-aw MUST derive `deltaFromBaseline` and MUST NOT replace the primary value with that delta. -A value observation MUST include: +An operational-value observation MUST include: - the complete workflow run subject and run attempt; - a stable opportunity key and replayable operational case; - requested evidence time, effective evidence cutoff, and maturity time; - accepted evidence provenance for every numeric value. -The effective evidence cutoff MUST NOT follow either the requested evidence time or the maturity time. A replayed observation MUST be identified by `(runId, functionDigest, evidenceAt)`. +The effective evidence cutoff MUST NOT follow either the requested evidence time or the maturity time. A replayed observation MUST be identified by `(runId, evaluatorDigest, evidenceAt)`. -Historical regrading MUST reuse the original case, run subject, and archived function. It MUST verify that the archived function matches the digest recorded by both the original manifest and result before execution. It MUST emit a new observation and MUST NOT mutate the original run artifact. +Historical regrading MUST reuse the original case, run subject, and archived evaluator. It MUST verify that the archived evaluator matches the digest recorded by both the original manifest and result before execution. It MUST emit a new observation and MUST NOT mutate the original run artifact. --- @@ -219,7 +219,7 @@ The implementation MUST produce: - `grader_manifest.json` - `grader_results.json` -- `value_function.sh` when the `value` grader is enabled +- `operational_value_evaluator.sh` when the `operational-value` grader is enabled ### 8.3 Artifact Inclusion @@ -270,8 +270,8 @@ semantic task correctness. The normative readiness, decision, and JSON contracts - Grading MUST operate on local run artifacts and MUST NOT require outbound network access for built-ins. - Custom inline graders MUST execute in a restricted context with blocked dangerous primitives. -- Value graders MAY access declared repository evidence using `GH_TOKEN`; they MUST NOT receive workflow secrets. -- Historical regrading MUST verify archived function bytes against both digest records before execution. +- Operational-value graders MAY access declared repository evidence using `GH_TOKEN`; they MUST NOT receive workflow secrets. +- Historical regrading MUST verify archived evaluator bytes against both digest records before execution. - Implementations SHOULD enforce bounded execution time for inline scripts. - Implementations SHOULD redact grader outputs when custom scripts are enabled to reduce secret leakage risk. @@ -292,9 +292,9 @@ semantic task correctness. The normative readiness, decision, and JSON contracts - **T-GRD-009**: Grader files are present in `agent` artifact. - **T-GRD-010**: `experiments.*.metric` with `grader:` validates declared enabled grader. - **T-GRD-011**: `experiments.*.metric` with `graders..value` validates declared enabled grader. -- **T-GRD-012**: `graders.value.function` is frozen and its digest is recorded. -- **T-GRD-013**: Value output, evidence cutoff, maturity, and provenance are validated. -- **T-GRD-014**: Historical regrading rejects function or run identity mismatches. +- **T-GRD-012**: `graders.operational-value.run` is frozen and its digest is recorded. +- **T-GRD-013**: Operational-value output, evidence cutoff, maturity, and provenance are validated. +- **T-GRD-014**: Historical regrading rejects evaluator or run identity mismatches. ### 11.2 Compliance Checklist @@ -306,7 +306,7 @@ semantic task correctness. The normative readiness, decision, and JSON contracts | Script safety constraints enforced | T-GRD-004, T-GRD-005 | 2 | Required | | Required artifact files emitted | T-GRD-007, T-GRD-008 | 1 | Required | | Experiment grader references validate | T-GRD-010, T-GRD-011 | 3 | Required | -| Value functions and observations validate | T-GRD-012, T-GRD-013 | 2 | Required | +| Operational-value evaluators and observations validate | T-GRD-012, T-GRD-013 | 2 | Required | | Historical regrading preserves identity | T-GRD-014 | 2 | Required | --- diff --git a/pkg/cli/graders_command.go b/pkg/cli/graders_command.go index 97dd1134963..f5d02c540a0 100644 --- a/pkg/cli/graders_command.go +++ b/pkg/cli/graders_command.go @@ -14,18 +14,18 @@ func NewGradersCommand() *cobra.Command { Use: "graders", Short: "Inspect and replay workflow graders", } - cmd.AddCommand(newGradersValueCommand()) + cmd.AddCommand(newGradersOperationalValueCommand()) return cmd } -func newGradersValueCommand() *cobra.Command { +func newGradersOperationalValueCommand() *cobra.Command { cmd := &cobra.Command{ - Use: "value ", + Use: "operational-value ", Short: "Regrade a workflow run's operational value", - Long: `Regrade the value observation from a completed workflow run at an explicit -evidence cutoff. The command verifies and executes the exact value function archived + Long: `Regrade the operational-value observation from a completed workflow run at an explicit +evidence cutoff. The command verifies and executes the exact evaluator archived by the run. The original artifact is not modified.`, - Example: ` ` + string(constants.CLIExtensionPrefix) + ` graders value 123456789 \ + Example: ` ` + string(constants.CLIExtensionPrefix) + ` graders operational-value 123456789 \ --evidence-at 2026-08-30T12:00:00.000Z --json`, Args: cobra.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) error { @@ -36,7 +36,7 @@ by the run. The original artifact is not modified.`, evidenceAt, _ := cmd.Flags().GetString("evidence-at") repoOverride, _ := cmd.Flags().GetString("repo") jsonOutput, _ := cmd.Flags().GetBool("json") - return RunValueRegrade(cmd.Context(), ValueRegradeConfig{ + return RunOperationalValueRegrade(cmd.Context(), OperationalValueRegradeConfig{ RunID: runID, EvidenceAt: evidenceAt, RepoOverride: repoOverride, diff --git a/pkg/cli/graders_operational_value_regrade.go b/pkg/cli/graders_operational_value_regrade.go new file mode 100644 index 00000000000..b1cd0af0855 --- /dev/null +++ b/pkg/cli/graders_operational_value_regrade.go @@ -0,0 +1,658 @@ +package cli + +import ( + "bytes" + "context" + "crypto/sha256" + "encoding/hex" + "encoding/json" + "errors" + "fmt" + "io" + "math" + "os" + "os/exec" + "path/filepath" + "strconv" + "strings" + "time" + "unicode/utf8" + + "github.com/github/gh-aw/pkg/console" + "github.com/github/gh-aw/pkg/constants" + "github.com/github/gh-aw/pkg/repoutil" +) + +const ( + maxOperationalValueRegradeEvaluatorBytes = 64 * 1024 + maxOperationalValueRegradeOutputBytes = 1024 * 1024 + operationalValueDefinitionTimeout = 5 * time.Second + operationalValueEvaluatorTimeout = 2 * time.Minute +) + +// OperationalValueRegradeConfig configures historical operational-value regrading. +type OperationalValueRegradeConfig struct { + RunID int64 + EvidenceAt string + RepoOverride string + JSONOutput bool +} + +type operationalValueGraderManifest struct { + Version int `json:"version"` + Graders []operationalValueGraderManifestEntry `json:"graders"` +} + +type operationalValueGraderManifestEntry struct { + ID string `json:"id"` + Name string `json:"name"` + Source string `json:"source"` + Enabled bool `json:"enabled"` + Unit string `json:"unit,omitempty"` + Direction string `json:"direction,omitempty"` + Threshold *float64 `json:"threshold,omitempty"` + Digest string `json:"digest"` + Run string `json:"run"` + Config map[string]any `json:"config,omitempty"` +} + +type operationalValueRunSubject struct { + ID string `json:"id"` + Attempt int `json:"attempt"` + Repository string `json:"repository"` + Workflow string `json:"workflow"` + Ref string `json:"ref"` + SHA string `json:"sha"` + EventName string `json:"eventName"` + CreatedAt *string `json:"createdAt"` +} + +type operationalValueRunRequest struct { + SchemaVersion int `json:"schemaVersion"` + Run operationalValueRunSubject `json:"run"` + EvidenceAt string `json:"evidenceAt"` + Case map[string]any `json:"case"` + Event any `json:"event"` + Config map[string]any `json:"config"` +} + +type operationalValueRegradeObservation struct { + Subject graderArtifactSubject `json:"subject"` + OpportunityKey string `json:"opportunityKey"` + EvidenceAt string `json:"evidenceAt"` + EvidenceCutoff string `json:"evidenceCutoff"` + MaturesAt string `json:"maturesAt"` + Mature bool `json:"mature"` + Case map[string]any `json:"case"` + Provenance []map[string]any `json:"provenance"` +} + +type operationalValueRegradeResult struct { + ID string `json:"id"` + Name string `json:"name"` + Value *float64 `json:"value"` + Unit string `json:"unit"` + Passed *bool `json:"passed"` + Status string `json:"status"` + Source string `json:"source"` + Message string `json:"message,omitempty"` + Observation operationalValueRegradeObservation `json:"observation"` + Diagnostics map[string]any `json:"diagnostics,omitempty"` + BaselineValue *float64 `json:"baselineValue"` + DeltaFromBaseline *float64 `json:"deltaFromBaseline"` + Implementation graderArtifactImplementation `json:"implementation"` +} + +type operationalValueRegradeMetadata struct { + Identity operationalValueRegradeIdentity `json:"identity"` + OriginalEvidenceAt string `json:"originalEvidenceAt"` +} + +type operationalValueRegradeIdentity struct { + RunID string `json:"runId"` + EvaluatorDigest string `json:"evaluatorDigest"` + EvidenceAt string `json:"evidenceAt"` +} + +type operationalValueRegradeArtifact struct { + Version int `json:"version"` + Run graderArtifactRun `json:"run"` + Regrade operationalValueRegradeMetadata `json:"regrade"` + Results []operationalValueRegradeResult `json:"results"` +} + +type operationalValueEvaluatorExecution struct { + Value *float64 + Message string + Diagnostics map[string]any + Observation operationalValueRegradeObservation + BaselineValue *float64 + DeltaFromBaseline *float64 +} + +type boundedCommandBuffer struct { + bytes.Buffer + limit int + exceeded bool +} + +func (b *boundedCommandBuffer) Write(data []byte) (int, error) { + written := len(data) + remaining := b.limit - b.Len() + if remaining > 0 { + if len(data) < remaining { + remaining = len(data) + } + _, _ = b.Buffer.Write(data[:remaining]) + } + if written > remaining { + b.exceeded = true + } + return written, nil +} + +// RunOperationalValueRegrade downloads a historical grader observation and recomputes it as of EvidenceAt. +func RunOperationalValueRegrade(ctx context.Context, config OperationalValueRegradeConfig) error { + evidenceAt, err := parseOperationalValueTimestamp(config.EvidenceAt, "evidence-at") + if err != nil { + return err + } + repoSlug, artifactRepo, err := resolveOperationalValueRegradeRepo(config.RepoOverride) + if err != nil { + return err + } + + tempDir, err := os.MkdirTemp("", "gh-aw-operational-value-regrade-*") + if err != nil { + return fmt.Errorf("failed to create operational-value regrade directory: %w", err) + } + defer os.RemoveAll(tempDir) + + runIDText := strconv.FormatInt(config.RunID, 10) + source := newGitHubGraderRunArtifactSource(tempDir, artifactRepo) + runData := source.downloadGraderArtifact(ctx, config.RunID, runIDText) + if runData.ExclusionReason != "" { + return fmt.Errorf("cannot regrade run %d: grader artifact %s", config.RunID, runData.ExclusionReason) + } + runDir := filepath.Join(tempDir, runIDText) + evaluatorContent, evaluatorDigest, err := readArchivedOperationalValueEvaluator(runDir) + if err != nil { + return err + } + manifest, err := readOperationalValueGraderManifest(runDir) + if err != nil { + return err + } + manifestEntry, originalResult, err := selectHistoricalOperationalValueGrader(manifest, runData.Artifact, runIDText) + if err != nil { + return err + } + if err := verifyHistoricalOperationalValueIdentity(repoSlug, evaluatorDigest, manifestEntry, originalResult, runData.Artifact.Run, runIDText); err != nil { + return err + } + + execution, err := executeHistoricalOperationalValueEvaluator(ctx, evaluatorContent, *manifestEntry, *originalResult.Observation, config.EvidenceAt, evidenceAt) + if err != nil { + return err + } + artifact := buildOperationalValueRegradeArtifact(runData.Artifact.Run, *manifestEntry, *originalResult, evaluatorDigest, execution) + return renderOperationalValueRegradeArtifact(artifact, config.JSONOutput) +} + +func resolveOperationalValueRegradeRepo(repoOverride string) (repoSlug, artifactRepo string, err error) { + if repoOverride == "" { + repoSlug, err = GetCurrentRepoSlug() + return repoSlug, "", err + } + ownerRepo, _ := repoutil.NormalizeRepoForAPI(repoOverride) + owner, repo, splitErr := repoutil.SplitRepoSlug(ownerRepo) + if splitErr != nil { + return "", "", fmt.Errorf("invalid --repo %q: expected [HOST/]owner/repo", repoOverride) + } + return strings.Join([]string{owner, repo}, "/"), repoOverride, nil +} + +func readArchivedOperationalValueEvaluator(runDir string) (string, string, error) { + evaluatorPath := filepath.Join(runDir, "agent", "graders", constants.OperationalValueEvaluatorFilename) + if _, err := os.Stat(evaluatorPath); err != nil { + evaluatorPath = filepath.Join(runDir, "graders", constants.OperationalValueEvaluatorFilename) + } + file, err := os.Open(evaluatorPath) + if err != nil { + return "", "", fmt.Errorf("cannot read archived operational-value evaluator: %w", err) + } + defer file.Close() + info, err := file.Stat() + if err != nil { + return "", "", fmt.Errorf("cannot inspect archived operational-value evaluator: %w", err) + } + if !info.Mode().IsRegular() { + return "", "", errors.New("archived operational-value evaluator must be a regular file") + } + content, err := io.ReadAll(io.LimitReader(file, maxOperationalValueRegradeEvaluatorBytes+1)) + if err != nil { + return "", "", fmt.Errorf("cannot read archived operational-value evaluator: %w", err) + } + if len(content) > maxOperationalValueRegradeEvaluatorBytes { + return "", "", fmt.Errorf("archived operational-value evaluator exceeds the %d-byte limit", maxOperationalValueRegradeEvaluatorBytes) + } + if !utf8.Valid(content) { + return "", "", errors.New("archived operational-value evaluator must be valid UTF-8") + } + evaluatorContent := string(content) + if !strings.HasPrefix(evaluatorContent, "#!/usr/bin/env bash\n") && !strings.HasPrefix(evaluatorContent, "#!/bin/bash\n") { + return "", "", errors.New("archived operational-value evaluator must start with a Bash shebang") + } + digest := sha256.Sum256(content) + return evaluatorContent, hex.EncodeToString(digest[:]), nil +} + +func readOperationalValueGraderManifest(runDir string) (*operationalValueGraderManifest, error) { + manifestPath := filepath.Join(runDir, "agent", "graders", constants.GraderManifestFilename) + if _, err := os.Stat(manifestPath); err != nil { + manifestPath = filepath.Join(runDir, "graders", constants.GraderManifestFilename) + } + file, err := os.Open(manifestPath) + if err != nil { + return nil, fmt.Errorf("cannot read grader manifest: %w", err) + } + defer file.Close() + data, err := io.ReadAll(io.LimitReader(file, maxGraderResultsBytes+1)) + if err != nil { + return nil, fmt.Errorf("cannot read grader manifest: %w", err) + } + if len(data) > maxGraderResultsBytes { + return nil, fmt.Errorf("grader manifest exceeds the %d-byte limit", maxGraderResultsBytes) + } + var manifest operationalValueGraderManifest + if err := json.Unmarshal(data, &manifest); err != nil || manifest.Version <= 0 { + return nil, errors.New("grader manifest is malformed") + } + return &manifest, nil +} + +func selectHistoricalOperationalValueGrader(manifest *operationalValueGraderManifest, artifact *graderResultsArtifact, runID string) (*operationalValueGraderManifestEntry, *graderArtifactResult, error) { + if manifest == nil || artifact == nil { + return nil, nil, fmt.Errorf("run %s has no grader data", runID) + } + var manifestEntry *operationalValueGraderManifestEntry + for index := range manifest.Graders { + if manifest.Graders[index].ID != "operational-value" { + continue + } + if manifestEntry != nil { + return nil, nil, fmt.Errorf("run %s grader manifest contains duplicate operational-value graders", runID) + } + manifestEntry = &manifest.Graders[index] + } + var result *graderArtifactResult + for index := range artifact.Results { + if artifact.Results[index].ID != "operational-value" { + continue + } + if result != nil { + return nil, nil, fmt.Errorf("run %s grader artifact contains duplicate operational-value results", runID) + } + result = &artifact.Results[index] + } + if manifestEntry == nil || !manifestEntry.Enabled || manifestEntry.Source != "operational-value" { + return nil, nil, fmt.Errorf("run %s did not use an enabled operational-value grader", runID) + } + if result == nil || result.Observation == nil { + return nil, nil, fmt.Errorf("run %s has no replayable operational-value observation", runID) + } + return manifestEntry, result, nil +} + +func verifyHistoricalOperationalValueIdentity(repoSlug, evaluatorDigest string, manifest *operationalValueGraderManifestEntry, result *graderArtifactResult, run graderArtifactRun, runID string) error { + if run.ID != runID || run.Attempt <= 0 { + return fmt.Errorf("grader artifact run identity does not match run %s", runID) + } + if manifest.Digest == "" || result.Implementation.Digest == "" || manifest.Digest != result.Implementation.Digest { + return fmt.Errorf("run %s has inconsistent operational-value evaluator provenance", runID) + } + if evaluatorDigest != manifest.Digest { + return fmt.Errorf("operational-value evaluator digest mismatch: run %s recorded %s, local evaluator is %s", runID, manifest.Digest, evaluatorDigest) + } + subject := result.Observation.Subject + if subject.Type != "workflow-run" || subject.RunID != runID || subject.Attempt != run.Attempt { + return fmt.Errorf("operational-value observation subject does not match run %s attempt %d", runID, run.Attempt) + } + if subject.Repository == "" || subject.Repository != repoSlug { + return fmt.Errorf("operational-value observation repository %q does not match %q", subject.Repository, repoSlug) + } + if result.Observation.Case == nil { + return fmt.Errorf("run %s operational-value observation has no replayable case", runID) + } + return nil +} + +func executeHistoricalOperationalValueEvaluator(ctx context.Context, evaluatorContent string, manifest operationalValueGraderManifestEntry, original graderArtifactObservation, evidenceAtText string, evidenceAt time.Time) (*operationalValueEvaluatorExecution, error) { + bashPath := "/bin/bash" + if _, err := os.Stat(bashPath); err != nil { + return nil, fmt.Errorf("bash is required to regrade operational value: %w", err) + } + tempDir, err := os.MkdirTemp("", "gh-aw-operational-value-evaluator-*") + if err != nil { + return nil, fmt.Errorf("failed to create operational-value evaluator directory: %w", err) + } + defer os.RemoveAll(tempDir) + evaluatorPath := filepath.Join(tempDir, "operational-value.sh") + if err := os.WriteFile(evaluatorPath, []byte(evaluatorContent), constants.FilePermExecutable); err != nil { + return nil, fmt.Errorf("failed to stage operational-value evaluator: %w", err) + } + if _, err := runOperationalValueEvaluatorBash(ctx, bashPath, evaluatorPath, []string{"-n", evaluatorPath}, nil, operationalValueDefinitionTimeout); err != nil { + return nil, fmt.Errorf("operational-value evaluator has invalid Bash syntax: %w", err) + } + definitionJSON, err := runOperationalValueEvaluatorBash(ctx, bashPath, evaluatorPath, []string{evaluatorPath, "--definition"}, nil, operationalValueDefinitionTimeout) + if err != nil { + return nil, fmt.Errorf("operational-value evaluator --definition failed: %w", err) + } + baselineValue, err := parseOperationalValueDefinition(definitionJSON) + if err != nil { + return nil, err + } + evaluatorConfig := manifest.Config + if evaluatorConfig == nil { + evaluatorConfig = map[string]any{} + } + request := operationalValueRunRequest{ + SchemaVersion: 1, + Run: operationalValueRunSubject{ + ID: original.Subject.RunID, + Attempt: original.Subject.Attempt, + Repository: original.Subject.Repository, + Workflow: original.Subject.Workflow, + Ref: original.Subject.Ref, + SHA: original.Subject.SHA, + EventName: original.Subject.EventName, + CreatedAt: original.Subject.CreatedAt, + }, + EvidenceAt: evidenceAtText, + Case: original.Case, + Event: nil, + Config: evaluatorConfig, + } + requestJSON, err := json.Marshal(request) + if err != nil { + return nil, fmt.Errorf("failed to encode operational-value regrade request: %w", err) + } + outputJSON, err := runOperationalValueEvaluatorBash(ctx, bashPath, evaluatorPath, []string{evaluatorPath, "--grade-run"}, requestJSON, operationalValueEvaluatorTimeout) + if err != nil { + return nil, fmt.Errorf("operational-value evaluator --grade-run failed: %w", err) + } + return parseOperationalValueEvaluatorOutput(outputJSON, original.Subject, evidenceAtText, evidenceAt, baselineValue) +} + +func runOperationalValueEvaluatorBash(ctx context.Context, bashPath, evaluatorPath string, args []string, input []byte, timeout time.Duration) ([]byte, error) { + commandCtx, cancel := context.WithTimeout(ctx, timeout) + defer cancel() + cmd := exec.CommandContext(commandCtx, bashPath, args...) + cmd.Dir = filepath.Dir(evaluatorPath) + cmd.Env = operationalValueEvaluatorEnvironment(os.Environ()) + cmd.Stdin = bytes.NewReader(input) + stdout := &boundedCommandBuffer{limit: maxOperationalValueRegradeOutputBytes} + stderr := &boundedCommandBuffer{limit: maxOperationalValueRegradeOutputBytes} + cmd.Stdout = stdout + cmd.Stderr = stderr + err := cmd.Run() + if errors.Is(commandCtx.Err(), context.DeadlineExceeded) { + return nil, fmt.Errorf("timed out after %s", timeout) + } + if stdout.exceeded || stderr.exceeded { + return nil, fmt.Errorf("output exceeded the %d-byte limit", maxOperationalValueRegradeOutputBytes) + } + if err != nil { + message := strings.TrimSpace(stderr.String()) + if message != "" { + return nil, errors.New(message) + } + return nil, err + } + return stdout.Bytes(), nil +} + +func operationalValueEvaluatorEnvironment(environ []string) []string { + keys := []string{ + "PATH", "HOME", "TMPDIR", "TEMP", "TMP", "SystemRoot", "ComSpec", + "GH_TOKEN", "GH_HOST", "GITHUB_API_URL", "GITHUB_SERVER_URL", + } + values := make(map[string]string, len(environ)) + for _, entry := range environ { + key, value, ok := strings.Cut(entry, "=") + if ok { + values[key] = value + } + } + env := make([]string, 0, len(keys)) + for _, key := range keys { + if value := values[key]; value != "" { + env = append(env, key+"="+value) + } + } + return env +} + +func parseOperationalValueDefinition(data []byte) (*float64, error) { + var definition struct { + SchemaVersion int `json:"schemaVersion"` + Grader string `json:"grader"` + Baseline struct { + Mode string `json:"mode"` + Value json.RawMessage `json:"value"` + } `json:"baseline"` + } + if err := json.Unmarshal(data, &definition); err != nil { + return nil, fmt.Errorf("operational-value evaluator returned an invalid definition: %w", err) + } + if definition.SchemaVersion != 4 || definition.Grader != "operational-value" { + return nil, errors.New("operational-value evaluator definition must use schemaVersion 4 and grader \"operational-value\"") + } + valueJSON := bytes.TrimSpace(definition.Baseline.Value) + switch definition.Baseline.Mode { + case "attainment-only": + if !bytes.Equal(valueJSON, []byte("null")) { + return nil, errors.New("attainment-only operational-value evaluators must have a null baseline value") + } + return nil, nil + case "baseline-comparable": + value, err := parseNullableOperationalValue(valueJSON) + if err != nil || value == nil || *value < 0 || *value > 1 { + return nil, errors.New("baseline-comparable operational-value evaluators require a baseline value in [0,1]") + } + return value, nil + default: + return nil, errors.New("operational-value evaluator baseline mode must be \"baseline-comparable\" or \"attainment-only\"") + } +} + +func parseOperationalValueEvaluatorOutput(data []byte, subject graderArtifactSubject, evidenceAtText string, evidenceAt time.Time, baselineValue *float64) (*operationalValueEvaluatorExecution, error) { + var fields map[string]json.RawMessage + if err := json.Unmarshal(data, &fields); err != nil || fields == nil { + return nil, errors.New("operational-value evaluator returned invalid JSON") + } + value, err := parseNullableOperationalValue(fields["value"]) + if err != nil || (value != nil && (*value < 0 || *value > 1)) { + return nil, errors.New("operational-value evaluator result.value must be null or a finite number in [0,1]") + } + observation, err := parseOperationalValueObservation(fields, subject, evidenceAtText, evidenceAt, value) + if err != nil { + return nil, err + } + var message string + if rawMessage, ok := fields["message"]; ok { + if err := json.Unmarshal(rawMessage, &message); err != nil { + message = "" + } + } + var diagnostics map[string]any + if rawDiagnostics, ok := fields["diagnostics"]; ok { + if err := json.Unmarshal(rawDiagnostics, &diagnostics); err != nil { + diagnostics = nil + } + } + var delta *float64 + if value != nil && baselineValue != nil { + computed := *value - *baselineValue + delta = &computed + } + return &operationalValueEvaluatorExecution{ + Value: value, + Message: message, + Diagnostics: diagnostics, + Observation: observation, + BaselineValue: baselineValue, + DeltaFromBaseline: delta, + }, nil +} + +func parseOperationalValueObservation(fields map[string]json.RawMessage, subject graderArtifactSubject, evidenceAtText string, evidenceAt time.Time, value *float64) (operationalValueRegradeObservation, error) { + var caseValue map[string]any + if err := json.Unmarshal(fields["case"], &caseValue); err != nil || caseValue == nil { + return operationalValueRegradeObservation{}, errors.New("operational-value evaluator output.case must be an object") + } + var opportunityKey, evidenceCutoffText, maturesAtText string + if err := json.Unmarshal(fields["opportunityKey"], &opportunityKey); err != nil || strings.TrimSpace(opportunityKey) == "" { + return operationalValueRegradeObservation{}, errors.New("operational-value evaluator opportunityKey must be a non-empty string") + } + if err := json.Unmarshal(fields["evidenceCutoff"], &evidenceCutoffText); err != nil { + return operationalValueRegradeObservation{}, errors.New("operational-value evaluator evidenceCutoff must be a UTC ISO-8601 timestamp") + } + if err := json.Unmarshal(fields["maturesAt"], &maturesAtText); err != nil { + return operationalValueRegradeObservation{}, errors.New("operational-value evaluator maturesAt must be a UTC ISO-8601 timestamp") + } + evidenceCutoff, err := parseOperationalValueTimestamp(evidenceCutoffText, "evidenceCutoff") + if err != nil { + return operationalValueRegradeObservation{}, err + } + maturesAt, err := parseOperationalValueTimestamp(maturesAtText, "maturesAt") + if err != nil { + return operationalValueRegradeObservation{}, err + } + if evidenceCutoff.After(evidenceAt) { + return operationalValueRegradeObservation{}, errors.New("operational-value evaluator evidenceCutoff cannot follow evidenceAt") + } + if evidenceCutoff.After(maturesAt) { + return operationalValueRegradeObservation{}, errors.New("operational-value evaluator evidenceCutoff cannot follow maturesAt") + } + var provenance []map[string]any + if err := json.Unmarshal(fields["provenance"], &provenance); err != nil || (value != nil && len(provenance) == 0) { + return operationalValueRegradeObservation{}, errors.New("operational-value evaluator must return provenance for a numeric value") + } + for _, item := range provenance { + for _, key := range []string{"repository", "kind", "ref"} { + text, ok := item[key].(string) + if !ok || text == "" { + return operationalValueRegradeObservation{}, errors.New("operational-value evaluator provenance entries require repository, kind, and ref") + } + } + } + return operationalValueRegradeObservation{ + Subject: subject, + OpportunityKey: opportunityKey, + EvidenceAt: evidenceAtText, + EvidenceCutoff: evidenceCutoffText, + MaturesAt: maturesAtText, + Mature: !evidenceAt.Before(maturesAt), + Case: caseValue, + Provenance: provenance, + }, nil +} + +func parseNullableOperationalValue(data []byte) (*float64, error) { + data = bytes.TrimSpace(data) + if bytes.Equal(data, []byte("null")) { + return nil, nil + } + var value float64 + if len(data) == 0 || json.Unmarshal(data, &value) != nil || math.IsNaN(value) || math.IsInf(value, 0) { + return nil, errors.New("expected a finite number or null") + } + return &value, nil +} + +func parseOperationalValueTimestamp(value, label string) (time.Time, error) { + for _, layout := range []string{"2006-01-02T15:04:05Z", "2006-01-02T15:04:05.000Z"} { + if parsed, err := time.Parse(layout, value); err == nil { + return parsed, nil + } + } + return time.Time{}, fmt.Errorf("%s must be a UTC ISO-8601 timestamp", label) +} + +func buildOperationalValueRegradeArtifact(run graderArtifactRun, manifest operationalValueGraderManifestEntry, original graderArtifactResult, evaluatorDigest string, execution *operationalValueEvaluatorExecution) operationalValueRegradeArtifact { + passed := evaluateOperationalValueThreshold(execution.Value, manifest.Direction, manifest.Threshold) + status := "unavailable" + if execution.Value != nil { + status = "pass" + if passed != nil && !*passed { + status = "fail" + } + } + return operationalValueRegradeArtifact{ + Version: 1, + Run: run, + Regrade: operationalValueRegradeMetadata{ + Identity: operationalValueRegradeIdentity{ + RunID: run.ID, + EvaluatorDigest: evaluatorDigest, + EvidenceAt: execution.Observation.EvidenceAt, + }, + OriginalEvidenceAt: original.Observation.EvidenceAt, + }, + Results: []operationalValueRegradeResult{{ + ID: "operational-value", + Name: manifest.Name, + Value: execution.Value, + Unit: manifest.Unit, + Passed: passed, + Status: status, + Source: "operational-value", + Message: execution.Message, + Observation: execution.Observation, + Diagnostics: execution.Diagnostics, + BaselineValue: execution.BaselineValue, + DeltaFromBaseline: execution.DeltaFromBaseline, + Implementation: graderArtifactImplementation{ + ID: "gh-aw-graders-operational-value-regrade", + Version: 1, + Digest: evaluatorDigest, + }, + }}, + } +} + +func evaluateOperationalValueThreshold(value *float64, direction string, threshold *float64) *bool { + if value == nil || threshold == nil { + return nil + } + passed := *value >= *threshold + if direction == "lower_is_better" { + passed = *value <= *threshold + } + return &passed +} + +func renderOperationalValueRegradeArtifact(artifact operationalValueRegradeArtifact, jsonOutput bool) error { + result := artifact.Results[0] + if jsonOutput { + data, err := marshalIndentJSONOrWrap(artifact, "operational-value regrade observation") + if err != nil { + return err + } + fmt.Fprintln(os.Stdout, string(data)) + return nil + } + value := "null" + if result.Value != nil { + value = strconv.FormatFloat(*result.Value, 'f', -1, 64) + } + fmt.Fprintln(os.Stdout, console.FormatSuccessMessage(fmt.Sprintf("Regraded operational value for run %s: %s", artifact.Run.ID, value))) + fmt.Fprintf(os.Stdout, "Evidence cutoff: %s\n", result.Observation.EvidenceCutoff) + fmt.Fprintf(os.Stdout, "Mature: %t\n", result.Observation.Mature) + if result.BaselineValue != nil { + fmt.Fprintf(os.Stdout, "Baseline value: %s\n", strconv.FormatFloat(*result.BaselineValue, 'f', -1, 64)) + fmt.Fprintf(os.Stdout, "Delta from baseline: %s\n", strconv.FormatFloat(*result.DeltaFromBaseline, 'f', -1, 64)) + } + return nil +} diff --git a/pkg/cli/graders_value_regrade_test.go b/pkg/cli/graders_operational_value_regrade_test.go similarity index 64% rename from pkg/cli/graders_value_regrade_test.go rename to pkg/cli/graders_operational_value_regrade_test.go index 89c69e6604c..ea26308bc0d 100644 --- a/pkg/cli/graders_value_regrade_test.go +++ b/pkg/cli/graders_operational_value_regrade_test.go @@ -7,20 +7,20 @@ import ( "time" ) -func historicalValueFixture() (valueGraderManifestEntry, graderArtifactResult, graderArtifactRun) { +func historicalOperationalValueFixture() (operationalValueGraderManifestEntry, graderArtifactResult, graderArtifactRun) { digest := strings.Repeat("a", 64) createdAt := "2026-08-23T11:58:00Z" - manifest := valueGraderManifestEntry{ - ID: "value", + manifest := operationalValueGraderManifestEntry{ + ID: "operational-value", Name: "Operational value", - Source: "value", + Source: "operational-value", Enabled: true, Direction: "higher_is_better", Digest: digest, Config: map[string]any{"window": "7d"}, } result := graderArtifactResult{ - ID: "value", + ID: "operational-value", Implementation: graderArtifactImplementation{ ID: "gh-aw-graders", Version: 1, @@ -45,35 +45,35 @@ func historicalValueFixture() (valueGraderManifestEntry, graderArtifactResult, g return manifest, result, graderArtifactRun{ID: "12345", Attempt: 2} } -func TestVerifyHistoricalValueIdentity(t *testing.T) { - manifest, result, run := historicalValueFixture() - if err := verifyHistoricalValueIdentity("github/gh-aw", manifest.Digest, &manifest, &result, run, run.ID); err != nil { +func TestVerifyHistoricalOperationalValueIdentity(t *testing.T) { + manifest, result, run := historicalOperationalValueFixture() + if err := verifyHistoricalOperationalValueIdentity("github/gh-aw", manifest.Digest, &manifest, &result, run, run.ID); err != nil { t.Fatalf("expected valid identity, got %v", err) } t.Run("digest mismatch", func(t *testing.T) { - err := verifyHistoricalValueIdentity("github/gh-aw", strings.Repeat("b", 64), &manifest, &result, run, run.ID) + err := verifyHistoricalOperationalValueIdentity("github/gh-aw", strings.Repeat("b", 64), &manifest, &result, run, run.ID) if err == nil || !strings.Contains(err.Error(), "digest mismatch") { t.Fatalf("expected digest mismatch, got %v", err) } }) t.Run("repository mismatch", func(t *testing.T) { - err := verifyHistoricalValueIdentity("github/other", manifest.Digest, &manifest, &result, run, run.ID) + err := verifyHistoricalOperationalValueIdentity("github/other", manifest.Digest, &manifest, &result, run, run.ID) if err == nil || !strings.Contains(err.Error(), "repository") { t.Fatalf("expected repository mismatch, got %v", err) } }) } -func TestExecuteHistoricalValueFunction(t *testing.T) { - manifest, result, _ := historicalValueFixture() +func TestExecuteHistoricalOperationalValueEvaluator(t *testing.T) { + manifest, result, _ := historicalOperationalValueFixture() manifest.Config = nil - functionContent := `#!/usr/bin/env bash + evaluatorContent := `#!/usr/bin/env bash set -euo pipefail case ${1:-} in --definition) - printf '%s\n' '{"schemaVersion":4,"grader":"value","baseline":{"mode":"baseline-comparable","value":0.25}}' + printf '%s\n' '{"schemaVersion":4,"grader":"operational-value","baseline":{"mode":"baseline-comparable","value":0.25}}' ;; --grade-run) request=$(cat) @@ -85,16 +85,16 @@ case ${1:-} in *) exit 1 ;; esac ` - evidenceAt, err := parseValueTimestamp("2026-09-01T12:00:00Z", "evidence-at") + evidenceAt, err := parseOperationalValueTimestamp("2026-09-01T12:00:00Z", "evidence-at") if err != nil { t.Fatal(err) } - execution, err := executeHistoricalValueFunction( - context.Background(), functionContent, manifest, *result.Observation, + execution, err := executeHistoricalOperationalValueEvaluator( + context.Background(), evaluatorContent, manifest, *result.Observation, "2026-09-01T12:00:00Z", evidenceAt, ) if err != nil { - t.Fatalf("executeHistoricalValueFunction() error = %v", err) + t.Fatalf("executeHistoricalOperationalValueEvaluator() error = %v", err) } if execution.Value == nil || *execution.Value != 0.75 { t.Fatalf("value = %v, want 0.75", execution.Value) @@ -107,12 +107,12 @@ esac } } -func TestParseValueFunctionOutputRejectsFutureEvidence(t *testing.T) { +func TestParseOperationalValueEvaluatorOutputRejectsFutureEvidence(t *testing.T) { evidenceAt, err := time.Parse(time.RFC3339, "2026-08-24T12:00:00Z") if err != nil { t.Fatal(err) } - _, err = parseValueFunctionOutput([]byte(`{ + _, err = parseOperationalValueEvaluatorOutput([]byte(`{ "value": 1, "opportunityKey": "issue:42", "case": {"issue": 42}, @@ -127,13 +127,13 @@ func TestParseValueFunctionOutputRejectsFutureEvidence(t *testing.T) { func TestNewGradersCommand(t *testing.T) { command := NewGradersCommand() - valueCommand, _, err := command.Find([]string{"value"}) + operationalValueCommand, _, err := command.Find([]string{"operational-value"}) if err != nil { t.Fatal(err) } for _, name := range []string{"evidence-at", "repo", "json"} { - if valueCommand.Flags().Lookup(name) == nil { - t.Fatalf("value command missing --%s", name) + if operationalValueCommand.Flags().Lookup(name) == nil { + t.Fatalf("operational-value command missing --%s", name) } } } diff --git a/pkg/cli/graders_value_regrade.go b/pkg/cli/graders_value_regrade.go deleted file mode 100644 index ff051b7321d..00000000000 --- a/pkg/cli/graders_value_regrade.go +++ /dev/null @@ -1,635 +0,0 @@ -package cli - -import ( - "bytes" - "context" - "crypto/sha256" - "encoding/hex" - "encoding/json" - "errors" - "fmt" - "io" - "math" - "os" - "os/exec" - "path/filepath" - "strconv" - "strings" - "time" - "unicode/utf8" - - "github.com/github/gh-aw/pkg/console" - "github.com/github/gh-aw/pkg/constants" - "github.com/github/gh-aw/pkg/repoutil" -) - -const ( - maxValueRegradeFunctionBytes = 64 * 1024 - maxValueRegradeOutputBytes = 1024 * 1024 - valueDefinitionTimeout = 5 * time.Second - valueFunctionTimeout = 2 * time.Minute -) - -// ValueRegradeConfig configures historical value regrading. -type ValueRegradeConfig struct { - RunID int64 - EvidenceAt string - RepoOverride string - JSONOutput bool -} - -type valueGraderManifest struct { - Version int `json:"version"` - Graders []valueGraderManifestEntry `json:"graders"` -} - -type valueGraderManifestEntry struct { - ID string `json:"id"` - Name string `json:"name"` - Source string `json:"source"` - Enabled bool `json:"enabled"` - Unit string `json:"unit,omitempty"` - Direction string `json:"direction,omitempty"` - Threshold *float64 `json:"threshold,omitempty"` - Digest string `json:"digest"` - Function string `json:"function"` - Config map[string]any `json:"config,omitempty"` -} - -type valueRunSubject struct { - ID string `json:"id"` - Attempt int `json:"attempt"` - Repository string `json:"repository"` - Workflow string `json:"workflow"` - Ref string `json:"ref"` - SHA string `json:"sha"` - EventName string `json:"eventName"` - CreatedAt *string `json:"createdAt"` -} - -type valueRunRequest struct { - SchemaVersion int `json:"schemaVersion"` - Run valueRunSubject `json:"run"` - EvidenceAt string `json:"evidenceAt"` - Case map[string]any `json:"case"` - Event any `json:"event"` - Config map[string]any `json:"config"` -} - -type valueRegradeObservation struct { - Subject graderArtifactSubject `json:"subject"` - OpportunityKey string `json:"opportunityKey"` - EvidenceAt string `json:"evidenceAt"` - EvidenceCutoff string `json:"evidenceCutoff"` - MaturesAt string `json:"maturesAt"` - Mature bool `json:"mature"` - Case map[string]any `json:"case"` - Provenance []map[string]any `json:"provenance"` -} - -type valueRegradeResult struct { - ID string `json:"id"` - Name string `json:"name"` - Value *float64 `json:"value"` - Unit string `json:"unit"` - Passed *bool `json:"passed"` - Status string `json:"status"` - Source string `json:"source"` - Message string `json:"message,omitempty"` - Observation valueRegradeObservation `json:"observation"` - Diagnostics map[string]any `json:"diagnostics,omitempty"` - BaselineValue *float64 `json:"baselineValue"` - DeltaFromBaseline *float64 `json:"deltaFromBaseline"` - Implementation graderArtifactImplementation `json:"implementation"` -} - -type valueRegradeMetadata struct { - Identity valueRegradeIdentity `json:"identity"` - OriginalEvidenceAt string `json:"originalEvidenceAt"` -} - -type valueRegradeIdentity struct { - RunID string `json:"runId"` - FunctionDigest string `json:"functionDigest"` - EvidenceAt string `json:"evidenceAt"` -} - -type valueRegradeArtifact struct { - Version int `json:"version"` - Run graderArtifactRun `json:"run"` - Regrade valueRegradeMetadata `json:"regrade"` - Results []valueRegradeResult `json:"results"` -} - -type valueFunctionExecution struct { - Value *float64 - Message string - Diagnostics map[string]any - Observation valueRegradeObservation - BaselineValue *float64 - DeltaFromBaseline *float64 -} - -type boundedCommandBuffer struct { - bytes.Buffer - limit int - exceeded bool -} - -func (b *boundedCommandBuffer) Write(data []byte) (int, error) { - written := len(data) - remaining := b.limit - b.Len() - if remaining > 0 { - if len(data) < remaining { - remaining = len(data) - } - _, _ = b.Buffer.Write(data[:remaining]) - } - if written > remaining { - b.exceeded = true - } - return written, nil -} - -// RunValueRegrade downloads a historical grader observation and recomputes it as of EvidenceAt. -func RunValueRegrade(ctx context.Context, config ValueRegradeConfig) error { - evidenceAt, err := parseValueTimestamp(config.EvidenceAt, "evidence-at") - if err != nil { - return err - } - repoSlug, artifactRepo, err := resolveValueRegradeRepo(config.RepoOverride) - if err != nil { - return err - } - - tempDir, err := os.MkdirTemp("", "gh-aw-value-regrade-*") - if err != nil { - return fmt.Errorf("failed to create value regrade directory: %w", err) - } - defer os.RemoveAll(tempDir) - - runIDText := strconv.FormatInt(config.RunID, 10) - source := newGitHubGraderRunArtifactSource(tempDir, artifactRepo) - runData := source.downloadGraderArtifact(ctx, config.RunID, runIDText) - if runData.ExclusionReason != "" { - return fmt.Errorf("cannot regrade run %d: grader artifact %s", config.RunID, runData.ExclusionReason) - } - runDir := filepath.Join(tempDir, runIDText) - functionContent, functionDigest, err := readArchivedValueFunction(runDir) - if err != nil { - return err - } - manifest, err := readValueGraderManifest(runDir) - if err != nil { - return err - } - manifestEntry, originalResult, err := selectHistoricalValueGrader(manifest, runData.Artifact, runIDText) - if err != nil { - return err - } - if err := verifyHistoricalValueIdentity(repoSlug, functionDigest, manifestEntry, originalResult, runData.Artifact.Run, runIDText); err != nil { - return err - } - - execution, err := executeHistoricalValueFunction(ctx, functionContent, *manifestEntry, *originalResult.Observation, config.EvidenceAt, evidenceAt) - if err != nil { - return err - } - artifact := buildValueRegradeArtifact(runData.Artifact.Run, *manifestEntry, *originalResult, functionDigest, execution) - return renderValueRegradeArtifact(artifact, config.JSONOutput) -} - -func resolveValueRegradeRepo(repoOverride string) (repoSlug, artifactRepo string, err error) { - if repoOverride == "" { - repoSlug, err = GetCurrentRepoSlug() - return repoSlug, "", err - } - ownerRepo, _ := repoutil.NormalizeRepoForAPI(repoOverride) - owner, repo, splitErr := repoutil.SplitRepoSlug(ownerRepo) - if splitErr != nil { - return "", "", fmt.Errorf("invalid --repo %q: expected [HOST/]owner/repo", repoOverride) - } - return strings.Join([]string{owner, repo}, "/"), repoOverride, nil -} - -func readArchivedValueFunction(runDir string) (string, string, error) { - functionPath := filepath.Join(runDir, "agent", "graders", constants.ValueGraderFunctionFilename) - if _, err := os.Stat(functionPath); err != nil { - functionPath = filepath.Join(runDir, "graders", constants.ValueGraderFunctionFilename) - } - file, err := os.Open(functionPath) - if err != nil { - return "", "", fmt.Errorf("cannot read archived value function: %w", err) - } - defer file.Close() - info, err := file.Stat() - if err != nil { - return "", "", fmt.Errorf("cannot inspect archived value function: %w", err) - } - if !info.Mode().IsRegular() { - return "", "", errors.New("archived value function must be a regular file") - } - content, err := io.ReadAll(io.LimitReader(file, maxValueRegradeFunctionBytes+1)) - if err != nil { - return "", "", fmt.Errorf("cannot read archived value function: %w", err) - } - if len(content) > maxValueRegradeFunctionBytes { - return "", "", fmt.Errorf("archived value function exceeds the %d-byte limit", maxValueRegradeFunctionBytes) - } - if !utf8.Valid(content) { - return "", "", errors.New("archived value function must be valid UTF-8") - } - functionContent := string(content) - if !strings.HasPrefix(functionContent, "#!/usr/bin/env bash\n") && !strings.HasPrefix(functionContent, "#!/bin/bash\n") { - return "", "", errors.New("archived value function must start with a Bash shebang") - } - digest := sha256.Sum256(content) - return functionContent, hex.EncodeToString(digest[:]), nil -} - -func readValueGraderManifest(runDir string) (*valueGraderManifest, error) { - manifestPath := filepath.Join(runDir, "agent", "graders", constants.GraderManifestFilename) - if _, err := os.Stat(manifestPath); err != nil { - manifestPath = filepath.Join(runDir, "graders", constants.GraderManifestFilename) - } - file, err := os.Open(manifestPath) - if err != nil { - return nil, fmt.Errorf("cannot read grader manifest: %w", err) - } - defer file.Close() - data, err := io.ReadAll(io.LimitReader(file, maxGraderResultsBytes+1)) - if err != nil { - return nil, fmt.Errorf("cannot read grader manifest: %w", err) - } - if len(data) > maxGraderResultsBytes { - return nil, fmt.Errorf("grader manifest exceeds the %d-byte limit", maxGraderResultsBytes) - } - var manifest valueGraderManifest - if err := json.Unmarshal(data, &manifest); err != nil || manifest.Version <= 0 { - return nil, errors.New("grader manifest is malformed") - } - return &manifest, nil -} - -func selectHistoricalValueGrader(manifest *valueGraderManifest, artifact *graderResultsArtifact, runID string) (*valueGraderManifestEntry, *graderArtifactResult, error) { - if manifest == nil || artifact == nil { - return nil, nil, fmt.Errorf("run %s has no grader data", runID) - } - var manifestEntry *valueGraderManifestEntry - for index := range manifest.Graders { - if manifest.Graders[index].ID != "value" { - continue - } - if manifestEntry != nil { - return nil, nil, fmt.Errorf("run %s grader manifest contains duplicate value graders", runID) - } - manifestEntry = &manifest.Graders[index] - } - var result *graderArtifactResult - for index := range artifact.Results { - if artifact.Results[index].ID != "value" { - continue - } - if result != nil { - return nil, nil, fmt.Errorf("run %s grader artifact contains duplicate value results", runID) - } - result = &artifact.Results[index] - } - if manifestEntry == nil || !manifestEntry.Enabled || manifestEntry.Source != "value" { - return nil, nil, fmt.Errorf("run %s did not use an enabled value grader", runID) - } - if result == nil || result.Observation == nil { - return nil, nil, fmt.Errorf("run %s has no replayable value observation", runID) - } - return manifestEntry, result, nil -} - -func verifyHistoricalValueIdentity(repoSlug, functionDigest string, manifest *valueGraderManifestEntry, result *graderArtifactResult, run graderArtifactRun, runID string) error { - if run.ID != runID || run.Attempt <= 0 { - return fmt.Errorf("grader artifact run identity does not match run %s", runID) - } - if manifest.Digest == "" || result.Implementation.Digest == "" || manifest.Digest != result.Implementation.Digest { - return fmt.Errorf("run %s has inconsistent value function provenance", runID) - } - if functionDigest != manifest.Digest { - return fmt.Errorf("value function digest mismatch: run %s recorded %s, local function is %s", runID, manifest.Digest, functionDigest) - } - subject := result.Observation.Subject - if subject.Type != "workflow-run" || subject.RunID != runID || subject.Attempt != run.Attempt { - return fmt.Errorf("value observation subject does not match run %s attempt %d", runID, run.Attempt) - } - if subject.Repository == "" || subject.Repository != repoSlug { - return fmt.Errorf("value observation repository %q does not match %q", subject.Repository, repoSlug) - } - if result.Observation.Case == nil { - return fmt.Errorf("run %s value observation has no replayable case", runID) - } - return nil -} - -func executeHistoricalValueFunction(ctx context.Context, functionContent string, manifest valueGraderManifestEntry, original graderArtifactObservation, evidenceAtText string, evidenceAt time.Time) (*valueFunctionExecution, error) { - bashPath := "/bin/bash" - if _, err := os.Stat(bashPath); err != nil { - return nil, fmt.Errorf("bash is required to regrade value: %w", err) - } - tempDir, err := os.MkdirTemp("", "gh-aw-value-function-*") - if err != nil { - return nil, fmt.Errorf("failed to create value function directory: %w", err) - } - defer os.RemoveAll(tempDir) - functionPath := filepath.Join(tempDir, "value.sh") - if err := os.WriteFile(functionPath, []byte(functionContent), constants.FilePermExecutable); err != nil { - return nil, fmt.Errorf("failed to stage value function: %w", err) - } - if _, err := runValueBash(ctx, bashPath, functionPath, []string{"-n", functionPath}, nil, valueDefinitionTimeout); err != nil { - return nil, fmt.Errorf("value function has invalid Bash syntax: %w", err) - } - definitionJSON, err := runValueBash(ctx, bashPath, functionPath, []string{functionPath, "--definition"}, nil, valueDefinitionTimeout) - if err != nil { - return nil, fmt.Errorf("value function --definition failed: %w", err) - } - baselineValue, err := parseValueDefinition(definitionJSON) - if err != nil { - return nil, err - } - functionConfig := manifest.Config - if functionConfig == nil { - functionConfig = map[string]any{} - } - request := valueRunRequest{ - SchemaVersion: 1, - Run: valueRunSubject{ - ID: original.Subject.RunID, - Attempt: original.Subject.Attempt, - Repository: original.Subject.Repository, - Workflow: original.Subject.Workflow, - Ref: original.Subject.Ref, - SHA: original.Subject.SHA, - EventName: original.Subject.EventName, - CreatedAt: original.Subject.CreatedAt, - }, - EvidenceAt: evidenceAtText, - Case: original.Case, - Event: nil, - Config: functionConfig, - } - requestJSON, err := json.Marshal(request) - if err != nil { - return nil, fmt.Errorf("failed to encode value regrade request: %w", err) - } - outputJSON, err := runValueBash(ctx, bashPath, functionPath, []string{functionPath, "--grade-run"}, requestJSON, valueFunctionTimeout) - if err != nil { - return nil, fmt.Errorf("value function --grade-run failed: %w", err) - } - return parseValueFunctionOutput(outputJSON, original.Subject, evidenceAtText, evidenceAt, baselineValue) -} - -func runValueBash(ctx context.Context, bashPath, functionPath string, args []string, input []byte, timeout time.Duration) ([]byte, error) { - commandCtx, cancel := context.WithTimeout(ctx, timeout) - defer cancel() - cmd := exec.CommandContext(commandCtx, bashPath, args...) - cmd.Dir = filepath.Dir(functionPath) - cmd.Env = valueFunctionEnvironment() - cmd.Stdin = bytes.NewReader(input) - stdout := &boundedCommandBuffer{limit: maxValueRegradeOutputBytes} - stderr := &boundedCommandBuffer{limit: maxValueRegradeOutputBytes} - cmd.Stdout = stdout - cmd.Stderr = stderr - err := cmd.Run() - if errors.Is(commandCtx.Err(), context.DeadlineExceeded) { - return nil, fmt.Errorf("timed out after %s", timeout) - } - if stdout.exceeded || stderr.exceeded { - return nil, fmt.Errorf("output exceeded the %d-byte limit", maxValueRegradeOutputBytes) - } - if err != nil { - message := strings.TrimSpace(stderr.String()) - if message != "" { - return nil, errors.New(message) - } - return nil, err - } - return stdout.Bytes(), nil -} - -func valueFunctionEnvironment() []string { - keys := []string{ - "PATH", "HOME", "TMPDIR", "TEMP", "TMP", "SystemRoot", "ComSpec", - "GH_TOKEN", "GH_HOST", "GITHUB_API_URL", "GITHUB_SERVER_URL", - } - env := make([]string, 0, len(keys)) - for _, key := range keys { - if value, ok := os.LookupEnv(key); ok && value != "" { - env = append(env, key+"="+value) - } - } - return env -} - -func parseValueDefinition(data []byte) (*float64, error) { - var definition struct { - SchemaVersion int `json:"schemaVersion"` - Grader string `json:"grader"` - Baseline struct { - Mode string `json:"mode"` - Value json.RawMessage `json:"value"` - } `json:"baseline"` - } - if err := json.Unmarshal(data, &definition); err != nil { - return nil, fmt.Errorf("value function returned an invalid definition: %w", err) - } - if definition.SchemaVersion != 4 || definition.Grader != "value" { - return nil, errors.New("value function definition must use schemaVersion 4 and grader \"value\"") - } - valueJSON := bytes.TrimSpace(definition.Baseline.Value) - switch definition.Baseline.Mode { - case "attainment-only": - if !bytes.Equal(valueJSON, []byte("null")) { - return nil, errors.New("attainment-only value functions must have a null baseline value") - } - return nil, nil - case "baseline-comparable": - value, err := parseNullableValue(valueJSON) - if err != nil || value == nil || *value < 0 || *value > 1 { - return nil, errors.New("baseline-comparable value functions require a baseline value in [0,1]") - } - return value, nil - default: - return nil, errors.New("value function baseline mode must be \"baseline-comparable\" or \"attainment-only\"") - } -} - -func parseValueFunctionOutput(data []byte, subject graderArtifactSubject, evidenceAtText string, evidenceAt time.Time, baselineValue *float64) (*valueFunctionExecution, error) { - var fields map[string]json.RawMessage - if err := json.Unmarshal(data, &fields); err != nil || fields == nil { - return nil, errors.New("value function returned invalid JSON") - } - value, err := parseNullableValue(fields["value"]) - if err != nil || (value != nil && (*value < 0 || *value > 1)) { - return nil, errors.New("value function value must be null or a finite number in [0,1]") - } - var caseValue map[string]any - if err := json.Unmarshal(fields["case"], &caseValue); err != nil || caseValue == nil { - return nil, errors.New("value function output.case must be an object") - } - var opportunityKey, evidenceCutoffText, maturesAtText string - if err := json.Unmarshal(fields["opportunityKey"], &opportunityKey); err != nil || strings.TrimSpace(opportunityKey) == "" { - return nil, errors.New("value function opportunityKey must be a non-empty string") - } - if err := json.Unmarshal(fields["evidenceCutoff"], &evidenceCutoffText); err != nil { - return nil, errors.New("value function evidenceCutoff must be a UTC ISO-8601 timestamp") - } - if err := json.Unmarshal(fields["maturesAt"], &maturesAtText); err != nil { - return nil, errors.New("value function maturesAt must be a UTC ISO-8601 timestamp") - } - evidenceCutoff, err := parseValueTimestamp(evidenceCutoffText, "evidenceCutoff") - if err != nil { - return nil, err - } - maturesAt, err := parseValueTimestamp(maturesAtText, "maturesAt") - if err != nil { - return nil, err - } - if evidenceCutoff.After(evidenceAt) { - return nil, errors.New("value function evidenceCutoff cannot follow evidenceAt") - } - if evidenceCutoff.After(maturesAt) { - return nil, errors.New("value function evidenceCutoff cannot follow maturesAt") - } - var provenance []map[string]any - if err := json.Unmarshal(fields["provenance"], &provenance); err != nil || (value != nil && len(provenance) == 0) { - return nil, errors.New("value function must return provenance for a numeric value") - } - for _, item := range provenance { - for _, key := range []string{"repository", "kind", "ref"} { - text, ok := item[key].(string) - if !ok || text == "" { - return nil, errors.New("value function provenance entries require repository, kind, and ref") - } - } - } - var message string - _ = json.Unmarshal(fields["message"], &message) - var diagnostics map[string]any - _ = json.Unmarshal(fields["diagnostics"], &diagnostics) - var delta *float64 - if value != nil && baselineValue != nil { - computed := *value - *baselineValue - delta = &computed - } - return &valueFunctionExecution{ - Value: value, - Message: message, - Diagnostics: diagnostics, - Observation: valueRegradeObservation{ - Subject: subject, - OpportunityKey: opportunityKey, - EvidenceAt: evidenceAtText, - EvidenceCutoff: evidenceCutoffText, - MaturesAt: maturesAtText, - Mature: !evidenceAt.Before(maturesAt), - Case: caseValue, - Provenance: provenance, - }, - BaselineValue: baselineValue, - DeltaFromBaseline: delta, - }, nil -} - -func parseNullableValue(data []byte) (*float64, error) { - data = bytes.TrimSpace(data) - if bytes.Equal(data, []byte("null")) { - return nil, nil - } - var value float64 - if len(data) == 0 || json.Unmarshal(data, &value) != nil || math.IsNaN(value) || math.IsInf(value, 0) { - return nil, errors.New("expected a finite number or null") - } - return &value, nil -} - -func parseValueTimestamp(value, label string) (time.Time, error) { - for _, layout := range []string{"2006-01-02T15:04:05Z", "2006-01-02T15:04:05.000Z"} { - if parsed, err := time.Parse(layout, value); err == nil { - return parsed, nil - } - } - return time.Time{}, fmt.Errorf("%s must be a UTC ISO-8601 timestamp", label) -} - -func buildValueRegradeArtifact(run graderArtifactRun, manifest valueGraderManifestEntry, original graderArtifactResult, digest string, execution *valueFunctionExecution) valueRegradeArtifact { - passed := evaluateValueThreshold(execution.Value, manifest.Direction, manifest.Threshold) - status := "unavailable" - if execution.Value != nil { - status = "pass" - if passed != nil && !*passed { - status = "fail" - } - } - return valueRegradeArtifact{ - Version: 1, - Run: run, - Regrade: valueRegradeMetadata{ - Identity: valueRegradeIdentity{ - RunID: run.ID, - FunctionDigest: digest, - EvidenceAt: execution.Observation.EvidenceAt, - }, - OriginalEvidenceAt: original.Observation.EvidenceAt, - }, - Results: []valueRegradeResult{{ - ID: "value", - Name: manifest.Name, - Value: execution.Value, - Unit: manifest.Unit, - Passed: passed, - Status: status, - Source: "value", - Message: execution.Message, - Observation: execution.Observation, - Diagnostics: execution.Diagnostics, - BaselineValue: execution.BaselineValue, - DeltaFromBaseline: execution.DeltaFromBaseline, - Implementation: graderArtifactImplementation{ - ID: "gh-aw-graders-value-regrade", - Version: 1, - Digest: digest, - }, - }}, - } -} - -func evaluateValueThreshold(value *float64, direction string, threshold *float64) *bool { - if value == nil || threshold == nil { - return nil - } - passed := *value >= *threshold - if direction == "lower_is_better" { - passed = *value <= *threshold - } - return &passed -} - -func renderValueRegradeArtifact(artifact valueRegradeArtifact, jsonOutput bool) error { - result := artifact.Results[0] - if jsonOutput { - data, err := marshalIndentJSONOrWrap(artifact, "value regrade observation") - if err != nil { - return err - } - fmt.Fprintln(os.Stdout, string(data)) - return nil - } - value := "null" - if result.Value != nil { - value = strconv.FormatFloat(*result.Value, 'f', -1, 64) - } - fmt.Fprintln(os.Stdout, console.FormatSuccessMessage(fmt.Sprintf("Regraded value for run %s: %s", artifact.Run.ID, value))) - fmt.Fprintf(os.Stdout, "Evidence cutoff: %s\n", result.Observation.EvidenceCutoff) - fmt.Fprintf(os.Stdout, "Mature: %t\n", result.Observation.Mature) - if result.BaselineValue != nil { - fmt.Fprintf(os.Stdout, "Baseline value: %s\n", strconv.FormatFloat(*result.BaselineValue, 'f', -1, 64)) - fmt.Fprintf(os.Stdout, "Delta from baseline: %s\n", strconv.FormatFloat(*result.DeltaFromBaseline, 'f', -1, 64)) - } - return nil -} diff --git a/pkg/constants/job_constants.go b/pkg/constants/job_constants.go index 702a8ed9f76..b32f80dbc22 100644 --- a/pkg/constants/job_constants.go +++ b/pkg/constants/job_constants.go @@ -140,8 +140,8 @@ const GraderManifestFilename = "grader_manifest.json" // by trace_graders.cjs. Contains deterministic metric values computed from trace files. const GraderResultsFilename = "grader_results.json" -// ValueGraderFunctionFilename is the filename of the frozen value function archived for replay. -const ValueGraderFunctionFilename = "value_function.sh" +// OperationalValueEvaluatorFilename is the filename of the frozen operational-value evaluator archived for replay. +const OperationalValueEvaluatorFilename = "operational_value_evaluator.sh" // GradersDir is the subdirectory under TmpGhAwAgentDir where grader output files are written. const GradersDir = TmpGhAwDir + "/agent/graders" diff --git a/pkg/parser/schema_test.go b/pkg/parser/schema_test.go index 9ec2fe9efdb..e9adfe828a0 100644 --- a/pkg/parser/schema_test.go +++ b/pkg/parser/schema_test.go @@ -1044,20 +1044,20 @@ func TestValidateMainWorkflowFrontmatterWithSchemaAndLocation_SandboxAgentPlatfo }) } -func TestValidateMainWorkflowFrontmatterWithSchemaAndLocation_ValueGrader(t *testing.T) { +func TestValidateMainWorkflowFrontmatterWithSchemaAndLocation_OperationalValueGrader(t *testing.T) { t.Parallel() frontmatter := map[string]any{ "on": "workflow_dispatch", "graders": map[string]any{ - "value": map[string]any{ - "function": ".github/graders/value.sh", + "operational-value": map[string]any{ + "run": ".github/graders/example-operational-value.sh", }, }, } - if err := ValidateMainWorkflowFrontmatterWithSchemaAndLocation(frontmatter, "/tmp/gh-aw/value-grader-test.md"); err != nil { - t.Fatalf("expected value grader function to pass schema validation, got: %v", err) + if err := ValidateMainWorkflowFrontmatterWithSchemaAndLocation(frontmatter, "/tmp/gh-aw/operational-value-grader-test.md"); err != nil { + t.Fatalf("expected operational-value evaluator to pass schema validation, got: %v", err) } } diff --git a/pkg/parser/schemas/main_workflow_schema.json b/pkg/parser/schemas/main_workflow_schema.json index 37f2beef26e..400c9d2a2dd 100644 --- a/pkg/parser/schemas/main_workflow_schema.json +++ b/pkg/parser/schemas/main_workflow_schema.json @@ -12849,7 +12849,7 @@ "examples": ["gpt-5.4", "claude-3-5-sonnet-20241022", "gpt-4"] }, "graders": { - "description": "\u26a0\ufe0f Experimental. Deterministic graders for workflow-run observations. Built-in graders use execution artifacts, custom graders use inline scripts, and the value grader uses a repository function.", + "description": "\u26a0\ufe0f Experimental. Deterministic graders for workflow-run observations. Built-in graders use execution artifacts, custom graders use inline scripts, and the operational-value grader uses a repository evaluator.", "type": "object", "propertyNames": { "pattern": "^[a-z][a-z0-9-]{0,63}$", @@ -12909,10 +12909,10 @@ "maxLength": 4096, "description": "Custom grader JavaScript script body (trusted workflows only)." }, - "function": { + "run": { "type": "string", "pattern": "^\\.github/graders/.+\\.sh$", - "description": "Repository-relative Bash function for the value grader. Supported only for the reserved value grader ID." + "description": "Repository-relative Bash script for the operational-value evaluator. Supported only for the reserved operational-value grader ID." } } } diff --git a/pkg/workflow/compiler.go b/pkg/workflow/compiler.go index 67ae5580abd..a252ddcdb9b 100644 --- a/pkg/workflow/compiler.go +++ b/pkg/workflow/compiler.go @@ -99,7 +99,7 @@ func (c *Compiler) configureGHESCompatibility() { // - validatePermissions: permissions parsing, MCP tool constraints, workflow_run security // - validateToolConfiguration: safe-outputs, GitHub tools, dispatches, and resources func (c *Compiler) validateWorkflowData(workflowData *WorkflowData, markdownPath string) error { - if err := c.prepareValueGrader(workflowData, markdownPath); err != nil { + if err := c.prepareOperationalValueGrader(workflowData, markdownPath); err != nil { return formatCompilerError(markdownPath, "error", err.Error(), err) } diff --git a/pkg/workflow/compiler_yaml_artifacts.go b/pkg/workflow/compiler_yaml_artifacts.go index bbd1102a23e..75db9d499dc 100644 --- a/pkg/workflow/compiler_yaml_artifacts.go +++ b/pkg/workflow/compiler_yaml_artifacts.go @@ -81,7 +81,7 @@ func (c *Compiler) generateAgentOutputFallbackUpload(yaml *strings.Builder, data paths = append(paths, constants.GradersDirSlash+constants.GraderManifestFilename, constants.GradersDirSlash+constants.GraderResultsFilename, - constants.GradersDirSlash+constants.ValueGraderFunctionFilename, + constants.GradersDirSlash+constants.OperationalValueEvaluatorFilename, ) } diff --git a/pkg/workflow/compiler_yaml_graders.go b/pkg/workflow/compiler_yaml_graders.go index 404bef931b1..68c4cc996f7 100644 --- a/pkg/workflow/compiler_yaml_graders.go +++ b/pkg/workflow/compiler_yaml_graders.go @@ -53,7 +53,7 @@ func (c *Compiler) generateGradersStep(yaml *strings.Builder, data *WorkflowData yaml.WriteString(" setupGlobals(core, github, context, exec, io, getOctokit);\n") yaml.WriteString(" const { main } = require('" + SetupActionDestination + "/trace_graders.cjs');\n") fmt.Fprintf(yaml, " await main('%s', '%s');\n", manifestB64, execB64) - if valueGrader, ok := data.Graders.Graders["value"]; ok && (valueGrader.Enabled == nil || *valueGrader.Enabled) { + if operationalValueGrader, ok := data.Graders.Graders["operational-value"]; ok && (operationalValueGrader.Enabled == nil || *operationalValueGrader.Enabled) { yaml.WriteString(" env:\n") yaml.WriteString(" GH_TOKEN: ${{ github.token }}\n") } @@ -67,15 +67,15 @@ type graderManifestEntry struct { ID string `json:"id"` Name string `json:"name"` Description string `json:"description,omitempty"` - Source string `json:"source"` // "builtin", "inline", or "value" + Source string `json:"source"` // "builtin", "inline", or "operational-value" Enabled bool `json:"enabled"` Unit string `json:"unit,omitempty"` Direction string `json:"direction,omitempty"` Threshold *float64 `json:"threshold,omitempty"` Max *float64 `json:"max,omitempty"` Min *float64 `json:"min,omitempty"` - Digest string `json:"digest,omitempty"` // SHA-256 of inline script - Function string `json:"function,omitempty"` + Digest string `json:"digest,omitempty"` // SHA-256 of inline script or operational-value evaluator + Run string `json:"run,omitempty"` Config map[string]any `json:"config,omitempty"` } @@ -85,11 +85,11 @@ type graderManifest struct { Graders []graderManifestEntry `json:"graders"` } -// graderExecEntry carries the script body for a custom grader, keyed by ID. +// graderExecEntry carries trusted executable content for a custom grader, keyed by ID. type graderExecEntry struct { - ID string `json:"id"` - Script string `json:"script,omitempty"` - Function string `json:"function,omitempty"` + ID string `json:"id"` + Script string `json:"script,omitempty"` + Run string `json:"run,omitempty"` } // buildGraderManifest constructs the manifest for the JS runtime. @@ -121,12 +121,12 @@ func buildGraderManifest(cfg *GradersConfig) *graderManifest { if _, ok := builtinSet[id]; !ok { source = "inline" } - if id == "value" { - source = "value" + if id == "operational-value" { + source = "operational-value" } digest := g.ScriptDigest() - if source == "value" { - digest = g.FunctionDigest() + if source == "operational-value" { + digest = g.EvaluatorDigest() } name := g.Name if name == "" { @@ -144,7 +144,7 @@ func buildGraderManifest(cfg *GradersConfig) *graderManifest { Max: g.Max, Min: g.Min, Digest: digest, - Function: g.Function, + Run: g.Run, Config: g.Config, }) } @@ -173,8 +173,8 @@ func buildGraderExecSpec(cfg *GradersConfig) []graderExecEntry { var specs []graderExecEntry for _, id := range cfg.EnabledGraderIDs() { g := cfg.Graders[id] - if id == "value" && g.functionContent != "" { - specs = append(specs, graderExecEntry{ID: id, Function: g.functionContent}) + if id == "operational-value" && g.evaluatorContent != "" { + specs = append(specs, graderExecEntry{ID: id, Run: g.evaluatorContent}) } else if _, ok := builtinSet[id]; !ok && g.Script != "" { specs = append(specs, graderExecEntry{ID: id, Script: g.Script}) } @@ -227,6 +227,6 @@ func collectGraderArtifactPaths() []string { return []string{ constants.GradersDirSlash + constants.GraderManifestFilename, constants.GradersDirSlash + constants.GraderResultsFilename, - constants.GradersDirSlash + constants.ValueGraderFunctionFilename, + constants.GradersDirSlash + constants.OperationalValueEvaluatorFilename, } } diff --git a/pkg/workflow/graders_config.go b/pkg/workflow/graders_config.go index 4d8e2d3c870..a37253c036e 100644 --- a/pkg/workflow/graders_config.go +++ b/pkg/workflow/graders_config.go @@ -62,19 +62,19 @@ var builtinGraderMetaByID = func() map[string]*BuiltinGraderMeta { // GraderDefinition represents a single grader entry in the graders map. type GraderDefinition struct { - ID string // grader identifier (must be unique) - Enabled *bool // explicit enable/disable; nil means use default (true for built-ins) - Name string // human-readable name (defaults from registry for built-ins) - Description string // description of the metric - Unit string // e.g. "ratio", "count", "ms", "factor" - Direction string // "higher_is_better" or "lower_is_better" - Threshold *float64 // quality threshold (pass/fail boundary) - Max *float64 // theoretical maximum - Min *float64 // theoretical minimum - Function string // repository-relative value grader function - Script string // inline JS body for trusted custom graders (built-ins leave empty) - Config map[string]any // arbitrary config passed to grader at runtime - functionContent string + ID string // grader identifier (must be unique) + Enabled *bool // explicit enable/disable; nil means use default (true for built-ins) + Name string // human-readable name (defaults from registry for built-ins) + Description string // description of the metric + Unit string // e.g. "ratio", "count", "ms", "factor" + Direction string // "higher_is_better" or "lower_is_better" + Threshold *float64 // quality threshold (pass/fail boundary) + Max *float64 // theoretical maximum + Min *float64 // theoretical minimum + Run string // repository-relative operational-value evaluator script + Script string // inline JS body for trusted custom graders (built-ins leave empty) + Config map[string]any // arbitrary config passed to grader at runtime + evaluatorContent string } // ScriptDigest returns the SHA-256 hex digest of the script, or "" if no script. @@ -86,12 +86,12 @@ func (g *GraderDefinition) ScriptDigest() string { return hex.EncodeToString(h[:]) } -// FunctionDigest returns the SHA-256 hex digest of the frozen value function. -func (g *GraderDefinition) FunctionDigest() string { - if g.functionContent == "" { +// EvaluatorDigest returns the SHA-256 hex digest of the frozen operational-value evaluator. +func (g *GraderDefinition) EvaluatorDigest() string { + if g.evaluatorContent == "" { return "" } - h := sha256.Sum256([]byte(g.functionContent)) + h := sha256.Sum256([]byte(g.evaluatorContent)) return hex.EncodeToString(h[:]) } @@ -121,7 +121,7 @@ func (gc *GradersConfig) HasCustomScripts() bool { return false } for _, g := range gc.Graders { - if (g.Enabled == nil || *g.Enabled) && (g.Script != "" || g.functionContent != "") { + if (g.Enabled == nil || *g.Enabled) && (g.Script != "" || g.evaluatorContent != "") { return true } } @@ -235,7 +235,7 @@ func (c *Compiler) parseGradersFromFrontmatter(frontmatter map[string]any) (*Gra // Apply built-in defaults if this is a built-in if meta, ok := builtinGraderMetaByID[id]; ok { def = builtinDefFromMeta(meta) - } else if id == "value" { + } else if id == "operational-value" { def.Name = "Operational Value" def.Unit = "ratio" def.Direction = "higher_is_better" @@ -245,6 +245,9 @@ func (c *Compiler) parseGradersFromFrontmatter(frontmatter map[string]any) (*Gra _, isBuiltin := builtinSet[id] if entryRaw == nil { + if id == "operational-value" { + return nil, errors.New("graders.operational-value requires a 'run' field") + } if !isBuiltin { return nil, fmt.Errorf("graders.%s is not a built-in grader and requires a 'script' field. Built-in graders: %s", id, strings.Join(BuiltinGraderIDs, ", ")) } @@ -261,11 +264,11 @@ func (c *Compiler) parseGradersFromFrontmatter(frontmatter map[string]any) (*Gra return nil, err } - // The value grader uses a repository function; other custom graders use inline scripts. - if id == "value" && def.Function == "" && (def.Enabled == nil || *def.Enabled) { - return nil, errors.New("graders.value requires a 'function' field") + // The operational-value grader uses a repository evaluator; other custom graders use inline scripts. + if id == "operational-value" && def.Run == "" && (def.Enabled == nil || *def.Enabled) { + return nil, errors.New("graders.operational-value requires a 'run' field") } - if !isBuiltin && id != "value" && def.Script == "" && (def.Enabled == nil || *def.Enabled) { + if !isBuiltin && id != "operational-value" && def.Script == "" && (def.Enabled == nil || *def.Enabled) { return nil, fmt.Errorf("graders.%s is not a built-in grader and requires a 'script' field. Built-in graders: %s", id, strings.Join(BuiltinGraderIDs, ", ")) } @@ -381,19 +384,19 @@ func parseGraderEntryFields(def *GraderDefinition, entry map[string]any, id stri def.Config = m } - if functionRaw, ok := entry["function"]; ok { - functionPath, ok := functionRaw.(string) + if runRaw, ok := entry["run"]; ok { + runPath, ok := runRaw.(string) if !ok { - return fmt.Errorf("graders.%s.function must be a string, got %T", id, functionRaw) + return fmt.Errorf("graders.%s.run must be a string, got %T", id, runRaw) } - functionPath = strings.TrimSpace(functionPath) - if id != "value" { - return fmt.Errorf("graders.%s.function is only supported by the value grader", id) + runPath = strings.TrimSpace(runPath) + if id != "operational-value" { + return fmt.Errorf("graders.%s.run is only supported by the operational-value grader", id) } - if !isValidValueFunctionPath(functionPath) { - return fmt.Errorf("graders.value.function must be a repository-relative .sh file under .github/graders, got %q", functionPath) + if !isValidOperationalValueEvaluatorPath(runPath) { + return fmt.Errorf("graders.operational-value.run must be a repository-relative .sh file under .github/graders, got %q", runPath) } - def.Function = functionPath + def.Run = runPath } if scriptRaw, ok := entry["script"]; ok { @@ -408,8 +411,8 @@ func parseGraderEntryFields(def *GraderDefinition, entry map[string]any, id stri if isBuiltin { return fmt.Errorf("graders.%s is a built-in grader and cannot have a custom script", id) } - if id == "value" { - return errors.New("graders.value cannot have an inline script; use 'function'") + if id == "operational-value" { + return errors.New("graders.operational-value cannot have an inline script; use 'run'") } scriptCharCount := utf8.RuneCountInString(s) if scriptCharCount > 4096 { @@ -427,11 +430,11 @@ func parseGraderEntryFields(def *GraderDefinition, entry map[string]any, id stri return nil } -func isValidValueFunctionPath(functionPath string) bool { - if functionPath == "" || strings.Contains(functionPath, "\\") { +func isValidOperationalValueEvaluatorPath(evaluatorPath string) bool { + if evaluatorPath == "" || strings.Contains(evaluatorPath, "\\") { return false } - parts := strings.Split(functionPath, "/") + parts := strings.Split(evaluatorPath, "/") if len(parts) < 3 || parts[0] != ".github" || parts[1] != "graders" { return false } @@ -440,7 +443,7 @@ func isValidValueFunctionPath(functionPath string) bool { return false } } - return strings.HasSuffix(functionPath, ".sh") + return strings.HasSuffix(evaluatorPath, ".sh") } // parseOptionalFloat parses an optional float64 field from a map. diff --git a/pkg/workflow/graders_config_test.go b/pkg/workflow/graders_config_test.go index 093272af231..f4c70ce59d5 100644 --- a/pkg/workflow/graders_config_test.go +++ b/pkg/workflow/graders_config_test.go @@ -116,65 +116,65 @@ func TestParseGradersFromFrontmatter_CustomGrader(t *testing.T) { } } -func TestParseGradersFromFrontmatter_ValueGrader(t *testing.T) { +func TestParseGradersFromFrontmatter_OperationalValueGrader(t *testing.T) { var c Compiler cfg, err := c.parseGradersFromFrontmatter(map[string]any{ "graders": map[string]any{ - "value": map[string]any{ - "function": ".github/graders/value.sh", + "operational-value": map[string]any{ + "run": ".github/graders/example-operational-value.sh", }, }, }) if err != nil { t.Fatalf("unexpected error: %v", err) } - grader := cfg.Graders["value"] - if grader.Function != ".github/graders/value.sh" { - t.Fatalf("unexpected value function: %q", grader.Function) + grader := cfg.Graders["operational-value"] + if grader.Run != ".github/graders/example-operational-value.sh" { + t.Fatalf("unexpected operational-value run path: %q", grader.Run) } if grader.Unit != "ratio" || grader.Direction != "higher_is_better" { - t.Fatalf("unexpected value defaults: unit=%q direction=%q", grader.Unit, grader.Direction) + t.Fatalf("unexpected operational-value defaults: unit=%q direction=%q", grader.Unit, grader.Direction) } if grader.Min == nil || *grader.Min != 0 || grader.Max == nil || *grader.Max != 1 { - t.Fatalf("expected value range [0,1], got min=%v max=%v", grader.Min, grader.Max) + t.Fatalf("expected operational-value range [0,1], got min=%v max=%v", grader.Min, grader.Max) } } -func TestParseGradersFromFrontmatter_ValueGraderValidation(t *testing.T) { +func TestParseGradersFromFrontmatter_OperationalValueGraderValidation(t *testing.T) { var c Compiler tests := []struct { name string entry map[string]any }{ - {name: "missing function", entry: map[string]any{}}, - {name: "path traversal", entry: map[string]any{"function": ".github/graders/../secret.sh"}}, - {name: "wrong directory", entry: map[string]any{"function": "scripts/value.sh"}}, - {name: "wrong extension", entry: map[string]any{"function": ".github/graders/value.js"}}, - {name: "inline script", entry: map[string]any{"function": ".github/graders/value.sh", "script": "return 1"}}, + {name: "missing run", entry: map[string]any{}}, + {name: "path traversal", entry: map[string]any{"run": ".github/graders/../secret.sh"}}, + {name: "wrong directory", entry: map[string]any{"run": "scripts/operational-value.sh"}}, + {name: "wrong extension", entry: map[string]any{"run": ".github/graders/operational-value.js"}}, + {name: "inline script", entry: map[string]any{"run": ".github/graders/operational-value.sh", "script": "return 1"}}, } for _, test := range tests { t.Run(test.name, func(t *testing.T) { _, err := c.parseGradersFromFrontmatter(map[string]any{ - "graders": map[string]any{"value": test.entry}, + "graders": map[string]any{"operational-value": test.entry}, }) if err == nil { - t.Fatal("expected value grader validation error") + t.Fatal("expected operational-value grader validation error") } }) } } -func TestParseGradersFromFrontmatter_FunctionRejectedForOtherGraders(t *testing.T) { +func TestParseGradersFromFrontmatter_RunRejectedForOtherGraders(t *testing.T) { var c Compiler _, err := c.parseGradersFromFrontmatter(map[string]any{ "graders": map[string]any{ "custom": map[string]any{ - "function": ".github/graders/value.sh", + "run": ".github/graders/operational-value.sh", }, }, }) if err == nil { - t.Fatal("expected function to be rejected for a non-value grader") + t.Fatal("expected run to be rejected for a non-operational-value grader") } } @@ -388,31 +388,45 @@ func TestBuildGraderManifest(t *testing.T) { } } -func TestBuildGraderManifest_ValueGrader(t *testing.T) { +func TestBuildGraderManifest_OperationalValueGrader(t *testing.T) { grader := &GraderDefinition{ - ID: "value", - Function: ".github/graders/value.sh", + ID: "operational-value", + Run: ".github/graders/example-operational-value.sh", } - grader.functionContent = "#!/usr/bin/env bash\necho '{}'\n" - cfg := &GradersConfig{Graders: map[string]*GraderDefinition{"value": grader}} + grader.evaluatorContent = "#!/usr/bin/env bash\necho '{}'\n" + cfg := &GradersConfig{Graders: map[string]*GraderDefinition{"operational-value": grader}} manifest := buildGraderManifest(cfg) if len(manifest.Graders) != 1 { t.Fatalf("expected one grader, got %d", len(manifest.Graders)) } - if manifest.Graders[0].Source != "value" { - t.Fatalf("expected value source, got %q", manifest.Graders[0].Source) + if manifest.Graders[0].Source != "operational-value" { + t.Fatalf("expected operational-value source, got %q", manifest.Graders[0].Source) } - if manifest.Graders[0].Digest != grader.FunctionDigest() { - t.Fatalf("expected frozen function digest, got %q", manifest.Graders[0].Digest) + if manifest.Graders[0].Digest != grader.EvaluatorDigest() { + t.Fatalf("expected frozen evaluator digest, got %q", manifest.Graders[0].Digest) + } + manifestJSON, err := json.Marshal(manifest) + if err != nil { + t.Fatalf("marshal operational-value manifest: %v", err) + } + if !strings.Contains(string(manifestJSON), `"run":".github/graders/example-operational-value.sh"`) || strings.Contains(string(manifestJSON), `"evaluator"`) { + t.Fatalf("expected manifest to use run field, got %s", manifestJSON) } execSpec := buildGraderExecSpec(cfg) - if len(execSpec) != 1 || execSpec[0].Function != grader.functionContent { - t.Fatal("expected frozen function in execution spec") + if len(execSpec) != 1 || execSpec[0].Run != grader.evaluatorContent { + t.Fatal("expected frozen evaluator in execution spec") } if execSpec[0].Script != "" { - t.Fatal("value grader must not be serialized as an inline script") + t.Fatal("operational-value grader must not be serialized as an inline script") + } + execSpecJSON, err := json.Marshal(execSpec) + if err != nil { + t.Fatalf("marshal operational-value execution spec: %v", err) + } + if !strings.Contains(string(execSpecJSON), `"run":`) || strings.Contains(string(execSpecJSON), `"evaluator"`) { + t.Fatalf("expected execution spec to use run field, got %s", execSpecJSON) } } @@ -502,8 +516,8 @@ func TestCollectGraderArtifactPaths(t *testing.T) { if !strings.Contains(paths[1], "grader_results.json") { t.Fatal("expected grader_results.json in paths") } - if !strings.Contains(paths[2], "value_function.sh") { - t.Fatal("expected value_function.sh in paths") + if !strings.Contains(paths[2], "operational_value_evaluator.sh") { + t.Fatal("expected operational_value_evaluator.sh in paths") } } diff --git a/pkg/workflow/graders_operational_value.go b/pkg/workflow/graders_operational_value.go new file mode 100644 index 00000000000..f12747a7488 --- /dev/null +++ b/pkg/workflow/graders_operational_value.go @@ -0,0 +1,73 @@ +package workflow + +import ( + "errors" + "fmt" + "io" + "os" + "path/filepath" + "strings" + "unicode/utf8" + + "github.com/github/gh-aw/pkg/fileutil" + "github.com/github/gh-aw/pkg/gitutil" +) + +const maxOperationalValueEvaluatorSize = 64 * 1024 + +func (c *Compiler) prepareOperationalValueGrader(data *WorkflowData, markdownPath string) error { + if data == nil || data.Graders == nil { + return nil + } + grader, ok := data.Graders.Graders["operational-value"] + if !ok || (grader.Enabled != nil && !*grader.Enabled) { + return nil + } + if grader.Run == "" { + return errors.New("graders.operational-value requires a 'run' field") + } + + repoRoot, err := gitutil.FindGitRootFrom(filepath.Dir(markdownPath)) + if err != nil { + return fmt.Errorf("cannot resolve graders.operational-value.run %q: workflow is not inside a Git repository", grader.Run) + } + evaluatorPath := filepath.Join(repoRoot, filepath.FromSlash(grader.Run)) + if err := fileutil.ValidatePathWithinBase(repoRoot, evaluatorPath); err != nil { + return fmt.Errorf("graders.operational-value.run %q escapes the Git repository", grader.Run) + } + + file, err := os.Open(evaluatorPath) + if err != nil { + return fmt.Errorf("cannot read graders.operational-value.run %q: %w", grader.Run, err) + } + defer file.Close() + + info, err := file.Stat() + if err != nil { + return fmt.Errorf("cannot inspect graders.operational-value.run %q: %w", grader.Run, err) + } + if !info.Mode().IsRegular() { + return fmt.Errorf("graders.operational-value.run %q must be a regular file", grader.Run) + } + if info.Size() > maxOperationalValueEvaluatorSize { + return fmt.Errorf("graders.operational-value.run %q exceeds the %d-byte limit", grader.Run, maxOperationalValueEvaluatorSize) + } + + content, err := io.ReadAll(io.LimitReader(file, maxOperationalValueEvaluatorSize+1)) + if err != nil { + return fmt.Errorf("cannot read graders.operational-value.run %q: %w", grader.Run, err) + } + if len(content) > maxOperationalValueEvaluatorSize { + return fmt.Errorf("graders.operational-value.run %q exceeds the %d-byte limit", grader.Run, maxOperationalValueEvaluatorSize) + } + if !utf8.Valid(content) { + return fmt.Errorf("graders.operational-value.run %q must be valid UTF-8", grader.Run) + } + evaluatorContent := string(content) + if !strings.HasPrefix(evaluatorContent, "#!/usr/bin/env bash\n") && !strings.HasPrefix(evaluatorContent, "#!/bin/bash\n") { + return fmt.Errorf("graders.operational-value.run %q must start with a Bash shebang", grader.Run) + } + + grader.evaluatorContent = evaluatorContent + return nil +} diff --git a/pkg/workflow/graders_value_test.go b/pkg/workflow/graders_operational_value_test.go similarity index 50% rename from pkg/workflow/graders_value_test.go rename to pkg/workflow/graders_operational_value_test.go index 7687c186ca4..83e9677cfd1 100644 --- a/pkg/workflow/graders_value_test.go +++ b/pkg/workflow/graders_operational_value_test.go @@ -8,46 +8,46 @@ import ( "testing" ) -func TestPrepareValueGrader(t *testing.T) { +func TestPrepareOperationalValueGrader(t *testing.T) { repoRoot := t.TempDir() if err := os.Mkdir(filepath.Join(repoRoot, ".git"), 0o755); err != nil { t.Fatal(err) } workflowPath := filepath.Join(repoRoot, ".github", "workflows", "example.md") - functionPath := filepath.Join(repoRoot, ".github", "graders", "value.sh") + evaluatorPath := filepath.Join(repoRoot, ".github", "graders", "example-operational-value.sh") if err := os.MkdirAll(filepath.Dir(workflowPath), 0o755); err != nil { t.Fatal(err) } - if err := os.MkdirAll(filepath.Dir(functionPath), 0o755); err != nil { + if err := os.MkdirAll(filepath.Dir(evaluatorPath), 0o755); err != nil { t.Fatal(err) } content := "#!/usr/bin/env bash\nset -euo pipefail\n" - if err := os.WriteFile(functionPath, []byte(content), 0o755); err != nil { + if err := os.WriteFile(evaluatorPath, []byte(content), 0o755); err != nil { t.Fatal(err) } - data := valueGraderWorkflowData(".github/graders/value.sh") + data := operationalValueGraderWorkflowData(".github/graders/example-operational-value.sh") - if err := (&Compiler{}).prepareValueGrader(data, workflowPath); err != nil { + if err := (&Compiler{}).prepareOperationalValueGrader(data, workflowPath); err != nil { t.Fatalf("unexpected error: %v", err) } - grader := data.Graders.Graders["value"] - if grader.functionContent != content { - t.Fatal("expected value function content to be frozen") + grader := data.Graders.Graders["operational-value"] + if grader.evaluatorContent != content { + t.Fatal("expected operational-value evaluator content to be frozen") } - if len(grader.FunctionDigest()) != 64 { - t.Fatalf("expected SHA-256 digest, got %q", grader.FunctionDigest()) + if len(grader.EvaluatorDigest()) != 64 { + t.Fatalf("expected SHA-256 digest, got %q", grader.EvaluatorDigest()) } } -func TestPrepareValueGraderRejectsInvalidFiles(t *testing.T) { +func TestPrepareOperationalValueGraderRejectsInvalidFiles(t *testing.T) { tests := []struct { name string content string errText string }{ {name: "missing", errText: "cannot read"}, - {name: "not bash", content: "echo value\n", errText: "Bash shebang"}, - {name: "oversized", content: "#!/usr/bin/env bash\n" + strings.Repeat("x", maxValueFunctionSize), errText: "exceeds"}, + {name: "not bash", content: "echo operational value\n", errText: "Bash shebang"}, + {name: "oversized", content: "#!/usr/bin/env bash\n" + strings.Repeat("x", maxOperationalValueEvaluatorSize), errText: "exceeds"}, } for _, test := range tests { t.Run(test.name, func(t *testing.T) { @@ -56,20 +56,20 @@ func TestPrepareValueGraderRejectsInvalidFiles(t *testing.T) { t.Fatal(err) } workflowPath := filepath.Join(repoRoot, ".github", "workflows", "example.md") - functionPath := filepath.Join(repoRoot, ".github", "graders", "value.sh") + evaluatorPath := filepath.Join(repoRoot, ".github", "graders", "example-operational-value.sh") if err := os.MkdirAll(filepath.Dir(workflowPath), 0o755); err != nil { t.Fatal(err) } if test.content != "" { - if err := os.MkdirAll(filepath.Dir(functionPath), 0o755); err != nil { + if err := os.MkdirAll(filepath.Dir(evaluatorPath), 0o755); err != nil { t.Fatal(err) } - if err := os.WriteFile(functionPath, []byte(test.content), 0o755); err != nil { + if err := os.WriteFile(evaluatorPath, []byte(test.content), 0o755); err != nil { t.Fatal(err) } } - err := (&Compiler{}).prepareValueGrader(valueGraderWorkflowData(".github/graders/value.sh"), workflowPath) + err := (&Compiler{}).prepareOperationalValueGrader(operationalValueGraderWorkflowData(".github/graders/example-operational-value.sh"), workflowPath) if err == nil || !strings.Contains(err.Error(), test.errText) { t.Fatalf("expected error containing %q, got %v", test.errText, err) } @@ -77,12 +77,12 @@ func TestPrepareValueGraderRejectsInvalidFiles(t *testing.T) { } } -func TestPrepareValueGraderRejectsSymlinkEscape(t *testing.T) { +func TestPrepareOperationalValueGraderRejectsSymlinkEscape(t *testing.T) { if runtime.GOOS == "windows" { t.Skip("symlink creation requires additional privileges on Windows") } repoRoot := t.TempDir() - outside := filepath.Join(t.TempDir(), "value.sh") + outside := filepath.Join(t.TempDir(), "operational-value.sh") if err := os.WriteFile(outside, []byte("#!/usr/bin/env bash\n"), 0o755); err != nil { t.Fatal(err) } @@ -90,28 +90,28 @@ func TestPrepareValueGraderRejectsSymlinkEscape(t *testing.T) { t.Fatal(err) } workflowPath := filepath.Join(repoRoot, ".github", "workflows", "example.md") - functionPath := filepath.Join(repoRoot, ".github", "graders", "value.sh") + evaluatorPath := filepath.Join(repoRoot, ".github", "graders", "example-operational-value.sh") if err := os.MkdirAll(filepath.Dir(workflowPath), 0o755); err != nil { t.Fatal(err) } - if err := os.MkdirAll(filepath.Dir(functionPath), 0o755); err != nil { + if err := os.MkdirAll(filepath.Dir(evaluatorPath), 0o755); err != nil { t.Fatal(err) } - if err := os.Symlink(outside, functionPath); err != nil { + if err := os.Symlink(outside, evaluatorPath); err != nil { t.Fatal(err) } - err := (&Compiler{}).prepareValueGrader(valueGraderWorkflowData(".github/graders/value.sh"), workflowPath) + err := (&Compiler{}).prepareOperationalValueGrader(operationalValueGraderWorkflowData(".github/graders/example-operational-value.sh"), workflowPath) if err == nil || !strings.Contains(err.Error(), "escapes") { t.Fatalf("expected symlink escape error, got %v", err) } } -func valueGraderWorkflowData(functionPath string) *WorkflowData { +func operationalValueGraderWorkflowData(evaluatorPath string) *WorkflowData { return &WorkflowData{ Graders: &GradersConfig{ Graders: map[string]*GraderDefinition{ - "value": {ID: "value", Function: functionPath}, + "operational-value": {ID: "operational-value", Run: evaluatorPath}, }, }, } diff --git a/pkg/workflow/graders_value.go b/pkg/workflow/graders_value.go deleted file mode 100644 index a37ba5c26d6..00000000000 --- a/pkg/workflow/graders_value.go +++ /dev/null @@ -1,73 +0,0 @@ -package workflow - -import ( - "errors" - "fmt" - "io" - "os" - "path/filepath" - "strings" - "unicode/utf8" - - "github.com/github/gh-aw/pkg/fileutil" - "github.com/github/gh-aw/pkg/gitutil" -) - -const maxValueFunctionSize = 64 * 1024 - -func (c *Compiler) prepareValueGrader(data *WorkflowData, markdownPath string) error { - if data == nil || data.Graders == nil { - return nil - } - grader, ok := data.Graders.Graders["value"] - if !ok || (grader.Enabled != nil && !*grader.Enabled) { - return nil - } - if grader.Function == "" { - return errors.New("graders.value requires a 'function' field") - } - - repoRoot, err := gitutil.FindGitRootFrom(filepath.Dir(markdownPath)) - if err != nil { - return fmt.Errorf("cannot resolve graders.value.function %q: workflow is not inside a Git repository", grader.Function) - } - functionPath := filepath.Join(repoRoot, filepath.FromSlash(grader.Function)) - if err := fileutil.ValidatePathWithinBase(repoRoot, functionPath); err != nil { - return fmt.Errorf("graders.value.function %q escapes the Git repository", grader.Function) - } - - file, err := os.Open(functionPath) - if err != nil { - return fmt.Errorf("cannot read graders.value.function %q: %w", grader.Function, err) - } - defer file.Close() - - info, err := file.Stat() - if err != nil { - return fmt.Errorf("cannot inspect graders.value.function %q: %w", grader.Function, err) - } - if !info.Mode().IsRegular() { - return fmt.Errorf("graders.value.function %q must be a regular file", grader.Function) - } - if info.Size() > maxValueFunctionSize { - return fmt.Errorf("graders.value.function %q exceeds the %d-byte limit", grader.Function, maxValueFunctionSize) - } - - content, err := io.ReadAll(io.LimitReader(file, maxValueFunctionSize+1)) - if err != nil { - return fmt.Errorf("cannot read graders.value.function %q: %w", grader.Function, err) - } - if len(content) > maxValueFunctionSize { - return fmt.Errorf("graders.value.function %q exceeds the %d-byte limit", grader.Function, maxValueFunctionSize) - } - if !utf8.Valid(content) { - return fmt.Errorf("graders.value.function %q must be valid UTF-8", grader.Function) - } - functionContent := string(content) - if !strings.HasPrefix(functionContent, "#!/usr/bin/env bash\n") && !strings.HasPrefix(functionContent, "#!/bin/bash\n") { - return fmt.Errorf("graders.value.function %q must start with a Bash shebang", grader.Function) - } - - grader.functionContent = functionContent - return nil -} From a31e1b6a96c023d37f26975351e6bab638d8e751 Mon Sep 17 00:00:00 2001 From: Mara Nikola Kiefer Date: Mon, 24 Aug 2026 08:30:04 +0200 Subject: [PATCH 03/11] Refactor based on review comments --- .github/skills/aw-value/SKILL.md | 4 +- .../verify-operational-value-evaluator.sh | 52 ++++++++++ .github/skills/aw-value/tests/test.sh | 20 ++++ .../content/docs/reference/trace-graders.md | 2 +- .../docs/specs/graders-specification.md | 6 +- pkg/cli/graders_operational_value_regrade.go | 87 ++++++++++++++--- .../graders_operational_value_regrade_test.go | 97 ++++++++++++++++++- pkg/workflow/compiler_main_job_helpers.go | 19 ++++ .../compiler_main_job_helpers_test.go | 20 ++++ pkg/workflow/graders_config.go | 12 +++ pkg/workflow/graders_config_test.go | 24 +++-- pkg/workflow/graders_operational_value.go | 10 ++ .../graders_operational_value_bash.go | 23 +++++ .../graders_operational_value_bash_wasm.go | 9 ++ .../graders_operational_value_test.go | 34 ++++++- 15 files changed, 386 insertions(+), 33 deletions(-) create mode 100644 pkg/workflow/graders_operational_value_bash.go create mode 100644 pkg/workflow/graders_operational_value_bash_wasm.go diff --git a/.github/skills/aw-value/SKILL.md b/.github/skills/aw-value/SKILL.md index 77096ac7355..22a2f5b7319 100644 --- a/.github/skills/aw-value/SKILL.md +++ b/.github/skills/aw-value/SKILL.md @@ -100,7 +100,7 @@ The function must cap `evidenceCutoff` at the earlier of `evidenceAt` and `matur ## Regrade a Historical Run -Recompute a run at an explicit evidence time with the same local function used by the original run: +Recompute a run at an explicit evidence time with the same evaluator used by the original run: ```bash gh aw graders operational-value RUN-ID \ @@ -108,7 +108,7 @@ gh aw graders operational-value RUN-ID \ --json ``` -Add `--repo [HOST/]OWNER/REPO` when the run is not in the current repository. The command downloads the original grader artifact, reuses its operational case and complete run subject, and refuses to execute unless the archived evaluator's SHA-256 matches both digest records. It prints a new observation and never modifies the original artifact. +Add `--repo [HOST/]OWNER/REPO` to select the GitHub host for the current repository checkout. The command downloads the original grader artifact, reuses its operational case and complete run subject, and refuses to execute unless the archived evaluator matches both digest records and the evaluator at the recorded commit in the trusted checkout. It prints a new observation and never modifies the original artifact. ## Definition Contract diff --git a/.github/skills/aw-value/scripts/verify-operational-value-evaluator.sh b/.github/skills/aw-value/scripts/verify-operational-value-evaluator.sh index 4ac6a82e8db..6415383d639 100755 --- a/.github/skills/aw-value/scripts/verify-operational-value-evaluator.sh +++ b/.github/skills/aw-value/scripts/verify-operational-value-evaluator.sh @@ -67,4 +67,56 @@ jq -en --argjson attained "$target_attained" --argjson missed "$target_missed" \ '$attained != null and $missed != null and $attained > $missed' >/dev/null \ || fail "targetAttained must score higher than targetMissed" +repository=$(printf '%s\n' "$definition" | jq -r '.repository') +workflow_name=$(printf '%s\n' "$definition" | jq -r '.workflowName') +adoption_commit=$(printf '%s\n' "$definition" | jq -r '.adoption.commit') +created_at=$(printf '%s\n' "$definition" | jq -r '.adoption.adoptedAt') +evidence_at=2099-01-01T00:00:00Z +request=$(jq -cn \ + --arg repository "$repository" \ + --arg workflow "$workflow_name" \ + --arg sha "$adoption_commit" \ + --arg createdAt "$created_at" \ + --arg evidenceAt "$evidence_at" \ + '{ + schemaVersion: 1, + run: { + id: "1", + attempt: 1, + repository: $repository, + workflow: $workflow, + ref: "refs/heads/main", + sha: $sha, + eventName: "workflow_dispatch", + createdAt: $createdAt + }, + evidenceAt: $evidenceAt, + case: null, + event: {}, + config: {verification: true} + }') +grade_run=$(printf '%s\n' "$request" | "$evaluator" --grade-run) +printf '%s\n' "$grade_run" | jq -e --arg evidenceAt "$evidence_at" ' + def timestamp: + type == "string" + and test("^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}(\\.[0-9]{3})?Z$"); + def epoch: sub("\\.[0-9]{3}Z$"; "Z") | fromdateiso8601; + type == "object" + and (.value == null or (.value | type == "number" and isfinite and . >= 0 and . <= 1)) + and (.opportunityKey | type == "string" and length > 0) + and (.case | type == "object") + and (.evidenceCutoff | timestamp) + and (.maturesAt | timestamp) + and ((.evidenceCutoff | epoch) <= ($evidenceAt | epoch)) + and ((.evidenceCutoff | epoch) <= (.maturesAt | epoch)) + and (.provenance | type == "array") + and (if .value == null then true else (.provenance | length > 0) end) + and (all(.provenance[]; type == "object" + and (.repository | type == "string" and length > 0) + and (.kind | type == "string" and length > 0) + and (.ref | type == "string" and length > 0))) + and ((has("diagnostics") | not) or (.diagnostics | type == "object")) + and ((has("message") | not) or (.message | type == "string")) +' >/dev/null || fail "--grade-run returned an invalid operational-value observation" + printf 'verified %s\n' "$evaluator" \ No newline at end of file diff --git a/.github/skills/aw-value/tests/test.sh b/.github/skills/aw-value/tests/test.sh index 5dc72ffbb1e..96401dd5d6e 100755 --- a/.github/skills/aw-value/tests/test.sh +++ b/.github/skills/aw-value/tests/test.sh @@ -67,6 +67,26 @@ JSON --metric) jq 'if (.eligible | type) != "boolean" or .eligible == false or (.closed | type) != "boolean" then null elif .closed then 1 else 0 end' ;; + --grade-run) + request=$(cat) + printf '%s\n' "$request" | jq -e ' + .schemaVersion == 1 + and .run.id == "1" + and .run.repository == "owner/repo" + and .run.eventName == "workflow_dispatch" + and .case == null + and .config.verification == true + ' >/dev/null + printf '%s\n' "$request" | jq -c '{ + value: 1, + opportunityKey: "verification:1", + case: {verification: true}, + evidenceCutoff: .evidenceAt, + maturesAt: .evidenceAt, + provenance: [{repository: .run.repository, kind: "verification", ref: .run.id}], + diagnostics: {} + }' + ;; *) exit 1 ;; diff --git a/docs/src/content/docs/reference/trace-graders.md b/docs/src/content/docs/reference/trace-graders.md index 70d050de378..8cbefa187a2 100644 --- a/docs/src/content/docs/reference/trace-graders.md +++ b/docs/src/content/docs/reference/trace-graders.md @@ -80,7 +80,7 @@ gh aw graders operational-value 123456789 \ --json ``` -The command downloads the original grader artifact and reuses its case, run subject, and frozen evaluator. The archived evaluator must match the digest recorded by both the original manifest and result. Regrading emits a new observation identified by `(runId, evaluatorDigest, evidenceAt)` and never modifies the original artifact. Use `--repo [HOST/]OWNER/REPO` to target another repository. +The command downloads the original grader artifact and reuses its case, run subject, and frozen evaluator. The archived evaluator must match the digest recorded by both the original manifest and result and the evaluator at the recorded commit in the current repository checkout. Regrading emits a new observation identified by `(runId, evaluatorDigest, evidenceAt)` and never modifies the original artifact. Use `--repo [HOST/]OWNER/REPO` to select the host for the checked-out repository. ## Output files diff --git a/docs/src/content/docs/specs/graders-specification.md b/docs/src/content/docs/specs/graders-specification.md index 275111f524c..9471a4e596b 100644 --- a/docs/src/content/docs/specs/graders-specification.md +++ b/docs/src/content/docs/specs/graders-specification.md @@ -201,7 +201,7 @@ An operational-value observation MUST include: The effective evidence cutoff MUST NOT follow either the requested evidence time or the maturity time. A replayed observation MUST be identified by `(runId, evaluatorDigest, evidenceAt)`. -Historical regrading MUST reuse the original case, run subject, and archived evaluator. It MUST verify that the archived evaluator matches the digest recorded by both the original manifest and result before execution. It MUST emit a new observation and MUST NOT mutate the original run artifact. +Historical regrading MUST reuse the original case, run subject, and archived evaluator. It MUST verify that the archived evaluator matches the digest recorded by both the original manifest and result and the evaluator at the recorded commit in a trusted local checkout before execution. It MUST emit a new observation and MUST NOT mutate the original run artifact. --- @@ -223,7 +223,7 @@ The implementation MUST produce: ### 8.3 Artifact Inclusion -Both files MUST be included in the unified `agent` artifact. +All applicable files MUST be included in the unified `agent` artifact. ### 8.4 Deterministic Output Contract @@ -271,7 +271,7 @@ semantic task correctness. The normative readiness, decision, and JSON contracts - Grading MUST operate on local run artifacts and MUST NOT require outbound network access for built-ins. - Custom inline graders MUST execute in a restricted context with blocked dangerous primitives. - Operational-value graders MAY access declared repository evidence using `GH_TOKEN`; they MUST NOT receive workflow secrets. -- Historical regrading MUST verify archived evaluator bytes against both digest records before execution. +- Historical regrading MUST verify archived evaluator bytes against both digest records and a trusted local checkout at the recorded commit before execution. - Implementations SHOULD enforce bounded execution time for inline scripts. - Implementations SHOULD redact grader outputs when custom scripts are enabled to reduce secret leakage risk. diff --git a/pkg/cli/graders_operational_value_regrade.go b/pkg/cli/graders_operational_value_regrade.go index b1cd0af0855..fe483a2efc8 100644 --- a/pkg/cli/graders_operational_value_regrade.go +++ b/pkg/cli/graders_operational_value_regrade.go @@ -10,6 +10,7 @@ import ( "fmt" "io" "math" + "net/url" "os" "os/exec" "path/filepath" @@ -20,7 +21,9 @@ import ( "github.com/github/gh-aw/pkg/console" "github.com/github/gh-aw/pkg/constants" + "github.com/github/gh-aw/pkg/gitutil" "github.com/github/gh-aw/pkg/repoutil" + "github.com/github/gh-aw/pkg/stringutil" ) const ( @@ -157,7 +160,7 @@ func RunOperationalValueRegrade(ctx context.Context, config OperationalValueRegr if err != nil { return err } - repoSlug, artifactRepo, err := resolveOperationalValueRegradeRepo(config.RepoOverride) + repoSlug, artifactRepo, evaluatorHost, err := resolveOperationalValueRegradeRepo(config.RepoOverride) if err != nil { return err } @@ -190,8 +193,19 @@ func RunOperationalValueRegrade(ctx context.Context, config OperationalValueRegr if err := verifyHistoricalOperationalValueIdentity(repoSlug, evaluatorDigest, manifestEntry, originalResult, runData.Artifact.Run, runIDText); err != nil { return err } + currentRepoSlug, err := GetCurrentRepoSlug() + if err != nil { + return fmt.Errorf("cannot establish a trusted checkout for operational-value replay: %w", err) + } + gitRoot, err := gitutil.FindGitRoot() + if err != nil { + return fmt.Errorf("cannot establish a trusted checkout for operational-value replay: %w", err) + } + if err := verifyArchivedOperationalValueEvaluatorSource(gitRoot, currentRepoSlug, repoSlug, evaluatorContent, evaluatorDigest, *manifestEntry, originalResult.Observation.Subject); err != nil { + return err + } - execution, err := executeHistoricalOperationalValueEvaluator(ctx, evaluatorContent, *manifestEntry, *originalResult.Observation, config.EvidenceAt, evidenceAt) + execution, err := executeHistoricalOperationalValueEvaluator(ctx, evaluatorContent, *manifestEntry, *originalResult.Observation, config.EvidenceAt, evidenceAt, evaluatorHost) if err != nil { return err } @@ -199,17 +213,21 @@ func RunOperationalValueRegrade(ctx context.Context, config OperationalValueRegr return renderOperationalValueRegradeArtifact(artifact, config.JSONOutput) } -func resolveOperationalValueRegradeRepo(repoOverride string) (repoSlug, artifactRepo string, err error) { +func resolveOperationalValueRegradeRepo(repoOverride string) (repoSlug, artifactRepo, evaluatorHost string, err error) { if repoOverride == "" { repoSlug, err = GetCurrentRepoSlug() - return repoSlug, "", err + return repoSlug, "", getGitHubHostForRepo(repoSlug), err } - ownerRepo, _ := repoutil.NormalizeRepoForAPI(repoOverride) + ownerRepo, host := repoutil.NormalizeRepoForAPI(repoOverride) owner, repo, splitErr := repoutil.SplitRepoSlug(ownerRepo) if splitErr != nil { - return "", "", fmt.Errorf("invalid --repo %q: expected [HOST/]owner/repo", repoOverride) + return "", "", "", fmt.Errorf("invalid --repo %q: expected [HOST/]owner/repo", repoOverride) + } + evaluatorHost = getGitHubHostForRepo(ownerRepo) + if host != "" { + evaluatorHost = stringutil.NormalizeGitHubHostURL(host) } - return strings.Join([]string{owner, repo}, "/"), repoOverride, nil + return strings.Join([]string{owner, repo}, "/"), repoOverride, evaluatorHost, nil } func readArchivedOperationalValueEvaluator(runDir string) (string, string, error) { @@ -327,7 +345,27 @@ func verifyHistoricalOperationalValueIdentity(repoSlug, evaluatorDigest string, return nil } -func executeHistoricalOperationalValueEvaluator(ctx context.Context, evaluatorContent string, manifest operationalValueGraderManifestEntry, original graderArtifactObservation, evidenceAtText string, evidenceAt time.Time) (*operationalValueEvaluatorExecution, error) { +func verifyArchivedOperationalValueEvaluatorSource(gitRoot, currentRepoSlug, requestedRepoSlug, evaluatorContent, evaluatorDigest string, manifest operationalValueGraderManifestEntry, subject graderArtifactSubject) error { + if !strings.EqualFold(currentRepoSlug, requestedRepoSlug) { + return fmt.Errorf("refusing to execute an operational-value evaluator from %q without a trusted local checkout of that repository", requestedRepoSlug) + } + objectArg, err := buildSafeGitShowObjectArg(subject.SHA, manifest.Run) + if err != nil { + return errors.New("operational-value evaluator provenance contains an unsafe commit or path") + } + cmd := exec.Command("git", "-C", gitRoot, "show", "--no-ext-diff", "--no-textconv", objectArg) + trustedContent, err := cmd.Output() + if err != nil { + return fmt.Errorf("cannot establish operational-value evaluator from trusted commit %s: %w", subject.SHA, err) + } + trustedDigest := sha256.Sum256(trustedContent) + if hex.EncodeToString(trustedDigest[:]) != evaluatorDigest || !bytes.Equal(trustedContent, []byte(evaluatorContent)) { + return fmt.Errorf("archived operational-value evaluator does not match %s at trusted commit %s", manifest.Run, subject.SHA) + } + return nil +} + +func executeHistoricalOperationalValueEvaluator(ctx context.Context, evaluatorContent string, manifest operationalValueGraderManifestEntry, original graderArtifactObservation, evidenceAtText string, evidenceAt time.Time, evaluatorHost string) (*operationalValueEvaluatorExecution, error) { bashPath := "/bin/bash" if _, err := os.Stat(bashPath); err != nil { return nil, fmt.Errorf("bash is required to regrade operational value: %w", err) @@ -341,10 +379,10 @@ func executeHistoricalOperationalValueEvaluator(ctx context.Context, evaluatorCo if err := os.WriteFile(evaluatorPath, []byte(evaluatorContent), constants.FilePermExecutable); err != nil { return nil, fmt.Errorf("failed to stage operational-value evaluator: %w", err) } - if _, err := runOperationalValueEvaluatorBash(ctx, bashPath, evaluatorPath, []string{"-n", evaluatorPath}, nil, operationalValueDefinitionTimeout); err != nil { + if _, err := runOperationalValueEvaluatorBash(ctx, bashPath, evaluatorPath, []string{"-n", evaluatorPath}, nil, operationalValueDefinitionTimeout, evaluatorHost); err != nil { return nil, fmt.Errorf("operational-value evaluator has invalid Bash syntax: %w", err) } - definitionJSON, err := runOperationalValueEvaluatorBash(ctx, bashPath, evaluatorPath, []string{evaluatorPath, "--definition"}, nil, operationalValueDefinitionTimeout) + definitionJSON, err := runOperationalValueEvaluatorBash(ctx, bashPath, evaluatorPath, []string{evaluatorPath, "--definition"}, nil, operationalValueDefinitionTimeout, evaluatorHost) if err != nil { return nil, fmt.Errorf("operational-value evaluator --definition failed: %w", err) } @@ -377,19 +415,19 @@ func executeHistoricalOperationalValueEvaluator(ctx context.Context, evaluatorCo if err != nil { return nil, fmt.Errorf("failed to encode operational-value regrade request: %w", err) } - outputJSON, err := runOperationalValueEvaluatorBash(ctx, bashPath, evaluatorPath, []string{evaluatorPath, "--grade-run"}, requestJSON, operationalValueEvaluatorTimeout) + outputJSON, err := runOperationalValueEvaluatorBash(ctx, bashPath, evaluatorPath, []string{evaluatorPath, "--grade-run"}, requestJSON, operationalValueEvaluatorTimeout, evaluatorHost) if err != nil { return nil, fmt.Errorf("operational-value evaluator --grade-run failed: %w", err) } return parseOperationalValueEvaluatorOutput(outputJSON, original.Subject, evidenceAtText, evidenceAt, baselineValue) } -func runOperationalValueEvaluatorBash(ctx context.Context, bashPath, evaluatorPath string, args []string, input []byte, timeout time.Duration) ([]byte, error) { +func runOperationalValueEvaluatorBash(ctx context.Context, bashPath, evaluatorPath string, args []string, input []byte, timeout time.Duration, evaluatorHost string) ([]byte, error) { commandCtx, cancel := context.WithTimeout(ctx, timeout) defer cancel() cmd := exec.CommandContext(commandCtx, bashPath, args...) cmd.Dir = filepath.Dir(evaluatorPath) - cmd.Env = operationalValueEvaluatorEnvironment(os.Environ()) + cmd.Env = operationalValueEvaluatorEnvironment(os.Environ(), evaluatorHost) cmd.Stdin = bytes.NewReader(input) stdout := &boundedCommandBuffer{limit: maxOperationalValueRegradeOutputBytes} stderr := &boundedCommandBuffer{limit: maxOperationalValueRegradeOutputBytes} @@ -412,10 +450,10 @@ func runOperationalValueEvaluatorBash(ctx context.Context, bashPath, evaluatorPa return stdout.Bytes(), nil } -func operationalValueEvaluatorEnvironment(environ []string) []string { +func operationalValueEvaluatorEnvironment(environ []string, evaluatorHost string) []string { keys := []string{ "PATH", "HOME", "TMPDIR", "TEMP", "TMP", "SystemRoot", "ComSpec", - "GH_TOKEN", "GH_HOST", "GITHUB_API_URL", "GITHUB_SERVER_URL", + "GH_TOKEN", "GH_HOST", "GITHUB_API_URL", "GITHUB_GRAPHQL_URL", "GITHUB_SERVER_URL", } values := make(map[string]string, len(environ)) for _, entry := range environ { @@ -424,6 +462,19 @@ func operationalValueEvaluatorEnvironment(environ []string) []string { values[key] = value } } + hostURL, err := url.Parse(evaluatorHost) + if err == nil && hostURL.Scheme != "" && hostURL.Host != "" { + serverURL := strings.TrimSuffix(hostURL.String(), "/") + values["GH_HOST"] = hostURL.Host + values["GITHUB_SERVER_URL"] = serverURL + if strings.EqualFold(hostURL.Hostname(), "github.com") { + values["GITHUB_API_URL"] = "https://api.github.com" + values["GITHUB_GRAPHQL_URL"] = "https://api.github.com/graphql" + } else { + values["GITHUB_API_URL"] = serverURL + "/api/v3" + values["GITHUB_GRAPHQL_URL"] = serverURL + "/api/graphql" + } + } env := make([]string, 0, len(keys)) for _, key := range keys { if value := values[key]; value != "" { @@ -652,7 +703,11 @@ func renderOperationalValueRegradeArtifact(artifact operationalValueRegradeArtif fmt.Fprintf(os.Stdout, "Mature: %t\n", result.Observation.Mature) if result.BaselineValue != nil { fmt.Fprintf(os.Stdout, "Baseline value: %s\n", strconv.FormatFloat(*result.BaselineValue, 'f', -1, 64)) - fmt.Fprintf(os.Stdout, "Delta from baseline: %s\n", strconv.FormatFloat(*result.DeltaFromBaseline, 'f', -1, 64)) + delta := "null" + if result.DeltaFromBaseline != nil { + delta = strconv.FormatFloat(*result.DeltaFromBaseline, 'f', -1, 64) + } + fmt.Fprintf(os.Stdout, "Delta from baseline: %s\n", delta) } return nil } diff --git a/pkg/cli/graders_operational_value_regrade_test.go b/pkg/cli/graders_operational_value_regrade_test.go index ea26308bc0d..8fa1b28b351 100644 --- a/pkg/cli/graders_operational_value_regrade_test.go +++ b/pkg/cli/graders_operational_value_regrade_test.go @@ -2,6 +2,12 @@ package cli import ( "context" + "crypto/sha256" + "encoding/hex" + "io" + "os" + "os/exec" + "path/filepath" "strings" "testing" "time" @@ -91,7 +97,7 @@ esac } execution, err := executeHistoricalOperationalValueEvaluator( context.Background(), evaluatorContent, manifest, *result.Observation, - "2026-09-01T12:00:00Z", evidenceAt, + "2026-09-01T12:00:00Z", evidenceAt, "https://github.com", ) if err != nil { t.Fatalf("executeHistoricalOperationalValueEvaluator() error = %v", err) @@ -107,6 +113,95 @@ esac } } +func TestVerifyArchivedOperationalValueEvaluatorSource(t *testing.T) { + repoRoot := t.TempDir() + evaluatorPath := filepath.Join(repoRoot, ".github", "graders", "example.sh") + if err := os.MkdirAll(filepath.Dir(evaluatorPath), 0o755); err != nil { + t.Fatal(err) + } + content := []byte("#!/usr/bin/env bash\nprintf 'trusted\\n'\n") + if err := os.WriteFile(evaluatorPath, content, 0o755); err != nil { + t.Fatal(err) + } + for _, args := range [][]string{ + {"init"}, + {"config", "user.email", "test@example.com"}, + {"config", "user.name", "Test"}, + {"add", ".github/graders/example.sh"}, + {"commit", "-m", "add evaluator"}, + } { + cmd := exec.Command("git", append([]string{"-C", repoRoot}, args...)...) + if output, err := cmd.CombinedOutput(); err != nil { + t.Fatalf("git %v failed: %v: %s", args, err, output) + } + } + shaOutput, err := exec.Command("git", "-C", repoRoot, "rev-parse", "HEAD").Output() + if err != nil { + t.Fatal(err) + } + digest := sha256.Sum256(content) + manifest := operationalValueGraderManifestEntry{Run: ".github/graders/example.sh"} + subject := graderArtifactSubject{SHA: strings.TrimSpace(string(shaOutput))} + if err := verifyArchivedOperationalValueEvaluatorSource(repoRoot, "owner/repo", "owner/repo", string(content), hex.EncodeToString(digest[:]), manifest, subject); err != nil { + t.Fatalf("expected trusted evaluator, got %v", err) + } + if err := verifyArchivedOperationalValueEvaluatorSource(repoRoot, "owner/repo", "other/repo", string(content), hex.EncodeToString(digest[:]), manifest, subject); err == nil || !strings.Contains(err.Error(), "trusted local checkout") { + t.Fatalf("expected repository trust error, got %v", err) + } + if err := verifyArchivedOperationalValueEvaluatorSource(repoRoot, "owner/repo", "owner/repo", string(content)+"# changed\n", hex.EncodeToString(digest[:]), manifest, subject); err == nil || !strings.Contains(err.Error(), "does not match") { + t.Fatalf("expected source mismatch, got %v", err) + } +} + +func TestOperationalValueEvaluatorEnvironmentUsesRequestedHost(t *testing.T) { + env := operationalValueEvaluatorEnvironment([]string{ + "PATH=/usr/bin", + "GH_TOKEN=token", + "GH_HOST=stale.example.com", + "GITHUB_API_URL=https://stale.example.com/api/v3", + }, "https://ghe.example.com") + joined := strings.Join(env, "\n") + for _, expected := range []string{ + "GH_HOST=ghe.example.com", + "GITHUB_SERVER_URL=https://ghe.example.com", + "GITHUB_API_URL=https://ghe.example.com/api/v3", + "GITHUB_GRAPHQL_URL=https://ghe.example.com/api/graphql", + } { + if !strings.Contains(joined, expected) { + t.Fatalf("expected %q in evaluator environment: %v", expected, env) + } + } +} + +func TestRenderOperationalValueRegradeArtifactWithNullDelta(t *testing.T) { + baseline := 0.25 + artifact := operationalValueRegradeArtifact{ + Run: graderArtifactRun{ID: "12345"}, + Results: []operationalValueRegradeResult{{ + BaselineValue: &baseline, + Observation: operationalValueRegradeObservation{}, + }}, + } + oldStdout := os.Stdout + readOutput, writeOutput, err := os.Pipe() + if err != nil { + t.Fatal(err) + } + os.Stdout = writeOutput + t.Cleanup(func() { os.Stdout = oldStdout }) + if err := renderOperationalValueRegradeArtifact(artifact, false); err != nil { + t.Fatal(err) + } + _ = writeOutput.Close() + output, err := io.ReadAll(readOutput) + if err != nil { + t.Fatal(err) + } + if !strings.Contains(string(output), "Delta from baseline: null") { + t.Fatalf("unexpected output: %s", output) + } +} + func TestParseOperationalValueEvaluatorOutputRejectsFutureEvidence(t *testing.T) { evidenceAt, err := time.Parse(time.RFC3339, "2026-08-24T12:00:00Z") if err != nil { diff --git a/pkg/workflow/compiler_main_job_helpers.go b/pkg/workflow/compiler_main_job_helpers.go index 49542220a9f..cd95c0f19d0 100644 --- a/pkg/workflow/compiler_main_job_helpers.go +++ b/pkg/workflow/compiler_main_job_helpers.go @@ -342,6 +342,17 @@ func (c *Compiler) buildMainJobEnv(data *WorkflowData) map[string]string { // permissions from gh CLI commands found in all agent job step sections. func (c *Compiler) buildMainJobPermissions(data *WorkflowData) (string, error) { permissions := augmentPermissionsForDevMode(c, data, filterJobLevelPermissions(data.Permissions, data.CachedPermissions)) + if operationalValueGraderEnabled(data) { + if permissions == "" { + permissions = NewPermissionsFromMap(map[PermissionScope]PermissionLevel{ + PermissionActions: PermissionRead, + }).RenderToYAML() + } else { + permissions = mergeInferredIntoPermissionsYAML(permissions, map[PermissionScope]PermissionLevel{ + PermissionActions: PermissionRead, + }) + } + } agentAllScripts := collectAgentJobScripts(data) if len(agentAllScripts) == 0 { @@ -380,6 +391,14 @@ func (c *Compiler) buildMainJobPermissions(data *WorkflowData) (string, error) { return permissions, nil } +func operationalValueGraderEnabled(data *WorkflowData) bool { + if data == nil || data.Graders == nil { + return false + } + grader, ok := data.Graders.Graders["operational-value"] + return ok && (grader.Enabled == nil || *grader.Enabled) +} + // augmentPermissionsForDevMode adds contents: read to permissions when the compiler is in // dev or script mode and the actions folder checkout is needed. // diff --git a/pkg/workflow/compiler_main_job_helpers_test.go b/pkg/workflow/compiler_main_job_helpers_test.go index 7920e4a93c2..9b0f6610ecd 100644 --- a/pkg/workflow/compiler_main_job_helpers_test.go +++ b/pkg/workflow/compiler_main_job_helpers_test.go @@ -341,6 +341,26 @@ func TestBuildMainJobPermissions(t *testing.T) { _, err := c.buildMainJobPermissions(data) require.NoError(t, err) }) + + t.Run("operational value adds actions read", func(t *testing.T) { + c := NewCompiler() + data := operationalValueGraderWorkflowData(".github/graders/example-operational-value.sh") + data.Permissions = "permissions: {}" + perms, err := c.buildMainJobPermissions(data) + require.NoError(t, err) + assert.Contains(t, perms, "actions: read") + }) + + t.Run("disabled operational value does not add actions read", func(t *testing.T) { + c := NewCompiler() + disabled := false + data := operationalValueGraderWorkflowData(".github/graders/example-operational-value.sh") + data.Permissions = "permissions:\n contents: read" + data.Graders.Graders["operational-value"].Enabled = &disabled + perms, err := c.buildMainJobPermissions(data) + require.NoError(t, err) + assert.NotContains(t, perms, "actions: read") + }) } // TestWarnBuiltinJobEnvReferences tests warning emission for built-in job references in engine.env. diff --git a/pkg/workflow/graders_config.go b/pkg/workflow/graders_config.go index a37253c036e..8910f8ea778 100644 --- a/pkg/workflow/graders_config.go +++ b/pkg/workflow/graders_config.go @@ -6,6 +6,7 @@ import ( "encoding/hex" "errors" "fmt" + "math" "regexp" "sort" "strings" @@ -469,6 +470,17 @@ func validateGraders(cfg *GradersConfig) error { if cfg == nil { return nil } + if grader, ok := cfg.Graders["operational-value"]; ok { + if grader.Direction != "higher_is_better" { + return errors.New("graders.operational-value.direction must be 'higher_is_better'") + } + if grader.Min == nil || *grader.Min != 0 || grader.Max == nil || *grader.Max != 1 { + return errors.New("graders.operational-value range must be min: 0 and max: 1") + } + if grader.Threshold != nil && (math.IsNaN(*grader.Threshold) || math.IsInf(*grader.Threshold, 0) || *grader.Threshold < 0 || *grader.Threshold > 1) { + return errors.New("graders.operational-value.threshold must be between 0 and 1") + } + } if !cfg.HasGraders() { return errors.New("graders configuration has no enabled graders. Remove the graders field to disable grading, or set enabled: true on at least one grader") } diff --git a/pkg/workflow/graders_config_test.go b/pkg/workflow/graders_config_test.go index f4c70ce59d5..a78e037cb14 100644 --- a/pkg/workflow/graders_config_test.go +++ b/pkg/workflow/graders_config_test.go @@ -143,22 +143,28 @@ func TestParseGradersFromFrontmatter_OperationalValueGrader(t *testing.T) { func TestParseGradersFromFrontmatter_OperationalValueGraderValidation(t *testing.T) { var c Compiler tests := []struct { - name string - entry map[string]any + name string + entry map[string]any + errText string }{ - {name: "missing run", entry: map[string]any{}}, - {name: "path traversal", entry: map[string]any{"run": ".github/graders/../secret.sh"}}, - {name: "wrong directory", entry: map[string]any{"run": "scripts/operational-value.sh"}}, - {name: "wrong extension", entry: map[string]any{"run": ".github/graders/operational-value.js"}}, - {name: "inline script", entry: map[string]any{"run": ".github/graders/operational-value.sh", "script": "return 1"}}, + {name: "missing run", entry: map[string]any{}, errText: "requires a 'run' field"}, + {name: "path traversal", entry: map[string]any{"run": ".github/graders/../secret.sh"}, errText: "repository-relative"}, + {name: "wrong directory", entry: map[string]any{"run": "scripts/operational-value.sh"}, errText: "repository-relative"}, + {name: "wrong extension", entry: map[string]any{"run": ".github/graders/operational-value.js"}, errText: "repository-relative"}, + {name: "inline script", entry: map[string]any{"run": ".github/graders/operational-value.sh", "script": "return 1"}, errText: "cannot have an inline script"}, + {name: "direction", entry: map[string]any{"run": ".github/graders/operational-value.sh", "direction": "lower_is_better"}, errText: "direction must be 'higher_is_better'"}, + {name: "minimum", entry: map[string]any{"run": ".github/graders/operational-value.sh", "min": 0.1}, errText: "range must be min: 0 and max: 1"}, + {name: "maximum", entry: map[string]any{"run": ".github/graders/operational-value.sh", "max": 2.0}, errText: "range must be min: 0 and max: 1"}, + {name: "threshold below range", entry: map[string]any{"run": ".github/graders/operational-value.sh", "threshold": -0.1}, errText: "threshold must be between 0 and 1"}, + {name: "threshold above range", entry: map[string]any{"run": ".github/graders/operational-value.sh", "threshold": 1.1}, errText: "threshold must be between 0 and 1"}, } for _, test := range tests { t.Run(test.name, func(t *testing.T) { _, err := c.parseGradersFromFrontmatter(map[string]any{ "graders": map[string]any{"operational-value": test.entry}, }) - if err == nil { - t.Fatal("expected operational-value grader validation error") + if err == nil || !strings.Contains(err.Error(), test.errText) { + t.Fatalf("expected error containing %q, got %v", test.errText, err) } }) } diff --git a/pkg/workflow/graders_operational_value.go b/pkg/workflow/graders_operational_value.go index f12747a7488..98d30a36960 100644 --- a/pkg/workflow/graders_operational_value.go +++ b/pkg/workflow/graders_operational_value.go @@ -35,6 +35,13 @@ func (c *Compiler) prepareOperationalValueGrader(data *WorkflowData, markdownPat if err := fileutil.ValidatePathWithinBase(repoRoot, evaluatorPath); err != nil { return fmt.Errorf("graders.operational-value.run %q escapes the Git repository", grader.Run) } + evaluatorInfo, err := os.Lstat(evaluatorPath) + if err != nil { + return fmt.Errorf("cannot inspect graders.operational-value.run %q: %w", grader.Run, err) + } + if evaluatorInfo.Mode()&os.ModeSymlink != 0 { + return fmt.Errorf("graders.operational-value.run %q must not be a symbolic link", grader.Run) + } file, err := os.Open(evaluatorPath) if err != nil { @@ -67,6 +74,9 @@ func (c *Compiler) prepareOperationalValueGrader(data *WorkflowData, markdownPat if !strings.HasPrefix(evaluatorContent, "#!/usr/bin/env bash\n") && !strings.HasPrefix(evaluatorContent, "#!/bin/bash\n") { return fmt.Errorf("graders.operational-value.run %q must start with a Bash shebang", grader.Run) } + if err := validateOperationalValueEvaluatorBash(evaluatorContent); err != nil { + return fmt.Errorf("graders.operational-value.run %q has invalid Bash syntax: %w", grader.Run, err) + } grader.evaluatorContent = evaluatorContent return nil diff --git a/pkg/workflow/graders_operational_value_bash.go b/pkg/workflow/graders_operational_value_bash.go new file mode 100644 index 00000000000..9d8e0a79e54 --- /dev/null +++ b/pkg/workflow/graders_operational_value_bash.go @@ -0,0 +1,23 @@ +//go:build !js && !wasm + +package workflow + +import ( + "errors" + "os/exec" + "strings" +) + +func validateOperationalValueEvaluatorBash(evaluatorContent string) error { + cmd := exec.Command("bash", "-n") + cmd.Stdin = strings.NewReader(evaluatorContent) + output, err := cmd.CombinedOutput() + if err == nil { + return nil + } + message := strings.TrimSpace(string(output)) + if message == "" { + message = err.Error() + } + return errors.New(message) +} diff --git a/pkg/workflow/graders_operational_value_bash_wasm.go b/pkg/workflow/graders_operational_value_bash_wasm.go new file mode 100644 index 00000000000..234703b75be --- /dev/null +++ b/pkg/workflow/graders_operational_value_bash_wasm.go @@ -0,0 +1,9 @@ +//go:build js || wasm + +package workflow + +import "errors" + +func validateOperationalValueEvaluatorBash(string) error { + return errors.New("Bash syntax validation is not available in Wasm") +} diff --git a/pkg/workflow/graders_operational_value_test.go b/pkg/workflow/graders_operational_value_test.go index 83e9677cfd1..5cbd16fc4a4 100644 --- a/pkg/workflow/graders_operational_value_test.go +++ b/pkg/workflow/graders_operational_value_test.go @@ -45,8 +45,9 @@ func TestPrepareOperationalValueGraderRejectsInvalidFiles(t *testing.T) { content string errText string }{ - {name: "missing", errText: "cannot read"}, + {name: "missing", errText: "cannot inspect"}, {name: "not bash", content: "echo operational value\n", errText: "Bash shebang"}, + {name: "invalid bash", content: "#!/usr/bin/env bash\nif true; then\n", errText: "invalid Bash syntax"}, {name: "oversized", content: "#!/usr/bin/env bash\n" + strings.Repeat("x", maxOperationalValueEvaluatorSize), errText: "exceeds"}, } for _, test := range tests { @@ -107,6 +108,37 @@ func TestPrepareOperationalValueGraderRejectsSymlinkEscape(t *testing.T) { } } +func TestPrepareOperationalValueGraderRejectsRepositorySymlink(t *testing.T) { + if runtime.GOOS == "windows" { + t.Skip("symlink creation requires additional privileges on Windows") + } + repoRoot := t.TempDir() + if err := os.Mkdir(filepath.Join(repoRoot, ".git"), 0o755); err != nil { + t.Fatal(err) + } + workflowPath := filepath.Join(repoRoot, ".github", "workflows", "example.md") + gradersDir := filepath.Join(repoRoot, ".github", "graders") + targetPath := filepath.Join(gradersDir, "target.sh") + evaluatorPath := filepath.Join(gradersDir, "example-operational-value.sh") + if err := os.MkdirAll(filepath.Dir(workflowPath), 0o755); err != nil { + t.Fatal(err) + } + if err := os.MkdirAll(gradersDir, 0o755); err != nil { + t.Fatal(err) + } + if err := os.WriteFile(targetPath, []byte("#!/usr/bin/env bash\n"), 0o755); err != nil { + t.Fatal(err) + } + if err := os.Symlink(targetPath, evaluatorPath); err != nil { + t.Fatal(err) + } + + err := (&Compiler{}).prepareOperationalValueGrader(operationalValueGraderWorkflowData(".github/graders/example-operational-value.sh"), workflowPath) + if err == nil || !strings.Contains(err.Error(), "must not be a symbolic link") { + t.Fatalf("expected symlink rejection error, got %v", err) + } +} + func operationalValueGraderWorkflowData(evaluatorPath string) *WorkflowData { return &WorkflowData{ Graders: &GradersConfig{ From 1c073722643ad7991c3ae3520b6c7c1a16bc8048 Mon Sep 17 00:00:00 2001 From: Mara Nikola Kiefer Date: Mon, 24 Aug 2026 11:52:43 +0200 Subject: [PATCH 04/11] Refactor artifact handling --- pkg/workflow/compiler_artifacts_test.go | 9 +++++++++ pkg/workflow/compiler_yaml_artifacts.go | 6 +----- pkg/workflow/step_order_validation.go | 15 +++++++-------- pkg/workflow/step_order_validation_test.go | 13 +++++++++++++ 4 files changed, 30 insertions(+), 13 deletions(-) diff --git a/pkg/workflow/compiler_artifacts_test.go b/pkg/workflow/compiler_artifacts_test.go index 15ccb0562f9..9d0e73e41be 100644 --- a/pkg/workflow/compiler_artifacts_test.go +++ b/pkg/workflow/compiler_artifacts_test.go @@ -9,6 +9,7 @@ import ( "strings" "testing" + "github.com/github/gh-aw/pkg/constants" "github.com/github/gh-aw/pkg/stringutil" "github.com/github/gh-aw/pkg/testutil" @@ -602,6 +603,9 @@ permissions: contents: read engine: copilot strict: false +graders: + custom: + script: return 1 safe-outputs: create-issue: --- @@ -632,6 +636,8 @@ Body. "name: agent-output-fallback\n", "/tmp/gh-aw/agent_output.json", "/tmp/gh-aw/safeoutputs.jsonl", + "/tmp/gh-aw/agent/graders/grader_manifest.json", + "/tmp/gh-aw/agent/graders/grader_results.json", "if-no-files-found: ignore", "continue-on-error: true", } { @@ -639,6 +645,9 @@ Body. t.Errorf("Expected %q in fallback upload step, got:\n%s", expected, uploadSection) } } + if strings.Contains(uploadSection, constants.OperationalValueEvaluatorFilename) { + t.Errorf("Fallback upload must not include an operational-value evaluator for inline-only graders, got:\n%s", uploadSection) + } // The fallback artifact must be uploaded before the (large, failure-prone) agent artifact. uploadIdx := strings.Index(lockYAML, "- name: Upload agent output fallback artifact") diff --git a/pkg/workflow/compiler_yaml_artifacts.go b/pkg/workflow/compiler_yaml_artifacts.go index 75db9d499dc..c083f3512c8 100644 --- a/pkg/workflow/compiler_yaml_artifacts.go +++ b/pkg/workflow/compiler_yaml_artifacts.go @@ -78,11 +78,7 @@ func (c *Compiler) generateAgentOutputFallbackUpload(yaml *strings.Builder, data // Include grader manifest/results in the fallback so detection and downstream // jobs have reliable access even when the large unified artifact times out. if data.Graders != nil && data.Graders.HasGraders() { - paths = append(paths, - constants.GradersDirSlash+constants.GraderManifestFilename, - constants.GradersDirSlash+constants.GraderResultsFilename, - constants.GradersDirSlash+constants.OperationalValueEvaluatorFilename, - ) + paths = append(paths, collectGraderArtifactPaths(data.Graders)...) } c.stepOrderTracker.RecordArtifactUpload("Upload agent output fallback artifact", paths) diff --git a/pkg/workflow/step_order_validation.go b/pkg/workflow/step_order_validation.go index 5364e69e623..fbd8d69b83f 100644 --- a/pkg/workflow/step_order_validation.go +++ b/pkg/workflow/step_order_validation.go @@ -222,17 +222,16 @@ func isPathScannedBySecretRedaction(path string) bool { // that is NOT text-scanned by the redact_secrets step, but is nevertheless explicitly // permitted in artifact uploads. // -// .bundle files are binary git bundles produced when patch-format: bundle is -// configured. They are generated from the same git commit range as the accompanying -// .patch file (see generateGitBundle in actions/setup/js/generate_git_bundle.cjs), -// so the .patch scanning already covers the underlying diff content. Bundles cannot -// be safely scanned as UTF-8 text, but they are required downstream to apply changes -// while preserving merge topology, so they are intentionally allowed through -// artifact uploads unscanned. +// In addition to binary git bundles, the archived operational-value evaluator is +// allowed because the compiler freezes its trusted repository bytes and records +// their digest for replay. Redacting that archive would invalidate its provenance. func isKnownUnscannedButAllowedForUpload(path string) bool { isUnderGhAwDir := strings.HasPrefix(path, constants.TmpGhAwDirSlash) || strings.HasPrefix(path, constants.GhAwRootDirShellSlash) || strings.HasPrefix(path, constants.GhAwRootDirSlash) || strings.Contains(path, "${{ env.") - return isUnderGhAwDir && filepath.Ext(path) == ".bundle" + if !isUnderGhAwDir { + return false + } + return filepath.Ext(path) == ".bundle" || path == constants.GradersDirSlash+constants.OperationalValueEvaluatorFilename } diff --git a/pkg/workflow/step_order_validation_test.go b/pkg/workflow/step_order_validation_test.go index b42d1ed06de..4378160ca75 100644 --- a/pkg/workflow/step_order_validation_test.go +++ b/pkg/workflow/step_order_validation_test.go @@ -33,6 +33,19 @@ func TestStepOrderTracker_ValidateOrdering_SecretRedactionBeforeUploads(t *testi } } +func TestStepOrderTracker_ValidateOrdering_ArchivedOperationalValueEvaluator(t *testing.T) { + tracker := NewStepOrderTracker() + tracker.MarkAgentExecutionComplete() + tracker.RecordSecretRedaction("Redact grader outputs") + tracker.RecordArtifactUpload("Upload agent artifacts", []string{ + "/tmp/gh-aw/agent/graders/operational_value_evaluator.sh", + }) + + if err := tracker.ValidateStepOrdering(); err != nil { + t.Errorf("Expected archived operational-value evaluator to be allowed, got: %v", err) + } +} + func TestStepOrderTracker_ValidateOrdering_UploadBeforeSecretRedaction(t *testing.T) { tracker := NewStepOrderTracker() tracker.MarkAgentExecutionComplete() From ec3cfc1ec0550a90fef7a3bc870b1c752b9a4e66 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 24 Aug 2026 10:14:53 +0000 Subject: [PATCH 05/11] docs(adr): add draft ADR-55155 for operational-value grader Co-Authored-By: Claude Sonnet 4.6 --- docs/adr/55155-operational-value-grader.md | 51 ++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 docs/adr/55155-operational-value-grader.md diff --git a/docs/adr/55155-operational-value-grader.md b/docs/adr/55155-operational-value-grader.md new file mode 100644 index 00000000000..08f7314e1bf --- /dev/null +++ b/docs/adr/55155-operational-value-grader.md @@ -0,0 +1,51 @@ +# ADR-55155: Introduce a Dedicated Operational-Value Grader Type + +**Date**: 2026-08-24 +**Status**: Draft +**Deciders**: mnkiefer + +--- + +### Context + +The gh-aw grader framework already measures execution quality through built-in and custom trace-based graders (coverage, test results, working-set metrics). However, none of those graders can answer whether a workflow run actually achieved its intended repository outcome — e.g., whether the issue assigned to the run was closed, or whether the PR was merged. Operational value is distinct from execution quality: it requires querying accepted, time-bounded repository evidence rather than analysing the run's own trace data. Users need a per-run attainment score in [0, 1] that can be recomputed as evidence matures and optionally compared against a frozen pre-adoption baseline. + +### Decision + +We will introduce a first-class `operational-value` grader type implemented by a user-authored, deterministic Bash evaluator. The evaluator implements a versioned three-command interface (`--definition`, `--metric`, `--grade-run`); gh-aw verifies its syntax and definition contract at design time via `verify-operational-value-evaluator.sh`, archives the evaluator content with a SHA-256 digest at run time, and executes it in a restricted environment. The primary output is an absolute attainment value in [0, 1]; a frozen baseline value and delta are derived separately and never define the primary value. Regrading a historical run re-downloads the archived evaluator, verifies both digest records match, and recomputes the observation at an explicit evidence timestamp without modifying the original artifact. + +### Alternatives Considered + +#### Alternative 1: Extend the Existing Custom Grader Interface + +Allow custom trace-based graders to optionally return observation metadata alongside their numeric score. This would avoid adding a new grader `source` type and keep the execution path uniform. + +Rejected because trace data is the wrong input for operational value: the evaluator must query live (but time-bounded) repository evidence such as issue events or PR state. Mixing live API calls into the trace-grader path would break its hermetic, file-based preprocessing model and make execution order unpredictable. Additionally, conflating execution quality and operational attainment in one result object complicates downstream analysis. + +#### Alternative 2: Track Operational Outcomes in an External Observability System + +Measure workflow business value in a separate service or database outside the grader framework, and surface results through a dashboard rather than per-run grader results. + +Rejected because it requires users to maintain a second system and breaks the unified grader result model that consumers (CI gates, summary tables, the `gh aw graders` CLI) already understand. It also forfeits the digest-verified regrading guarantee, which is essential for auditing value observations over time as evidence matures. + +### Consequences + +#### Positive +- Enables per-run measurement of true workflow business value using accepted, time-bounded repository evidence. +- Regrading with a digest-verified archived evaluator makes value observations reproducible and auditable across evidence horizons. +- Optional baseline comparison (frozen pre-adoption score) lets teams quantify improvement without redefining the primary metric as a delta. +- The `aw-value` skill gives teams a guided, validated path to designing and verifying their own evaluators. + +#### Negative +- The evaluator is user-authored Bash executed with access to `GH_TOKEN`, expanding the trusted-code surface area compared to trace-only graders. The restricted environment and digest check mitigate but do not eliminate this risk. +- A new `source: "operational-value"` grader type requires a separate archiving step, a new execution branch in `trace_graders.cjs`, and a new evaluator interface — all additional maintenance surface. +- Regrading via `gh aw graders operational-value` adds CLI surface area and operational complexity that must be kept in sync with evaluator schema versions. + +#### Neutral +- The evaluator interface is versioned (`schemaVersion: 4` for the definition contract, `schemaVersion: 1` for the run request) to allow future evolution without breaking existing evaluators. +- Evaluation is sandboxed to a minimal environment (`PATH`, `HOME`, `GH_TOKEN`, etc.) consistent with other grader execution contexts. +- The `aw-value` skill produces evaluators; the grader framework executes them — the two concerns remain independent. + +--- + +*ADR created by [adr-writer agent]. Review and finalize before changing status from Draft to Accepted.* From 981da9783e4bb2f9ffcb1b925b041b9134fcccc0 Mon Sep 17 00:00:00 2001 From: Mara Nikola Kiefer Date: Mon, 24 Aug 2026 14:08:17 +0200 Subject: [PATCH 06/11] Address operational value review feedback --- actions/setup/js/operational_value_grader.cjs | 9 ++-- .../js/operational_value_grader.test.cjs | 9 +++- docs/adr/55155-operational-value-grader.md | 52 +++++++++++++++++++ pkg/cli/graders_operational_value_regrade.go | 18 ++++--- .../graders_operational_value_regrade_test.go | 24 +++++++++ pkg/workflow/compiler_main_job_helpers.go | 4 ++ .../compiler_main_job_helpers_test.go | 10 +++- 7 files changed, 114 insertions(+), 12 deletions(-) create mode 100644 docs/adr/55155-operational-value-grader.md diff --git a/actions/setup/js/operational_value_grader.cjs b/actions/setup/js/operational_value_grader.cjs index e4efb527fcf..9d76bc05ac6 100644 --- a/actions/setup/js/operational_value_grader.cjs +++ b/actions/setup/js/operational_value_grader.cjs @@ -2,13 +2,13 @@ const cp = require("child_process"); const fs = require("fs"); -const os = require("os"); const path = require("path"); const { getErrorMessage } = require("./error_helpers.cjs"); const OPERATIONAL_VALUE_EVALUATOR_TIMEOUT_MS = 120000; const OPERATIONAL_VALUE_EVALUATOR_MAX_OUTPUT = 1024 * 1024; const OPERATIONAL_VALUE_EVENT_MAX_SIZE = 1024 * 1024; +const OPERATIONAL_VALUE_EVALUATOR_TEMP_ROOT = "/tmp/gh-aw/agent"; /** @param {unknown} value @returns {value is Record} */ function isRecord(value) { @@ -63,7 +63,7 @@ function readEventPayload(env) { function safeFunctionEnv(env) { /** @type {NodeJS.ProcessEnv} */ const result = {}; - for (const key of ["PATH", "HOME", "TMPDIR", "TEMP", "TMP", "SystemRoot", "ComSpec", "GH_TOKEN", "GH_HOST", "GITHUB_API_URL", "GITHUB_SERVER_URL"]) { + for (const key of ["PATH", "HOME", "TMPDIR", "TEMP", "TMP", "SystemRoot", "ComSpec", "GH_TOKEN", "GH_HOST", "GITHUB_API_URL", "GITHUB_GRAPHQL_URL", "GITHUB_SERVER_URL"]) { if (env[key]) result[key] = env[key]; } return result; @@ -113,7 +113,8 @@ function executeOperationalValueEvaluator(evaluatorContent, meta, options = {}) config: meta.config || {}, }; - const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "gh-aw-operational-value-grader-")); + fs.mkdirSync(OPERATIONAL_VALUE_EVALUATOR_TEMP_ROOT, { recursive: true, mode: 0o700 }); + const tempDir = fs.mkdtempSync(path.join(OPERATIONAL_VALUE_EVALUATOR_TEMP_ROOT, "operational-value-grader-")); const evaluatorPath = path.join(tempDir, "operational-value.sh"); const bashPath = options.bashPath || "/bin/bash"; try { @@ -215,6 +216,8 @@ module.exports = { readEventPayload, parseTimestamp, parseOperationalValueBaselineDefinition, + safeFunctionEnv, + OPERATIONAL_VALUE_EVALUATOR_TEMP_ROOT, OPERATIONAL_VALUE_EVALUATOR_TIMEOUT_MS, OPERATIONAL_VALUE_EVALUATOR_MAX_OUTPUT, OPERATIONAL_VALUE_EVENT_MAX_SIZE, diff --git a/actions/setup/js/operational_value_grader.test.cjs b/actions/setup/js/operational_value_grader.test.cjs index 8ebdfd25040..9c80f033e4c 100644 --- a/actions/setup/js/operational_value_grader.test.cjs +++ b/actions/setup/js/operational_value_grader.test.cjs @@ -1,6 +1,6 @@ // @ts-check -const { executeOperationalValueEvaluator, buildRunSubject } = require("./operational_value_grader.cjs"); +const { executeOperationalValueEvaluator, buildRunSubject, safeFunctionEnv, OPERATIONAL_VALUE_EVALUATOR_TEMP_ROOT } = require("./operational_value_grader.cjs"); const TEST_ENV = { PATH: process.env.PATH, @@ -36,6 +36,13 @@ esac } describe("operational_value_grader", () => { + it("uses the gh-aw agent temp root and forwards the GitHub GraphQL URL", () => { + expect(OPERATIONAL_VALUE_EVALUATOR_TEMP_ROOT).toBe("/tmp/gh-aw/agent"); + expect(safeFunctionEnv({ GITHUB_GRAPHQL_URL: "https://api.github.com/graphql" })).toEqual({ + GITHUB_GRAPHQL_URL: "https://api.github.com/graphql", + }); + }); + it("builds a stable workflow-run subject", () => { expect(buildRunSubject(TEST_ENV)).toEqual({ id: "12345", diff --git a/docs/adr/55155-operational-value-grader.md b/docs/adr/55155-operational-value-grader.md new file mode 100644 index 00000000000..896bc3695a6 --- /dev/null +++ b/docs/adr/55155-operational-value-grader.md @@ -0,0 +1,52 @@ +# ADR-55155: Introduce a Dedicated Operational-Value Grader Type + +**Date**: 2026-08-24 +**Status**: Draft +**Deciders**: gh-aw maintainers + +--- + +### Context + +The existing built-in and inline graders measure execution quality from a run's trace, but operational value depends on repository evidence, maturation windows, and a stable baseline contract. That evidence must remain attributable to the workflow run and evaluator version while supporting deterministic replay after the original run artifact is sealed. Allowing arbitrary evaluator locations or mutable evaluator code would weaken provenance and make historical results difficult to reproduce. The agent job also needs workflow-run metadata from GitHub Actions, so the permission requirement must be visible rather than silently overriding an explicit zero-permission policy. + +### Decision + +We will reserve the `operational-value` grader ID for a repository-relative Bash evaluator under `.github/graders/*.sh`. At compile time, gh-aw will reject traversal, symlinks, and non-regular files, validate Bash syntax, and freeze the evaluator bytes and SHA-256 digest into the compiled workflow. At runtime, gh-aw will execute deterministic `--definition` and `--grade-run` modes in the gh-aw temporary area with a curated environment, producing absolute attainment in `[0,1]` or `null` plus evidence provenance, maturity, a frozen baseline, and an optional derived delta. The grader will require `actions: read`; an explicit `permissions: {}` will fail compilation instead of being silently broadened. + +The unified agent artifact will contain `grader_manifest.json`, `grader_results.json`, and the frozen evaluator for replay. Historical regrading will execute only after verifying the archived bytes against the manifest/result digests and the evaluator at the recorded commit in a trusted checkout, while preserving the original run identity, attempt, subject, and operational case. + +### Alternatives Considered + +#### Alternative 1: Use Ordinary Inline Execution-Quality Graders + +Represent operational value as another inline JavaScript grader over the preprocessed execution trace. This would reuse the existing isolated worker and artifact schema, but traces describe how the agent executed rather than whether repository-level outcomes were attained. Inline graders also lack the evidence cutoff, maturity, baseline, provenance, and trusted-checkout replay contract required for operational value. + +#### Alternative 2: Embed Evaluator Logic in Workflow Frontmatter or JavaScript + +Place the complete evaluator directly in frontmatter or implement it as gh-aw-owned JavaScript. Frontmatter would make non-trivial evidence contracts difficult to review and maintain, while a built-in JavaScript implementation would couple repository-specific value definitions to gh-aw releases. A repository file keeps the evaluator versioned with the workflow while allowing the compiler to freeze and validate the exact bytes used. + +#### Alternative 3: Compute Operational Value Only Asynchronously + +Run value evaluation later in an external service or periodic process, outside the original run artifacts. This could wait naturally for mature evidence and avoid adding Bash execution to the agent job, but it would separate observations from their original run identity and frozen evaluator unless a parallel provenance system were built. It would also make immediate attainment unavailable and weaken self-contained replay from the run artifact. + +### Consequences + +#### Positive +- Each observation is tied to a run, operational case, evidence cutoff, provenance, and evaluator digest, enabling reproducible historical regrading. +- The manifest, results, and frozen evaluator form a self-contained artifact set for audit and replay without mutating the original run. +- Baseline-comparable and attainment-only definitions share one normalized result contract while preserving `null` for unavailable or immature evidence. + +#### Negative +- Workflows using the grader require `actions: read`, and configurations that deliberately use `permissions: {}` must be changed explicitly before compilation succeeds. +- The feature adds Bash availability, syntax validation, process timeout, output validation, curated-environment, and temporary-file complexity to compiler and runtime maintenance. +- Run artifacts contain trusted executable bytes; consumers must continue verifying digests and checkout provenance before executing them. + +#### Neutral +- Operational value is absolute attainment, not proof that the workflow caused the observed outcome; the optional baseline delta remains descriptive rather than causal. +- Evaluators may access only the curated runtime environment, including the workflow token and GitHub host variables, and execute from the gh-aw temporary area rather than inheriting the full workflow environment. +- Historical regrading creates a new observation keyed by run ID, evaluator digest, and evidence time while preserving the original run artifact and case. + +--- + +*ADR created by [adr-writer agent]. Review and finalize before changing status from Draft to Accepted.* \ No newline at end of file diff --git a/pkg/cli/graders_operational_value_regrade.go b/pkg/cli/graders_operational_value_regrade.go index fe483a2efc8..b85254b29f6 100644 --- a/pkg/cli/graders_operational_value_regrade.go +++ b/pkg/cli/graders_operational_value_regrade.go @@ -232,21 +232,25 @@ func resolveOperationalValueRegradeRepo(repoOverride string) (repoSlug, artifact func readArchivedOperationalValueEvaluator(runDir string) (string, string, error) { evaluatorPath := filepath.Join(runDir, "agent", "graders", constants.OperationalValueEvaluatorFilename) - if _, err := os.Stat(evaluatorPath); err != nil { - evaluatorPath = filepath.Join(runDir, "graders", constants.OperationalValueEvaluatorFilename) - } - file, err := os.Open(evaluatorPath) + info, err := os.Lstat(evaluatorPath) if err != nil { - return "", "", fmt.Errorf("cannot read archived operational-value evaluator: %w", err) + evaluatorPath = filepath.Join(runDir, "graders", constants.OperationalValueEvaluatorFilename) + info, err = os.Lstat(evaluatorPath) } - defer file.Close() - info, err := file.Stat() if err != nil { return "", "", fmt.Errorf("cannot inspect archived operational-value evaluator: %w", err) } + if info.Mode()&os.ModeSymlink != 0 { + return "", "", errors.New("archived operational-value evaluator must not be a symbolic link") + } if !info.Mode().IsRegular() { return "", "", errors.New("archived operational-value evaluator must be a regular file") } + file, err := os.Open(evaluatorPath) + if err != nil { + return "", "", fmt.Errorf("cannot read archived operational-value evaluator: %w", err) + } + defer file.Close() content, err := io.ReadAll(io.LimitReader(file, maxOperationalValueRegradeEvaluatorBytes+1)) if err != nil { return "", "", fmt.Errorf("cannot read archived operational-value evaluator: %w", err) diff --git a/pkg/cli/graders_operational_value_regrade_test.go b/pkg/cli/graders_operational_value_regrade_test.go index 8fa1b28b351..307580dc77f 100644 --- a/pkg/cli/graders_operational_value_regrade_test.go +++ b/pkg/cli/graders_operational_value_regrade_test.go @@ -8,6 +8,7 @@ import ( "os" "os/exec" "path/filepath" + "runtime" "strings" "testing" "time" @@ -153,6 +154,29 @@ func TestVerifyArchivedOperationalValueEvaluatorSource(t *testing.T) { } } +func TestReadArchivedOperationalValueEvaluatorRejectsSymlink(t *testing.T) { + if runtime.GOOS == "windows" { + t.Skip("symlink creation requires additional privileges on Windows") + } + runDir := t.TempDir() + gradersDir := filepath.Join(runDir, "agent", "graders") + if err := os.MkdirAll(gradersDir, 0o755); err != nil { + t.Fatal(err) + } + targetPath := filepath.Join(runDir, "evaluator.sh") + if err := os.WriteFile(targetPath, []byte("#!/usr/bin/env bash\n"), 0o755); err != nil { + t.Fatal(err) + } + if err := os.Symlink(targetPath, filepath.Join(gradersDir, "operational_value_evaluator.sh")); err != nil { + t.Fatal(err) + } + + _, _, err := readArchivedOperationalValueEvaluator(runDir) + if err == nil || !strings.Contains(err.Error(), "must not be a symbolic link") { + t.Fatalf("expected symbolic-link rejection, got %v", err) + } +} + func TestOperationalValueEvaluatorEnvironmentUsesRequestedHost(t *testing.T) { env := operationalValueEvaluatorEnvironment([]string{ "PATH=/usr/bin", diff --git a/pkg/workflow/compiler_main_job_helpers.go b/pkg/workflow/compiler_main_job_helpers.go index cd95c0f19d0..69c1319e2a2 100644 --- a/pkg/workflow/compiler_main_job_helpers.go +++ b/pkg/workflow/compiler_main_job_helpers.go @@ -1,6 +1,7 @@ package workflow import ( + "errors" "fmt" "os" "slices" @@ -343,6 +344,9 @@ func (c *Compiler) buildMainJobEnv(data *WorkflowData) map[string]string { func (c *Compiler) buildMainJobPermissions(data *WorkflowData) (string, error) { permissions := augmentPermissionsForDevMode(c, data, filterJobLevelPermissions(data.Permissions, data.CachedPermissions)) if operationalValueGraderEnabled(data) { + if data.Permissions == "permissions: {}" { + return "", errors.New("graders.operational-value requires actions: read; remove permissions: {} or grant actions: read explicitly") + } if permissions == "" { permissions = NewPermissionsFromMap(map[PermissionScope]PermissionLevel{ PermissionActions: PermissionRead, diff --git a/pkg/workflow/compiler_main_job_helpers_test.go b/pkg/workflow/compiler_main_job_helpers_test.go index 9b0f6610ecd..966ac2bc8d5 100644 --- a/pkg/workflow/compiler_main_job_helpers_test.go +++ b/pkg/workflow/compiler_main_job_helpers_test.go @@ -345,12 +345,20 @@ func TestBuildMainJobPermissions(t *testing.T) { t.Run("operational value adds actions read", func(t *testing.T) { c := NewCompiler() data := operationalValueGraderWorkflowData(".github/graders/example-operational-value.sh") - data.Permissions = "permissions: {}" + data.Permissions = "permissions:\n contents: read" perms, err := c.buildMainJobPermissions(data) require.NoError(t, err) assert.Contains(t, perms, "actions: read") }) + t.Run("operational value rejects explicit empty permissions", func(t *testing.T) { + c := NewCompiler() + data := operationalValueGraderWorkflowData(".github/graders/example-operational-value.sh") + data.Permissions = "permissions: {}" + _, err := c.buildMainJobPermissions(data) + require.EqualError(t, err, "graders.operational-value requires actions: read; remove permissions: {} or grant actions: read explicitly") + }) + t.Run("disabled operational value does not add actions read", func(t *testing.T) { c := NewCompiler() disabled := false From 83cdb7e44b32ee6f6d189c179f206ea19b396b36 Mon Sep 17 00:00:00 2001 From: Mara Nikola Kiefer Date: Mon, 24 Aug 2026 14:29:46 +0200 Subject: [PATCH 07/11] feat: enhance operational-value grader with run creation time and permissions management --- .github/skills/aw-value/SKILL.md | 1 + actions/setup/js/generate_aw_info.cjs | 18 ++++++++++++++- actions/setup/js/generate_aw_info.test.cjs | 23 +++++++++++++++++++ actions/setup/js/trace_graders.cjs | 15 ++---------- docs/adr/55155-operational-value-grader.md | 6 ++--- .../content/docs/reference/trace-graders.md | 2 +- .../docs/specs/graders-specification.md | 2 +- pkg/workflow/aw_info_tmp_test.go | 4 ++-- pkg/workflow/compiler_activation_context.go | 3 +++ pkg/workflow/compiler_activation_job_test.go | 22 ++++++++++++++++++ .../compiler_activation_permissions.go | 2 +- pkg/workflow/compiler_main_job_helpers.go | 15 ------------ .../compiler_main_job_helpers_test.go | 9 ++++---- pkg/workflow/compiler_yaml_graders.go | 1 + pkg/workflow/compiler_yaml_step_lifecycle.go | 5 +++- pkg/workflow/graders_config_test.go | 15 ++++++++++++ 16 files changed, 101 insertions(+), 42 deletions(-) diff --git a/.github/skills/aw-value/SKILL.md b/.github/skills/aw-value/SKILL.md index 22a2f5b7319..b8ad59834ae 100644 --- a/.github/skills/aw-value/SKILL.md +++ b/.github/skills/aw-value/SKILL.md @@ -41,6 +41,7 @@ The grader's primary `value` is absolute attainment in `[0,1]`. A comparable fro - preserve repeated keys when duplicate runs target the same opportunity so downstream analysis can cluster or deduplicate them; - treat reruns with the same GitHub run ID as the same subject. 4. Freeze accepted evidence, evidence repositories, matching rules, zero-versus-missing behavior, and `maturesAt` computation. + - Declare only the workflow permission scopes required to collect that evidence. The evaluator receives `GH_TOKEN` with the agent job's declared permissions; gh-aw does not add evidence permissions automatically. 5. Choose exactly one direct primary metric in `[0,1]`. Higher must always mean greater attainment. Keep trace graders and activity counts separate. 6. If comparable pre-adoption evidence exists, score it with the same metric and freeze it under `baseline`. Otherwise use `attainment-only` with a null baseline value. 7. Implement the evaluator interface below and run: diff --git a/actions/setup/js/generate_aw_info.cjs b/actions/setup/js/generate_aw_info.cjs index d3d0bf994f1..0c22f1dc757 100644 --- a/actions/setup/js/generate_aw_info.cjs +++ b/actions/setup/js/generate_aw_info.cjs @@ -24,9 +24,10 @@ const { ERR_CONFIG, ERR_SYSTEM } = require("./error_codes.cjs"); * * @param {typeof import('@actions/core')} core - GitHub Actions core library * @param {any} ctx - GitHub Actions context object + * @param {any} [github] - Authenticated GitHub client * @returns {Promise} */ -async function main(core, ctx) { +async function main(core, ctx, github) { // Validate numeric context variables before processing run info. // This prevents malicious payloads from hiding special text or code in numeric fields. await validateContextVariables(core, ctx); @@ -97,6 +98,21 @@ async function main(core, ctx) { created_at: new Date().toISOString(), }; + if (process.env.GH_AW_INFO_FETCH_RUN_CREATED_AT === "true") { + try { + const response = await github.rest.actions.getWorkflowRun({ + owner: ctx.repo.owner, + repo: ctx.repo.repo, + run_id: ctx.runId, + }); + const runCreatedAt = response.data.created_at || ""; + core.setOutput("run_created_at", runCreatedAt); + } catch (err) { + core.warning(`Unable to load workflow-run creation time: ${getErrorMessage(err)}`); + core.setOutput("run_created_at", ""); + } + } + const frontmatterSource = process.env.GH_AW_INFO_FRONTMATTER_SOURCE || ""; if (frontmatterSource) { awInfo.frontmatter_source = frontmatterSource; diff --git a/actions/setup/js/generate_aw_info.test.cjs b/actions/setup/js/generate_aw_info.test.cjs index 942b0c347e3..96d91088be5 100644 --- a/actions/setup/js/generate_aw_info.test.cjs +++ b/actions/setup/js/generate_aw_info.test.cjs @@ -28,6 +28,14 @@ const mockContext = { repo: { owner: "github", repo: "my-repo" }, }; +const mockGithub = { + rest: { + actions: { + getWorkflowRun: vi.fn(), + }, + }, +}; + describe("generate_aw_info.cjs", () => { let main; let awInfoPath; @@ -64,6 +72,7 @@ describe("generate_aw_info.cjs", () => { process.env.GH_AW_INFO_BODY_MODIFIED = ""; process.env.GH_AW_INFO_FEATURES = ""; process.env.GH_AW_INFO_SKILLS = ""; + delete process.env.GH_AW_INFO_FETCH_RUN_CREATED_AT; // Dynamic import to get fresh module state const module = await import("./generate_aw_info.cjs"); @@ -106,6 +115,20 @@ describe("generate_aw_info.cjs", () => { expect(awInfo.created_at).toBeTruthy(); }); + it("should expose the authoritative run creation time when requested", async () => { + process.env.GH_AW_INFO_FETCH_RUN_CREATED_AT = "true"; + mockGithub.rest.actions.getWorkflowRun.mockResolvedValue({ data: { created_at: "2026-08-24T12:00:00Z" } }); + + await main(mockCore, mockContext, mockGithub); + + expect(mockGithub.rest.actions.getWorkflowRun).toHaveBeenCalledWith({ + owner: "github", + repo: "my-repo", + run_id: 12345, + }); + expect(mockCore.setOutput).toHaveBeenCalledWith("run_created_at", "2026-08-24T12:00:00Z"); + }); + it("should include features from GH_AW_INFO_FEATURES and preserve value types", async () => { process.env.GH_AW_INFO_FEATURES = JSON.stringify({ "gh-aw-detection": true, diff --git a/actions/setup/js/trace_graders.cjs b/actions/setup/js/trace_graders.cjs index 3a6bffc3e34..4e9c0462249 100644 --- a/actions/setup/js/trace_graders.cjs +++ b/actions/setup/js/trace_graders.cjs @@ -735,19 +735,8 @@ async function main(manifestB64, execSpecB64) { // Single preprocessing pass core.info(`Graders: preprocessing trace files for ${enabledGraders.length} grader(s)...`); const trace = preprocessTrace(); - let operationalValueRunMetadata; - if (enabledGraders.some(grader => grader.source === "operational-value")) { - try { - const response = await github.rest.actions.getWorkflowRun({ - owner: context.repo.owner, - repo: context.repo.repo, - run_id: Number(process.env.GITHUB_RUN_ID), - }); - operationalValueRunMetadata = { createdAt: response.data.created_at }; - } catch (err) { - core.warning(`Graders: unable to load workflow-run creation time: ${getErrorMessage(err)}`); - } - } + const runCreatedAt = process.env.GH_AW_RUN_CREATED_AT; + const operationalValueRunMetadata = runCreatedAt ? { createdAt: runCreatedAt } : undefined; // Run all graders /** @type {GraderResult[]} */ diff --git a/docs/adr/55155-operational-value-grader.md b/docs/adr/55155-operational-value-grader.md index 00e2d413003..61a2618efc9 100644 --- a/docs/adr/55155-operational-value-grader.md +++ b/docs/adr/55155-operational-value-grader.md @@ -8,11 +8,11 @@ ### Context -The existing built-in and inline graders measure execution quality from a run's trace, but operational value depends on repository evidence, maturation windows, and a stable baseline contract. That evidence must remain attributable to the workflow run and evaluator version while supporting deterministic replay after the original run artifact is sealed. Allowing arbitrary evaluator locations or mutable evaluator code would weaken provenance and make historical results difficult to reproduce. The agent job also needs workflow-run metadata from GitHub Actions, so the permission requirement must be visible rather than silently overriding an explicit zero-permission policy. +The existing built-in and inline graders measure execution quality from a run's trace, but operational value depends on repository evidence, maturation windows, and a stable baseline contract. That evidence must remain attributable to the workflow run and evaluator version while supporting deterministic replay after the original run artifact is sealed. Allowing arbitrary evaluator locations or mutable evaluator code would weaken provenance and make historical results difficult to reproduce. Authoritative workflow-run creation time is useful for assigning time-based opportunities, but fetching it must not broaden the token available to the agent. ### Decision -We will reserve the `operational-value` grader ID for a repository-relative Bash evaluator under `.github/graders/*.sh`. At compile time, gh-aw will reject traversal, symlinks, and non-regular files, validate Bash syntax, and freeze the evaluator bytes and SHA-256 digest into the compiled workflow. At runtime, gh-aw will execute deterministic `--definition` and `--grade-run` modes in the gh-aw temporary area with a curated environment, producing absolute attainment in `[0,1]` or `null` plus evidence provenance, maturity, a frozen baseline, and an optional derived delta. The grader will require `actions: read`; an explicit `permissions: {}` will fail compilation instead of being silently broadened. +We will reserve the `operational-value` grader ID for a repository-relative Bash evaluator under `.github/graders/*.sh`. At compile time, gh-aw will reject traversal, symlinks, and non-regular files, validate Bash syntax, and freeze the evaluator bytes and SHA-256 digest into the compiled workflow. At runtime, gh-aw will execute deterministic `--definition` and `--grade-run` modes in the gh-aw temporary area with a curated environment, producing absolute attainment in `[0,1]` or `null` plus evidence provenance, maturity, a frozen baseline, and an optional derived delta. The activation job will fetch authoritative workflow-run creation time with its compiler-owned `actions: read` permission and pass it to the agent job as non-secret metadata. Enabling the grader will not modify the agent job's permissions; evaluator evidence access must be declared explicitly by the workflow. The unified agent artifact will contain `grader_manifest.json`, `grader_results.json`, and the frozen evaluator for replay. Historical regrading will execute only after verifying the archived bytes against the manifest/result digests and the evaluator at the recorded commit in a trusted checkout, while preserving the original run identity, attempt, subject, and operational case. @@ -38,7 +38,7 @@ Run value evaluation later in an external service or periodic process, outside t - Baseline-comparable and attainment-only definitions share one normalized result contract while preserving `null` for unavailable or immature evidence. #### Negative -- Workflows using the grader require `actions: read`, and configurations that deliberately use `permissions: {}` must be changed explicitly before compilation succeeds. +- The activation job requires `actions: read` to obtain authoritative run creation time; a failed lookup leaves that optional subject field empty. - The feature adds Bash availability, syntax validation, process timeout, output validation, curated-environment, and temporary-file complexity to compiler and runtime maintenance. - Run artifacts contain trusted executable bytes; consumers must continue verifying digests and checkout provenance before executing them. diff --git a/docs/src/content/docs/reference/trace-graders.md b/docs/src/content/docs/reference/trace-graders.md index 8cbefa187a2..bd52770cf07 100644 --- a/docs/src/content/docs/reference/trace-graders.md +++ b/docs/src/content/docs/reference/trace-graders.md @@ -68,7 +68,7 @@ graders: The compiler freezes the evaluator bytes and records their SHA-256 digest. The evaluator returns absolute operational attainment in `[0,1]` for the run's assigned case. A frozen baseline is optional metadata; when present, gh-aw derives `deltaFromBaseline` without changing the primary value. -Each result records the complete run subject, operational case, evidence time, maturity, and provenance. Operational-value evaluators may query the repositories declared by their frozen evidence contract. They receive the workflow token through `GH_TOKEN` but do not receive workflow secrets. +Each result records the complete run subject, operational case, evidence time, maturity, and provenance. Operational-value evaluators may query the repositories declared by their frozen evidence contract. They receive the workflow token through `GH_TOKEN` with the agent job's explicitly declared permissions, but do not receive workflow secrets. Enabling the grader does not add evidence permissions to the agent job. Use the `aw-value` skill to design and verify an operational-value evaluator. diff --git a/docs/src/content/docs/specs/graders-specification.md b/docs/src/content/docs/specs/graders-specification.md index 9471a4e596b..a7821b7c56c 100644 --- a/docs/src/content/docs/specs/graders-specification.md +++ b/docs/src/content/docs/specs/graders-specification.md @@ -270,7 +270,7 @@ semantic task correctness. The normative readiness, decision, and JSON contracts - Grading MUST operate on local run artifacts and MUST NOT require outbound network access for built-ins. - Custom inline graders MUST execute in a restricted context with blocked dangerous primitives. -- Operational-value graders MAY access declared repository evidence using `GH_TOKEN`; they MUST NOT receive workflow secrets. +- Operational-value graders MAY access declared repository evidence using `GH_TOKEN`; implementations MUST NOT add agent-job permission scopes on behalf of the evaluator, and evaluators MUST NOT receive workflow secrets. - Historical regrading MUST verify archived evaluator bytes against both digest records and a trusted local checkout at the recorded commit before execution. - Implementations SHOULD enforce bounded execution time for inline scripts. - Implementations SHOULD redact grader outputs when custom scripts are enabled to reduce secret leakage risk. diff --git a/pkg/workflow/aw_info_tmp_test.go b/pkg/workflow/aw_info_tmp_test.go index 64ce9ff53f4..416e412ba35 100644 --- a/pkg/workflow/aw_info_tmp_test.go +++ b/pkg/workflow/aw_info_tmp_test.go @@ -62,8 +62,8 @@ This workflow tests that aw_info.json is generated in /tmp directory. t.Error("Expected step to require generate_aw_info.cjs module") } - if !strings.Contains(lockStr, "await main(core, context)") { - t.Error("Expected step to call main(core, context) from generate_aw_info.cjs") + if !strings.Contains(lockStr, "await main(core, context, github)") { + t.Error("Expected step to call main(core, context, github) from generate_aw_info.cjs") } // Verify setupGlobals is called before main so that global.core is available diff --git a/pkg/workflow/compiler_activation_context.go b/pkg/workflow/compiler_activation_context.go index 813726cbf36..c966692e52d 100644 --- a/pkg/workflow/compiler_activation_context.go +++ b/pkg/workflow/compiler_activation_context.go @@ -186,6 +186,9 @@ func (c *Compiler) addActivationEngineOutputs(ctx *activationJobBuildContext, en ctx.steps = append(ctx.steps, awInfoYAML.String()) ctx.outputs["engine_id"] = "${{ steps.generate_aw_info.outputs.engine_id }}" ctx.outputs["model"] = "${{ steps.generate_aw_info.outputs.model }}" + if operationalValueGraderEnabled(ctx.data) { + ctx.outputs["run_created_at"] = "${{ steps.generate_aw_info.outputs.run_created_at }}" + } ctx.outputs["lockdown_check_failed"] = "${{ steps.generate_aw_info.outputs.lockdown_check_failed == 'true' }}" ctx.outputs["oauth_token_check_failed"] = "${{ steps.check-oauth-tokens.outputs.oauth_token_check_failed == 'true' }}" if !ctx.data.StaleCheckDisabled { diff --git a/pkg/workflow/compiler_activation_job_test.go b/pkg/workflow/compiler_activation_job_test.go index 47bcd10092f..74dc163ff51 100644 --- a/pkg/workflow/compiler_activation_job_test.go +++ b/pkg/workflow/compiler_activation_job_test.go @@ -42,6 +42,28 @@ func TestActivationArtifactUploadRunsAfterSuccessOrFailure(t *testing.T) { assert.NotContains(t, uploadStep, "if: always()") } +func TestOperationalValueGraderScopesActionsReadToActivation(t *testing.T) { + compiler := NewCompiler() + data := operationalValueGraderWorkflowData(".github/graders/example-operational-value.sh") + data.Name = "Operational Value" + data.StaleCheckDisabled = true + data.Permissions = "permissions:\n contents: read" + + job, err := compiler.buildActivationJob(data, false, "", "operational-value.lock.yml") + require.NoError(t, err) + require.NotNil(t, job) + assert.Contains(t, job.Permissions, "actions: read") + assert.Equal(t, "${{ steps.generate_aw_info.outputs.run_created_at }}", job.Outputs["run_created_at"]) + + steps := strings.Join(job.Steps, "") + assert.Contains(t, steps, "GH_AW_INFO_FETCH_RUN_CREATED_AT: \"true\"") + assert.Contains(t, steps, "await main(core, context, github)") + + mainPermissions, err := compiler.buildMainJobPermissions(data) + require.NoError(t, err) + assert.NotContains(t, mainPermissions, "actions: read") +} + func TestGenerateCheckoutGitHubFolderForActivation_WorkflowCall(t *testing.T) { tests := []struct { name string diff --git a/pkg/workflow/compiler_activation_permissions.go b/pkg/workflow/compiler_activation_permissions.go index 11800fc3c14..f903aa8abe3 100644 --- a/pkg/workflow/compiler_activation_permissions.go +++ b/pkg/workflow/compiler_activation_permissions.go @@ -136,7 +136,7 @@ func (c *Compiler) buildActivationBasePermissions(ctx *activationJobBuildContext permsMap := map[PermissionScope]PermissionLevel{ PermissionContents: PermissionRead, } - if !ctx.data.StaleCheckDisabled || hasMaxDailyAICGuardrail(ctx.data) { + if !ctx.data.StaleCheckDisabled || hasMaxDailyAICGuardrail(ctx.data) || operationalValueGraderEnabled(ctx.data) { permsMap[PermissionActions] = PermissionRead } if isPreCreatePullRequestEnabled(ctx.data) { diff --git a/pkg/workflow/compiler_main_job_helpers.go b/pkg/workflow/compiler_main_job_helpers.go index 69c1319e2a2..b90a1261f93 100644 --- a/pkg/workflow/compiler_main_job_helpers.go +++ b/pkg/workflow/compiler_main_job_helpers.go @@ -1,7 +1,6 @@ package workflow import ( - "errors" "fmt" "os" "slices" @@ -343,20 +342,6 @@ func (c *Compiler) buildMainJobEnv(data *WorkflowData) map[string]string { // permissions from gh CLI commands found in all agent job step sections. func (c *Compiler) buildMainJobPermissions(data *WorkflowData) (string, error) { permissions := augmentPermissionsForDevMode(c, data, filterJobLevelPermissions(data.Permissions, data.CachedPermissions)) - if operationalValueGraderEnabled(data) { - if data.Permissions == "permissions: {}" { - return "", errors.New("graders.operational-value requires actions: read; remove permissions: {} or grant actions: read explicitly") - } - if permissions == "" { - permissions = NewPermissionsFromMap(map[PermissionScope]PermissionLevel{ - PermissionActions: PermissionRead, - }).RenderToYAML() - } else { - permissions = mergeInferredIntoPermissionsYAML(permissions, map[PermissionScope]PermissionLevel{ - PermissionActions: PermissionRead, - }) - } - } agentAllScripts := collectAgentJobScripts(data) if len(agentAllScripts) == 0 { diff --git a/pkg/workflow/compiler_main_job_helpers_test.go b/pkg/workflow/compiler_main_job_helpers_test.go index 966ac2bc8d5..aff52cbb2ec 100644 --- a/pkg/workflow/compiler_main_job_helpers_test.go +++ b/pkg/workflow/compiler_main_job_helpers_test.go @@ -342,21 +342,22 @@ func TestBuildMainJobPermissions(t *testing.T) { require.NoError(t, err) }) - t.Run("operational value adds actions read", func(t *testing.T) { + t.Run("operational value preserves declared permissions", func(t *testing.T) { c := NewCompiler() data := operationalValueGraderWorkflowData(".github/graders/example-operational-value.sh") data.Permissions = "permissions:\n contents: read" perms, err := c.buildMainJobPermissions(data) require.NoError(t, err) - assert.Contains(t, perms, "actions: read") + assert.NotContains(t, perms, "actions: read") + assert.Contains(t, perms, "contents: read") }) - t.Run("operational value rejects explicit empty permissions", func(t *testing.T) { + t.Run("operational value allows explicit empty permissions", func(t *testing.T) { c := NewCompiler() data := operationalValueGraderWorkflowData(".github/graders/example-operational-value.sh") data.Permissions = "permissions: {}" _, err := c.buildMainJobPermissions(data) - require.EqualError(t, err, "graders.operational-value requires actions: read; remove permissions: {} or grant actions: read explicitly") + require.NoError(t, err) }) t.Run("disabled operational value does not add actions read", func(t *testing.T) { diff --git a/pkg/workflow/compiler_yaml_graders.go b/pkg/workflow/compiler_yaml_graders.go index 8dd97afc54b..577cb88dec3 100644 --- a/pkg/workflow/compiler_yaml_graders.go +++ b/pkg/workflow/compiler_yaml_graders.go @@ -56,6 +56,7 @@ func (c *Compiler) generateGradersStep(yaml *strings.Builder, data *WorkflowData if operationalValueGrader, ok := data.Graders.Graders["operational-value"]; ok && (operationalValueGrader.Enabled == nil || *operationalValueGrader.Enabled) { yaml.WriteString(" env:\n") yaml.WriteString(" GH_TOKEN: ${{ github.token }}\n") + yaml.WriteString(" GH_AW_RUN_CREATED_AT: ${{ needs.activation.outputs.run_created_at }}\n") } compilerYamlGradersLog.Print("Generated graders step") diff --git a/pkg/workflow/compiler_yaml_step_lifecycle.go b/pkg/workflow/compiler_yaml_step_lifecycle.go index 723cb771c7d..14b97efb2e1 100644 --- a/pkg/workflow/compiler_yaml_step_lifecycle.go +++ b/pkg/workflow/compiler_yaml_step_lifecycle.go @@ -183,6 +183,9 @@ func (c *Compiler) generateCreateAwInfo(yaml *strings.Builder, data *WorkflowDat fmt.Fprintf(yaml, " GH_AW_INFO_AWMG_VERSION: \"%s\"\n", mcpGatewayVersion) fmt.Fprintf(yaml, " GH_AW_INFO_FIREWALL_TYPE: \"%s\"\n", firewallType) fmt.Fprintf(yaml, " GH_AW_INFO_AGENT_RUNTIME: \"%s\"\n", agentRuntime) + if operationalValueGraderEnabled(data) { + yaml.WriteString(" GH_AW_INFO_FETCH_RUN_CREATED_AT: \"true\"\n") + } // Only emit the cache-memory flag when at least one cache is configured. if data.CacheMemoryConfig != nil && len(data.CacheMemoryConfig.Caches) > 0 { yaml.WriteString(" GH_AW_INFO_CACHE_MEMORY: \"true\"\n") @@ -249,7 +252,7 @@ func (c *Compiler) generateCreateAwInfo(yaml *strings.Builder, data *WorkflowDat yaml.WriteString(" const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');\n") yaml.WriteString(" setupGlobals(core, github, context, exec, io, getOctokit);\n") yaml.WriteString(" const { main } = require('${{ runner.temp }}/gh-aw/actions/generate_aw_info.cjs');\n") - yaml.WriteString(" await main(core, context);\n") + yaml.WriteString(" await main(core, context, github);\n") } func (c *Compiler) generateOutputCollectionStep(yaml *strings.Builder, data *WorkflowData) error { diff --git a/pkg/workflow/graders_config_test.go b/pkg/workflow/graders_config_test.go index 3d01bd93e61..2f5079b44c0 100644 --- a/pkg/workflow/graders_config_test.go +++ b/pkg/workflow/graders_config_test.go @@ -10,6 +10,7 @@ import ( "testing" "github.com/github/gh-aw/pkg/stringutil" + "github.com/stretchr/testify/assert" ) // TestParseGradersFromFrontmatter_Absent verifies nil return when graders absent. @@ -599,6 +600,20 @@ func TestGenerateGradersStep_Present(t *testing.T) { } } +func TestGenerateGradersStep_OperationalValueUsesActivationRunMetadata(t *testing.T) { + c := &Compiler{} + initActionPinCacheForTest(c) + var yaml strings.Builder + data := operationalValueGraderWorkflowData(".github/graders/example-operational-value.sh") + + c.generateGradersStep(&yaml, data) + + output := yaml.String() + assert.Contains(t, output, "GH_AW_RUN_CREATED_AT: ${{ needs.activation.outputs.run_created_at }}") + assert.Contains(t, output, "GH_TOKEN: ${{ github.token }}") + assert.NotContains(t, output, "getWorkflowRun") +} + // TestGenerateGradersStep_BeforeArtifactUpload verifies ordering. func TestGenerateGradersStep_BeforeArtifactUpload(t *testing.T) { c := &Compiler{} From 1ad89b4344014b4b525fe897337e42cfefbbe24d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 24 Aug 2026 12:51:21 +0000 Subject: [PATCH 08/11] chore: recompile workflows after generate_aw_info signature change Co-authored-by: gh-aw-bot <259018956+gh-aw-bot@users.noreply.github.com> --- .github/workflows/ab-testing-advisor.lock.yml | 2 +- .github/workflows/ace-editor.lock.yml | 2 +- .github/workflows/agent-job-health.lock.yml | 2 +- .github/workflows/agent-performance-analyzer.lock.yml | 2 +- .github/workflows/agent-persona-explorer.lock.yml | 2 +- .github/workflows/agentic-token-audit.lock.yml | 2 +- .github/workflows/agentic-token-optimizer.lock.yml | 2 +- .github/workflows/agentic-token-trend-audit.lock.yml | 2 +- .github/workflows/ai-moderator.lock.yml | 2 +- .github/workflows/api-consumption-report.lock.yml | 2 +- .github/workflows/approach-validator.lock.yml | 2 +- .github/workflows/archie.lock.yml | 2 +- .github/workflows/architecture-guardian.lock.yml | 2 +- .github/workflows/archivx-agentic-workflows-analyzer.lock.yml | 2 +- .github/workflows/artifacts-summary.lock.yml | 2 +- .github/workflows/audit-workflows.lock.yml | 2 +- .github/workflows/auto-triage-issues.lock.yml | 2 +- .github/workflows/avenger.lock.yml | 2 +- .github/workflows/aw-failure-investigator.lock.yml | 2 +- .github/workflows/blog-auditor.lock.yml | 2 +- .github/workflows/bot-detection.lock.yml | 2 +- .github/workflows/breaking-change-checker.lock.yml | 2 +- .github/workflows/changeset.lock.yml | 2 +- .github/workflows/chaos-pr-bundle-fuzzer.lock.yml | 2 +- .github/workflows/ci-coach.lock.yml | 2 +- .github/workflows/ci-doctor.lock.yml | 2 +- .github/workflows/claude-code-user-docs-review.lock.yml | 2 +- .github/workflows/cli-consistency-checker.lock.yml | 2 +- .github/workflows/cli-version-checker.lock.yml | 2 +- .github/workflows/cloclo.lock.yml | 2 +- .github/workflows/code-scanning-fixer.lock.yml | 2 +- .github/workflows/code-simplifier.lock.yml | 2 +- .github/workflows/codex-github-remote-mcp-test.lock.yml | 2 +- .github/workflows/commit-changes-analyzer.lock.yml | 2 +- .github/workflows/constraint-solving-potd.lock.yml | 2 +- .github/workflows/contribution-check.lock.yml | 2 +- .github/workflows/copilot-agent-analysis.lock.yml | 2 +- .github/workflows/copilot-centralization-drilldown.lock.yml | 2 +- .github/workflows/copilot-centralization-optimizer.lock.yml | 2 +- .github/workflows/copilot-cli-deep-research.lock.yml | 2 +- .github/workflows/copilot-opt.lock.yml | 2 +- .github/workflows/copilot-pr-merged-report.lock.yml | 2 +- .github/workflows/copilot-pr-nlp-analysis.lock.yml | 2 +- .github/workflows/copilot-pr-prompt-analysis.lock.yml | 2 +- .github/workflows/copilot-session-insights.lock.yml | 2 +- .github/workflows/craft.lock.yml | 2 +- .github/workflows/daily-action-setup-security-audit.lock.yml | 2 +- .github/workflows/daily-agent-of-the-day-blog-writer.lock.yml | 2 +- .github/workflows/daily-agentrx-trace-optimizer.lock.yml | 2 +- .github/workflows/daily-ambient-context-optimizer.lock.yml | 2 +- .github/workflows/daily-architecture-diagram.lock.yml | 2 +- .github/workflows/daily-arxiv-researcher.lock.yml | 2 +- .github/workflows/daily-assign-issue-to-user.lock.yml | 2 +- .../workflows/daily-astrostylelite-markdown-spellcheck.lock.yml | 2 +- .github/workflows/daily-aw-cross-repo-compile-check.lock.yml | 2 +- .github/workflows/daily-awf-spec-compiler-surfacing.lock.yml | 2 +- .github/workflows/daily-byok-ollama-test.lock.yml | 2 +- .github/workflows/daily-cache-strategy-analyzer.lock.yml | 2 +- .github/workflows/daily-caveman-optimizer.lock.yml | 2 +- .github/workflows/daily-choice-test.lock.yml | 2 +- .github/workflows/daily-cli-performance.lock.yml | 2 +- .github/workflows/daily-cli-tools-tester.lock.yml | 2 +- .github/workflows/daily-code-debt-aider.lock.yml | 2 +- .github/workflows/daily-code-metrics.lock.yml | 2 +- .github/workflows/daily-community-attribution.lock.yml | 2 +- .github/workflows/daily-compiler-quality.lock.yml | 2 +- .github/workflows/daily-compiler-threat-spec-optimizer.lock.yml | 2 +- .github/workflows/daily-credit-limit-test.lock.yml | 2 +- .github/workflows/daily-doc-healer.lock.yml | 2 +- .github/workflows/daily-doc-updater.lock.yml | 2 +- .github/workflows/daily-documentation-diagram.lock.yml | 2 +- .github/workflows/daily-elixir-credo-snippet-audit.lock.yml | 2 +- .github/workflows/daily-evals-report.lock.yml | 2 +- .github/workflows/daily-experiment-report.lock.yml | 2 +- .github/workflows/daily-fact.lock.yml | 2 +- .github/workflows/daily-file-diet.lock.yml | 2 +- .github/workflows/daily-firewall-report.lock.yml | 2 +- .github/workflows/daily-formal-spec-verifier.lock.yml | 2 +- .github/workflows/daily-function-namer.lock.yml | 2 +- .github/workflows/daily-geo-optimizer.lock.yml | 2 +- .github/workflows/daily-github-docs-seo-optimizer.lock.yml | 2 +- .github/workflows/daily-go-test-parallelizer.lock.yml | 2 +- .github/workflows/daily-go-test-stubs-aider.lock.yml | 2 +- .github/workflows/daily-graft-intelligence.lock.yml | 2 +- .github/workflows/daily-harness-experiment-proposer.lock.yml | 2 +- .github/workflows/daily-hippo-learn.lock.yml | 2 +- .github/workflows/daily-issues-report.lock.yml | 2 +- .github/workflows/daily-malicious-code-scan.lock.yml | 2 +- .github/workflows/daily-max-ai-credits-test.lock.yml | 2 +- .github/workflows/daily-mcp-concurrency-analysis.lock.yml | 2 +- .github/workflows/daily-model-inventory.lock.yml | 2 +- .github/workflows/daily-model-resolution.lock.yml | 2 +- .github/workflows/daily-multi-device-docs-tester.lock.yml | 2 +- .github/workflows/daily-news.lock.yml | 2 +- .github/workflows/daily-observability-report.lock.yml | 2 +- .github/workflows/daily-performance-summary.lock.yml | 2 +- .github/workflows/daily-pr-review-cursor.lock.yml | 2 +- .github/workflows/daily-regression-audit-kiro.lock.yml | 2 +- .github/workflows/daily-regulatory.lock.yml | 2 +- .github/workflows/daily-reliability-review.lock.yml | 2 +- .github/workflows/daily-rendering-scripts-verifier.lock.yml | 2 +- .github/workflows/daily-repo-chronicle.lock.yml | 2 +- .github/workflows/daily-safe-output-integrator.lock.yml | 2 +- .github/workflows/daily-safe-output-optimizer.lock.yml | 2 +- .github/workflows/daily-safe-outputs-conformance.lock.yml | 2 +- .github/workflows/daily-safeoutputs-git-simulator.lock.yml | 2 +- .github/workflows/daily-schema-audit-cursor.lock.yml | 2 +- .github/workflows/daily-secrets-analysis.lock.yml | 2 +- .github/workflows/daily-security-observability.lock.yml | 2 +- .github/workflows/daily-security-red-team.lock.yml | 2 +- .github/workflows/daily-semgrep-scan.lock.yml | 2 +- .github/workflows/daily-spdd-spec-planner.lock.yml | 2 +- .github/workflows/daily-spec-coverage-kiro.lock.yml | 2 +- .github/workflows/daily-spending-forecast.lock.yml | 2 +- .github/workflows/daily-squid-image-scan.lock.yml | 2 +- .github/workflows/daily-storify.lock.yml | 2 +- .github/workflows/daily-syntax-error-quality.lock.yml | 2 +- .github/workflows/daily-team-evolution-insights.lock.yml | 2 +- .github/workflows/daily-team-status.lock.yml | 2 +- .github/workflows/daily-testify-uber-super-expert.lock.yml | 2 +- .github/workflows/daily-token-consumption-report.lock.yml | 2 +- .github/workflows/daily-trajectory-grader-implementer.lock.yml | 2 +- .github/workflows/daily-vulnhunter-scan.lock.yml | 2 +- .../daily-windows-terminal-integration-builder.lock.yml | 2 +- .github/workflows/daily-workflow-updater.lock.yml | 2 +- .github/workflows/daily-yamllint-fixer.lock.yml | 2 +- .github/workflows/dataflow-pr-discussion-dataset.lock.yml | 2 +- .github/workflows/dead-code-remover.lock.yml | 2 +- .github/workflows/deep-report.lock.yml | 2 +- .github/workflows/deepsec-security-scan.lock.yml | 2 +- .github/workflows/delight.lock.yml | 2 +- .github/workflows/dependabot-burner.lock.yml | 2 +- .github/workflows/dependabot-go-checker.lock.yml | 2 +- .github/workflows/deployment-incident-monitor.lock.yml | 2 +- .github/workflows/design-decision-gate.lock.yml | 2 +- .github/workflows/designer-drift-audit.lock.yml | 2 +- .github/workflows/detection-analysis-report.lock.yml | 2 +- .github/workflows/dev-hawk.lock.yml | 2 +- .github/workflows/dev.lock.yml | 2 +- .github/workflows/developer-docs-consolidator.lock.yml | 2 +- .github/workflows/dictation-prompt.lock.yml | 2 +- .github/workflows/docs-noob-tester.lock.yml | 2 +- .github/workflows/draft-pr-cleanup.lock.yml | 2 +- .github/workflows/duplicate-code-detector.lock.yml | 2 +- .github/workflows/eslint-miner.lock.yml | 2 +- .github/workflows/eslint-monster.lock.yml | 2 +- .github/workflows/eslint-refiner.lock.yml | 2 +- .github/workflows/evoskill-evolver.lock.yml | 2 +- .github/workflows/example-failure-category-filter.lock.yml | 2 +- .github/workflows/example-permissions-warning.lock.yml | 2 +- .github/workflows/example-workflow-analyzer.lock.yml | 2 +- .github/workflows/firewall-escape.lock.yml | 2 +- .github/workflows/firewall.lock.yml | 2 +- .github/workflows/functional-pragmatist.lock.yml | 2 +- .github/workflows/github-mcp-structural-analysis.lock.yml | 2 +- .github/workflows/github-mcp-tools-report.lock.yml | 2 +- .github/workflows/github-remote-mcp-auth-test.lock.yml | 2 +- .github/workflows/glossary-maintainer.lock.yml | 2 +- .github/workflows/go-fan.lock.yml | 2 +- .github/workflows/go-logger.lock.yml | 2 +- .github/workflows/go-pattern-detector.lock.yml | 2 +- .github/workflows/gpclean.lock.yml | 2 +- .github/workflows/grumpy-reviewer.lock.yml | 2 +- .github/workflows/hippo-embed.lock.yml | 2 +- .github/workflows/hourly-ci-cleaner.lock.yml | 2 +- .github/workflows/impeccable-skills-reviewer.lock.yml | 2 +- .github/workflows/instructions-janitor.lock.yml | 2 +- .github/workflows/issue-arborist.lock.yml | 2 +- .github/workflows/issue-monster.lock.yml | 2 +- .github/workflows/issue-triage-agent.lock.yml | 2 +- .github/workflows/jsweep.lock.yml | 2 +- .github/workflows/layout-spec-maintainer.lock.yml | 2 +- .github/workflows/lint-monster.lock.yml | 2 +- .github/workflows/linter-miner.lock.yml | 2 +- .github/workflows/lockfile-stats.lock.yml | 2 +- .github/workflows/mattpocock-skills-reviewer.lock.yml | 2 +- .github/workflows/mcp-inspector.lock.yml | 2 +- .github/workflows/mergefest.lock.yml | 2 +- .github/workflows/metrics-collector.lock.yml | 2 +- .github/workflows/necromancer.lock.yml | 2 +- .github/workflows/notion-issue-summary.lock.yml | 2 +- .github/workflows/objective-impact-report.lock.yml | 2 +- .github/workflows/org-health-report.lock.yml | 2 +- .github/workflows/outcome-collector.lock.yml | 2 +- .github/workflows/pdf-summary.lock.yml | 2 +- .github/workflows/plan.lock.yml | 2 +- .github/workflows/poem-bot.lock.yml | 2 +- .github/workflows/ponytail-reviewer.lock.yml | 2 +- .github/workflows/portfolio-analyst.lock.yml | 2 +- .github/workflows/pr-code-quality-reviewer.lock.yml | 2 +- .github/workflows/pr-description-caveman.lock.yml | 2 +- .github/workflows/pr-nitpick-reviewer.lock.yml | 2 +- .github/workflows/pr-sous-chef.lock.yml | 2 +- .github/workflows/pr-triage-agent.lock.yml | 2 +- .github/workflows/prompt-clustering-analysis.lock.yml | 2 +- .github/workflows/purelock.lock.yml | 2 +- .github/workflows/python-data-charts.lock.yml | 2 +- .github/workflows/q.lock.yml | 2 +- .github/workflows/refactoring-cadence.lock.yml | 2 +- .github/workflows/refiner.lock.yml | 2 +- .github/workflows/release.lock.yml | 2 +- .github/workflows/repo-audit-analyzer.lock.yml | 2 +- .github/workflows/repo-tree-map.lock.yml | 2 +- .github/workflows/repository-quality-improver.lock.yml | 2 +- .github/workflows/research.lock.yml | 2 +- .github/workflows/ruflo-backed-task.lock.yml | 2 +- .github/workflows/safe-output-health.lock.yml | 2 +- .github/workflows/schema-consistency-checker.lock.yml | 2 +- .github/workflows/schema-feature-coverage.lock.yml | 2 +- .github/workflows/scout.lock.yml | 2 +- .github/workflows/security-compliance.lock.yml | 2 +- .github/workflows/security-review.lock.yml | 2 +- .github/workflows/semantic-function-refactor.lock.yml | 2 +- .github/workflows/sergo.lock.yml | 2 +- .github/workflows/sighthound-security-scan.lock.yml | 2 +- .github/workflows/skillet.lock.yml | 2 +- .github/workflows/slide-deck-maintainer.lock.yml | 2 +- .github/workflows/smoke-agent-all-merged.lock.yml | 2 +- .github/workflows/smoke-agent-all-none.lock.yml | 2 +- .github/workflows/smoke-agent-public-approved.lock.yml | 2 +- .github/workflows/smoke-agent-public-none.lock.yml | 2 +- .github/workflows/smoke-agent-scoped-approved.lock.yml | 2 +- .github/workflows/smoke-aider.lock.yml | 2 +- .github/workflows/smoke-call-workflow.lock.yml | 2 +- .github/workflows/smoke-checkout-pr-dispatch.lock.yml | 2 +- .github/workflows/smoke-ci.lock.yml | 2 +- .github/workflows/smoke-claude-on-copilot.lock.yml | 2 +- .github/workflows/smoke-claude.lock.yml | 2 +- .github/workflows/smoke-codex.lock.yml | 2 +- .github/workflows/smoke-copilot-aoai-apikey.lock.yml | 2 +- .github/workflows/smoke-copilot-aoai-entra.lock.yml | 2 +- .github/workflows/smoke-copilot-arm.lock.yml | 2 +- .github/workflows/smoke-copilot-auto.lock.yml | 2 +- .github/workflows/smoke-copilot-mai.lock.yml | 2 +- .github/workflows/smoke-copilot-sdk.lock.yml | 2 +- .github/workflows/smoke-copilot-small.lock.yml | 2 +- .github/workflows/smoke-copilot-sub-agents.lock.yml | 2 +- .github/workflows/smoke-copilot.lock.yml | 2 +- .github/workflows/smoke-create-cross-repo-pr.lock.yml | 2 +- .github/workflows/smoke-crush.lock.yml | 2 +- .github/workflows/smoke-cursor.lock.yml | 2 +- .github/workflows/smoke-deepseek-harness.lock.yml | 2 +- .github/workflows/smoke-drive.lock.yml | 2 +- .github/workflows/smoke-gemini.lock.yml | 2 +- .github/workflows/smoke-github-claude.lock.yml | 2 +- .github/workflows/smoke-goose.lock.yml | 2 +- .github/workflows/smoke-kiro.lock.yml | 2 +- .github/workflows/smoke-multi-pr.lock.yml | 2 +- .github/workflows/smoke-opencode.lock.yml | 2 +- .github/workflows/smoke-otel-backends.lock.yml | 2 +- .github/workflows/smoke-pi.lock.yml | 2 +- .github/workflows/smoke-project.lock.yml | 2 +- .github/workflows/smoke-pydantic.lock.yml | 2 +- .github/workflows/smoke-service-ports.lock.yml | 2 +- .github/workflows/smoke-temporary-id.lock.yml | 2 +- .github/workflows/smoke-test-tools.lock.yml | 2 +- .github/workflows/smoke-update-cross-repo-pr.lock.yml | 2 +- .github/workflows/smoke-workflow-call-with-inputs.lock.yml | 2 +- .github/workflows/smoke-workflow-call.lock.yml | 2 +- .github/workflows/spec-enforcer.lock.yml | 2 +- .github/workflows/spec-extractor.lock.yml | 2 +- .github/workflows/spec-librarian.lock.yml | 2 +- .github/workflows/squad-game-planner.lock.yml | 2 +- .github/workflows/squad-implement-worker.lock.yml | 2 +- .github/workflows/squad-plan.lock.yml | 2 +- .github/workflows/squad.lock.yml | 2 +- .github/workflows/stale-pr-cleanup.lock.yml | 2 +- .github/workflows/stale-repo-identifier.lock.yml | 2 +- .github/workflows/static-analysis-report.lock.yml | 2 +- .github/workflows/step-name-alignment.lock.yml | 2 +- .github/workflows/sub-issue-closer.lock.yml | 2 +- .github/workflows/super-linter.lock.yml | 2 +- .github/workflows/technical-doc-writer.lock.yml | 2 +- .github/workflows/terminal-stylist.lock.yml | 2 +- .github/workflows/test-quality-sentinel.lock.yml | 2 +- .github/workflows/tidy.lock.yml | 2 +- .github/workflows/typist.lock.yml | 2 +- .github/workflows/ubuntu-image-analyzer.lock.yml | 2 +- .github/workflows/uk-ai-operational-resilience.lock.yml | 2 +- .github/workflows/unbloat-docs.lock.yml | 2 +- .github/workflows/update-astro.lock.yml | 2 +- .github/workflows/video-analyzer.lock.yml | 2 +- .github/workflows/visual-regression-checker.lock.yml | 2 +- .github/workflows/weekly-blog-post-writer.lock.yml | 2 +- .github/workflows/weekly-editors-health-check.lock.yml | 2 +- .github/workflows/weekly-issue-summary.lock.yml | 2 +- .github/workflows/weekly-network-domains-audit.lock.yml | 2 +- .github/workflows/weekly-safe-outputs-spec-review.lock.yml | 2 +- .github/workflows/workflow-generator.lock.yml | 2 +- .github/workflows/workflow-health-manager.lock.yml | 2 +- .github/workflows/workflow-normalizer.lock.yml | 2 +- .github/workflows/workflow-skill-extractor.lock.yml | 2 +- 292 files changed, 292 insertions(+), 292 deletions(-) diff --git a/.github/workflows/ab-testing-advisor.lock.yml b/.github/workflows/ab-testing-advisor.lock.yml index 097eb0f0b45..6fade78417f 100644 --- a/.github/workflows/ab-testing-advisor.lock.yml +++ b/.github/workflows/ab-testing-advisor.lock.yml @@ -170,7 +170,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/ace-editor.lock.yml b/.github/workflows/ace-editor.lock.yml index 0666a179a0f..4ed0a1e0272 100644 --- a/.github/workflows/ace-editor.lock.yml +++ b/.github/workflows/ace-editor.lock.yml @@ -171,7 +171,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Enforce strict mode policy if: ${{ vars.GH_AW_POLICY_STRICT == 'true' }} run: | diff --git a/.github/workflows/agent-job-health.lock.yml b/.github/workflows/agent-job-health.lock.yml index 9fefafae8e8..5b2befb3d96 100644 --- a/.github/workflows/agent-job-health.lock.yml +++ b/.github/workflows/agent-job-health.lock.yml @@ -174,7 +174,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/agent-performance-analyzer.lock.yml b/.github/workflows/agent-performance-analyzer.lock.yml index 923c6051af6..32bb2d52404 100644 --- a/.github/workflows/agent-performance-analyzer.lock.yml +++ b/.github/workflows/agent-performance-analyzer.lock.yml @@ -170,7 +170,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/agent-persona-explorer.lock.yml b/.github/workflows/agent-persona-explorer.lock.yml index 0c789815994..7b0b3c4ec42 100644 --- a/.github/workflows/agent-persona-explorer.lock.yml +++ b/.github/workflows/agent-persona-explorer.lock.yml @@ -171,7 +171,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/agentic-token-audit.lock.yml b/.github/workflows/agentic-token-audit.lock.yml index ad7b4b5487f..64a80149979 100644 --- a/.github/workflows/agentic-token-audit.lock.yml +++ b/.github/workflows/agentic-token-audit.lock.yml @@ -152,7 +152,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/agentic-token-optimizer.lock.yml b/.github/workflows/agentic-token-optimizer.lock.yml index 59438f7fac6..ac234515c8e 100644 --- a/.github/workflows/agentic-token-optimizer.lock.yml +++ b/.github/workflows/agentic-token-optimizer.lock.yml @@ -149,7 +149,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/agentic-token-trend-audit.lock.yml b/.github/workflows/agentic-token-trend-audit.lock.yml index 5b6a1ea6e6f..e6fa823242b 100644 --- a/.github/workflows/agentic-token-trend-audit.lock.yml +++ b/.github/workflows/agentic-token-trend-audit.lock.yml @@ -151,7 +151,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/ai-moderator.lock.yml b/.github/workflows/ai-moderator.lock.yml index 62094039095..31f3a272250 100644 --- a/.github/workflows/ai-moderator.lock.yml +++ b/.github/workflows/ai-moderator.lock.yml @@ -207,7 +207,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/api-consumption-report.lock.yml b/.github/workflows/api-consumption-report.lock.yml index 9320cddc155..574106060a7 100644 --- a/.github/workflows/api-consumption-report.lock.yml +++ b/.github/workflows/api-consumption-report.lock.yml @@ -177,7 +177,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/approach-validator.lock.yml b/.github/workflows/approach-validator.lock.yml index e2fca5abe40..189ab2e0e34 100644 --- a/.github/workflows/approach-validator.lock.yml +++ b/.github/workflows/approach-validator.lock.yml @@ -182,7 +182,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/archie.lock.yml b/.github/workflows/archie.lock.yml index 2190744ddb8..6901dc4d31d 100644 --- a/.github/workflows/archie.lock.yml +++ b/.github/workflows/archie.lock.yml @@ -175,7 +175,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/architecture-guardian.lock.yml b/.github/workflows/architecture-guardian.lock.yml index 0625335e622..570777534be 100644 --- a/.github/workflows/architecture-guardian.lock.yml +++ b/.github/workflows/architecture-guardian.lock.yml @@ -171,7 +171,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/archivx-agentic-workflows-analyzer.lock.yml b/.github/workflows/archivx-agentic-workflows-analyzer.lock.yml index 7ec4bee1239..723722ca58e 100644 --- a/.github/workflows/archivx-agentic-workflows-analyzer.lock.yml +++ b/.github/workflows/archivx-agentic-workflows-analyzer.lock.yml @@ -152,7 +152,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/artifacts-summary.lock.yml b/.github/workflows/artifacts-summary.lock.yml index afff49f0e18..38a9ee39bf1 100644 --- a/.github/workflows/artifacts-summary.lock.yml +++ b/.github/workflows/artifacts-summary.lock.yml @@ -164,7 +164,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/audit-workflows.lock.yml b/.github/workflows/audit-workflows.lock.yml index 09b59612a21..ede16f76f44 100644 --- a/.github/workflows/audit-workflows.lock.yml +++ b/.github/workflows/audit-workflows.lock.yml @@ -180,7 +180,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/auto-triage-issues.lock.yml b/.github/workflows/auto-triage-issues.lock.yml index dd54c44a261..ba534300d8a 100644 --- a/.github/workflows/auto-triage-issues.lock.yml +++ b/.github/workflows/auto-triage-issues.lock.yml @@ -176,7 +176,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/avenger.lock.yml b/.github/workflows/avenger.lock.yml index c0adf7c46da..34df841bbeb 100644 --- a/.github/workflows/avenger.lock.yml +++ b/.github/workflows/avenger.lock.yml @@ -181,7 +181,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/aw-failure-investigator.lock.yml b/.github/workflows/aw-failure-investigator.lock.yml index d96b3551cfe..8cae5b6d483 100644 --- a/.github/workflows/aw-failure-investigator.lock.yml +++ b/.github/workflows/aw-failure-investigator.lock.yml @@ -176,7 +176,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/blog-auditor.lock.yml b/.github/workflows/blog-auditor.lock.yml index f44e81c2c31..6858d2f5303 100644 --- a/.github/workflows/blog-auditor.lock.yml +++ b/.github/workflows/blog-auditor.lock.yml @@ -169,7 +169,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Enforce strict mode policy if: ${{ vars.GH_AW_POLICY_STRICT == 'true' }} run: | diff --git a/.github/workflows/bot-detection.lock.yml b/.github/workflows/bot-detection.lock.yml index 3ecf1b6b1b6..37f98e4e1cc 100644 --- a/.github/workflows/bot-detection.lock.yml +++ b/.github/workflows/bot-detection.lock.yml @@ -166,7 +166,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/breaking-change-checker.lock.yml b/.github/workflows/breaking-change-checker.lock.yml index 894c18c8fbd..8c2d6532bd7 100644 --- a/.github/workflows/breaking-change-checker.lock.yml +++ b/.github/workflows/breaking-change-checker.lock.yml @@ -173,7 +173,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/changeset.lock.yml b/.github/workflows/changeset.lock.yml index 7238d5b7938..8215190fa28 100644 --- a/.github/workflows/changeset.lock.yml +++ b/.github/workflows/changeset.lock.yml @@ -187,7 +187,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/chaos-pr-bundle-fuzzer.lock.yml b/.github/workflows/chaos-pr-bundle-fuzzer.lock.yml index 8c0fd05d891..fc7cf1c9273 100644 --- a/.github/workflows/chaos-pr-bundle-fuzzer.lock.yml +++ b/.github/workflows/chaos-pr-bundle-fuzzer.lock.yml @@ -166,7 +166,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/ci-coach.lock.yml b/.github/workflows/ci-coach.lock.yml index f19c28ee436..9703a2463ef 100644 --- a/.github/workflows/ci-coach.lock.yml +++ b/.github/workflows/ci-coach.lock.yml @@ -176,7 +176,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/ci-doctor.lock.yml b/.github/workflows/ci-doctor.lock.yml index 01c52501f18..8f39f5ef592 100644 --- a/.github/workflows/ci-doctor.lock.yml +++ b/.github/workflows/ci-doctor.lock.yml @@ -184,7 +184,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/claude-code-user-docs-review.lock.yml b/.github/workflows/claude-code-user-docs-review.lock.yml index 2530b33d5e2..eac11950155 100644 --- a/.github/workflows/claude-code-user-docs-review.lock.yml +++ b/.github/workflows/claude-code-user-docs-review.lock.yml @@ -168,7 +168,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/cli-consistency-checker.lock.yml b/.github/workflows/cli-consistency-checker.lock.yml index 4deacaaa732..be5b2195326 100644 --- a/.github/workflows/cli-consistency-checker.lock.yml +++ b/.github/workflows/cli-consistency-checker.lock.yml @@ -162,7 +162,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Enforce strict mode policy if: ${{ vars.GH_AW_POLICY_STRICT == 'true' }} run: | diff --git a/.github/workflows/cli-version-checker.lock.yml b/.github/workflows/cli-version-checker.lock.yml index 5e98d54b066..0ee10378791 100644 --- a/.github/workflows/cli-version-checker.lock.yml +++ b/.github/workflows/cli-version-checker.lock.yml @@ -167,7 +167,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Enforce strict mode policy if: ${{ vars.GH_AW_POLICY_STRICT == 'true' }} run: | diff --git a/.github/workflows/cloclo.lock.yml b/.github/workflows/cloclo.lock.yml index 31cf2dc4a0c..10395a2cb10 100644 --- a/.github/workflows/cloclo.lock.yml +++ b/.github/workflows/cloclo.lock.yml @@ -194,7 +194,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/code-scanning-fixer.lock.yml b/.github/workflows/code-scanning-fixer.lock.yml index 9c8c5eaffc4..dd933f20dc3 100644 --- a/.github/workflows/code-scanning-fixer.lock.yml +++ b/.github/workflows/code-scanning-fixer.lock.yml @@ -180,7 +180,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/code-simplifier.lock.yml b/.github/workflows/code-simplifier.lock.yml index 8709fdbe4bb..cef4b7640f5 100644 --- a/.github/workflows/code-simplifier.lock.yml +++ b/.github/workflows/code-simplifier.lock.yml @@ -180,7 +180,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/codex-github-remote-mcp-test.lock.yml b/.github/workflows/codex-github-remote-mcp-test.lock.yml index 700ccd2be3d..3d40aad7ac9 100644 --- a/.github/workflows/codex-github-remote-mcp-test.lock.yml +++ b/.github/workflows/codex-github-remote-mcp-test.lock.yml @@ -162,7 +162,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/commit-changes-analyzer.lock.yml b/.github/workflows/commit-changes-analyzer.lock.yml index d6d24e454e1..d9b35d36a22 100644 --- a/.github/workflows/commit-changes-analyzer.lock.yml +++ b/.github/workflows/commit-changes-analyzer.lock.yml @@ -167,7 +167,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/constraint-solving-potd.lock.yml b/.github/workflows/constraint-solving-potd.lock.yml index b1fd52466b8..38739fff748 100644 --- a/.github/workflows/constraint-solving-potd.lock.yml +++ b/.github/workflows/constraint-solving-potd.lock.yml @@ -163,7 +163,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/contribution-check.lock.yml b/.github/workflows/contribution-check.lock.yml index 01e528375ae..70a857c5617 100644 --- a/.github/workflows/contribution-check.lock.yml +++ b/.github/workflows/contribution-check.lock.yml @@ -167,7 +167,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/copilot-agent-analysis.lock.yml b/.github/workflows/copilot-agent-analysis.lock.yml index ff52ffe1ec9..f32754459ed 100644 --- a/.github/workflows/copilot-agent-analysis.lock.yml +++ b/.github/workflows/copilot-agent-analysis.lock.yml @@ -177,7 +177,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/copilot-centralization-drilldown.lock.yml b/.github/workflows/copilot-centralization-drilldown.lock.yml index 5a6bb16c857..58efa42819a 100644 --- a/.github/workflows/copilot-centralization-drilldown.lock.yml +++ b/.github/workflows/copilot-centralization-drilldown.lock.yml @@ -160,7 +160,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/copilot-centralization-optimizer.lock.yml b/.github/workflows/copilot-centralization-optimizer.lock.yml index abf5fff3665..7137753e09f 100644 --- a/.github/workflows/copilot-centralization-optimizer.lock.yml +++ b/.github/workflows/copilot-centralization-optimizer.lock.yml @@ -147,7 +147,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/copilot-cli-deep-research.lock.yml b/.github/workflows/copilot-cli-deep-research.lock.yml index 8e8fd4a0fc0..9ea2b77dcc9 100644 --- a/.github/workflows/copilot-cli-deep-research.lock.yml +++ b/.github/workflows/copilot-cli-deep-research.lock.yml @@ -163,7 +163,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/copilot-opt.lock.yml b/.github/workflows/copilot-opt.lock.yml index d1015cf1394..9438c4ef0d2 100644 --- a/.github/workflows/copilot-opt.lock.yml +++ b/.github/workflows/copilot-opt.lock.yml @@ -169,7 +169,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/copilot-pr-merged-report.lock.yml b/.github/workflows/copilot-pr-merged-report.lock.yml index 8a6296e3337..3d1209247c5 100644 --- a/.github/workflows/copilot-pr-merged-report.lock.yml +++ b/.github/workflows/copilot-pr-merged-report.lock.yml @@ -166,7 +166,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Enforce strict mode policy if: ${{ vars.GH_AW_POLICY_STRICT == 'true' }} run: | diff --git a/.github/workflows/copilot-pr-nlp-analysis.lock.yml b/.github/workflows/copilot-pr-nlp-analysis.lock.yml index b4bcd700c7b..3a9a497de82 100644 --- a/.github/workflows/copilot-pr-nlp-analysis.lock.yml +++ b/.github/workflows/copilot-pr-nlp-analysis.lock.yml @@ -172,7 +172,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/copilot-pr-prompt-analysis.lock.yml b/.github/workflows/copilot-pr-prompt-analysis.lock.yml index d8108142465..29929d94a30 100644 --- a/.github/workflows/copilot-pr-prompt-analysis.lock.yml +++ b/.github/workflows/copilot-pr-prompt-analysis.lock.yml @@ -168,7 +168,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/copilot-session-insights.lock.yml b/.github/workflows/copilot-session-insights.lock.yml index c4b00724500..4ee688901fd 100644 --- a/.github/workflows/copilot-session-insights.lock.yml +++ b/.github/workflows/copilot-session-insights.lock.yml @@ -178,7 +178,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/craft.lock.yml b/.github/workflows/craft.lock.yml index 0246b2766c0..5dc19775af9 100644 --- a/.github/workflows/craft.lock.yml +++ b/.github/workflows/craft.lock.yml @@ -172,7 +172,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-action-setup-security-audit.lock.yml b/.github/workflows/daily-action-setup-security-audit.lock.yml index 0f3dba59770..3e33ef29530 100644 --- a/.github/workflows/daily-action-setup-security-audit.lock.yml +++ b/.github/workflows/daily-action-setup-security-audit.lock.yml @@ -168,7 +168,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-agent-of-the-day-blog-writer.lock.yml b/.github/workflows/daily-agent-of-the-day-blog-writer.lock.yml index 91de7e8f596..6c78ee39c7e 100644 --- a/.github/workflows/daily-agent-of-the-day-blog-writer.lock.yml +++ b/.github/workflows/daily-agent-of-the-day-blog-writer.lock.yml @@ -184,7 +184,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-agentrx-trace-optimizer.lock.yml b/.github/workflows/daily-agentrx-trace-optimizer.lock.yml index 45b7b6a7e2f..79aecb834a3 100644 --- a/.github/workflows/daily-agentrx-trace-optimizer.lock.yml +++ b/.github/workflows/daily-agentrx-trace-optimizer.lock.yml @@ -176,7 +176,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-ambient-context-optimizer.lock.yml b/.github/workflows/daily-ambient-context-optimizer.lock.yml index 637b88d45bc..b2032c05104 100644 --- a/.github/workflows/daily-ambient-context-optimizer.lock.yml +++ b/.github/workflows/daily-ambient-context-optimizer.lock.yml @@ -170,7 +170,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-architecture-diagram.lock.yml b/.github/workflows/daily-architecture-diagram.lock.yml index cbd1da7d134..5f9ce492c6a 100644 --- a/.github/workflows/daily-architecture-diagram.lock.yml +++ b/.github/workflows/daily-architecture-diagram.lock.yml @@ -174,7 +174,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-arxiv-researcher.lock.yml b/.github/workflows/daily-arxiv-researcher.lock.yml index 15bb53386ed..2ba1abcf3e1 100644 --- a/.github/workflows/daily-arxiv-researcher.lock.yml +++ b/.github/workflows/daily-arxiv-researcher.lock.yml @@ -149,7 +149,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-assign-issue-to-user.lock.yml b/.github/workflows/daily-assign-issue-to-user.lock.yml index 129b4703ef4..ad27074052a 100644 --- a/.github/workflows/daily-assign-issue-to-user.lock.yml +++ b/.github/workflows/daily-assign-issue-to-user.lock.yml @@ -165,7 +165,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-astrostylelite-markdown-spellcheck.lock.yml b/.github/workflows/daily-astrostylelite-markdown-spellcheck.lock.yml index 05eb177ef2d..f45e086f1dc 100644 --- a/.github/workflows/daily-astrostylelite-markdown-spellcheck.lock.yml +++ b/.github/workflows/daily-astrostylelite-markdown-spellcheck.lock.yml @@ -173,7 +173,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-aw-cross-repo-compile-check.lock.yml b/.github/workflows/daily-aw-cross-repo-compile-check.lock.yml index f338e7c8b51..0f6112cadfb 100644 --- a/.github/workflows/daily-aw-cross-repo-compile-check.lock.yml +++ b/.github/workflows/daily-aw-cross-repo-compile-check.lock.yml @@ -170,7 +170,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-awf-spec-compiler-surfacing.lock.yml b/.github/workflows/daily-awf-spec-compiler-surfacing.lock.yml index 0e0e049608b..ff86e6f9eda 100644 --- a/.github/workflows/daily-awf-spec-compiler-surfacing.lock.yml +++ b/.github/workflows/daily-awf-spec-compiler-surfacing.lock.yml @@ -167,7 +167,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-byok-ollama-test.lock.yml b/.github/workflows/daily-byok-ollama-test.lock.yml index 71de8ad4df9..4cd8c4bc134 100644 --- a/.github/workflows/daily-byok-ollama-test.lock.yml +++ b/.github/workflows/daily-byok-ollama-test.lock.yml @@ -147,7 +147,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-cache-strategy-analyzer.lock.yml b/.github/workflows/daily-cache-strategy-analyzer.lock.yml index 311400582dc..5f5bd0e2d4c 100644 --- a/.github/workflows/daily-cache-strategy-analyzer.lock.yml +++ b/.github/workflows/daily-cache-strategy-analyzer.lock.yml @@ -178,7 +178,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-caveman-optimizer.lock.yml b/.github/workflows/daily-caveman-optimizer.lock.yml index 54cf5495c44..76fe1f87cfc 100644 --- a/.github/workflows/daily-caveman-optimizer.lock.yml +++ b/.github/workflows/daily-caveman-optimizer.lock.yml @@ -178,7 +178,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-choice-test.lock.yml b/.github/workflows/daily-choice-test.lock.yml index 4dab5032c2c..b0a6e3ca19d 100644 --- a/.github/workflows/daily-choice-test.lock.yml +++ b/.github/workflows/daily-choice-test.lock.yml @@ -168,7 +168,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-cli-performance.lock.yml b/.github/workflows/daily-cli-performance.lock.yml index f02344ac5c6..d56d0cfc5d4 100644 --- a/.github/workflows/daily-cli-performance.lock.yml +++ b/.github/workflows/daily-cli-performance.lock.yml @@ -200,7 +200,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-cli-tools-tester.lock.yml b/.github/workflows/daily-cli-tools-tester.lock.yml index d6d8d747d46..29fe62d93e0 100644 --- a/.github/workflows/daily-cli-tools-tester.lock.yml +++ b/.github/workflows/daily-cli-tools-tester.lock.yml @@ -169,7 +169,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-code-debt-aider.lock.yml b/.github/workflows/daily-code-debt-aider.lock.yml index 34de11a49b8..6d010de2a3b 100644 --- a/.github/workflows/daily-code-debt-aider.lock.yml +++ b/.github/workflows/daily-code-debt-aider.lock.yml @@ -171,7 +171,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-code-metrics.lock.yml b/.github/workflows/daily-code-metrics.lock.yml index d4b4f33cae5..200303d0bb7 100644 --- a/.github/workflows/daily-code-metrics.lock.yml +++ b/.github/workflows/daily-code-metrics.lock.yml @@ -173,7 +173,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-community-attribution.lock.yml b/.github/workflows/daily-community-attribution.lock.yml index 1f86503ef0e..c895b53f996 100644 --- a/.github/workflows/daily-community-attribution.lock.yml +++ b/.github/workflows/daily-community-attribution.lock.yml @@ -178,7 +178,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-compiler-quality.lock.yml b/.github/workflows/daily-compiler-quality.lock.yml index d65830808c8..d8f76e5a5e0 100644 --- a/.github/workflows/daily-compiler-quality.lock.yml +++ b/.github/workflows/daily-compiler-quality.lock.yml @@ -176,7 +176,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-compiler-threat-spec-optimizer.lock.yml b/.github/workflows/daily-compiler-threat-spec-optimizer.lock.yml index 5321ae07fa1..e8a227e0716 100644 --- a/.github/workflows/daily-compiler-threat-spec-optimizer.lock.yml +++ b/.github/workflows/daily-compiler-threat-spec-optimizer.lock.yml @@ -177,7 +177,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-credit-limit-test.lock.yml b/.github/workflows/daily-credit-limit-test.lock.yml index fadb6c6a9eb..05f13bc3a64 100644 --- a/.github/workflows/daily-credit-limit-test.lock.yml +++ b/.github/workflows/daily-credit-limit-test.lock.yml @@ -149,7 +149,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-doc-healer.lock.yml b/.github/workflows/daily-doc-healer.lock.yml index 875cef11a69..560b9f69055 100644 --- a/.github/workflows/daily-doc-healer.lock.yml +++ b/.github/workflows/daily-doc-healer.lock.yml @@ -182,7 +182,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-doc-updater.lock.yml b/.github/workflows/daily-doc-updater.lock.yml index 5723c807a57..0835c572a52 100644 --- a/.github/workflows/daily-doc-updater.lock.yml +++ b/.github/workflows/daily-doc-updater.lock.yml @@ -179,7 +179,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-documentation-diagram.lock.yml b/.github/workflows/daily-documentation-diagram.lock.yml index e6431f5182e..d557c5f07f9 100644 --- a/.github/workflows/daily-documentation-diagram.lock.yml +++ b/.github/workflows/daily-documentation-diagram.lock.yml @@ -152,7 +152,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-elixir-credo-snippet-audit.lock.yml b/.github/workflows/daily-elixir-credo-snippet-audit.lock.yml index 99ef047468e..5111598cf89 100644 --- a/.github/workflows/daily-elixir-credo-snippet-audit.lock.yml +++ b/.github/workflows/daily-elixir-credo-snippet-audit.lock.yml @@ -164,7 +164,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-evals-report.lock.yml b/.github/workflows/daily-evals-report.lock.yml index 63bf688b976..ccc2b8ac3de 100644 --- a/.github/workflows/daily-evals-report.lock.yml +++ b/.github/workflows/daily-evals-report.lock.yml @@ -176,7 +176,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-experiment-report.lock.yml b/.github/workflows/daily-experiment-report.lock.yml index 11104ccfc3a..5e98ae673c2 100644 --- a/.github/workflows/daily-experiment-report.lock.yml +++ b/.github/workflows/daily-experiment-report.lock.yml @@ -169,7 +169,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-fact.lock.yml b/.github/workflows/daily-fact.lock.yml index 25e30cbacbc..12c49d232a2 100644 --- a/.github/workflows/daily-fact.lock.yml +++ b/.github/workflows/daily-fact.lock.yml @@ -177,7 +177,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-file-diet.lock.yml b/.github/workflows/daily-file-diet.lock.yml index 3f305004f3a..0de60fac91a 100644 --- a/.github/workflows/daily-file-diet.lock.yml +++ b/.github/workflows/daily-file-diet.lock.yml @@ -179,7 +179,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-firewall-report.lock.yml b/.github/workflows/daily-firewall-report.lock.yml index 1b8ee8b9ee0..6f22595b6e6 100644 --- a/.github/workflows/daily-firewall-report.lock.yml +++ b/.github/workflows/daily-firewall-report.lock.yml @@ -169,7 +169,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-formal-spec-verifier.lock.yml b/.github/workflows/daily-formal-spec-verifier.lock.yml index 72efc8b55a8..3bc19134f8c 100644 --- a/.github/workflows/daily-formal-spec-verifier.lock.yml +++ b/.github/workflows/daily-formal-spec-verifier.lock.yml @@ -166,7 +166,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-function-namer.lock.yml b/.github/workflows/daily-function-namer.lock.yml index 3cf1172139e..c745c45b5dd 100644 --- a/.github/workflows/daily-function-namer.lock.yml +++ b/.github/workflows/daily-function-namer.lock.yml @@ -172,7 +172,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-geo-optimizer.lock.yml b/.github/workflows/daily-geo-optimizer.lock.yml index 404a11c49d1..006226a0cf6 100644 --- a/.github/workflows/daily-geo-optimizer.lock.yml +++ b/.github/workflows/daily-geo-optimizer.lock.yml @@ -167,7 +167,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-github-docs-seo-optimizer.lock.yml b/.github/workflows/daily-github-docs-seo-optimizer.lock.yml index a8acbcf6b29..1bae58d1f74 100644 --- a/.github/workflows/daily-github-docs-seo-optimizer.lock.yml +++ b/.github/workflows/daily-github-docs-seo-optimizer.lock.yml @@ -141,7 +141,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-go-test-parallelizer.lock.yml b/.github/workflows/daily-go-test-parallelizer.lock.yml index 51d4ae1d5c2..ce2be3ef385 100644 --- a/.github/workflows/daily-go-test-parallelizer.lock.yml +++ b/.github/workflows/daily-go-test-parallelizer.lock.yml @@ -161,7 +161,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-go-test-stubs-aider.lock.yml b/.github/workflows/daily-go-test-stubs-aider.lock.yml index 82ef27f547d..029222af9c6 100644 --- a/.github/workflows/daily-go-test-stubs-aider.lock.yml +++ b/.github/workflows/daily-go-test-stubs-aider.lock.yml @@ -171,7 +171,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-graft-intelligence.lock.yml b/.github/workflows/daily-graft-intelligence.lock.yml index 1b3079ffd76..bffe4c955a9 100644 --- a/.github/workflows/daily-graft-intelligence.lock.yml +++ b/.github/workflows/daily-graft-intelligence.lock.yml @@ -154,7 +154,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-harness-experiment-proposer.lock.yml b/.github/workflows/daily-harness-experiment-proposer.lock.yml index a74b43e1826..9305bb1ac5c 100644 --- a/.github/workflows/daily-harness-experiment-proposer.lock.yml +++ b/.github/workflows/daily-harness-experiment-proposer.lock.yml @@ -174,7 +174,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-hippo-learn.lock.yml b/.github/workflows/daily-hippo-learn.lock.yml index 1807203f3ea..989e9bc9322 100644 --- a/.github/workflows/daily-hippo-learn.lock.yml +++ b/.github/workflows/daily-hippo-learn.lock.yml @@ -165,7 +165,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-issues-report.lock.yml b/.github/workflows/daily-issues-report.lock.yml index e8a241d6a7d..025c1394414 100644 --- a/.github/workflows/daily-issues-report.lock.yml +++ b/.github/workflows/daily-issues-report.lock.yml @@ -178,7 +178,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-malicious-code-scan.lock.yml b/.github/workflows/daily-malicious-code-scan.lock.yml index cf8836042b1..98f6f5762e0 100644 --- a/.github/workflows/daily-malicious-code-scan.lock.yml +++ b/.github/workflows/daily-malicious-code-scan.lock.yml @@ -166,7 +166,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-max-ai-credits-test.lock.yml b/.github/workflows/daily-max-ai-credits-test.lock.yml index cf2ea9cbffe..5e233ea7fd6 100644 --- a/.github/workflows/daily-max-ai-credits-test.lock.yml +++ b/.github/workflows/daily-max-ai-credits-test.lock.yml @@ -139,7 +139,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Check for OAuth tokens id: check-oauth-tokens run: bash "${RUNNER_TEMP}/gh-aw/actions/check_oauth_tokens.sh" diff --git a/.github/workflows/daily-mcp-concurrency-analysis.lock.yml b/.github/workflows/daily-mcp-concurrency-analysis.lock.yml index e386a5329c9..0b9e61a49b4 100644 --- a/.github/workflows/daily-mcp-concurrency-analysis.lock.yml +++ b/.github/workflows/daily-mcp-concurrency-analysis.lock.yml @@ -170,7 +170,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-model-inventory.lock.yml b/.github/workflows/daily-model-inventory.lock.yml index f824d98ac27..e647da537bb 100644 --- a/.github/workflows/daily-model-inventory.lock.yml +++ b/.github/workflows/daily-model-inventory.lock.yml @@ -166,7 +166,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-model-resolution.lock.yml b/.github/workflows/daily-model-resolution.lock.yml index cbc77e8c0ae..f734e8686f7 100644 --- a/.github/workflows/daily-model-resolution.lock.yml +++ b/.github/workflows/daily-model-resolution.lock.yml @@ -168,7 +168,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-multi-device-docs-tester.lock.yml b/.github/workflows/daily-multi-device-docs-tester.lock.yml index 4a6549f4b56..5da65e4386a 100644 --- a/.github/workflows/daily-multi-device-docs-tester.lock.yml +++ b/.github/workflows/daily-multi-device-docs-tester.lock.yml @@ -171,7 +171,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-news.lock.yml b/.github/workflows/daily-news.lock.yml index 81a4aee6e63..0d606e65484 100644 --- a/.github/workflows/daily-news.lock.yml +++ b/.github/workflows/daily-news.lock.yml @@ -176,7 +176,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-observability-report.lock.yml b/.github/workflows/daily-observability-report.lock.yml index 1ef1285b03e..4466b66e44b 100644 --- a/.github/workflows/daily-observability-report.lock.yml +++ b/.github/workflows/daily-observability-report.lock.yml @@ -173,7 +173,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-performance-summary.lock.yml b/.github/workflows/daily-performance-summary.lock.yml index 52890a2a53e..f27ef19ea19 100644 --- a/.github/workflows/daily-performance-summary.lock.yml +++ b/.github/workflows/daily-performance-summary.lock.yml @@ -173,7 +173,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-pr-review-cursor.lock.yml b/.github/workflows/daily-pr-review-cursor.lock.yml index 6d11c959485..ec16576515d 100644 --- a/.github/workflows/daily-pr-review-cursor.lock.yml +++ b/.github/workflows/daily-pr-review-cursor.lock.yml @@ -163,7 +163,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-regression-audit-kiro.lock.yml b/.github/workflows/daily-regression-audit-kiro.lock.yml index 50e508fb5bb..c46a8e939eb 100644 --- a/.github/workflows/daily-regression-audit-kiro.lock.yml +++ b/.github/workflows/daily-regression-audit-kiro.lock.yml @@ -163,7 +163,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-regulatory.lock.yml b/.github/workflows/daily-regulatory.lock.yml index 94caab6be6b..e14a4c88762 100644 --- a/.github/workflows/daily-regulatory.lock.yml +++ b/.github/workflows/daily-regulatory.lock.yml @@ -167,7 +167,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-reliability-review.lock.yml b/.github/workflows/daily-reliability-review.lock.yml index 80ff2e04f3e..8a8b4d8f977 100644 --- a/.github/workflows/daily-reliability-review.lock.yml +++ b/.github/workflows/daily-reliability-review.lock.yml @@ -164,7 +164,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-rendering-scripts-verifier.lock.yml b/.github/workflows/daily-rendering-scripts-verifier.lock.yml index 8ef1aa05ffe..c18152f1437 100644 --- a/.github/workflows/daily-rendering-scripts-verifier.lock.yml +++ b/.github/workflows/daily-rendering-scripts-verifier.lock.yml @@ -187,7 +187,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-repo-chronicle.lock.yml b/.github/workflows/daily-repo-chronicle.lock.yml index b63ebae463c..5d4fd2d6ed5 100644 --- a/.github/workflows/daily-repo-chronicle.lock.yml +++ b/.github/workflows/daily-repo-chronicle.lock.yml @@ -170,7 +170,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-safe-output-integrator.lock.yml b/.github/workflows/daily-safe-output-integrator.lock.yml index d7ad6d4ba91..5460f6d367a 100644 --- a/.github/workflows/daily-safe-output-integrator.lock.yml +++ b/.github/workflows/daily-safe-output-integrator.lock.yml @@ -172,7 +172,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-safe-output-optimizer.lock.yml b/.github/workflows/daily-safe-output-optimizer.lock.yml index f431e89c25f..3e0c9a87644 100644 --- a/.github/workflows/daily-safe-output-optimizer.lock.yml +++ b/.github/workflows/daily-safe-output-optimizer.lock.yml @@ -181,7 +181,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-safe-outputs-conformance.lock.yml b/.github/workflows/daily-safe-outputs-conformance.lock.yml index addc6a3fef5..6fb4a92f8b0 100644 --- a/.github/workflows/daily-safe-outputs-conformance.lock.yml +++ b/.github/workflows/daily-safe-outputs-conformance.lock.yml @@ -168,7 +168,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-safeoutputs-git-simulator.lock.yml b/.github/workflows/daily-safeoutputs-git-simulator.lock.yml index 246f07fd92d..aa89dce9262 100644 --- a/.github/workflows/daily-safeoutputs-git-simulator.lock.yml +++ b/.github/workflows/daily-safeoutputs-git-simulator.lock.yml @@ -154,7 +154,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-schema-audit-cursor.lock.yml b/.github/workflows/daily-schema-audit-cursor.lock.yml index de72a00d667..140a287249c 100644 --- a/.github/workflows/daily-schema-audit-cursor.lock.yml +++ b/.github/workflows/daily-schema-audit-cursor.lock.yml @@ -163,7 +163,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-secrets-analysis.lock.yml b/.github/workflows/daily-secrets-analysis.lock.yml index b5a87b2e1fd..b4a2c9ec739 100644 --- a/.github/workflows/daily-secrets-analysis.lock.yml +++ b/.github/workflows/daily-secrets-analysis.lock.yml @@ -164,7 +164,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-security-observability.lock.yml b/.github/workflows/daily-security-observability.lock.yml index 7dbac3a93c7..6712a96b048 100644 --- a/.github/workflows/daily-security-observability.lock.yml +++ b/.github/workflows/daily-security-observability.lock.yml @@ -181,7 +181,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-security-red-team.lock.yml b/.github/workflows/daily-security-red-team.lock.yml index d68f7582017..d7f7181a302 100644 --- a/.github/workflows/daily-security-red-team.lock.yml +++ b/.github/workflows/daily-security-red-team.lock.yml @@ -167,7 +167,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-semgrep-scan.lock.yml b/.github/workflows/daily-semgrep-scan.lock.yml index 0f86b148364..98d07e48f19 100644 --- a/.github/workflows/daily-semgrep-scan.lock.yml +++ b/.github/workflows/daily-semgrep-scan.lock.yml @@ -164,7 +164,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-spdd-spec-planner.lock.yml b/.github/workflows/daily-spdd-spec-planner.lock.yml index ec692db3aea..881c0a0a5a7 100644 --- a/.github/workflows/daily-spdd-spec-planner.lock.yml +++ b/.github/workflows/daily-spdd-spec-planner.lock.yml @@ -167,7 +167,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-spec-coverage-kiro.lock.yml b/.github/workflows/daily-spec-coverage-kiro.lock.yml index b6690168604..f2774c232e6 100644 --- a/.github/workflows/daily-spec-coverage-kiro.lock.yml +++ b/.github/workflows/daily-spec-coverage-kiro.lock.yml @@ -163,7 +163,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-spending-forecast.lock.yml b/.github/workflows/daily-spending-forecast.lock.yml index 6a3f56ea9f8..2252a30d56d 100644 --- a/.github/workflows/daily-spending-forecast.lock.yml +++ b/.github/workflows/daily-spending-forecast.lock.yml @@ -153,7 +153,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-squid-image-scan.lock.yml b/.github/workflows/daily-squid-image-scan.lock.yml index 860ad89fe41..62f68dddf52 100644 --- a/.github/workflows/daily-squid-image-scan.lock.yml +++ b/.github/workflows/daily-squid-image-scan.lock.yml @@ -143,7 +143,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-storify.lock.yml b/.github/workflows/daily-storify.lock.yml index 8213bd12eb9..5a987e090e1 100644 --- a/.github/workflows/daily-storify.lock.yml +++ b/.github/workflows/daily-storify.lock.yml @@ -170,7 +170,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-syntax-error-quality.lock.yml b/.github/workflows/daily-syntax-error-quality.lock.yml index b32243ba5dd..f75ac2c2751 100644 --- a/.github/workflows/daily-syntax-error-quality.lock.yml +++ b/.github/workflows/daily-syntax-error-quality.lock.yml @@ -163,7 +163,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-team-evolution-insights.lock.yml b/.github/workflows/daily-team-evolution-insights.lock.yml index 25cbda95b5d..16468198d25 100644 --- a/.github/workflows/daily-team-evolution-insights.lock.yml +++ b/.github/workflows/daily-team-evolution-insights.lock.yml @@ -164,7 +164,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Enforce strict mode policy if: ${{ vars.GH_AW_POLICY_STRICT == 'true' }} run: | diff --git a/.github/workflows/daily-team-status.lock.yml b/.github/workflows/daily-team-status.lock.yml index adfa6d3a90a..39093aae59c 100644 --- a/.github/workflows/daily-team-status.lock.yml +++ b/.github/workflows/daily-team-status.lock.yml @@ -151,7 +151,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-testify-uber-super-expert.lock.yml b/.github/workflows/daily-testify-uber-super-expert.lock.yml index 101e4bc2410..8bf55c7580e 100644 --- a/.github/workflows/daily-testify-uber-super-expert.lock.yml +++ b/.github/workflows/daily-testify-uber-super-expert.lock.yml @@ -175,7 +175,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-token-consumption-report.lock.yml b/.github/workflows/daily-token-consumption-report.lock.yml index 46ede2e5c77..9ec71abb244 100644 --- a/.github/workflows/daily-token-consumption-report.lock.yml +++ b/.github/workflows/daily-token-consumption-report.lock.yml @@ -166,7 +166,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-trajectory-grader-implementer.lock.yml b/.github/workflows/daily-trajectory-grader-implementer.lock.yml index 8713f8c2fe8..ba68d8dd409 100644 --- a/.github/workflows/daily-trajectory-grader-implementer.lock.yml +++ b/.github/workflows/daily-trajectory-grader-implementer.lock.yml @@ -160,7 +160,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-vulnhunter-scan.lock.yml b/.github/workflows/daily-vulnhunter-scan.lock.yml index 7fcd740674c..4de111c1c96 100644 --- a/.github/workflows/daily-vulnhunter-scan.lock.yml +++ b/.github/workflows/daily-vulnhunter-scan.lock.yml @@ -165,7 +165,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-windows-terminal-integration-builder.lock.yml b/.github/workflows/daily-windows-terminal-integration-builder.lock.yml index 4f0b91d558d..c5bcac16c00 100644 --- a/.github/workflows/daily-windows-terminal-integration-builder.lock.yml +++ b/.github/workflows/daily-windows-terminal-integration-builder.lock.yml @@ -150,7 +150,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-workflow-updater.lock.yml b/.github/workflows/daily-workflow-updater.lock.yml index 87b058880ea..c8f6f960a8a 100644 --- a/.github/workflows/daily-workflow-updater.lock.yml +++ b/.github/workflows/daily-workflow-updater.lock.yml @@ -169,7 +169,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-yamllint-fixer.lock.yml b/.github/workflows/daily-yamllint-fixer.lock.yml index 7ea901581fe..483a843ef75 100644 --- a/.github/workflows/daily-yamllint-fixer.lock.yml +++ b/.github/workflows/daily-yamllint-fixer.lock.yml @@ -177,7 +177,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/dataflow-pr-discussion-dataset.lock.yml b/.github/workflows/dataflow-pr-discussion-dataset.lock.yml index 8f7a42a4220..7321d4987dd 100644 --- a/.github/workflows/dataflow-pr-discussion-dataset.lock.yml +++ b/.github/workflows/dataflow-pr-discussion-dataset.lock.yml @@ -172,7 +172,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/dead-code-remover.lock.yml b/.github/workflows/dead-code-remover.lock.yml index e060f7f1d48..9872fa1dc98 100644 --- a/.github/workflows/dead-code-remover.lock.yml +++ b/.github/workflows/dead-code-remover.lock.yml @@ -177,7 +177,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/deep-report.lock.yml b/.github/workflows/deep-report.lock.yml index 8855a9b22e1..e9b50c8e4fe 100644 --- a/.github/workflows/deep-report.lock.yml +++ b/.github/workflows/deep-report.lock.yml @@ -179,7 +179,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/deepsec-security-scan.lock.yml b/.github/workflows/deepsec-security-scan.lock.yml index 0c0e3126216..e72f76b2a66 100644 --- a/.github/workflows/deepsec-security-scan.lock.yml +++ b/.github/workflows/deepsec-security-scan.lock.yml @@ -187,7 +187,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/delight.lock.yml b/.github/workflows/delight.lock.yml index 799978be558..7dabd860aad 100644 --- a/.github/workflows/delight.lock.yml +++ b/.github/workflows/delight.lock.yml @@ -166,7 +166,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/dependabot-burner.lock.yml b/.github/workflows/dependabot-burner.lock.yml index b79449ab534..887978710f9 100644 --- a/.github/workflows/dependabot-burner.lock.yml +++ b/.github/workflows/dependabot-burner.lock.yml @@ -197,7 +197,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/dependabot-go-checker.lock.yml b/.github/workflows/dependabot-go-checker.lock.yml index c32a8c85ddc..06906a41d87 100644 --- a/.github/workflows/dependabot-go-checker.lock.yml +++ b/.github/workflows/dependabot-go-checker.lock.yml @@ -166,7 +166,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/deployment-incident-monitor.lock.yml b/.github/workflows/deployment-incident-monitor.lock.yml index fcb2ad8e97d..1e4d29e377c 100644 --- a/.github/workflows/deployment-incident-monitor.lock.yml +++ b/.github/workflows/deployment-incident-monitor.lock.yml @@ -168,7 +168,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/design-decision-gate.lock.yml b/.github/workflows/design-decision-gate.lock.yml index f6b6581dd6d..124b8247426 100644 --- a/.github/workflows/design-decision-gate.lock.yml +++ b/.github/workflows/design-decision-gate.lock.yml @@ -202,7 +202,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/designer-drift-audit.lock.yml b/.github/workflows/designer-drift-audit.lock.yml index 2a7d11f7a01..9c8c19dd4fd 100644 --- a/.github/workflows/designer-drift-audit.lock.yml +++ b/.github/workflows/designer-drift-audit.lock.yml @@ -145,7 +145,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/detection-analysis-report.lock.yml b/.github/workflows/detection-analysis-report.lock.yml index cf364552d4a..3caf5217cb5 100644 --- a/.github/workflows/detection-analysis-report.lock.yml +++ b/.github/workflows/detection-analysis-report.lock.yml @@ -176,7 +176,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/dev-hawk.lock.yml b/.github/workflows/dev-hawk.lock.yml index 0de6bf50590..d21aa2eb7a4 100644 --- a/.github/workflows/dev-hawk.lock.yml +++ b/.github/workflows/dev-hawk.lock.yml @@ -182,7 +182,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/dev.lock.yml b/.github/workflows/dev.lock.yml index 442bb8eb601..3352e8de05b 100644 --- a/.github/workflows/dev.lock.yml +++ b/.github/workflows/dev.lock.yml @@ -184,7 +184,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Enforce strict mode policy if: ${{ vars.GH_AW_POLICY_STRICT == 'true' }} run: | diff --git a/.github/workflows/developer-docs-consolidator.lock.yml b/.github/workflows/developer-docs-consolidator.lock.yml index aa209ac3fdb..5254ee48cb8 100644 --- a/.github/workflows/developer-docs-consolidator.lock.yml +++ b/.github/workflows/developer-docs-consolidator.lock.yml @@ -179,7 +179,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/dictation-prompt.lock.yml b/.github/workflows/dictation-prompt.lock.yml index 64c1e7cebfe..354625d5ded 100644 --- a/.github/workflows/dictation-prompt.lock.yml +++ b/.github/workflows/dictation-prompt.lock.yml @@ -169,7 +169,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/docs-noob-tester.lock.yml b/.github/workflows/docs-noob-tester.lock.yml index 1a56a435992..624b5ad1148 100644 --- a/.github/workflows/docs-noob-tester.lock.yml +++ b/.github/workflows/docs-noob-tester.lock.yml @@ -166,7 +166,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/draft-pr-cleanup.lock.yml b/.github/workflows/draft-pr-cleanup.lock.yml index 916b82a181a..0fdccae6c01 100644 --- a/.github/workflows/draft-pr-cleanup.lock.yml +++ b/.github/workflows/draft-pr-cleanup.lock.yml @@ -162,7 +162,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/duplicate-code-detector.lock.yml b/.github/workflows/duplicate-code-detector.lock.yml index 5927585b4e0..eeedff9573f 100644 --- a/.github/workflows/duplicate-code-detector.lock.yml +++ b/.github/workflows/duplicate-code-detector.lock.yml @@ -168,7 +168,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/eslint-miner.lock.yml b/.github/workflows/eslint-miner.lock.yml index 261bbe738a4..a399288b9b4 100644 --- a/.github/workflows/eslint-miner.lock.yml +++ b/.github/workflows/eslint-miner.lock.yml @@ -154,7 +154,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/eslint-monster.lock.yml b/.github/workflows/eslint-monster.lock.yml index 2328bae94da..7db46dabce5 100644 --- a/.github/workflows/eslint-monster.lock.yml +++ b/.github/workflows/eslint-monster.lock.yml @@ -166,7 +166,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/eslint-refiner.lock.yml b/.github/workflows/eslint-refiner.lock.yml index e52fd75ca4b..b6f1ddb9d8e 100644 --- a/.github/workflows/eslint-refiner.lock.yml +++ b/.github/workflows/eslint-refiner.lock.yml @@ -167,7 +167,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/evoskill-evolver.lock.yml b/.github/workflows/evoskill-evolver.lock.yml index 65b2c19c410..194909b6a49 100644 --- a/.github/workflows/evoskill-evolver.lock.yml +++ b/.github/workflows/evoskill-evolver.lock.yml @@ -155,7 +155,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/example-failure-category-filter.lock.yml b/.github/workflows/example-failure-category-filter.lock.yml index 38c0f20002d..a7ec74cfa06 100644 --- a/.github/workflows/example-failure-category-filter.lock.yml +++ b/.github/workflows/example-failure-category-filter.lock.yml @@ -143,7 +143,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/example-permissions-warning.lock.yml b/.github/workflows/example-permissions-warning.lock.yml index 4f87a4c24e6..3de5b811c3c 100644 --- a/.github/workflows/example-permissions-warning.lock.yml +++ b/.github/workflows/example-permissions-warning.lock.yml @@ -159,7 +159,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Enforce strict mode policy if: ${{ vars.GH_AW_POLICY_STRICT == 'true' }} run: | diff --git a/.github/workflows/example-workflow-analyzer.lock.yml b/.github/workflows/example-workflow-analyzer.lock.yml index 6f94d3d0e98..8f18d5b7027 100644 --- a/.github/workflows/example-workflow-analyzer.lock.yml +++ b/.github/workflows/example-workflow-analyzer.lock.yml @@ -175,7 +175,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/firewall-escape.lock.yml b/.github/workflows/firewall-escape.lock.yml index 28f5dc92514..6d234b9cc8d 100644 --- a/.github/workflows/firewall-escape.lock.yml +++ b/.github/workflows/firewall-escape.lock.yml @@ -178,7 +178,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/firewall.lock.yml b/.github/workflows/firewall.lock.yml index 6ca9a98b188..7a714285d9f 100644 --- a/.github/workflows/firewall.lock.yml +++ b/.github/workflows/firewall.lock.yml @@ -159,7 +159,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/functional-pragmatist.lock.yml b/.github/workflows/functional-pragmatist.lock.yml index 9796abc562d..357bcffa2ac 100644 --- a/.github/workflows/functional-pragmatist.lock.yml +++ b/.github/workflows/functional-pragmatist.lock.yml @@ -170,7 +170,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/github-mcp-structural-analysis.lock.yml b/.github/workflows/github-mcp-structural-analysis.lock.yml index 1469c98de3d..9c05988ac56 100644 --- a/.github/workflows/github-mcp-structural-analysis.lock.yml +++ b/.github/workflows/github-mcp-structural-analysis.lock.yml @@ -173,7 +173,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/github-mcp-tools-report.lock.yml b/.github/workflows/github-mcp-tools-report.lock.yml index cb09e7e94cb..5e14cdea1d5 100644 --- a/.github/workflows/github-mcp-tools-report.lock.yml +++ b/.github/workflows/github-mcp-tools-report.lock.yml @@ -173,7 +173,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/github-remote-mcp-auth-test.lock.yml b/.github/workflows/github-remote-mcp-auth-test.lock.yml index 5ba0513ca42..bb174be7f5d 100644 --- a/.github/workflows/github-remote-mcp-auth-test.lock.yml +++ b/.github/workflows/github-remote-mcp-auth-test.lock.yml @@ -164,7 +164,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/glossary-maintainer.lock.yml b/.github/workflows/glossary-maintainer.lock.yml index 31086acab24..c24e0d2deb8 100644 --- a/.github/workflows/glossary-maintainer.lock.yml +++ b/.github/workflows/glossary-maintainer.lock.yml @@ -182,7 +182,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/go-fan.lock.yml b/.github/workflows/go-fan.lock.yml index 162c01d71fb..9dbc826e244 100644 --- a/.github/workflows/go-fan.lock.yml +++ b/.github/workflows/go-fan.lock.yml @@ -176,7 +176,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/go-logger.lock.yml b/.github/workflows/go-logger.lock.yml index 64dbc5791f8..d2f804d8d62 100644 --- a/.github/workflows/go-logger.lock.yml +++ b/.github/workflows/go-logger.lock.yml @@ -178,7 +178,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/go-pattern-detector.lock.yml b/.github/workflows/go-pattern-detector.lock.yml index 6367a28f902..c20a05ad29c 100644 --- a/.github/workflows/go-pattern-detector.lock.yml +++ b/.github/workflows/go-pattern-detector.lock.yml @@ -167,7 +167,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/gpclean.lock.yml b/.github/workflows/gpclean.lock.yml index 11ad221bab9..63504d0e6e7 100644 --- a/.github/workflows/gpclean.lock.yml +++ b/.github/workflows/gpclean.lock.yml @@ -166,7 +166,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Enforce strict mode policy if: ${{ vars.GH_AW_POLICY_STRICT == 'true' }} run: | diff --git a/.github/workflows/grumpy-reviewer.lock.yml b/.github/workflows/grumpy-reviewer.lock.yml index f617b833e64..61615611646 100644 --- a/.github/workflows/grumpy-reviewer.lock.yml +++ b/.github/workflows/grumpy-reviewer.lock.yml @@ -176,7 +176,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/hippo-embed.lock.yml b/.github/workflows/hippo-embed.lock.yml index 71e6393e628..4c026de99db 100644 --- a/.github/workflows/hippo-embed.lock.yml +++ b/.github/workflows/hippo-embed.lock.yml @@ -164,7 +164,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/hourly-ci-cleaner.lock.yml b/.github/workflows/hourly-ci-cleaner.lock.yml index 65d4d715a05..0cb7c667d18 100644 --- a/.github/workflows/hourly-ci-cleaner.lock.yml +++ b/.github/workflows/hourly-ci-cleaner.lock.yml @@ -178,7 +178,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/impeccable-skills-reviewer.lock.yml b/.github/workflows/impeccable-skills-reviewer.lock.yml index 44609055fe0..970faa97bbd 100644 --- a/.github/workflows/impeccable-skills-reviewer.lock.yml +++ b/.github/workflows/impeccable-skills-reviewer.lock.yml @@ -188,7 +188,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/instructions-janitor.lock.yml b/.github/workflows/instructions-janitor.lock.yml index 62af02f001e..e27bb8e40bc 100644 --- a/.github/workflows/instructions-janitor.lock.yml +++ b/.github/workflows/instructions-janitor.lock.yml @@ -173,7 +173,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/issue-arborist.lock.yml b/.github/workflows/issue-arborist.lock.yml index ad967d8f96f..ca5f31fc81f 100644 --- a/.github/workflows/issue-arborist.lock.yml +++ b/.github/workflows/issue-arborist.lock.yml @@ -168,7 +168,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/issue-monster.lock.yml b/.github/workflows/issue-monster.lock.yml index 50863e99cee..66bf060db92 100644 --- a/.github/workflows/issue-monster.lock.yml +++ b/.github/workflows/issue-monster.lock.yml @@ -657,7 +657,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/issue-triage-agent.lock.yml b/.github/workflows/issue-triage-agent.lock.yml index 81eb174b4ca..c2e336a2e9d 100644 --- a/.github/workflows/issue-triage-agent.lock.yml +++ b/.github/workflows/issue-triage-agent.lock.yml @@ -163,7 +163,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/jsweep.lock.yml b/.github/workflows/jsweep.lock.yml index 473cdaf034b..52748cc7d1f 100644 --- a/.github/workflows/jsweep.lock.yml +++ b/.github/workflows/jsweep.lock.yml @@ -169,7 +169,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/layout-spec-maintainer.lock.yml b/.github/workflows/layout-spec-maintainer.lock.yml index 75741c56c6e..7f0cab87ee6 100644 --- a/.github/workflows/layout-spec-maintainer.lock.yml +++ b/.github/workflows/layout-spec-maintainer.lock.yml @@ -173,7 +173,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/lint-monster.lock.yml b/.github/workflows/lint-monster.lock.yml index 73932e31727..d715b6eecf9 100644 --- a/.github/workflows/lint-monster.lock.yml +++ b/.github/workflows/lint-monster.lock.yml @@ -165,7 +165,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/linter-miner.lock.yml b/.github/workflows/linter-miner.lock.yml index 24506e0d78c..eb079a32f17 100644 --- a/.github/workflows/linter-miner.lock.yml +++ b/.github/workflows/linter-miner.lock.yml @@ -175,7 +175,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/lockfile-stats.lock.yml b/.github/workflows/lockfile-stats.lock.yml index e6aff8ee002..782506c9e50 100644 --- a/.github/workflows/lockfile-stats.lock.yml +++ b/.github/workflows/lockfile-stats.lock.yml @@ -167,7 +167,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/mattpocock-skills-reviewer.lock.yml b/.github/workflows/mattpocock-skills-reviewer.lock.yml index 3732500543c..6169cf833be 100644 --- a/.github/workflows/mattpocock-skills-reviewer.lock.yml +++ b/.github/workflows/mattpocock-skills-reviewer.lock.yml @@ -191,7 +191,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/mcp-inspector.lock.yml b/.github/workflows/mcp-inspector.lock.yml index c20e521b1fe..9f83586073b 100644 --- a/.github/workflows/mcp-inspector.lock.yml +++ b/.github/workflows/mcp-inspector.lock.yml @@ -189,7 +189,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Enforce strict mode policy if: ${{ vars.GH_AW_POLICY_STRICT == 'true' }} run: | diff --git a/.github/workflows/mergefest.lock.yml b/.github/workflows/mergefest.lock.yml index 8d532bcaeba..2effafef12b 100644 --- a/.github/workflows/mergefest.lock.yml +++ b/.github/workflows/mergefest.lock.yml @@ -172,7 +172,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/metrics-collector.lock.yml b/.github/workflows/metrics-collector.lock.yml index f4b82fe6ab6..b7d895ed98a 100644 --- a/.github/workflows/metrics-collector.lock.yml +++ b/.github/workflows/metrics-collector.lock.yml @@ -168,7 +168,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/necromancer.lock.yml b/.github/workflows/necromancer.lock.yml index a3a97ec51bd..d6cfd0aac8c 100644 --- a/.github/workflows/necromancer.lock.yml +++ b/.github/workflows/necromancer.lock.yml @@ -184,7 +184,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/notion-issue-summary.lock.yml b/.github/workflows/notion-issue-summary.lock.yml index b091adf865e..0655c5a1795 100644 --- a/.github/workflows/notion-issue-summary.lock.yml +++ b/.github/workflows/notion-issue-summary.lock.yml @@ -165,7 +165,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/objective-impact-report.lock.yml b/.github/workflows/objective-impact-report.lock.yml index 75c2f695df3..3648b0b3cbf 100644 --- a/.github/workflows/objective-impact-report.lock.yml +++ b/.github/workflows/objective-impact-report.lock.yml @@ -149,7 +149,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/org-health-report.lock.yml b/.github/workflows/org-health-report.lock.yml index 7c54e8d6493..1ec112def54 100644 --- a/.github/workflows/org-health-report.lock.yml +++ b/.github/workflows/org-health-report.lock.yml @@ -170,7 +170,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/outcome-collector.lock.yml b/.github/workflows/outcome-collector.lock.yml index 640e171eb4f..a09a9f96b23 100644 --- a/.github/workflows/outcome-collector.lock.yml +++ b/.github/workflows/outcome-collector.lock.yml @@ -164,7 +164,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/pdf-summary.lock.yml b/.github/workflows/pdf-summary.lock.yml index a0aa0568d99..9f8296e1d2d 100644 --- a/.github/workflows/pdf-summary.lock.yml +++ b/.github/workflows/pdf-summary.lock.yml @@ -182,7 +182,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/plan.lock.yml b/.github/workflows/plan.lock.yml index 08b743bed06..244059a78a6 100644 --- a/.github/workflows/plan.lock.yml +++ b/.github/workflows/plan.lock.yml @@ -175,7 +175,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/poem-bot.lock.yml b/.github/workflows/poem-bot.lock.yml index 2a32f8e5d1d..e452df17aa9 100644 --- a/.github/workflows/poem-bot.lock.yml +++ b/.github/workflows/poem-bot.lock.yml @@ -184,7 +184,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/ponytail-reviewer.lock.yml b/.github/workflows/ponytail-reviewer.lock.yml index ae3b1333679..bfc6b4ef7cd 100644 --- a/.github/workflows/ponytail-reviewer.lock.yml +++ b/.github/workflows/ponytail-reviewer.lock.yml @@ -190,7 +190,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/portfolio-analyst.lock.yml b/.github/workflows/portfolio-analyst.lock.yml index 9909f8576a9..7a454f6e47f 100644 --- a/.github/workflows/portfolio-analyst.lock.yml +++ b/.github/workflows/portfolio-analyst.lock.yml @@ -162,7 +162,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/pr-code-quality-reviewer.lock.yml b/.github/workflows/pr-code-quality-reviewer.lock.yml index ffed0edfbc2..a97d3457012 100644 --- a/.github/workflows/pr-code-quality-reviewer.lock.yml +++ b/.github/workflows/pr-code-quality-reviewer.lock.yml @@ -189,7 +189,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/pr-description-caveman.lock.yml b/.github/workflows/pr-description-caveman.lock.yml index 9bb828623c3..609fddd8c1a 100644 --- a/.github/workflows/pr-description-caveman.lock.yml +++ b/.github/workflows/pr-description-caveman.lock.yml @@ -153,7 +153,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/pr-nitpick-reviewer.lock.yml b/.github/workflows/pr-nitpick-reviewer.lock.yml index c3b55588e74..bf7ed94e782 100644 --- a/.github/workflows/pr-nitpick-reviewer.lock.yml +++ b/.github/workflows/pr-nitpick-reviewer.lock.yml @@ -174,7 +174,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/pr-sous-chef.lock.yml b/.github/workflows/pr-sous-chef.lock.yml index 83fd2faed22..a575c9eb892 100644 --- a/.github/workflows/pr-sous-chef.lock.yml +++ b/.github/workflows/pr-sous-chef.lock.yml @@ -178,7 +178,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/pr-triage-agent.lock.yml b/.github/workflows/pr-triage-agent.lock.yml index 74185567f6c..e39cf5d06b2 100644 --- a/.github/workflows/pr-triage-agent.lock.yml +++ b/.github/workflows/pr-triage-agent.lock.yml @@ -167,7 +167,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/prompt-clustering-analysis.lock.yml b/.github/workflows/prompt-clustering-analysis.lock.yml index cbc965a6299..477706d70eb 100644 --- a/.github/workflows/prompt-clustering-analysis.lock.yml +++ b/.github/workflows/prompt-clustering-analysis.lock.yml @@ -183,7 +183,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/purelock.lock.yml b/.github/workflows/purelock.lock.yml index 5e028941401..34dab32e967 100644 --- a/.github/workflows/purelock.lock.yml +++ b/.github/workflows/purelock.lock.yml @@ -181,7 +181,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/python-data-charts.lock.yml b/.github/workflows/python-data-charts.lock.yml index 1f0ca8c0f3a..75d022a9e30 100644 --- a/.github/workflows/python-data-charts.lock.yml +++ b/.github/workflows/python-data-charts.lock.yml @@ -170,7 +170,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/q.lock.yml b/.github/workflows/q.lock.yml index 84c8e1112f6..a06c577b48c 100644 --- a/.github/workflows/q.lock.yml +++ b/.github/workflows/q.lock.yml @@ -197,7 +197,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/refactoring-cadence.lock.yml b/.github/workflows/refactoring-cadence.lock.yml index 94edb3c828d..949d05bb827 100644 --- a/.github/workflows/refactoring-cadence.lock.yml +++ b/.github/workflows/refactoring-cadence.lock.yml @@ -170,7 +170,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/refiner.lock.yml b/.github/workflows/refiner.lock.yml index 173459bf69f..4e793d37946 100644 --- a/.github/workflows/refiner.lock.yml +++ b/.github/workflows/refiner.lock.yml @@ -196,7 +196,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/release.lock.yml b/.github/workflows/release.lock.yml index ed0b6de3f0e..7c0bb14cc45 100644 --- a/.github/workflows/release.lock.yml +++ b/.github/workflows/release.lock.yml @@ -183,7 +183,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/repo-audit-analyzer.lock.yml b/.github/workflows/repo-audit-analyzer.lock.yml index c5d299d14cc..a717c83c656 100644 --- a/.github/workflows/repo-audit-analyzer.lock.yml +++ b/.github/workflows/repo-audit-analyzer.lock.yml @@ -170,7 +170,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/repo-tree-map.lock.yml b/.github/workflows/repo-tree-map.lock.yml index 68a05acf538..bf7d2361b42 100644 --- a/.github/workflows/repo-tree-map.lock.yml +++ b/.github/workflows/repo-tree-map.lock.yml @@ -163,7 +163,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/repository-quality-improver.lock.yml b/.github/workflows/repository-quality-improver.lock.yml index 0bb0abf459b..ccc6a4869b1 100644 --- a/.github/workflows/repository-quality-improver.lock.yml +++ b/.github/workflows/repository-quality-improver.lock.yml @@ -172,7 +172,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/research.lock.yml b/.github/workflows/research.lock.yml index 926f40482c2..d50006934c4 100644 --- a/.github/workflows/research.lock.yml +++ b/.github/workflows/research.lock.yml @@ -167,7 +167,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/ruflo-backed-task.lock.yml b/.github/workflows/ruflo-backed-task.lock.yml index d2d8cc3d3ff..63250bac7ac 100644 --- a/.github/workflows/ruflo-backed-task.lock.yml +++ b/.github/workflows/ruflo-backed-task.lock.yml @@ -166,7 +166,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/safe-output-health.lock.yml b/.github/workflows/safe-output-health.lock.yml index 4eb11150763..ae95c37e5be 100644 --- a/.github/workflows/safe-output-health.lock.yml +++ b/.github/workflows/safe-output-health.lock.yml @@ -172,7 +172,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/schema-consistency-checker.lock.yml b/.github/workflows/schema-consistency-checker.lock.yml index d89a91c27fe..caa882ff7b5 100644 --- a/.github/workflows/schema-consistency-checker.lock.yml +++ b/.github/workflows/schema-consistency-checker.lock.yml @@ -170,7 +170,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/schema-feature-coverage.lock.yml b/.github/workflows/schema-feature-coverage.lock.yml index ca8d0e824c8..273293ef5e4 100644 --- a/.github/workflows/schema-feature-coverage.lock.yml +++ b/.github/workflows/schema-feature-coverage.lock.yml @@ -165,7 +165,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/scout.lock.yml b/.github/workflows/scout.lock.yml index 31ed57bd21d..594c5ce92a5 100644 --- a/.github/workflows/scout.lock.yml +++ b/.github/workflows/scout.lock.yml @@ -195,7 +195,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/security-compliance.lock.yml b/.github/workflows/security-compliance.lock.yml index 8163f54a72c..e2ff26bab9b 100644 --- a/.github/workflows/security-compliance.lock.yml +++ b/.github/workflows/security-compliance.lock.yml @@ -172,7 +172,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/security-review.lock.yml b/.github/workflows/security-review.lock.yml index 014e5f9f07b..fc37dc83331 100644 --- a/.github/workflows/security-review.lock.yml +++ b/.github/workflows/security-review.lock.yml @@ -176,7 +176,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/semantic-function-refactor.lock.yml b/.github/workflows/semantic-function-refactor.lock.yml index 53f6f97571f..f435fa1d6ea 100644 --- a/.github/workflows/semantic-function-refactor.lock.yml +++ b/.github/workflows/semantic-function-refactor.lock.yml @@ -170,7 +170,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/sergo.lock.yml b/.github/workflows/sergo.lock.yml index 821ebeeb7d9..813348948cf 100644 --- a/.github/workflows/sergo.lock.yml +++ b/.github/workflows/sergo.lock.yml @@ -171,7 +171,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/sighthound-security-scan.lock.yml b/.github/workflows/sighthound-security-scan.lock.yml index cb09243a97c..a06368f3ef3 100644 --- a/.github/workflows/sighthound-security-scan.lock.yml +++ b/.github/workflows/sighthound-security-scan.lock.yml @@ -148,7 +148,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/skillet.lock.yml b/.github/workflows/skillet.lock.yml index 5bc08fa9ecb..8026a2d90ce 100644 --- a/.github/workflows/skillet.lock.yml +++ b/.github/workflows/skillet.lock.yml @@ -180,7 +180,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/slide-deck-maintainer.lock.yml b/.github/workflows/slide-deck-maintainer.lock.yml index 31ce6a2433f..92d36531eaf 100644 --- a/.github/workflows/slide-deck-maintainer.lock.yml +++ b/.github/workflows/slide-deck-maintainer.lock.yml @@ -182,7 +182,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-agent-all-merged.lock.yml b/.github/workflows/smoke-agent-all-merged.lock.yml index d16cf5c02e5..744625e09e4 100644 --- a/.github/workflows/smoke-agent-all-merged.lock.yml +++ b/.github/workflows/smoke-agent-all-merged.lock.yml @@ -183,7 +183,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-agent-all-none.lock.yml b/.github/workflows/smoke-agent-all-none.lock.yml index af2b8b85477..265c09f4c6d 100644 --- a/.github/workflows/smoke-agent-all-none.lock.yml +++ b/.github/workflows/smoke-agent-all-none.lock.yml @@ -183,7 +183,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-agent-public-approved.lock.yml b/.github/workflows/smoke-agent-public-approved.lock.yml index f91ca26bfc8..02875d73124 100644 --- a/.github/workflows/smoke-agent-public-approved.lock.yml +++ b/.github/workflows/smoke-agent-public-approved.lock.yml @@ -185,7 +185,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-agent-public-none.lock.yml b/.github/workflows/smoke-agent-public-none.lock.yml index 2bc9f27bd0f..3a42bbcc3e7 100644 --- a/.github/workflows/smoke-agent-public-none.lock.yml +++ b/.github/workflows/smoke-agent-public-none.lock.yml @@ -183,7 +183,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-agent-scoped-approved.lock.yml b/.github/workflows/smoke-agent-scoped-approved.lock.yml index 0dcaf7522dd..feeb835cde5 100644 --- a/.github/workflows/smoke-agent-scoped-approved.lock.yml +++ b/.github/workflows/smoke-agent-scoped-approved.lock.yml @@ -184,7 +184,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-aider.lock.yml b/.github/workflows/smoke-aider.lock.yml index 49e9f5cf12e..d62e30d6712 100644 --- a/.github/workflows/smoke-aider.lock.yml +++ b/.github/workflows/smoke-aider.lock.yml @@ -168,7 +168,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-call-workflow.lock.yml b/.github/workflows/smoke-call-workflow.lock.yml index 6cf35662565..f246c11502c 100644 --- a/.github/workflows/smoke-call-workflow.lock.yml +++ b/.github/workflows/smoke-call-workflow.lock.yml @@ -183,7 +183,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-checkout-pr-dispatch.lock.yml b/.github/workflows/smoke-checkout-pr-dispatch.lock.yml index 15b3b4fdc05..aebfb7e2652 100644 --- a/.github/workflows/smoke-checkout-pr-dispatch.lock.yml +++ b/.github/workflows/smoke-checkout-pr-dispatch.lock.yml @@ -182,7 +182,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-ci.lock.yml b/.github/workflows/smoke-ci.lock.yml index 7b6d56e53d8..d2b076fb5cc 100644 --- a/.github/workflows/smoke-ci.lock.yml +++ b/.github/workflows/smoke-ci.lock.yml @@ -195,7 +195,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-claude-on-copilot.lock.yml b/.github/workflows/smoke-claude-on-copilot.lock.yml index ba58f8de544..d536261ba92 100644 --- a/.github/workflows/smoke-claude-on-copilot.lock.yml +++ b/.github/workflows/smoke-claude-on-copilot.lock.yml @@ -158,7 +158,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-claude.lock.yml b/.github/workflows/smoke-claude.lock.yml index b89c3603dda..cef84ac4b0b 100644 --- a/.github/workflows/smoke-claude.lock.yml +++ b/.github/workflows/smoke-claude.lock.yml @@ -198,7 +198,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-codex.lock.yml b/.github/workflows/smoke-codex.lock.yml index a0a06c66989..9bf29c81fe9 100644 --- a/.github/workflows/smoke-codex.lock.yml +++ b/.github/workflows/smoke-codex.lock.yml @@ -193,7 +193,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-copilot-aoai-apikey.lock.yml b/.github/workflows/smoke-copilot-aoai-apikey.lock.yml index 85edf57b0c8..73c0318b6f3 100644 --- a/.github/workflows/smoke-copilot-aoai-apikey.lock.yml +++ b/.github/workflows/smoke-copilot-aoai-apikey.lock.yml @@ -194,7 +194,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-copilot-aoai-entra.lock.yml b/.github/workflows/smoke-copilot-aoai-entra.lock.yml index fdac306b547..51deee2733f 100644 --- a/.github/workflows/smoke-copilot-aoai-entra.lock.yml +++ b/.github/workflows/smoke-copilot-aoai-entra.lock.yml @@ -198,7 +198,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-copilot-arm.lock.yml b/.github/workflows/smoke-copilot-arm.lock.yml index 3c92b44c797..32b625a5e5d 100644 --- a/.github/workflows/smoke-copilot-arm.lock.yml +++ b/.github/workflows/smoke-copilot-arm.lock.yml @@ -194,7 +194,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-copilot-auto.lock.yml b/.github/workflows/smoke-copilot-auto.lock.yml index bc3ec0725e5..f896ae5aaf6 100644 --- a/.github/workflows/smoke-copilot-auto.lock.yml +++ b/.github/workflows/smoke-copilot-auto.lock.yml @@ -165,7 +165,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-copilot-mai.lock.yml b/.github/workflows/smoke-copilot-mai.lock.yml index e7a407b2edf..a540aab1953 100644 --- a/.github/workflows/smoke-copilot-mai.lock.yml +++ b/.github/workflows/smoke-copilot-mai.lock.yml @@ -164,7 +164,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-copilot-sdk.lock.yml b/.github/workflows/smoke-copilot-sdk.lock.yml index fbb6b994cec..9986e6cf89f 100644 --- a/.github/workflows/smoke-copilot-sdk.lock.yml +++ b/.github/workflows/smoke-copilot-sdk.lock.yml @@ -163,7 +163,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-copilot-small.lock.yml b/.github/workflows/smoke-copilot-small.lock.yml index f3748f2d996..09879ab6c89 100644 --- a/.github/workflows/smoke-copilot-small.lock.yml +++ b/.github/workflows/smoke-copilot-small.lock.yml @@ -163,7 +163,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-copilot-sub-agents.lock.yml b/.github/workflows/smoke-copilot-sub-agents.lock.yml index fb520b97839..820deaea1eb 100644 --- a/.github/workflows/smoke-copilot-sub-agents.lock.yml +++ b/.github/workflows/smoke-copilot-sub-agents.lock.yml @@ -149,7 +149,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-copilot.lock.yml b/.github/workflows/smoke-copilot.lock.yml index a426b381319..e6bbf66c8c1 100644 --- a/.github/workflows/smoke-copilot.lock.yml +++ b/.github/workflows/smoke-copilot.lock.yml @@ -195,7 +195,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-create-cross-repo-pr.lock.yml b/.github/workflows/smoke-create-cross-repo-pr.lock.yml index d9a345fbde0..829e5fc4b83 100644 --- a/.github/workflows/smoke-create-cross-repo-pr.lock.yml +++ b/.github/workflows/smoke-create-cross-repo-pr.lock.yml @@ -183,7 +183,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-crush.lock.yml b/.github/workflows/smoke-crush.lock.yml index 8a2fb7574d9..cc9a40f1e89 100644 --- a/.github/workflows/smoke-crush.lock.yml +++ b/.github/workflows/smoke-crush.lock.yml @@ -184,7 +184,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-cursor.lock.yml b/.github/workflows/smoke-cursor.lock.yml index c18816d0f0b..7947e2437d5 100644 --- a/.github/workflows/smoke-cursor.lock.yml +++ b/.github/workflows/smoke-cursor.lock.yml @@ -186,7 +186,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-deepseek-harness.lock.yml b/.github/workflows/smoke-deepseek-harness.lock.yml index a94df58497d..1e42f97542d 100644 --- a/.github/workflows/smoke-deepseek-harness.lock.yml +++ b/.github/workflows/smoke-deepseek-harness.lock.yml @@ -185,7 +185,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-drive.lock.yml b/.github/workflows/smoke-drive.lock.yml index 8f26d293ee6..76387cf98de 100644 --- a/.github/workflows/smoke-drive.lock.yml +++ b/.github/workflows/smoke-drive.lock.yml @@ -170,7 +170,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-gemini.lock.yml b/.github/workflows/smoke-gemini.lock.yml index 652b23b4d66..bde72a480c6 100644 --- a/.github/workflows/smoke-gemini.lock.yml +++ b/.github/workflows/smoke-gemini.lock.yml @@ -188,7 +188,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-github-claude.lock.yml b/.github/workflows/smoke-github-claude.lock.yml index 82d36126a92..f2d96c69fe1 100644 --- a/.github/workflows/smoke-github-claude.lock.yml +++ b/.github/workflows/smoke-github-claude.lock.yml @@ -158,7 +158,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-goose.lock.yml b/.github/workflows/smoke-goose.lock.yml index f380f48155b..7535f3a7dbf 100644 --- a/.github/workflows/smoke-goose.lock.yml +++ b/.github/workflows/smoke-goose.lock.yml @@ -184,7 +184,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-kiro.lock.yml b/.github/workflows/smoke-kiro.lock.yml index 48d74e1fc09..fd35af2264f 100644 --- a/.github/workflows/smoke-kiro.lock.yml +++ b/.github/workflows/smoke-kiro.lock.yml @@ -186,7 +186,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-multi-pr.lock.yml b/.github/workflows/smoke-multi-pr.lock.yml index 4cd1ab42ece..cf2bfc77a29 100644 --- a/.github/workflows/smoke-multi-pr.lock.yml +++ b/.github/workflows/smoke-multi-pr.lock.yml @@ -183,7 +183,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-opencode.lock.yml b/.github/workflows/smoke-opencode.lock.yml index 2e4853df146..83a1b6a815e 100644 --- a/.github/workflows/smoke-opencode.lock.yml +++ b/.github/workflows/smoke-opencode.lock.yml @@ -186,7 +186,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-otel-backends.lock.yml b/.github/workflows/smoke-otel-backends.lock.yml index 0ca93389af5..f2ff3063348 100644 --- a/.github/workflows/smoke-otel-backends.lock.yml +++ b/.github/workflows/smoke-otel-backends.lock.yml @@ -196,7 +196,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-pi.lock.yml b/.github/workflows/smoke-pi.lock.yml index 4b78264bc84..1d2bbb67440 100644 --- a/.github/workflows/smoke-pi.lock.yml +++ b/.github/workflows/smoke-pi.lock.yml @@ -187,7 +187,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-project.lock.yml b/.github/workflows/smoke-project.lock.yml index f5789932849..75efab0a825 100644 --- a/.github/workflows/smoke-project.lock.yml +++ b/.github/workflows/smoke-project.lock.yml @@ -192,7 +192,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-pydantic.lock.yml b/.github/workflows/smoke-pydantic.lock.yml index 6ab8141f405..c0007a1e53b 100644 --- a/.github/workflows/smoke-pydantic.lock.yml +++ b/.github/workflows/smoke-pydantic.lock.yml @@ -168,7 +168,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-service-ports.lock.yml b/.github/workflows/smoke-service-ports.lock.yml index cc0fdce910e..f2a291f21b2 100644 --- a/.github/workflows/smoke-service-ports.lock.yml +++ b/.github/workflows/smoke-service-ports.lock.yml @@ -174,7 +174,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-temporary-id.lock.yml b/.github/workflows/smoke-temporary-id.lock.yml index 4916bd784d1..7bdaabca379 100644 --- a/.github/workflows/smoke-temporary-id.lock.yml +++ b/.github/workflows/smoke-temporary-id.lock.yml @@ -185,7 +185,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-test-tools.lock.yml b/.github/workflows/smoke-test-tools.lock.yml index 7c77157f4dc..f0e27f3424a 100644 --- a/.github/workflows/smoke-test-tools.lock.yml +++ b/.github/workflows/smoke-test-tools.lock.yml @@ -187,7 +187,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-update-cross-repo-pr.lock.yml b/.github/workflows/smoke-update-cross-repo-pr.lock.yml index 95ebd309463..4d42090971c 100644 --- a/.github/workflows/smoke-update-cross-repo-pr.lock.yml +++ b/.github/workflows/smoke-update-cross-repo-pr.lock.yml @@ -184,7 +184,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-workflow-call-with-inputs.lock.yml b/.github/workflows/smoke-workflow-call-with-inputs.lock.yml index ff60bbb7b11..d384ffe587b 100644 --- a/.github/workflows/smoke-workflow-call-with-inputs.lock.yml +++ b/.github/workflows/smoke-workflow-call-with-inputs.lock.yml @@ -232,7 +232,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-workflow-call.lock.yml b/.github/workflows/smoke-workflow-call.lock.yml index 6059d045a87..83fa5e8c1ae 100644 --- a/.github/workflows/smoke-workflow-call.lock.yml +++ b/.github/workflows/smoke-workflow-call.lock.yml @@ -236,7 +236,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/spec-enforcer.lock.yml b/.github/workflows/spec-enforcer.lock.yml index f49b1a7140c..4198a121e7e 100644 --- a/.github/workflows/spec-enforcer.lock.yml +++ b/.github/workflows/spec-enforcer.lock.yml @@ -178,7 +178,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/spec-extractor.lock.yml b/.github/workflows/spec-extractor.lock.yml index 94c3fa73723..8f4188c3869 100644 --- a/.github/workflows/spec-extractor.lock.yml +++ b/.github/workflows/spec-extractor.lock.yml @@ -174,7 +174,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/spec-librarian.lock.yml b/.github/workflows/spec-librarian.lock.yml index 717cdd71c00..b8013d88e51 100644 --- a/.github/workflows/spec-librarian.lock.yml +++ b/.github/workflows/spec-librarian.lock.yml @@ -174,7 +174,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/squad-game-planner.lock.yml b/.github/workflows/squad-game-planner.lock.yml index 53ead984dc9..80db66016cf 100644 --- a/.github/workflows/squad-game-planner.lock.yml +++ b/.github/workflows/squad-game-planner.lock.yml @@ -150,7 +150,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/squad-implement-worker.lock.yml b/.github/workflows/squad-implement-worker.lock.yml index b3b7d321f31..faf1f98d3c3 100644 --- a/.github/workflows/squad-implement-worker.lock.yml +++ b/.github/workflows/squad-implement-worker.lock.yml @@ -171,7 +171,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/squad-plan.lock.yml b/.github/workflows/squad-plan.lock.yml index c18d58c1e56..96ce30ad829 100644 --- a/.github/workflows/squad-plan.lock.yml +++ b/.github/workflows/squad-plan.lock.yml @@ -159,7 +159,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/squad.lock.yml b/.github/workflows/squad.lock.yml index 7309842ea5d..872bd63c03c 100644 --- a/.github/workflows/squad.lock.yml +++ b/.github/workflows/squad.lock.yml @@ -188,7 +188,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/stale-pr-cleanup.lock.yml b/.github/workflows/stale-pr-cleanup.lock.yml index 074cc7f2cd5..a21bc9c986c 100644 --- a/.github/workflows/stale-pr-cleanup.lock.yml +++ b/.github/workflows/stale-pr-cleanup.lock.yml @@ -162,7 +162,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/stale-repo-identifier.lock.yml b/.github/workflows/stale-repo-identifier.lock.yml index 0f94124d82d..503f1ade83b 100644 --- a/.github/workflows/stale-repo-identifier.lock.yml +++ b/.github/workflows/stale-repo-identifier.lock.yml @@ -184,7 +184,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/static-analysis-report.lock.yml b/.github/workflows/static-analysis-report.lock.yml index 5920ac9ddd9..ae8560b06ab 100644 --- a/.github/workflows/static-analysis-report.lock.yml +++ b/.github/workflows/static-analysis-report.lock.yml @@ -171,7 +171,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/step-name-alignment.lock.yml b/.github/workflows/step-name-alignment.lock.yml index 50aac71ea57..622e6c4cc82 100644 --- a/.github/workflows/step-name-alignment.lock.yml +++ b/.github/workflows/step-name-alignment.lock.yml @@ -167,7 +167,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/sub-issue-closer.lock.yml b/.github/workflows/sub-issue-closer.lock.yml index 41d7af33586..602deae3536 100644 --- a/.github/workflows/sub-issue-closer.lock.yml +++ b/.github/workflows/sub-issue-closer.lock.yml @@ -167,7 +167,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/super-linter.lock.yml b/.github/workflows/super-linter.lock.yml index 483532f8593..42c0a91b7d7 100644 --- a/.github/workflows/super-linter.lock.yml +++ b/.github/workflows/super-linter.lock.yml @@ -165,7 +165,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/technical-doc-writer.lock.yml b/.github/workflows/technical-doc-writer.lock.yml index a9e062e30ba..55cac3b76ba 100644 --- a/.github/workflows/technical-doc-writer.lock.yml +++ b/.github/workflows/technical-doc-writer.lock.yml @@ -177,7 +177,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/terminal-stylist.lock.yml b/.github/workflows/terminal-stylist.lock.yml index 17184e05db0..04e836954e7 100644 --- a/.github/workflows/terminal-stylist.lock.yml +++ b/.github/workflows/terminal-stylist.lock.yml @@ -170,7 +170,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/test-quality-sentinel.lock.yml b/.github/workflows/test-quality-sentinel.lock.yml index 70289fc53d1..04e5ca36b02 100644 --- a/.github/workflows/test-quality-sentinel.lock.yml +++ b/.github/workflows/test-quality-sentinel.lock.yml @@ -183,7 +183,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/tidy.lock.yml b/.github/workflows/tidy.lock.yml index 373555a35c9..ee4fd655fee 100644 --- a/.github/workflows/tidy.lock.yml +++ b/.github/workflows/tidy.lock.yml @@ -182,7 +182,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/typist.lock.yml b/.github/workflows/typist.lock.yml index 8e5c74cc7a2..8d6b3745be6 100644 --- a/.github/workflows/typist.lock.yml +++ b/.github/workflows/typist.lock.yml @@ -177,7 +177,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/ubuntu-image-analyzer.lock.yml b/.github/workflows/ubuntu-image-analyzer.lock.yml index d60d4c33042..0cb1246a992 100644 --- a/.github/workflows/ubuntu-image-analyzer.lock.yml +++ b/.github/workflows/ubuntu-image-analyzer.lock.yml @@ -177,7 +177,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/uk-ai-operational-resilience.lock.yml b/.github/workflows/uk-ai-operational-resilience.lock.yml index c75388c1ff0..27e54739bcc 100644 --- a/.github/workflows/uk-ai-operational-resilience.lock.yml +++ b/.github/workflows/uk-ai-operational-resilience.lock.yml @@ -174,7 +174,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/unbloat-docs.lock.yml b/.github/workflows/unbloat-docs.lock.yml index 863b1ebf9cf..2ec207bbc91 100644 --- a/.github/workflows/unbloat-docs.lock.yml +++ b/.github/workflows/unbloat-docs.lock.yml @@ -185,7 +185,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/update-astro.lock.yml b/.github/workflows/update-astro.lock.yml index 0005141330d..da3bffd8d77 100644 --- a/.github/workflows/update-astro.lock.yml +++ b/.github/workflows/update-astro.lock.yml @@ -177,7 +177,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/video-analyzer.lock.yml b/.github/workflows/video-analyzer.lock.yml index 70b1c322e5d..1f66a6f5cf0 100644 --- a/.github/workflows/video-analyzer.lock.yml +++ b/.github/workflows/video-analyzer.lock.yml @@ -165,7 +165,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/visual-regression-checker.lock.yml b/.github/workflows/visual-regression-checker.lock.yml index 283e68e03fe..cd460377e72 100644 --- a/.github/workflows/visual-regression-checker.lock.yml +++ b/.github/workflows/visual-regression-checker.lock.yml @@ -175,7 +175,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/weekly-blog-post-writer.lock.yml b/.github/workflows/weekly-blog-post-writer.lock.yml index c93babb6581..8ba1fcefdb1 100644 --- a/.github/workflows/weekly-blog-post-writer.lock.yml +++ b/.github/workflows/weekly-blog-post-writer.lock.yml @@ -177,7 +177,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/weekly-editors-health-check.lock.yml b/.github/workflows/weekly-editors-health-check.lock.yml index c52adc96ee7..175f8b067aa 100644 --- a/.github/workflows/weekly-editors-health-check.lock.yml +++ b/.github/workflows/weekly-editors-health-check.lock.yml @@ -168,7 +168,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/weekly-issue-summary.lock.yml b/.github/workflows/weekly-issue-summary.lock.yml index 201d0b351c6..013bd4af9ce 100644 --- a/.github/workflows/weekly-issue-summary.lock.yml +++ b/.github/workflows/weekly-issue-summary.lock.yml @@ -172,7 +172,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/weekly-network-domains-audit.lock.yml b/.github/workflows/weekly-network-domains-audit.lock.yml index 106c4ef4211..74132fe115d 100644 --- a/.github/workflows/weekly-network-domains-audit.lock.yml +++ b/.github/workflows/weekly-network-domains-audit.lock.yml @@ -146,7 +146,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/weekly-safe-outputs-spec-review.lock.yml b/.github/workflows/weekly-safe-outputs-spec-review.lock.yml index 13787e90acf..935cee14809 100644 --- a/.github/workflows/weekly-safe-outputs-spec-review.lock.yml +++ b/.github/workflows/weekly-safe-outputs-spec-review.lock.yml @@ -171,7 +171,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/workflow-generator.lock.yml b/.github/workflows/workflow-generator.lock.yml index 23781cb4460..2cb815af408 100644 --- a/.github/workflows/workflow-generator.lock.yml +++ b/.github/workflows/workflow-generator.lock.yml @@ -169,7 +169,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/workflow-health-manager.lock.yml b/.github/workflows/workflow-health-manager.lock.yml index 2b89b25cf7a..b16e474c3e0 100644 --- a/.github/workflows/workflow-health-manager.lock.yml +++ b/.github/workflows/workflow-health-manager.lock.yml @@ -164,7 +164,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/workflow-normalizer.lock.yml b/.github/workflows/workflow-normalizer.lock.yml index 040b1f61f43..064a01148c1 100644 --- a/.github/workflows/workflow-normalizer.lock.yml +++ b/.github/workflows/workflow-normalizer.lock.yml @@ -167,7 +167,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/workflow-skill-extractor.lock.yml b/.github/workflows/workflow-skill-extractor.lock.yml index c34d849f0ed..ee1145f7481 100644 --- a/.github/workflows/workflow-skill-extractor.lock.yml +++ b/.github/workflows/workflow-skill-extractor.lock.yml @@ -162,7 +162,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} From cdb7566ecf2023e7ba16e3ed5c43cf9e172f4717 Mon Sep 17 00:00:00 2001 From: Mara Nikola Kiefer Date: Mon, 24 Aug 2026 15:35:39 +0200 Subject: [PATCH 09/11] test: refresh generated output expectations --- actions/setup/js/pi_provider.test.cjs | 5 ++--- .../testdata/TestWasmGolden_AllEngines/claude.golden | 2 +- pkg/workflow/testdata/TestWasmGolden_AllEngines/codex.golden | 2 +- .../testdata/TestWasmGolden_AllEngines/copilot.golden | 2 +- .../testdata/TestWasmGolden_AllEngines/gemini.golden | 2 +- pkg/workflow/testdata/TestWasmGolden_AllEngines/pi.golden | 2 +- .../TestWasmGolden_CompileFixtures/basic-copilot.golden | 2 +- .../playwright-cli-mode.golden | 2 +- .../TestWasmGolden_CompileFixtures/smoke-copilot.golden | 2 +- .../TestWasmGolden_CompileFixtures/with-imports.golden | 2 +- 10 files changed, 11 insertions(+), 12 deletions(-) diff --git a/actions/setup/js/pi_provider.test.cjs b/actions/setup/js/pi_provider.test.cjs index a4530f2019c..609211e85f8 100644 --- a/actions/setup/js/pi_provider.test.cjs +++ b/actions/setup/js/pi_provider.test.cjs @@ -212,10 +212,9 @@ describe("pi_provider.cjs", () => { module.default(pi); await handlers.agent_start(); + const reflectOutputPath = path.join(process.env.RUNNER_TEMP || os.tmpdir(), "awf-reflect.json"); expect( - stderrOutput.some(line => - line.includes('reflect_failure phase=agent_start provider=copilot model=copilot/claude-sonnet-4 url=http://api-proxy:10000/reflect output=/tmp/gh-aw/sandbox/firewall/awf-reflect.json reason=request_failed error="ECONNREFUSED"') - ) + stderrOutput.some(line => line.includes(`reflect_failure phase=agent_start provider=copilot model=copilot/claude-sonnet-4 url=http://api-proxy:10000/reflect output=${reflectOutputPath} reason=request_failed error="ECONNREFUSED"`)) ).toBe(true); }); diff --git a/pkg/workflow/testdata/TestWasmGolden_AllEngines/claude.golden b/pkg/workflow/testdata/TestWasmGolden_AllEngines/claude.golden index 3b17e675e19..72aa3b87130 100644 --- a/pkg/workflow/testdata/TestWasmGolden_AllEngines/claude.golden +++ b/pkg/workflow/testdata/TestWasmGolden_AllEngines/claude.golden @@ -94,7 +94,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/pkg/workflow/testdata/TestWasmGolden_AllEngines/codex.golden b/pkg/workflow/testdata/TestWasmGolden_AllEngines/codex.golden index 2cd7f010c59..594eb685b27 100644 --- a/pkg/workflow/testdata/TestWasmGolden_AllEngines/codex.golden +++ b/pkg/workflow/testdata/TestWasmGolden_AllEngines/codex.golden @@ -94,7 +94,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/pkg/workflow/testdata/TestWasmGolden_AllEngines/copilot.golden b/pkg/workflow/testdata/TestWasmGolden_AllEngines/copilot.golden index 479c12a3a54..b3a70b47aab 100644 --- a/pkg/workflow/testdata/TestWasmGolden_AllEngines/copilot.golden +++ b/pkg/workflow/testdata/TestWasmGolden_AllEngines/copilot.golden @@ -94,7 +94,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/pkg/workflow/testdata/TestWasmGolden_AllEngines/gemini.golden b/pkg/workflow/testdata/TestWasmGolden_AllEngines/gemini.golden index daa0c657f54..214644f61a0 100644 --- a/pkg/workflow/testdata/TestWasmGolden_AllEngines/gemini.golden +++ b/pkg/workflow/testdata/TestWasmGolden_AllEngines/gemini.golden @@ -94,7 +94,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/pkg/workflow/testdata/TestWasmGolden_AllEngines/pi.golden b/pkg/workflow/testdata/TestWasmGolden_AllEngines/pi.golden index 72fd56d4f96..2106becf109 100644 --- a/pkg/workflow/testdata/TestWasmGolden_AllEngines/pi.golden +++ b/pkg/workflow/testdata/TestWasmGolden_AllEngines/pi.golden @@ -94,7 +94,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/basic-copilot.golden b/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/basic-copilot.golden index 91cf394c316..3222b0bfd3d 100644 --- a/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/basic-copilot.golden +++ b/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/basic-copilot.golden @@ -94,7 +94,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/playwright-cli-mode.golden b/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/playwright-cli-mode.golden index 015770f1dcd..4f172d6dd2d 100644 --- a/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/playwright-cli-mode.golden +++ b/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/playwright-cli-mode.golden @@ -94,7 +94,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/smoke-copilot.golden b/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/smoke-copilot.golden index dbb7b1dfc8c..fe01d7cb3e3 100644 --- a/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/smoke-copilot.golden +++ b/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/smoke-copilot.golden @@ -107,7 +107,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/with-imports.golden b/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/with-imports.golden index 139c9e51104..303b7955bfc 100644 --- a/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/with-imports.golden +++ b/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/with-imports.golden @@ -94,7 +94,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context); + await main(core, context, github); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} From f3c2857fb02bdbc95b8e7535a28e8cc977402b86 Mon Sep 17 00:00:00 2001 From: Mara Nikola Kiefer Date: Mon, 24 Aug 2026 15:48:18 +0200 Subject: [PATCH 10/11] Update main function signature to use githubClient --- .github/workflows/ab-testing-advisor.lock.yml | 2 +- .github/workflows/ace-editor.lock.yml | 2 +- .github/workflows/agent-job-health.lock.yml | 2 +- .github/workflows/agent-performance-analyzer.lock.yml | 2 +- .github/workflows/agent-persona-explorer.lock.yml | 2 +- .github/workflows/agentic-token-audit.lock.yml | 2 +- .github/workflows/agentic-token-optimizer.lock.yml | 2 +- .github/workflows/agentic-token-trend-audit.lock.yml | 2 +- .github/workflows/ai-moderator.lock.yml | 2 +- .github/workflows/api-consumption-report.lock.yml | 2 +- .github/workflows/approach-validator.lock.yml | 2 +- .github/workflows/archie.lock.yml | 2 +- .github/workflows/architecture-guardian.lock.yml | 2 +- .../workflows/archivx-agentic-workflows-analyzer.lock.yml | 2 +- .github/workflows/artifacts-summary.lock.yml | 2 +- .github/workflows/audit-workflows.lock.yml | 2 +- .github/workflows/auto-triage-issues.lock.yml | 2 +- .github/workflows/avenger.lock.yml | 2 +- .github/workflows/aw-failure-investigator.lock.yml | 2 +- .github/workflows/blog-auditor.lock.yml | 2 +- .github/workflows/bot-detection.lock.yml | 2 +- .github/workflows/breaking-change-checker.lock.yml | 2 +- .github/workflows/changeset.lock.yml | 2 +- .github/workflows/chaos-pr-bundle-fuzzer.lock.yml | 2 +- .github/workflows/ci-coach.lock.yml | 2 +- .github/workflows/ci-doctor.lock.yml | 2 +- .github/workflows/claude-code-user-docs-review.lock.yml | 2 +- .github/workflows/cli-consistency-checker.lock.yml | 2 +- .github/workflows/cli-version-checker.lock.yml | 2 +- .github/workflows/cloclo.lock.yml | 2 +- .github/workflows/code-scanning-fixer.lock.yml | 2 +- .github/workflows/code-simplifier.lock.yml | 2 +- .github/workflows/codex-github-remote-mcp-test.lock.yml | 2 +- .github/workflows/commit-changes-analyzer.lock.yml | 2 +- .github/workflows/constraint-solving-potd.lock.yml | 2 +- .github/workflows/contribution-check.lock.yml | 2 +- .github/workflows/copilot-agent-analysis.lock.yml | 2 +- .github/workflows/copilot-centralization-drilldown.lock.yml | 2 +- .github/workflows/copilot-centralization-optimizer.lock.yml | 2 +- .github/workflows/copilot-cli-deep-research.lock.yml | 2 +- .github/workflows/copilot-opt.lock.yml | 2 +- .github/workflows/copilot-pr-merged-report.lock.yml | 2 +- .github/workflows/copilot-pr-nlp-analysis.lock.yml | 2 +- .github/workflows/copilot-pr-prompt-analysis.lock.yml | 2 +- .github/workflows/copilot-session-insights.lock.yml | 2 +- .github/workflows/craft.lock.yml | 2 +- .../workflows/daily-action-setup-security-audit.lock.yml | 2 +- .../workflows/daily-agent-of-the-day-blog-writer.lock.yml | 2 +- .github/workflows/daily-agentrx-trace-optimizer.lock.yml | 2 +- .github/workflows/daily-ambient-context-optimizer.lock.yml | 2 +- .github/workflows/daily-architecture-diagram.lock.yml | 2 +- .github/workflows/daily-arxiv-researcher.lock.yml | 2 +- .github/workflows/daily-assign-issue-to-user.lock.yml | 2 +- .../daily-astrostylelite-markdown-spellcheck.lock.yml | 2 +- .../workflows/daily-aw-cross-repo-compile-check.lock.yml | 2 +- .../workflows/daily-awf-spec-compiler-surfacing.lock.yml | 2 +- .github/workflows/daily-byok-ollama-test.lock.yml | 2 +- .github/workflows/daily-cache-strategy-analyzer.lock.yml | 2 +- .github/workflows/daily-caveman-optimizer.lock.yml | 2 +- .github/workflows/daily-choice-test.lock.yml | 2 +- .github/workflows/daily-cli-performance.lock.yml | 2 +- .github/workflows/daily-cli-tools-tester.lock.yml | 2 +- .github/workflows/daily-code-debt-aider.lock.yml | 2 +- .github/workflows/daily-code-metrics.lock.yml | 2 +- .github/workflows/daily-community-attribution.lock.yml | 2 +- .github/workflows/daily-compiler-quality.lock.yml | 2 +- .../workflows/daily-compiler-threat-spec-optimizer.lock.yml | 2 +- .github/workflows/daily-credit-limit-test.lock.yml | 2 +- .github/workflows/daily-doc-healer.lock.yml | 2 +- .github/workflows/daily-doc-updater.lock.yml | 2 +- .github/workflows/daily-documentation-diagram.lock.yml | 2 +- .github/workflows/daily-elixir-credo-snippet-audit.lock.yml | 2 +- .github/workflows/daily-evals-report.lock.yml | 2 +- .github/workflows/daily-experiment-report.lock.yml | 2 +- .github/workflows/daily-fact.lock.yml | 2 +- .github/workflows/daily-file-diet.lock.yml | 2 +- .github/workflows/daily-firewall-report.lock.yml | 2 +- .github/workflows/daily-formal-spec-verifier.lock.yml | 2 +- .github/workflows/daily-function-namer.lock.yml | 2 +- .github/workflows/daily-geo-optimizer.lock.yml | 2 +- .github/workflows/daily-github-docs-seo-optimizer.lock.yml | 2 +- .github/workflows/daily-go-test-parallelizer.lock.yml | 2 +- .github/workflows/daily-go-test-stubs-aider.lock.yml | 2 +- .github/workflows/daily-graft-intelligence.lock.yml | 2 +- .../workflows/daily-harness-experiment-proposer.lock.yml | 2 +- .github/workflows/daily-hippo-learn.lock.yml | 2 +- .github/workflows/daily-issues-report.lock.yml | 2 +- .github/workflows/daily-malicious-code-scan.lock.yml | 2 +- .github/workflows/daily-max-ai-credits-test.lock.yml | 2 +- .github/workflows/daily-mcp-concurrency-analysis.lock.yml | 2 +- .github/workflows/daily-model-inventory.lock.yml | 2 +- .github/workflows/daily-model-resolution.lock.yml | 2 +- .github/workflows/daily-multi-device-docs-tester.lock.yml | 2 +- .github/workflows/daily-news.lock.yml | 2 +- .github/workflows/daily-observability-report.lock.yml | 2 +- .github/workflows/daily-performance-summary.lock.yml | 2 +- .github/workflows/daily-pr-review-cursor.lock.yml | 2 +- .github/workflows/daily-regression-audit-kiro.lock.yml | 2 +- .github/workflows/daily-regulatory.lock.yml | 2 +- .github/workflows/daily-reliability-review.lock.yml | 2 +- .github/workflows/daily-rendering-scripts-verifier.lock.yml | 2 +- .github/workflows/daily-repo-chronicle.lock.yml | 2 +- .github/workflows/daily-safe-output-integrator.lock.yml | 2 +- .github/workflows/daily-safe-output-optimizer.lock.yml | 2 +- .github/workflows/daily-safe-outputs-conformance.lock.yml | 2 +- .github/workflows/daily-safeoutputs-git-simulator.lock.yml | 2 +- .github/workflows/daily-schema-audit-cursor.lock.yml | 2 +- .github/workflows/daily-secrets-analysis.lock.yml | 2 +- .github/workflows/daily-security-observability.lock.yml | 2 +- .github/workflows/daily-security-red-team.lock.yml | 2 +- .github/workflows/daily-semgrep-scan.lock.yml | 2 +- .github/workflows/daily-spdd-spec-planner.lock.yml | 2 +- .github/workflows/daily-spec-coverage-kiro.lock.yml | 2 +- .github/workflows/daily-spending-forecast.lock.yml | 2 +- .github/workflows/daily-squid-image-scan.lock.yml | 2 +- .github/workflows/daily-storify.lock.yml | 2 +- .github/workflows/daily-syntax-error-quality.lock.yml | 2 +- .github/workflows/daily-team-evolution-insights.lock.yml | 2 +- .github/workflows/daily-team-status.lock.yml | 2 +- .github/workflows/daily-testify-uber-super-expert.lock.yml | 2 +- .github/workflows/daily-token-consumption-report.lock.yml | 2 +- .../workflows/daily-trajectory-grader-implementer.lock.yml | 2 +- .github/workflows/daily-vulnhunter-scan.lock.yml | 2 +- .../daily-windows-terminal-integration-builder.lock.yml | 2 +- .github/workflows/daily-workflow-updater.lock.yml | 2 +- .github/workflows/daily-yamllint-fixer.lock.yml | 2 +- .github/workflows/dataflow-pr-discussion-dataset.lock.yml | 2 +- .github/workflows/dead-code-remover.lock.yml | 2 +- .github/workflows/deep-report.lock.yml | 2 +- .github/workflows/deepsec-security-scan.lock.yml | 2 +- .github/workflows/delight.lock.yml | 2 +- .github/workflows/dependabot-burner.lock.yml | 2 +- .github/workflows/dependabot-go-checker.lock.yml | 2 +- .github/workflows/deployment-incident-monitor.lock.yml | 2 +- .github/workflows/design-decision-gate.lock.yml | 2 +- .github/workflows/designer-drift-audit.lock.yml | 2 +- .github/workflows/detection-analysis-report.lock.yml | 2 +- .github/workflows/dev-hawk.lock.yml | 2 +- .github/workflows/dev.lock.yml | 2 +- .github/workflows/developer-docs-consolidator.lock.yml | 2 +- .github/workflows/dictation-prompt.lock.yml | 2 +- .github/workflows/docs-noob-tester.lock.yml | 2 +- .github/workflows/draft-pr-cleanup.lock.yml | 2 +- .github/workflows/duplicate-code-detector.lock.yml | 2 +- .github/workflows/eslint-miner.lock.yml | 2 +- .github/workflows/eslint-monster.lock.yml | 2 +- .github/workflows/eslint-refiner.lock.yml | 2 +- .github/workflows/evoskill-evolver.lock.yml | 2 +- .github/workflows/example-failure-category-filter.lock.yml | 2 +- .github/workflows/example-permissions-warning.lock.yml | 2 +- .github/workflows/example-workflow-analyzer.lock.yml | 2 +- .github/workflows/firewall-escape.lock.yml | 2 +- .github/workflows/firewall.lock.yml | 2 +- .github/workflows/functional-pragmatist.lock.yml | 2 +- .github/workflows/github-mcp-structural-analysis.lock.yml | 2 +- .github/workflows/github-mcp-tools-report.lock.yml | 2 +- .github/workflows/github-remote-mcp-auth-test.lock.yml | 2 +- .github/workflows/glossary-maintainer.lock.yml | 2 +- .github/workflows/go-fan.lock.yml | 2 +- .github/workflows/go-logger.lock.yml | 2 +- .github/workflows/go-pattern-detector.lock.yml | 2 +- .github/workflows/gpclean.lock.yml | 2 +- .github/workflows/grumpy-reviewer.lock.yml | 2 +- .github/workflows/hippo-embed.lock.yml | 2 +- .github/workflows/hourly-ci-cleaner.lock.yml | 2 +- .github/workflows/impeccable-skills-reviewer.lock.yml | 2 +- .github/workflows/instructions-janitor.lock.yml | 2 +- .github/workflows/issue-arborist.lock.yml | 2 +- .github/workflows/issue-monster.lock.yml | 2 +- .github/workflows/issue-triage-agent.lock.yml | 2 +- .github/workflows/jsweep.lock.yml | 2 +- .github/workflows/layout-spec-maintainer.lock.yml | 2 +- .github/workflows/lint-monster.lock.yml | 2 +- .github/workflows/linter-miner.lock.yml | 2 +- .github/workflows/lockfile-stats.lock.yml | 2 +- .github/workflows/mattpocock-skills-reviewer.lock.yml | 2 +- .github/workflows/mcp-inspector.lock.yml | 2 +- .github/workflows/mergefest.lock.yml | 2 +- .github/workflows/metrics-collector.lock.yml | 2 +- .github/workflows/necromancer.lock.yml | 2 +- .github/workflows/notion-issue-summary.lock.yml | 2 +- .github/workflows/objective-impact-report.lock.yml | 2 +- .github/workflows/org-health-report.lock.yml | 2 +- .github/workflows/outcome-collector.lock.yml | 2 +- .github/workflows/pdf-summary.lock.yml | 2 +- .github/workflows/plan.lock.yml | 2 +- .github/workflows/poem-bot.lock.yml | 2 +- .github/workflows/ponytail-reviewer.lock.yml | 2 +- .github/workflows/portfolio-analyst.lock.yml | 2 +- .github/workflows/pr-code-quality-reviewer.lock.yml | 2 +- .github/workflows/pr-description-caveman.lock.yml | 2 +- .github/workflows/pr-nitpick-reviewer.lock.yml | 2 +- .github/workflows/pr-sous-chef.lock.yml | 2 +- .github/workflows/pr-triage-agent.lock.yml | 2 +- .github/workflows/prompt-clustering-analysis.lock.yml | 2 +- .github/workflows/purelock.lock.yml | 2 +- .github/workflows/python-data-charts.lock.yml | 2 +- .github/workflows/q.lock.yml | 2 +- .github/workflows/refactoring-cadence.lock.yml | 2 +- .github/workflows/refiner.lock.yml | 2 +- .github/workflows/release.lock.yml | 2 +- .github/workflows/repo-audit-analyzer.lock.yml | 2 +- .github/workflows/repo-tree-map.lock.yml | 2 +- .github/workflows/repository-quality-improver.lock.yml | 2 +- .github/workflows/research.lock.yml | 2 +- .github/workflows/ruflo-backed-task.lock.yml | 2 +- .github/workflows/safe-output-health.lock.yml | 2 +- .github/workflows/schema-consistency-checker.lock.yml | 2 +- .github/workflows/schema-feature-coverage.lock.yml | 2 +- .github/workflows/scout.lock.yml | 2 +- .github/workflows/security-compliance.lock.yml | 2 +- .github/workflows/security-review.lock.yml | 2 +- .github/workflows/semantic-function-refactor.lock.yml | 2 +- .github/workflows/sergo.lock.yml | 2 +- .github/workflows/sighthound-security-scan.lock.yml | 2 +- .github/workflows/skillet.lock.yml | 2 +- .github/workflows/slide-deck-maintainer.lock.yml | 2 +- .github/workflows/smoke-agent-all-merged.lock.yml | 2 +- .github/workflows/smoke-agent-all-none.lock.yml | 2 +- .github/workflows/smoke-agent-public-approved.lock.yml | 2 +- .github/workflows/smoke-agent-public-none.lock.yml | 2 +- .github/workflows/smoke-agent-scoped-approved.lock.yml | 2 +- .github/workflows/smoke-aider.lock.yml | 2 +- .github/workflows/smoke-call-workflow.lock.yml | 2 +- .github/workflows/smoke-checkout-pr-dispatch.lock.yml | 2 +- .github/workflows/smoke-ci.lock.yml | 2 +- .github/workflows/smoke-claude-on-copilot.lock.yml | 2 +- .github/workflows/smoke-claude.lock.yml | 2 +- .github/workflows/smoke-codex.lock.yml | 2 +- .github/workflows/smoke-copilot-aoai-apikey.lock.yml | 2 +- .github/workflows/smoke-copilot-aoai-entra.lock.yml | 2 +- .github/workflows/smoke-copilot-arm.lock.yml | 2 +- .github/workflows/smoke-copilot-auto.lock.yml | 2 +- .github/workflows/smoke-copilot-mai.lock.yml | 2 +- .github/workflows/smoke-copilot-sdk.lock.yml | 2 +- .github/workflows/smoke-copilot-small.lock.yml | 2 +- .github/workflows/smoke-copilot-sub-agents.lock.yml | 2 +- .github/workflows/smoke-copilot.lock.yml | 2 +- .github/workflows/smoke-create-cross-repo-pr.lock.yml | 2 +- .github/workflows/smoke-crush.lock.yml | 2 +- .github/workflows/smoke-cursor.lock.yml | 2 +- .github/workflows/smoke-deepseek-harness.lock.yml | 2 +- .github/workflows/smoke-drive.lock.yml | 2 +- .github/workflows/smoke-gemini.lock.yml | 2 +- .github/workflows/smoke-github-claude.lock.yml | 2 +- .github/workflows/smoke-goose.lock.yml | 2 +- .github/workflows/smoke-kiro.lock.yml | 2 +- .github/workflows/smoke-multi-pr.lock.yml | 2 +- .github/workflows/smoke-opencode.lock.yml | 2 +- .github/workflows/smoke-otel-backends.lock.yml | 2 +- .github/workflows/smoke-pi.lock.yml | 2 +- .github/workflows/smoke-project.lock.yml | 2 +- .github/workflows/smoke-pydantic.lock.yml | 2 +- .github/workflows/smoke-service-ports.lock.yml | 2 +- .github/workflows/smoke-temporary-id.lock.yml | 2 +- .github/workflows/smoke-test-tools.lock.yml | 2 +- .github/workflows/smoke-update-cross-repo-pr.lock.yml | 2 +- .github/workflows/smoke-workflow-call-with-inputs.lock.yml | 2 +- .github/workflows/smoke-workflow-call.lock.yml | 2 +- .github/workflows/spec-enforcer.lock.yml | 2 +- .github/workflows/spec-extractor.lock.yml | 2 +- .github/workflows/spec-librarian.lock.yml | 2 +- .github/workflows/squad-game-planner.lock.yml | 2 +- .github/workflows/squad-implement-worker.lock.yml | 2 +- .github/workflows/squad-plan.lock.yml | 2 +- .github/workflows/squad.lock.yml | 2 +- .github/workflows/stale-pr-cleanup.lock.yml | 2 +- .github/workflows/stale-repo-identifier.lock.yml | 2 +- .github/workflows/static-analysis-report.lock.yml | 2 +- .github/workflows/step-name-alignment.lock.yml | 2 +- .github/workflows/sub-issue-closer.lock.yml | 2 +- .github/workflows/super-linter.lock.yml | 2 +- .github/workflows/technical-doc-writer.lock.yml | 2 +- .github/workflows/terminal-stylist.lock.yml | 2 +- .github/workflows/test-quality-sentinel.lock.yml | 2 +- .github/workflows/tidy.lock.yml | 2 +- .github/workflows/typist.lock.yml | 2 +- .github/workflows/ubuntu-image-analyzer.lock.yml | 2 +- .github/workflows/uk-ai-operational-resilience.lock.yml | 2 +- .github/workflows/unbloat-docs.lock.yml | 2 +- .github/workflows/update-astro.lock.yml | 2 +- .github/workflows/video-analyzer.lock.yml | 2 +- .github/workflows/visual-regression-checker.lock.yml | 2 +- .github/workflows/weekly-blog-post-writer.lock.yml | 2 +- .github/workflows/weekly-editors-health-check.lock.yml | 2 +- .github/workflows/weekly-issue-summary.lock.yml | 2 +- .github/workflows/weekly-network-domains-audit.lock.yml | 2 +- .github/workflows/weekly-safe-outputs-spec-review.lock.yml | 2 +- .github/workflows/workflow-generator.lock.yml | 2 +- .github/workflows/workflow-health-manager.lock.yml | 2 +- .github/workflows/workflow-normalizer.lock.yml | 2 +- .github/workflows/workflow-skill-extractor.lock.yml | 2 +- actions/setup/js/generate_aw_info.cjs | 6 +++--- pkg/workflow/aw_info_tmp_test.go | 4 ++-- pkg/workflow/compiler_activation_job_test.go | 2 +- pkg/workflow/compiler_yaml_step_lifecycle.go | 2 +- 296 files changed, 299 insertions(+), 299 deletions(-) diff --git a/.github/workflows/ab-testing-advisor.lock.yml b/.github/workflows/ab-testing-advisor.lock.yml index 6fade78417f..097eb0f0b45 100644 --- a/.github/workflows/ab-testing-advisor.lock.yml +++ b/.github/workflows/ab-testing-advisor.lock.yml @@ -170,7 +170,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/ace-editor.lock.yml b/.github/workflows/ace-editor.lock.yml index 4ed0a1e0272..0666a179a0f 100644 --- a/.github/workflows/ace-editor.lock.yml +++ b/.github/workflows/ace-editor.lock.yml @@ -171,7 +171,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Enforce strict mode policy if: ${{ vars.GH_AW_POLICY_STRICT == 'true' }} run: | diff --git a/.github/workflows/agent-job-health.lock.yml b/.github/workflows/agent-job-health.lock.yml index 5b2befb3d96..9fefafae8e8 100644 --- a/.github/workflows/agent-job-health.lock.yml +++ b/.github/workflows/agent-job-health.lock.yml @@ -174,7 +174,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/agent-performance-analyzer.lock.yml b/.github/workflows/agent-performance-analyzer.lock.yml index 32bb2d52404..923c6051af6 100644 --- a/.github/workflows/agent-performance-analyzer.lock.yml +++ b/.github/workflows/agent-performance-analyzer.lock.yml @@ -170,7 +170,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/agent-persona-explorer.lock.yml b/.github/workflows/agent-persona-explorer.lock.yml index 7b0b3c4ec42..0c789815994 100644 --- a/.github/workflows/agent-persona-explorer.lock.yml +++ b/.github/workflows/agent-persona-explorer.lock.yml @@ -171,7 +171,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/agentic-token-audit.lock.yml b/.github/workflows/agentic-token-audit.lock.yml index 64a80149979..ad7b4b5487f 100644 --- a/.github/workflows/agentic-token-audit.lock.yml +++ b/.github/workflows/agentic-token-audit.lock.yml @@ -152,7 +152,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/agentic-token-optimizer.lock.yml b/.github/workflows/agentic-token-optimizer.lock.yml index ac234515c8e..59438f7fac6 100644 --- a/.github/workflows/agentic-token-optimizer.lock.yml +++ b/.github/workflows/agentic-token-optimizer.lock.yml @@ -149,7 +149,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/agentic-token-trend-audit.lock.yml b/.github/workflows/agentic-token-trend-audit.lock.yml index e6fa823242b..5b6a1ea6e6f 100644 --- a/.github/workflows/agentic-token-trend-audit.lock.yml +++ b/.github/workflows/agentic-token-trend-audit.lock.yml @@ -151,7 +151,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/ai-moderator.lock.yml b/.github/workflows/ai-moderator.lock.yml index 31f3a272250..62094039095 100644 --- a/.github/workflows/ai-moderator.lock.yml +++ b/.github/workflows/ai-moderator.lock.yml @@ -207,7 +207,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/api-consumption-report.lock.yml b/.github/workflows/api-consumption-report.lock.yml index 574106060a7..9320cddc155 100644 --- a/.github/workflows/api-consumption-report.lock.yml +++ b/.github/workflows/api-consumption-report.lock.yml @@ -177,7 +177,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/approach-validator.lock.yml b/.github/workflows/approach-validator.lock.yml index 189ab2e0e34..e2fca5abe40 100644 --- a/.github/workflows/approach-validator.lock.yml +++ b/.github/workflows/approach-validator.lock.yml @@ -182,7 +182,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/archie.lock.yml b/.github/workflows/archie.lock.yml index 35302c9fd4e..1b0c8ab34a0 100644 --- a/.github/workflows/archie.lock.yml +++ b/.github/workflows/archie.lock.yml @@ -175,7 +175,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/architecture-guardian.lock.yml b/.github/workflows/architecture-guardian.lock.yml index 570777534be..0625335e622 100644 --- a/.github/workflows/architecture-guardian.lock.yml +++ b/.github/workflows/architecture-guardian.lock.yml @@ -171,7 +171,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/archivx-agentic-workflows-analyzer.lock.yml b/.github/workflows/archivx-agentic-workflows-analyzer.lock.yml index 723722ca58e..7ec4bee1239 100644 --- a/.github/workflows/archivx-agentic-workflows-analyzer.lock.yml +++ b/.github/workflows/archivx-agentic-workflows-analyzer.lock.yml @@ -152,7 +152,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/artifacts-summary.lock.yml b/.github/workflows/artifacts-summary.lock.yml index 38a9ee39bf1..afff49f0e18 100644 --- a/.github/workflows/artifacts-summary.lock.yml +++ b/.github/workflows/artifacts-summary.lock.yml @@ -164,7 +164,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/audit-workflows.lock.yml b/.github/workflows/audit-workflows.lock.yml index ede16f76f44..09b59612a21 100644 --- a/.github/workflows/audit-workflows.lock.yml +++ b/.github/workflows/audit-workflows.lock.yml @@ -180,7 +180,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/auto-triage-issues.lock.yml b/.github/workflows/auto-triage-issues.lock.yml index ba534300d8a..dd54c44a261 100644 --- a/.github/workflows/auto-triage-issues.lock.yml +++ b/.github/workflows/auto-triage-issues.lock.yml @@ -176,7 +176,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/avenger.lock.yml b/.github/workflows/avenger.lock.yml index 34df841bbeb..c0adf7c46da 100644 --- a/.github/workflows/avenger.lock.yml +++ b/.github/workflows/avenger.lock.yml @@ -181,7 +181,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/aw-failure-investigator.lock.yml b/.github/workflows/aw-failure-investigator.lock.yml index 8cae5b6d483..d96b3551cfe 100644 --- a/.github/workflows/aw-failure-investigator.lock.yml +++ b/.github/workflows/aw-failure-investigator.lock.yml @@ -176,7 +176,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/blog-auditor.lock.yml b/.github/workflows/blog-auditor.lock.yml index 6858d2f5303..f44e81c2c31 100644 --- a/.github/workflows/blog-auditor.lock.yml +++ b/.github/workflows/blog-auditor.lock.yml @@ -169,7 +169,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Enforce strict mode policy if: ${{ vars.GH_AW_POLICY_STRICT == 'true' }} run: | diff --git a/.github/workflows/bot-detection.lock.yml b/.github/workflows/bot-detection.lock.yml index 37f98e4e1cc..3ecf1b6b1b6 100644 --- a/.github/workflows/bot-detection.lock.yml +++ b/.github/workflows/bot-detection.lock.yml @@ -166,7 +166,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/breaking-change-checker.lock.yml b/.github/workflows/breaking-change-checker.lock.yml index 8c2d6532bd7..894c18c8fbd 100644 --- a/.github/workflows/breaking-change-checker.lock.yml +++ b/.github/workflows/breaking-change-checker.lock.yml @@ -173,7 +173,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/changeset.lock.yml b/.github/workflows/changeset.lock.yml index 8215190fa28..7238d5b7938 100644 --- a/.github/workflows/changeset.lock.yml +++ b/.github/workflows/changeset.lock.yml @@ -187,7 +187,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/chaos-pr-bundle-fuzzer.lock.yml b/.github/workflows/chaos-pr-bundle-fuzzer.lock.yml index fc7cf1c9273..8c0fd05d891 100644 --- a/.github/workflows/chaos-pr-bundle-fuzzer.lock.yml +++ b/.github/workflows/chaos-pr-bundle-fuzzer.lock.yml @@ -166,7 +166,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/ci-coach.lock.yml b/.github/workflows/ci-coach.lock.yml index 9703a2463ef..f19c28ee436 100644 --- a/.github/workflows/ci-coach.lock.yml +++ b/.github/workflows/ci-coach.lock.yml @@ -176,7 +176,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/ci-doctor.lock.yml b/.github/workflows/ci-doctor.lock.yml index 8f39f5ef592..01c52501f18 100644 --- a/.github/workflows/ci-doctor.lock.yml +++ b/.github/workflows/ci-doctor.lock.yml @@ -184,7 +184,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/claude-code-user-docs-review.lock.yml b/.github/workflows/claude-code-user-docs-review.lock.yml index eac11950155..2530b33d5e2 100644 --- a/.github/workflows/claude-code-user-docs-review.lock.yml +++ b/.github/workflows/claude-code-user-docs-review.lock.yml @@ -168,7 +168,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/cli-consistency-checker.lock.yml b/.github/workflows/cli-consistency-checker.lock.yml index be5b2195326..4deacaaa732 100644 --- a/.github/workflows/cli-consistency-checker.lock.yml +++ b/.github/workflows/cli-consistency-checker.lock.yml @@ -162,7 +162,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Enforce strict mode policy if: ${{ vars.GH_AW_POLICY_STRICT == 'true' }} run: | diff --git a/.github/workflows/cli-version-checker.lock.yml b/.github/workflows/cli-version-checker.lock.yml index 0ee10378791..5e98d54b066 100644 --- a/.github/workflows/cli-version-checker.lock.yml +++ b/.github/workflows/cli-version-checker.lock.yml @@ -167,7 +167,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Enforce strict mode policy if: ${{ vars.GH_AW_POLICY_STRICT == 'true' }} run: | diff --git a/.github/workflows/cloclo.lock.yml b/.github/workflows/cloclo.lock.yml index 8e2eb604578..222e8f9d58e 100644 --- a/.github/workflows/cloclo.lock.yml +++ b/.github/workflows/cloclo.lock.yml @@ -194,7 +194,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/code-scanning-fixer.lock.yml b/.github/workflows/code-scanning-fixer.lock.yml index dd933f20dc3..9c8c5eaffc4 100644 --- a/.github/workflows/code-scanning-fixer.lock.yml +++ b/.github/workflows/code-scanning-fixer.lock.yml @@ -180,7 +180,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/code-simplifier.lock.yml b/.github/workflows/code-simplifier.lock.yml index cef4b7640f5..8709fdbe4bb 100644 --- a/.github/workflows/code-simplifier.lock.yml +++ b/.github/workflows/code-simplifier.lock.yml @@ -180,7 +180,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/codex-github-remote-mcp-test.lock.yml b/.github/workflows/codex-github-remote-mcp-test.lock.yml index 3d40aad7ac9..700ccd2be3d 100644 --- a/.github/workflows/codex-github-remote-mcp-test.lock.yml +++ b/.github/workflows/codex-github-remote-mcp-test.lock.yml @@ -162,7 +162,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/commit-changes-analyzer.lock.yml b/.github/workflows/commit-changes-analyzer.lock.yml index d9b35d36a22..d6d24e454e1 100644 --- a/.github/workflows/commit-changes-analyzer.lock.yml +++ b/.github/workflows/commit-changes-analyzer.lock.yml @@ -167,7 +167,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/constraint-solving-potd.lock.yml b/.github/workflows/constraint-solving-potd.lock.yml index 38739fff748..b1fd52466b8 100644 --- a/.github/workflows/constraint-solving-potd.lock.yml +++ b/.github/workflows/constraint-solving-potd.lock.yml @@ -163,7 +163,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/contribution-check.lock.yml b/.github/workflows/contribution-check.lock.yml index 70a857c5617..01e528375ae 100644 --- a/.github/workflows/contribution-check.lock.yml +++ b/.github/workflows/contribution-check.lock.yml @@ -167,7 +167,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/copilot-agent-analysis.lock.yml b/.github/workflows/copilot-agent-analysis.lock.yml index f32754459ed..ff52ffe1ec9 100644 --- a/.github/workflows/copilot-agent-analysis.lock.yml +++ b/.github/workflows/copilot-agent-analysis.lock.yml @@ -177,7 +177,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/copilot-centralization-drilldown.lock.yml b/.github/workflows/copilot-centralization-drilldown.lock.yml index 58efa42819a..5a6bb16c857 100644 --- a/.github/workflows/copilot-centralization-drilldown.lock.yml +++ b/.github/workflows/copilot-centralization-drilldown.lock.yml @@ -160,7 +160,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/copilot-centralization-optimizer.lock.yml b/.github/workflows/copilot-centralization-optimizer.lock.yml index 7137753e09f..abf5fff3665 100644 --- a/.github/workflows/copilot-centralization-optimizer.lock.yml +++ b/.github/workflows/copilot-centralization-optimizer.lock.yml @@ -147,7 +147,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/copilot-cli-deep-research.lock.yml b/.github/workflows/copilot-cli-deep-research.lock.yml index 9ea2b77dcc9..8e8fd4a0fc0 100644 --- a/.github/workflows/copilot-cli-deep-research.lock.yml +++ b/.github/workflows/copilot-cli-deep-research.lock.yml @@ -163,7 +163,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/copilot-opt.lock.yml b/.github/workflows/copilot-opt.lock.yml index 9438c4ef0d2..d1015cf1394 100644 --- a/.github/workflows/copilot-opt.lock.yml +++ b/.github/workflows/copilot-opt.lock.yml @@ -169,7 +169,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/copilot-pr-merged-report.lock.yml b/.github/workflows/copilot-pr-merged-report.lock.yml index 3d1209247c5..8a6296e3337 100644 --- a/.github/workflows/copilot-pr-merged-report.lock.yml +++ b/.github/workflows/copilot-pr-merged-report.lock.yml @@ -166,7 +166,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Enforce strict mode policy if: ${{ vars.GH_AW_POLICY_STRICT == 'true' }} run: | diff --git a/.github/workflows/copilot-pr-nlp-analysis.lock.yml b/.github/workflows/copilot-pr-nlp-analysis.lock.yml index 3a9a497de82..b4bcd700c7b 100644 --- a/.github/workflows/copilot-pr-nlp-analysis.lock.yml +++ b/.github/workflows/copilot-pr-nlp-analysis.lock.yml @@ -172,7 +172,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/copilot-pr-prompt-analysis.lock.yml b/.github/workflows/copilot-pr-prompt-analysis.lock.yml index 29929d94a30..d8108142465 100644 --- a/.github/workflows/copilot-pr-prompt-analysis.lock.yml +++ b/.github/workflows/copilot-pr-prompt-analysis.lock.yml @@ -168,7 +168,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/copilot-session-insights.lock.yml b/.github/workflows/copilot-session-insights.lock.yml index 4ee688901fd..c4b00724500 100644 --- a/.github/workflows/copilot-session-insights.lock.yml +++ b/.github/workflows/copilot-session-insights.lock.yml @@ -178,7 +178,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/craft.lock.yml b/.github/workflows/craft.lock.yml index 5dc19775af9..0246b2766c0 100644 --- a/.github/workflows/craft.lock.yml +++ b/.github/workflows/craft.lock.yml @@ -172,7 +172,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-action-setup-security-audit.lock.yml b/.github/workflows/daily-action-setup-security-audit.lock.yml index 3e33ef29530..0f3dba59770 100644 --- a/.github/workflows/daily-action-setup-security-audit.lock.yml +++ b/.github/workflows/daily-action-setup-security-audit.lock.yml @@ -168,7 +168,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-agent-of-the-day-blog-writer.lock.yml b/.github/workflows/daily-agent-of-the-day-blog-writer.lock.yml index 6c78ee39c7e..91de7e8f596 100644 --- a/.github/workflows/daily-agent-of-the-day-blog-writer.lock.yml +++ b/.github/workflows/daily-agent-of-the-day-blog-writer.lock.yml @@ -184,7 +184,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-agentrx-trace-optimizer.lock.yml b/.github/workflows/daily-agentrx-trace-optimizer.lock.yml index 79aecb834a3..45b7b6a7e2f 100644 --- a/.github/workflows/daily-agentrx-trace-optimizer.lock.yml +++ b/.github/workflows/daily-agentrx-trace-optimizer.lock.yml @@ -176,7 +176,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-ambient-context-optimizer.lock.yml b/.github/workflows/daily-ambient-context-optimizer.lock.yml index b2032c05104..637b88d45bc 100644 --- a/.github/workflows/daily-ambient-context-optimizer.lock.yml +++ b/.github/workflows/daily-ambient-context-optimizer.lock.yml @@ -170,7 +170,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-architecture-diagram.lock.yml b/.github/workflows/daily-architecture-diagram.lock.yml index 5f9ce492c6a..cbd1da7d134 100644 --- a/.github/workflows/daily-architecture-diagram.lock.yml +++ b/.github/workflows/daily-architecture-diagram.lock.yml @@ -174,7 +174,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-arxiv-researcher.lock.yml b/.github/workflows/daily-arxiv-researcher.lock.yml index 2ba1abcf3e1..15bb53386ed 100644 --- a/.github/workflows/daily-arxiv-researcher.lock.yml +++ b/.github/workflows/daily-arxiv-researcher.lock.yml @@ -149,7 +149,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-assign-issue-to-user.lock.yml b/.github/workflows/daily-assign-issue-to-user.lock.yml index ad27074052a..129b4703ef4 100644 --- a/.github/workflows/daily-assign-issue-to-user.lock.yml +++ b/.github/workflows/daily-assign-issue-to-user.lock.yml @@ -165,7 +165,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-astrostylelite-markdown-spellcheck.lock.yml b/.github/workflows/daily-astrostylelite-markdown-spellcheck.lock.yml index f45e086f1dc..05eb177ef2d 100644 --- a/.github/workflows/daily-astrostylelite-markdown-spellcheck.lock.yml +++ b/.github/workflows/daily-astrostylelite-markdown-spellcheck.lock.yml @@ -173,7 +173,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-aw-cross-repo-compile-check.lock.yml b/.github/workflows/daily-aw-cross-repo-compile-check.lock.yml index 0f6112cadfb..f338e7c8b51 100644 --- a/.github/workflows/daily-aw-cross-repo-compile-check.lock.yml +++ b/.github/workflows/daily-aw-cross-repo-compile-check.lock.yml @@ -170,7 +170,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-awf-spec-compiler-surfacing.lock.yml b/.github/workflows/daily-awf-spec-compiler-surfacing.lock.yml index ff86e6f9eda..0e0e049608b 100644 --- a/.github/workflows/daily-awf-spec-compiler-surfacing.lock.yml +++ b/.github/workflows/daily-awf-spec-compiler-surfacing.lock.yml @@ -167,7 +167,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-byok-ollama-test.lock.yml b/.github/workflows/daily-byok-ollama-test.lock.yml index 4cd8c4bc134..71de8ad4df9 100644 --- a/.github/workflows/daily-byok-ollama-test.lock.yml +++ b/.github/workflows/daily-byok-ollama-test.lock.yml @@ -147,7 +147,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-cache-strategy-analyzer.lock.yml b/.github/workflows/daily-cache-strategy-analyzer.lock.yml index 5f5bd0e2d4c..311400582dc 100644 --- a/.github/workflows/daily-cache-strategy-analyzer.lock.yml +++ b/.github/workflows/daily-cache-strategy-analyzer.lock.yml @@ -178,7 +178,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-caveman-optimizer.lock.yml b/.github/workflows/daily-caveman-optimizer.lock.yml index 76fe1f87cfc..54cf5495c44 100644 --- a/.github/workflows/daily-caveman-optimizer.lock.yml +++ b/.github/workflows/daily-caveman-optimizer.lock.yml @@ -178,7 +178,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-choice-test.lock.yml b/.github/workflows/daily-choice-test.lock.yml index b0a6e3ca19d..4dab5032c2c 100644 --- a/.github/workflows/daily-choice-test.lock.yml +++ b/.github/workflows/daily-choice-test.lock.yml @@ -168,7 +168,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-cli-performance.lock.yml b/.github/workflows/daily-cli-performance.lock.yml index d56d0cfc5d4..f02344ac5c6 100644 --- a/.github/workflows/daily-cli-performance.lock.yml +++ b/.github/workflows/daily-cli-performance.lock.yml @@ -200,7 +200,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-cli-tools-tester.lock.yml b/.github/workflows/daily-cli-tools-tester.lock.yml index 29fe62d93e0..d6d8d747d46 100644 --- a/.github/workflows/daily-cli-tools-tester.lock.yml +++ b/.github/workflows/daily-cli-tools-tester.lock.yml @@ -169,7 +169,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-code-debt-aider.lock.yml b/.github/workflows/daily-code-debt-aider.lock.yml index 6d010de2a3b..34de11a49b8 100644 --- a/.github/workflows/daily-code-debt-aider.lock.yml +++ b/.github/workflows/daily-code-debt-aider.lock.yml @@ -171,7 +171,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-code-metrics.lock.yml b/.github/workflows/daily-code-metrics.lock.yml index 200303d0bb7..d4b4f33cae5 100644 --- a/.github/workflows/daily-code-metrics.lock.yml +++ b/.github/workflows/daily-code-metrics.lock.yml @@ -173,7 +173,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-community-attribution.lock.yml b/.github/workflows/daily-community-attribution.lock.yml index c895b53f996..1f86503ef0e 100644 --- a/.github/workflows/daily-community-attribution.lock.yml +++ b/.github/workflows/daily-community-attribution.lock.yml @@ -178,7 +178,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-compiler-quality.lock.yml b/.github/workflows/daily-compiler-quality.lock.yml index 9289f5e64e3..91187dadd79 100644 --- a/.github/workflows/daily-compiler-quality.lock.yml +++ b/.github/workflows/daily-compiler-quality.lock.yml @@ -176,7 +176,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-compiler-threat-spec-optimizer.lock.yml b/.github/workflows/daily-compiler-threat-spec-optimizer.lock.yml index e8a227e0716..5321ae07fa1 100644 --- a/.github/workflows/daily-compiler-threat-spec-optimizer.lock.yml +++ b/.github/workflows/daily-compiler-threat-spec-optimizer.lock.yml @@ -177,7 +177,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-credit-limit-test.lock.yml b/.github/workflows/daily-credit-limit-test.lock.yml index 05f13bc3a64..fadb6c6a9eb 100644 --- a/.github/workflows/daily-credit-limit-test.lock.yml +++ b/.github/workflows/daily-credit-limit-test.lock.yml @@ -149,7 +149,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-doc-healer.lock.yml b/.github/workflows/daily-doc-healer.lock.yml index 560b9f69055..875cef11a69 100644 --- a/.github/workflows/daily-doc-healer.lock.yml +++ b/.github/workflows/daily-doc-healer.lock.yml @@ -182,7 +182,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-doc-updater.lock.yml b/.github/workflows/daily-doc-updater.lock.yml index 0835c572a52..5723c807a57 100644 --- a/.github/workflows/daily-doc-updater.lock.yml +++ b/.github/workflows/daily-doc-updater.lock.yml @@ -179,7 +179,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-documentation-diagram.lock.yml b/.github/workflows/daily-documentation-diagram.lock.yml index d557c5f07f9..e6431f5182e 100644 --- a/.github/workflows/daily-documentation-diagram.lock.yml +++ b/.github/workflows/daily-documentation-diagram.lock.yml @@ -152,7 +152,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-elixir-credo-snippet-audit.lock.yml b/.github/workflows/daily-elixir-credo-snippet-audit.lock.yml index 5111598cf89..99ef047468e 100644 --- a/.github/workflows/daily-elixir-credo-snippet-audit.lock.yml +++ b/.github/workflows/daily-elixir-credo-snippet-audit.lock.yml @@ -164,7 +164,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-evals-report.lock.yml b/.github/workflows/daily-evals-report.lock.yml index ccc2b8ac3de..63bf688b976 100644 --- a/.github/workflows/daily-evals-report.lock.yml +++ b/.github/workflows/daily-evals-report.lock.yml @@ -176,7 +176,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-experiment-report.lock.yml b/.github/workflows/daily-experiment-report.lock.yml index 5e98ae673c2..11104ccfc3a 100644 --- a/.github/workflows/daily-experiment-report.lock.yml +++ b/.github/workflows/daily-experiment-report.lock.yml @@ -169,7 +169,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-fact.lock.yml b/.github/workflows/daily-fact.lock.yml index 12c49d232a2..25e30cbacbc 100644 --- a/.github/workflows/daily-fact.lock.yml +++ b/.github/workflows/daily-fact.lock.yml @@ -177,7 +177,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-file-diet.lock.yml b/.github/workflows/daily-file-diet.lock.yml index 0ded80fd359..9d4ff54b409 100644 --- a/.github/workflows/daily-file-diet.lock.yml +++ b/.github/workflows/daily-file-diet.lock.yml @@ -179,7 +179,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-firewall-report.lock.yml b/.github/workflows/daily-firewall-report.lock.yml index 6f22595b6e6..1b8ee8b9ee0 100644 --- a/.github/workflows/daily-firewall-report.lock.yml +++ b/.github/workflows/daily-firewall-report.lock.yml @@ -169,7 +169,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-formal-spec-verifier.lock.yml b/.github/workflows/daily-formal-spec-verifier.lock.yml index 3bc19134f8c..72efc8b55a8 100644 --- a/.github/workflows/daily-formal-spec-verifier.lock.yml +++ b/.github/workflows/daily-formal-spec-verifier.lock.yml @@ -166,7 +166,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-function-namer.lock.yml b/.github/workflows/daily-function-namer.lock.yml index 06ba9c82fce..9ca9d730be5 100644 --- a/.github/workflows/daily-function-namer.lock.yml +++ b/.github/workflows/daily-function-namer.lock.yml @@ -172,7 +172,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-geo-optimizer.lock.yml b/.github/workflows/daily-geo-optimizer.lock.yml index 006226a0cf6..404a11c49d1 100644 --- a/.github/workflows/daily-geo-optimizer.lock.yml +++ b/.github/workflows/daily-geo-optimizer.lock.yml @@ -167,7 +167,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-github-docs-seo-optimizer.lock.yml b/.github/workflows/daily-github-docs-seo-optimizer.lock.yml index 1bae58d1f74..a8acbcf6b29 100644 --- a/.github/workflows/daily-github-docs-seo-optimizer.lock.yml +++ b/.github/workflows/daily-github-docs-seo-optimizer.lock.yml @@ -141,7 +141,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-go-test-parallelizer.lock.yml b/.github/workflows/daily-go-test-parallelizer.lock.yml index ce2be3ef385..51d4ae1d5c2 100644 --- a/.github/workflows/daily-go-test-parallelizer.lock.yml +++ b/.github/workflows/daily-go-test-parallelizer.lock.yml @@ -161,7 +161,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-go-test-stubs-aider.lock.yml b/.github/workflows/daily-go-test-stubs-aider.lock.yml index 029222af9c6..82ef27f547d 100644 --- a/.github/workflows/daily-go-test-stubs-aider.lock.yml +++ b/.github/workflows/daily-go-test-stubs-aider.lock.yml @@ -171,7 +171,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-graft-intelligence.lock.yml b/.github/workflows/daily-graft-intelligence.lock.yml index bffe4c955a9..1b3079ffd76 100644 --- a/.github/workflows/daily-graft-intelligence.lock.yml +++ b/.github/workflows/daily-graft-intelligence.lock.yml @@ -154,7 +154,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-harness-experiment-proposer.lock.yml b/.github/workflows/daily-harness-experiment-proposer.lock.yml index 9305bb1ac5c..a74b43e1826 100644 --- a/.github/workflows/daily-harness-experiment-proposer.lock.yml +++ b/.github/workflows/daily-harness-experiment-proposer.lock.yml @@ -174,7 +174,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-hippo-learn.lock.yml b/.github/workflows/daily-hippo-learn.lock.yml index 989e9bc9322..1807203f3ea 100644 --- a/.github/workflows/daily-hippo-learn.lock.yml +++ b/.github/workflows/daily-hippo-learn.lock.yml @@ -165,7 +165,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-issues-report.lock.yml b/.github/workflows/daily-issues-report.lock.yml index 025c1394414..e8a241d6a7d 100644 --- a/.github/workflows/daily-issues-report.lock.yml +++ b/.github/workflows/daily-issues-report.lock.yml @@ -178,7 +178,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-malicious-code-scan.lock.yml b/.github/workflows/daily-malicious-code-scan.lock.yml index 98f6f5762e0..cf8836042b1 100644 --- a/.github/workflows/daily-malicious-code-scan.lock.yml +++ b/.github/workflows/daily-malicious-code-scan.lock.yml @@ -166,7 +166,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-max-ai-credits-test.lock.yml b/.github/workflows/daily-max-ai-credits-test.lock.yml index 5e233ea7fd6..cf2ea9cbffe 100644 --- a/.github/workflows/daily-max-ai-credits-test.lock.yml +++ b/.github/workflows/daily-max-ai-credits-test.lock.yml @@ -139,7 +139,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Check for OAuth tokens id: check-oauth-tokens run: bash "${RUNNER_TEMP}/gh-aw/actions/check_oauth_tokens.sh" diff --git a/.github/workflows/daily-mcp-concurrency-analysis.lock.yml b/.github/workflows/daily-mcp-concurrency-analysis.lock.yml index 734aad4752a..4d194853661 100644 --- a/.github/workflows/daily-mcp-concurrency-analysis.lock.yml +++ b/.github/workflows/daily-mcp-concurrency-analysis.lock.yml @@ -170,7 +170,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-model-inventory.lock.yml b/.github/workflows/daily-model-inventory.lock.yml index e647da537bb..f824d98ac27 100644 --- a/.github/workflows/daily-model-inventory.lock.yml +++ b/.github/workflows/daily-model-inventory.lock.yml @@ -166,7 +166,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-model-resolution.lock.yml b/.github/workflows/daily-model-resolution.lock.yml index f734e8686f7..cbc77e8c0ae 100644 --- a/.github/workflows/daily-model-resolution.lock.yml +++ b/.github/workflows/daily-model-resolution.lock.yml @@ -168,7 +168,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-multi-device-docs-tester.lock.yml b/.github/workflows/daily-multi-device-docs-tester.lock.yml index 5da65e4386a..4a6549f4b56 100644 --- a/.github/workflows/daily-multi-device-docs-tester.lock.yml +++ b/.github/workflows/daily-multi-device-docs-tester.lock.yml @@ -171,7 +171,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-news.lock.yml b/.github/workflows/daily-news.lock.yml index 0d606e65484..81a4aee6e63 100644 --- a/.github/workflows/daily-news.lock.yml +++ b/.github/workflows/daily-news.lock.yml @@ -176,7 +176,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-observability-report.lock.yml b/.github/workflows/daily-observability-report.lock.yml index 4466b66e44b..1ef1285b03e 100644 --- a/.github/workflows/daily-observability-report.lock.yml +++ b/.github/workflows/daily-observability-report.lock.yml @@ -173,7 +173,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-performance-summary.lock.yml b/.github/workflows/daily-performance-summary.lock.yml index f27ef19ea19..52890a2a53e 100644 --- a/.github/workflows/daily-performance-summary.lock.yml +++ b/.github/workflows/daily-performance-summary.lock.yml @@ -173,7 +173,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-pr-review-cursor.lock.yml b/.github/workflows/daily-pr-review-cursor.lock.yml index ec16576515d..6d11c959485 100644 --- a/.github/workflows/daily-pr-review-cursor.lock.yml +++ b/.github/workflows/daily-pr-review-cursor.lock.yml @@ -163,7 +163,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-regression-audit-kiro.lock.yml b/.github/workflows/daily-regression-audit-kiro.lock.yml index c46a8e939eb..50e508fb5bb 100644 --- a/.github/workflows/daily-regression-audit-kiro.lock.yml +++ b/.github/workflows/daily-regression-audit-kiro.lock.yml @@ -163,7 +163,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-regulatory.lock.yml b/.github/workflows/daily-regulatory.lock.yml index e14a4c88762..94caab6be6b 100644 --- a/.github/workflows/daily-regulatory.lock.yml +++ b/.github/workflows/daily-regulatory.lock.yml @@ -167,7 +167,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-reliability-review.lock.yml b/.github/workflows/daily-reliability-review.lock.yml index 8a8b4d8f977..80ff2e04f3e 100644 --- a/.github/workflows/daily-reliability-review.lock.yml +++ b/.github/workflows/daily-reliability-review.lock.yml @@ -164,7 +164,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-rendering-scripts-verifier.lock.yml b/.github/workflows/daily-rendering-scripts-verifier.lock.yml index c18152f1437..8ef1aa05ffe 100644 --- a/.github/workflows/daily-rendering-scripts-verifier.lock.yml +++ b/.github/workflows/daily-rendering-scripts-verifier.lock.yml @@ -187,7 +187,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-repo-chronicle.lock.yml b/.github/workflows/daily-repo-chronicle.lock.yml index 5d4fd2d6ed5..b63ebae463c 100644 --- a/.github/workflows/daily-repo-chronicle.lock.yml +++ b/.github/workflows/daily-repo-chronicle.lock.yml @@ -170,7 +170,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-safe-output-integrator.lock.yml b/.github/workflows/daily-safe-output-integrator.lock.yml index 5460f6d367a..d7ad6d4ba91 100644 --- a/.github/workflows/daily-safe-output-integrator.lock.yml +++ b/.github/workflows/daily-safe-output-integrator.lock.yml @@ -172,7 +172,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-safe-output-optimizer.lock.yml b/.github/workflows/daily-safe-output-optimizer.lock.yml index 3e0c9a87644..f431e89c25f 100644 --- a/.github/workflows/daily-safe-output-optimizer.lock.yml +++ b/.github/workflows/daily-safe-output-optimizer.lock.yml @@ -181,7 +181,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-safe-outputs-conformance.lock.yml b/.github/workflows/daily-safe-outputs-conformance.lock.yml index 6fb4a92f8b0..addc6a3fef5 100644 --- a/.github/workflows/daily-safe-outputs-conformance.lock.yml +++ b/.github/workflows/daily-safe-outputs-conformance.lock.yml @@ -168,7 +168,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-safeoutputs-git-simulator.lock.yml b/.github/workflows/daily-safeoutputs-git-simulator.lock.yml index aa89dce9262..246f07fd92d 100644 --- a/.github/workflows/daily-safeoutputs-git-simulator.lock.yml +++ b/.github/workflows/daily-safeoutputs-git-simulator.lock.yml @@ -154,7 +154,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-schema-audit-cursor.lock.yml b/.github/workflows/daily-schema-audit-cursor.lock.yml index 140a287249c..de72a00d667 100644 --- a/.github/workflows/daily-schema-audit-cursor.lock.yml +++ b/.github/workflows/daily-schema-audit-cursor.lock.yml @@ -163,7 +163,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-secrets-analysis.lock.yml b/.github/workflows/daily-secrets-analysis.lock.yml index b4a2c9ec739..b5a87b2e1fd 100644 --- a/.github/workflows/daily-secrets-analysis.lock.yml +++ b/.github/workflows/daily-secrets-analysis.lock.yml @@ -164,7 +164,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-security-observability.lock.yml b/.github/workflows/daily-security-observability.lock.yml index 6712a96b048..7dbac3a93c7 100644 --- a/.github/workflows/daily-security-observability.lock.yml +++ b/.github/workflows/daily-security-observability.lock.yml @@ -181,7 +181,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-security-red-team.lock.yml b/.github/workflows/daily-security-red-team.lock.yml index d7f7181a302..d68f7582017 100644 --- a/.github/workflows/daily-security-red-team.lock.yml +++ b/.github/workflows/daily-security-red-team.lock.yml @@ -167,7 +167,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-semgrep-scan.lock.yml b/.github/workflows/daily-semgrep-scan.lock.yml index 98d07e48f19..0f86b148364 100644 --- a/.github/workflows/daily-semgrep-scan.lock.yml +++ b/.github/workflows/daily-semgrep-scan.lock.yml @@ -164,7 +164,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-spdd-spec-planner.lock.yml b/.github/workflows/daily-spdd-spec-planner.lock.yml index 881c0a0a5a7..ec692db3aea 100644 --- a/.github/workflows/daily-spdd-spec-planner.lock.yml +++ b/.github/workflows/daily-spdd-spec-planner.lock.yml @@ -167,7 +167,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-spec-coverage-kiro.lock.yml b/.github/workflows/daily-spec-coverage-kiro.lock.yml index f2774c232e6..b6690168604 100644 --- a/.github/workflows/daily-spec-coverage-kiro.lock.yml +++ b/.github/workflows/daily-spec-coverage-kiro.lock.yml @@ -163,7 +163,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-spending-forecast.lock.yml b/.github/workflows/daily-spending-forecast.lock.yml index 2252a30d56d..6a3f56ea9f8 100644 --- a/.github/workflows/daily-spending-forecast.lock.yml +++ b/.github/workflows/daily-spending-forecast.lock.yml @@ -153,7 +153,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-squid-image-scan.lock.yml b/.github/workflows/daily-squid-image-scan.lock.yml index 62f68dddf52..860ad89fe41 100644 --- a/.github/workflows/daily-squid-image-scan.lock.yml +++ b/.github/workflows/daily-squid-image-scan.lock.yml @@ -143,7 +143,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-storify.lock.yml b/.github/workflows/daily-storify.lock.yml index 5a987e090e1..8213bd12eb9 100644 --- a/.github/workflows/daily-storify.lock.yml +++ b/.github/workflows/daily-storify.lock.yml @@ -170,7 +170,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-syntax-error-quality.lock.yml b/.github/workflows/daily-syntax-error-quality.lock.yml index f75ac2c2751..b32243ba5dd 100644 --- a/.github/workflows/daily-syntax-error-quality.lock.yml +++ b/.github/workflows/daily-syntax-error-quality.lock.yml @@ -163,7 +163,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-team-evolution-insights.lock.yml b/.github/workflows/daily-team-evolution-insights.lock.yml index 16468198d25..25cbda95b5d 100644 --- a/.github/workflows/daily-team-evolution-insights.lock.yml +++ b/.github/workflows/daily-team-evolution-insights.lock.yml @@ -164,7 +164,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Enforce strict mode policy if: ${{ vars.GH_AW_POLICY_STRICT == 'true' }} run: | diff --git a/.github/workflows/daily-team-status.lock.yml b/.github/workflows/daily-team-status.lock.yml index 39093aae59c..adfa6d3a90a 100644 --- a/.github/workflows/daily-team-status.lock.yml +++ b/.github/workflows/daily-team-status.lock.yml @@ -151,7 +151,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-testify-uber-super-expert.lock.yml b/.github/workflows/daily-testify-uber-super-expert.lock.yml index 44eac379434..803a9a9f7fe 100644 --- a/.github/workflows/daily-testify-uber-super-expert.lock.yml +++ b/.github/workflows/daily-testify-uber-super-expert.lock.yml @@ -175,7 +175,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-token-consumption-report.lock.yml b/.github/workflows/daily-token-consumption-report.lock.yml index 9ec71abb244..46ede2e5c77 100644 --- a/.github/workflows/daily-token-consumption-report.lock.yml +++ b/.github/workflows/daily-token-consumption-report.lock.yml @@ -166,7 +166,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-trajectory-grader-implementer.lock.yml b/.github/workflows/daily-trajectory-grader-implementer.lock.yml index ba68d8dd409..8713f8c2fe8 100644 --- a/.github/workflows/daily-trajectory-grader-implementer.lock.yml +++ b/.github/workflows/daily-trajectory-grader-implementer.lock.yml @@ -160,7 +160,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-vulnhunter-scan.lock.yml b/.github/workflows/daily-vulnhunter-scan.lock.yml index 4de111c1c96..7fcd740674c 100644 --- a/.github/workflows/daily-vulnhunter-scan.lock.yml +++ b/.github/workflows/daily-vulnhunter-scan.lock.yml @@ -165,7 +165,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-windows-terminal-integration-builder.lock.yml b/.github/workflows/daily-windows-terminal-integration-builder.lock.yml index c5bcac16c00..4f0b91d558d 100644 --- a/.github/workflows/daily-windows-terminal-integration-builder.lock.yml +++ b/.github/workflows/daily-windows-terminal-integration-builder.lock.yml @@ -150,7 +150,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-workflow-updater.lock.yml b/.github/workflows/daily-workflow-updater.lock.yml index c8f6f960a8a..87b058880ea 100644 --- a/.github/workflows/daily-workflow-updater.lock.yml +++ b/.github/workflows/daily-workflow-updater.lock.yml @@ -169,7 +169,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/daily-yamllint-fixer.lock.yml b/.github/workflows/daily-yamllint-fixer.lock.yml index 483a843ef75..7ea901581fe 100644 --- a/.github/workflows/daily-yamllint-fixer.lock.yml +++ b/.github/workflows/daily-yamllint-fixer.lock.yml @@ -177,7 +177,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/dataflow-pr-discussion-dataset.lock.yml b/.github/workflows/dataflow-pr-discussion-dataset.lock.yml index 7321d4987dd..8f7a42a4220 100644 --- a/.github/workflows/dataflow-pr-discussion-dataset.lock.yml +++ b/.github/workflows/dataflow-pr-discussion-dataset.lock.yml @@ -172,7 +172,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/dead-code-remover.lock.yml b/.github/workflows/dead-code-remover.lock.yml index 9872fa1dc98..e060f7f1d48 100644 --- a/.github/workflows/dead-code-remover.lock.yml +++ b/.github/workflows/dead-code-remover.lock.yml @@ -177,7 +177,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/deep-report.lock.yml b/.github/workflows/deep-report.lock.yml index e9b50c8e4fe..8855a9b22e1 100644 --- a/.github/workflows/deep-report.lock.yml +++ b/.github/workflows/deep-report.lock.yml @@ -179,7 +179,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/deepsec-security-scan.lock.yml b/.github/workflows/deepsec-security-scan.lock.yml index e72f76b2a66..0c0e3126216 100644 --- a/.github/workflows/deepsec-security-scan.lock.yml +++ b/.github/workflows/deepsec-security-scan.lock.yml @@ -187,7 +187,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/delight.lock.yml b/.github/workflows/delight.lock.yml index 7dabd860aad..799978be558 100644 --- a/.github/workflows/delight.lock.yml +++ b/.github/workflows/delight.lock.yml @@ -166,7 +166,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/dependabot-burner.lock.yml b/.github/workflows/dependabot-burner.lock.yml index 887978710f9..b79449ab534 100644 --- a/.github/workflows/dependabot-burner.lock.yml +++ b/.github/workflows/dependabot-burner.lock.yml @@ -197,7 +197,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/dependabot-go-checker.lock.yml b/.github/workflows/dependabot-go-checker.lock.yml index 06906a41d87..c32a8c85ddc 100644 --- a/.github/workflows/dependabot-go-checker.lock.yml +++ b/.github/workflows/dependabot-go-checker.lock.yml @@ -166,7 +166,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/deployment-incident-monitor.lock.yml b/.github/workflows/deployment-incident-monitor.lock.yml index 1e4d29e377c..fcb2ad8e97d 100644 --- a/.github/workflows/deployment-incident-monitor.lock.yml +++ b/.github/workflows/deployment-incident-monitor.lock.yml @@ -168,7 +168,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/design-decision-gate.lock.yml b/.github/workflows/design-decision-gate.lock.yml index 124b8247426..f6b6581dd6d 100644 --- a/.github/workflows/design-decision-gate.lock.yml +++ b/.github/workflows/design-decision-gate.lock.yml @@ -202,7 +202,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/designer-drift-audit.lock.yml b/.github/workflows/designer-drift-audit.lock.yml index 9c8c19dd4fd..2a7d11f7a01 100644 --- a/.github/workflows/designer-drift-audit.lock.yml +++ b/.github/workflows/designer-drift-audit.lock.yml @@ -145,7 +145,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/detection-analysis-report.lock.yml b/.github/workflows/detection-analysis-report.lock.yml index 3caf5217cb5..cf364552d4a 100644 --- a/.github/workflows/detection-analysis-report.lock.yml +++ b/.github/workflows/detection-analysis-report.lock.yml @@ -176,7 +176,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/dev-hawk.lock.yml b/.github/workflows/dev-hawk.lock.yml index d21aa2eb7a4..0de6bf50590 100644 --- a/.github/workflows/dev-hawk.lock.yml +++ b/.github/workflows/dev-hawk.lock.yml @@ -182,7 +182,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/dev.lock.yml b/.github/workflows/dev.lock.yml index 3352e8de05b..442bb8eb601 100644 --- a/.github/workflows/dev.lock.yml +++ b/.github/workflows/dev.lock.yml @@ -184,7 +184,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Enforce strict mode policy if: ${{ vars.GH_AW_POLICY_STRICT == 'true' }} run: | diff --git a/.github/workflows/developer-docs-consolidator.lock.yml b/.github/workflows/developer-docs-consolidator.lock.yml index 84b848cc768..9394ab3b918 100644 --- a/.github/workflows/developer-docs-consolidator.lock.yml +++ b/.github/workflows/developer-docs-consolidator.lock.yml @@ -179,7 +179,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/dictation-prompt.lock.yml b/.github/workflows/dictation-prompt.lock.yml index 354625d5ded..64c1e7cebfe 100644 --- a/.github/workflows/dictation-prompt.lock.yml +++ b/.github/workflows/dictation-prompt.lock.yml @@ -169,7 +169,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/docs-noob-tester.lock.yml b/.github/workflows/docs-noob-tester.lock.yml index 624b5ad1148..1a56a435992 100644 --- a/.github/workflows/docs-noob-tester.lock.yml +++ b/.github/workflows/docs-noob-tester.lock.yml @@ -166,7 +166,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/draft-pr-cleanup.lock.yml b/.github/workflows/draft-pr-cleanup.lock.yml index 0fdccae6c01..916b82a181a 100644 --- a/.github/workflows/draft-pr-cleanup.lock.yml +++ b/.github/workflows/draft-pr-cleanup.lock.yml @@ -162,7 +162,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/duplicate-code-detector.lock.yml b/.github/workflows/duplicate-code-detector.lock.yml index 9a85da95360..4554cb2c70e 100644 --- a/.github/workflows/duplicate-code-detector.lock.yml +++ b/.github/workflows/duplicate-code-detector.lock.yml @@ -168,7 +168,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/eslint-miner.lock.yml b/.github/workflows/eslint-miner.lock.yml index a399288b9b4..261bbe738a4 100644 --- a/.github/workflows/eslint-miner.lock.yml +++ b/.github/workflows/eslint-miner.lock.yml @@ -154,7 +154,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/eslint-monster.lock.yml b/.github/workflows/eslint-monster.lock.yml index 7db46dabce5..2328bae94da 100644 --- a/.github/workflows/eslint-monster.lock.yml +++ b/.github/workflows/eslint-monster.lock.yml @@ -166,7 +166,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/eslint-refiner.lock.yml b/.github/workflows/eslint-refiner.lock.yml index b6f1ddb9d8e..e52fd75ca4b 100644 --- a/.github/workflows/eslint-refiner.lock.yml +++ b/.github/workflows/eslint-refiner.lock.yml @@ -167,7 +167,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/evoskill-evolver.lock.yml b/.github/workflows/evoskill-evolver.lock.yml index 194909b6a49..65b2c19c410 100644 --- a/.github/workflows/evoskill-evolver.lock.yml +++ b/.github/workflows/evoskill-evolver.lock.yml @@ -155,7 +155,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/example-failure-category-filter.lock.yml b/.github/workflows/example-failure-category-filter.lock.yml index a7ec74cfa06..38c0f20002d 100644 --- a/.github/workflows/example-failure-category-filter.lock.yml +++ b/.github/workflows/example-failure-category-filter.lock.yml @@ -143,7 +143,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/example-permissions-warning.lock.yml b/.github/workflows/example-permissions-warning.lock.yml index 3de5b811c3c..4f87a4c24e6 100644 --- a/.github/workflows/example-permissions-warning.lock.yml +++ b/.github/workflows/example-permissions-warning.lock.yml @@ -159,7 +159,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Enforce strict mode policy if: ${{ vars.GH_AW_POLICY_STRICT == 'true' }} run: | diff --git a/.github/workflows/example-workflow-analyzer.lock.yml b/.github/workflows/example-workflow-analyzer.lock.yml index 8f18d5b7027..6f94d3d0e98 100644 --- a/.github/workflows/example-workflow-analyzer.lock.yml +++ b/.github/workflows/example-workflow-analyzer.lock.yml @@ -175,7 +175,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/firewall-escape.lock.yml b/.github/workflows/firewall-escape.lock.yml index 6d234b9cc8d..28f5dc92514 100644 --- a/.github/workflows/firewall-escape.lock.yml +++ b/.github/workflows/firewall-escape.lock.yml @@ -178,7 +178,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/firewall.lock.yml b/.github/workflows/firewall.lock.yml index 7a714285d9f..6ca9a98b188 100644 --- a/.github/workflows/firewall.lock.yml +++ b/.github/workflows/firewall.lock.yml @@ -159,7 +159,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/functional-pragmatist.lock.yml b/.github/workflows/functional-pragmatist.lock.yml index 357bcffa2ac..9796abc562d 100644 --- a/.github/workflows/functional-pragmatist.lock.yml +++ b/.github/workflows/functional-pragmatist.lock.yml @@ -170,7 +170,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/github-mcp-structural-analysis.lock.yml b/.github/workflows/github-mcp-structural-analysis.lock.yml index 9c05988ac56..1469c98de3d 100644 --- a/.github/workflows/github-mcp-structural-analysis.lock.yml +++ b/.github/workflows/github-mcp-structural-analysis.lock.yml @@ -173,7 +173,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/github-mcp-tools-report.lock.yml b/.github/workflows/github-mcp-tools-report.lock.yml index 5e14cdea1d5..cb09e7e94cb 100644 --- a/.github/workflows/github-mcp-tools-report.lock.yml +++ b/.github/workflows/github-mcp-tools-report.lock.yml @@ -173,7 +173,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/github-remote-mcp-auth-test.lock.yml b/.github/workflows/github-remote-mcp-auth-test.lock.yml index bb174be7f5d..5ba0513ca42 100644 --- a/.github/workflows/github-remote-mcp-auth-test.lock.yml +++ b/.github/workflows/github-remote-mcp-auth-test.lock.yml @@ -164,7 +164,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/glossary-maintainer.lock.yml b/.github/workflows/glossary-maintainer.lock.yml index 6a5106aca1f..74f6d8a56bb 100644 --- a/.github/workflows/glossary-maintainer.lock.yml +++ b/.github/workflows/glossary-maintainer.lock.yml @@ -182,7 +182,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/go-fan.lock.yml b/.github/workflows/go-fan.lock.yml index cb9f8ee6f2e..ea041ab9e56 100644 --- a/.github/workflows/go-fan.lock.yml +++ b/.github/workflows/go-fan.lock.yml @@ -176,7 +176,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/go-logger.lock.yml b/.github/workflows/go-logger.lock.yml index d2f804d8d62..64dbc5791f8 100644 --- a/.github/workflows/go-logger.lock.yml +++ b/.github/workflows/go-logger.lock.yml @@ -178,7 +178,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/go-pattern-detector.lock.yml b/.github/workflows/go-pattern-detector.lock.yml index c20a05ad29c..6367a28f902 100644 --- a/.github/workflows/go-pattern-detector.lock.yml +++ b/.github/workflows/go-pattern-detector.lock.yml @@ -167,7 +167,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/gpclean.lock.yml b/.github/workflows/gpclean.lock.yml index 63504d0e6e7..11ad221bab9 100644 --- a/.github/workflows/gpclean.lock.yml +++ b/.github/workflows/gpclean.lock.yml @@ -166,7 +166,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Enforce strict mode policy if: ${{ vars.GH_AW_POLICY_STRICT == 'true' }} run: | diff --git a/.github/workflows/grumpy-reviewer.lock.yml b/.github/workflows/grumpy-reviewer.lock.yml index 61615611646..f617b833e64 100644 --- a/.github/workflows/grumpy-reviewer.lock.yml +++ b/.github/workflows/grumpy-reviewer.lock.yml @@ -176,7 +176,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/hippo-embed.lock.yml b/.github/workflows/hippo-embed.lock.yml index 4c026de99db..71e6393e628 100644 --- a/.github/workflows/hippo-embed.lock.yml +++ b/.github/workflows/hippo-embed.lock.yml @@ -164,7 +164,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/hourly-ci-cleaner.lock.yml b/.github/workflows/hourly-ci-cleaner.lock.yml index 0cb7c667d18..65d4d715a05 100644 --- a/.github/workflows/hourly-ci-cleaner.lock.yml +++ b/.github/workflows/hourly-ci-cleaner.lock.yml @@ -178,7 +178,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/impeccable-skills-reviewer.lock.yml b/.github/workflows/impeccable-skills-reviewer.lock.yml index 970faa97bbd..44609055fe0 100644 --- a/.github/workflows/impeccable-skills-reviewer.lock.yml +++ b/.github/workflows/impeccable-skills-reviewer.lock.yml @@ -188,7 +188,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/instructions-janitor.lock.yml b/.github/workflows/instructions-janitor.lock.yml index e27bb8e40bc..62af02f001e 100644 --- a/.github/workflows/instructions-janitor.lock.yml +++ b/.github/workflows/instructions-janitor.lock.yml @@ -173,7 +173,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/issue-arborist.lock.yml b/.github/workflows/issue-arborist.lock.yml index ca5f31fc81f..ad967d8f96f 100644 --- a/.github/workflows/issue-arborist.lock.yml +++ b/.github/workflows/issue-arborist.lock.yml @@ -168,7 +168,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/issue-monster.lock.yml b/.github/workflows/issue-monster.lock.yml index 66bf060db92..50863e99cee 100644 --- a/.github/workflows/issue-monster.lock.yml +++ b/.github/workflows/issue-monster.lock.yml @@ -657,7 +657,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/issue-triage-agent.lock.yml b/.github/workflows/issue-triage-agent.lock.yml index c2e336a2e9d..81eb174b4ca 100644 --- a/.github/workflows/issue-triage-agent.lock.yml +++ b/.github/workflows/issue-triage-agent.lock.yml @@ -163,7 +163,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/jsweep.lock.yml b/.github/workflows/jsweep.lock.yml index 52748cc7d1f..473cdaf034b 100644 --- a/.github/workflows/jsweep.lock.yml +++ b/.github/workflows/jsweep.lock.yml @@ -169,7 +169,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/layout-spec-maintainer.lock.yml b/.github/workflows/layout-spec-maintainer.lock.yml index 7f0cab87ee6..75741c56c6e 100644 --- a/.github/workflows/layout-spec-maintainer.lock.yml +++ b/.github/workflows/layout-spec-maintainer.lock.yml @@ -173,7 +173,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/lint-monster.lock.yml b/.github/workflows/lint-monster.lock.yml index d715b6eecf9..73932e31727 100644 --- a/.github/workflows/lint-monster.lock.yml +++ b/.github/workflows/lint-monster.lock.yml @@ -165,7 +165,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/linter-miner.lock.yml b/.github/workflows/linter-miner.lock.yml index ea14f32072a..9db0f56ea0e 100644 --- a/.github/workflows/linter-miner.lock.yml +++ b/.github/workflows/linter-miner.lock.yml @@ -175,7 +175,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/lockfile-stats.lock.yml b/.github/workflows/lockfile-stats.lock.yml index 782506c9e50..e6aff8ee002 100644 --- a/.github/workflows/lockfile-stats.lock.yml +++ b/.github/workflows/lockfile-stats.lock.yml @@ -167,7 +167,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/mattpocock-skills-reviewer.lock.yml b/.github/workflows/mattpocock-skills-reviewer.lock.yml index 6169cf833be..3732500543c 100644 --- a/.github/workflows/mattpocock-skills-reviewer.lock.yml +++ b/.github/workflows/mattpocock-skills-reviewer.lock.yml @@ -191,7 +191,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/mcp-inspector.lock.yml b/.github/workflows/mcp-inspector.lock.yml index a0a16def527..09bfdcb3f66 100644 --- a/.github/workflows/mcp-inspector.lock.yml +++ b/.github/workflows/mcp-inspector.lock.yml @@ -189,7 +189,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Enforce strict mode policy if: ${{ vars.GH_AW_POLICY_STRICT == 'true' }} run: | diff --git a/.github/workflows/mergefest.lock.yml b/.github/workflows/mergefest.lock.yml index 2effafef12b..8d532bcaeba 100644 --- a/.github/workflows/mergefest.lock.yml +++ b/.github/workflows/mergefest.lock.yml @@ -172,7 +172,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/metrics-collector.lock.yml b/.github/workflows/metrics-collector.lock.yml index b7d895ed98a..f4b82fe6ab6 100644 --- a/.github/workflows/metrics-collector.lock.yml +++ b/.github/workflows/metrics-collector.lock.yml @@ -168,7 +168,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/necromancer.lock.yml b/.github/workflows/necromancer.lock.yml index d6cfd0aac8c..a3a97ec51bd 100644 --- a/.github/workflows/necromancer.lock.yml +++ b/.github/workflows/necromancer.lock.yml @@ -184,7 +184,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/notion-issue-summary.lock.yml b/.github/workflows/notion-issue-summary.lock.yml index 0655c5a1795..b091adf865e 100644 --- a/.github/workflows/notion-issue-summary.lock.yml +++ b/.github/workflows/notion-issue-summary.lock.yml @@ -165,7 +165,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/objective-impact-report.lock.yml b/.github/workflows/objective-impact-report.lock.yml index 3648b0b3cbf..75c2f695df3 100644 --- a/.github/workflows/objective-impact-report.lock.yml +++ b/.github/workflows/objective-impact-report.lock.yml @@ -149,7 +149,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/org-health-report.lock.yml b/.github/workflows/org-health-report.lock.yml index 1ec112def54..7c54e8d6493 100644 --- a/.github/workflows/org-health-report.lock.yml +++ b/.github/workflows/org-health-report.lock.yml @@ -170,7 +170,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/outcome-collector.lock.yml b/.github/workflows/outcome-collector.lock.yml index a09a9f96b23..640e171eb4f 100644 --- a/.github/workflows/outcome-collector.lock.yml +++ b/.github/workflows/outcome-collector.lock.yml @@ -164,7 +164,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/pdf-summary.lock.yml b/.github/workflows/pdf-summary.lock.yml index 9f8296e1d2d..a0aa0568d99 100644 --- a/.github/workflows/pdf-summary.lock.yml +++ b/.github/workflows/pdf-summary.lock.yml @@ -182,7 +182,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/plan.lock.yml b/.github/workflows/plan.lock.yml index 244059a78a6..08b743bed06 100644 --- a/.github/workflows/plan.lock.yml +++ b/.github/workflows/plan.lock.yml @@ -175,7 +175,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/poem-bot.lock.yml b/.github/workflows/poem-bot.lock.yml index e452df17aa9..2a32f8e5d1d 100644 --- a/.github/workflows/poem-bot.lock.yml +++ b/.github/workflows/poem-bot.lock.yml @@ -184,7 +184,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/ponytail-reviewer.lock.yml b/.github/workflows/ponytail-reviewer.lock.yml index bfc6b4ef7cd..ae3b1333679 100644 --- a/.github/workflows/ponytail-reviewer.lock.yml +++ b/.github/workflows/ponytail-reviewer.lock.yml @@ -190,7 +190,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/portfolio-analyst.lock.yml b/.github/workflows/portfolio-analyst.lock.yml index 7a454f6e47f..9909f8576a9 100644 --- a/.github/workflows/portfolio-analyst.lock.yml +++ b/.github/workflows/portfolio-analyst.lock.yml @@ -162,7 +162,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/pr-code-quality-reviewer.lock.yml b/.github/workflows/pr-code-quality-reviewer.lock.yml index a97d3457012..ffed0edfbc2 100644 --- a/.github/workflows/pr-code-quality-reviewer.lock.yml +++ b/.github/workflows/pr-code-quality-reviewer.lock.yml @@ -189,7 +189,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/pr-description-caveman.lock.yml b/.github/workflows/pr-description-caveman.lock.yml index 609fddd8c1a..9bb828623c3 100644 --- a/.github/workflows/pr-description-caveman.lock.yml +++ b/.github/workflows/pr-description-caveman.lock.yml @@ -153,7 +153,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/pr-nitpick-reviewer.lock.yml b/.github/workflows/pr-nitpick-reviewer.lock.yml index bf7ed94e782..c3b55588e74 100644 --- a/.github/workflows/pr-nitpick-reviewer.lock.yml +++ b/.github/workflows/pr-nitpick-reviewer.lock.yml @@ -174,7 +174,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/pr-sous-chef.lock.yml b/.github/workflows/pr-sous-chef.lock.yml index a575c9eb892..83fd2faed22 100644 --- a/.github/workflows/pr-sous-chef.lock.yml +++ b/.github/workflows/pr-sous-chef.lock.yml @@ -178,7 +178,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/pr-triage-agent.lock.yml b/.github/workflows/pr-triage-agent.lock.yml index e39cf5d06b2..74185567f6c 100644 --- a/.github/workflows/pr-triage-agent.lock.yml +++ b/.github/workflows/pr-triage-agent.lock.yml @@ -167,7 +167,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/prompt-clustering-analysis.lock.yml b/.github/workflows/prompt-clustering-analysis.lock.yml index 477706d70eb..cbc965a6299 100644 --- a/.github/workflows/prompt-clustering-analysis.lock.yml +++ b/.github/workflows/prompt-clustering-analysis.lock.yml @@ -183,7 +183,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/purelock.lock.yml b/.github/workflows/purelock.lock.yml index 447a9f99566..64c87a1dcaa 100644 --- a/.github/workflows/purelock.lock.yml +++ b/.github/workflows/purelock.lock.yml @@ -181,7 +181,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/python-data-charts.lock.yml b/.github/workflows/python-data-charts.lock.yml index 75d022a9e30..1f0ca8c0f3a 100644 --- a/.github/workflows/python-data-charts.lock.yml +++ b/.github/workflows/python-data-charts.lock.yml @@ -170,7 +170,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/q.lock.yml b/.github/workflows/q.lock.yml index a06c577b48c..84c8e1112f6 100644 --- a/.github/workflows/q.lock.yml +++ b/.github/workflows/q.lock.yml @@ -197,7 +197,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/refactoring-cadence.lock.yml b/.github/workflows/refactoring-cadence.lock.yml index 949d05bb827..94edb3c828d 100644 --- a/.github/workflows/refactoring-cadence.lock.yml +++ b/.github/workflows/refactoring-cadence.lock.yml @@ -170,7 +170,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/refiner.lock.yml b/.github/workflows/refiner.lock.yml index 4e793d37946..173459bf69f 100644 --- a/.github/workflows/refiner.lock.yml +++ b/.github/workflows/refiner.lock.yml @@ -196,7 +196,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/release.lock.yml b/.github/workflows/release.lock.yml index 7c0bb14cc45..ed0b6de3f0e 100644 --- a/.github/workflows/release.lock.yml +++ b/.github/workflows/release.lock.yml @@ -183,7 +183,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/repo-audit-analyzer.lock.yml b/.github/workflows/repo-audit-analyzer.lock.yml index a717c83c656..c5d299d14cc 100644 --- a/.github/workflows/repo-audit-analyzer.lock.yml +++ b/.github/workflows/repo-audit-analyzer.lock.yml @@ -170,7 +170,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/repo-tree-map.lock.yml b/.github/workflows/repo-tree-map.lock.yml index bf7d2361b42..68a05acf538 100644 --- a/.github/workflows/repo-tree-map.lock.yml +++ b/.github/workflows/repo-tree-map.lock.yml @@ -163,7 +163,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/repository-quality-improver.lock.yml b/.github/workflows/repository-quality-improver.lock.yml index ccc6a4869b1..0bb0abf459b 100644 --- a/.github/workflows/repository-quality-improver.lock.yml +++ b/.github/workflows/repository-quality-improver.lock.yml @@ -172,7 +172,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/research.lock.yml b/.github/workflows/research.lock.yml index d50006934c4..926f40482c2 100644 --- a/.github/workflows/research.lock.yml +++ b/.github/workflows/research.lock.yml @@ -167,7 +167,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/ruflo-backed-task.lock.yml b/.github/workflows/ruflo-backed-task.lock.yml index 63250bac7ac..d2d8cc3d3ff 100644 --- a/.github/workflows/ruflo-backed-task.lock.yml +++ b/.github/workflows/ruflo-backed-task.lock.yml @@ -166,7 +166,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/safe-output-health.lock.yml b/.github/workflows/safe-output-health.lock.yml index ae95c37e5be..4eb11150763 100644 --- a/.github/workflows/safe-output-health.lock.yml +++ b/.github/workflows/safe-output-health.lock.yml @@ -172,7 +172,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/schema-consistency-checker.lock.yml b/.github/workflows/schema-consistency-checker.lock.yml index caa882ff7b5..d89a91c27fe 100644 --- a/.github/workflows/schema-consistency-checker.lock.yml +++ b/.github/workflows/schema-consistency-checker.lock.yml @@ -170,7 +170,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/schema-feature-coverage.lock.yml b/.github/workflows/schema-feature-coverage.lock.yml index 273293ef5e4..ca8d0e824c8 100644 --- a/.github/workflows/schema-feature-coverage.lock.yml +++ b/.github/workflows/schema-feature-coverage.lock.yml @@ -165,7 +165,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/scout.lock.yml b/.github/workflows/scout.lock.yml index 594c5ce92a5..31ed57bd21d 100644 --- a/.github/workflows/scout.lock.yml +++ b/.github/workflows/scout.lock.yml @@ -195,7 +195,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/security-compliance.lock.yml b/.github/workflows/security-compliance.lock.yml index e2ff26bab9b..8163f54a72c 100644 --- a/.github/workflows/security-compliance.lock.yml +++ b/.github/workflows/security-compliance.lock.yml @@ -172,7 +172,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/security-review.lock.yml b/.github/workflows/security-review.lock.yml index fc37dc83331..014e5f9f07b 100644 --- a/.github/workflows/security-review.lock.yml +++ b/.github/workflows/security-review.lock.yml @@ -176,7 +176,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/semantic-function-refactor.lock.yml b/.github/workflows/semantic-function-refactor.lock.yml index 9a72c44d3ee..9f1ca59418b 100644 --- a/.github/workflows/semantic-function-refactor.lock.yml +++ b/.github/workflows/semantic-function-refactor.lock.yml @@ -170,7 +170,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/sergo.lock.yml b/.github/workflows/sergo.lock.yml index da0d9e00a40..038ea2f5521 100644 --- a/.github/workflows/sergo.lock.yml +++ b/.github/workflows/sergo.lock.yml @@ -171,7 +171,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/sighthound-security-scan.lock.yml b/.github/workflows/sighthound-security-scan.lock.yml index a06368f3ef3..cb09243a97c 100644 --- a/.github/workflows/sighthound-security-scan.lock.yml +++ b/.github/workflows/sighthound-security-scan.lock.yml @@ -148,7 +148,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/skillet.lock.yml b/.github/workflows/skillet.lock.yml index 8026a2d90ce..5bc08fa9ecb 100644 --- a/.github/workflows/skillet.lock.yml +++ b/.github/workflows/skillet.lock.yml @@ -180,7 +180,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/slide-deck-maintainer.lock.yml b/.github/workflows/slide-deck-maintainer.lock.yml index 92d36531eaf..31ce6a2433f 100644 --- a/.github/workflows/slide-deck-maintainer.lock.yml +++ b/.github/workflows/slide-deck-maintainer.lock.yml @@ -182,7 +182,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-agent-all-merged.lock.yml b/.github/workflows/smoke-agent-all-merged.lock.yml index 744625e09e4..d16cf5c02e5 100644 --- a/.github/workflows/smoke-agent-all-merged.lock.yml +++ b/.github/workflows/smoke-agent-all-merged.lock.yml @@ -183,7 +183,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-agent-all-none.lock.yml b/.github/workflows/smoke-agent-all-none.lock.yml index 265c09f4c6d..af2b8b85477 100644 --- a/.github/workflows/smoke-agent-all-none.lock.yml +++ b/.github/workflows/smoke-agent-all-none.lock.yml @@ -183,7 +183,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-agent-public-approved.lock.yml b/.github/workflows/smoke-agent-public-approved.lock.yml index 02875d73124..f91ca26bfc8 100644 --- a/.github/workflows/smoke-agent-public-approved.lock.yml +++ b/.github/workflows/smoke-agent-public-approved.lock.yml @@ -185,7 +185,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-agent-public-none.lock.yml b/.github/workflows/smoke-agent-public-none.lock.yml index 3a42bbcc3e7..2bc9f27bd0f 100644 --- a/.github/workflows/smoke-agent-public-none.lock.yml +++ b/.github/workflows/smoke-agent-public-none.lock.yml @@ -183,7 +183,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-agent-scoped-approved.lock.yml b/.github/workflows/smoke-agent-scoped-approved.lock.yml index feeb835cde5..0dcaf7522dd 100644 --- a/.github/workflows/smoke-agent-scoped-approved.lock.yml +++ b/.github/workflows/smoke-agent-scoped-approved.lock.yml @@ -184,7 +184,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-aider.lock.yml b/.github/workflows/smoke-aider.lock.yml index d62e30d6712..49e9f5cf12e 100644 --- a/.github/workflows/smoke-aider.lock.yml +++ b/.github/workflows/smoke-aider.lock.yml @@ -168,7 +168,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-call-workflow.lock.yml b/.github/workflows/smoke-call-workflow.lock.yml index f246c11502c..6cf35662565 100644 --- a/.github/workflows/smoke-call-workflow.lock.yml +++ b/.github/workflows/smoke-call-workflow.lock.yml @@ -183,7 +183,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-checkout-pr-dispatch.lock.yml b/.github/workflows/smoke-checkout-pr-dispatch.lock.yml index aebfb7e2652..15b3b4fdc05 100644 --- a/.github/workflows/smoke-checkout-pr-dispatch.lock.yml +++ b/.github/workflows/smoke-checkout-pr-dispatch.lock.yml @@ -182,7 +182,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-ci.lock.yml b/.github/workflows/smoke-ci.lock.yml index d2b076fb5cc..7b6d56e53d8 100644 --- a/.github/workflows/smoke-ci.lock.yml +++ b/.github/workflows/smoke-ci.lock.yml @@ -195,7 +195,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-claude-on-copilot.lock.yml b/.github/workflows/smoke-claude-on-copilot.lock.yml index d536261ba92..ba58f8de544 100644 --- a/.github/workflows/smoke-claude-on-copilot.lock.yml +++ b/.github/workflows/smoke-claude-on-copilot.lock.yml @@ -158,7 +158,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-claude.lock.yml b/.github/workflows/smoke-claude.lock.yml index cef84ac4b0b..b89c3603dda 100644 --- a/.github/workflows/smoke-claude.lock.yml +++ b/.github/workflows/smoke-claude.lock.yml @@ -198,7 +198,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-codex.lock.yml b/.github/workflows/smoke-codex.lock.yml index 4f0e6a35c97..f7dba4e4475 100644 --- a/.github/workflows/smoke-codex.lock.yml +++ b/.github/workflows/smoke-codex.lock.yml @@ -193,7 +193,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-copilot-aoai-apikey.lock.yml b/.github/workflows/smoke-copilot-aoai-apikey.lock.yml index 8cb74b4e111..3e480753381 100644 --- a/.github/workflows/smoke-copilot-aoai-apikey.lock.yml +++ b/.github/workflows/smoke-copilot-aoai-apikey.lock.yml @@ -194,7 +194,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-copilot-aoai-entra.lock.yml b/.github/workflows/smoke-copilot-aoai-entra.lock.yml index 22898ef7a5a..4d896129b59 100644 --- a/.github/workflows/smoke-copilot-aoai-entra.lock.yml +++ b/.github/workflows/smoke-copilot-aoai-entra.lock.yml @@ -198,7 +198,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-copilot-arm.lock.yml b/.github/workflows/smoke-copilot-arm.lock.yml index 0cd9e5d4a75..e0879dc51ff 100644 --- a/.github/workflows/smoke-copilot-arm.lock.yml +++ b/.github/workflows/smoke-copilot-arm.lock.yml @@ -194,7 +194,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-copilot-auto.lock.yml b/.github/workflows/smoke-copilot-auto.lock.yml index f896ae5aaf6..bc3ec0725e5 100644 --- a/.github/workflows/smoke-copilot-auto.lock.yml +++ b/.github/workflows/smoke-copilot-auto.lock.yml @@ -165,7 +165,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-copilot-mai.lock.yml b/.github/workflows/smoke-copilot-mai.lock.yml index a540aab1953..e7a407b2edf 100644 --- a/.github/workflows/smoke-copilot-mai.lock.yml +++ b/.github/workflows/smoke-copilot-mai.lock.yml @@ -164,7 +164,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-copilot-sdk.lock.yml b/.github/workflows/smoke-copilot-sdk.lock.yml index 9986e6cf89f..fbb6b994cec 100644 --- a/.github/workflows/smoke-copilot-sdk.lock.yml +++ b/.github/workflows/smoke-copilot-sdk.lock.yml @@ -163,7 +163,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-copilot-small.lock.yml b/.github/workflows/smoke-copilot-small.lock.yml index 09879ab6c89..f3748f2d996 100644 --- a/.github/workflows/smoke-copilot-small.lock.yml +++ b/.github/workflows/smoke-copilot-small.lock.yml @@ -163,7 +163,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-copilot-sub-agents.lock.yml b/.github/workflows/smoke-copilot-sub-agents.lock.yml index 820deaea1eb..fb520b97839 100644 --- a/.github/workflows/smoke-copilot-sub-agents.lock.yml +++ b/.github/workflows/smoke-copilot-sub-agents.lock.yml @@ -149,7 +149,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-copilot.lock.yml b/.github/workflows/smoke-copilot.lock.yml index bcbabb63d2f..0a1f32ea809 100644 --- a/.github/workflows/smoke-copilot.lock.yml +++ b/.github/workflows/smoke-copilot.lock.yml @@ -195,7 +195,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-create-cross-repo-pr.lock.yml b/.github/workflows/smoke-create-cross-repo-pr.lock.yml index 829e5fc4b83..d9a345fbde0 100644 --- a/.github/workflows/smoke-create-cross-repo-pr.lock.yml +++ b/.github/workflows/smoke-create-cross-repo-pr.lock.yml @@ -183,7 +183,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-crush.lock.yml b/.github/workflows/smoke-crush.lock.yml index cc9a40f1e89..8a2fb7574d9 100644 --- a/.github/workflows/smoke-crush.lock.yml +++ b/.github/workflows/smoke-crush.lock.yml @@ -184,7 +184,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-cursor.lock.yml b/.github/workflows/smoke-cursor.lock.yml index 7947e2437d5..c18816d0f0b 100644 --- a/.github/workflows/smoke-cursor.lock.yml +++ b/.github/workflows/smoke-cursor.lock.yml @@ -186,7 +186,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-deepseek-harness.lock.yml b/.github/workflows/smoke-deepseek-harness.lock.yml index 1e42f97542d..a94df58497d 100644 --- a/.github/workflows/smoke-deepseek-harness.lock.yml +++ b/.github/workflows/smoke-deepseek-harness.lock.yml @@ -185,7 +185,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-drive.lock.yml b/.github/workflows/smoke-drive.lock.yml index 76387cf98de..8f26d293ee6 100644 --- a/.github/workflows/smoke-drive.lock.yml +++ b/.github/workflows/smoke-drive.lock.yml @@ -170,7 +170,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-gemini.lock.yml b/.github/workflows/smoke-gemini.lock.yml index bde72a480c6..652b23b4d66 100644 --- a/.github/workflows/smoke-gemini.lock.yml +++ b/.github/workflows/smoke-gemini.lock.yml @@ -188,7 +188,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-github-claude.lock.yml b/.github/workflows/smoke-github-claude.lock.yml index f2d96c69fe1..82d36126a92 100644 --- a/.github/workflows/smoke-github-claude.lock.yml +++ b/.github/workflows/smoke-github-claude.lock.yml @@ -158,7 +158,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-goose.lock.yml b/.github/workflows/smoke-goose.lock.yml index 7535f3a7dbf..f380f48155b 100644 --- a/.github/workflows/smoke-goose.lock.yml +++ b/.github/workflows/smoke-goose.lock.yml @@ -184,7 +184,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-kiro.lock.yml b/.github/workflows/smoke-kiro.lock.yml index fd35af2264f..48d74e1fc09 100644 --- a/.github/workflows/smoke-kiro.lock.yml +++ b/.github/workflows/smoke-kiro.lock.yml @@ -186,7 +186,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-multi-pr.lock.yml b/.github/workflows/smoke-multi-pr.lock.yml index cf2bfc77a29..4cd1ab42ece 100644 --- a/.github/workflows/smoke-multi-pr.lock.yml +++ b/.github/workflows/smoke-multi-pr.lock.yml @@ -183,7 +183,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-opencode.lock.yml b/.github/workflows/smoke-opencode.lock.yml index 83a1b6a815e..2e4853df146 100644 --- a/.github/workflows/smoke-opencode.lock.yml +++ b/.github/workflows/smoke-opencode.lock.yml @@ -186,7 +186,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-otel-backends.lock.yml b/.github/workflows/smoke-otel-backends.lock.yml index f2ff3063348..0ca93389af5 100644 --- a/.github/workflows/smoke-otel-backends.lock.yml +++ b/.github/workflows/smoke-otel-backends.lock.yml @@ -196,7 +196,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-pi.lock.yml b/.github/workflows/smoke-pi.lock.yml index 1d2bbb67440..4b78264bc84 100644 --- a/.github/workflows/smoke-pi.lock.yml +++ b/.github/workflows/smoke-pi.lock.yml @@ -187,7 +187,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-project.lock.yml b/.github/workflows/smoke-project.lock.yml index 75efab0a825..f5789932849 100644 --- a/.github/workflows/smoke-project.lock.yml +++ b/.github/workflows/smoke-project.lock.yml @@ -192,7 +192,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-pydantic.lock.yml b/.github/workflows/smoke-pydantic.lock.yml index c0007a1e53b..6ab8141f405 100644 --- a/.github/workflows/smoke-pydantic.lock.yml +++ b/.github/workflows/smoke-pydantic.lock.yml @@ -168,7 +168,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-service-ports.lock.yml b/.github/workflows/smoke-service-ports.lock.yml index f2a291f21b2..cc0fdce910e 100644 --- a/.github/workflows/smoke-service-ports.lock.yml +++ b/.github/workflows/smoke-service-ports.lock.yml @@ -174,7 +174,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-temporary-id.lock.yml b/.github/workflows/smoke-temporary-id.lock.yml index 7bdaabca379..4916bd784d1 100644 --- a/.github/workflows/smoke-temporary-id.lock.yml +++ b/.github/workflows/smoke-temporary-id.lock.yml @@ -185,7 +185,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-test-tools.lock.yml b/.github/workflows/smoke-test-tools.lock.yml index f0e27f3424a..7c77157f4dc 100644 --- a/.github/workflows/smoke-test-tools.lock.yml +++ b/.github/workflows/smoke-test-tools.lock.yml @@ -187,7 +187,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-update-cross-repo-pr.lock.yml b/.github/workflows/smoke-update-cross-repo-pr.lock.yml index 4d42090971c..95ebd309463 100644 --- a/.github/workflows/smoke-update-cross-repo-pr.lock.yml +++ b/.github/workflows/smoke-update-cross-repo-pr.lock.yml @@ -184,7 +184,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-workflow-call-with-inputs.lock.yml b/.github/workflows/smoke-workflow-call-with-inputs.lock.yml index d384ffe587b..ff60bbb7b11 100644 --- a/.github/workflows/smoke-workflow-call-with-inputs.lock.yml +++ b/.github/workflows/smoke-workflow-call-with-inputs.lock.yml @@ -232,7 +232,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/smoke-workflow-call.lock.yml b/.github/workflows/smoke-workflow-call.lock.yml index 83fa5e8c1ae..6059d045a87 100644 --- a/.github/workflows/smoke-workflow-call.lock.yml +++ b/.github/workflows/smoke-workflow-call.lock.yml @@ -236,7 +236,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/spec-enforcer.lock.yml b/.github/workflows/spec-enforcer.lock.yml index 4198a121e7e..f49b1a7140c 100644 --- a/.github/workflows/spec-enforcer.lock.yml +++ b/.github/workflows/spec-enforcer.lock.yml @@ -178,7 +178,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/spec-extractor.lock.yml b/.github/workflows/spec-extractor.lock.yml index ad509b0c04e..f98b49522cd 100644 --- a/.github/workflows/spec-extractor.lock.yml +++ b/.github/workflows/spec-extractor.lock.yml @@ -174,7 +174,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/spec-librarian.lock.yml b/.github/workflows/spec-librarian.lock.yml index f0410a1e496..46e5eac5113 100644 --- a/.github/workflows/spec-librarian.lock.yml +++ b/.github/workflows/spec-librarian.lock.yml @@ -174,7 +174,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/squad-game-planner.lock.yml b/.github/workflows/squad-game-planner.lock.yml index 80db66016cf..53ead984dc9 100644 --- a/.github/workflows/squad-game-planner.lock.yml +++ b/.github/workflows/squad-game-planner.lock.yml @@ -150,7 +150,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/squad-implement-worker.lock.yml b/.github/workflows/squad-implement-worker.lock.yml index faf1f98d3c3..b3b7d321f31 100644 --- a/.github/workflows/squad-implement-worker.lock.yml +++ b/.github/workflows/squad-implement-worker.lock.yml @@ -171,7 +171,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/squad-plan.lock.yml b/.github/workflows/squad-plan.lock.yml index 96ce30ad829..c18d58c1e56 100644 --- a/.github/workflows/squad-plan.lock.yml +++ b/.github/workflows/squad-plan.lock.yml @@ -159,7 +159,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/squad.lock.yml b/.github/workflows/squad.lock.yml index 872bd63c03c..7309842ea5d 100644 --- a/.github/workflows/squad.lock.yml +++ b/.github/workflows/squad.lock.yml @@ -188,7 +188,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/stale-pr-cleanup.lock.yml b/.github/workflows/stale-pr-cleanup.lock.yml index a21bc9c986c..074cc7f2cd5 100644 --- a/.github/workflows/stale-pr-cleanup.lock.yml +++ b/.github/workflows/stale-pr-cleanup.lock.yml @@ -162,7 +162,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/stale-repo-identifier.lock.yml b/.github/workflows/stale-repo-identifier.lock.yml index 503f1ade83b..0f94124d82d 100644 --- a/.github/workflows/stale-repo-identifier.lock.yml +++ b/.github/workflows/stale-repo-identifier.lock.yml @@ -184,7 +184,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/static-analysis-report.lock.yml b/.github/workflows/static-analysis-report.lock.yml index ae8560b06ab..5920ac9ddd9 100644 --- a/.github/workflows/static-analysis-report.lock.yml +++ b/.github/workflows/static-analysis-report.lock.yml @@ -171,7 +171,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/step-name-alignment.lock.yml b/.github/workflows/step-name-alignment.lock.yml index 622e6c4cc82..50aac71ea57 100644 --- a/.github/workflows/step-name-alignment.lock.yml +++ b/.github/workflows/step-name-alignment.lock.yml @@ -167,7 +167,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/sub-issue-closer.lock.yml b/.github/workflows/sub-issue-closer.lock.yml index 602deae3536..41d7af33586 100644 --- a/.github/workflows/sub-issue-closer.lock.yml +++ b/.github/workflows/sub-issue-closer.lock.yml @@ -167,7 +167,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/super-linter.lock.yml b/.github/workflows/super-linter.lock.yml index 42c0a91b7d7..483532f8593 100644 --- a/.github/workflows/super-linter.lock.yml +++ b/.github/workflows/super-linter.lock.yml @@ -165,7 +165,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/technical-doc-writer.lock.yml b/.github/workflows/technical-doc-writer.lock.yml index 55cac3b76ba..a9e062e30ba 100644 --- a/.github/workflows/technical-doc-writer.lock.yml +++ b/.github/workflows/technical-doc-writer.lock.yml @@ -177,7 +177,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/terminal-stylist.lock.yml b/.github/workflows/terminal-stylist.lock.yml index 372f306f5b9..d5106179efd 100644 --- a/.github/workflows/terminal-stylist.lock.yml +++ b/.github/workflows/terminal-stylist.lock.yml @@ -170,7 +170,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/test-quality-sentinel.lock.yml b/.github/workflows/test-quality-sentinel.lock.yml index 04e5ca36b02..70289fc53d1 100644 --- a/.github/workflows/test-quality-sentinel.lock.yml +++ b/.github/workflows/test-quality-sentinel.lock.yml @@ -183,7 +183,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/tidy.lock.yml b/.github/workflows/tidy.lock.yml index ee4fd655fee..373555a35c9 100644 --- a/.github/workflows/tidy.lock.yml +++ b/.github/workflows/tidy.lock.yml @@ -182,7 +182,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/typist.lock.yml b/.github/workflows/typist.lock.yml index bad5c1929b2..fc661788aab 100644 --- a/.github/workflows/typist.lock.yml +++ b/.github/workflows/typist.lock.yml @@ -177,7 +177,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/ubuntu-image-analyzer.lock.yml b/.github/workflows/ubuntu-image-analyzer.lock.yml index 0cb1246a992..d60d4c33042 100644 --- a/.github/workflows/ubuntu-image-analyzer.lock.yml +++ b/.github/workflows/ubuntu-image-analyzer.lock.yml @@ -177,7 +177,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/uk-ai-operational-resilience.lock.yml b/.github/workflows/uk-ai-operational-resilience.lock.yml index 27e54739bcc..c75388c1ff0 100644 --- a/.github/workflows/uk-ai-operational-resilience.lock.yml +++ b/.github/workflows/uk-ai-operational-resilience.lock.yml @@ -174,7 +174,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/unbloat-docs.lock.yml b/.github/workflows/unbloat-docs.lock.yml index 2ec207bbc91..863b1ebf9cf 100644 --- a/.github/workflows/unbloat-docs.lock.yml +++ b/.github/workflows/unbloat-docs.lock.yml @@ -185,7 +185,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/update-astro.lock.yml b/.github/workflows/update-astro.lock.yml index da3bffd8d77..0005141330d 100644 --- a/.github/workflows/update-astro.lock.yml +++ b/.github/workflows/update-astro.lock.yml @@ -177,7 +177,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/video-analyzer.lock.yml b/.github/workflows/video-analyzer.lock.yml index 1f66a6f5cf0..70b1c322e5d 100644 --- a/.github/workflows/video-analyzer.lock.yml +++ b/.github/workflows/video-analyzer.lock.yml @@ -165,7 +165,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/visual-regression-checker.lock.yml b/.github/workflows/visual-regression-checker.lock.yml index cd460377e72..283e68e03fe 100644 --- a/.github/workflows/visual-regression-checker.lock.yml +++ b/.github/workflows/visual-regression-checker.lock.yml @@ -175,7 +175,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/weekly-blog-post-writer.lock.yml b/.github/workflows/weekly-blog-post-writer.lock.yml index 8ba1fcefdb1..c93babb6581 100644 --- a/.github/workflows/weekly-blog-post-writer.lock.yml +++ b/.github/workflows/weekly-blog-post-writer.lock.yml @@ -177,7 +177,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/weekly-editors-health-check.lock.yml b/.github/workflows/weekly-editors-health-check.lock.yml index 175f8b067aa..c52adc96ee7 100644 --- a/.github/workflows/weekly-editors-health-check.lock.yml +++ b/.github/workflows/weekly-editors-health-check.lock.yml @@ -168,7 +168,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/weekly-issue-summary.lock.yml b/.github/workflows/weekly-issue-summary.lock.yml index 013bd4af9ce..201d0b351c6 100644 --- a/.github/workflows/weekly-issue-summary.lock.yml +++ b/.github/workflows/weekly-issue-summary.lock.yml @@ -172,7 +172,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/weekly-network-domains-audit.lock.yml b/.github/workflows/weekly-network-domains-audit.lock.yml index 74132fe115d..106c4ef4211 100644 --- a/.github/workflows/weekly-network-domains-audit.lock.yml +++ b/.github/workflows/weekly-network-domains-audit.lock.yml @@ -146,7 +146,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/weekly-safe-outputs-spec-review.lock.yml b/.github/workflows/weekly-safe-outputs-spec-review.lock.yml index 935cee14809..13787e90acf 100644 --- a/.github/workflows/weekly-safe-outputs-spec-review.lock.yml +++ b/.github/workflows/weekly-safe-outputs-spec-review.lock.yml @@ -171,7 +171,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/workflow-generator.lock.yml b/.github/workflows/workflow-generator.lock.yml index 2cb815af408..23781cb4460 100644 --- a/.github/workflows/workflow-generator.lock.yml +++ b/.github/workflows/workflow-generator.lock.yml @@ -169,7 +169,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/workflow-health-manager.lock.yml b/.github/workflows/workflow-health-manager.lock.yml index b16e474c3e0..2b89b25cf7a 100644 --- a/.github/workflows/workflow-health-manager.lock.yml +++ b/.github/workflows/workflow-health-manager.lock.yml @@ -164,7 +164,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/workflow-normalizer.lock.yml b/.github/workflows/workflow-normalizer.lock.yml index 064a01148c1..040b1f61f43 100644 --- a/.github/workflows/workflow-normalizer.lock.yml +++ b/.github/workflows/workflow-normalizer.lock.yml @@ -167,7 +167,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/.github/workflows/workflow-skill-extractor.lock.yml b/.github/workflows/workflow-skill-extractor.lock.yml index ee1145f7481..c34d849f0ed 100644 --- a/.github/workflows/workflow-skill-extractor.lock.yml +++ b/.github/workflows/workflow-skill-extractor.lock.yml @@ -162,7 +162,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/actions/setup/js/generate_aw_info.cjs b/actions/setup/js/generate_aw_info.cjs index 0c22f1dc757..8528652a353 100644 --- a/actions/setup/js/generate_aw_info.cjs +++ b/actions/setup/js/generate_aw_info.cjs @@ -24,10 +24,10 @@ const { ERR_CONFIG, ERR_SYSTEM } = require("./error_codes.cjs"); * * @param {typeof import('@actions/core')} core - GitHub Actions core library * @param {any} ctx - GitHub Actions context object - * @param {any} [github] - Authenticated GitHub client + * @param {any} [githubClient=global.github] - Authenticated GitHub client * @returns {Promise} */ -async function main(core, ctx, github) { +async function main(core, ctx, githubClient = global.github) { // Validate numeric context variables before processing run info. // This prevents malicious payloads from hiding special text or code in numeric fields. await validateContextVariables(core, ctx); @@ -100,7 +100,7 @@ async function main(core, ctx, github) { if (process.env.GH_AW_INFO_FETCH_RUN_CREATED_AT === "true") { try { - const response = await github.rest.actions.getWorkflowRun({ + const response = await githubClient.rest.actions.getWorkflowRun({ owner: ctx.repo.owner, repo: ctx.repo.repo, run_id: ctx.runId, diff --git a/pkg/workflow/aw_info_tmp_test.go b/pkg/workflow/aw_info_tmp_test.go index 416e412ba35..427064e80d2 100644 --- a/pkg/workflow/aw_info_tmp_test.go +++ b/pkg/workflow/aw_info_tmp_test.go @@ -62,8 +62,8 @@ This workflow tests that aw_info.json is generated in /tmp directory. t.Error("Expected step to require generate_aw_info.cjs module") } - if !strings.Contains(lockStr, "await main(core, context, github)") { - t.Error("Expected step to call main(core, context, github) from generate_aw_info.cjs") + if !strings.Contains(lockStr, "await main(core, context);") { + t.Error("Expected step to call main(core, context) from generate_aw_info.cjs") } // Verify setupGlobals is called before main so that global.core is available diff --git a/pkg/workflow/compiler_activation_job_test.go b/pkg/workflow/compiler_activation_job_test.go index 74dc163ff51..8aeaf50a615 100644 --- a/pkg/workflow/compiler_activation_job_test.go +++ b/pkg/workflow/compiler_activation_job_test.go @@ -57,7 +57,7 @@ func TestOperationalValueGraderScopesActionsReadToActivation(t *testing.T) { steps := strings.Join(job.Steps, "") assert.Contains(t, steps, "GH_AW_INFO_FETCH_RUN_CREATED_AT: \"true\"") - assert.Contains(t, steps, "await main(core, context, github)") + assert.Contains(t, steps, "await main(core, context)") mainPermissions, err := compiler.buildMainJobPermissions(data) require.NoError(t, err) diff --git a/pkg/workflow/compiler_yaml_step_lifecycle.go b/pkg/workflow/compiler_yaml_step_lifecycle.go index 14b97efb2e1..b14eb917481 100644 --- a/pkg/workflow/compiler_yaml_step_lifecycle.go +++ b/pkg/workflow/compiler_yaml_step_lifecycle.go @@ -252,7 +252,7 @@ func (c *Compiler) generateCreateAwInfo(yaml *strings.Builder, data *WorkflowDat yaml.WriteString(" const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');\n") yaml.WriteString(" setupGlobals(core, github, context, exec, io, getOctokit);\n") yaml.WriteString(" const { main } = require('${{ runner.temp }}/gh-aw/actions/generate_aw_info.cjs');\n") - yaml.WriteString(" await main(core, context, github);\n") + yaml.WriteString(" await main(core, context);\n") } func (c *Compiler) generateOutputCollectionStep(yaml *strings.Builder, data *WorkflowData) error { From 8fd673cda6114ef4a2e2b11df1e21abd0ba9952a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 24 Aug 2026 14:30:46 +0000 Subject: [PATCH 11/11] fix: repair stale wasm golden fixtures and JS typecheck for generate_aw_info Co-authored-by: mnkiefer <8320933+mnkiefer@users.noreply.github.com> --- actions/setup/js/generate_aw_info.cjs | 8 +++++--- .../testdata/TestWasmGolden_AllEngines/claude.golden | 2 +- .../testdata/TestWasmGolden_AllEngines/codex.golden | 2 +- .../testdata/TestWasmGolden_AllEngines/copilot.golden | 2 +- .../testdata/TestWasmGolden_AllEngines/gemini.golden | 2 +- pkg/workflow/testdata/TestWasmGolden_AllEngines/pi.golden | 2 +- .../TestWasmGolden_CompileFixtures/basic-copilot.golden | 2 +- .../playwright-cli-mode.golden | 2 +- .../TestWasmGolden_CompileFixtures/smoke-copilot.golden | 2 +- .../TestWasmGolden_CompileFixtures/with-imports.golden | 2 +- 10 files changed, 14 insertions(+), 12 deletions(-) diff --git a/actions/setup/js/generate_aw_info.cjs b/actions/setup/js/generate_aw_info.cjs index 8528652a353..28e298ad19c 100644 --- a/actions/setup/js/generate_aw_info.cjs +++ b/actions/setup/js/generate_aw_info.cjs @@ -24,10 +24,10 @@ const { ERR_CONFIG, ERR_SYSTEM } = require("./error_codes.cjs"); * * @param {typeof import('@actions/core')} core - GitHub Actions core library * @param {any} ctx - GitHub Actions context object - * @param {any} [githubClient=global.github] - Authenticated GitHub client + * @param {any} [githubClient] - Authenticated GitHub client; falls back to global.github * @returns {Promise} */ -async function main(core, ctx, githubClient = global.github) { +async function main(core, ctx, githubClient) { // Validate numeric context variables before processing run info. // This prevents malicious payloads from hiding special text or code in numeric fields. await validateContextVariables(core, ctx); @@ -100,7 +100,9 @@ async function main(core, ctx, githubClient = global.github) { if (process.env.GH_AW_INFO_FETCH_RUN_CREATED_AT === "true") { try { - const response = await githubClient.rest.actions.getWorkflowRun({ + // @ts-ignore - global.github is set by setupGlobals() from github-script context + const github = githubClient || global.github; + const response = await github.rest.actions.getWorkflowRun({ owner: ctx.repo.owner, repo: ctx.repo.repo, run_id: ctx.runId, diff --git a/pkg/workflow/testdata/TestWasmGolden_AllEngines/claude.golden b/pkg/workflow/testdata/TestWasmGolden_AllEngines/claude.golden index 72aa3b87130..3b17e675e19 100644 --- a/pkg/workflow/testdata/TestWasmGolden_AllEngines/claude.golden +++ b/pkg/workflow/testdata/TestWasmGolden_AllEngines/claude.golden @@ -94,7 +94,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/pkg/workflow/testdata/TestWasmGolden_AllEngines/codex.golden b/pkg/workflow/testdata/TestWasmGolden_AllEngines/codex.golden index 594eb685b27..2cd7f010c59 100644 --- a/pkg/workflow/testdata/TestWasmGolden_AllEngines/codex.golden +++ b/pkg/workflow/testdata/TestWasmGolden_AllEngines/codex.golden @@ -94,7 +94,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/pkg/workflow/testdata/TestWasmGolden_AllEngines/copilot.golden b/pkg/workflow/testdata/TestWasmGolden_AllEngines/copilot.golden index b3a70b47aab..479c12a3a54 100644 --- a/pkg/workflow/testdata/TestWasmGolden_AllEngines/copilot.golden +++ b/pkg/workflow/testdata/TestWasmGolden_AllEngines/copilot.golden @@ -94,7 +94,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/pkg/workflow/testdata/TestWasmGolden_AllEngines/gemini.golden b/pkg/workflow/testdata/TestWasmGolden_AllEngines/gemini.golden index 214644f61a0..daa0c657f54 100644 --- a/pkg/workflow/testdata/TestWasmGolden_AllEngines/gemini.golden +++ b/pkg/workflow/testdata/TestWasmGolden_AllEngines/gemini.golden @@ -94,7 +94,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/pkg/workflow/testdata/TestWasmGolden_AllEngines/pi.golden b/pkg/workflow/testdata/TestWasmGolden_AllEngines/pi.golden index 2106becf109..72fd56d4f96 100644 --- a/pkg/workflow/testdata/TestWasmGolden_AllEngines/pi.golden +++ b/pkg/workflow/testdata/TestWasmGolden_AllEngines/pi.golden @@ -94,7 +94,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/basic-copilot.golden b/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/basic-copilot.golden index 3222b0bfd3d..91cf394c316 100644 --- a/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/basic-copilot.golden +++ b/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/basic-copilot.golden @@ -94,7 +94,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/playwright-cli-mode.golden b/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/playwright-cli-mode.golden index 4f172d6dd2d..015770f1dcd 100644 --- a/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/playwright-cli-mode.golden +++ b/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/playwright-cli-mode.golden @@ -94,7 +94,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/smoke-copilot.golden b/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/smoke-copilot.golden index fe01d7cb3e3..dbb7b1dfc8c 100644 --- a/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/smoke-copilot.golden +++ b/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/smoke-copilot.golden @@ -107,7 +107,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }} diff --git a/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/with-imports.golden b/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/with-imports.golden index 303b7955bfc..139c9e51104 100644 --- a/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/with-imports.golden +++ b/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/with-imports.golden @@ -94,7 +94,7 @@ jobs: const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs')); setupGlobals(core, github, context, exec, io, getOctokit); const { main } = require(path.join(actionsDir, 'generate_aw_info.cjs')); - await main(core, context, github); + await main(core, context); - name: Restore daily AIC usage cache id: restore-daily-aic-cache if: ${{ env.GH_AW_MAX_DAILY_AI_CREDITS != '' }}