senpi-qa

GitHub

用于对 Senpi 适配器和任务引擎进行真实二进制驱动的 QA、冒烟测试、验证及调试。通过严格隔离环境确保 ~/.senpi/agent 不被修改,并将所有证据写入指定路径,适用于代码变更后的质量保障场景。

.agents/skills/senpi-qa/SKILL.md code-yeongyu/oh-my-openagent

Trigger Scenarios

senpi qa qa senpi senpi-qa test senpi adapter verify senpi task senpi task e2e senpi team e2e task dag qa live senpi driver senpi evidence path

Install

npx skills add code-yeongyu/oh-my-openagent --skill senpi-qa -g -y
More Options

Non-standard path

npx skills add https://github.com/code-yeongyu/oh-my-openagent/tree/dev/.agents/skills/senpi-qa -g -y

Use without installing

npx skills use code-yeongyu/oh-my-openagent@senpi-qa

指定 Agent (Claude Code)

npx skills add code-yeongyu/oh-my-openagent --skill senpi-qa -a claude-code -g -y

安装 repo 全部 skill

npx skills add code-yeongyu/oh-my-openagent --all -g -y

预览 repo 内 skill

npx skills add code-yeongyu/oh-my-openagent --list

SKILL.md

Frontmatter
{
    "name": "senpi-qa",
    "description": "QA the omo Senpi adapter (packages\/omo-senpi, packages\/senpi-task) against the REAL senpi binary in strict isolation, and write every artifact to the one canonical evidence path .omo\/evidence\/omo-senpi-adapter\/<slug>\/. The live drivers under packages\/omo-senpi\/scripts\/qa\/ create their own isolated SENPI_CODING_AGENT_DIR and ignore the caller's, so the real ~\/.senpi\/agent is never written. Ships scripts\/resolve-evidence-dir.mjs, which is the ONLY sanctioned way to pick an evidence directory: it rejects traversal, separators, absolute paths, and stray roots such as local-ignore\/qa-evidence. Use whenever someone changes anything under packages\/omo-senpi or packages\/senpi-task, or wants to QA, smoke-test, verify, or debug the Senpi adapter, the task\/team engine, the DAG, task RPC, or skill delivery. Triggers: senpi qa, qa senpi, senpi-qa, test senpi adapter, verify senpi task, senpi task e2e, senpi team e2e, task dag qa, live senpi driver, senpi evidence path."
}

Senpi QA

QA the omo Senpi adapter (packages/omo-senpi/) and the task engine (packages/senpi-task/) by driving the REAL senpi binary. Unit tests never count as live QA here: bun run test:senpi is the package gate, the drivers in packages/omo-senpi/scripts/qa/ are the harness proof.

Golden rules

  • Evidence lives at exactly one path. Every artifact goes under .omo/evidence/omo-senpi-adapter/<slug>/. Pick it with scripts/resolve-evidence-dir.mjs and nothing else — a hand-typed path is how runs end up somewhere like local-ignore/qa-evidence/, which no reviewer reads and the PR cannot cite.
  • The real agent dir stays untouched. The live drivers build their own isolated SENPI_CODING_AGENT_DIR and deliberately IGNORE a caller-provided one, so ~/.senpi/agent is never used as the sandbox. Report the driver's realSenpiUntouched / changed-path fields and the isolated agent-dir path; treat a whole-directory digest as supporting evidence, not proof by itself.
  • No binary means SKIP, not silence. When senpi is absent the live drivers report SKIP or FAIL in their final JSON rather than degrading to the real home. A SKIP is not a pass — say so in the evidence README.
  • The captured JSON is the evidence. No file on disk means the QA did not happen, which means no commit and no push.

Resolve the evidence directory first

ev="$(node .agents/skills/senpi-qa/scripts/resolve-evidence-dir.mjs \
  --repo-root "$(git rev-parse --show-toplevel)" --slug <YYYYMMDD>-<short-slug>)"
mkdir -p "$ev"

The resolver returns an absolute path and creates nothing, so the caller decides when the directory appears. A slug is ONE relative segment of lowercase letters, digits, and hyphens (20260820-senpi-qa-contract). Separators, ./.., traversal, absolute paths, and a non-git root are rejected with a non-zero exit and a message naming the offending slug.

Router: pick your case

