@ivorycanvas/qamap 0.3.1 → 0.3.3

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.
@@ -1,4 +1,33 @@
1
- # 0.2.1 Patch Release Validation
1
+ # Release Validation
2
+
3
+ ## 0.3.3 - 2026-07-05
4
+
5
+ Validated before publishing `0.3.3` (at-a-glance qa verdict, diff-anchored action naming incl. button/link text and logic-only fallbacks, observed-response assertions with diff-derived status bounds, Vue bound-attribute/i18n selector fixes):
6
+
7
+ | Gate | Result |
8
+ | --- | --- |
9
+ | `pnpm test` | 103/103 passing |
10
+ | `pnpm scan` (self-scan) | 0 findings |
11
+ | Coverage thresholds (lines/branches/functions >= 80) | Passing |
12
+ | `pnpm bench` against the four pinned local benchmark targets | Runner choice 4/4, labeled must-reach recall 9/9, blank actions 0, no metric regressions vs the 0.3.2 baseline |
13
+ | README demo repository | Flow names and recorded demo unchanged |
14
+
15
+
16
+ ## 0.3.2 - 2026-07-04
17
+
18
+ Validated before publishing `0.3.2` (reverse import graph, diff-anchored steps and names, workspace-member project detection, Python service classification, start-here CLI guide):
19
+
20
+ | Gate | Result |
21
+ | --- | --- |
22
+ | `pnpm test` | 100/100 passing |
23
+ | `pnpm scan` (self-scan) | 0 findings |
24
+ | Coverage thresholds (lines/branches/functions >= 80) | Passing |
25
+ | `pnpm bench` against four pinned local benchmark targets (web monorepo, Python API server, Expo app, legacy Vue app) | Runner choice 4/4, labeled must-reach recall 9/9, blank actions 0, no metric regressions vs the previous baseline |
26
+ | README demo | Real recorded run; the generated starter spec passes against the demo app |
27
+
28
+ Historical validation notes for earlier releases follow below.
29
+
30
+ # 0.2.1 Patch Release Validation (historical)
2
31
 
3
32
  QAMap should not publish a patch or minor version only because the CLI commands work in fixtures. The `0.2.1` release should prove that the manifest-backed QA skill flow is useful across representative repositories without requiring an LLM call.
4
33
 
@@ -148,7 +177,7 @@ The public demo must prove the product shape, not only command execution. Before
148
177
  - Remaining gaps are specific, such as auth fixture, API mock, stable selector, runner config, or validation command.
149
178
  - The demo makes clear when output is `--dry-run`, `review-only`, `near-runnable`, or `runnable-candidate`.
150
179
 
151
- Avoid demos that only say broad phrases such as "fixture needed", "selector missing", or "Offer flow recommended" without showing why those gaps matter for the changed behavior.
180
+ Avoid demos that only say broad phrases such as "fixture needed", "selector missing", or "Listing flow recommended" without showing why those gaps matter for the changed behavior.
152
181
 
153
182
  ## Current Fixture Evidence Matrix
154
183
 
@@ -160,8 +189,8 @@ The matrix below is public, fixture-backed evidence from the repository test sui
160
189
  | Packaged PR QA skill template | `package metadata includes the portable PR QA skill template` | npm package metadata includes `skills`, and `skills/qamap-pr-qa/SKILL.md` contains the local PR QA workflow, `qamap qa` command, and manifest repair guidance. |
161
190
  | Verification manifest loop | `manifest init creates a baseline verification manifest`; `manifest init keeps Expo app file domains specific`; `manifest init captures advisory instruction context`; `manifest bootstrap produces concrete PR E2E draft from repo QA memory`; `e2e draft can use an external verification manifest for read-only adoption preview`; `manifest matches explain e2e and verify recommendations`; `manifest validate reports missing and stale manifest policy` | Generated `.qamap/manifest.yaml` includes `$schema`, domains, flows, anchors, checks, runner, source, and confidence; context preview reports repo-local instruction sources, role summaries, validation commands, safety rules, and diagnostics; validator reports missing/stale/duplicate policy; explain output maps branch changes to manifest domains/flows/checks; E2E drafts prefer `verification-manifest` sources with manifest evidence, route entry, detected input/action selectors, required checks, and manifest repair paths; external manifests can be passed with `--manifest` for read-only adoption smoke tests. |
