dsh-loci 3.0.0 → 3.0.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/CHANGELOG.md CHANGED
@@ -4,6 +4,50 @@ All notable changes to this project are documented here. The format follows
4
4
  [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); the project follows
5
5
  [Semantic Versioning](https://semver.org/spec/v2.0.0.html) from 1.0.0.
6
6
 
7
+ ## [3.0.1] — 2026-11-15
8
+
9
+ The 3.0.0 card was correct markup with no stylesheet, and the screenshot showed it.
10
+
11
+ ### Fixed
12
+
13
+ - **The card was never styled outside the panel.** Every `.loci-*` rule lives in one CSS
14
+ template string that only `MemoryPanel` and `SettingsSection` render as a `<style>`
15
+ element. In the sidebar, with the panel closed, no `<style>` existed — so the card's DOM
16
+ was right and its layout was simply absent. That is what "bare text in the sidebar"
17
+ looked like, and it predates 3.0.0: the first screenshot showed it too. The card now
18
+ renders the stylesheet itself, and so does its rail variant.
19
+
20
+ - **`card.pending` was defined twice.** The old value was the sentence
21
+ `'{n} still need your review'`; 3.0.0 added a bare `'Pending'` label for the metric row,
22
+ and the later definition won — so the card printed the sentence with an unsubstituted
23
+ `{n}`. The sentence is now `card.pendingSentence` and the label stays `Pending`.
24
+
25
+ - **The version chip rendered as `v3. 0. 0`.** The chip used
26
+ `ui-monospace, SFMono-Regular, Menlo, monospace`, which on Windows falls back to a
27
+ monospace face whose period is centred in a wide advance; at 8.5px that reads as gaps
28
+ between the digits. Measured with `getComputedStyle`: `letter-spacing: normal`,
29
+ `word-spacing: 0`, width 25.50 — the spacing was correct, the **glyph** was not. The chip
30
+ now inherits the UI font with tabular figures, at 9px.
31
+
32
+ ### Added
33
+
34
+ - **`scripts/shot-card.mjs`** renders the sidebar card to a PNG using the stylesheet
35
+ extracted from `client.js` and the DOM the component produces, through headless Edge. It
36
+ cannot catch a logic mistake, only a drawing one — but a drawing mistake is exactly what
37
+ shipped twice, and a screenshot is the only review that shows it.
38
+
39
+ ### Not added
40
+
41
+ Four guard files from the previous draft (a separate client-i18n test, an English-only test,
42
+ a CSS-shape assertion and a manifest check) were collapsed into **one** test file and one
43
+ manifest assertion. Guards that outnumber the behaviour they protect get deleted by the next
44
+ person, which is worse than not having them.
45
+
46
+ ### Corrected in the record
47
+
48
+ The 3.0.0 log entry said the card had been verified. It had not been looked at. The entry
49
+ above records what the screenshot showed.
50
+
7
51
  ## [3.0.0] — 2026-11-15
8
52
 
9
53
  The sidebar card was not a card, and the plugin had a second language it did not need.
package/client.js CHANGED
@@ -45,7 +45,7 @@ window.__ModuleLoader__.load({
45
45
  'card.dead': 'Dead',
46
46
  'card.pendingHint': '{n} item(s) waiting for you in Review.',
47
47
  'card.updated': 'updated',
48
- 'card.pending': '{n} still need your review',
48
+ 'card.pendingSentence': '{n} still need your review',
49
49
  'card.pinned': 'pinned',
50
50
  'card.open': 'Open memory',
51
51
  'card.check': 'Check for updates',
@@ -172,7 +172,7 @@ window.__ModuleLoader__.load({
172
172
  .loci-card-root.is-rail { flex: 0 0 auto; padding: 6px; align-items: center; justify-content: center; }
173
173
  .loci-card-head { display: flex; align-items: center; gap: 6px; min-width: 0; width: 100%; }
174
174
  .loci-card-title { font-size: 13px; font-weight: 700; letter-spacing: -.01em; white-space: nowrap; }
175
- .loci-card-ver { flex: 0 0 auto; margin: 0; padding: 0; border: 0; background: transparent; color: var(--dsw-alias-label-secondary); font-size: 8.5px; line-height: 1.2; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; cursor: pointer; white-space: nowrap; }
175
+ .loci-card-ver { flex: 0 0 auto; margin: 0; padding: 0; border: 0; background: transparent; color: var(--dsw-alias-label-secondary); font-size: 9px; line-height: 1.2; font-family: inherit; font-variant-numeric: tabular-nums; cursor: pointer; white-space: nowrap; }
176
176
  .loci-card-ver:hover { color: var(--dsw-alias-label-primary); }
177
177
  .loci-card-dot { width: 5px; height: 5px; border-radius: 50%; background: var(--dsw-alias-brand-primary); flex: 0 0 auto; }
178
178
  .loci-card-dot.is-warn { background: var(--dsw-alias-state-warn-primary); }
@@ -479,6 +479,7 @@ window.__ModuleLoader__.load({
479
479
  'aria-label': t('card.open'),
480
480
  onClick: () => open?.(),
481
481
  },
482
+ h('style', null, CSS),
482
483
  h('svg', { width: 18, height: 18, viewBox: '0 0 24 24', fill: 'none', 'aria-hidden': true },
483
484
  h('path', { d: 'M4 6.5h16M4 12h16M4 17.5h10', stroke: 'currentColor', strokeWidth: 1.7, strokeLinecap: 'round' }),
484
485
  h('circle', { cx: 18.5, cy: 17.5, r: 2.2, stroke: 'currentColor', strokeWidth: 1.5 }),
@@ -507,6 +508,7 @@ window.__ModuleLoader__.load({
507
508
  if (event.key === 'Enter' || event.key === ' ') open?.();
508
509
  },
509
510
  },
511
+ h('style', null, CSS),
510
512
  h(
511
513
  'div',
512
514
  { className: 'loci-card-head' },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-loci",
3
- "version": "3.0.0",
3
+ "version": "3.0.1",
4
4
  "description": "Layered long-term memory for DeepSeek Harness: the prompt sees only a stable index, full text is one lookup away. Bi-temporal facts, strict scope isolation, verified-only injection.",
5
5
  "type": "module",
6
6
  "license": "MIT",
package/src/host/index.js CHANGED
@@ -23,7 +23,7 @@ import { registerCommands } from './commands.js';
23
23
  import { runDoctor } from './doctor.js';
24
24
 
25
25
  /** Version stamped into the database and diagnostics. */
26
- export const VERSION = '3.0.0';
26
+ export const VERSION = '3.0.1';
27
27
 
28
28
  /** Optional collaborators; without them the plugin still serves tools. */
29
29
  export const inject = ['systemPrompt', 'tools'];
@@ -36,7 +36,7 @@ export function openFacadeStore(options = {}) {
36
36
  memoryRoot: root,
37
37
  paths,
38
38
  config,
39
- pluginVersion: '3.0.0',
39
+ pluginVersion: '3.0.1',
40
40
  readOnly: options.readOnly === true,
41
41
  });
42
42
  return { store, paths };