Skip to content

CI recurrence study: Tier 0 fingerprinting, collector, and harness - #10

Open
chrishonson wants to merge 2 commits into
mainfrom
claude/ci-failure-recurrence-study-tu616v
Open

CI recurrence study: Tier 0 fingerprinting, collector, and harness#10
chrishonson wants to merge 2 commits into
mainfrom
claude/ci-failure-recurrence-study-tu616v

Conversation

@chrishonson

Copy link
Copy Markdown
Owner

Schema, Tier 0 normalizer, and Tier 1 worker prompt for the CI failure
recurrence study, plus the collector and the model-free analysis path.

Tier 0 is deterministic regex normalization + sha1 fingerprinting: free,
reproducible, and hashable, which an LLM label is not. Tiers 1/2 are only
ever asked about what Tier 0 leaves as a singleton.

Verified with known-answer fixtures (20/20 in test_pipeline.py): the
normalizer collapses one bug across differing paths, line numbers, and
float values while keeping distinct test files and distinct exit codes
apart; the chronological walk reproduces a known rate; both flake shapes
are detected; the ingest path handles annotation evidence with a
step-name fallback.

Two bugs found and fixed by that testing, both of which would have
corrupted the headline rate:

  • a port rule fired on four-digit line numbers ahead of the line/col
    rule, shattering collapse across every large file
  • the absolute-path rule mangled repo-relative annotation paths, which
    are identical on every runner and therefore signal

No recurrence rate is computed yet. This session cannot reach the Actions
API for either target repo (403 per-repository authorization; the one
reachable repo has zero CI failures), so collection stopped rather than
building the Tier 1 loop on an unmeasured Tier 0. See findings.md.

Stdlib only: no LangChain, DSPy, Celery, or Redis.

Co-Authored-By: Claude Opus 5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01DJvuGv9fvnpNGXmJFp2HzQ

claude added 2 commits August 14, 2026 01:35
Schema, Tier 0 normalizer, and Tier 1 worker prompt for the CI failure
recurrence study, plus the collector and the model-free analysis path.

Tier 0 is deterministic regex normalization + sha1 fingerprinting: free,
reproducible, and hashable, which an LLM label is not. Tiers 1/2 are only
ever asked about what Tier 0 leaves as a singleton.

Verified with known-answer fixtures (20/20 in test_pipeline.py): the
normalizer collapses one bug across differing paths, line numbers, and
float values while keeping distinct test files and distinct exit codes
apart; the chronological walk reproduces a known rate; both flake shapes
are detected; the ingest path handles annotation evidence with a
step-name fallback.

Two bugs found and fixed by that testing, both of which would have
corrupted the headline rate:
- a port rule fired on four-digit line numbers ahead of the line/col
  rule, shattering collapse across every large file
- the absolute-path rule mangled repo-relative annotation paths, which
  are identical on every runner and therefore signal

No recurrence rate is computed yet. This session cannot reach the Actions
API for either target repo (403 per-repository authorization; the one
reachable repo has zero CI failures), so collection stopped rather than
building the Tier 1 loop on an unmeasured Tier 0. See findings.md.

Stdlib only: no LangChain, DSPy, Celery, or Redis.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DJvuGv9fvnpNGXmJFp2HzQ
The README asked for a PAT with `public_repo`. That scope grants write to
every public repo the holder can see and buys this study nothing: both
targets are public and all three endpoints used here (actions/runs,
runs/{id}/jobs, check-runs/{id}/annotations) are public-readable without
any scope.

The token exists only to lift the rate limit from 60/hr unauthenticated
to 5,000/hr, which any valid token does regardless of scopes. So: a
classic PAT with zero scopes ticked, or a fine-grained PAT set to
"Public repositories (read-only)" -- noting a fine-grained token cannot
be scoped to a repo you do not own.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DJvuGv9fvnpNGXmJFp2HzQ
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants