ソース情報
- リポジトリ
- CodySwannGT/lisa
- ソースの最終更新活動
- 2026年8月12日 18:27
- 検出された SKILL.md の言語
- 英語
- スター
- 3
- フォーク
- 3
インストール方法
デフォルトでは、最初にソースを確認する Prompt が選択されています。直接コマンドに切り替えるか、ローカルコピーをダウンロードすることもできます。
ソースファイルを確認
インストールを決める前に、SKILL.md と SkillsMP に表示されている付属ファイルをお読みください。
メニュー
デフォルトでは、最初にソースを確認する Prompt が選択されています。直接コマンドに切り替えるか、ローカルコピーをダウンロードすることもできます。
インストールを決める前に、SKILL.md と SkillsMP に表示されている付属ファイルをお読みください。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
直接コマンドでは確認用 Prompt が省略されます。実行前にソースを確認してください。
npx skills add https://github.com/CodySwannGT/lisa --skill lisa-codify-verificationコマンドは1行のまま表示されます。コピー前に横へスクロールして全体を確認してください。
ローカルで確認しますか?SkillsMP が現在取得できるファイルをダウンロードできます。
SKILL.md を表示中
This skill should be used for any non-trivial request — features, bugs, stories, epics, spikes, or multi-step tasks. It accepts a ticket URL (Jira, Linear, GitHub), a file path containing a spec, or a plain-text prompt. It assembles an agent team, breaks the work into structured tasks, and manages the full lifecycle from research through implementation, code review, deploy, and empirical verification.
any non-trivial request —…
This skill should be used for any non-trivial request — features, bugs, stories, epics, spikes, or multi-step tasks. It accepts a ticket URL (Jira, Linear, GitHub), a file path containing a spec, or a plain-text prompt. It assembles an agent team, breaks the work into structured tasks, and manages the full lifecycle from research through implementation, code review, deploy, and empirical verification.
| name | lisa-codify-verification |
| description | Convert empirical verification… |
| allowed-tools | ["Bash","Read","Edit","Write","Glob","Grep","Skill"] |
Take the empirical verification that just passed and encode it as an automated regression test. The manual proof becomes a repeatable check that catches future regressions.
This skill is invoked from the verification lifecycle (between Execute and Spec Conformance) and from each work-type sub-flow (Build / Fix / Improve) after the local verification step.
Invoke once per empirical verification that produced PASS evidence. If a single change had three verifications (UI flow, API endpoint, DB query), this skill runs three times — or once with the three verifications batched, but each must produce its own committed test.
Skip codification only for verification types whose proof is inherently non-behavioral:
For every other verification type, codification is mandatory. If the codification is not possible (e.g., the test framework doesn't exist and can't be installed in scope), escalate via the lifecycle's Escalation Protocol — do not silently skip.
The caller must provide:
If any of these are missing, ask the caller before generating a test — a test built on guesswork will not match the verification it claims to encode.
Before creating anything new, find what the project already has. Use the Tool Discovery Process from verification-lifecycle. Specifically check for:
playwright.config.*, cypress.config.*, e2e/ directory, tests/e2e/, Playwright/Cypress in package.json devDependenciestests/integration/, spec/, test/integration/, supertest/fetch helpers, Vitest/Jest integration configsbenchmarks/, bench/), vitest bench, k6 scriptsDo NOT install a new framework if one already exists for the verification type. Use what's there.
If the empirical proof came from Kane, consume its exact objective, observable assertions, URL, and local evidence pack as inputs. Do not commit Kane _test.md recordings, generated code, or auto-healed selectors as the authoritative regression. Encode the same behavior in the project's existing native runner under the deterministic rules below.
| Verification type | Preferred framework (use whichever the project already has) |
|---|---|
| UI (web, mobile, or any frontend surface) | The project's configured runner for every platform the behavior requires — see "Frontend multi-runner codification" below. This row is authoritative for any UI work covered by a bdd-e2e-coverage scenario (in practice, essentially all user-facing UI work); it supersedes any generic runner preference — a project's web runner might be Playwright, Cypress, or Selenium, and its device runner might be Maestro, Detox, or a Playwright mobile-emulation profile, but the choice is read from runnerPlatforms, never assumed |
| API | project's integration test runner (Vitest / Jest / RSpec / pytest) with HTTP client (supertest / fetch / faraday) |
| Database | integration test with real DB + migrations applied |
| Auth | API or UI test asserting role-gated access (multi-role coverage) |
| Security | regression test that reproduces the attack and asserts safe handling |
| Performance | benchmark in the project's bench harness, asserting against the baseline captured in the verification |
| Background Jobs | integration test that enqueues, drains the queue, and asserts terminal state |
| Cache | integration test asserting hit/miss/invalidation behavior |
| Configuration | integration test that loads config and asserts effect |
| Email/Notification | test capturing outbound message via project's mailer test mode |
| Observability | test asserting structured log/metric/trace emission |
| Infrastructure | test or script asserting infra state (terraform plan diff, CDK snapshot test) |
If the project lacks the preferred framework AND no acceptable substitute exists, escalate.
For frontend work — any verification whose validation journey exercised a user-facing UI surface — codification is not one-runner-or-the-other. The bdd-e2e-coverage rule is the contract; this section is only how codification satisfies it. After the validation journey is complete and verified:
bdd/features/** by default) — its stable @BDD-* ID and the platforms it declares. If the verified behavior has no scenario yet, write it now; that is part of codification, not a separate task. If the project has no contract yet, take the rule's bootstrap path, scoped to this behavior only.bdd/coverage-map.json under runnerPlatforms — read it rather than assuming a tool. Wire each new spec/flow where its runner already picks work up, following the project's existing directory and tagging conventions.mappings entry per scenario-platform obligation naming the runner, platforms, file, and an evidence string that actually appears in that file, then regenerate the matrix and burndown so the gate reflects the new coverage.bdd-e2e-coverage check command (the same one wired into CI) and confirm it passes. Regenerating the matrix and burndown only recomputes the report; it does not itself prove the gate is green. Record the command and its result in the codification evidence — a regenerated matrix with no observed gate run is not proof of coverage.Every artifact encodes the SAME verified journey against a different platform. One is never a substitute for another, and a passing test on one platform never seals another platform's obligation.
When the verified journey created, changed, or depended on persistent state, the reset-seed-coverage rule governs what else this codification owes. Classify every entity the work touched in the project's state contract, give anything fixture-owned an ownership predicate and a sweep, and run the project's state-classification check the same way the coverage gate is run above — a contract edited but never checked is not proof. Where the journey depended on seeded state, the seed's verify step asserts exact expected counts for that state: "at least one" passes against a leak, which is precisely the condition being guarded. Cite the rule for the policy vocabulary and the assurances; do not restate them here.
Permitted exits, mirroring the regression-spec rule in lisa-implement (never a silent skip, never "optional", and never a bare N/A):
platformWaivers entry naming the locations checked and "no runner configured" as the reason, exactly like any other unsealable obligation, per the rule. This is never left as a bare N/A — an undated absence has no forcing function to ever get revisited.platformWaivers entry with the reason, per the rule. A waiver is an IOU, never coverage.Either of the first two exits also gets a linked build-ready follow-up ticket, referenced from the waiver's reason, whenever the runner could reasonably be added or the limitation could reasonably be lifted — the waiver records the IOU, the ticket is what pays it down.
The generated test must:
displays order confirmation after checkout not fixes PROJ-1234.For Playwright UI tests specifically:
test fixture / page fixture / auth helper if one existsgetByRole, getByText) over CSS/XPath — they survive markup churnConcrete verification (UAT) contract. Verification is UAT — codifying it is
how the playthrough becomes durable. For a runtime/behavioral feat/fix: place
the codified test wherever the project's own configured e2e runner(s) already look
for tests — its own directory conventions, never a Lisa-assumed path or tool —
so CI re-runs it, and commit the evidence artifact to evidence/<ticket>/
(verdict.json + state + screenshots). For a Phaser game, drive the canvas
through the in-game verification test bridge (seed RNG, read state, inject input,
step frames) with deterministic rendering. CI's verification-coverage check
requires a verification-spec delta on every behavioral change. See the
reference/verification.md "Making verification concrete (UAT)" section.
When the codified test — or the remote re-verification it encodes — runs against a live, deployed environment, the environment will not hold still between the original verification and any later run: deploys, out-of-band infra applies, and data churn are normal, not exceptional. Encode the verification accordingly:
drift field (none | progress | regression | unrelated_churn, defined by the verdict.json contract in reference/verification.md): progress (the change being verified, or a related fix, landed), regression (an invariant broke), or unrelated churn. Drift classified as progress or unrelated churn passes, with the environment change surfaced as evidence; only a broken invariant fails.Run only the new test, using whatever per-test invocation the project supports:
npx playwright test path/to/new.spec.tsmaestro test .maestro/flows/new-flow.yamlnpx vitest run path/to/new.spec.tsnpx jest path/to/new.test.tsbundle exec rspec path/to/new_spec.rbConfirm:
Step 2 is mandatory for every codified test, and "mentally reverting" does not satisfy it. Mental reversion is the exact mechanism by which non-functional guards ship: the author believes the assertion is load-bearing, and it is not. Break the guarded property for real, run the test, and read the failure. See .claude/rules/falsifiable-checks.md for the four observed ways a check passes while asserting nothing.
Do it one of these ways, in order of preference:
Two properties the failure itself must have:
Record the falsification in the codification report (what you broke, how it failed). A codified test whose failure has not been observed is reported as unvalidated, not as a regression gate.
Confirm the test is picked up by the project's standard test command (the one CI runs). Run that command and confirm the count went up by exactly the number of tests added.
If the test is in a directory the standard test command excludes (e.g., E2E suite that runs separately in CI), confirm the appropriate CI workflow includes it.
Commit the test in the same PR as the change it codifies, in its own atomic commit:
test: add e2e for <behavior>test: add regression test for <bug behavior>test: add benchmark asserting <metric> <baseline>The commit message body should reference the verification it encodes (one line linking to the proof artifact or the verification report section).
Append to the verification report (or PR description):
### Codified Verifications
| # | Verification | Framework | Test file | Status | Falsified by |
|---|--------------|-----------|-----------|--------|--------------|
| 1 | <description> | Playwright | `e2e/checkout.spec.ts::displays order confirmation after checkout` | PASS | removed the confirmation render → failed at `checkout.spec.ts:42` |
| 2 | <same journey, native surface> | Maestro | `.maestro/flows/checkout-confirmation.yaml` | PASS | same break → flow failed on the confirmation assertion |
This evidence shows the verification is now guarded. The Falsified by column is required — it names the deliberate break and the observed failure. UNVALIDATED is the only permitted alternative, and it means the test is not yet a regression gate.
For each empirical verification passed in:
If codification was skipped, an explicit reason recorded in the report (one of the skip conditions above) — never silent.
.claude/rules/falsifiable-checks.md).skip() the new test "temporarily" to make CI green — fix the test or fix the underlying changeexpect(true).toBe(true) placeholders or smoke-only assertions that don't actually exercise the verified behavior