Skip to content

deterministic pipeline: infra-abort classification, pre-fix repro rate, quarantine-lift gate + 4 more (from #1060) #1082

Description

@rafaelgiln

Follow-up from working #1060 (dedicated daily-failure fix) with the prose orchestrator. Seven gaps surfaced there are mechanizable and belong to the deterministic pipeline (.claude/skills/langflow-e2e-issue-deterministic/), which currently cannot represent them.

P1 — without these the pipeline reaches a wrong verdict

  1. An infra abort counts as a spec failure. parsePwJson returns counts only, so a GET /api/v1/auto_login 20 s timeout, a socket hang up or an ERR_EMPTY_RESPONSE lands in unexpected and reds the VALIDATE gate as if the spec were broken. In [Daily #1057] agent-context-id-isolation: context_id re-tagging assertion is flaky (3× same-signature recurrent) #1060's session that was 3 of 13 pre-fix runs and 2 of 11 post-fix runs, and the same signature is now steady state in CI (daily-stable: detect a mid-run backend wedge and abort the shard instead of burning retries on a dead backend #1030/ci(daily-stable): measure the mid-run backend wedge and name it in the umbrella (#1030) #1074: gunicorn kills the single worker 7–10× per shard). Add a pure classifyRun() over the run's failure messages returning clean | infra-void | real-failure; a voided run is re-run instead of counted, capped, and the cap names the environment as the blocker rather than the spec.

  2. No pre-fix repro rate for flake issues. DEBUG records only verdict + summary, and VALIDATE proves 3 clean runs. For an 8 %-per-run flake, 3 green runs is the expected outcome even with no fix at all — the burst proves nothing on its own. [Daily #1057] agent-context-id-isolation: context_id re-tagging assertion is flaky (3× same-signature recurrent) #1060 was only settled by measuring 1/12 before the change and instrumenting the mechanism. Add a repro-run command that runs the unmodified spec N times and records {runs, failures, voids, signature}, and gate DEBUG on that evidence for flake-shaped issues (or on an explicit mechanism proof when the defect never reproduced spontaneously).

  3. Nothing verifies the quarantine was lifted. Triage quarantines a test with test.fixme + @stable removed, and lifting it is the dedicated issue's deliverable. No gate checks it. Add checkQuarantineLifted(): when the issue body mentions quarantine, VALIDATE fails while any test.fixme survives in a touched spec, and — when the body asks for @stable back — while a quarantined title lacks the tag.

P2

  1. Branch purity is unchecked at PR. checkPrReadiness validates branch name, Closes #NNN and the roadmap label, not the diff. In [Daily #1057] agent-context-id-isolation: context_id re-tagging assertion is flaky (3× same-signature recurrent) #1060 the branch silently absorbed another session's commit during the rebase (main was ahead locally) and it had to be caught by hand. Gate git diff --name-only origin/main..HEAD against the files the pipeline actually tracked.

  2. No artifact-recovery command. The highest-signal evidence for a daily failure is the run's playwright-json-daily-<run> artifact — per-attempt status, duration and error. It gets re-parsed with an ad-hoc script every time. Add artifacts <NNN> --run <id> with a pure summarizer, and point DEBUG at it.

  3. One verdict per issue. DEBUG stores a single verdict, but a dedicated issue can carry several symptom rows with different causes: [Daily #1057] agent-context-id-isolation: context_id re-tagging assertion is flaky (3× same-signature recurrent) #1060 listed two, and the second (google / gemini-2.5-flash, signature unknown) turned out to be daily-stable: detect a mid-run backend wedge and abort the shard instead of burning retries on a dead backend #1030's auto_login timeout, not the context_id defect. Model symptoms: [{row, verdict, ownedBy}], require every row in the issue's table to be accounted for, and require a row owned by another issue to be referenced in the PR body.

P3

  1. No place to record an ambient-red CI. The PR phase ends at prUrl. In [Daily #1057] agent-context-id-isolation: context_id re-tagging assertion is flaky (3× same-signature recurrent) #1060 the E2E gate was red for a tracked ambient cause and the honest move — a justification comment naming the evidence before merging — happened outside the pipeline. Add ciVerdict: green | ambient-red to the PR gate, with a justification comment URL verified to exist on the PR when red.

Done when

  • Each item lands as a pure, unit-tested function (node:test, run via npx tsx --test .claude/skills/langflow-e2e-issue-deterministic/pipeline/*.test.ts) plus its wiring in cli.ts/instructions.ts
  • SKILL.md documents the new commands and the two new hard rules (an infra-signature abort is not a spec result; a flake issue needs its pre-fix rate)
  • No behavior change for issues that do not trigger the new gates

Metadata

Metadata

Assignees

Labels

follow-upApproved exception: follow-up of merged work (ROADMAP Intake)qa-infraQA testing infrastructure: workflows, automation, evidence, tracking

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions