Skip to content

docs(e2e): repoint E1/E4 to the live fixture, preserve evidence records - #1856

Merged
bradygaster merged 1 commit into
devfrom
squad/1851-e2e-fixture-repoint
Aug 24, 2026
Merged

bradygaster merged 1 commit into
devfrom
squad/1851-e2e-fixture-repoint

Conversation

@bradygaster

Copy link
Copy Markdown
Collaborator

Closes #1851.

What changed

The E2E runbooks pointed at bradygaster/aspiregregator-squad-e2e, deleted 2026-08-24 with every other test repo. Re-run targets now point at octodemo/aspiregregator-squad-e2e, recreated from the pristine read-only origin bradygaster/Aspiregregator. Runs bill to octodemo because the bradygaster org was near its Actions-minute limit.

Procedure moved; evidence did not. E1:4 and E4:27 / E4:256 state which repo produced the readings printed beside them. Rewriting them would falsify an evidence record, so they keep the retired name and are annotated as retired. Only $FIXTURE — the re-run input — was repointed.

Three things a find-and-replace would have gotten wrong

1. The repo name was reused across owners. E1's blocked_by_job_url cross-check matched the bare name aspiregregator-squad-e2e. After the move that string no longer identifies the fixture — it matches the deleted repo equally well, so the check would accept evidence from a repo that does not exist. Tightened to match owner and name.

2. E4's central criterion is derived, not fixed. The dispositive/ambiguous split (devrel and reviewer dispositive, lead ambiguous) is not vocabulary — it is a function of the fixture's roster: a token is dispositive when it appears nowhere in the roster, ambiguous when the roster's own Role column contains it. Measured: the new fixture has no .squad/ directory at all (gh api repos/octodemo/aspiregregator-squad-e2e/contents/.squad → 404, identical to the origin), so it has no roster, and casting will not reproduce Keaton/McManus/Fenster/Hockney/Kint. Added a re-derivation gate that states the reasoning rule so a re-run re-classifies instead of inheriting.

3. Phase 0 cannot create a fixture, only refresh one. It assumes .github/workflows/squad.md is already present. Added Phase 0-pre, which asserts activation state up front. Without it, 0b reports UNREADABLE on all four files — the correct failure, but only after a wasted diagnostic cycle.

Verification

  • test/e2e-runbook-hygiene.test.ts (the E2E runbook commands ship untested — a non-functional query vacuously passes its gate #1822 linter): 3/3 pass.
  • Mutation-tested, not assumed. Removing the $LASTEXITCODE pairing from the new Phase 0-pre block fails the linter at E4:390 with the exact suppression diagnostic — so the new fenced block is genuinely covered, not vacuously passing.
  • Audited every surviving aspiregregator reference. The 4 remaining bradygaster/... hits are all explicitly annotated as retired. The 4 hits in test/gh-aw-quality.test.ts are unaffected: :520/:539 reference a local test-fixtures/planning/aspiregregator/ directory, and :1215/:1246 are comments citing historical run IDs.

Remaining, and deliberately not in this PR

The fixture is repointed but not yet runnable. It still needs Squad activation (which generates .squad/ and the roster) and repo secrets, which were not copied from the origin and cannot be recovered from the deleted fixture. That is operator work for the E2E run itself, not a documentation change — and Phase 0-pre now detects and states it rather than letting a run discover it late.

The E2E runbooks targeted `bradygaster/aspiregregator-squad-e2e`, which was
deleted on 2026-08-24 along with every other test repo. Runs now bill to
`octodemo`, and the fixture was recreated from the pristine read-only origin
`bradygaster/Aspiregregator`.

Moved the PROCEDURE, not the EVIDENCE. E1:4 and E4:27/:256 record which repo
produced the readings they sit beside; rewriting those would falsify the
records. They keep the retired name and are annotated as retired. Only the
re-run inputs (`$FIXTURE`) were repointed.

Three findings the repoint surfaced, none fixable by find-and-replace:

1. The repo NAME was reused across owners, so E1's `blocked_by_job_url`
   cross-check -- which matched the bare name -- could no longer identify the
   fixture, and would accept evidence from the deleted repo. Tightened to match
   owner AND name.

2. The new fixture is a bare application repo with no `.squad/` directory, so
   it has no roster. E4's central criterion (which leaked tokens are dispositive
   vs ambiguous) is DERIVED from roster contents, not fixed vocabulary. Added a
   re-derivation gate stating the reasoning rule, so a re-run cannot inherit the
   retired fixture's classification.

