@ivorycanvas/qamap 0.3.2 → 0.3.4

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.
Files changed (52) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/README.md +44 -578
  3. package/dist/agent-init.d.ts +16 -0
  4. package/dist/agent-init.js +110 -0
  5. package/dist/agent-init.js.map +1 -0
  6. package/dist/cli.js +17 -1
  7. package/dist/cli.js.map +1 -1
  8. package/dist/context.d.ts +1 -0
  9. package/dist/context.js +4 -0
  10. package/dist/context.js.map +1 -1
  11. package/dist/domain-language.js +121 -12
  12. package/dist/domain-language.js.map +1 -1
  13. package/dist/e2e.d.ts +4 -0
  14. package/dist/e2e.js +424 -85
  15. package/dist/e2e.js.map +1 -1
  16. package/dist/fixture-insight.d.ts +8 -0
  17. package/dist/fixture-insight.js +193 -0
  18. package/dist/fixture-insight.js.map +1 -0
  19. package/dist/fs.js +11 -0
  20. package/dist/fs.js.map +1 -1
  21. package/dist/index.d.ts +2 -1
  22. package/dist/index.js +2 -1
  23. package/dist/index.js.map +1 -1
  24. package/dist/manifest.d.ts +5 -0
  25. package/dist/manifest.js +478 -54
  26. package/dist/manifest.js.map +1 -1
  27. package/dist/qa.d.ts +4 -0
  28. package/dist/qa.js +177 -14
  29. package/dist/qa.js.map +1 -1
  30. package/dist/terminal.d.ts +2 -0
  31. package/dist/terminal.js +51 -0
  32. package/dist/terminal.js.map +1 -0
  33. package/dist/test-plan.js +56 -6
  34. package/dist/test-plan.js.map +1 -1
  35. package/dist/version.d.ts +1 -1
  36. package/dist/version.js +1 -1
  37. package/docs/adoption.md +62 -0
  38. package/docs/agent-format.md +52 -0
  39. package/docs/agent-skill.md +17 -1
  40. package/docs/benchmarking.md +60 -20
  41. package/docs/commands.md +242 -0
  42. package/docs/configuration.md +11 -0
  43. package/docs/e2e-output-examples.md +8 -4
  44. package/docs/guardrails.md +64 -0
  45. package/docs/manifest.md +3 -3
  46. package/docs/quickstart-demo.md +1 -1
  47. package/docs/release-validation.md +31 -4
  48. package/docs/releasing.md +13 -10
  49. package/docs/roadmap.md +9 -14
  50. package/package.json +4 -3
  51. package/schema/qamap-agent.schema.json +171 -0
  52. package/skills/qamap-pr-qa/SKILL.md +2 -1