162
191
  | Web app with Playwright routes | `generateE2ePlan matches committed core flow definitions`; `generateE2eDraft uses web selectors in Playwright specs`; `generateE2eDraft dry run previews files without writing drafts`; `generateE2eDraft asserts changed HTML success copy in Playwright specs`; `generateE2ePlan captures Playwright execution profile and self-check blockers`; `generateE2ePlan infers Playwright base URLs from dev scripts`; `generateE2eDraft supports Next app router route groups and concrete route hints`; `generateE2ePlan reads React Router object route paths`; `generateE2eDraft fills dynamic route params from concrete route hints`; `generateE2eDraft emits runnable Playwright role and input actions` | `Web` project profile, `playwright` runner, core-flow names such as `Checkout purchase`, route-aware Playwright drafts, dry-run preview status without filesystem writes, stable selector hints, changed HTML success copy assertions, execution profile, dev-script base URL hints, opt-in Playwright setup proposal, Next App Router route groups, React Router object paths, dynamic route params, draft self-check status, action items, and validation gaps. |
163
- | Expo / React Native mobile app | `generateE2ePlan recommends mobile flows for Expo changes`; `generateE2ePlan detects Maestro app ids from app config files`; `generateE2eDraft scopes entrypoint hints to each domain scenario`; `generateE2eDraft names changed component actions before generic primary journeys` | `Expo / React Native` project profile, `maestro` runner, app id and launch command hints from `app.json` or `app.config.*`, Maestro YAML drafts, `testID`/`accessibilityLabel` selector hints, action-specific scenario names such as `Offer Content URL Submit`, and mobile setup actions. |
164
- | API or backend service | `generateE2ePlan detects API service projects and suggests contract checklists`; `generateE2ePlan detects Django service apps from a workspace root`; `generateE2ePlan names versioned API service paths with domain language`; `generateE2ePlan uses matched core flow names for API service contracts` | `API / service` project profile, manual contract checklist, Django/FastAPI-style service signals when present, domain-aware titles such as `Offer API contract`, API consumer actor, endpoint/handler/service-path trigger, service start/test command hints, and contract failure coverage. |
192
+ | Expo / React Native mobile app | `generateE2ePlan recommends mobile flows for Expo changes`; `generateE2ePlan detects Maestro app ids from app config files`; `generateE2eDraft scopes entrypoint hints to each domain scenario`; `generateE2eDraft names changed component actions before generic primary journeys` | `Expo / React Native` project profile, `maestro` runner, app id and launch command hints from `app.json` or `app.config.*`, Maestro YAML drafts, `testID`/`accessibilityLabel` selector hints, action-specific scenario names such as `Listing Media Link Submit`, and mobile setup actions. |
193
+ | API or backend service | `generateE2ePlan detects API service projects and suggests contract checklists`; `generateE2ePlan detects Django service apps from a workspace root`; `generateE2ePlan names versioned API service paths with domain language`; `generateE2ePlan uses matched core flow names for API service contracts` | `API / service` project profile, manual contract checklist, Django/FastAPI-style service signals when present, domain-aware titles such as `Listing API contract`, API consumer actor, endpoint/handler/service-path trigger, service start/test command hints, and contract failure coverage. |
165
194
  | CLI package | `generateE2ePlan detects CLI packages and suggests command verification checklists` | `CLI` project profile from `package.json` bin entries, manual command verification checklist, CLI user or maintainer actor language, command invocation trigger, stdout/stderr/generated-file/exit-code success signal, valid and invalid argument coverage, and no required API fixture action unless the changed command path explicitly exposes network or fixture evidence. |
166
195
  | Design tokens and data catalogs | `generateE2ePlan detects design token packages and suggests artifact validation`; `generateE2ePlan detects data catalog repositories and suggests catalog verification` | `Design tokens` and `Data catalog` project profiles, manual artifact/catalog checklist, token or catalog actor language, schema/generated output/consumer fixture coverage, fixture readiness marked not needed for API mocks, and validation matrix rows that do not require browser/device selectors. |
167
196
  | Monorepo root and package targeting | `generateE2ePlan surfaces package-scoped targets for monorepo root changes`; `generateE2ePlan matches workspace core flows for package scans`; `generateTestPlan scopes monorepo changes to the requested package` | Root plans list changed app/package targets with package names, project type, runner, and scoped commands; package scans keep package-local changed files, workspace-level `.qamap/flows.yml` matches, package-local generated drafts, and no leaked workspace path prefixes in package drafts. |
@@ -194,7 +223,7 @@ The same follow-up also showed the next quality gap. External manifest previews
194
223
 
195
224
  | Target shape | Base/head mode | Result | Follow-up signal |
196
225
  | --- | --- | --- | --- |
