clearotron 0.4.0 → 0.4.1-beta.1
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/THIRD-PARTY-NOTICES.md +2 -2
- package/bin/README.md +1 -1
- package/bin/clearotron.mjs +2 -0
- package/bin/mcp.mjs +80 -0
- package/bin/start.mjs +14 -1
- package/build-info.json +2 -2
- package/demo/README.md +1 -1
- package/docs/SECURITY-OWASP.md +21 -13
- package/docs/SECURITY.md +20 -14
- package/docs/architecture/04-configuration-reference.md +3 -3
- package/docs/architecture/05-config-governance.md +1 -1
- package/docs/architecture/06-operations-runbook.md +5 -4
- package/docs/architecture/08-development-guide.md +3 -1
- package/docs/architecture/09-security-and-data.md +16 -11
- package/driver/CHANGELOG.md +29 -0
- package/driver/binding-layers.mjs +28 -6
- package/driver/citation-census.json +3 -3
- package/driver/common-law-coverage-status.mjs +52 -0
- package/driver/common-law-receipts.mjs +1 -1
- package/driver/compare.mjs +1 -1
- package/driver/connotation-search.mjs +5 -5
- package/driver/contract-audit.mjs +6 -6
- package/driver/contract-dictation-registry.mjs +1 -1
- package/driver/contract-e3-backlog.mjs +18 -17
- package/driver/contract-vocabulary.mjs +145 -132
- package/driver/declination-call.mjs +5 -1
- package/driver/degraded-parts.mjs +10 -3
- package/driver/dev-portal.mjs +2 -1
- package/driver/dispatch-record.mjs +19 -0
- package/driver/doubt-closure-tool.mjs +2 -2
- package/driver/driver.config.mjs +39 -6
- package/driver/engagement-receipt.mjs +1 -1
- package/driver/engine/CONTRACT.md +41 -1
- package/driver/engine/anthropic-agent.mjs +56 -4
- package/driver/engine/mcp/codex-config.mjs +8 -3
- package/driver/engine/mcp/coverage-server.mjs +1 -1
- package/driver/engine/mcp/gather-config.mjs +1 -1
- package/driver/engine/mcp/recording-server.mjs +32 -5
- package/driver/engine/mcp/stdio-server.mjs +45 -7
- package/driver/engine/mcp/supplemental.mjs +26 -1
- package/driver/engine/openai-agent.mjs +113 -20
- package/driver/engine/session-record.mjs +223 -0
- package/driver/enqueue-schema.mjs +2 -2
- package/driver/findings-model.mjs +4 -4
- package/driver/flag-snapshot.mjs +2 -1
- package/driver/form-neighbourhood.mjs +7 -7
- package/driver/frame-diff-model.mjs +3 -3
- package/driver/framework.mjs +22 -0
- package/driver/gateway.mjs +96 -14
- package/driver/jx.mjs +1 -1
- package/driver/knockout-review-record.mjs +55 -1
- package/driver/named-band.mjs +4 -0
- package/driver/owner-screen.mjs +7 -4
- package/driver/package.json +1 -1
- package/driver/phase0.mjs +13 -2
- package/driver/pipeline-knockout.mjs +15 -13
- package/driver/pipeline.mjs +132 -48
- package/driver/portal-families.mjs +3 -3
- package/driver/portal-service.mjs +6 -5
- package/driver/predelivery-lint.mjs +19 -19
- package/driver/products.mjs +1 -1
- package/driver/profiles.mjs +4 -3
- package/driver/publish/index.mjs +1 -1
- package/driver/publish/knockout.mjs +5 -4
- package/driver/publish/office-record-links.mjs +17 -2
- package/driver/publish/publish-inputs.mjs +3 -3
- package/driver/publish/render-knockout.mjs +17 -5
- package/driver/publish/render.mjs +4 -2
- package/driver/publish/xlsx.mjs +1 -1
- package/driver/record-fold.mjs +177 -0
- package/driver/register-count.mjs +20 -3
- package/driver/register-coverage.mjs +1 -1
- package/driver/register-plan.mjs +83 -18
- package/driver/register-records.mjs +7 -0
- package/driver/registry-fidelity.mjs +2 -2
- package/driver/repairs.mjs +1 -1
- package/driver/report-card-record.mjs +4 -4
- package/driver/result-noun-fields.mjs +3 -3
- package/driver/scope-facts.mjs +11 -3
- package/driver/scope-rules.mjs +2 -2
- package/driver/search-policy.mjs +20 -1
- package/driver/skills/clearance-common-law/SKILL.md +22 -22
- package/driver/skills/clearance-register/digest.md +3 -3
- package/driver/skills/clearance-register/register-recipes.md +11 -11
- package/driver/skills/clearance-register/status-rules.md +1 -1
- package/driver/skills/clearance-register/unit.md +1 -1
- package/driver/skills/clearance-search/firm-wide-reasoning.md +3 -2
- package/driver/skills/clearance-search/phase2-execution.md +6 -5
- package/driver/skills/clearance-search/synthesis-rules.md +4 -4
- package/driver/skills/clearance-search/worked-examples.md +39 -39
- package/driver/skills/clearance-variants/SKILL.md +16 -16
- package/driver/skills/frame-diff/SKILL.md +2 -2
- package/driver/stage-context.mjs +36 -1
- package/driver/stages-knockout.mjs +6 -5
- package/driver/stages.mjs +30 -30
- package/driver/suite-census.json +259 -55
- package/driver/synthesis-record.mjs +5 -0
- package/driver/unit-inventory.mjs +17 -28
- package/driver/verify.mjs +7 -7
- package/mcp-server/CHANGELOG.md +8 -0
- package/mcp-server/CONNECT.md +9 -3
- package/mcp-server/demo-mode.mjs +10 -0
- package/mcp-server/lib/evidence.mjs +8 -8
- package/mcp-server/lib/knockout.mjs +1 -1
- package/mcp-server/lib/runs.mjs +7 -1
- package/mcp-server/lib/scrub.mjs +1 -1
- package/mcp-server/package.json +2 -2
- package/mcp-server/packs/README.md +1 -1
- package/mcp-server/server.mjs +16 -2
- package/package.json +4 -3
- package/portal-ui/package.json +3 -3
- package/providers/_shared/count.mjs +9 -2
- package/providers/_shared/enumerate.mjs +125 -41
- package/providers/_shared/execute-plan.mjs +15 -4
- package/providers/corsearch/src/capabilities.js +1 -1
- package/providers/oauth-mcp-bridge/CHANGELOG.md +8 -0
- package/providers/oauth-mcp-bridge/package.json +2 -2
- package/providers/signa/src/capabilities.js +32 -2
- package/providers/signa/src/core.js +262 -36
- package/scripts/band-shape-probe.mjs +2 -2
- package/scripts/deprecate-below.mjs +28 -4
- package/scripts/e2e-first-time.mjs +17 -2
- package/scripts/env-audit.mjs +3 -2
- package/scripts/freeze-example-run.mjs +10 -10
- package/scripts/mcp-registry-listing.mjs +199 -0
- package/scripts/mint-plugin-folder.mjs +65 -0
- package/scripts/release-version.mjs +44 -0
- package/scripts/score.mjs +1 -1
- package/shared/register-floor.mjs +19 -0
- package/shared/scope.mjs +18 -2
- package/shared/trigger-lane.mjs +1 -1
- package/skills/clearotron-ops/SKILL.md +81 -24
|
@@ -33,7 +33,7 @@ Notice across all three:
|
|
|
33
33
|
- **The proposed mark's own distinctiveness is assessed *per field*** — and it drives how narrowly any
|
|
34
34
|
third-party right can block (descriptive term → narrow rights → weak block).
|
|
35
35
|
- **Family-of-marks / branded-context is a real mitigant** ("consumers will perceive EMBERSTRIKE as
|
|
36
|
-
an extension of the
|
|
36
|
+
an extension of the Strike range"; "strong Blockvale branding").
|
|
37
37
|
- **Use / revocability / enforcement appetite carry the analysis** — a registration with no use, in
|
|
38
38
|
insolvency, or outside the owner's core market is a different risk from an active enforcer.
|
|
39
39
|
- **Executive summary is synthesised prose:** name the primary risk(s), the overall rating, and the
|
|
@@ -236,30 +236,30 @@ cannot be excluded.
|
|
|
236
236
|
sufficient differences to avoid confusion.
|
|
237
237
|
|
|
238
238
|
*Common-law use*
|
|
239
|
-
- **Manageable** — "Solstrikers" is a game "coming soon" on Steam from indie developer
|
|
239
|
+
- **Manageable** — "Solstrikers" is a game "coming soon" on Steam from an indie developer.
|
|
240
240
|
|
|
241
241
|
**Emberstrike — Manageable Risk**
|
|
242
242
|
|
|
243
|
-
- 3,060 live
|
|
244
|
-
software/hardware/online gaming); analysis focuses on
|
|
245
|
-
- 8,575 live
|
|
246
|
-
|
|
243
|
+
- 3,060 live EMBER/EMBER-formative filings internationally in the searched classes (640 claim gaming
|
|
244
|
+
software/hardware/online gaming); analysis focuses on EMBER and EMBER ST___ marks covering gaming.
|
|
245
|
+
- 8,575 live STRIKE(S)/STRIK(E)-formative filings (2,317 claim gaming); analysis focuses on
|
|
246
|
+
STRIKE(S) and E__ STRIKE(S) marks covering gaming.
|
|
247
247
|
|
|
248
248
|
*Filings*
|
|
249
|
-
- **Manageable** — Numerous
|
|
250
|
-
an international
|
|
249
|
+
- **Manageable** — Numerous EMBER/EMBERS marks claim gaming goods/services; most significant is
|
|
250
|
+
an international EMBERS portfolio owned by a gambling company (no apparent current
|
|
251
251
|
use).
|
|
252
|
-
- **Manageable** — Numerous
|
|
253
|
-
objected to the client's ongoing use of ___
|
|
252
|
+
- **Manageable** — Numerous STRIKE marks claim gaming goods/services; none appears to have
|
|
253
|
+
objected to the client's ongoing use of ___ STRIKE for controllers.
|
|
254
254
|
|
|
255
255
|
*Common-law use*
|
|
256
256
|
- **Manageable** — EmberstrikeGaming: streamer/YouTube channel (205 videos, 405 subscribers)
|
|
257
257
|
with a merch store that does not sell hardware/accessories.
|
|
258
|
-
- **Manageable** —
|
|
258
|
+
- **Manageable** — Emberstruck: a 2016 Steam game (444 "very positive" reviews) by an indie studio;
|
|
259
259
|
no game published in ~10 years.
|
|
260
|
-
- **Not a rated conflict (clear win)** — A "Emberstrike Set" appears in several
|
|
260
|
+
- **Not a rated conflict (clear win)** — A "Emberstrike Set" appears in several games of a long-running adventure series; not monetised or
|
|
261
261
|
prominent.
|
|
262
|
-
- **Not a rated conflict (clear win)** —
|
|
262
|
+
- **Not a rated conflict (clear win)** — A studio's co-op shooter "Firestrike" (1,914 "mixed" reviews on Steam).
|
|
263
263
|
|
|
264
264
|
---
|
|
265
265
|
|
|
@@ -292,7 +292,7 @@ manageable.
|
|
|
292
292
|
- **Moderate (register risk; no obvious market overlap)** — a Canadian provincial lottery corporation owns an official Canadian
|
|
293
293
|
registration for CHART YOUR COURSE (all goods/services) used descriptively for self-service lotteries.
|
|
294
294
|
Legal risk, but low practical objection risk — no enforcement history, no commercial overlap with a
|
|
295
|
-
console tagline. A Canadian application would undoubtedly be blocked; consent from
|
|
295
|
+
console tagline. A Canadian application would undoubtedly be blocked; consent from that corporation the only route.
|
|
296
296
|
- **Moderate (register risk; no obvious market overlap)** — A sports broadcaster owns a US registration covering publication of
|
|
297
297
|
physical-fitness games and instruction-sharing websites, for an inactive youth-fitness program. No
|
|
298
298
|
obvious current use. Statement-of-use deadline 27 July 2026 — if not filed (which seems possible),
|
|
@@ -301,7 +301,7 @@ manageable.
|
|
|
301
301
|
via games consoles (among much else), used for a tennis participation campaign and descriptively.
|
|
302
302
|
Revocable for unused goods/services; low confusion with a console tagline; scope likely reducible
|
|
303
303
|
away from gaming services if challenged.
|
|
304
|
-
- **Manageable** — Polish telecom
|
|
304
|
+
- **Manageable** — A Polish telecom owns a Polish registration covering computer game
|
|
305
305
|
software and console game programs; no specific gaming interest; minor use on its careers site;
|
|
306
306
|
low confusion; scope likely reducible away from gaming goods if challenged.
|
|
307
307
|
- **Manageable** — A games-accessory maker holds invalid/lapsed CHART YOUR COURSE filings
|
|
@@ -313,11 +313,11 @@ manageable.
|
|
|
313
313
|
- **Manageable** — "Chart Your Course" platform for sharing love of video games; limited social
|
|
314
314
|
presence.
|
|
315
315
|
- **Manageable** — "Chart Your Course" 2025 mental-health-in-gaming fundraiser (£7,000 raised).
|
|
316
|
-
- **Manageable** — "Chart Your Course" announced as a major update for
|
|
316
|
+
- **Manageable** — "Chart Your Course" announced as a major update for a popular co-op game (~127k
|
|
317
317
|
"overwhelmingly positive" Steam reviews).
|
|
318
318
|
- **Manageable** — "Charting Your Course" arcade-game subscription service.
|
|
319
319
|
- **Not a rated conflict (clear win)** — A third-party Nebula console-streaming app uses "Chart Your Course" descriptively.
|
|
320
|
-
- **Not a rated conflict (clear win)** — PC gaming companion app
|
|
320
|
+
- **Not a rated conflict (clear win)** — A PC gaming companion app has minor descriptive use.
|
|
321
321
|
- **Not a rated conflict (clear win)** — A "Chart Your Course" card-game app and a "Chart My Course" fitness app.
|
|
322
322
|
|
|
323
323
|
---
|
|
@@ -336,18 +336,18 @@ side-glance at **Classes 35 and 39** (retail pizza store / pizza delivery) and *
|
|
|
336
336
|
|
|
337
337
|
### Executive summary (per mark)
|
|
338
338
|
|
|
339
|
-
- **PRIZE CRATE — manageable.** Closest entries: UK registrations for PRIZE CRATE (food, not pizza) and
|
|
340
|
-
|
|
339
|
+
- **PRIZE CRATE — manageable.** Closest entries: UK registrations for PRIZE CRATE (food, not pizza) and PRIZE
|
|
340
|
+
TRUNK (cardboard pizza boxes); confusion unlikely in a Blockvale pizza context, practical objection
|
|
341
341
|
unlikely. Heavy gaming use/registration of PRIZE CRATE but none an immediate obstacle. Note the term's
|
|
342
342
|
specific (often negative) gaming meaning — a PR consideration before use.
|
|
343
343
|
- **CAVERN CRATES — manageable.** Closest is a US application CAVERN CRATE (Class 30, candy); confusion
|
|
344
344
|
unlikely in the Blockvale pizza context, and no obvious use of CAVERN CRATE for candy. Some "Cavern
|
|
345
345
|
Crate" use in a prize-crate context — minor negative-association risk.
|
|
346
|
-
- **
|
|
346
|
+
- **LOCAL CO-OP MEAL — manageable.** "Local co-op" = multiple players sharing one screen/console.
|
|
347
347
|
Numerous supermarket CO(-)OP registrations cover pizza and gaming goods, but given the descriptive
|
|
348
|
-
gaming meaning of "
|
|
349
|
-
- **THE
|
|
350
|
-
- **THE SLICE AND DICE
|
|
348
|
+
gaming meaning of "local co-op" and strong Blockvale branding, confusion is unlikely.
|
|
349
|
+
- **THE RANGER'S SATCHEL: QUEST ESSENTIALS — manageable.**
|
|
350
|
+
- **THE SLICE AND DICE PLATTER — moderate (low end).** An international "pizza and board game" venue trend uses
|
|
351
351
|
"Slice and Dice"-type names (mostly unregistered, low reputation). The moderate rating attaches to an
|
|
352
352
|
Irish registration SLICE N DICE (individual owner) claiming *both* pizza and electronic gaming goods;
|
|
353
353
|
no use found but within the non-use grace period — plausibly a pizza/board-game venture. Given the
|
|
@@ -364,38 +364,38 @@ side-glance at **Classes 35 and 39** (retail pizza store / pizza delivery) and *
|
|
|
364
364
|
- *Potential negative association / PR:* prize crates are tied to "compulsion loop" game design,
|
|
365
365
|
criticised as gambling-style "dark patterns" and increasingly regulated; using "Prize Crate" for a
|
|
366
366
|
gaming-pizza promo could be read as normalising a criticised practice. (Blockvale's natural-chest
|
|
367
|
-
|
|
368
|
-
- *Filings* — **Manageable**:
|
|
367
|
+
prizes are non-monetised, not a gambling-style system.)
|
|
368
|
+
- *Filings* — **Manageable**: A UK technology company owns PRIZE CRATE (Stylised) over broad food/beverage
|
|
369
369
|
(not pizza); no obvious use; not revocable yet, but low practical objection risk (company inactive).
|
|
370
|
-
Prize Crate Retail (UK) owns
|
|
371
|
-
voluntary insolvency, no recent operations, low practical risk.
|
|
372
|
-
owns an international
|
|
373
|
-
third-party
|
|
374
|
-
|
|
370
|
+
Prize Crate Retail (UK) owns PRIZE TRUNK & device over "cardboard pizza boxes" + broad goods; in
|
|
371
|
+
voluntary insolvency, no recent operations, low practical risk. Prize Case (geek subscription boxes)
|
|
372
|
+
owns an international PRIZE CASE portfolio (apparel/paper/toys/retail), not food — no overlap. Numerous
|
|
373
|
+
third-party PRIZE( )CRATE gaming filings — none can block given the term's non-distinctiveness in gaming.
|
|
374
|
+
Crunchmore Foods owns PRIZE / CRUNCHMORE'S PRIZE / EAT. DRINK. GET PRIZE. over Class 30 foods (not pizza) — noted only
|
|
375
375
|
as a large food player; no confusion.
|
|
376
376
|
- *Common-law* — **Manageable**: a virtual unboxing platform "Prize Crate"; "PRIZECRATE Game Store" (card/
|
|
377
|
-
tabletop games); "
|
|
377
|
+
tabletop games); "Prize Drink" gamer energy-drink powder.
|
|
378
378
|
|
|
379
|
-
**THE SLICE AND DICE
|
|
379
|
+
**THE SLICE AND DICE PLATTER — Moderate (low end)**
|
|
380
380
|
- *Distinctiveness/context:* "slice"/"dice" are not very distinctive for pizza (knife actions; "slice"
|
|
381
381
|
= pizza), reflected in 370 live SLICE/DICE filings claiming pizza in Class 30 — so analysis focuses on
|
|
382
382
|
marks with both words or another element bringing them closer; "slice and dice" *is* distinctive for
|
|
383
383
|
non-dice computer games; "dice" is not distinctive for board games.
|
|
384
|
-
- *Filings* — **Moderate (low end; settleable overlap, or paper-only if unused)**:
|
|
384
|
+
- *Filings* — **Moderate (low end; settleable overlap, or paper-only if unused)**: An individual owns an
|
|
385
385
|
Irish SLICE N DICE registration with a detailed gaming list (Class 28) *and* detailed pizza list
|
|
386
386
|
(Class 30) — notable for that specificity. No use found; an international "board game + pizza" café
|
|
387
387
|
trend uses identical "Slice and Dice" branding, plausibly the intent here. Despite the Blockvale
|
|
388
388
|
context, given the identical mark and highly specific pizza+gaming intersection, **Irish counsel
|
|
389
|
-
advice is recommended** (ideally with an example of the proposed use). Also **Manageable**:
|
|
390
|
-
|
|
391
|
-
and in-venue machines don't overlap;
|
|
392
|
-
|
|
389
|
+
advice is recommended** (ideally with an example of the proposed use). Also **Manageable**: an
|
|
390
|
+
Australian gaming-machine maker's SLICE N DICE (AU/US) — vulnerable to cancellation for unused goods,
|
|
391
|
+
and in-venue machines don't overlap; a US casino's SLICE-N-DICE for a casino restaurant;
|
|
392
|
+
a board-game publisher's DICE AND SLICE for a physical pizza-themed strategy game.
|
|
393
393
|
- *Common-law* — **Manageable**: "Slice & Dice" tactical dice roguelike (App Store / Google Play /
|
|
394
394
|
Steam, 1m+ downloads, 2020) — no pizza theme, "dice" refers to the mechanic; confusion unlikely in
|
|
395
395
|
the Blockvale pizza context. Numerous "Slice and Dice"-type pizzerias/bars, some offering tabletop
|
|
396
396
|
gaming — none with reputation enough to confuse. "Slice and Dice" is also the name of a third-party Blockvale mod.
|
|
397
397
|
|
|
398
|
-
*(Full CAVERN CRATES,
|
|
398
|
+
*(Full CAVERN CRATES, LOCAL CO-OP MEAL and THE RANGER'S SATCHEL analyses follow the same chain — owner →
|
|
399
399
|
coverage + distinctiveness → use/revocability → overlap → enforcement → net, in a Blockvale-branded
|
|
400
400
|
promotional context.)*
|
|
401
401
|
|
|
@@ -443,7 +443,7 @@ The crowded-field framing drives the whole mark: a register sweep returned rough
|
|
|
443
443
|
|
|
444
444
|
**Aqua Dawn — Manageable Risk**
|
|
445
445
|
|
|
446
|
-
A register sweep returned roughly 1,900 live DAWN / DAWN-formative filings internationally, but only a small fraction touch beverages or supplements, and the single dominant DAWN right sits in an unrelated cleaning-products field. Analysis focuses on DAWN and
|
|
446
|
+
A register sweep returned roughly 1,900 live DAWN / DAWN-formative filings internationally, but only a small fraction touch beverages or supplements, and the single dominant DAWN right sits in an unrelated cleaning-products field. Analysis focuses on DAWN and SOLSTR___ marks with any Class 5/30/32 claim, and on the coffee-hybrid space the product actually occupies.
|
|
447
447
|
|
|
448
448
|
*Filings*
|
|
449
449
|
- **Manageable** — Procter & Gamble owns the well-known DAWN house mark, but its registrations sit in Class 3 (dishwashing/cleaning) with no beverage or supplement claim located. Famous mark, but a different field entirely; the dilution-style theory a famous-mark owner might raise is remote against a AQUA-led beverage extension, and there is no goods overlap. Noted because the name is prominent, not because it obstructs.
|
|
@@ -74,11 +74,11 @@ A single file inside the active run-dir: `studio/clearance-search/<slug>/<date>/
|
|
|
74
74
|
### Format
|
|
75
75
|
|
|
76
76
|
```markdown
|
|
77
|
-
# Variant manifest —
|
|
77
|
+
# Variant manifest — Dusk: Tales of Lumengarde (2026-05-11)
|
|
78
78
|
|
|
79
79
|
## Request
|
|
80
80
|
|
|
81
|
-
- **Marks:**
|
|
81
|
+
- **Marks:** Dusk: Tales of Lumengarde
|
|
82
82
|
- **Classes:** 9, 28, 41, 42
|
|
83
83
|
- **Jurisdiction:** worldwide
|
|
84
84
|
- **Industry:** gaming
|
|
@@ -89,34 +89,34 @@ A single file inside the active run-dir: `studio/clearance-search/<slug>/<date>/
|
|
|
89
89
|
|
|
90
90
|
## Scope statement
|
|
91
91
|
|
|
92
|
-
Preliminary clearance for "
|
|
92
|
+
Preliminary clearance for "Dusk: Tales of Lumengarde" as a game title, Classes 9/28/41/42, worldwide. Industry-incumbent parallel sweeps apply for LUMENGARDE (lighting electronics).
|
|
93
93
|
|
|
94
94
|
---
|
|
95
95
|
|
|
96
|
-
## Mark:
|
|
96
|
+
## Mark: Dusk: Tales of Lumengarde
|
|
97
97
|
|
|
98
98
|
### Archetype
|
|
99
99
|
|
|
100
|
-
- **Primary:** Descriptive compound (3-word title; LUMENGARDE distinctive,
|
|
100
|
+
- **Primary:** Descriptive compound (3-word title; LUMENGARDE distinctive, DUSK + TALES common saturated commons in gaming)
|
|
101
101
|
- **Modifiers:** None
|
|
102
102
|
- **Boundary note:** LUMENGARDE alone would be a coined-word; the compound title shape places it under descriptive-compound. Coined-word axes (phonetic, transliteration, leet) still apply to LUMENGARDE element-solo.
|
|
103
103
|
|
|
104
104
|
### Distinctiveness & registrability (advisory — the staff lawyer to assess)
|
|
105
105
|
|
|
106
|
-
- **Dominant element:** LUMENGARDE (
|
|
106
|
+
- **Dominant element:** LUMENGARDE (DUSK + TALES are common/descriptive — stripped). Search + conflict-ranking centre here.
|
|
107
107
|
- **Spectrum:** distinctive (LUMENGARDE coined; the compound is arbitrary for gaming). No obvious absolute-grounds problem.
|
|
108
108
|
- **Flags:** none — not descriptive/generic/laudatory/geographic for the goods; not deceptive or offensive.
|
|
109
109
|
|
|
110
110
|
### Risk theory
|
|
111
111
|
|
|
112
|
-
LUMENGARDE is the distinctive anchor — risk concentrates on coined-word axes around that element (phonetic variants, leet, foreign transliteration) plus the Lumengarde Electronics lighting incumbent.
|
|
112
|
+
LUMENGARDE is the distinctive anchor — risk concentrates on coined-word axes around that element (phonetic variants, leet, foreign transliteration) plus the Lumengarde Electronics lighting incumbent. DUSK and TALES are saturated commons; risk there is the single-distinctive-word DUSK-alone or TALES-alone filing in gaming, not crowded-field volume. Compound-phrase exact hit is low-probability but high-impact if it surfaces.
|
|
113
113
|
|
|
114
114
|
### Elements
|
|
115
115
|
|
|
116
116
|
| Element | Role | Saturation | Famous-mark | Notes |
|
|
117
117
|
|---|---|---|---|---|
|
|
118
|
-
|
|
|
119
|
-
|
|
|
118
|
+
| DUSK | common-word | high | no | Evening / sunset; fantasy / adventure |
|
|
119
|
+
| TALES | common-word | very-high | no | Story / myth; epic / fantasy |
|
|
120
120
|
| LUMENGARDE | distinctive | low | no | Industry incumbent: **Lumengarde Electronics Co.** (lighting / LED / semiconductors, classes 9 + 11) — triggers parallel sweep |
|
|
121
121
|
|
|
122
122
|
### Variants
|
|
@@ -140,10 +140,10 @@ silently narrows what was searched, and the deferred row is the honest outcome.
|
|
|
140
140
|
|
|
141
141
|
| Category | Value | Rationale | Verify? |
|
|
142
142
|
|---|---|---|---|
|
|
143
|
-
| exact-phrase |
|
|
143
|
+
| exact-phrase | Dusk: Tales of Lumengarde | full mark | |
|
|
144
144
|
| exact-element | LUMENGARDE | distinctive anchor — primary register vector | |
|
|
145
|
-
| exact-element |
|
|
146
|
-
| exact-element |
|
|
145
|
+
| exact-element | DUSK | common element — single-word coverage hunt | |
|
|
146
|
+
| exact-element | TALES | common element — single-word coverage hunt | |
|
|
147
147
|
| plural-root | LEGEND | tokeniser superset | |
|
|
148
148
|
| phonetic | EVERLITE | homophone, distinctive element | |
|
|
149
149
|
| phonetic | EVRLIGHT | vowel drop | |
|
|
@@ -179,7 +179,7 @@ silently narrows what was searched, and the deferred row is the honest outcome.
|
|
|
179
179
|
### Watchlists
|
|
180
180
|
|
|
181
181
|
- **Aggressive enforcers:** Nordwave, Foxglade Interactive
|
|
182
|
-
- **Major brand owners:**
|
|
182
|
+
- **Major brand owners:** Veltrona, Aureon, Pinecrest, Brightwick, Halloway, Duomark, Skyvault
|
|
183
183
|
- **Competitors:** Epic Games, Valve, Unity, Riot Games
|
|
184
184
|
|
|
185
185
|
### Famous-mark Perplexity calls needed
|
|
@@ -188,7 +188,7 @@ None for this mark.
|
|
|
188
188
|
|
|
189
189
|
### Diligence notes
|
|
190
190
|
|
|
191
|
-
LUMENGARDE carries coined-word axes (phonetic + transliteration) despite the descriptive-compound primary archetype. Industry-incumbent alert triggers a parallel-class 11 sweep.
|
|
191
|
+
LUMENGARDE carries coined-word axes (phonetic + transliteration) despite the descriptive-compound primary archetype. Industry-incumbent alert triggers a parallel-class 11 sweep. DUSK and TALES are saturated commons — still generated as single-word vectors; their saturation tells the downstream register search to **narrow** (class-scope the token and enumerate), it is never a reason to skip the vector here or to pre-judge the crowd clean.
|
|
192
192
|
|
|
193
193
|
---
|
|
194
194
|
|
|
@@ -227,7 +227,7 @@ Pick one **primary** archetype. Pick zero or more **modifiers**. Write a one-lin
|
|
|
227
227
|
**Worked examples:**
|
|
228
228
|
|
|
229
229
|
- "LUMENGARDE" (single mark) → Coined word. No modifier. Risk: phonetic, transliteration, leet, coined-word collisions.
|
|
230
|
-
- "
|
|
230
|
+
- "Dusk: Tales of Lumengarde" → Descriptive compound (DUSK + TALES commons, LUMENGARDE distinctive anchor). No modifier. Risk concentrates on LUMENGARDE element + compound-phrase hit.
|
|
231
231
|
- "CHART YOUR COURSE" → Slogan. No modifier. Risk: family patterns (CHART * COURSE, * YOUR COURSE, CHART YOUR *), verb swaps, slang.
|
|
232
232
|
- "Bloodguard Sabatons" → Descriptive compound + famous-element-masked (Sabatons = Swedish metal band). Risk: per-element famous-mark search on Sabatons; descriptive-compound axes on the rest.
|
|
233
233
|
- "RAIZ8" → Acronym/initialism (leet form of RAISE). Risk: letter-collision; expansion-form search on RAISE.
|
|
@@ -330,7 +330,7 @@ The `phonetic` / `visual-substitution` / `numeric-substitution` / typographic ro
|
|
|
330
330
|
|
|
331
331
|
For multi-word marks where the structure carries meaning (slogans, descriptive compounds), substitute each stem-formative back into the phrase template:
|
|
332
332
|
|
|
333
|
-
- "RAISE YOUR PLAY" → "
|
|
333
|
+
- "RAISE YOUR PLAY" → "LIFTING YOUR PLAY", "RAISE THE PLAY", "RAISING YOUR PLAY", etc.
|
|
334
334
|
- "CHART YOUR COURSE" → "CHARTING YOUR COURSE", "CHART MY COURSE", "CHART THE COURSE", "PLOT YOUR COURSE" (verb swap)
|
|
335
335
|
|
|
336
336
|
Drop ungrammatical or semantically broken strings. Default: generate liberally; macro-count probes filter.
|
|
@@ -54,10 +54,10 @@ A directive may carry a structured `remedy`:
|
|
|
54
54
|
|
|
55
55
|
**A firing `variant` directive — severity `dominant-element` or `material` — MUST be dispatchable.** That means one of exactly two things:
|
|
56
56
|
|
|
57
|
-
1. its `item` is *itself* a single mark-shaped search term (`
|
|
57
|
+
1. its `item` is *itself* a single mark-shaped search term (`WAVA`, `ORBEXA`, `CORAL MAGIC`), **or**
|
|
58
58
|
2. it carries `remedy.terms` naming the mark-shaped term(s) to search.
|
|
59
59
|
|
|
60
|
-
A label-shaped `item` — more than 4 words, a parenthetical, an enumeration ("
|
|
60
|
+
A label-shaped `item` — more than 4 words, a parenthetical, an enumeration ("WAVA (famous CPG snack, one-keystroke neighbour)", "Reverse-order WAVO composites (TROPICAL WAVO, ISLAND WAVO)") — is **never dispatched as a search term**: dispatched verbatim it is a nil search that comes back 0 and reads as a clean, which is worse than no search. So a firing `variant` directive whose item is a label **and which carries no remedy is a PARSE DEFECT** — the driver refuses the file and asks you to restate it, in this same turn, while restating is still free. Every term you put in `remedy.terms` is linted the same way: a remedy that is itself a label is refused exactly like the item was.
|
|
61
61
|
|
|
62
62
|
The refusal names **every** offending directive at once, and it arrives as the tool's answer to your call — in this turn, while restating is still free. Fix them **all** in one further call: the repair ladder counts attempts, not directives, so repairing only the first one loses the rest. A call replaces the stored diff, so send the whole thing again, not only the corrected directives.
|
|
63
63
|
|
package/driver/stage-context.mjs
CHANGED
|
@@ -123,6 +123,19 @@ export const TOOL_GROUP_EDGES = {
|
|
|
123
123
|
{ path: P.bandShapeMd, why: "band_shape serves band-shape.md (the readable shape, part-paged)" },
|
|
124
124
|
{ path: P.registerPositions, why: "the exact-identity projection the shape and the recall join read as one unit" },
|
|
125
125
|
{ path: join(P.runDir, "_records"), dir: true, why: "band_record serves the official registry records fetched into this run" },
|
|
126
|
+
// SEVENTH OCCURRENCE OF THIS TABLE'S OWN SUBJECT, and the arm written to prevent it could not see this
|
|
127
|
+
// one. `band_record` serves a body from `_records/` OR from this log, and at step 2 the real run served
|
|
128
|
+
// placement's reads from the log rather than from files. Undeclared, the sandbox copy held no bodies and
|
|
129
|
+
// every one of those reads failed — measured on five saved runs, where placement opened 31, 32, 2, 2 and
|
|
130
|
+
// 0 records: in the sandbox as shipped, all of them fail.
|
|
131
|
+
//
|
|
132
|
+
// WHY THE GENERIC ARM MISSED IT. That arm walked the servers for `driverDir(runDir, X)` and kept X only
|
|
133
|
+
// when it ended in `.json`; this file ends in `.jsonl`, so it was never in the population the arm
|
|
134
|
+
// checked. The filter stood in for telling a read from a write, since every file the servers write is
|
|
135
|
+
// `.jsonl` too. The walk now makes that distinction itself, at any extension (experiment-context.test.mjs,
|
|
136
|
+
// `driverFileUses`), so this file is held by the same rule as every other read.
|
|
137
|
+
{ path: driverDir(P.runDir, "register-record-bodies.jsonl"),
|
|
138
|
+
why: "band_record serves a record body from this log when the run fetched it through the ledger rather than into _records/ (band-server.mjs recordLedgerPath); without it the sandbox's record reads all fail and the re-run sees less than the stage saw" },
|
|
126
139
|
],
|
|
127
140
|
// ── conversion 11 — THE RECORD TOOL READS A DRIVER-WRITTEN SIDECAR, AND NOTHING DECLARED IT ───────
|
|
128
141
|
//
|
|
@@ -200,13 +213,35 @@ const UNDECLARED = {
|
|
|
200
213
|
// inline and names the `record_coverage` tool), the seat opens no coverage file, and the accumulator
|
|
201
214
|
// the gate judges is declared on VALIDATOR_SIDECARS below. The brief's own read of that accumulator
|
|
202
215
|
// is declared on DISPATCH_EXTRAS.
|
|
203
|
-
|
|
216
|
+
// THE PROMPT NAMES A FILE THE SANDBOX DID NOT COPY, so a re-run of the digest differed from the real
|
|
217
|
+
// stage in one input the prompt names, invisibly: the stage passed. The digest's message ("MARK THE LIST")
|
|
218
|
+
// names the hit list and asks the model to mark lines on it, and `hit-list.mjs` reads those marks back.
|
|
219
|
+
// Absent from the copy, a marking the model sends lands nowhere and nothing refuses — measured on a bench
|
|
220
|
+
// plumbing run where the digest completed with owed 7 accounted 7 and the hit list was simply not there.
|
|
221
|
+
//
|
|
222
|
+
// DECLARED UNCONDITIONALLY, for the reason the digest's accounting stamp above is: `sandboxGaps` reports a
|
|
223
|
+
// gap only for something the CANONICAL run holds, so a run that never built a hit list contributes no gap,
|
|
224
|
+
// and one that built it and lost it in the copy refuses by name. Listing it costs nothing on the first and
|
|
225
|
+
// is the whole point on the second.
|
|
226
|
+
"register-digest": (P) => [
|
|
227
|
+
{ path: P.registerHitList,
|
|
228
|
+
why: "the digest's own message names this file and asks the model to mark lines on it (hit-list.mjs reads the marks back); without it in the copy a marking lands nowhere and the stage passes having been given a different input than the real one" },
|
|
229
|
+
],
|
|
204
230
|
// The provider enforcement telemetry: the prompt names the path only when ctx.enforcerSignals is a
|
|
205
231
|
// non-zero count (stages.mjs synthesis message). Undeclared on purpose — it is aim-attention only and
|
|
206
232
|
// must never move a freshness stamp — but a sandbox without it hands a different prompt.
|
|
207
233
|
synthesis: (P) => [
|
|
208
234
|
{ path: P.enforcerSignals, kind: "conditional",
|
|
209
235
|
why: "named in the prompt only when ctx.enforcerSignals > 0; aim-attention telemetry, deliberately outside the freshness map" },
|
|
236
|
+
// The job's own scope. The prompt never names it, so nothing declared it, and the sandbox rebuilt the
|
|
237
|
+
// declination spec without it: no marks and no classes, so both of the tool's refusals were off in every
|
|
238
|
+
// synthesis arm while the canonical pass had them on.
|
|
239
|
+
{ path: P.instructedScope, kind: "driver-side",
|
|
240
|
+
why: "prepareDeclinationSpec writes the declination spec's scope from it; without it the tool's refusals rest on nothing and accept what the canonical pass refused" },
|
|
241
|
+
// The Chinese-evidence flags, named in the prompt only when ctx.jxAim is set (stages.mjs synthesis
|
|
242
|
+
// message). Undeclared, an arm on a run that had them dispatched without the block.
|
|
243
|
+
{ path: driverDir(P.runDir, "jx", "aim-attention.json"), kind: "conditional",
|
|
244
|
+
why: "named in the prompt only when ctx.jxAim > 0 — the zh lane's aim-attention flags; aim-attention only, deliberately outside the freshness map" },
|
|
210
245
|
],
|
|
211
246
|
};
|
|
212
247
|
|
|
@@ -560,9 +560,10 @@ export const KO_STAGES = {
|
|
|
560
560
|
// be composed by anything except the production call site, which is how a dispatch goes unexamined
|
|
561
561
|
// — and the promise has to branch. A stage message that says "the lines are below" and then lists
|
|
562
562
|
// none has handed the seat an absence dressed as a pass, which is the reading this whole rule
|
|
563
|
-
// exists to stop.
|
|
564
|
-
//
|
|
565
|
-
|
|
563
|
+
// exists to stop. A record the driver's read flags nowhere is handed its first-read lines instead,
|
|
564
|
+
// by the owner's ruling of 2026-10-10, so both branches have rows under them; a record with no such
|
|
565
|
+
// line is not dispatched at all.
|
|
566
|
+
message: ({ K, evidenceLines = [], firstReadLines = [], exclusionNote = "" }) => lines(
|
|
566
567
|
// THE CLIENT'S QUESTION LEADS, in the owner's words (ruling 2026-09-24), ahead of the rewrite job.
|
|
567
568
|
`Does the report answer the client's question: who could object, how strong they are, what the client should do? Are the marks a lawyer would list present, and is each position written from the record that matters? Answer that before any check on wording.`,
|
|
568
569
|
reads(["skills/clearance-search/report-prose.md"]),
|
|
@@ -571,8 +572,8 @@ export const KO_STAGES = {
|
|
|
571
572
|
`The rated record: ${K.findings}. Read it — the lines named below are quoted from it and you are rewriting them in place.`,
|
|
572
573
|
evidenceLines.length
|
|
573
574
|
? `THE DRIVER MEASURED THESE LINES. Each row is the line, the ADDRESS that names it, and what a deterministic read found. THIS IS EVIDENCE, NOT A VERDICT: judge each in context and pass over any where the word is the subject rather than the profession's shorthand. ${exclusionNote}`
|
|
574
|
-
: `THE DRIVER'S READ FLAGGED NO LINE ON THIS RECORD, so
|
|
575
|
-
...evidenceLines,
|
|
575
|
+
: `THE DRIVER'S READ FLAGGED NO LINE ON THIS RECORD, so nothing below is evidence of a fault. These are the lines a reader meets first, each with the ADDRESS that names it. Rewrite one only where it would answer the client's question more plainly; if every line already does, send one \`declined\` row at one of these addresses saying so, rather than inventing a rewrite to fill the call.`,
|
|
576
|
+
...(evidenceLines.length ? evidenceLines : firstReadLines),
|
|
576
577
|
// ── THE DICTATION NAMES THE FIELD, NOT AN EFFECT ────────────────────────────────
|
|
577
578
|
//
|
|
578
579
|
// "Make the report plainer" is read and not applied, and nothing refuses — it simply does not
|