@enricai/barnacle 1.9.8 → 1.9.10

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 (94) hide show
  1. package/README.md +6 -6
  2. package/dist/api/errors.d.ts +1 -1
  3. package/dist/api/errors.d.ts.map +1 -1
  4. package/dist/api/errors.js +3 -3
  5. package/dist/api/errors.js.map +1 -1
  6. package/dist/api/plugins/error-handler.js +1 -1
  7. package/dist/api/plugins/error-handler.js.map +1 -1
  8. package/dist/api/routes/submissions.d.ts +1 -1
  9. package/dist/api/schemas/telemetry.d.ts +1 -1
  10. package/dist/api/schemas/telemetry.js +1 -1
  11. package/dist/cache/response-cache.d.ts +1 -1
  12. package/dist/cache/response-cache.js +2 -2
  13. package/dist/config.d.ts +4 -4
  14. package/dist/lib/llm/judges/invalid-fields.d.ts +1 -1
  15. package/dist/lib/llm/judges/invalid-fields.d.ts.map +1 -1
  16. package/dist/lib/llm/judges/invalid-fields.js +1 -1
  17. package/dist/lib/llm/judges/verify-submit.js +1 -1
  18. package/dist/lib/logging.d.ts +1 -1
  19. package/dist/lib/logging.js +1 -1
  20. package/dist/lib/telemetry/beacon-capture.d.ts +1 -1
  21. package/dist/lib/telemetry/beacon-capture.js +1 -1
  22. package/dist/lib/telemetry/call-capture.d.ts +1 -1
  23. package/dist/lib/telemetry/call-capture.js +1 -1
  24. package/dist/lib/telemetry/reconciliation-source.d.ts +4 -4
  25. package/dist/lib/telemetry/reconciliation-source.js +5 -5
  26. package/dist/lib/telemetry/run-telemetry.d.ts +1 -1
  27. package/dist/lib/telemetry/run-telemetry.js +1 -1
  28. package/dist/lib/telemetry/s3-sink.d.ts +1 -1
  29. package/dist/lib/telemetry/s3-sink.js +1 -1
  30. package/dist/lib/telemetry/submissions-s3-objects.d.ts +1 -1
  31. package/dist/lib/telemetry/submissions-s3-objects.js +1 -1
  32. package/dist/lib/telemetry/submissions-s3-reader.d.ts +1 -1
  33. package/dist/lib/telemetry/submissions-s3-reader.js +1 -1
  34. package/dist/plugins/config-plugin.js +2 -2
  35. package/dist/recon/load-form-schema.d.ts +1 -1
  36. package/dist/recon/load-form-schema.js +1 -1
  37. package/dist/recon/load-vocabulary.d.ts +1 -1
  38. package/dist/recon/load-vocabulary.js +2 -2
  39. package/dist/scraper/deep-locator-actuate.d.ts +1 -1
  40. package/dist/scraper/deep-locator-actuate.js +3 -3
  41. package/dist/scraper/deep-locator-candidates.d.ts +2 -2
  42. package/dist/scraper/deep-locator-candidates.js +3 -3
  43. package/dist/scraper/deep-locator-fake.d.ts +8 -8
  44. package/dist/scraper/deep-locator-fake.d.ts.map +1 -1
  45. package/dist/scraper/deep-locator-fake.js +5 -5
  46. package/dist/scraper/deep-locator-fake.js.map +1 -1
  47. package/dist/scraper/deep-locator-scan.d.ts +5 -5
  48. package/dist/scraper/deep-locator-scan.js +7 -7
  49. package/dist/scraper/deep-query.js +1 -1
  50. package/dist/scraper/errors.d.ts +2 -2
  51. package/dist/scraper/errors.js +2 -2
  52. package/dist/scraper/flow-runner.d.ts +71 -7
  53. package/dist/scraper/flow-runner.d.ts.map +1 -1
  54. package/dist/scraper/flow-runner.js +124 -29
  55. package/dist/scraper/flow-runner.js.map +1 -1
  56. package/dist/scraper/frame-target.js +1 -1
  57. package/dist/scraper/http-client.js +1 -1
  58. package/dist/scraper/metrics.d.ts +1 -1
  59. package/dist/scraper/metrics.js +1 -1
  60. package/dist/scraper/phantom-click.d.ts +27 -1
  61. package/dist/scraper/phantom-click.d.ts.map +1 -1
  62. package/dist/scraper/phantom-click.js +17 -1
  63. package/dist/scraper/phantom-click.js.map +1 -1
  64. package/dist/scraper/retry.js +1 -1
  65. package/dist/scraper/retry.js.map +1 -1
  66. package/dist/scraper/session-browserbase.d.ts +3 -3
  67. package/dist/scraper/session-browserbase.js +4 -4
  68. package/dist/scraper/session-browserbase.js.map +1 -1
  69. package/dist/scraper/session-shared.d.ts +2 -2
  70. package/dist/scraper/stagehand-guard.d.ts +4 -4
  71. package/dist/scraper/stagehand-guard.js +5 -5
  72. package/dist/scraper/submit-control.js +1 -1
  73. package/dist/scripts/judge-llm-batch.d.ts +1 -1
  74. package/dist/scripts/llm-heal.d.ts +1 -1
  75. package/dist/scripts/recon-browser.d.ts +1 -1
  76. package/dist/scripts/recon-browser.js +2 -2
  77. package/dist/scripts/recon-generate-multicall-fixture.d.ts +1 -1
  78. package/dist/scripts/recon-generate.d.ts +11 -1
  79. package/dist/scripts/recon-generate.d.ts.map +1 -1
  80. package/dist/scripts/recon-generate.js +28 -4
  81. package/dist/scripts/recon-generate.js.map +1 -1
  82. package/dist/scripts/recon-heal.js +1 -1
  83. package/dist/scripts/recon-heal.js.map +1 -1
  84. package/dist/scripts/recon-http.d.ts +1 -1
  85. package/dist/scripts/recon-http.js +1 -1
  86. package/dist/scripts/recon-shared.d.ts +1 -1
  87. package/dist/server.js +1 -1
  88. package/dist/site-plugin.d.ts +1 -1
  89. package/dist/testing/contract-parity-suite.d.mts +1 -1
  90. package/dist/testing/contract-parity-suite.mjs +1 -1
  91. package/dist/testing/coverage-guard-suite.d.mts +1 -1
  92. package/dist/testing/coverage-guard-suite.mjs +1 -1
  93. package/dist/testing/replay-integration-suite.d.mts +1 -1
  94. package/package.json +2 -2
package/README.md CHANGED
@@ -139,7 +139,7 @@ Each file is a JSON object:
139
139
  }
140
140
  ```
141
141
 
142
- Field reference (mirrors CDP's `Network.Cookie` type verbatim — no remapping between capture and disk):
142
+ Field reference (matches CDP's `Network.Cookie` type verbatim — no remapping between capture and disk):
143
143
 
144
144
  | Field | Meaning |
145
145
  | --- | --- |
@@ -328,7 +328,7 @@ interface SitePlugin<TPayload, TResult> {
328
328
  | `maxAttempts?` | `number` | Override the retry policy's default of 3 attempts (including the first try). Without this, the per-run ceiling is `3 × taskTimeoutMs`; set to `1` so `taskTimeoutMs` is the real per-run cap |
329
329
  | `apiVersion?` | `string` | Semver range targeting a plugin API version (e.g. `"^1.0.0"`); core disables the plugin on a major-version mismatch. Absent means "accept any version." |
330
330
  | `extraRoutes?` | `readonly SitePluginExtraRoute[]` | Extra non-run routes (OTP trigger, resume, etc.) that core registers as authenticated Fastify routes at startup. See `SitePluginExtraRoute` in `src/site-plugin.ts`. |
331
- | `onShutdown?` | `() => Promise<void>` | Optional cleanup for background work the plugin launched fire-and-forget, awaited during graceful shutdown so in-flight work is not abandoned and sessions are not leaked. Mirrors the engine's own drain functions. Bounded by a per-plugin timeout, so a hanging drain cannot stall shutdown. Module plugins only — config-only `*.plugin.json` manifests are pure JSON and cannot declare a function. |
331
+ | `onShutdown?` | `() => Promise<void>` | Optional cleanup for background work the plugin launched fire-and-forget, awaited during graceful shutdown so in-flight work is not abandoned and sessions are not leaked. Parallels the engine's own drain functions. Bounded by a per-plugin timeout, so a hanging drain cannot stall shutdown. Module plugins only — config-only `*.plugin.json` manifests are pure JSON and cannot declare a function. |
332
332
 
333
333
  ### Full plugin skeleton (hot path + browser fallback)
334
334
 
@@ -623,7 +623,7 @@ When the smoke test fails: re-run `pnpm run recon:browser` → diff `<run-dir>/g
623
623
 
