@exodus/xqa 5.0.0 → 5.1.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 CHANGED
@@ -113,6 +113,7 @@ Inspects the git diff between the current branch and its upstream, asks the plan
113
113
  ```bash
114
114
  xqa plan # generate scenarios from current diff
115
115
  xqa plan --intent "login changes" --out .xqa/test-plan/my-slug
116
+ xqa plan --base develop # diff against a branch other than origin/HEAD
116
117
  xqa plan edit .xqa/test-plan/my-slug/scenario-1.test.md --feedback "rename step 2"
117
118
  xqa plan extend # append scenarios for fresh commits
118
119
  xqa plan report --findings .xqa/output/.../findings.json --specs .xqa/test-plan/my-slug
@@ -122,6 +123,8 @@ Flags:
122
123
 
123
124
  - `--intent <text>` — Optional focus hint passed to the planner.
124
125
  - `--out <dir>` — Output directory for the generated scenarios (default: `<xqa>/test-plan/default`).
126
+ - `--base <ref>` — Base git ref to diff against. When omitted, xqa auto-detects the base from an open PR via `gh pr view` and falls back to `origin/HEAD`. Pass explicitly to override.
127
+ - `--debug` — Log base/head refs, diff summary, existing specs count, classification, the full prompt sent to the model, and the raw AI response to stderr. Useful for investigating `model-abstained` empty results.
125
128
 
126
129
  Subcommands:
127
130
 
@@ -87,13 +87,27 @@ Count booted devices:
87
87
 
88
88
  Remember the chosen UDID for the Run step.
89
89
 
90
- ### 3. Invoke planner
90
+ ### 3. Detect base ref
91
+
92
+ MUST resolve `--base` before invoking planner; wrong diff causes model abstention (`emptyReason: model-abstained`).
93
+
94
+ | Detection method | Command | Use when |
95
+ | ---------------------------------- | -------------------------------------------------------------------------- | ------------------------------ |
96
+ | Open PR (authoritative) | `gh pr view --json baseRefName --jq '.baseRefName'` | `gh` available + PR exists |
97
+ | Local upstream tracking (fallback) | `git rev-parse --abbrev-ref @{upstream}` — strip remote prefix (`origin/`) | No PR; upstream set |
98
+ | None | Omit `--base` entirely | Both methods fail or empty out |
99
+
100
+ MUST NOT fabricate a base ref when detection fails — omit the flag and let the CLI default to `origin/HEAD`.
101
+
102
+ ### 4. Invoke planner
91
103
 
92
104
  ```bash
93
- xqa plan --intent "<one-sentence summary>" --out .xqa/test-plan/<slug>
105
+ xqa plan --intent "<one-sentence summary>" --base <base-ref> --out .xqa/test-plan/<slug>
94
106
  ```
95
107
 
96
- ### 4. Render approval checklist
108
+ Omit `--base <base-ref>` when detection produced no result.
109
+
110
+ ### 5. Render approval checklist
97
111
 
98
112
  - Parse planner stdout as JSON; extract the `specs[]` array.
99
113
  - Read each `<path>.test.md` that the planner wrote.
@@ -203,6 +217,9 @@ IMPORTANT: Regenerate never deletes `runs/`. Run history is preserved across reg
203
217
  - [ ] Detect state auto-prunes stale sibling dirs but never current
204
218
  - [ ] Generate flow handles 0 booted simulators (error), 1 (auto), >1 (prompt)
205
219
  - [ ] Generate flow passes `--intent` correctly
220
+ - [ ] Generate flow detects base ref from open PR (`gh pr view`)
221
+ - [ ] Generate flow falls back to upstream tracking when no PR exists
222
+ - [ ] Generate flow omits `--base` when both detection methods fail
206
223
  - [ ] Approval loop calls `xqa plan edit` per file
207
224
  - [ ] Run flow preflights simulator before dispatching
208
225
  - [ ] Report flow renders two-state status (has_findings / not_run) correctly