Skip to content

docs(e2e): add E4 agent-binding verification procedure for #1784 - #1791

Merged
bradygaster merged 2 commits into
devfrom
bradygaster-sims-e4-verification-prep
Aug 21, 2026
Merged

docs(e2e): add E4 agent-binding verification procedure for #1784#1791
bradygaster merged 2 commits into
devfrom
bradygaster-sims-e4-verification-prep

Conversation

@bradygaster

Copy link
Copy Markdown
Owner

What

Adds .squad/e2e/E4-agent-binding-verification.md — a runnable, not-yet-executed procedure to verify #1784 once Procedures' fix merges.

Also folds E3's findings into the E2E runbook, which lives outside the repo (Desktop\squad-e2e-runbook.md, 18,745 → 25,633 bytes) and is therefore not part of this diff.

Why

E3 walked the full long planning path and surfaced #1784: plan activate minted squad:lead ×3 and squad:devrel ×1 as owner labels instead of cast names. Root cause is that the prompt's prohibitions spell out the forbidden tokens concretely (workflows/squad.md:730, :913) and the model copied them verbatim out of the parenthetical forbidding them.

When the fix lands we need a cheap, targeted live verification — not another ~54-minute full path.

Two findings that shaped the doc

1. The procedure stops at plan implementation, not plan activate. The leak originates in the Agent column at :913 and only surfaces as labels at :730. Catching it at the source cuts the run from ~54 min to ~27 min — a figure derived from E3's actual sub-window (00:18:10 → 00:44:54 = 26.7 min), not estimated.

2. The verdict is three-way, not binary. The two leaked tokens are not equal evidence:

  • squad:devrel is dispositive. Verified against the fixture roster: DevRel → False, devrel → False. It appears nowhere in the fixture — not as a Name, not as a Role. Its only possible source is the prohibition text.
  • squad:lead is ambiguous. Keaton's Role column literally reads "Lead / Architect", so it could be role-column derivation or prohibition-copying.

⇒ A binary criterion would score "devrel cleared, lead persists" as FAIL and argue for reverting a fix that genuinely worked. PARTIAL exists to prevent that.

Also in the doc

Runbook changes (outside this PR)

  • Measured long-path budget: ~48 min compute / ~54 min productive wall / ~66 min cold-start. E3 was 10 runs, not 8 — the two extras are the precondition halts, which is the falsifiable proof for the entry-sequence section.
  • Required entry sequence, documenting that out-of-order invocation halts cleanly and that this is healthy behaviour, not a bug.
  • Which path can run unattended: planning = zero interventions (8/8 first attempt); implement = two blockers. Clarifies the gate is the bot-author rule (app/github-actions), not repo settings — those are already permissive.
  • New gotcha Copilot client parity: Squad works fully only on GitHub Copilot CLI #10 — "silent success: exit 0, no work done" as a named pattern. Gotchas feat: worktree awareness, Scribe auto-commit, and decision consolidation #1 and feat: GitHub Issues intake, PRD mode, and human team members #2 were already instances; the third was last night's write to a .git/info/exclude-excluded path that reported success. Three occurrences of one shape is a class, and naming the class is what stops the fourth.

Verification

Nothing was fired — #1784 is OPEN and PR #1787 is OPEN/unmerged, both confirmed this session. All fixture reads were read-only gh api calls.

Staging was checked per the data-loss postmortem: .squad/ is excluded at .git/info/exclude:9, so the file needed git add -f and was confirmed tracked via git ls-files --error-unmatch (exit 0). Deletion check clean. The three pre-existing churn files (docs/pagefind.yml, two samples/**/*.sh) were left unstaged.

⚠️ Nobody may claim #1784 is verified until this procedure runs green post-merge. The doc says so in its own status banner.

Refs #1784. Deliberately does not close it.

Adds .squad/e2e/E4-agent-binding-verification.md: a runnable, not-yet-executed
procedure to verify #1784 (plan activate minting squad:lead/squad:devrel as
owner labels instead of cast names) once Procedures' fix merges.

Targets ~27 min instead of a full ~54 min long-path run by stopping at
`plan implementation`, which is where the Agent-column leak originates
(workflows/squad.md:913) rather than where it surfaces (:730).