624
624
  ### Cache deduplication
625
625
 
626
- `getCachedResponse()` checks the LRU cache first. On a miss, `getOrCreateInFlight()` registers a promise in an `inFlight` map before awaiting it — meaning concurrent identical requests all await the same upstream call rather than fanning out. First caller wins; all others coalesce onto its promise.
626
+ `getCachedResponse()` checks the LRU cache first. On a miss, `getOrCreateInFlight()` registers a promise in an `inFlight` map before awaiting it — meaning concurrent identical requests all await the same origin call rather than fanning out. First caller wins; all others coalesce onto its promise.
627
627
 
628
628
  Cache key: `<endpoint>:<sha256(canonical payload)[:32]>` — the endpoint is a literal prefix; the hash covers only the canonical payload. Object key order and primitive array element order are normalized so `{a:1,b:2}` and `{b:2,a:1}` hit the same entry. Default TTL: 15 minutes (`CACHE_TTL_MS`). Max entries: 1000 (`CACHE_MAX_ENTRIES`). Only successful responses are cached; errors propagate and never poison the cache.
629
629
 
@@ -694,7 +694,7 @@ When using Anthropic directly (not Bedrock), the model is controlled by `STAGEHA
694
694
 
695
695
  **What rising `fallbackActivations` means:** the hot path is failing and the browser fallback is absorbing traffic. Cost and latency rise while error rate stays flat — users don't notice yet, but you will on your bill. This is your signal to re-run recon.
696
696
 
697
- **`p95LatencyMs`** is reservoir-sampled (Vitter's Algorithm R, capped at 1000 samples) over actual upstream round-trips. Cache hits are excluded — they're memory reads and must not bias the upstream latency signal.
697
+ **`p95LatencyMs`** is reservoir-sampled (Vitter's Algorithm R, capped at 1000 samples) over actual origin round-trips. Cache hits are excluded — they're memory reads and must not bias the origin latency signal.
698
698
 
699
699
  See [docs/playbook.md](./docs/playbook.md#6b--metrics-signals-the-detection-ladder) for the full detection ladder.
700
700
 
@@ -916,7 +916,7 @@ http/net/dns. Metrics have no such constraint.
916
916
  | `SUBMISSIONS_NDJSON_PATH` | `.barnacle/submissions.ndjson` | Append-only NDJSON sink for dispatch submission envelopes and beacon-fire outcomes. `kind:"submit"` lines (null/`"submit"`-defaulted on legacy lines) capture siteId, requestId, inbound payload, status, audit payload, and duration, plus the opaque `joinKeys` bag a plugin's `extractJoinKeys` hook resolved, merged with anything attached mid-run via `context.telemetry.addJoinKeys()` — the durable source-of-truth for "what did we submit for jobId X and did it succeed." `kind:"beacon"` lines record a later (or, for `beaconStatus: "skipped"`, immediate) independent beacon-fire outcome (`beaconStatus`: `fired`/`failed`/`skipped`, truncated `trackingUrl`) for the same `requestId`, so "submitted but the beacon did not fire" is measurable — the `skipped` line is always written by `dispatch()` itself, but a plugin managing its own tracking nav can call `context.recordBeaconOutcome` to append a real `fired`/`failed` line for the same `requestId`, which outranks `skipped` when the two are folded (see [Reconciliation join keys](#reconciliation-join-keys-extractjoinkeys)). A reader folds both kinds together by `requestId`, so a plugin can join runs to its own attribution provider's report without re-parsing `inboundPayload`. |
917
917
  | `TELEMETRY_MAX_FILE_SIZE_BYTES` | `104857600` (100 MB) | Rotate/drop the calls NDJSON once it exceeds this byte count. |
918
918
  | `TELEMETRY_MAX_RETENTION_MS` | `2592000000` (30 days) | Drop event-stream files older than this many milliseconds. |
919
- | `TELEMETRY_S3_BUCKET` | — | Optional — destination bucket for the buffered S3 telemetry mirror. Sink is entirely inert (no client, no network calls) when unset. Credentials/region resolve the same way as Bedrock (`AWS_REGION`, standard SDK credential order). |
919
+ | `TELEMETRY_S3_BUCKET` | — | Optional — destination bucket for the buffered S3 telemetry replica. Sink is entirely inert (no client, no network calls) when unset. Credentials/region resolve the same way as Bedrock (`AWS_REGION`, standard SDK credential order). |
920
920
  | `TELEMETRY_S3_PREFIX` | `telemetry` | Key prefix for uploaded NDJSON objects (`<prefix>/<calls\|submissions>/<date>/...`). |
921
921
  | `TELEMETRY_S3_FLUSH_INTERVAL_MS` | `60000` | How often buffered lines are flushed to S3. |
922
922
  | `TELEMETRY_S3_MAX_BUFFER_LINES` | `500` | Threshold-flush trigger — flush early if either buffer exceeds this many lines, ahead of the next scheduled interval. |
@@ -1065,7 +1065,7 @@ Every response — success or error — uses the same envelope shape so clients
1065
1065
  | 2005 | `EMPTY_RESULTS` | Scrape succeeded but returned no data |
1066
1066
  | 2006 | `VERIFICATION_TRIGGER_FAILED` | OTP trigger to the target site failed |
1067
1067
  | 2007 | `RESUME_INVALID_OTP` | Provided OTP was rejected by the target site |
1068
- | 2008 | `URL_LOCKED` | Upstream vendor locked the target URL; back off and retry later |
1068
+ | 2008 | `URL_LOCKED` | Target site locked the target URL; back off and retry later |
1069
1069
 
1070
1070
  Full definitions: `src/api/schemas/common.ts`.
1071
1071
 
@@ -54,7 +54,7 @@ export declare class ThrottledRequestError extends ApiError {
54
54
  constructor(message?: string);
55
55
  }
56
56
  /**
57
- * The upstream site has locked the target URL (a plugin raises the underlying
57
+ * The target site has locked the target URL (a plugin raises the underlying
58
58
  * `HttpUrlLockedError`, e.g. from a `classifyResponseBody` sentinel).
59
59
  * Signals "back off and retry later" — not a browser-fallback trigger.
60
60
  */
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/api/errors.ts"],"names":[],"mappings":"AAGA,OAAO,EAAwC,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAE5F;;;;GAIG;AACH,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,gBAAgB;IACxB,MAAM,EAAE;QACN,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,eAAe,EAAE,CAAC;KAC5B,CAAC;CACH;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAgCzD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAQvD;AAED;;;;GAIG;AACH,qBAAa,QAAS,SAAQ,KAAK;IACjC,SAAgB,IAAI,EAAE,SAAS,CAAC;IAChC,SAAgB,UAAU,EAAE,MAAM,CAAC;IAEnC,YAAY,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,SAAU,EAKjE;CACF;AAED,qBAAa,iBAAkB,SAAQ,QAAQ;IAC7C,YAAY,OAAO,SAA4C,EAE9D;CACF;AAED,qBAAa,mBAAoB,SAAQ,QAAQ;IAC/C,YAAY,OAAO,EAAE,MAAM,EAE1B;CACF;AAED,qBAAa,qBAAsB,SAAQ,QAAQ;IACjD,YAAY,OAAO,SAAwB,EAE1C;CACF;AAED;;;;GAIG;AACH,qBAAa,cAAe,SAAQ,QAAQ;IAC1C,YAAY,OAAO,SAA2D,EAE7E;CACF;AAED,qBAAa,kBAAmB,SAAQ,QAAQ;IAC9C,YAAY,OAAO,SAA0C,EAE5D;CACF;AAED,qBAAa,uBAAwB,SAAQ,QAAQ;IACnD,YAAY,OAAO,SAA2C,EAE7D;CACF;AAED,qBAAa,oBAAqB,SAAQ,QAAQ;IAChD,YAAY,OAAO,SAA6C,EAE/D;CACF;AAED;;;;;GAKG;AACH,qBAAa,eAAgB,SAAQ,QAAQ;IAC3C,YAAY,OAAO,SAAiD,EAEnE;CACF;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,MAAM,EACf,UAAU,SAAU,GACnB,gBAAgB,CAgBlB"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/api/errors.ts"],"names":[],"mappings":"AAGA,OAAO,EAAwC,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAE5F;;;;GAIG;AACH,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,gBAAgB;IACxB,MAAM,EAAE;QACN,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,eAAe,EAAE,CAAC;KAC5B,CAAC;CACH;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAgCzD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAQvD;AAED;;;;GAIG;AACH,qBAAa,QAAS,SAAQ,KAAK;IACjC,SAAgB,IAAI,EAAE,SAAS,CAAC;IAChC,SAAgB,UAAU,EAAE,MAAM,CAAC;IAEnC,YAAY,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,SAAU,EAKjE;CACF;AAED,qBAAa,iBAAkB,SAAQ,QAAQ;IAC7C,YAAY,OAAO,SAA4C,EAE9D;CACF;AAED,qBAAa,mBAAoB,SAAQ,QAAQ;IAC/C,YAAY,OAAO,EAAE,MAAM,EAE1B;CACF;AAED,qBAAa,qBAAsB,SAAQ,QAAQ;IACjD,YAAY,OAAO,SAAwB,EAE1C;CACF;AAED;;;;GAIG;AACH,qBAAa,cAAe,SAAQ,QAAQ;IAC1C,YAAY,OAAO,SAAyD,EAE3E;CACF;AAED,qBAAa,kBAAmB,SAAQ,QAAQ;IAC9C,YAAY,OAAO,SAA0C,EAE5D;CACF;AAED,qBAAa,uBAAwB,SAAQ,QAAQ;IACnD,YAAY,OAAO,SAAqD,EAEvE;CACF;AAED,qBAAa,oBAAqB,SAAQ,QAAQ;IAChD,YAAY,OAAO,SAA6C,EAE/D;CACF;AAED;;;;;GAKG;AACH,qBAAa,eAAgB,SAAQ,QAAQ;IAC3C,YAAY,OAAO,SAAiD,EAEnE;CACF;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,MAAM,EACf,UAAU,SAAU,GACnB,gBAAgB,CAgBlB"}
@@ -100,12 +100,12 @@ class ThrottledRequestError extends ApiError {
100
100
  }
101
101
  exports.ThrottledRequestError = ThrottledRequestError;
102
102
  /**
103
- * The upstream site has locked the target URL (a plugin raises the underlying
103
+ * The target site has locked the target URL (a plugin raises the underlying
104
104
  * `HttpUrlLockedError`, e.g. from a `classifyResponseBody` sentinel).
105
105
  * Signals "back off and retry later" — not a browser-fallback trigger.
106
106
  */
107
107
  class UrlLockedError extends ApiError {
108
- constructor(message = "target URL is locked by the upstream site; retry later") {
108
+ constructor(message = "target URL is locked by the target site; retry later") {
109
109
  super(common_1.ERROR_CODES.URL_LOCKED, message);
110
110
  }
111
111
  }
@@ -117,7 +117,7 @@ class ScrapeFailureError extends ApiError {
117
117
  }
118
118
  exports.ScrapeFailureError = ScrapeFailureError;
119
119
  class CaptchaEncounteredError extends ApiError {
120
- constructor(message = "captcha challenge encountered upstream") {
120
+ constructor(message = "captcha challenge encountered on the target site") {
121
121
  super(common_1.ERROR_CODES.CAPTCHA_ENCOUNTERED, message);
122
122
  }
123
123
  }
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/api/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/api/errors.ts"],"names":[],"mappings":";;;;;;AAAA,uCAAqC;AACrC,yDAAiE;AAEjE,iDAA4F;AAsB5F;;;;;;;;GAQG;AACH,2BAAkC,IAAe;IAC/C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,oBAAW,CAAC,uBAAuB;YACtC,OAAO,+BAAW,CAAC,eAAe,CAAC;QACrC,KAAK,oBAAW,CAAC,mBAAmB;YAClC,OAAO,+BAAW,CAAC,YAAY,CAAC;QAClC,KAAK,oBAAW,CAAC,cAAc,CAAC;QAChC,KAAK,oBAAW,CAAC,eAAe,CAAC;QACjC,KAAK,oBAAW,CAAC,aAAa;YAC5B,OAAO,+BAAW,CAAC,WAAW,CAAC;QACjC,KAAK,oBAAW,CAAC,kBAAkB,CAAC;QACpC,KAAK,oBAAW,CAAC,eAAe;YAC9B,OAAO,+BAAW,CAAC,SAAS,CAAC;QAC/B,KAAK,oBAAW,CAAC,iBAAiB,CAAC;QACnC,KAAK,oBAAW,CAAC,UAAU;YACzB,OAAO,+BAAW,CAAC,iBAAiB,CAAC;QACvC,KAAK,oBAAW,CAAC,QAAQ;YACvB,OAAO,+BAAW,CAAC,eAAe,CAAC;QACrC,KAAK,oBAAW,CAAC,aAAa;YAC5B,OAAO,+BAAW,CAAC,SAAS,CAAC;QAC/B,KAAK,oBAAW,CAAC,iBAAiB,CAAC;QACnC,KAAK,oBAAW,CAAC,aAAa,CAAC;QAC/B,KAAK,oBAAW,CAAC,YAAY,CAAC;QAC9B,KAAK,oBAAW,CAAC,cAAc,CAAC;QAChC,KAAK,oBAAW,CAAC,mBAAmB,CAAC;QACrC,KAAK,oBAAW,CAAC,2BAA2B;YAC1C,OAAO,+BAAW,CAAC,qBAAqB,CAAC;QAC3C,KAAK,oBAAW,CAAC,kBAAkB;YACjC,OAAO,+BAAW,CAAC,WAAW,CAAC;QACjC;YACE,OAAO,+BAAW,CAAC,qBAAqB,CAAC;IAC7C,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,0BAAiC,MAAc;IAC7C,IAAI,CAAC;QACH,OAAO,IAAA,mCAAe,EAAC,MAAM,CAAC;aAC3B,WAAW,EAAE;aACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,MAAM,EAAE,CAAC;IAC1B,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,cAAsB,SAAQ,KAAK;IACjB,IAAI,CAAY;IAChB,UAAU,CAAS;IAEnC,YAAY,IAAe,EAAE,OAAe,EAAE,UAAU,GAAG,OAAO;QAChE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;CACF;;AAED,uBAA+B,SAAQ,QAAQ;IAC7C,YAAY,OAAO,GAAG,yCAAyC;QAC7D,KAAK,CAAC,oBAAW,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;IAClD,CAAC;CACF;;AAED,yBAAiC,SAAQ,QAAQ;IAC/C,YAAY,OAAe;QACzB,KAAK,CAAC,oBAAW,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;CACF;;AAED,2BAAmC,SAAQ,QAAQ;IACjD,YAAY,OAAO,GAAG,qBAAqB;QACzC,KAAK,CAAC,oBAAW,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;CACF;;AAED;;;;GAIG;AACH,oBAA4B,SAAQ,QAAQ;IAC1C,YAAY,OAAO,GAAG,sDAAsD;QAC1E,KAAK,CAAC,oBAAW,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;CACF;;AAED,wBAAgC,SAAQ,QAAQ;IAC9C,YAAY,OAAO,GAAG,uCAAuC;QAC3D,KAAK,CAAC,oBAAW,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;CACF;;AAED,6BAAqC,SAAQ,QAAQ;IACnD,YAAY,OAAO,GAAG,kDAAkD;QACtE,KAAK,CAAC,oBAAW,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;IAClD,CAAC;CACF;;AAED,0BAAkC,SAAQ,QAAQ;IAChD,YAAY,OAAO,GAAG,0CAA0C;QAC9D,KAAK,CAAC,oBAAW,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;CACF;;AAED;;;;;GAKG;AACH,qBAA6B,SAAQ,QAAQ;IAC3C,YAAY,OAAO,GAAG,8CAA8C;QAClE,KAAK,CAAC,oBAAW,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;CACF;;AAED;;;;GAIG;AACH,4BACE,IAAe,EACf,OAAe,EACf,UAAU,GAAG,OAAO;IAEpB,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC3C,OAAO;QACL,MAAM,EAAE;YACN,UAAU,EAAE,gBAAgB,CAAC,UAAU,CAAC;YACxC,QAAQ,EAAE,IAAA,oBAAS,EAAC,IAAI,IAAI,EAAE,CAAC;YAC/B,OAAO,EAAE;gBACP;oBACE,IAAI;oBACJ,eAAe,EAAE,gCAAuB,CAAC,IAAI,CAAC;oBAC9C,UAAU;oBACV,OAAO;iBACR;aACF;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -45,7 +45,7 @@ async function errorHandlerPlugin(app) {
45
45
  // exhausted selector retries, session timeouts) surface to clients as
46
46
  // the dedicated codes 2004 / 2003 rather than a generic 1008 — the
47
47
  // whole reason those codes exist is for clients to distinguish scrape
48
- // failures from upstream target-site failures.
48
+ // failures from target-site failures.
49
49
  if ((0, errors_2.isScraperError)(error)) {
50
50
  const code = (0, errors_2.isCaptchaError)(error)
51
51
  ? common_1.ERROR_CODES.CAPTCHA_ENCOUNTERED
@@ -1 +1 @@
1
- {"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../../src/api/plugins/error-handler.ts"],"names":[],"mappings":";;;;;AACA,oEAAgC;AAChC,yEAAgF;AAChF,+BAAkC;AAElC,yCAAwC;AACxC,+CAAqD;AACrD,iDAAmD;AACnD,6CAAkE;AAGlE;;;;;;GAMG;AACH,KAAK,UAAU,kBAAkB,CAAC,GAAoB;IACpD,GAAG,CAAC,kBAAkB,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;QACzC,IAAA,sBAAc,EACZ,KAAK,EACL,oBAAW,CAAC,kBAAkB,EAC9B,SAAS,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,GAAG,YAAY,CACrD,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,eAAe,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QAC5C,MAAM,OAAO,GAAI,KAAkD,CAAC,OAAO,CAAC;QAE5E,IAAI,IAAA,+DAAmC,EAAC,KAAK,CAAC,EAAE,CAAC;YAC/C,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU;iBAC7B,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,YAAY,IAAI,MAAM,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;iBACnE,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,IAAA,sBAAc,EAAC,KAAK,EAAE,oBAAW,CAAC,eAAe,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;YAC3F,OAAO;QACT,CAAC;QAED,IAAI,KAAK,YAAY,aAAQ,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM;iBACzB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;iBACrE,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,IAAA,sBAAc,EAAC,KAAK,EAAE,oBAAW,CAAC,eAAe,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;YAC3F,OAAO;QACT,CAAC;QAED,IAAI,KAAK,YAAY,iBAAQ,EAAE,CAAC;YAC9B,IAAA,sBAAc,EAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,UAAU,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;YACvF,OAAO;QACT,CAAC;QAED,qEAAqE;QACrE,sEAAsE;QACtE,mEAAmE;QACnE,sEAAsE;QACtE,+CAA+C;QAC/C,IAAI,IAAA,uBAAc,EAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,GAAG,IAAA,uBAAc,EAAC,KAAK,CAAC;gBAChC,CAAC,CAAC,oBAAW,CAAC,mBAAmB;gBACjC,CAAC,CAAC,oBAAW,CAAC,cAAc,CAAC;YAC/B,IAAA,sBAAc,EAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;YAC1E,OAAO;QACT,CAAC;QAED,MAAM,GAAG,GAAG,KAAkD,CAAC;QAC/D,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;YACjE,IAAA,sBAAc,EACZ,KAAK,EACL,oBAAW,CAAC,iBAAiB,EAC7B,GAAG,CAAC,OAAO,IAAI,qBAAqB,EACpC,SAAS,EACT,SAAS,EACT,OAAO,CACR,CAAC;YACF,OAAO;QACT,CAAC;QAED,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,IAAI,GAAG,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC;YAC/D,IAAA,sBAAc,EACZ,KAAK,EACL,oBAAW,CAAC,aAAa,EACzB,GAAG,CAAC,OAAO,IAAI,gBAAgB,EAC/B,SAAS,EACT,GAAG,CAAC,UAAU,EACd,OAAO,CACR,CAAC;YACF,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,iBAAiB,CAAC,CAAC;QAC9C,IAAA,sBAAc,EACZ,KAAK,EACL,oBAAW,CAAC,aAAa,EACzB,uBAAuB,EACvB,SAAS,EACT,SAAS,EACT,OAAO,CACR,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;kBAEc,IAAA,wBAAE,EAAC,kBAAkB,EAAE;IACpC,IAAI,EAAE,eAAe;CACtB,CAAC"}
1
+ {"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../../src/api/plugins/error-handler.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import type { FastifyInstance } from "fastify";
2
2
  /**
3
3
  * Injectable options for `submissionsRoutes`. The sink path is passed in at
4
- * registration time (mirrors `pluginsIntrospectionRoutes`'s `report`
4
+ * registration time (parallels `pluginsIntrospectionRoutes`'s `report`
5
5
  * injection) so the route can be tested against a temp NDJSON file instead
6
6
  * of the real `.barnacle/submissions.ndjson`.
7
7
  */
@@ -35,7 +35,7 @@ declare const judgeAggregateSchema: z.ZodObject<{
35
35
  }, z.core.$strip>;
36
36
  export type JudgeAggregate = z.infer<typeof judgeAggregateSchema>;
37
37
  /**
38
- * Top-level verdict file produced by the judge skill for one batch. Mirrors
38
+ * Top-level verdict file produced by the judge skill for one batch. Parallels
39
39
  * beacon/pila's verdict-JSON shape but in Barnacle's camelCase convention.
40
40
  */
41
41
  export declare const judgeVerdictSchema: z.ZodObject<{
@@ -38,7 +38,7 @@ const judgeAggregateSchema = v4_1.z.object({
38
38
  overallPass: v4_1.z.number().int(),
39
39
  });
40
40
  /**
41
- * Top-level verdict file produced by the judge skill for one batch. Mirrors
41
+ * Top-level verdict file produced by the judge skill for one batch. Parallels
42
42
  * beacon/pila's verdict-JSON shape but in Barnacle's camelCase convention.
43
43
  */
44
44
  exports.judgeVerdictSchema = v4_1.z.object({
@@ -24,7 +24,7 @@ export declare function cacheStats(): {
24
24
  };
25
25
  /**
26
26
  * Runs `producer` once per key even when multiple callers race on a
27
- * cache miss. The first caller kicks off the upstream call and all
27
+ * cache miss. The first caller kicks off the origin call and all
28
28
  * concurrent callers await the same promise. On resolve, the value is
29
29
  * written to the LRU cache so subsequent (non-racing) reads hit
30
30
  * normally.
@@ -21,7 +21,7 @@ const cache = new lru_cache_1.LRUCache({
21
21
  ttl: config_1.config.cache.ttlMs,
22
22
  });
23
23
  /**
24
- * Tracks upstream calls that are currently resolving for a given key so
24
+ * Tracks origin calls that are currently resolving for a given key so
25
25
  * concurrent cache misses don't all fan out to the scraper. First miss
26
26
  * kicks off the work; subsequent misses await the same promise. Each
27
27
  * entry is removed after the promise settles (resolve or reject).
@@ -83,7 +83,7 @@ function cacheStats() {
83
83
  }
84
84
  /**
85
85
  * Runs `producer` once per key even when multiple callers race on a
86
- * cache miss. The first caller kicks off the upstream call and all
86
+ * cache miss. The first caller kicks off the origin call and all
87
87
  * concurrent callers await the same promise. On resolve, the value is
88
88
  * written to the LRU cache so subsequent (non-racing) reads hit
89
89
  * normally.
package/dist/config.d.ts CHANGED
@@ -229,7 +229,7 @@ export interface AppConfig {
229
229
  */
230
230
  maxRetentionMs: number;
231
231
  /**
232
- * Opt-in buffered S3 sink that mirrors local NDJSON telemetry so it
232
+ * Opt-in buffered S3 sink that replicates local NDJSON telemetry so it
233
233
  * survives ECS container restarts. Entirely inert when `bucket` is
234
234
  * undefined — the sink checks this before buffering or flushing.
235
235
  */
@@ -294,7 +294,7 @@ export interface AppConfig {
294
294
  selfheal: {
295
295
  /**
296
296
  * Maximum patch→replay→score iterations before giving up with
297
- * BUDGET_EXHAUSTED. Mirrors the recon-heal default of 5.
297
+ * BUDGET_EXHAUSTED. Matches the recon-heal default of 5.
298
298
  */
299
299
  maxIterations: number;
300
300
  /**
@@ -304,12 +304,12 @@ export interface AppConfig {
304
304
  nReplays: number;
305
305
  /**
306
306
  * Minimum pass rate (0..1) to declare SUCCESS and stop iterating.
307
- * Mirrors the pila llm-self-heal SKILL default of 0.9.
307
+ * Matches the pila llm-self-heal SKILL default of 0.9.
308
308
  */
309
309
  successThreshold: number;
310
310
  /**
311
311
  * Consecutive iterations whose pass-rate improvement is below
312
- * `plateauDelta` that triggers a PLATEAUED verdict. Mirrors recon-heal.
312
+ * `plateauDelta` that triggers a PLATEAUED verdict. Matches recon-heal.
313
313
  */
314
314
  plateauWindow: number;
315
315
  /**
@@ -21,7 +21,7 @@ import type Anthropic from "@anthropic-ai/sdk";
21
21
  import type { z } from "zod/v4";
22
22
  import { type JudgeCaptureFn } from "../../../lib/llm/judge";
23
23
  import { INVALID_FIELDS_SCHEMA } from "../../../lib/llm/schemas";
24
- declare const INVALID_FIELDS_SYSTEM_PROMPT = "You are a strict invalid-field detector for browser forms. Given a body-HTML excerpt and (optionally) site-specific class-name prefixes, identify form fields that are structurally in an invalid/error state.\n\nStrict criteria for present=true (mark a field):\n- The container has a class containing \"invalid\" (e.g. ng-invalid, mat-form-field-invalid, is-invalid, field-invalid, app-input-invalid, etc.), OR\n- The element has aria-invalid=\"true\", OR\n- The element has data-invalid (truthy), OR\n- The container is structurally adjacent to an error-message container (class containing \"error\", \"validation\", \"feedback\", \"required\", \"help-block-error\", etc.), OR\n- The element is structurally adjacent to a visible error-text span/div that explains why it's invalid.\n\nDo NOT mark a field when:\n- Only visual styling indicates error (red border via CSS, no semantic marker).\n- The container is in a pristine/untouched state (e.g. ng-pristine ng-untouched alongside ng-invalid means the user hasn't interacted yet \u2014 that's a \"may become invalid\" state, not currently invalid).\n- The element is a hidden input or non-interactive ancestor.\n- The container is invalid ONLY because a descendant is invalid (parent-bubbled invalidity). Angular bubbles ng-invalid up to wrapping forms / lists / question containers; Bootstrap mirrors this on form-group; React Hook Form propagates aria-invalid through fieldsets. When you see <ol class=\"ng-invalid\"> with <li class=\"ng-valid\"> children where ONE deeper descendant is actually invalid, report ONLY the deepest leaf that carries the failure. The leaf is the smallest container with the invalid marker AND no further invalid descendants. Reporting bubbled parents alongside the real leaf creates false positives (the parent's children look like they're invalid when they are not).\n\nWhen the supplied knownErrorClassPrefixes list is non-empty, also treat class names starting with any of those prefixes followed by \"-invalid\" or \"-error\" as structural markers (site-specific convention).\n\nReturn up to 50 fields. Top-level present=true means at least one field is currently invalid. present=false means no structural invalid markers found anywhere in the excerpt.\n\nEach field entry:\n- containerXpath: a best-effort xpath identifying the container (tag + nth-of-type)\n- label: the visible label text near the field, or null if not discoverable\n- markerKind: which marker type triggered (\"class\", \"aria\", \"data\", \"error-container\", \"other\")\n- framework: which UI library this looks like (\"angular\", \"react\", \"vue\", \"mantine\", \"chakra\", \"bootstrap\", \"other\"). Look at framework-conventional class signatures to decide.";
24
+ declare const INVALID_FIELDS_SYSTEM_PROMPT = "You are a strict invalid-field detector for browser forms. Given a body-HTML excerpt and (optionally) site-specific class-name prefixes, identify form fields that are structurally in an invalid/error state.\n\nStrict criteria for present=true (mark a field):\n- The container has a class containing \"invalid\" (e.g. ng-invalid, mat-form-field-invalid, is-invalid, field-invalid, app-input-invalid, etc.), OR\n- The element has aria-invalid=\"true\", OR\n- The element has data-invalid (truthy), OR\n- The container is structurally adjacent to an error-message container (class containing \"error\", \"validation\", \"feedback\", \"required\", \"help-block-error\", etc.), OR\n- The element is structurally adjacent to a visible error-text span/div that explains why it's invalid.\n\nDo NOT mark a field when:\n- Only visual styling indicates error (red border via CSS, no semantic marker).\n- The container is in a pristine/untouched state (e.g. ng-pristine ng-untouched alongside ng-invalid means the user hasn't interacted yet \u2014 that's a \"may become invalid\" state, not currently invalid).\n- The element is a hidden input or non-interactive ancestor.\n- The container is invalid ONLY because a descendant is invalid (parent-bubbled invalidity). Angular bubbles ng-invalid up to wrapping forms / lists / question containers; Bootstrap parallels this on form-group; React Hook Form propagates aria-invalid through fieldsets. When you see <ol class=\"ng-invalid\"> with <li class=\"ng-valid\"> children where ONE deeper descendant is actually invalid, report ONLY the deepest leaf that carries the failure. The leaf is the smallest container with the invalid marker AND no further invalid descendants. Reporting bubbled parents alongside the real leaf creates false positives (the parent's children look like they're invalid when they are not).\n\nWhen the supplied knownErrorClassPrefixes list is non-empty, also treat class names starting with any of those prefixes followed by \"-invalid\" or \"-error\" as structural markers (site-specific convention).\n\nReturn up to 50 fields. Top-level present=true means at least one field is currently invalid. present=false means no structural invalid markers found anywhere in the excerpt.\n\nEach field entry:\n- containerXpath: a best-effort xpath identifying the container (tag + nth-of-type)\n- label: the visible label text near the field, or null if not discoverable\n- markerKind: which marker type triggered (\"class\", \"aria\", \"data\", \"error-container\", \"other\")\n- framework: which UI library this looks like (\"angular\", \"react\", \"vue\", \"mantine\", \"chakra\", \"bootstrap\", \"other\"). Look at framework-conventional class signatures to decide.";
25
25
  export interface JudgeInvalidFieldsInput {
26
26
  /** Body HTML excerpt to scan (typically the page DOM, truncated to ~8KB). */
27
27
  bodyHtmlExcerpt: string;
@@ -1 +1 @@
1
- {"version":3,"file":"invalid-fields.d.ts","sourceRoot":"","sources":["../../../../src/lib/llm/judges/invalid-fields.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAkB,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAG1D,QAAA,MAAM,4BAA4B,uqFAuB+I,CAAC;AAElL,MAAM,WAAW,uBAAuB;IACtC,6EAA6E;IAC7E,eAAe,EAAE,MAAM,CAAC;IACxB,gGAAgG;IAChG,uBAAuB,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5C;AAWD;;;;;GAKG;AACH,wBAAsB,yBAAyB,CAAC,MAAM,EAAE;IACtD,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,uBAAuB,CAAC;IAC/B,SAAS,CAAC,EAAE,cAAc,CAAC;CAC5B,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,GAAG,IAAI,CAAC,CAYxD;AAED,OAAO,EAAE,4BAA4B,EAAE,CAAC"}
1
+ {"version":3,"file":"invalid-fields.d.ts","sourceRoot":"","sources":["../../../../src/lib/llm/judges/invalid-fields.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAkB,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAG1D,QAAA,MAAM,4BAA4B,yqFAuB+I,CAAC;AAElL,MAAM,WAAW,uBAAuB;IACtC,6EAA6E;IAC7E,eAAe,EAAE,MAAM,CAAC;IACxB,gGAAgG;IAChG,uBAAuB,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5C;AAWD;;;;;GAKG;AACH,wBAAsB,yBAAyB,CAAC,MAAM,EAAE;IACtD,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,uBAAuB,CAAC;IAC/B,SAAS,CAAC,EAAE,cAAc,CAAC;CAC5B,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,GAAG,IAAI,CAAC,CAYxD;AAED,OAAO,EAAE,4BAA4B,EAAE,CAAC"}
@@ -37,7 +37,7 @@ Do NOT mark a field when:
37
37
  - Only visual styling indicates error (red border via CSS, no semantic marker).
38
38
  - The container is in a pristine/untouched state (e.g. ng-pristine ng-untouched alongside ng-invalid means the user hasn't interacted yet — that's a "may become invalid" state, not currently invalid).
39
39
  - The element is a hidden input or non-interactive ancestor.
40
- - The container is invalid ONLY because a descendant is invalid (parent-bubbled invalidity). Angular bubbles ng-invalid up to wrapping forms / lists / question containers; Bootstrap mirrors this on form-group; React Hook Form propagates aria-invalid through fieldsets. When you see <ol class="ng-invalid"> with <li class="ng-valid"> children where ONE deeper descendant is actually invalid, report ONLY the deepest leaf that carries the failure. The leaf is the smallest container with the invalid marker AND no further invalid descendants. Reporting bubbled parents alongside the real leaf creates false positives (the parent's children look like they're invalid when they are not).
40
+ - The container is invalid ONLY because a descendant is invalid (parent-bubbled invalidity). Angular bubbles ng-invalid up to wrapping forms / lists / question containers; Bootstrap parallels this on form-group; React Hook Form propagates aria-invalid through fieldsets. When you see <ol class="ng-invalid"> with <li class="ng-valid"> children where ONE deeper descendant is actually invalid, report ONLY the deepest leaf that carries the failure. The leaf is the smallest container with the invalid marker AND no further invalid descendants. Reporting bubbled parents alongside the real leaf creates false positives (the parent's children look like they're invalid when they are not).
41
41
 
42
42
  When the supplied knownErrorClassPrefixes list is non-empty, also treat class names starting with any of those prefixes followed by "-invalid" or "-error" as structural markers (site-specific convention).
43
43
 
@@ -41,7 +41,7 @@ When verified=true, populate the three signal fields with what you found (any ca
41
41
  When verified=false, write a one-sentence reason citing what you'd need to see to be convinced.`;