@@ -0,0 +1,171 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://raw.githubusercontent.com/IvoryCanvas/qamap/main/schema/qamap-agent.schema.json",
4
+ "title": "QAMap agent QA summary (qamap.qa v1)",
5
+ "description": "The single-line JSON object printed by `qamap qa --format agent`. Within schema version 1, fields are only ever added — existing fields are never removed or retyped. A breaking change bumps schema.version to 2.",
6
+ "type": "object",
7
+ "additionalProperties": true,
8
+ "required": [
9
+ "schema",
10
+ "base",
11
+ "head",
12
+ "project",
13
+ "runner",
14
+ "manifest",
15
+ "readiness",
16
+ "testSuite",
17
+ "flows",
18
+ "requiredEvidence",
19
+ "recommendedEvidenceCount",
20
+ "requiredBootstrap",
21
+ "prChecklist",
22
+ "commands"
23
+ ],
24
+ "properties": {
25
+ "schema": {
26
+ "type": "object",
27
+ "required": ["name", "version"],
28
+ "properties": {
29
+ "name": { "const": "qamap.qa" },
30
+ "version": { "const": 1 }
31
+ }
32
+ },
33
+ "base": {
34
+ "type": "string",
35
+ "description": "Git ref the diff was computed against."
36
+ },
37
+ "head": {
38
+ "type": "string",
39
+ "description": "Git ref of the change under review."
40
+ },
41
+ "project": {
42
+ "type": "string",
43
+ "description": "Detected project type, for example web, react-native, node, python, unknown."
44
+ },
45
+ "runner": {
46
+ "type": "string",
47
+ "enum": ["maestro", "playwright", "manual"],
48
+ "description": "Recommended E2E runner for this repository."
49
+ },
50
+ "manifest": {
51
+ "type": ["string", "null"],
52
+ "description": "Path of the verification manifest in use, or null when the run used repo signals and the PR diff only."
53
+ },
54
+ "readiness": {
55
+ "type": "object",
56
+ "required": ["score", "level"],
57
+ "properties": {
58
+ "score": { "type": "number", "minimum": 0, "maximum": 100 },
59
+ "level": {
60
+ "type": "string",
61
+ "enum": ["ready", "near-runnable", "needs-work", "blocked"],
62
+ "description": "Stable machine value; human reports render this as a stage on a four-step journey."
63
+ }
64
+ }
65
+ },
66
+ "testSuite": {
67
+ "type": "object",
68
+ "required": ["present", "files"],
69
+ "properties": {
70
+ "present": { "type": "boolean" },
71
+ "files": { "type": "number", "minimum": 0 }
72
+ }
73
+ },
74
+ "firstDraftCommand": {
75
+ "type": "string",
76
+ "description": "One command that creates the first E2E draft. Only present when the repository has no test suite and the diff reaches a product journey."
77
+ },
78
+ "flows": {
79
+ "type": "array",
80
+ "description": "Affected user flows derived from the diff, most relevant first (capped).",
81
+ "items": {
82
+ "type": "object",
83
+ "required": ["title", "source", "draft", "steps", "selectors"],
84
+ "properties": {
85
+ "title": { "type": "string" },
86
+ "source": {
87
+ "type": "string",
88
+ "description": "Where the flow came from, for example verification-manifest, core-flow, domain-language, heuristic."
89
+ },
90
+ "draft": { "type": "string", "description": "Path of the fallback draft artifact for this flow. When verificationMode is present, run existing repository evidence first instead of generating it by default." },
91
+ "verificationMode": {
92
+ "type": "string",
93
+ "enum": ["existing-test-evidence", "configuration", "documentation", "generated-artifact"],
94
+ "description": "Why this flow should validate existing evidence instead of generating a new product-journey E2E draft."
95
+ },
96
+ "runnable": {
97
+ "type": "string",
98
+ "enum": ["runnable-candidate", "near-runnable", "review-only"],
99
+ "description": "How trustworthy the generated draft is as an executable test. Absent when not evaluated."
100
+ },
101
+ "entry": { "type": "string", "description": "Best entrypoint hint (route or screen). Absent when unknown." },
102
+ "changedFiles": {
103
+ "type": "array",
104
+ "items": { "type": "string" },
105
+ "description": "Changed or import-reached files that support this flow mapping (capped)."
106
+ },
107
+ "reviewQuestion": {
108
+ "type": "string",
109
+ "description": "The concrete question a reviewer should answer before merge."
110
+ },
111
+ "successSignal": {
112
+ "type": "string",
113
+ "description": "The observable result that would prove the flow still works."
114
+ },
115
+ "steps": { "type": "array", "items": { "type": "string" } },
116
+ "selectors": { "type": "array", "items": { "type": "string" } },
117
+ "existingEvidence": {
118
+ "type": "array",
119
+ "items": { "type": "string" },
120
+ "description": "Changed test files to execute instead of generating another draft. Present for test-evidence-only changes."
121
+ },
122
+ "evidence": {
123
+ "type": "array",
124
+ "items": { "type": "string" },
125
+ "description": "Short reasons and repository facts behind the mapping (capped)."
126
+ }
127
+ }
128
+ }
129
+ },
130
+ "requiredEvidence": {
131
+ "type": "array",
132
+ "description": "QA evidence the change still needs before merge (required priority only, capped at 8).",
133
+ "items": {
134
+ "type": "object",
135
+ "required": ["flow", "kind", "title"],
136
+ "properties": {
137
+ "flow": { "type": "string" },
138
+ "kind": { "type": "string" },
139
+ "title": { "type": "string" }
140
+ }
141
+ }
142
+ },
143
+ "recommendedEvidenceCount": {
144
+ "type": "number",
145
+ "minimum": 0,
146
+ "description": "Count of recommended-priority evidence items not listed here; run without --format agent to see them."
147
+ },
148
+ "requiredBootstrap": {
149
+ "type": "array",
150
+ "description": "Setup steps that must happen before drafts can be treated as regression coverage (capped at 3).",
151
+ "items": {
152
+ "type": "object",
153
+ "required": ["title", "action"],
154
+ "properties": {
155
+ "title": { "type": "string" },
156
+ "action": { "type": "string" }
157
+ }
158
+ }
159
+ },
160
+ "prChecklist": {
161
+ "type": "array",
162
+ "items": { "type": "string" },
163
+ "description": "Ready-to-paste PR checklist lines (capped)."
164
+ },
165
+ "commands": {
166
+ "type": "array",
167
+ "items": { "type": "string" },
168
+ "description": "Suggested commands to run next, most useful first (capped at 4)."
169
+ }
170
+ }
171
+ }
@@ -25,6 +25,7 @@ Use QAMap as a final local QA pass before presenting a pull request for human re
25
25
  ```
26
26
 
27
27
  Drop `--format agent` when a human will read the output directly; the default markdown report is written for people.
28
+ The agent JSON is a versioned contract (`schema: qamap.qa` v1, additive-only): see docs/agent-format.md in the QAMap repository.
28
29
 
29
30
  3. If the repository is a monorepo and the changed files are clearly inside one package, run a scoped pass too:
30
31
 
@@ -45,7 +46,7 @@ Use QAMap as a final local QA pass before presenting a pull request for human re
45
46
  - `requiredBootstrap[]` — setup steps that block trusting generated drafts.
46
47
  - `firstDraftCommand` — present only when the repo has no test suite; run it to create the first starter draft.
47
48
  - `prChecklist[]` and `commands[]` — checklist lines and validation commands for the handoff.
48
- In markdown format, read the `PR Comment Draft`, `Missing Evidence Before Trusting This PR`, and `PR Checklist` sections.
49
+ In markdown format, start from `At a Glance` (affected flows, the single next command, blocking items), then read the `PR Comment Draft`, `Missing Evidence Before Trusting This PR`, and `PR Checklist` sections.
49
50
  6. Include the useful parts in the PR body, review note, or handoff summary.
50
51
 
51
52
  ## Output Rules