clearotron 0.2.2 → 0.2.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/.env.example +64 -37
- package/.nvmrc +1 -1
- package/CONTRIBUTING.md +8 -4
- package/INSTALL.md +36 -14
- package/README.md +18 -22
- package/THIRD-PARTY-NOTICES.md +1 -1
- package/bin/clearotron.mjs +22 -0
- package/bin/example.mjs +10 -5
- package/bin/onboard.mjs +370 -28
- package/bin/start.mjs +220 -12
- package/build-info.json +2 -2
- package/demo/README.md +1 -1
- package/demo/full-country-search/run/_driver/framework.json +1 -1
- package/demo/global-preliminary-search/run/_driver/framework.json +1 -1
- package/demo/knockout-search/run/_driver/framework.json +1 -1
- package/demo/multi-country-focus-search/run/_driver/framework.json +1 -1
- package/docs/E2E.md +5 -5
- package/docs/GLOSSARY.md +85 -0
- package/docs/PORTAL.md +2 -2
- package/docs/README.md +6 -4
- package/docs/SECURITY.md +17 -0
- package/docs/architecture/01-product-overview.md +21 -9
- package/docs/architecture/04-configuration-reference.md +2 -0
- package/docs/architecture/05-config-governance.md +19 -0
- package/docs/architecture/05-customer-profiles.md +2 -2
- package/docs/configuration.md +4 -3
- package/docs/decisions/0006-what-the-public-repository-carries.md +30 -5
- package/driver/CHANGELOG.md +90 -0
- package/driver/README.md +25 -6
- package/driver/common-law-receipts.mjs +1 -1
- package/driver/config-staleness.mjs +1 -1
- package/driver/connotation-search.mjs +1 -1
- package/driver/contract-audit.mjs +5 -1
- package/driver/contract-e3-baseline.json +11 -11
- package/driver/dev-portal.mjs +2 -2
- package/driver/doubt-selection.mjs +1 -1
- package/driver/drainer-identity.mjs +1 -1
- package/driver/driver.config.mjs +1 -1
- package/driver/effort-model.mjs +2 -2
- package/driver/engine/cli-version.mjs +103 -0
- package/driver/engine/probe.mjs +45 -5
- package/driver/enqueue-schema.mjs +8 -8
- package/driver/feedback-store.mjs +1 -1
- package/driver/findings-model.mjs +52 -2
- package/driver/flag-snapshot.mjs +20 -0
- package/driver/framework.mjs +1 -1
- package/driver/gateway.mjs +20 -3
- package/driver/outbox-backoff.mjs +1 -1
- package/driver/package.json +3 -3
- package/driver/party-facts.mjs +2 -2
- package/driver/phase0.mjs +1 -1
- package/driver/pipeline.mjs +211 -106
- package/driver/plain-register.mjs +134 -0
- package/driver/portal-access.mjs +1 -1
- package/driver/portal-config-view.mjs +70 -2
- package/driver/portal-families.mjs +1 -1
- package/driver/portal-local-auth.mjs +5 -1
- package/driver/portal-report.mjs +1 -1
- package/driver/portal-service.mjs +79 -9
- package/driver/portal-upstream.mjs +2 -2
- package/driver/predelivery-lint.mjs +151 -2
- package/driver/profile-page.html +10 -2
- package/driver/profile-service.mjs +4 -4
- package/driver/profiles/README.md +3 -3
- package/driver/profiles.mjs +144 -12
- package/driver/publish/index.mjs +2 -2
- package/driver/publish/knockout.mjs +7 -1
- package/driver/publish/render-knockout.mjs +453 -118
- package/driver/publish/render.mjs +111 -16
- package/driver/reference-strip-signatures.mjs +20 -0
- package/driver/search-policy.mjs +3 -3
- package/driver/skills/blind-frame/SKILL.md +1 -1
- package/driver/skills/knockout-assess/SKILL.md +84 -0
- package/driver/skills/matter-frame/SKILL.md +6 -6
- package/driver/skills/matter-frame/watchlist-reference.md +2 -2
- package/driver/skills/prelim-common-law/SKILL.md +1 -1
- package/driver/skills/prelim-search/SKILL.md +1 -1
- package/driver/skills/prelim-search/report-prose.md +82 -0
- package/driver/skills/prelim-search/risk-framework-demo.manifest.json +1 -1
- package/driver/skills/prelim-search/risk-framework-triage.manifest.json +1 -1
- package/driver/skills/prelim-search/risk-framework.manifest.json +1 -1
- package/driver/skills/prelim-search/synthesis-rules.md +1 -1
- package/driver/skills/prelim-variants/SKILL.md +3 -3
- package/driver/stage-context.mjs +13 -0
- package/driver/stages.mjs +54 -7
- package/driver/suite-census.json +220 -58
- package/driver/systemd/clearotron-worker.service +3 -3
- package/driver/tokens.mjs +1 -1
- package/driver/unit-inventory.mjs +214 -27
- package/driver/verify.mjs +1 -1
- package/driver/whatif-memo-run.mjs +26 -4
- package/driver/whatif-memo.mjs +19 -1
- package/examples/README.md +2 -2
- package/examples/grants.example.json +6 -7
- package/mcp-server/CHANGELOG.md +4 -0
- package/mcp-server/lib/scrub.mjs +1 -1
- package/mcp-server/lib/whatif.mjs +2 -2
- package/mcp-server/package.json +1 -1
- package/mcp-server/packs/ops/EXAMPLES.md +2 -2
- package/mcp-server/server.mjs +1 -1
- package/package.json +31 -19
- package/portal-ui/dist/assets/{index-Ct3iQtZ2.css → index-1ziUJX1E.css} +43 -2
- package/portal-ui/dist/assets/{index-BUGgiYtF.js → index-KFAHMgdT.js} +289 -73
- package/portal-ui/dist/index.html +2 -2
- package/portal-ui/package.json +1 -1
- package/providers/_shared/term-shape.mjs +1 -1
- package/providers/oauth-mcp-bridge/CHANGELOG.md +4 -0
- package/providers/oauth-mcp-bridge/package.json +1 -1
- package/providers/uspto-local/src/index-store.js +2 -2
- package/scripts/added-reference-check.mjs +45 -89
- package/scripts/citation-line-check.mjs +121 -2
- package/scripts/e2e.mjs +2 -2
- package/scripts/env-classify.mjs +67 -3
- package/scripts/generated-files-are-current.mjs +125 -0
- package/scripts/live-surface-check.mjs +38 -1
- package/scripts/mint-names-in-force.mjs +4 -2
- package/scripts/mint-public-residue.mjs +74 -0
- package/scripts/mint-reference-strip-backlog.mjs +12 -1
- package/scripts/mint-suite-census.mjs +5 -2
- package/scripts/nightly-notice.mjs +0 -2
- package/scripts/preinstall-node-check.mjs +24 -0
- package/scripts/render-check.mjs +13 -2
- package/scripts/report-frame-check.mjs +8 -1
- package/scripts/report-screenshot.mjs +6 -3
- package/scripts/revisit-render-check.mjs +6 -3
- package/scripts/score.mjs +1 -1
- package/scripts/strip-tracker-citations.mjs +38 -7
- package/scripts/test-full.mjs +226 -0
- package/scripts/test-run.mjs +16 -0
- package/shared/README.md +2 -1
- package/shared/anon-overlay.mjs +3 -3
- package/shared/browser-temp-root.mjs +142 -0
- package/shared/checkout-move.mjs +1 -1
- package/shared/client-door.mjs +4 -3
- package/shared/customer-store.mjs +1 -1
- package/shared/identifier-scan.mjs +1 -1
- package/shared/install-auth.mjs +35 -0
- package/shared/invocation.mjs +33 -1
- package/shared/listen.mjs +55 -3
- package/shared/names-in-force.mjs +6 -1
- package/shared/node-floor.mjs +97 -0
- package/shared/os-advice.mjs +91 -0
- package/shared/reap-on-exit.mjs +42 -0
- package/shared/reference-guard-classes.mjs +351 -0
- package/shared/staff-domain.mjs +154 -0
- package/shared/store-in-repo.mjs +23 -2
- package/shared/suite-census.mjs +31 -3
- package/shared/withheld-paths-access.mjs +36 -18
- package/skills/clearotron-ops/SKILL.md +1 -1
- package/driver/recipes/README.md +0 -49
- package/driver/skills/prelim-search/risk-framework-aurora.manifest.json +0 -19
- package/driver/skills/prelim-search/risk-framework-aurora.md +0 -77
- package/driver/skills/prelim-search/risk-framework-zephyr.manifest.json +0 -14
- package/driver/skills/prelim-search/risk-framework-zephyr.md +0 -33
- package/driver/skills/prelim-search/worked-examples-aurora.md +0 -10
- package/driver/skills/prelim-search/worked-examples-zephyr.md +0 -10
- package/scripts/ai-page-render-check.mjs +0 -532
- package/scripts/clearances-render-check.mjs +0 -480
- package/scripts/composer-render-check.mjs +0 -1027
- package/scripts/home-render-check.mjs +0 -526
- package/scripts/portal-lifecycle-check.mjs +0 -639
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "clearotron",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.2.
|
|
4
|
+
"version": "0.2.4",
|
|
5
5
|
"license": "AGPL-3.0-only",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
},
|
|
14
14
|
"description": "Clearotron — trademark-clearance engine: deterministic orchestration driver + MCP interrogation server. Provider-agnostic, model-agnostic, runs headless (no gateway).",
|
|
15
15
|
"engines": {
|
|
16
|
-
"node": ">=22.
|
|
16
|
+
"node": ">=22.13.0"
|
|
17
17
|
},
|
|
18
18
|
"workspaces": [
|
|
19
19
|
"driver",
|
|
@@ -22,13 +22,14 @@
|
|
|
22
22
|
"portal-ui"
|
|
23
23
|
],
|
|
24
24
|
"scripts": {
|
|
25
|
+
"preinstall": "node scripts/preinstall-node-check.mjs",
|
|
25
26
|
"postinstall": "node -e \"const{existsSync}=require('node:fs');const{execFileSync}=require('node:child_process');if(existsSync('scripts/install-hooks.mjs'))execFileSync(process.execPath,['scripts/install-hooks.mjs'],{stdio:'inherit'})\"",
|
|
26
27
|
"prepack": "node scripts/write-build-info.mjs",
|
|
27
28
|
"prepublishOnly": "node scripts/release-completeness-check.mjs",
|
|
28
29
|
"test": "npm test --workspaces --if-present",
|
|
29
|
-
"test:full": "
|
|
30
|
+
"test:full": "node scripts/test-full.mjs",
|
|
30
31
|
"test:driver": "npm run test:full -w driver",
|
|
31
|
-
"test:providers": "node scripts/test-
|
|
32
|
+
"test:providers": "node scripts/test-full.mjs --only providers",
|
|
32
33
|
"test:mcp": "npm test -w mcp-server",
|
|
33
34
|
"start": "node bin/start.mjs",
|
|
34
35
|
"build:ui": "npm run build -w portal-ui",
|
|
@@ -48,17 +49,11 @@
|
|
|
48
49
|
"bench:uspto": "node providers/uspto-local/bench/bench.mjs",
|
|
49
50
|
"verify:uspto": "node providers/uspto-local/bin/verify-index.mjs",
|
|
50
51
|
"lint:driver": "eslint --no-error-on-unmatched-pattern --max-warnings 0 --config eslint.driver.config.mjs \"driver/**/*.mjs\" \"bin/**/*.mjs\" \"shared/**/*.mjs\" \"mcp-server/**/*.mjs\" \"scripts/**/*.mjs\" \"cut/**/*.mjs\"",
|
|
51
|
-
"deploy:drift": "node -e \"const{existsSync}=require('node:fs');const{execFileSync}=require('node:child_process');const p='scripts/deploy-drift-check.mjs';if(!existsSync(p)){console.error('npm run deploy:drift requires '+p+', internal tooling that is not included in this distribution.');process.exit(1)}try{execFileSync(process.execPath,[p],{stdio:'inherit'})}catch(e){process.exit(typeof e.status==='number'?e.status:1)}\"",
|
|
52
52
|
"doctrine-report": "node scripts/doctrine-report.mjs",
|
|
53
53
|
"notices": "node scripts/third-party-notices.mjs",
|
|
54
54
|
"notices:check": "node scripts/third-party-notices.mjs --check",
|
|
55
55
|
"grant": "node bin/grant.mjs",
|
|
56
|
-
"
|
|
57
|
-
"assert-census": "node scripts/unexecuted-asserts.mjs",
|
|
58
|
-
"guard:messages": "node -e \"const{existsSync}=require('node:fs');const{execFileSync}=require('node:child_process');const p='scripts/commit-message-guard.mjs';if(!existsSync(p)){console.error('npm run guard:messages requires '+p+', internal tooling that is not included in this distribution.');process.exit(1)}try{execFileSync(process.execPath,[p],{stdio:'inherit'})}catch(e){process.exit(typeof e.status==='number'?e.status:1)}\"",
|
|
59
|
-
"guard:messages:self-test": "node -e \"const{existsSync}=require('node:fs');const{execFileSync}=require('node:child_process');const p='scripts/commit-message-guard.mjs';if(!existsSync(p)){console.error('npm run guard:messages:self-test requires '+p+', internal tooling that is not included in this distribution.');process.exit(1)}try{execFileSync(process.execPath,[p,'--self-test'],{stdio:'inherit'})}catch(e){process.exit(typeof e.status==='number'?e.status:1)}\"",
|
|
60
|
-
"hooks:install": "node -e \"const{existsSync}=require('node:fs');const{execFileSync}=require('node:child_process');const p='scripts/install-hooks.mjs';if(!existsSync(p)){console.error('npm run hooks:install requires '+p+', internal tooling that is not included in this distribution.');process.exit(1)}try{execFileSync(process.execPath,[p],{stdio:'inherit'})}catch(e){process.exit(typeof e.status==='number'?e.status:1)}\"",
|
|
61
|
-
"hooks:check": "node -e \"const{existsSync}=require('node:fs');const{execFileSync}=require('node:child_process');const p='scripts/install-hooks.mjs';if(!existsSync(p)){console.error('npm run hooks:check requires '+p+', internal tooling that is not included in this distribution.');process.exit(1)}try{execFileSync(process.execPath,[p,'--check'],{stdio:'inherit'})}catch(e){process.exit(typeof e.status==='number'?e.status:1)}\""
|
|
56
|
+
"assert-census": "node scripts/unexecuted-asserts.mjs"
|
|
62
57
|
},
|
|
63
58
|
"devDependencies": {
|
|
64
59
|
"@changesets/cli": "3.0.1",
|
|
@@ -72,7 +67,7 @@
|
|
|
72
67
|
"buffers": "file:vendor/buffers",
|
|
73
68
|
"exceljs": "^4.4.0",
|
|
74
69
|
"jose": "^6.2.3",
|
|
75
|
-
"undici": "^
|
|
70
|
+
"undici": "^7.29.1"
|
|
76
71
|
},
|
|
77
72
|
"bin": {
|
|
78
73
|
"clearotron": "bin/clearotron.mjs"
|
|
@@ -105,13 +100,30 @@
|
|
|
105
100
|
"portal-ui/dist/",
|
|
106
101
|
"portal-ui/package.json",
|
|
107
102
|
".env.example",
|
|
108
|
-
"!driver/profiles
|
|
109
|
-
"
|
|
110
|
-
"
|
|
111
|
-
"!driver/profiles
|
|
112
|
-
"!driver/profiles/projects
|
|
113
|
-
"
|
|
114
|
-
"!driver/recipes
|
|
103
|
+
"!driver/profiles/*.json",
|
|
104
|
+
"driver/profiles/generic.json",
|
|
105
|
+
"driver/profiles/demo-brand-owner.json",
|
|
106
|
+
"!driver/profiles/*.context.md",
|
|
107
|
+
"!driver/profiles/projects/*/",
|
|
108
|
+
"driver/profiles/projects/demo-brand-owner/",
|
|
109
|
+
"!driver/recipes/*/",
|
|
110
|
+
"!driver/skills/prelim-search/risk-framework-*",
|
|
111
|
+
"driver/skills/prelim-search/risk-framework.md",
|
|
112
|
+
"driver/skills/prelim-search/risk-framework.manifest.json",
|
|
113
|
+
"driver/skills/prelim-search/risk-framework-demo.md",
|
|
114
|
+
"driver/skills/prelim-search/risk-framework-demo.manifest.json",
|
|
115
|
+
"driver/skills/prelim-search/risk-framework-triage.md",
|
|
116
|
+
"driver/skills/prelim-search/risk-framework-triage.manifest.json",
|
|
117
|
+
"!driver/skills/prelim-search/worked-examples-*",
|
|
118
|
+
"driver/skills/prelim-search/worked-examples.md",
|
|
119
|
+
"driver/skills/prelim-search/worked-examples-demo.md",
|
|
120
|
+
"!scripts/home-render-check.mjs",
|
|
121
|
+
"!scripts/ai-page-render-check.mjs",
|
|
122
|
+
"!scripts/composer-render-check.mjs",
|
|
123
|
+
"!scripts/clearances-render-check.mjs",
|
|
124
|
+
"!scripts/portal-lifecycle-check.mjs",
|
|
125
|
+
"!scripts/test-account-names.mjs",
|
|
126
|
+
"!scripts/no-test-account-reaches-the-package.mjs",
|
|
115
127
|
"!**/test/",
|
|
116
128
|
"!**/bench/",
|
|
117
129
|
"!**/*.test.mjs",
|
|
@@ -598,7 +598,7 @@ table.data tr.row:hover td {
|
|
|
598
598
|
/* tracker issue 277 — A SECTION HEADER, not a decorative divider.
|
|
599
599
|
Brand owner is the organising principle of the whole list, and a reader had to work it out: the name
|
|
600
600
|
was set in the smallest, lowest-contrast, most letterspaced type on the page, which reads as a rule
|
|
601
|
-
BETWEEN rows rather than as "everything below this belongs to
|
|
601
|
+
BETWEEN rows rather than as "everything below this belongs to Foxglade Interactive".
|
|
602
602
|
Body-text size, medium weight, full-strength ink, sentence case rather than letterspaced caps — and a
|
|
603
603
|
hairline rule spanning the table beneath it, so containment is visible without reading anything. */
|
|
604
604
|
table.data tr.group-head td {
|
|
@@ -916,11 +916,21 @@ input.filter {
|
|
|
916
916
|
color: var(--text-strong);
|
|
917
917
|
}
|
|
918
918
|
|
|
919
|
+
/* Says what the row of pills below it is a row OF. Sentence case and body-weight rather than the
|
|
920
|
+
uppercase section treatment above: this is a caption belonging to the statement it follows, and
|
|
921
|
+
giving it a heading's weight would make it look like a new section — which is the misreading the
|
|
922
|
+
label exists to end. Sits tight to its pills and away from the statement above. */
|
|
923
|
+
.fw-ladder-label {
|
|
924
|
+
font-size: 12px;
|
|
925
|
+
color: var(--text-muted);
|
|
926
|
+
margin: 14px 0 0;
|
|
927
|
+
}
|
|
928
|
+
|
|
919
929
|
.fw-ladder {
|
|
920
930
|
display: flex;
|
|
921
931
|
flex-wrap: wrap;
|
|
922
932
|
gap: 6px;
|
|
923
|
-
margin:
|
|
933
|
+
margin: 6px 0 4px;
|
|
924
934
|
}
|
|
925
935
|
|
|
926
936
|
.fw-bmh {
|
|
@@ -991,6 +1001,37 @@ input.filter {
|
|
|
991
1001
|
max-width: 420px; /* tracker issue 2086 — the note's width is the note's own, not its call site's */
|
|
992
1002
|
}
|
|
993
1003
|
|
|
1004
|
+
/* The line beside the primary action: what happens next when it is available, and why it is not when
|
|
1005
|
+
it is not. Capped here rather than at the call site for the same reason the note above is — width is
|
|
1006
|
+
a decision this file makes. Narrower than the note because it sits IN the action row, beside a
|
|
1007
|
+
button, rather than replacing it. */
|
|
1008
|
+
.footer-hint {
|
|
1009
|
+
max-width: 260px;
|
|
1010
|
+
font-size: 12px;
|
|
1011
|
+
line-height: 1.4;
|
|
1012
|
+
color: var(--text-muted);
|
|
1013
|
+
}
|
|
1014
|
+
|
|
1015
|
+
/* The acknowledgement a save leaves beside the button that was pressed.
|
|
1016
|
+
Quiet on purpose: it is a receipt, not an alert, and it sits in the same row as the primary action
|
|
1017
|
+
without competing with it. No new colour — `--tone-minimal` (the palette's clear-green) and the hairline are what the rest of
|
|
1018
|
+
this file already uses for a settled, good state. */
|
|
1019
|
+
.save-done {
|
|
1020
|
+
display: inline-flex;
|
|
1021
|
+
align-items: center;
|
|
1022
|
+
gap: 7px;
|
|
1023
|
+
font-size: 12.5px;
|
|
1024
|
+
color: var(--text-body);
|
|
1025
|
+
background: var(--surface-sunken);
|
|
1026
|
+
border: 1px solid var(--border-hairline);
|
|
1027
|
+
border-radius: 7px;
|
|
1028
|
+
padding: 7px 11px;
|
|
1029
|
+
}
|
|
1030
|
+
.save-done svg {
|
|
1031
|
+
color: var(--tone-minimal);
|
|
1032
|
+
flex: none;
|
|
1033
|
+
}
|
|
1034
|
+
|
|
994
1035
|
.fw-meta {
|
|
995
1036
|
font-size: 12px;
|
|
996
1037
|
color: var(--text-muted);
|