42
42
  exports.SUBMIT_VERIFY_SYSTEM_PROMPT = SUBMIT_VERIFY_SYSTEM_PROMPT;
43
43
  /**
44
- * Render the evidence into a user prompt for Haiku. The structure mirrors
44
+ * Render the evidence into a user prompt for Haiku. The structure parallels
45
45
  * the empirical-replay prototype that proved this works on production cases.
46
46
  */
47
47
  function buildVerifySubmitPrompt(input) {
@@ -21,7 +21,7 @@ export declare function extendLogger(logger: pino.Logger): Logger;
21
21
  /**
22
22
  * Returns a pino logger for one-shot CLI scripts. Uses pino-pretty in
23
23
  * development (where the devDependency is installed) and falls back to raw
24
- * JSON elsewhere, mirroring `getLogger`'s gating — `pino-pretty` is pruned
24
+ * JSON elsewhere, paralleling `getLogger`'s gating — `pino-pretty` is pruned
25
25
  * from production images, so an unconditional transport crashes on module
26
26
  * load in prod (see the pino-pretty prod-crash incident).
27
27
  */
@@ -166,7 +166,7 @@ function extendLogger(logger) {
166
166
  /**
167
167
  * Returns a pino logger for one-shot CLI scripts. Uses pino-pretty in
168
168
  * development (where the devDependency is installed) and falls back to raw
169
- * JSON elsewhere, mirroring `getLogger`'s gating — `pino-pretty` is pruned
169
+ * JSON elsewhere, paralleling `getLogger`'s gating — `pino-pretty` is pruned
170
170
  * from production images, so an unconditional transport crashes on module
171
171
  * load in prod (see the pino-pretty prod-crash incident).
172
172
  */
@@ -9,7 +9,7 @@
9
9
  * `requestId` (see `reconciliation-record.ts`, `submission-reader.ts`).
10
10
  *
11
11
  * Writes to the SAME sink as submit lines (`appendSubmissionSinkLine`,
12
- * feat-003), which is what lets the S3 mirror carry beacon lines for free
12
+ * feat-003), which is what lets the S3 replica carry beacon lines for free
13
13
  * with zero `s3-sink.ts` changes.
14
14
  *
15
15
  * `createBeaconOutcomeRecorder` builds on top of `captureBeaconEvent` to
@@ -10,7 +10,7 @@
10
10
  * `requestId` (see `reconciliation-record.ts`, `submission-reader.ts`).
11
11
  *
12
12
  * Writes to the SAME sink as submit lines (`appendSubmissionSinkLine`,
13
- * feat-003), which is what lets the S3 mirror carry beacon lines for free
13
+ * feat-003), which is what lets the S3 replica carry beacon lines for free
14
14
  * with zero `s3-sink.ts` changes.
