create-cmp-cli 0.18.0 → 0.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/llms.txt +1 -1
- package/package.json +1 -1
- package/packages/harness/src/approve.mjs +30 -2
- package/packages/harness/src/lib/approvals.mjs +74 -10
- package/packages/harness/src/lib/evidence-level.mjs +3 -1
- package/packages/harness/src/lib/flight-recorder.mjs +47 -2
- package/packages/harness/src/lib/inputs-hash.mjs +71 -3
- package/packages/harness/src/lib/lane-narrator.mjs +97 -0
- package/packages/harness/src/lib/lane-runner.mjs +173 -0
- package/packages/harness/src/lib/plan.mjs +286 -20
- package/packages/harness/src/lib/receipt-validate.mjs +56 -1
- package/packages/harness/src/lib/spec-coverage.mjs +111 -3
- package/packages/harness/src/lib/step-cache.mjs +1 -1
- package/packages/harness/src/lib/step-outcomes.mjs +123 -0
- package/packages/harness/src/lib/steps-cmp.mjs +1284 -0
- package/packages/harness/src/lib/walk.mjs +67 -17
- package/packages/harness/src/receipt-check.mjs +80 -4
- package/packages/harness/src/verify.mjs +119 -1197
- package/packages/receipts/src/index.mjs +1 -0
- package/packages/receipts/src/inputs-hash.mjs +71 -3
- package/packages/receipts/src/receipt-validate.mjs +56 -1
- package/template/CLAUDE.md +52 -6
- package/template/composeApp/src/desktopTest/kotlin/com/example/app/conformance/ArchitectureConformanceTest.kt +1 -1
- package/template/gitignore +3 -0
- package/template/qa/approve.mjs +30 -2
- package/template/qa/lib/approvals.mjs +74 -10
- package/template/qa/lib/evidence-level.mjs +3 -1
- package/template/qa/lib/flight-recorder.mjs +47 -2
- package/template/qa/lib/inputs-hash.mjs +71 -3
- package/template/qa/lib/lane-narrator.mjs +97 -0
- package/template/qa/lib/lane-runner.mjs +173 -0
- package/template/qa/lib/plan.mjs +286 -20
- package/template/qa/lib/receipt-validate.mjs +56 -1
- package/template/qa/lib/spec-coverage.mjs +111 -3
- package/template/qa/lib/step-cache.mjs +1 -1
- package/template/qa/lib/step-outcomes.mjs +123 -0
- package/template/qa/lib/steps-cmp.mjs +1284 -0
- package/template/qa/lib/walk.mjs +67 -17
- package/template/qa/receipt-check.mjs +80 -4
- package/template/qa/verify.mjs +119 -1197
- package/template/specs/README.md +26 -0
package/template/specs/README.md
CHANGED
|
@@ -19,6 +19,8 @@ id, and every durable test cites the clause it verifies.
|
|
|
19
19
|
3. `node qa/verify.mjs` — the lane's `specCoverage` step fails orphan clauses (a live clause
|
|
20
20
|
with no citing test) and orphan tags (a `// SPEC:`/`# SPEC:` tag with no matching clause, or
|
|
21
21
|
one citing a withdrawn clause). Withdrawn clauses are exempt from coverage.
|
|
22
|
+
4. It also fails a clause whose declared `[tier: …]` no citing test can satisfy — see
|
|
23
|
+
**Tier requirements** below.
|
|
22
24
|
|
|
23
25
|
## Format
|
|
24
26
|
|
|
@@ -27,6 +29,30 @@ ids** (`<FEATURE>-<NN>`) — ids are never renumbered or reused; a withdrawn cla
|
|
|
27
29
|
through and kept. `app-base.spec.md` covers the base architecture and the app shell the
|
|
28
30
|
scaffold itself ships.
|
|
29
31
|
|
|
32
|
+
## Tier requirements — a citation must be able to SEE the clause
|
|
33
|
+
|
|
34
|
+
A citation proves a test *exists*. It cannot prove that test could ever *observe* the promise,
|
|
35
|
+
and those are different things. A clause promising an animation "plays once per process start"
|
|
36
|
+
was cited by a desktop Compose test — which has no process lifecycle at all, so the claim was
|
|
37
|
+
unobservable there by construction. Coverage was green; nothing had checked anything.
|
|
38
|
+
|
|
39
|
+
So a clause about device behavior declares the tier it needs, right on the clause line:
|
|
40
|
+
|
|
41
|
+
```markdown
|
|
42
|
+
- **MOTION-13** [tier: device] — Given a warm resume, When the app returns to foreground,
|
|
43
|
+
Then the intro animation does not play again.
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
- `[tier: device]` — satisfied by `androidInstrumentedTest` or `qa/e2e`.
|
|
47
|
+
- `[tier: e2e]` — satisfied by `qa/e2e` only.
|
|
48
|
+
- No tag — unchanged: any citing test satisfies coverage.
|
|
49
|
+
|
|
50
|
+
Declare it whenever the claim rests on an OS fact a host JVM cannot see: app/process lifecycle,
|
|
51
|
+
alarms, notifications, permissions, audio routing, real navigation. `specCoverage` FAILS when a
|
|
52
|
+
declared tier has no citing test, so a device tier that SKIPPED for want of a device leaves the
|
|
53
|
+
clause visibly unproven instead of silently passing. That is deliberate: "I could not check
|
|
54
|
+
this" is a failure, not a quieter rung on the evidence ladder.
|
|
55
|
+
|
|
30
56
|
> **Why no Cucumber?** We adopt the Given/When/Then *grammar* but reject the Cucumber
|
|
31
57
|
> *runtime*: step-definition glue is a third artifact that drifts from both the spec and the
|
|
32
58
|
> tests. Spec and test are bound by **clause id** instead (`// SPEC:` tag + `[CLAUSE-ID]` in
|