You changed… Run Proves
Any adapter code, as the fast precondition node packages/omo-senpi/scripts/qa/drive.mjs --self-test the driver + isolation harness itself works
Adapter wiring reaching a live session node packages/omo-senpi/scripts/qa/drive.mjs a real senpi run with the plugin loaded, isolated agent dir, and no attributed real-home changes
Task lifecycle (single + batch) SENPI_BIN="$(command -v senpi)" node packages/omo-senpi/scripts/qa/task-e2e.mjs live task start/stream/terminal states
Team delivery, shutdown, reclaim, restart recovery SENPI_BIN="$(command -v senpi)" node packages/omo-senpi/scripts/qa/team-e2e.mjs injection delivery and exactly-once recovery
Task RPC driver scripts node packages/omo-senpi/scripts/qa/task-rpc-e2e.mjs --self-test the RPC surface contract
Skill delivery into a task SENPI_BIN="$(command -v senpi)" node packages/omo-senpi/scripts/qa/task-load-skills-e2e.mjs skills reach the child
Continuation behavior node packages/omo-senpi/scripts/qa/probe-continuation.mjs turns continue as expected
DAG state machine / runners bun test packages/senpi-task unit + chaos invariants (NOT live proof)

Point a driver's output at the resolved directory, e.g.:

TASK_E2E_OUT_DIR="$ev/live-task-dag" SENPI_BIN="$(command -v senpi)" \
  node packages/omo-senpi/scripts/qa/task-e2e.mjs

Package gate

tsgo --noEmit -p packages/omo-senpi/tsconfig.json
bun run test:senpi

Write the evidence README

Every run leaves $ev/README.md a reviewer can read without rerunning anything. The required sections are the repo-wide evidence rules in the root AGENTS.md (what was tested / observed / why it is enough / what was omitted). For Senpi, record the driver's changed-path/isolation fields and sandbox agent-dir path. Some drivers report sandbox paths without removing them; the caller must delete every task-owned sandbox and verify child PIDs are terminal before writing the cleanup receipt.

Version History

  • 64d8981 Current 2026-08-28 22:35

Same Skill Collection

.agents/skills/get-unpublished-changes/SKILL.md
.agents/skills/github-triage/SKILL.md
.agents/skills/omomomo/SKILL.md
.agents/skills/publish/SKILL.md
.agents/skills/remove-deadcode/SKILL.md
.opencode/skills/github-triage/SKILL.md
packages/omo-codex/plugin/skills/init-deep/SKILL.md
packages/omo-senpi/plugin/skills/init-deep/SKILL.md
packages/omo-senpi/skills/give-me-tips/SKILL.md
packages/omo-senpi/skills/init-deep/SKILL.md
packages/omo-senpi/skills/mass-ulw/SKILL.md
packages/omo-senpi/skills/ulw-loop/SKILL.md
packages/pi-goal/SKILL.md
packages/shared-skills/skills/ast-grep/SKILL.md
packages/shared-skills/skills/git-master/SKILL.md
packages/shared-skills/skills/init-deep/SKILL.md
packages/shared-skills/skills/refactor/SKILL.md
packages/shared-skills/skills/start-work/SKILL.md
packages/shared-skills/skills/ulw-execute/SKILL.md
.agents/skills/codex-qa/SKILL.md
.agents/skills/hyperplan/SKILL.md
.agents/skills/opencode-qa/SKILL.md
.agents/skills/pre-publish-review/SKILL.md
.agents/skills/security-research/SKILL.md
.agents/skills/tech-debt-audit/SKILL.md
.agents/skills/work-with-pr/SKILL.md
.opencode/skills/hyperplan/SKILL.md
.opencode/skills/pre-publish-review/SKILL.md
.opencode/skills/work-with-pr/SKILL.md
packages/omo-codex/plugin/skills/ulw-plan/SKILL.md
packages/omo-senpi/plugin/skills/onboarding/SKILL.md
packages/omo-senpi/skills/dag-library/SKILL.md
packages/omo-senpi/skills/hyperplan/SKILL.md
packages/omo-senpi/skills/onboarding/SKILL.md
packages/omo-senpi/skills/ultrawork/SKILL.md
packages/omo-senpi/skills/ulw-plan/SKILL.md
packages/omo-senpi/skills/ulw-research/SKILL.md
packages/shared-skills/skills/coding-agent-sessions/SKILL.md
packages/shared-skills/skills/data-scientist/SKILL.md
packages/shared-skills/skills/debugging/SKILL.md
packages/shared-skills/skills/frontend/SKILL.md
packages/shared-skills/skills/lsp-setup/SKILL.md
packages/shared-skills/skills/programming/SKILL.md
packages/shared-skills/skills/remove-ai-slops/SKILL.md
packages/shared-skills/skills/review-work/SKILL.md
packages/shared-skills/skills/ultimate-browsing/SKILL.md
packages/shared-skills/skills/ulw-plan/SKILL.md
packages/shared-skills/skills/ulw-research/SKILL.md
packages/shared-skills/skills/visual-qa/SKILL.md

Metadata

Files
0
Version
64d8981
Hash
30ba841c
Indexed
2026-08-28 22:35

Accueil - Wiki
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-08-29 05:02
浙ICP备14020137号-1 $Carte des visiteurs$