15
15
  *
16
16
  * `createBeaconOutcomeRecorder` builds on top of `captureBeaconEvent` to
@@ -6,7 +6,7 @@
6
6
  import { z } from "zod/v4";
7
7
  /**
8
8
  * Categorical failure reason for an LLM call. Surfaces post-mortem without
9
- * regex-scanning `errorMessage`. Discriminated upstream by the caller.
9
+ * regex-scanning `errorMessage`. Discriminated earlier by the caller.
10
10
  */
11
11
  export declare const llmCallFailureKindSchema: z.ZodEnum<{
12
12
  "anthropic-billing": "anthropic-billing";
@@ -18,7 +18,7 @@ const s3_sink_1 = require("../../lib/telemetry/s3-sink");
18
18
  const logger = (0, logging_1.getLogger)({ name: "telemetry/call-capture" });
19
19
  /**
20
20
  * Categorical failure reason for an LLM call. Surfaces post-mortem without
21
- * regex-scanning `errorMessage`. Discriminated upstream by the caller.
21
+ * regex-scanning `errorMessage`. Discriminated earlier by the caller.
22
22
  */
23
23
  exports.llmCallFailureKindSchema = v4_1.z.enum([
24
24
  "anthropic-billing",
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Durable read path for reconciliation rows: unions the container-local
3
- * submissions sink with the S3-mirrored objects (feat-003's
3
+ * submissions sink with the S3-replicated objects (feat-003's
4
4
  * `listSubmissionsS3Objects` + `fetchSubmissionsS3Records`) before folding,
5
5
  * so a submit line written by one ECS task and its beacon line written by
6
6
  * another both land in the same row instead of two ephemeral, incomplete
@@ -9,11 +9,11 @@
9
9
  * beacon detail a cross-store fold still needs (see
10
10
  * `submission-reader.ts`'s `foldReconciliationRecords`).
11
11
  *
12
- * The local sink and its S3 mirror both receive the exact same line for
12
+ * The local sink and its S3 replica both receive the exact same line for
13
13
  * every event (`appendSubmissionSinkLine` writes to disk and buffers to S3
14
14
  * in the same call), so an overlap between the two stores is an exact JSON
15
15
  * duplicate, never a conflicting value — deduping on `kind:requestId:ts` is
16
- * lossless for that mirror case. But `ts` is formatISO second-precision, so
16
+ * lossless for that replica case. But `ts` is formatISO second-precision, so
17
17
  * two *distinct* beacon lines for the same `requestId` (e.g. dispatch's
18
18
  * automatic `skipped` line and a plugin's later self-recorded `fired` line)
19
19
  * can land in the same wall-clock second — the dedupe key for beacon
@@ -30,7 +30,7 @@ export interface ReadDurableReconciliationRowsOptions extends ListSubmissionsS3O
30
30
  }
31
31
  /**
32
32
  * Reads and folds the complete cross-container reconciliation history: the
33
- * local sink plus its S3 mirror, unioned and deduped before folding, so
33
+ * local sink plus its S3 replica, unioned and deduped before folding, so
34
34
  * `GET /v1/submissions` answers from durable storage instead of one ECS
35
35
  * task's ephemeral file. Falls back to local-only rows when no bucket is
36
36
  * configured or the S3 read fails.
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  /**
3
3
  * Durable read path for reconciliation rows: unions the container-local
4
- * submissions sink with the S3-mirrored objects (feat-003's
4
+ * submissions sink with the S3-replicated objects (feat-003's
5
5
  * `listSubmissionsS3Objects` + `fetchSubmissionsS3Records`) before folding,
6
6
  * so a submit line written by one ECS task and its beacon line written by
7
7
  * another both land in the same row instead of two ephemeral, incomplete
@@ -10,11 +10,11 @@
10
10
  * beacon detail a cross-store fold still needs (see
11
11
  * `submission-reader.ts`'s `foldReconciliationRecords`).
12
12
  *
13
- * The local sink and its S3 mirror both receive the exact same line for
13
+ * The local sink and its S3 replica both receive the exact same line for
14
14
  * every event (`appendSubmissionSinkLine` writes to disk and buffers to S3
15
15
  * in the same call), so an overlap between the two stores is an exact JSON
16
16
  * duplicate, never a conflicting value — deduping on `kind:requestId:ts` is
17
- * lossless for that mirror case. But `ts` is formatISO second-precision, so
17
+ * lossless for that replica case. But `ts` is formatISO second-precision, so
18
18
  * two *distinct* beacon lines for the same `requestId` (e.g. dispatch's
19
19
  * automatic `skipped` line and a plugin's later self-recorded `fired` line)
20
20
  * can land in the same wall-clock second — the dedupe key for beacon
@@ -46,7 +46,7 @@ async function readLocalRecords(sinkPath) {
46
46
  return (0, submission_reader_1.parseReconciliationLines)(content);
47
47
  }
48
48
  /**
49
- * Lists and fetches the S3-mirrored records for the window. A rejection
49
+ * Lists and fetches the S3-replicated records for the window. A rejection
50
50
  * anywhere in the S3 path (listing or fetch) is logged and swallowed rather
51
51
  * than propagated, so an S3 outage degrades the answer to local-only instead
52
52
  * of failing the whole read.
@@ -91,7 +91,7 @@ function mergeRecords(localRecords, s3Records) {
91
91
  }
92
92
  /**
93
93
  * Reads and folds the complete cross-container reconciliation history: the
94
- * local sink plus its S3 mirror, unioned and deduped before folding, so
94
+ * local sink plus its S3 replica, unioned and deduped before folding, so
95
95
  * `GET /v1/submissions` answers from durable storage instead of one ECS
96
96
  * task's ephemeral file. Falls back to local-only rows when no bucket is
97
97
  * configured or the S3 read fails.
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Run-scoped, mutable telemetry accumulator that a plugin can write
3
3
  * discovered fields into at any point during execute()/executeHttp() —
4
- * mirrors `MetricsCollector` (src/lib/dispatch-metrics.ts) as a per-request
4
+ * parallels `MetricsCollector` (src/lib/dispatch-metrics.ts) as a per-request
5
5
  * instance meant to be threaded through the plugin context, but for
6
6
  * run-discovered data (join keys, session info) rather than step timings.
7
7
  * Funnels everything a plugin discovers mid-run into the same opaque
@@ -2,7 +2,7 @@
2
2
  /**
3
3
  * Run-scoped, mutable telemetry accumulator that a plugin can write
4
4
  * discovered fields into at any point during execute()/executeHttp() —
5
- * mirrors `MetricsCollector` (src/lib/dispatch-metrics.ts) as a per-request
5
+ * parallels `MetricsCollector` (src/lib/dispatch-metrics.ts) as a per-request
6
6
  * instance meant to be threaded through the plugin context, but for
7
7
  * run-discovered data (join keys, session info) rather than step timings.
8
8
  * Funnels everything a plugin discovers mid-run into the same opaque
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Buffered S3 sink that mirrors local NDJSON telemetry so it survives ECS
2
+ * Buffered S3 sink that replicates local NDJSON telemetry so it survives ECS
3
3
  * container restarts. Opt-in: entirely inert (no S3Client construction, no
4
4
  * network calls) when `config.telemetry.s3.bucket` is unset. Buffers lines
5
5
  * in module-level arrays and flushes each non-empty buffer to a single S3
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  /**
3
- * Buffered S3 sink that mirrors local NDJSON telemetry so it survives ECS
3
+ * Buffered S3 sink that replicates local NDJSON telemetry so it survives ECS
4
4
  * container restarts. Opt-in: entirely inert (no S3Client construction, no
5
5
  * network calls) when `config.telemetry.s3.bucket` is unset. Buffers lines
6
6
  * in module-level arrays and flushes each non-empty buffer to a single S3
@@ -4,7 +4,7 @@
4
4
  * requested `from`/`to` window, so the fetch stage (feat-003) never has to
5
5
  * scan the whole telemetry bucket. Entirely inert (no `S3Client`
6
6
  * construction, no network calls) when `config.telemetry.s3.bucket` is
7
- * unset — mirrors `s3-sink.ts`'s inertness contract.
7
+ * unset — parallels `s3-sink.ts`'s inertness contract.
8
8
  */
9
9
  /** Filter window for `listSubmissionsS3Objects`. Both bounds are ISO datetime strings. */
10
10
  export interface ListSubmissionsS3ObjectsOptions {
@@ -5,7 +5,7 @@
5
5
  * requested `from`/`to` window, so the fetch stage (feat-003) never has to
6
6
  * scan the whole telemetry bucket. Entirely inert (no `S3Client`
7
7
  * construction, no network calls) when `config.telemetry.s3.bucket` is
8
- * unset — mirrors `s3-sink.ts`'s inertness contract.
8
+ * unset — parallels `s3-sink.ts`'s inertness contract.
9
9
  */
10
10
  Object.defineProperty(exports, "__esModule", { value: true });
11
11
  exports.listSubmissionsS3Objects = listSubmissionsS3Objects;
@@ -7,7 +7,7 @@
7
7
  * containers are ephemeral and per-task) becomes readable. Folding beacon
8
8
  * lines onto submit records and merging with the local sink live elsewhere.
9
9
  *
10
- * Mirrors `s3-sink.ts`'s inertness contract: no `S3Client` construction, no
10
+ * Parallels `s3-sink.ts`'s inertness contract: no `S3Client` construction, no
11
11
  * network calls, when `config.telemetry.s3.bucket` is unset.
12
12
  */
13
13
  import type { ReconciliationRecord } from "../../lib/telemetry/reconciliation-record";
@@ -8,7 +8,7 @@
8
8
  * containers are ephemeral and per-task) becomes readable. Folding beacon
9
9
  * lines onto submit records and merging with the local sink live elsewhere.
10
10
  *
11
- * Mirrors `s3-sink.ts`'s inertness contract: no `S3Client` construction, no
11
+ * Parallels `s3-sink.ts`'s inertness contract: no `S3Client` construction, no
12
12
  * network calls, when `config.telemetry.s3.bucket` is unset.
13
13
  */
14
14
  var __importDefault = (this && this.__importDefault) || function (mod) {
@@ -135,7 +135,7 @@ function buildRephraseModelForContext(appConfig) {
135
135
  return provider.languageModel(modelId);
136
136
  }
137
137
  /**
138
- * Builds the upload fixture the browser flow uploads, mirroring the rule the
138
+ * Builds the upload fixture the browser flow uploads, matching the rule the
139
139
  * generator's `emitBrowserFlowTs` applies: only when a step uploads AND the
140
140
  * manifest declares itself multipart do the `Resume*` payload fields exist.
141
141
  */
@@ -154,7 +154,7 @@ function buildUploadFixture(payload, hasUploadStep, multipart) {
154
154
  * for an import it does not use, and a broken `httpModule` disables the plugin
155
155
  * via the loader's normal failure path rather than crashing the factory.
156
156
  *
157
- * Resolution mirrors the loader's `resolvePluginSpecifier`: a `.`/`/` specifier
157
+ * Resolution parallels the loader's `resolvePluginSpecifier`: a `.`/`/` specifier
158
158
  * is a filesystem path resolved against `baseDir` (so a relative `httpModule`
159
159
  * resolves against the operator's `BARNACLE_PLUGINS_DIR`, not this module's
160
160
  * location under `dist/`); anything else is a bare package name left for Node's
@@ -13,7 +13,7 @@ export declare const FORM_SCHEMA_NONE = "none";
13
13
  *
14
14
  * Resolution reuses {@link resolvePluginSpecifier}, so `--form-schema` accepts the
15
15
  * same specifier forms as `BARNACLE_PLUGINS` and `--vocabulary`. Export resolution
16
- * mirrors the plugin loader's `m.formSchema ?? m.default ?? m`. The
16
+ * matches the plugin loader's `m.formSchema ?? m.default ?? m`. The
17
17
  * {@link FORM_SCHEMA_NONE} sentinel returns `null` (not an empty struct — see the
18
18
  * form-schema module for why), the shape for "this site has no ATS form data."
19
19
  *
@@ -43,7 +43,7 @@ const formSchemaSchema = v4_1.z.object({
43
43
  *
44
44
  * Resolution reuses {@link resolvePluginSpecifier}, so `--form-schema` accepts the
45
45
  * same specifier forms as `BARNACLE_PLUGINS` and `--vocabulary`. Export resolution
46
- * mirrors the plugin loader's `m.formSchema ?? m.default ?? m`. The
46
+ * matches the plugin loader's `m.formSchema ?? m.default ?? m`. The
47
47
  * {@link FORM_SCHEMA_NONE} sentinel returns `null` (not an empty struct — see the
48
48
  * form-schema module for why), the shape for "this site has no ATS form data."
49
49
  *
@@ -13,7 +13,7 @@ export declare const VOCABULARY_NONE = "none";
13
13
  *
14
14
  * Resolution reuses {@link resolvePluginSpecifier}, so `--vocabulary` accepts the
15
15
  * same specifier forms as `BARNACLE_PLUGINS` (relative path or package name) and
16
- * consumers learn one rule instead of two. Export resolution mirrors the plugin
16
+ * consumers learn one rule instead of two. Export resolution matches the plugin
17
17
  * loader's `m.vocabulary ?? m.default ?? m`, since a named-only export failing
18
18
  * silently is a known foot-gun in this codebase.
19
19
  *
@@ -27,7 +27,7 @@ exports.VOCABULARY_NONE = "none";
27
27
  const regexSchema = v4_1.z.custom((v) => v instanceof RegExp && !v.global && !v.sticky, {
28
28
  message: "expected a RegExp literal without the g or y flag (they make .test() stateful)",
29
29
  });
30
- /** Mirrors the emitter's identifier rule: a field name is spliced into source as
30
+ /** Matches the emitter's identifier rule: a field name is spliced into source as
31
31
  * `payload.<name>` / `{{ .request.<name> }}`, so anything else emits a broken
32
32
  * plugin that still generates and still typechecks. */
33
33
  const payloadFieldNameSchema = v4_1.z
@@ -48,7 +48,7 @@ const vocabularySchema = v4_1.z.object({
48
48
  *
49
49
  * Resolution reuses {@link resolvePluginSpecifier}, so `--vocabulary` accepts the
50
50
  * same specifier forms as `BARNACLE_PLUGINS` (relative path or package name) and
51
- * consumers learn one rule instead of two. Export resolution mirrors the plugin
51
+ * consumers learn one rule instead of two. Export resolution matches the plugin
52
52
  * loader's `m.vocabulary ?? m.default ?? m`, since a named-only export failing
53
53
  * silently is a known foot-gun in this codebase.
54
54
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Fill/select actuation seam over `deepLocator`, mirroring
2
+ * Fill/select actuation seam over `deepLocator`, paralleling
3
3
  * `clickDeepLocatorCandidate`'s contract (`deep-locator-candidates.ts`) for
4
4
  * the two other primitives a cross-origin OOPIF form's text/select steps
5
5
  * need. Stagehand `act`/`observe` are measured blind inside that OOPIF, and
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  /**
3
- * Fill/select actuation seam over `deepLocator`, mirroring
3
+ * Fill/select actuation seam over `deepLocator`, paralleling
4
4
  * `clickDeepLocatorCandidate`'s contract (`deep-locator-candidates.ts`) for
5
5
  * the two other primitives a cross-origin OOPIF form's text/select steps
6
6
  * need. Stagehand `act`/`observe` are measured blind inside that OOPIF, and
@@ -80,7 +80,7 @@ async function writeAndVerify(write, readBack, expected) {
80
80
  * throws) when `frameSelector` is unset, the probe rejects (e.g. a fake
81
81
  * `Page` in a legacy-path test lacking `evaluate`/`frames`), or nothing
82
82
  * attaches within the probe's budget — each of those means "no frame seam
83
- * available", and the caller degrades to the legacy delegate path. Mirrors
83
+ * available", and the caller degrades to the legacy delegate path. Parallels
84
84
  * `deep-locator-candidates.ts`'s `resolveScanFrameTarget` exactly; duplicated
85
85
  * (not imported) so this module stays a leaf that never depends on
86
86
  * `deep-locator-candidates.ts`.
@@ -142,7 +142,7 @@ async function confirmBatchedWriteStuck(frameTarget, expression, expected) {
142
142
  * available, the evaluate call rejects, or the resolved payload doesn't
143
143
  * conform to {@link FrameCandidateWriteResult} — every one of those degrades
144
144
  * the caller to the legacy delegate path instead of losing the write,
145
- * mirroring `clickCandidateBatched`'s degrade contract
145
+ * paralleling `clickCandidateBatched`'s degrade contract
146
146
  * (`deep-locator-candidates.ts`).
147
147
  */
148
148
  async function actuateCandidateBatched(page, frameSelector, hopSelector, index, timeoutOptions, expression, actionLabel) {