一键导入
ppt-screens
Author + validate screen-map docs, keep them in sync with routes, and run screen smoke checks via Chrome MCP / Playwright.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Author + validate screen-map docs, keep them in sync with routes, and run screen smoke checks via Chrome MCP / Playwright.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Implement one task end-to-end for the PPT project — pick the right per-stack specialist, code, verify per-stack, push a draft PR against `dev`.
Project-management & delivery analysis for the PPT research routine (Phase 1.6). Runs an always-on Scrum Master synthesis plus role-based deep analysis (rotating one role/day by default; all 8 on `full`; a specific role on `pm:<role>`). Reads sprint-status + repo activity + research backlog, spawns role subagents, and writes delivery artifacts under .research/management/. Use from routine Phase 1.6, or standalone for a delivery snapshot.
Post-merge code review with issue creation. Reviews merged PRs in a time window, spots better approaches / missed edge cases / security holes / perf issues / test gaps, and opens GitHub issues with concrete improvement proposals.
Deterministic goal/convergence checks for the PPT dispatcher — coverage referential integrity, coverage-progress monotonicity, and buffer bounds. Run in dispatcher Phase 6 and CI. Use when adding/auditing the dispatcher's goal-verification layer.
Open a PR in this project's style — title, body template, IG3 evidence, CI surface, draft handling.
Land a green, approved PR. Verify preconditions (CI green, approved, no unresolved threads, not draft), auto-resolve mechanical merge conflicts against the base branch (sqlx offline data, Cargo.lock, generated openapi/api-client, lockfiles), then `gh pr merge --squash --auto`. Stops and surfaces if real code conflicts or stale CI.
| name | ppt-screens |
| description | Author + validate screen-map docs, keep them in sync with routes, and run screen smoke checks via Chrome MCP / Playwright. |
| when_to_use | The plan adds, removes, or changes a route in ppt-web / reality-web / mobile, or modifies a `docs/screens/<product>/*.md` file, or needs visual proof that a frontend change works. |
| mode | local |
| capabilities | ["C4","C6"] |
| tags | ["frontend","workflow"] |
docs/screens/<product>/<id>.md is the per-screen source of truth (purpose,
layout sketch, data sources, accessibility notes, design ref). The
@ppt/screen-map package parses, validates, and renders these files. Routes
in frontend/apps/{ppt-web,reality-web,mobile} must stay in sync — every
real screen has a doc, every doc maps to a real route. The daily research
routine watches for drift via the screen-map-drift and screen-map-orphan
signals.
frontend/apps/ppt-web/src/{App.tsx,routes/**}frontend/apps/reality-web/src/app/**frontend/apps/mobile/src/** (React Native; no Expo Router — see mobile structure note)docs/screens/{ppt,reality}/*.md (mobile docs not yet seeded; see note)screen-map-drift signal you're
picking up as a test-gap plan@ppt/screen-map CLI invocations (validate, discover, scan)ppt, reality, mobile) and screen slugppt-dev-stack brings it up)building-list, host-onboarding, unit-detail).cp docs/screens/_template.md docs/screens/<product>/<slug>.md
@ppt/screen-map). Required
fields include the screen id, product, route, status,
owners, and any design_ref. See frontend/packages/screen-map/src/
for the canonical schema.ppt-web: add to frontend/apps/ppt-web/src/App.tsx or
frontend/apps/ppt-web/src/routes/<area>/<file>.tsxreality-web: frontend/apps/reality-web/src/app/<route>/page.tsxmobile: frontend/apps/mobile/src/screens/<Screen>.tsx registered
in frontend/apps/mobile/src/App.tsx (React Native — no Expo Router)screen-map-drift signal on the next routine run even if CI is
happy with it (the routine sees the asymmetry).If you change a route's path, header, data flow, or accessibility behavior,
update the matching docs/screens/<product>/<id>.md in the same PR:
route field in frontmatter.data_sources.The screen body markdown is preserved verbatim by @ppt/screen-map — only
frontmatter is structured, the rest is free-form per the template.
The CLI is wired through pnpm:
cd frontend
pnpm --filter @ppt/screen-map test # unit tests for parser / validator
pnpm --filter @ppt/screen-map run cli -- validate --strict # validate all docs/screens/**
pnpm --filter @ppt/screen-map run cli -- discover # list parsed screens (Phase-1+)
The -- (double-dash) is what forwards args past the pnpm script wrapper
reliably across pnpm versions. Cold checkouts need pnpm install first.
The pre-commit hook runs the same cli -- validate --strict invocation,
so passing locally means CI will pass.
For changes you can't fully verify with a unit test:
Fastest signal. Assumes the dev stack is up (stack up pm-local or
docker compose -f docker-compose.dev.yml up -d).
mcp__Claude_in_Chrome__list_connected_browsers → pick the device idmcp__Claude_in_Chrome__select_browser with that idmcp__Claude_in_Chrome__tabs_context_mcp (creates the tab group)mcp__Claude_in_Chrome__tabs_create_mcp for a fresh tabmcp__Claude_in_Chrome__navigate to the screen URL (e.g.
http://localhost:3000/buildings)mcp__Claude_in_Chrome__get_page_text / read_page (accessibility tree) /
read_console_messages / read_network_requests to inspectIf the Chrome MCP doesn't honour navigation (sometimes the isolated tab group misbehaves on first use), close the tab and create a new one — the second navigate usually works. If it still doesn't, fall back to Playwright.
For flows you want to keep as a regression test:
npx playwright codegen http://localhost:3000/<route>
Codegen opens an instrumented browser; click through the flow once and
save the output to the app's e2e directory. For ppt-web that's
frontend/apps/ppt-web/e2e/<flow>.spec.ts (e.g. auth.spec.ts,
home.spec.ts, navigation.spec.ts, pages.spec.ts). Then:
cd frontend
pnpm --filter @ppt/ppt-web exec playwright test
(Verify the package name in frontend/apps/ppt-web/package.json — pnpm
filters silently match nothing if the name is wrong.)
ppt_browser_open is v2 skeleton — currently returns not_implemented
even when a host has the browser capability. The intended shape (when
v2 lands) is ppt_browser_open(url, viewport) → returns DOM text +
screenshot URL. Until then, cloud routine sessions can only smoke-test
URLs that respond to HEAD/GET without browser rendering (e.g. via curl).
# 1. docs/screens/ is non-empty for each seeded product (ppt + reality).
# Mobile docs are intentionally not seeded yet — see "Mobile app structure
# note" below; mobile is expected to read 0 until screens land for it.
for p in ppt reality; do
count=$(find "docs/screens/$p" -maxdepth 2 -name '*.md' -type f 2>/dev/null | wc -l | tr -d ' ')
[ "$count" -gt 0 ] && printf "%-8s %s files\n" "$p" "$count" || echo "EMPTY: docs/screens/$p"
done
# expected: ppt, reality each report >0 files
# 2. screen-map package present
test -f frontend/packages/screen-map/package.json && echo OK
# expected: OK
# 3. screen-map.yml workflow present
test -f .github/workflows/screen-map.yml && echo OK
# expected: OK
# 4. template present
test -f docs/screens/_template.md && echo OK
# expected: OK
find docs/screens/ppt docs/screens/reality -name '*.md' -type f -not -name '_template.md' -not -name 'README.md' 2>/dev/null | grep -q .
Asserts at least one parsed-eligible screen doc exists under a seeded product directory. Scoped to
ppt/+reality/so top-level_template.md/README.mdand unrelated*.mdfiles added later don't accidentally pass the check. Doesn't run the validator (that needspnpm install), just confirms the tree shape.
After authoring or modifying a screen + route:
# 1. paired files in the diff
git diff --name-only main..HEAD | grep -E '(frontend/apps/(ppt-web|reality-web|mobile)/|docs/screens/)' | sort
# expected: at least one route file AND at least one docs/screens/ file
# 2. screen-map validator clean
cd frontend && pnpm --filter @ppt/screen-map run cli -- validate --strict
# 3. (if C4 was ticked) visual smoke captured in PR body under "IG5 — Screen evidence"
frontend/apps/mobile/ is a React Native / Expo app without Expo
Router — there is no frontend/apps/mobile/app/ directory. The actual
shape is:
frontend/apps/mobile/src/App.tsx — root component + screen registryfrontend/apps/mobile/src/screens/<Screen>.tsx — one file per screenTreat any documentation or signal definition that mentions
frontend/apps/mobile/app/** as legacy / stale and update it to
frontend/apps/mobile/src/**. The routine's screen-map-drift trigger
paths and the screen-map workflow already use src/**.
Mobile screen docs under docs/screens/mobile/ are not yet seeded — the
directory legitimately doesn't exist on main. Verification blocks here
explicitly drop mobile until the first batch lands; signal definitions
and brief templates do the same.
frontend/packages/screen-map/README.md — package overview + phase scopedocs/superpowers/specs/2026-05-07-screen-map-system-design.md — full designppt-frontend — app layout, route file locationsppt-pr-create — where to paste IG5 visual evidenceppt-tests — choosing test runners.github/workflows/screen-map.yml — CI gate (same trigger paths as the
routine's screen-map-drift signal)