diff --git a/README.md b/README.md index 1ede952..76514b3 100644 --- a/README.md +++ b/README.md @@ -14,22 +14,45 @@ reviewed test suite β€” grounded in your app's **real DOM** and **real code**, n > in the loop on every side-effecting step, and it never fakes a green test for behaviour > your app does not have: a real app bug is *escalated*, not "healed" away. +```mermaid +flowchart TD + story(["πŸ“ User Story"]):::io + page(["🌐 Live page"]):::io + pass(["βœ… reviewed, green suite"]):::io + + design["design
risk-ranked scenario ideas"]:::step + human{{"πŸ‘€ human curates scope"}}:::human + inspect["inspect
real DOM β†’ verified selectors"]:::step + generate["generate
.feature Β· steps Β· page objects"]:::step + verify["verify Β· tsc"]:::step + heal["heal
rewrite until it compiles"]:::heal + run["run
Playwright Β· real browser"]:::step + healsel["heal-selectors
re-inspect + patch real selector"]:::heal + analyze["analyze
classify the failure"]:::step + escalate[["⚠️ real app-bug
STOP β€” ask a human"]]:::stop + + story --> design --> human --> generate + page --> inspect + inspect -. verified selectors .-> generate + generate --> verify + verify -- fails --> heal --> verify + verify -- ok --> run + run -- green --> pass + run -- fails --> analyze + healsel --> verify + analyze -- "test-bug
(locator)" --> healsel + analyze -- "flaky / env" --> run + analyze -- "app-bug" --> escalate + + classDef io fill:#161b22,stroke:#30363d,color:#e6edf3 + classDef step fill:#1f6feb,stroke:#1158c7,color:#ffffff + classDef heal fill:#238636,stroke:#196c2e,color:#ffffff + classDef human fill:#9e6a03,stroke:#7d5400,color:#ffffff + classDef stop fill:#da3633,stroke:#b62324,color:#ffffff ``` - β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” - User Story ──────▢│ design risk-ranked scenario ideas β†’ test-design.md β”‚ "what to test" - β”‚ ↑ human reviews / curates scope β”‚ - Live page ──────▢│ inspect real DOM β†’ verified selectors β†’ selector-map β”‚ no guessing - β”‚ ↓ β”‚ - β”‚ generate .feature + steps + page objects β”‚ scope from design, - β”‚ ↓ β”‚ selectors from map - β”‚ verify tsc ──fail──▢ heal (rewrite to compile) β”‚ ┐ self-heal - β”‚ ↓ β”‚ β”‚ (bounded, - β”‚ run Playwright ──locator fails──▢ heal-selectors β”‚ β”‚ gated, - β”‚ ↓ (re-inspect + patch real selector) β”‚ β”‚ escalates - β”‚ analyze app-bug | test-bug | flaky | environment β”‚ β”˜ real bugs) - β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ - Drive it autonomously with the `agent`, or run each step yourself from the CLI. -``` + +> Drive it autonomously with the `agent`, or run each step yourself from the CLI. The two +> green nodes are the **self-heal** loops; a real **app bug** is escalated, never healed green. ## Setup diff --git a/docs/pipeline.mmd b/docs/pipeline.mmd new file mode 100644 index 0000000..becaec0 --- /dev/null +++ b/docs/pipeline.mmd @@ -0,0 +1,34 @@ +flowchart TD + story(["πŸ“ User Story"]):::io + page(["🌐 Live page"]):::io + pass(["βœ… reviewed, green suite"]):::io + + design["design
risk-ranked scenario ideas"]:::step + human{{"πŸ‘€ human curates scope"}}:::human + inspect["inspect
real DOM β†’ verified selectors"]:::step + generate["generate
.feature Β· steps Β· page objects"]:::step + verify["verify Β· tsc"]:::step + heal["heal
rewrite until it compiles"]:::heal + run["run
Playwright Β· real browser"]:::step + healsel["heal-selectors
re-inspect + patch real selector"]:::heal + analyze["analyze
classify the failure"]:::step + escalate[["⚠️ real app-bug
STOP β€” ask a human"]]:::stop + + story --> design --> human --> generate + page --> inspect + inspect -. verified selectors .-> generate + generate --> verify + verify -- fails --> heal --> verify + verify -- ok --> run + run -- green --> pass + run -- fails --> analyze + healsel --> verify + analyze -- "test-bug
(locator)" --> healsel + analyze -- "flaky / env" --> run + analyze -- "app-bug" --> escalate + + classDef io fill:#161b22,stroke:#30363d,color:#e6edf3 + classDef step fill:#1f6feb,stroke:#1158c7,color:#ffffff + classDef heal fill:#238636,stroke:#196c2e,color:#ffffff + classDef human fill:#9e6a03,stroke:#7d5400,color:#ffffff + classDef stop fill:#da3633,stroke:#b62324,color:#ffffff diff --git a/docs/pipeline.png b/docs/pipeline.png new file mode 100644 index 0000000..c1041a8 Binary files /dev/null and b/docs/pipeline.png differ diff --git a/docs/pipeline.svg b/docs/pipeline.svg new file mode 100644 index 0000000..027fcac --- /dev/null +++ b/docs/pipeline.svg @@ -0,0 +1 @@ +

verified selectors

fails

ok

green

fails

test-bug
(locator)

flaky / env

app-bug

πŸ“ User Story

🌐 Live page

βœ… reviewed, green suite

design
risk-ranked scenario ideas

πŸ‘€ human curates scope

inspect
real DOM β†’ verified selectors

generate
.feature Β· steps Β· page objects

verify Β· tsc

heal
rewrite until it compiles

run
Playwright Β· real browser

heal-selectors
re-inspect + patch real selector

analyze
classify the failure

⚠️ real app-bug
STOP β€” ask a human

\ No newline at end of file