بنقرة واحدة
flow-qa
File a pre-decomposed QA issue against the FLOW plugin repository for end-to-end lifecycle regression testing.
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
File a pre-decomposed QA issue against the FLOW plugin repository for end-to-end lifecycle regression testing.
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
Release a new version of the FLOW plugin. Bumps version in plugin.json and marketplace.json, commits, tags, pushes, and creates a GitHub Release.
Abort the current FLOW feature. Closes the PR, deletes the remote branch, removes the worktree, and deletes the state file. Available from any phase. The confirmation prompt is governed by the skills.flow-abort config in the state file.
Phase 2: Code — execute plan tasks one at a time with TDD. Review diff before each commit. bin/flow ci must pass before moving to the next task. Project architecture standards enforced.
Review the full diff, then git add + commit + push. Use at every commit checkpoint in the FLOW workflow.
Phase 4: Complete — merge the PR, remove the worktree, and delete the state file. Final phase.
Clear the autonomous-flow halt set when the user spoke mid-flow. Invokes `bin/flow clear-halt` so the next assistant turn resumes execution. User-only: the model cannot invoke this skill.
| name | flow-qa |
| description | File a pre-decomposed QA issue against the FLOW plugin repository for end-to-end lifecycle regression testing. |
Maintainer-only skill that files a pre-decomposed QA issue against the
FLOW plugin repo. The issue describes a non-destructive Code-phase
change to hello.sh — the designated smoke-test artifact — so the
maintainer can exercise the full Start → Code → Review → Learn →
Complete lifecycle against a low-risk target.
Print the banner block:
```text
──────────────────────────────────────────────────
FLOW v2.2.0 — flow-qa — STARTING
──────────────────────────────────────────────────
```
Generate a short session ID and capture today's date with both clock-bearing and clock-free forms. Run all three in parallel via the Bash tool:
bin/flow generate-id
date "+%Y-%m-%d %H-%M"
date "+%Y-%m-%d"
Capture the outputs as <id>, <title_date>, and <plan_date>
respectively. The clock fragment in <title_date> makes same-minute
re-runs recognizable as duplicate-title filings; the <plan_date>
without clock is the value embedded in the issue body's smoke-test
greeting so QA passes filed within the same day produce identical
plan content.
Compose the issue body in working memory with this exact shape:
## What
A non-destructive smoke-test pass against the FLOW plugin's
`hello.sh` artifact. The Code phase updates the greeting to record
the QA date so the full Start → Code → Review → Learn → Complete
lifecycle exercises a low-risk file.
## Why
`hello.sh` is the designated smoke-test artifact — referenced by
`CLAUDE.md` and pinned by `tests/hello_smoke.rs`, with no
production callers. Routing a fresh QA pass through the standard
lifecycle on this file confirms every phase still operates against
the current FLOW plugin source.
## Acceptance Criteria
- `hello.sh` line 2 reads `echo "Hello, FLOW! (QA <plan_date>)"`
after the Code phase.
- `tests/hello_smoke.rs` exists and asserts `hello.sh` content
contains the literal substring `echo "Hello, FLOW! (QA
<plan_date>)"`.
- `bin/flow ci` passes green on the feature branch.
<!-- FLOW-PLAN-BEGIN -->
## Implementation Plan
### Context
`hello.sh` is the FLOW plugin's smoke-test artifact for full
lifecycle regression passes. Each QA pass replaces line 2 of the
script with a fresh date-stamped greeting and ships a single
integration test that asserts the greeting matches. The change is
idempotent — every pass overwrites both files with the new date,
producing a clean mergeable diff.
### Exploration
- **`hello.sh`** — 2-line bash script. Line 1 is the shebang; line
2 prints the current greeting. No coverage impact, no callers.
- **`tests/hello_smoke.rs`** — new (or overwritten) integration
test. Single function that reads `hello.sh` and asserts the
greeting substring is present. Mirrors the project's
`tests/<name>.rs` convention; auto-discovered by cargo.
### Risks
- **Same-minute re-runs.** The issue title carries an `HH-MM` clock
fragment so duplicate-title detection surfaces visibly.
- **CI sentinel state.** `bin/flow ci` runs the full toolchain;
the only file changes affect `hello.sh` and the smoke test, so
no other test should regress.
### Approach
One TDD pair lands the smoke test plus the greeting update in one
commit. The test reads the script and asserts the date-stamped
greeting substring; the implementation updates the script to match.
### Dependency Graph
| Task | Type | Depends On |
|------|------|------------|
| 1. Write `tests/hello_smoke.rs` smoke test | test | — |
| 2. Update `hello.sh` line 2 to the date-stamped greeting | implement | 1 |
### Tasks
#### Task 1: Write the smoke test
Create `tests/hello_smoke.rs` containing one integration test that
reads `hello.sh` from `common::repo_root()` and asserts the file
content contains the literal substring `echo "Hello, FLOW! (QA
<plan_date>)"`.
Files: `tests/hello_smoke.rs`
#### Task 2: Update `hello.sh` line 2
Replace line 2 of `hello.sh` with:
```bash
echo "Hello, FLOW! (QA <plan_date>)"
```
Files: `hello.sh`
<!-- FLOW-PLAN-END -->
Substitute the literal <plan_date> value captured in Step 1 into
every occurrence inside the body.
Step 3 lands the issue on GitHub through the standard issue-filing
choreography. The Write tool persists the body so bin/flow issue
can read it; the validator catches malformed sentinels locally
before the network call; add-issue records the URL so the
maintainer's next session can trace the QA pass; the report names
the URL and the next command so the maintainer can chain into
/flow-start.
Write. Write the composed body to
<project_root>/.flow-issue-body-<id> using the Write tool with the
absolute project-root path per .claude/rules/filing-issues.md
"The Pattern". /flow-qa runs on the integration branch (not
inside an active worktree), so the project root is the canonical
location. The session-scoped -<id> suffix prevents concurrent
QA-pass filings from colliding on a single shared file.
Validate. Validate the body file via the pre-filing checker:
bin/flow validate-issue-body --mode decomposed --body-file <project_root>/.flow-issue-body-<id>
Parse the last line as JSON. If status is error, fix the body
per the named defect, rewrite the file, and re-run the validator
(max 5 attempts). After 5 failed attempts, halt and report.
File. File against benkruger/flow with
the decomposed label and assignee @me:
bin/flow issue --title "FLOW QA Pass <title_date>" --body-file <project_root>/.flow-issue-body-<id> --label decomposed --assignee @me --repo benkruger/flow
Capture the returned issue URL and parse the trailing issue number
as <M>.
Record. Append the filed issue to the state file (no-op when invoked outside an active flow):
bin/flow add-issue --label decomposed --title "FLOW QA Pass <title_date>" --url "<issue_url>" --phase flow-qa
Report. Print the COMPLETE banner naming the issue URL and the next command. Output in your response (not via Bash) inside a fenced code block:
```text
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✓ FLOW v2.2.0 — flow-qa — COMPLETE
Filed: <issue_url>
Next: /flow-start #<M>
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
```
hello.sh or tests/hello_smoke.rs from this skill —
those file changes belong to the filed issue's Code phase, not
to flow-qa itself./flow-start; the maintainer types
/flow-start #<M> after reviewing the filed issue.--label decomposed --assignee @me --repo benkruger/flow. The label routes the issue through the
pre-decomposed path; the assignee surfaces the QA pass to the
invoking maintainer; the repo flag pins filing to the FLOW
plugin even when the user is on another project.--mode decomposed before filing. The
pre-filing validator catches malformed sentinels, missing
## Implementation Plan heading, or empty task lists before
the issue lands.