clearotron 0.3.2-beta.14 → 0.3.2-beta.15

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 (38) hide show
  1. package/build-info.json +2 -2
  2. package/driver/CHANGELOG.md +14 -0
  3. package/driver/contract-vocabulary.mjs +5 -5
  4. package/driver/named-band.mjs +1 -1
  5. package/driver/package.json +1 -1
  6. package/driver/pipeline-knockout.mjs +3 -1
  7. package/driver/pipeline.mjs +30 -7
  8. package/driver/publish/index.mjs +10 -1
  9. package/driver/publish/render.mjs +54 -2
  10. package/driver/publish/templates/report.css +16 -1
  11. package/driver/register-availability.mjs +2 -2
  12. package/driver/register-plan.mjs +229 -55
  13. package/driver/skills/clearance-register/unit.md +1 -1
  14. package/driver/skills/clearance-variants/SKILL.md +10 -4
  15. package/driver/stages.mjs +1 -1
  16. package/driver/suite-census.json +32 -2
  17. package/driver/variant-manifest-model.mjs +39 -1
  18. package/mcp-server/CHANGELOG.md +4 -0
  19. package/mcp-server/lib/audit-view.mjs +5 -3
  20. package/mcp-server/lib/brief.mjs +10 -4
  21. package/mcp-server/lib/runs.mjs +35 -1
  22. package/mcp-server/package.json +1 -1
  23. package/mcp-server/server.mjs +6 -3
  24. package/package.json +1 -1
  25. package/portal-ui/dist/assets/{index-7Lq-dXDV.css → index-5CCwiJG7.css} +10 -0
  26. package/portal-ui/dist/assets/{index-w8GFZftk.js → index-DMthc7PQ.js} +8 -1
  27. package/portal-ui/dist/index.html +2 -2
  28. package/portal-ui/package.json +1 -1
  29. package/providers/_shared/execute-plan.mjs +11 -1
  30. package/providers/_shared/term-shape.mjs +76 -0
  31. package/providers/clarivate/src/capabilities.js +36 -0
  32. package/providers/clarivate/src/core.js +119 -0
  33. package/providers/corsearch/src/capabilities.js +24 -0
  34. package/providers/corsearch/src/core.js +7 -0
  35. package/providers/oauth-mcp-bridge/CHANGELOG.md +4 -0
  36. package/providers/oauth-mcp-bridge/package.json +1 -1
  37. package/providers/signa/src/capabilities.js +29 -0
  38. package/providers/signa/src/core.js +17 -0
@@ -23,6 +23,7 @@
23
23
  import { readFileSync, existsSync } from "node:fs";
24
24
  import { dirname, join } from "node:path";
25
25
  import { fileURLToPath } from "node:url";
26
+ import { goodsTermsList } from "../../_shared/term-shape.mjs"; // the shared reader for the goods words
26
27
 
27
28
  import { makeLedger } from "../../_shared/ledger.mjs";
28
29
  import { nonAnswerBodyError, parseJsonBody, unparsedBodyError } from "../../_shared/http-body.mjs";
@@ -132,6 +133,22 @@ function buildFilters(p) {
132
133
  // with a text query in ONE request, and the intersection is a real narrowing rather than one clause
133
134
  // being silently ignored — the three populations (term alone, owner alone, both) differ from each other.
134
135
  if (typeof p.owner === "string" && p.owner.trim()) f.owner_name = p.owner.trim();
136
+ // The goods-and-services narrowing. ONE term only: this filter is a single string whose words are
137
+ // ANDed, and no OR form exists (OR is matched as a literal third word; a pipe and a comma intersect;
138
+ // an array is refused). So a list of alternatives cannot be expressed, and joining one with spaces
139
+ // would ask for filings covering EVERY word — a population that shrinks as the list grows while
140
+ // still answering 200. The compiler does not build a multi-term entry for this provider; this
141
+ // refusal is the backstop for any path that does not go through it.
142
+ const goods = goodsTermsList(p);
143
+ if (goods.length > 1) {
144
+ throw new Error(
145
+ `goods_text carries ${goods.length} terms and this register has no OR on its goods filter: the `
146
+ + `words would be intersected, not offered as alternatives, and the answer would narrow as the `
147
+ + `list grew with no error. Send one term.`);
148
+ }
149
+ // A single term's own words ARE intersected, and that is the nearest honest form of the phrase the
150
+ // caller asked for — it is sent as written, and nothing here calls it a phrase match.
151
+ if (goods.length) f.goods_services_text = goods[0];
135
152
  return f;
136
153
  }
137
154