197
- | Expo / React Native manifest baseline | `manifest init` wrote only to `/tmp/qamap-mood-note-manifest.yaml` | Generated 9 domains, 8 flows, 8 anchors, and 16 checks without changing the target repo. Direct `app/*.tsx` screens now produce specific paths such as `app/EmotionChatPage.tsx`; `+not-found.tsx` is not promoted as a product domain. | Good 0.2.x signal for baseline quality. Remaining work is richer screen/route semantics and selector-specific checks. |
226
+ | Expo / React Native manifest baseline | `manifest init` wrote only to `/tmp/qamap-journal-note-manifest.yaml` | Generated 9 domains, 8 flows, 8 anchors, and 16 checks without changing the target repo. Direct `app/*.tsx` screens now produce specific paths such as `app/SentimentChatPage.tsx`; `+not-found.tsx` is not promoted as a product domain. | Good 0.2.x signal for baseline quality. Remaining work is richer screen/route semantics and selector-specific checks. |
198
227
  | Web monorepo package | Package scan with `--workspace-root`, feature branch compared with `main`, working tree included | Detected `web`, recommended Playwright, inferred a concrete route, produced changed-flow specs, and correctly blocked promotion because Playwright config, deterministic fixture/mock data, selector evidence, and validation evidence were missing. | Flow naming improved, but docs/design-only files can still create low-signal drafts that should be filtered or demoted. |
199
228
  | Expo / React Native app | Feature branch compared with `develop`, working tree included | Detected `expo-react-native`, recommended Maestro, found an existing Jest suite, produced multiple near-runnable YAML drafts, and gave useful blockers for missing Maestro directory plus missing stable mobile selectors. | Strongest current real-repo result; remaining gap is selector and app-specific setup quality. |
200
229
  | Nuxt / Vue web app with existing Playwright tests | `origin/develop` to `HEAD`, working tree included | Detected `web`, recommended Playwright, recognized existing test evidence, and blocked draft promotion because no Playwright config or runnable route/screen entrypoint was inferred. | Test-only or generated-test changes can still produce generic smoke draft names; QAMap should better distinguish changed tests from changed product behavior. |
package/docs/roadmap.md CHANGED
@@ -45,7 +45,6 @@ Before treating the next public release as ready, the golden demo must satisfy t
45
45
  - Improve `doctor` output with clearer scoring and remediation grouping.
46
46
  - Improve `review` output for changed-line locations.
47
47
  - Expand manifest support with richer anchors, symbol-level matching, and configurable taste rubrics.
48
- - Match changed files to flows through a reverse import graph, not only declared anchor paths, so shared component and hook changes map to the flows that depend on them.
49
48
  - Map changed symbols to manifest anchors after the path/route baseline is stable.
50
49
  - Keep the `--format agent` output a stable, versioned contract that skills and MCP wrappers can rely on.
51
50
  - Add language-specific domain patterns for backend services, CLIs, libraries, mobile apps, and infrastructure repositories.
package/docs/verify.md CHANGED
@@ -24,7 +24,7 @@ For custom stacks or team-specific flows, add `validationCommands` to `qamap.con
24
24
  ```sh
25
25
  qamap verify . --base origin/main --head HEAD --format markdown
26
26
  qamap verify . --base origin/main --head HEAD --pr-body-file pr-body.md
27
- qamap verify services/offer --workspace-root . --base origin/main --head HEAD --include-working-tree
27
+ qamap verify services/listing --workspace-root . --base origin/main --head HEAD --include-working-tree
28
28
  ```
29
29
 
30
30
  Use `--fail-on high` or `--fail-on medium` to fail on QAMap review findings at or above a severity threshold. Readiness and manifest recommendations stay advisory until the team decides to make them required PR evidence.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ivorycanvas/qamap",
3
- "version": "0.3.1",
3
+ "version": "0.3.3",
4
4
  "description": "Local-first QA skill that turns PR diffs into affected flows, missing evidence, and E2E drafts with no cloud or LLM token.",
5
5
  "type": "module",
6
6
  "packageManager": "pnpm@10.32.1",
@@ -24,7 +24,8 @@
24
24
  "coverage": "pnpm build && node --test --experimental-test-coverage --test-coverage-include=\"dist/**/*.js\" --test-coverage-lines=80 --test-coverage-branches=80 --test-coverage-functions=80 test/*.test.mjs",
25
25
  "scan": "pnpm build && node dist/cli.js scan .",
26
26
  "report": "pnpm build && node dist/cli.js report . --output QAMAP_REPORT.md",
27
- "release:check": "pnpm test && pnpm scan && git diff --check && pnpm run coverage && pnpm pack --dry-run"
27
+ "release:check": "pnpm test && pnpm scan && git diff --check && pnpm run coverage && pnpm pack --dry-run",
28
+ "bench": "pnpm build && node scripts/bench.mjs"
28
29
  },
29
30
  "keywords": [
30
31
  "ai",
@@ -45,7 +45,7 @@ Use QAMap as a final local QA pass before presenting a pull request for human re
45
45
  - `requiredBootstrap[]` — setup steps that block trusting generated drafts.
46
46
  - `firstDraftCommand` — present only when the repo has no test suite; run it to create the first starter draft.
47
47
  - `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.
48
+ 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
49
  6. Include the useful parts in the PR body, review note, or handoff summary.
50
50
 
51
51
  ## Output Rules