Key contents:
- Three-way PASS/PARTIAL/FAIL criterion, stated before the run. squad:devrel is
  dispositive (DevRel appears nowhere in the fixture roster, verified), while
  squad:lead is ambiguous (Keaton's Role column reads "Lead / Architect"). A
  binary criterion would score a real partial fix as FAIL.
- Fixture-refresh phase covering the traps that produce false results: two files
  named squad.md (56,525 vs 6,688 bytes), two independently stale surfaces
  (compiled lock + committed source), GH_AW_INFO_FRONTMATTER_SOURCE being
  provenance only, and PowerShell backtick/ConvertFrom-Json pitfalls.
- Seed issue shaped for >=2 sibling epics per EECOM, with an explicit guard rail
  against contorting the fixture to force that shape.
- #1779 / PR #1787 refill verification kept as a clearly separated follow-on with
  its own criterion, marked not-unattended-safe.

Refs #1784. Deliberately does not close it: this procedure has not been executed
and #1784 must not be marked verified until it runs green post-merge.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot AI lite review requested due to automatic review settings August 21, 2026 08:28
@github-actions

github-actions Bot commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

🛫 PR Readiness Check

ℹ️ This comment updates on each push. Last checked: commit 620c88a

PR Scope: 🔧 Infrastructure

⚠️ 3 item(s) to address before review

Status Check Details
Single commit 2 commits — consider squashing before review
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 1 .squad/ file(s) — ensure these are intentional
No merge conflicts No merge conflicts
Copilot threads resolved 2 unresolved Copilot thread(s) — fix and resolve before merging
CI passing All checks passing

Files Changed (1 file, +565 −0)

File +/−
.squad/e2e/E4-agent-binding-verification.md +565 −0

Total: +565 −0


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

⚠️ Squad File Leakage Detected

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

  • .squad/e2e/E4-agent-binding-verification.md

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

@github-actions

Copy link
Copy Markdown
Contributor

🟢 Impact Analysis — PR #1791

Risk tier: 🟢 LOW

📊 Summary

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

🎯 Risk Factors

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

📦 Modules Affected

squad-state (1 file)
  • .squad/e2e/E4-agent-binding-verification.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.

Pull request overview

Adds a new E2E verification procedure document for issue #1784 (agent/owner binding live leak), intended to be run post-merge of Procedures’ fix to provide a cheaper, targeted validation run.

Changes:

  • Adds a runnable, step-by-step E4 procedure that stops at plan implementation to catch the leak at the Agent column source.
  • Defines a three-way verdict (PASS / PARTIAL / FAIL) to distinguish dispositive devrel leakage from ambiguous lead leakage.
  • Documents fixture refresh traps, evidence capture expectations, and a clearly separated follow-on for #1779 / PR #1787.
Show a summary per file
File Description
.squad/e2e/E4-agent-binding-verification.md New E4 runbook/procedure to verify #1784 via a shortened planning-path run and explicit verdict criteria.

Review details

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

  • Files reviewed: 1/1 changed files
  • Comments generated: 2
  • Review effort level: Lite

Comment on lines +314 to +316
gh issue view $ISSUE --repo $FIXTURE --json comments `
--jq '.comments[-1].body' 2>$null |
Set-Content (Join-Path $EVIDENCE "plan-implementation-comment.md")
Comment on lines +318 to +321
# Pull every Agent cell out of the plan's task table
$plan = [IO.File]::ReadAllText((Join-Path $EVIDENCE "plan-implementation-comment.md"))
Write-Host "`n=== Agent column values ==="
[regex]::Matches($plan, '(?m)^\|.*$') | ForEach-Object { $_.Value }
… label check

Read run 32433493989 (plan implementation) and 32435055598 (plan activate)
directly rather than relying on the relayed observation. Briefed counts confirmed
exactly, plus four findings — one of which was a defect in this procedure.

Confirmed: Agent column is `lead`, `lead`, `devrel` (lead x2, devrel x1); labels
minted are squad:lead x3 + squad:devrel x1.

New findings:
- Squad's own "Validation Pre-check" printed
  "Agent assignments valid (cast Names) | OK (lead, lead, devrel)" — it passes on
  exactly the input it should reject. Added an explicit instruction not to trust it.
- Zero legitimate cast-name labels have ever been minted (all five roster names
  ABSENT). The binding has never once worked.
- squad:reviewer also leaked, in E1 (#9) — so all three tokens named in the two
  prohibitions have leaked, and nothing outside that set ever has. Added
  squad:reviewer to the criterion as a second dispositive token.
- The plan program artifact contains NO owner assignment, so epic #17's squad:lead
  is minted at plan activate — downstream of where E4 stops. Documented as a scope
  limitation: a green E4 means the Agent column is clean, not that no label leaks.

Procedure defect fixed: Phase 3b checked repo-global label existence, but labels
persist once created and squad:lead/devrel/reviewer already exist from E1 and E3.
That check returns true forever and would have failed a perfect run. Rescoped to
issues created after an $E4_START cutoff, with the pre-existing contamination
tabulated.

Refs #1784.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@bradygaster
bradygaster merged commit a2e5c18 into dev Aug 21, 2026
15 checks passed
bradygaster added a commit that referenced this pull request Aug 21, 2026
…ch cross-checks (#1820)

Follow-up to #1819 addressing all four review findings plus the Phase 0b fixture-freshness fail-open found during review.

E4: Phase 0b gains a third UNREADABLE state so a double gh failure can no longer collapse into MATCH via \\ -eq \\; 0c post-condition now requires all four MATCH AND none UNREADABLE; 0d, 3c and 3e(B) guarded with distinct INCONCLUSIVE reasons; 3e(B) asserts both sets non-empty so SetEquals(empty, empty) cannot cancel two failures into a green; the 3e caveat now correctly documents fail-closed routing.

E1: Rule D FAIL redefined as 'epic OPEN at window expiry, full stop', with attempt evidence demoted from precondition to recorded detail; late closure explicitly FAIL and non-retroactive; escape hatch gains three veracity cross-checks.

Reviewed-by: Flight (Lead/Architect) - approved with follow-ups. All four #1819 findings verified fixed; Phase 0b guard ordering confirmed correct. Review overturns the Phase 3b clearance: 'gh' has no --arg flag, so the L625 labels query fails every run and vacuously passes. Pre-existing (PR #1791), untouched by this diff, tracked as P0 follow-up.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
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