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["designrisk-ranked scenario ideas"]:::step + human{{"π€ human curates scope"}}:::human + inspect["inspectreal DOM β verified selectors"]:::step + generate["generate.feature Β· steps Β· page objects"]:::step + verify["verify Β· tsc"]:::step + heal["healrewrite until it compiles"]:::heal + run["runPlaywright Β· real browser"]:::step + healsel["heal-selectorsre-inspect + patch real selector"]:::heal + analyze["analyzeclassify the failure"]:::step + escalate[["β οΈ real app-bugSTOP β 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["designrisk-ranked scenario ideas"]:::step + human{{"π€ human curates scope"}}:::human + inspect["inspectreal DOM β verified selectors"]:::step + generate["generate.feature Β· steps Β· page objects"]:::step + verify["verify Β· tsc"]:::step + heal["healrewrite until it compiles"]:::heal + run["runPlaywright Β· real browser"]:::step + healsel["heal-selectorsre-inspect + patch real selector"]:::heal + analyze["analyzeclassify the failure"]:::step + escalate[["β οΈ real app-bugSTOP β 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 selectorsfailsokgreenfailstest-bug(locator)flaky / envapp-bugπ User Storyπ Live pageβ reviewed, green suitedesignrisk-ranked scenario ideasπ€ human curates scopeinspectreal DOM β verified selectorsgenerate.feature Β· steps Β· page objectsverify Β· tschealrewrite until it compilesrunPlaywright Β· real browserheal-selectorsre-inspect + patch real selectoranalyzeclassify the failureβ οΈ real app-bugSTOP β ask a human \ No newline at end of file
verified selectors
fails
ok
green
test-bug(locator)
flaky / env
app-bug
π User Story
π Live page
β reviewed, green suite
designrisk-ranked scenario ideas
π€ human curates scope
inspectreal DOM β verified selectors
generate.feature Β· steps Β· page objects
verify Β· tsc
healrewrite until it compiles
runPlaywright Β· real browser
heal-selectorsre-inspect + patch real selector
analyzeclassify the failure
β οΈ real app-bugSTOP β ask a human