mirror of
https://github.com/garrytan/gstack.git
synced 2026-09-09 14:38:59 +02:00
feat: free-lane flake ledger — retry ON in CI, flaky-passes recorded and uploaded
The runner's attribution-gated flaky-retry pass (cap 5, truncation veto) was OFF in the required lane and its FLAKY-PASS evidence was console-only — so a single timing flake red the merge gate while repeat offenders stayed unenumerable. free-tests.yml now sets GSTACK_FREE_RETRY_FLAKY=1 and points GSTACK_FLAKE_LEDGER at runner.temp; every flaky-pass appends a JSONL entry (SINGLE writer: the parent runner — no concurrent-append hazard by construction; fail-open with a loud warning so a broken ledger can never red the lane) and the artifact uploads UNCONDITIONALLY — a flaky-pass run is green, which is exactly when the evidence matters. Wiring pinned by free-tests-workflow-wiring; ledger behavior unit-tested incl. the fail-open path. Matches 2026 industry practice (retry for data, quarantine out of merge-blocking but never out of logging) with the repo's own receipts. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
2dabc02447
commit
7f36eacbd2
@@ -129,6 +129,27 @@ jobs:
|
||||
run: xvfb-run -a bun run test:free
|
||||
env:
|
||||
GSTACK_EXPECT_BINARIES: "1"
|
||||
# WS1 flake telemetry: a single timing flake must not red the only
|
||||
# required lane — the runner's attribution-gated retry pass (cap 5,
|
||||
# truncation veto) re-runs failing files once, serially, and a
|
||||
# clean retry downgrades to a LOUD flaky-pass. Every flaky-pass is
|
||||
# appended to the ledger (single writer: the parent runner) and
|
||||
# uploaded below, so repeat offenders are an enumerable series —
|
||||
# recorded and ranked, never masked. Pinned by
|
||||
# test/free-tests-workflow-wiring.test.ts.
|
||||
GSTACK_FREE_RETRY_FLAKY: "1"
|
||||
GSTACK_FLAKE_LEDGER: ${{ runner.temp }}/flake-ledger.jsonl
|
||||
|
||||
# Uploaded unconditionally (not just on failure): a flaky-pass run is
|
||||
# GREEN — that's the point — so its evidence must survive green runs.
|
||||
- name: Upload flake ledger
|
||||
if: always()
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: flake-ledger
|
||||
path: ${{ runner.temp }}/flake-ledger.jsonl
|
||||
if-no-files-found: ignore
|
||||
retention-days: 90
|
||||
|
||||
# The runner streams the full child output to per-run logs under the OS
|
||||
# tmpdir and prints only the quiet contract to the console. Without this
|
||||
|
||||
Reference in New Issue
Block a user