3. Phase 0 refreshes an activated fixture; it cannot create one. Added Phase
   0-pre, which asserts activation state before choosing a path rather than
   letting 0b report UNREADABLE on all four files and burning a diagnostic cycle.

Verification: the E2E runbook hygiene linter (#1822 / PR #1852) passes, and was
mutation-tested against the new fenced block -- removing the exit-code pairing
fails it at E4:390, so the new block is genuinely covered rather than vacuously
passing.

Closes #1851

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 20afe6d2-444e-414e-8a39-e67ab67ca6df
Copilot AI lite review requested due to automatic review settings August 24, 2026 18:58
@github-actions

Copy link
Copy Markdown
Contributor

⚠️ Squad File Leakage Detected

The following .squad/ files were modified in this PR:

  • .squad/e2e/E1-merge-continuation-relay.md
  • .squad/e2e/E4-agent-binding-verification.md
  • .squad/e2e/README.md

These files affect team routing, agent charters, and decisions.
If intentional, ensure approval from the team lead.

@github-actions

github-actions Bot commented Aug 24, 2026 •

Copy link
Copy Markdown
Contributor

🛫 PR Readiness Check

ℹ️ This comment updates on each push. Last checked: commit 803e028

PR Scope: 🔧 Infrastructure

⚠️ 2 item(s) to address before review

Status Check Details
✅ Single commit 1 commit — clean history
✅ Not in draft Ready for review
✅ Branch up to date Up to date with dev
❌ Copilot review No Copilot review yet — it may still be processing
✅ Changeset present No source files changed — changeset not required
✅ Scope clean ⚠️ PR includes 3 .squad/ file(s) — ensure these are intentional
✅ No merge conflicts No merge conflicts
❌ Copilot threads resolved 1 unresolved Copilot thread(s) — fix and resolve before merging
✅ CI passing All checks passing

Files Changed (3 files, +68 −8)

File +/−
.squad/e2e/E1-merge-continuation-relay.md +5 −3
.squad/e2e/E4-agent-binding-verification.md +55 −4
.squad/e2e/README.md +8 −1

Total: +68 −8


This check runs automatically on every push. Fix any ❌ items and push again.
See CONTRIBUTING.md and PR Requirements for details.

@github-actions

Copy link
Copy Markdown
Contributor

🟢 Impact Analysis — PR #1856

Risk tier: 🟢 LOW

📊 Summary

Metric Count
Files changed 3
Files added 0
Files modified 3
Files deleted 0
Modules touched 1

🎯 Risk Factors

  • 3 files changed (≤5 → LOW)
  • 1 module(s) touched (≤1 → LOW)

📦 Modules Affected

squad-state (3 files)
  • .squad/e2e/E1-merge-continuation-relay.md
  • .squad/e2e/E4-agent-binding-verification.md
  • .squad/e2e/README.md

This report is generated automatically for every PR. See #733 for details.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

E4’s new Phase 0-pre commentary currently equates any non-zero gh api exit with a 404/missing directory, which can mislead operators when the failure is actually auth/network/permissions-related.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Pull request overview

This PR updates the E2E runbook documentation to repoint E1/E4 re-run inputs to the new live fixture (octodemo/aspiregregator-squad-e2e) while explicitly preserving the original evidence records that reference the now-deleted retired fixture (bradygaster/aspiregregator-squad-e2e).

Changes:

  • Repointed fixture targets used for re-runs to octodemo/aspiregregator-squad-e2e and documented why the move occurred.
  • Hardened E1’s evidence cross-check wording to require matching owner + repo name (not just the repo name).
  • Added an E4 “Phase 0-pre” gate to detect an unactivated fixture (missing .squad/) and require re-derivation of roster-dependent criteria.
File summaries
File Description
.squad/e2e/README.md Updates the documented fixture and records the rationale/implications of the forced move.
.squad/e2e/E4-agent-binding-verification.md Repoints $FIXTURE, preserves retired-fixture evidence annotations, and adds Phase 0-pre to detect unactivated fixtures and require re-derivation.
.squad/e2e/E1-merge-continuation-relay.md Preserves retired-fixture evidence header, repoints re-run $FIXTURE, and tightens the blocked_by_job_url cross-check to owner+repo matching.
Review details
  • Files reviewed: 3/3 changed files
  • Comments generated: 1
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment on lines +392 to +395
# 0 -> activated; skip to 0a and refresh normally.
# !=0 -> 404 / absent; Squad has never been activated here. Run activation FIRST.
# Do NOT interpret a 404 as "clean" and proceed: 0b would then report UNREADABLE
# for all four files, which is the correct failure but wastes a cycle diagnosing it.
@bradygaster
bradygaster merged commit afc0d04 into dev Aug 24, 2026
17 checks passed
bradygaster added a commit that referenced this pull request Aug 24, 2026
…un (#1862)

Executing E4 end-to-end against the new fixture surfaced five documented
procedures that are stale or wrong. Two are silent-failure traps: they do not
error, they produce a confident wrong answer.

E4 Phase 2 -- short path 5 -> 8 commands. The bold "do not continue to
`plan validate` / `plan accept ...`; those verify nothing additional" was false.
`plan activate` hard-blocks without an `impl-accepted` artifact while reporting
all six jobs `success`, so it looks clean and does nothing. On the old path
Phases 3b/3c/3e had no artifact to read and only 3a scored. Added the two
newly-required accept steps and the `plan validate` first-pass-FAIL cycle.

E4 Phase 0b -- compare content, not byte size. Three provisioning artifacts each
produce a false STALE: the `source:` line `gh aw add` injects into the top-level
workflow, CRLF vs LF, and `gh aw add` stripping the trailing newline. With only
the first two handled the main workflow still read 1391 vs 1390. Normalizing all
three takes all four surfaces to MATCH; verified live against the fixture.

E4 3b -- the contamination table and its "guaranteed false FAIL" warning
described the fixture that was deleted before this one existed. The new fixture
started with 12 labels and zero `squad:*`, which inverts the guidance. Missed
when #1856 repointed the runbooks.

E4 3a -- warn against substituting `Out-File` for `Set-Content`. `Out-File`
wraps at console width and splits markdown table rows mid-cell; it split the
roster name `Keaton` into `Ke`/`aton` and silently corrupted a roster check.

E1 -- worker PRs are not parked in `action_required`. GitHub suppresses
workflow triggers entirely for `GITHUB_TOKEN`-authored PRs, so no run is
created. The documented `runs/<ID>/approve` override cannot apply to a run that
does not exist. Same consequence, different cause; the PAT/App-token fix stands.

Also records the 2026-08-24 amended-procedure verdict at the head of E4: 3a and
3c PASS, 3b/3e PARTIAL -> #1859, #1860.

Verified: `test/e2e-runbook-hygiene.test.ts` (3/3), `npm run lint`. Phase 0b's
replacement block was executed against the live fixture, not just reviewed.
Docs only; no changeset.

Closes #1861

Co-authored-by: brady gaster <bradygaster@github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 20afe6d2-444e-414e-8a39-e67ab67ca6df
@bradygaster
bradygaster deleted the squad/1851-e2e-fixture-repoint branch September 9, 2026 19:44
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.

E1/E4 hardcode a deleted fixture repo — repoint to octodemo/aspiregregator-squad-e2e

2 participants