ccqa 1.31.2 → 1.31.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.
package/dist/bin/ccqa.mjs CHANGED
@@ -15579,10 +15579,11 @@ async function runRecord(specPath, opts) {
15579
15579
  let sealed = true;
15580
15580
  let tracingStep;
15581
15581
  let abortCause;
15582
+ let traceFailureNote;
15582
15583
  const teardown = createRunTeardown();
15583
15584
  teardown.onFinalize(async () => {
15584
15585
  if (!push) return;
15585
- sealed = await sealRecordPush(push, featureName, specName, recorded, abortCause !== void 0 ? abortNote(abortCause, tracingStep) : void 0);
15586
+ sealed = await sealRecordPush(push, featureName, specName, recorded, abortCause !== void 0 ? abortNote(abortCause, tracingStep) : traceFailureNote);
15586
15587
  });
15587
15588
  const disposeSignalHandlers = installTeardownSignalHandlers(teardown, (sig) => {
15588
15589
  abortCause = `terminated by signal (${sig})`;
@@ -15609,6 +15610,7 @@ async function runRecord(specPath, opts) {
15609
15610
  }
15610
15611
  });
15611
15612
  tracingStep = void 0;
15613
+ if (traceResult.status !== "passed") traceFailureNote = "trace finished FAILED — a step did not complete, so the recording does not demonstrate the spec";
15612
15614
  blank();
15613
15615
  await learnFromTrace({
15614
15616
  enabled: opts.learnHubTracePrompt === true,
@@ -15633,14 +15635,17 @@ async function runRecord(specPath, opts) {
15633
15635
  } finally {
15634
15636
  await releaseLock();
15635
15637
  }
15636
- recorded = generated;
15638
+ recorded = generated && traceFailureNote === void 0;
15637
15639
  } finally {
15638
15640
  if (deadline !== void 0) clearTimeout(deadline);
15639
15641
  await teardown.run();
15640
15642
  disposeSignalHandlers();
15641
15643
  }
15642
15644
  if (!sealed) process.exit(2);
15643
- if (!recorded) process.exit(1);
15645
+ if (!recorded) {
15646
+ if (traceFailureNote !== void 0) error(traceFailureNote);
15647
+ process.exit(1);
15648
+ }
15644
15649
  }
15645
15650
  /** `--timeout <seconds>`: a positive whole number of seconds. */
15646
15651
  function parseTimeoutSeconds(raw) {
@@ -15898,6 +15903,21 @@ For a \`mode: live\` spec there is no generated surface, so always \`spec\`.
15898
15903
 
15899
15904
  ${surfaceAxisAside("`TEST_DRIFT`")}
15900
15905
 
15906
+ ## What the \`replay-unstable\` comments are
15907
+
15908
+ Generated code may carry \`// [warn] replay-unstable: ...\` comments. These are
15909
+ observations from the one validation replay run right after recording — a
15910
+ selector that did not appear within its timeout *in that run*, on that day's
15911
+ data and load. They are diagnostic breadcrumbs, not part of the test, and a
15912
+ slow environment produces them on selectors that are perfectly correct.
15913
+
15914
+ Judge the selector the comment sits on like any other: find its string in the
15915
+ source. If it is there, the comment alone is **not** drift evidence — do not
15916
+ cite a \`replay-unstable\` comment as your evidence for TEST_DRIFT. If the
15917
+ string is genuinely absent from the source, the finding stands on that
15918
+ absence, with the source as the citation, whether or not a comment happens to
15919
+ sit nearby.
15920
+
15901
15921
  ## Earning each answer
15902
15922
 
15903
15923
  - **No drift is a claim, not a default.** Make it after picking the concrete strings from *every* surface you were given — the spec's \`expected\` and the generated code's selectors alike — and finding each of them in the source. Clearing the test case because one surface checked out is the most common way to miss a real finding. If you never looked, the honest answer is UNKNOWN.
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ccqa",
3
- "version": "1.31.2",
3
+ "version": "1.31.4",
4
4
  "type": "module",
5
5
  "description": "Browser test recorder powered by Claude Code and agent-browser",
6
6
  "repository": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ccqa",
3
- "version": "1.31.2",
3
+ "version": "1.31.4",
4
4
  "type": "module",
5
5
  "description": "Browser test recorder powered by Claude Code and agent-browser",
6
6
  "repository": {