Skip to content
Agentmart
Submit a tool

the-controller-e2e-eval

Use when validating UI changes end-to-end before claiming work is complete — spawns a fresh server pair from the worktree and runs Playwright tests against it

Skill by kwannoel

IndexedMIT★ 13
Write a review

Chalk Labs

Need help deploying the-controller-e2e-eval?

Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.

Book a call

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/kwannoel-the-controller-e2e-eval

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Use when validating UI changes end-to-end before claiming work is complete — spawns a fresh server pair from the worktree and runs Playwright tests against it

Use cases: design, backend, testing

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/the-controller-e2e-eval

What's inside

Skill name
the-controller-e2e-eval
Description
Use when validating UI changes end-to-end before claiming work is complete — spawns a fresh server pair from the worktree and runs Playwright tests against it
License
MIT
Instructions
181 lines in SKILL.md · view on GitHub

Files (1)

  • SKILL.md

SKILL.md (first lines)

# E2E Eval — User Story Validation

## When to Use

You've made a UI change and need to prove it works from the user's perspective — not "it compiles" or "the DOM element exists," but "the user can do the thing and see the result."

## Hard Rules

These are non-negotiable. Every test must follow all of them.

### 1. User story first, always

Before writing a single line of test code, state the user story:

- **Actor**: Who is performing the action (e.g., "a user in Architecture mode")
- **Action**: What they physically do (e.g., "presses `r`")
- **Outcome**: What they expect to see (e.g., "an architecture diagram renders in the diagram pane")

The test's **final assertion** must verify the **outcome**. If the outcome doesn't happen, the test fails. No exceptions.

### 2. No silent passes

**BANNED** — the `if (visible)` escape hatch:

```typescript
// NEVER DO THIS — silently passes when the feature is broken
const visible = await foo.isVisible().catch(() => false);
if (visible) {
  await expect(foo).toHaveText("expected");
}
```

**REQUIRED** — unconditional assertion with a timeout:

```typescript
// DO THIS — fails loudly when the feature is broken
await expect(foo).toBeVisible({ timeout: 10_000 });
await expect(foo).toHaveText("expected");
```

If the element should be there, assert it. If it might legitimately not be there, that's a different test or a precondition you need to set up.

### 3. No mocking the interface

- **No `page.evaluate()` to set store state** when a real interaction exists. If the user presses Space to open the workspace picker, the test presses Space.
- **No synthetic `dispatchEvent(new KeyboardEvent(...))`** — use `page.keyboard.press()`.
- **No stubbing API responses** — the test runs against real servers via `eval.sh`.

The only acceptable use of `page.evaluate()` is to **read** state for assertions (e.g., checking a computed style), never to **write** state that bypasses the UI.

### 4. Assert outcomes, not implementation

**WRONG** — asserting CSS values and class names:

```typescript
// This proves the DOM exists, not that the feature works
await expect(page.locator(".diagram-pane")).toBeVisible();
await expect(page.locator(".generate-action")).toBeVisible();
```

**RIGHT** — asserting what the user sees after the action:

```typescript
// This proves the feature works end-to-end
await page.keyboard.press("r");
await expect(
  page.locator(".diagram-pane").locator("svg, canvas, .mermaid, img")
).toBeVisible({ timeout: 60_000 });
```

Structure checks (element exists, layout is correct) are fine as **preconditions** or **smoke tests**, but they are not user story validation. The final assertion must be about the **result of the user's action**.

### 5. One story per test

Each `test()` block validates exactly one user story. Don't bundle "switch to architecture mode AND generate a diagram AND switch back" into one test. The switch-back is cleanup, not a story.

### 6. Timeouts reflect reality

If an action triggers an async operation (e.g., AI-generated diagram, API call), the timeout must be long enough for it to complete in CI. Use 60s for AI/generation operations, 10s for navigation, 30s for server-dependent renders.

## Steps

### 1. Commit your changes

`eval.sh` requires a clean worktree. Commit all your work before proceeding.

### 2. Determine the worktree path

```bash
WORKTREE_PATH=$(pwd)
```

Verify it's a git worktree (not the main repo):

```bash
if [[ -f "$WORKTREE_PATH/.git" ]]; then
  echo "Worktree: $WORKTREE_PATH"
else
  echo "WARNING: Not a worktree — you may be in the main repo. Proceeding anyway."
fi
```

**Do NOT** look up `staged_session` in project.json or ask the user to press `v` — that is unrelated to e2e eval.

### 3. Define the core user story

State the user story explicitly before writing test code:

```
Actor:   A user in Architecture mode with a project loaded
Action:  Presses 'r' to generate the architecture diagram
Outcome: An architecture diagram (SVG/canvas/image) appears in the diagram pane within 60 seconds
```

This is the contract. The test must not pass unless this outcome is achieved.

### 4. Write the test

Create a spec file in `e2e/specs/` that follows the hard rules above:

From kwannoel/the-controller, MIT.

More from kwannoel/the-controller

Signals

Stars
13
Forks
2
Open issues
60
Last commit (this folder)
Mar 16, 2026 (7 months ago)
Last release
Mar 8, 2026 (7 months ago)

From GitHub (fetched Oct 24, 2026).

Details

License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from kwannoel

Done for you

Rather not set it up yourself?

Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.

See how we build AI agents →Read the case studies

Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.

launches shipped
50+
launches shipped
media placements
500+
media placements
founders on every account
2
founders on every account

Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block

Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.

Get the-controller-e2e-eval running in your business

Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.

Goes to the Chalk Labs founders, not the newsletter. Privacy

Need help deploying the-controller-e2e-eval?

CallGet help
Cite this page

the-controller-e2e-eval skill. Agent Mart. https://agentmart.dev/skills/kwannoel-the-controller-e2e-eval (last updated 2026-10-24)