ccqa 1.38.0 → 1.39.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/dist/bin/ccqa.mjs CHANGED
@@ -9390,8 +9390,8 @@ z.object({
9390
9390
  *
9391
9391
  * This is the whole re-run computation, not an accelerator for it. Each spec's
9392
9392
  * baseline sits at a different position in the log, so the question is always
9393
- * "since *this* spec last ran, was it ever needed" — two integer comparisons
9394
- * against the positions kept here. Re-deriving it per read is impossible
9393
+ * "since *this* spec last ran, was it ever needed" — one integer comparison
9394
+ * against the `needed` position kept here. Re-deriving it per read is impossible
9395
9395
  * anyway: the selections were made by a model against each deploy's diff, and
9396
9396
  * neither the diff nor the model is available at read time.
9397
9397
  *
@@ -19041,8 +19041,7 @@ function freshness(baselineSha, key, range) {
19041
19041
  const baselinePos = positionBySha.get(baselineSha);
19042
19042
  if (baselinePos === void 0) return unanswerable("deployedShaNotInLog");
19043
19043
  const baselineIndex = log.entries[baselinePos].index;
19044
- const touch = touchIndex[key];
19045
- const touched = touch?.needed;
19044
+ const touched = touchIndex[key]?.needed;
19046
19045
  if (touched && touched.index > baselineIndex) {
19047
19046
  const entry = range.entryByIndex.get(touched.index);
19048
19047
  return {
@@ -19053,7 +19052,6 @@ function freshness(baselineSha, key, range) {
19053
19052
  }
19054
19053
  if (range.gapFromPos[baselinePos + 1]) return unanswerable("gapInRange");
19055
19054
  if (range.noSelectionFromPos[baselinePos + 1]) return unanswerable("noSelectionInRange");
19056
- if (touch?.undecidedIndex !== void 0 && touch.undecidedIndex > baselineIndex) return unanswerable("selectionUnknown");
19057
19055
  return { kind: "current" };
19058
19056
  }
19059
19057
  function deployRef(entry) {
@@ -21300,10 +21298,11 @@ function appendDeploy(current, input) {
21300
21298
  /**
21301
21299
  * Fold one deploy's selection into the touch index.
21302
21300
  *
21303
- * Only the two positions that decide a verdict move: the newest deploy that
21304
- * needed a spec, and the newest that could not decide it. A `notNeeded` writes
21305
- * neither it is the absence of a marker at this position, which is exactly
21306
- * what a later baseline comparison reads it as.
21301
+ * Only `needed` moves a position a verdict reads. An `unknown` records the
21302
+ * newest undecided position too, but that one is record-only (ADR-0023)
21303
+ * freshness reads an undecided judgment as "did not reach". A `notNeeded`
21304
+ * writes neither — it is the absence of a marker at this position, which is
21305
+ * exactly what a later baseline comparison reads it as.
21307
21306
  *
21308
21307
  * Positions only ever advance. Deploys are folded in log order, so a spec
21309
21308
  * needed at #7 and cleared at #9 keeps `needed.index: 7`: a baseline at #5
@@ -21366,7 +21365,7 @@ function createRecordDeployHandler(storage) {
21366
21365
  }
21367
21366
  /**
21368
21367
  * Record what this deploy's selection decided, so a later read can answer each
21369
- * spec's own range with two integer comparisons.
21368
+ * spec's own range by comparing positions.
21370
21369
  *
21371
21370
  * It does not fail the request: the log is the record of what shipped and has
21372
21371
  * to land even if the fold cannot. What a lost fold must not do is *look* like
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ccqa",
3
- "version": "1.38.0",
3
+ "version": "1.39.0",
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.38.0",
3
+ "version": "1.39.0",
4
4
  "type": "module",
5
5
  "description": "Browser test recorder powered by Claude Code and agent-browser",
6
6
  "repository": {