zf-browser-e2e-contract
ZaoFu browser/E2E (Docker Playwright) command-shape and clean-checkout environment checklist for writer, review, verify, and operator roles.
Skill by uisee-ai
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/uisee-ai-zf-browser-e2e-contract
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.
About
Use cases: documents, testing, devops, agent-building
Reviews
Write a reviewNo 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 and code. 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/zf-browser-e2e-contract
What's inside
- Skill name
zf-browser-e2e-contract- Description
- ZaoFu browser/E2E (Docker Playwright) command-shape and clean-checkout environment checklist for writer, review, verify, and operator roles. Use when creating or reviewing task_map verification, worker briefings, Playwright/browser smoke commands, or Docker mcp/playwright runs. Taxonomy and the structured report contract live in the verify-review skill — this skill defers to it.
- License
- Apache-2.0
- Instructions
- 240 lines in SKILL.md · view on GitHub
Files (1)
- SKILL.md
SKILL.md (first lines)
# ZaoFu Browser E2E Contract
## Overview
Use this skill when a ZaoFu task includes browser, Playwright, or E2E
verification. This skill is deliberately narrow: it owns **Docker/Playwright
command shape and the clean-checkout environment checklist** only. Hard
correctness still belongs in `task_map` validation, workflow runtime, and
deterministic gates.
Division of labor (avoid dual-source drift):
- **This skill**: Docker/Playwright command shape, `--user` / host-networking /
bounded-install environment rules, clean-checkout + pin-commit setup.
- **`verify-review` skill** (canonical: `yoke/verify-review/SKILL.md`): the
runner-vs-product failure **taxonomy** and the **structured report contract**
(coverage matrix, gap findings, evidence refs). When this skill mentions
classification or report fields, `verify-review` is the source of truth —
cite it, do not fork a second copy of the taxonomy here.
## Core Rules
- Preserve an exact browser command or security boundary supplied by the
canonical Task, PRD, or owner contract byte-for-byte. That run-scoped
contract takes precedence over this skill's generic command pattern.
- Treat the host-network / `mcp/playwright:latest` pattern below as a fallback
only when the canonical contract does not provide an exact command. Never
replace a contract-pinned image, bridge network, read-only mount, or `tmpfs`
boundary with the fallback image, host network, writable mount, or install
sequence.
- Respect `zf.yaml` and `project.state_dir`; do not hard-code `.zf`.
- Use Docker with `mcp/playwright:latest` for browser E2E unless the operator
explicitly asks for host browsers and no exact run-scoped command is pinned.
- Start local API/UI services on `0.0.0.0` when a container must reach them.
- Declare the exact owner-facing service URL and origin in the Task/real-E2E
matrix. A pass on `http://localhost` does not prove behavior on
`http://<LAN-IP>` or another delivery origin.
- Use host networking for local service smoke tests only when the canonical
contract does not pin a different network boundary.
- Run the container with the host UID/GID so mounted workdirs remain writable.
- Bound browser install commands with `timeout`; never leave
`playwright install chromium` unbounded.
- Do not wrap an existing Docker Playwright command in another Docker command.
- The `mcp/playwright:latest` image has an MCP CLI entrypoint. A browser
command MUST either use `--entrypoint bash -lc` (as in the fallback below)
or explicitly invoke the image's documented runner; never append `node`,
`npm`, or `playwright` directly after the image name. That form is parsed as
MCP options (for example `unknown option --test`) and is a runner failure,
not product evidence.
- Do not downgrade a runner/setup failure into product rework.
## Command Pattern
When no exact Task/PRD/owner command is supplied, use this fallback shape for
browser gates:
```bash
docker run --rm --network host \
--user "$(id -u):$(id -g)" \
--entrypoint bash \
-v "$PWD:/work" -w /work \
-e PLAYWRIGHT_BROWSERS_PATH=0 \
mcp/playwright:latest \
-lc 'set -euo pipefail; timeout 180s ./packages/web-tui/node_modules/.bin/playwright install chromium; ./packages/web-tui/node_modules/.bin/playwright test --config packages/web-tui/playwright.config.ts'
```
Adapt paths to the current `task_map`; keep the runner flags intact. When an
exact command is supplied, preserve it instead of adapting this fallback.
> The `mcp/playwright:latest` image name, the `INSTALLATION_COMPLETE` marker
> referenced below, and this exact command shape are **skill-owned convention
> (no kernel validator)** — the kernel does not parse or enforce them; they are
> operator/agent discipline.
## Task Map Checklist
- Keep verification commands machine-readable. If `verification` is a list, each
item must be a standalone command; never stringify a Python list into a
contract field.
- Planning readiness is not execution success. Before implementation, missing
screenshots, traces, or browser receipts are expected future outputs, not an
environment blocker. Keep the plan dispatchable when it names a runnable
Docker Playwright command and assigns the runner/config/test/evidence paths to
a producer task. Mark the plan blocked only when the declared runner itself is
unavailable or forbidden and no sanctioned equivalent exists.
- A browser acceptance criterion must be bound before dispatch to an `e2e`
command plus writable runner/config/test/evidence paths. Do not leave viewport,
pointer, network, storage, refresh, or screenshot acceptance attached only to
`npm test`, a build command, or a future Verify interpretation.
- Record `bind_host`, `service_url`, and `browser_origin` in the browser row or
its evidence contract. Verify the owner-facing origin in addition to any
runner-internal localhost origin; preserve both receipts when both are part
of the delivery path.
- When the product depends on WebCrypto or another secure-context API, run a
capability probe at the exact owner-facing origin (for example
`window.isSecureContext` and the required `crypto.subtle` operation). An
unsupported insecure origin is a product failure unless the product contract
declares and the test proves a supported fallback. Do not replace this with
a localhost-only assertion, because browsers treat localhost and LAN/IP HTTP
origins differently.
- Include static/package checks separately from browser E2E checks.
- Mark browser checks with the canonical verification tier **`e2e`**. The kernel
tier set is `static` / `runtime` / `e2e` / `manual_evidence`
(`VALID_VERIFICATION_TIERS`, `src/zf/core/task/schema.py`). The underscore
aliases `live_smoke`, `live_smoke_optional`, and `smoke` normalize to `e2e`
at the runtime boundary (`src/zf/runtime/task_contract_normalize.py`), so they
are safe but non-canonical.
- **Do not** write `browser` or the hyphenated `live-smoke` as a tier: neither
is a valid tier and neither has an alias, so an unknown token is **silently
dropped** by `canonical_verification_tiers`, leaving the browser gate with
no tier. Emit `e2e`.
- Reject or repair host-only commands such as bare `npx playwright test` for
browser E2E.
- Reject or repair Docker Playwright commands that miss
`--user "$(id -u):$(id -g)"`.
- Reject or repair unbounded browser install commands.
- When a mixed verification list includes static npm gates and a Docker browser
gate, show the Docker command pattern for the browser gate only; do not create
Docker-in-Docker examples.From uisee-ai/zaofu, Apache-2.0.
More from uisee-ai/zaofu
- 0.650score
zf-channel-discussion-participant
uisee-ai
Use for every active lens in a ZaoFu fanout-then-synthesis Channel.
SkillAFreshness: A★ 34Claude Code +9 - 0.650score
zf-channel-discussion-synthesizer
uisee-ai
Use for the designated synthesizer in a ZaoFu fanout-then-synthesis Channel.
SkillAFreshness: A★ 34Claude Code +9 - 0.615score
zf-record-browser-demo
uisee-ai
Use on demand to record a short, truthful browser workflow as deterministic frames plus an optimized GIF and provenance artifact.
SkillBFreshness: B★ 34Claude Code +9 - 0.613score
zf-cr
uisee-ai
Read-only architecture review of the ZaoFu repository before development.
SkillBFreshness: B★ 34Claude Code +9 - 0.613score
zf-research-fanout-trigger
uisee-ai
ZaoFu project-level trigger for starting the fixed-role research fanout workflow from a channel or Kanban Agent request.
SkillBFreshness: B★ 34Claude Code +9 - 0.613score
zf-workflow-start-planner
uisee-ai
Use when a ZaoFu operator, Kanban Agent, Channel member, or Coding Agent must classify a tracked Task, clarify missing workflow inputs, recommend one active…
SkillBFreshness: B★ 34Claude Code +9 - 0.613score
zf-backlog-batch-closeout
uisee-ai
ZaoFu backlog/task batch closeout workflow for Codex or Claude.
SkillBFreshness: B★ 34Claude Code +9 - 0.613score
zf-dynamic-artifact-gate
uisee-ai
Use in ZaoFu issue, PRD, or refactor workflows when plan, verify, judge, or replan stages must generate run-specific fact artifacts and artifact/matrix gate…
SkillBFreshness: B★ 34Claude Code +9 - 0.613score
zf-refactor-generalization-audit
uisee-ai
ZaoFu refactor portability audit for Claude or Codex.
SkillBFreshness: B★ 34Claude Code +9 - 0.613score
zf-find-simplifications
uisee-ai
Use on demand to find evidence-backed simplifications in ZaoFu itself, in applications developed with ZaoFu, or in an Autoresearch simplify audit.
SkillBFreshness: B★ 34Claude Code +9 - 0.613score
zf-channel-research-synthesizer
uisee-ai
Use when synthesizing a ZaoFu research-review Channel.
SkillBFreshness: B★ 34Claude Code +9 - 0.613score
zf-harness-design-handoff
uisee-ai
Use when you are arch about to emit arch.proposal.done OR critic about to emit design.critique.done.
SkillBFreshness: B★ 34Claude Code +9
Signals
- Stars
- 34
- Forks
- 4
- Open issues
- 0
- Last commit (this folder)
- Oct 9, 2026 (19 days ago)
- Last release
- Aug 21, 2026 (2 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- Apache-2.0
- Repository
- github.com/uisee-ai/zaofu
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from uisee-ai
- 0.650score
zf-channel-discussion-synthesizer
uisee-ai
Use for the designated synthesizer in a ZaoFu fanout-then-synthesis Channel.
SkillAFreshness: A★ 34Claude Code +9 - 0.650score
zf-channel-discussion-participant
uisee-ai
Use for every active lens in a ZaoFu fanout-then-synthesis Channel.
SkillAFreshness: A★ 34Claude Code +9 - 0.615score
zf-record-browser-demo
uisee-ai
Use on demand to record a short, truthful browser workflow as deterministic frames plus an optimized GIF and provenance artifact.
SkillBFreshness: B★ 34Claude Code +9 - 0.613score
zf-cr
uisee-ai
Read-only architecture review of the ZaoFu repository before development.
SkillBFreshness: B★ 34Claude Code +9 - 0.613score
zf-research-fanout-trigger
uisee-ai
ZaoFu project-level trigger for starting the fixed-role research fanout workflow from a channel or Kanban Agent request.
SkillBFreshness: B★ 34Claude Code +9 - 0.613score
zf-refactor-generalization-audit
uisee-ai
ZaoFu refactor portability audit for Claude or Codex.
SkillBFreshness: B★ 34Claude Code +9
Cite this page
zf-browser-e2e-contract skill. Agent Mart. https://agentmart.dev/skills/uisee-ai-zf-browser-e2e-contract (last updated 2026-10-24)