clearotron 0.3.2-beta.3 → 0.3.2-beta.5
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/INSTALL.md +1 -0
- package/bin/onboard.mjs +65 -0
- package/bin/start.mjs +14 -0
- package/build-info.json +2 -2
- package/demo/knockout-search/run/_driver/predelivery-lint.json +26 -2
- package/driver/CHANGELOG.md +15 -0
- package/driver/package.json +1 -1
- package/driver/pipeline.mjs +4 -2
- package/driver/publish/render-knockout.mjs +231 -98
- package/driver/publish/render.mjs +399 -152
- package/driver/publish/templates/report.css +103 -3
- package/driver/registry-fidelity.mjs +28 -0
- package/driver/suite-census.json +22 -22
- package/mcp-server/CHANGELOG.md +8 -0
- package/mcp-server/lib/audit.mjs +14 -2
- package/mcp-server/lib/http-handler.mjs +52 -13
- package/mcp-server/lib/scrub.mjs +1 -1
- package/mcp-server/package.json +1 -1
- package/package.json +1 -1
- package/portal-ui/dist/assets/{index-Bki5jT_N.js → index-5UyqAyNM.js} +12 -6
- package/portal-ui/dist/assets/{index-De2RFLbT.css → index-CVOIvdhc.css} +20 -0
- package/portal-ui/dist/index.html +2 -2
- package/portal-ui/package.json +1 -1
- package/providers/_shared/script-form.mjs +2 -2
- package/providers/clarivate/src/core.js +18 -27
- package/providers/oauth-mcp-bridge/CHANGELOG.md +8 -0
- package/providers/oauth-mcp-bridge/package.json +1 -1
- package/providers/signa/src/core.js +3 -3
- package/scripts/env-classify.mjs +6 -0
- package/shared/driver-dir.mjs +1 -1
|
@@ -220,8 +220,8 @@ export function assertSingleMarkShape(rawTerm) {
|
|
|
220
220
|
}
|
|
221
221
|
return tokens;
|
|
222
222
|
}
|
|
223
|
-
// Read as OPERATORS wherever they stand alone in a value string, case-insensitively
|
|
224
|
-
//
|
|
223
|
+
// Read as OPERATORS wherever they stand alone in a value string, case-insensitively, with an
|
|
224
|
+
// optional proximity digit.
|
|
225
225
|
const RESERVED_TOKEN_RE = /^(?:AND|OR|NOT|ADJ|NEAR)\d*$/i;
|
|
226
226
|
const PUNCT_ONLY_RE = /^[^\p{L}\p{N}]+$/u;
|
|
227
227
|
|
|
@@ -229,22 +229,18 @@ const PUNCT_ONLY_RE = /^[^\p{L}\p{N}]+$/u;
|
|
|
229
229
|
* An operator word inside a phrase is DROPPED, and the gap it leaves is spanned by widening that one
|
|
230
230
|
* adjacency to `ADJ<n+1>`.
|
|
231
231
|
*
|
|
232
|
-
* The obvious move — make the word lexically stop being an operator with an interior `?` — is WRONG
|
|
233
|
-
*
|
|
234
|
-
*
|
|
235
|
-
* *BLACK ADJ A?D ADJ DECKER* 0 ← what the `?` escape asks for, and nothing is named that
|
|
236
|
-
* *BLACK ADJ DECKER* 55 ← BLACK & DECKER
|
|
237
|
-
* *BLACK ADJ2 DECKER* 55 ← identical: the connector is not indexed, so spanning costs nothing
|
|
238
|
-
* *BEN ADJ A?D ADJ JERRYS* 0 vs *BEN ADJ JERRYS* 25
|
|
232
|
+
* The obvious move — make the word lexically stop being an operator with an interior `?` — is WRONG.
|
|
233
|
+
* Registers write these marks with an ampersand and not the word, so the escaped form names NOTHING,
|
|
234
|
+
* while the plain adjacency finds the mark and the widened adjacency finds exactly the same set.
|
|
239
235
|
*
|
|
240
236
|
* A zero over a mark that exists is the failure this whole contract is built to prevent, so the escape
|
|
241
237
|
* is gone. Dropping + `ADJ2` is right whether or not the index holds the word: if it is a stopword the
|
|
242
|
-
* neighbours are already adjacent
|
|
243
|
-
* adjacency still reaches across. It is a superset of the literal phrase — safe in
|
|
244
|
-
* clearance sweep needs, which fails by MISSING a mark and never by surfacing an extra one.
|
|
238
|
+
* neighbours are already adjacent — plain and widened return the same set — and if some register does
|
|
239
|
+
* index it the widened adjacency still reaches across. It is a superset of the literal phrase — safe in
|
|
240
|
+
* the direction a clearance sweep needs, which fails by MISSING a mark and never by surfacing an extra one.
|
|
245
241
|
*
|
|
246
|
-
* `ADJ<n>` is real
|
|
247
|
-
*
|
|
242
|
+
* `ADJ<n>` is real: the widened form returns strictly more than the tighter one, so the widening is
|
|
243
|
+
* genuinely a widening and not a no-op we cannot see.
|
|
248
244
|
*/
|
|
249
245
|
export function isReservedToken(tok) {
|
|
250
246
|
return RESERVED_TOKEN_RE.test(tok);
|
|
@@ -286,21 +282,16 @@ export function compilePhraseValue(term, { pre = "", post = "", dropReserved = f
|
|
|
286
282
|
|
|
287
283
|
// A LEADING `*` on a ONE-CHARACTER first token is a sub-query over most of the register, and inside an
|
|
288
284
|
// ADJ chain the provider gives up on it: HTTP 500 "Near/Adj queries with sub queries that can return a
|
|
289
|
-
// huge amount…".
|
|
290
|
-
//
|
|
291
|
-
//
|
|
292
|
-
//
|
|
293
|
-
// the leading token boundary (AN ADJ APPLE* = 31 vs *AN ADJ APPLE* = 55), which is why it is not done
|
|
294
|
-
// generally — but the alternative here is not a narrower search, it is no search at all.
|
|
285
|
+
// huge amount…". The refusal is specific to a first token of ONE character; two characters are answered.
|
|
286
|
+
// So the leading wrap is dropped for that one case, and ONLY that case. It costs a little recall at the
|
|
287
|
+
// leading token boundary, which is why it is not done generally — but the alternative here is not a
|
|
288
|
+
// narrower search, it is no search at all.
|
|
295
289
|
const leadWrap = (kept.length > 1 && kept[0].length === 1) ? "" : pre;
|
|
296
290
|
// AND THE SAME AT THE OTHER END, which was never added and cost a family search on a live matter. A
|
|
297
291
|
// root whose LAST word is one character — a sequel number, an article, an initial — compiled to
|
|
298
292
|
// `*PLAN ADJ B*`, and the trailing `B*` is the same sub-query over most of the register that the
|
|
299
|
-
// leading rule above exists for
|
|
300
|
-
//
|
|
301
|
-
// *LEVEL ADJ 2* 500 *LEVEL ADJ 2 200, 14 records
|
|
302
|
-
// *ROB ADJ A* 500 *ROB ADJ A 200, 3 records
|
|
303
|
-
// A delivered run planned a family search on such a root, every attempt was refused, the refusal was
|
|
293
|
+
// leading rule above exists for: the provider refuses that shape and answers the same query with the
|
|
294
|
+
// trailing star removed. A delivered run planned a family search on such a root, every attempt was refused, the refusal was
|
|
304
295
|
// retried as if transient and the slice was filed as a provider gap — so a family of pending filings
|
|
305
296
|
// for a third-party title went unseen and the matter was rated on what was left.
|
|
306
297
|
const last = kept.length - 1;
|
|
@@ -517,8 +508,8 @@ export function hasAnyElement(p) {
|
|
|
517
508
|
|
|
518
509
|
/**
|
|
519
510
|
* Join terms into ONE value string with the EXPLICIT " OR " operator (a bare space is an implicit AND,
|
|
520
|
-
* not an OR). ADJ binds tighter than OR, so phrase operands need no parentheses
|
|
521
|
-
*
|
|
511
|
+
* not an OR). ADJ binds tighter than OR, so phrase operands need no parentheses: an OR of two phrases
|
|
512
|
+
* returns the union of the two, and parentheses around them change nothing.
|
|
522
513
|
* The width bound is the parser's document-nesting cap; the enumerate
|
|
523
514
|
* kernel chunks wide `names` stacks at capabilities.kernel.namesChunkDefault (= maxOrWidth) before they
|
|
524
515
|
* ever reach here, so hitting this throw means a caller bypassed the kernel.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "trademark-oauth-mcp-bridge",
|
|
3
|
-
"version": "0.3.2-beta.
|
|
3
|
+
"version": "0.3.2-beta.5",
|
|
4
4
|
"license": "AGPL-3.0-only",
|
|
5
5
|
"private": true,
|
|
6
6
|
"description": "OAuth 2.1 MCP stdio bridge used by the engine's case-law gather stage (courtlistener / legaldatahunter).",
|
|
@@ -793,9 +793,9 @@ export async function doCountHits(apiKey, base, params, tctx, { mock = false } =
|
|
|
793
793
|
const parsed = JSON.parse(r.text);
|
|
794
794
|
// ── this is a COUNT now, and it was a presence probe ──────────────────────────────────
|
|
795
795
|
// `include_total` returns the corpus total on the same call, so the smallest request the API will
|
|
796
|
-
// take — limit 1 — carries the whole answer:
|
|
797
|
-
//
|
|
798
|
-
//
|
|
796
|
+
// take — limit 1 — carries the whole answer: the total it reports is the one the paged query reports.
|
|
797
|
+
// Stage 0.5 (driver/register-count.mjs) refused to run on this provider at all; it now gets the
|
|
798
|
+
// number it exists to ask for.
|
|
799
799
|
//
|
|
800
800
|
// THE ZERO RULE IS UNCHANGED AND IS THE REASON THIS IS SAFE. `total_hits` is null unless the vendor
|
|
801
801
|
// counted exactly — an approximation and a non-answer both report unknown. So the only 0 this can
|
package/scripts/env-classify.mjs
CHANGED
|
@@ -341,6 +341,12 @@ function topLevelKeys(text, code, open) {
|
|
|
341
341
|
// — the committed artifact is byte-identical across it.
|
|
342
342
|
export const DEPLOYMENT_NAMES = new Set([
|
|
343
343
|
"CF_ACCESS_TEAM",
|
|
344
|
+
// The administrator contact for this install — the address Preferences points a signed-in person at to
|
|
345
|
+
// have their access, permissions or companies changed. An identity and an address, which the rule above
|
|
346
|
+
// DEPLOY_RE calls never a knob, and its catalogue row declares `deployment`. No shape here matches the
|
|
347
|
+
// spelling, so unlisted it falls through to `tuning`, the bucket step 3 deletes from — where nothing
|
|
348
|
+
// records a set-site for it and nothing would object to its removal.
|
|
349
|
+
"CLEAROTRON_ADMINISTRATOR_CONTACT",
|
|
344
350
|
// — `CLEAROTRON_DEMO`, which is `PORTAL_DEMO` renamed. It is listed here for
|
|
345
351
|
// the exact reason this list exists: the old name was `deployment` because of its `PORTAL_` prefix and
|
|
346
352
|
// by nothing else, so moving it to the house prefix dropped it through to `tuning` — the bucket step 3
|
package/shared/driver-dir.mjs
CHANGED
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
// its own population needs an exception list — which would rebuild this issue's defect inside its fix:
|
|
36
36
|
//
|
|
37
37
|
// · `driver/stage-freshness.mjs` creates a CHILD, `join(runDir, "_driver", STAMP_DIR)`.
|
|
38
|
-
// · `driver/pipeline.mjs:
|
|
38
|
+
// · `driver/pipeline.mjs:15757 shadowDir` passes a shadow dispatch sandbox under `_experiments/`, not a run
|
|
39
39
|
// directory. It is a run-dir-SHAPED base, which is why the parameter is `base` and not `runDir`.
|
|
40
40
|
//
|
|
41
41
|
// ── WHAT THIS DELIBERATELY DOES NOT DO ────────────────────────────────────────────────────────────
|