emdash-emit 0.1.14 → 0.1.16

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 (144) hide show
  1. package/CHANGELOG.md +96 -1
  2. package/README.md +259 -188
  3. package/dist/bin/emit.d.ts.map +1 -1
  4. package/dist/bin/emit.js +2 -0
  5. package/dist/bin/emit.js.map +1 -1
  6. package/dist/cli/commands/doctor.d.ts.map +1 -1
  7. package/dist/cli/commands/doctor.js +6 -0
  8. package/dist/cli/commands/doctor.js.map +1 -1
  9. package/dist/cli/commands/media.d.ts +4 -0
  10. package/dist/cli/commands/media.d.ts.map +1 -0
  11. package/dist/cli/commands/media.js +128 -0
  12. package/dist/cli/commands/media.js.map +1 -0
  13. package/dist/cli/commands/pull.d.ts +32 -0
  14. package/dist/cli/commands/pull.d.ts.map +1 -1
  15. package/dist/cli/commands/pull.js +136 -9
  16. package/dist/cli/commands/pull.js.map +1 -1
  17. package/dist/cli/commands/push.d.ts.map +1 -1
  18. package/dist/cli/commands/push.js +18 -0
  19. package/dist/cli/commands/push.js.map +1 -1
  20. package/dist/cli/commands/status.d.ts.map +1 -1
  21. package/dist/cli/commands/status.js +16 -5
  22. package/dist/cli/commands/status.js.map +1 -1
  23. package/dist/client/media.d.ts.map +1 -1
  24. package/dist/client/media.js +16 -5
  25. package/dist/client/media.js.map +1 -1
  26. package/dist/db/cache.d.ts +19 -4
  27. package/dist/db/cache.d.ts.map +1 -1
  28. package/dist/db/cache.js +127 -16
  29. package/dist/db/cache.js.map +1 -1
  30. package/dist/mcp/server.d.ts.map +1 -1
  31. package/dist/mcp/server.js +7 -3
  32. package/dist/mcp/server.js.map +1 -1
  33. package/dist/mcp/tools/sync-doctor.d.ts.map +1 -1
  34. package/dist/mcp/tools/sync-doctor.js +12 -0
  35. package/dist/mcp/tools/sync-doctor.js.map +1 -1
  36. package/dist/mcp/tools/sync-media-search.d.ts +4 -0
  37. package/dist/mcp/tools/sync-media-search.d.ts.map +1 -0
  38. package/dist/mcp/tools/sync-media-search.js +102 -0
  39. package/dist/mcp/tools/sync-media-search.js.map +1 -0
  40. package/dist/mcp/tools/sync-pull.d.ts.map +1 -1
  41. package/dist/mcp/tools/sync-pull.js +85 -13
  42. package/dist/mcp/tools/sync-pull.js.map +1 -1
  43. package/dist/mcp/tools/sync-push.d.ts.map +1 -1
  44. package/dist/mcp/tools/sync-push.js +5 -0
  45. package/dist/mcp/tools/sync-push.js.map +1 -1
  46. package/dist/mcp/tools/sync-status.d.ts.map +1 -1
  47. package/dist/mcp/tools/sync-status.js +6 -2
  48. package/dist/mcp/tools/sync-status.js.map +1 -1
  49. package/dist/sync/delete.d.ts +2 -1
  50. package/dist/sync/delete.d.ts.map +1 -1
  51. package/dist/sync/delete.js +6 -19
  52. package/dist/sync/delete.js.map +1 -1
  53. package/dist/sync/diff.d.ts.map +1 -1
  54. package/dist/sync/diff.js +18 -2
  55. package/dist/sync/diff.js.map +1 -1
  56. package/dist/sync/doctor.d.ts +27 -1
  57. package/dist/sync/doctor.d.ts.map +1 -1
  58. package/dist/sync/doctor.js +309 -26
  59. package/dist/sync/doctor.js.map +1 -1
  60. package/dist/sync/guards.d.ts +45 -0
  61. package/dist/sync/guards.d.ts.map +1 -0
  62. package/dist/sync/guards.js +236 -0
  63. package/dist/sync/guards.js.map +1 -0
  64. package/dist/sync/media/body_scan.d.ts +15 -0
  65. package/dist/sync/media/body_scan.d.ts.map +1 -0
  66. package/dist/sync/media/body_scan.js +132 -0
  67. package/dist/sync/media/body_scan.js.map +1 -0
  68. package/dist/sync/media/companions.d.ts +32 -0
  69. package/dist/sync/media/companions.d.ts.map +1 -0
  70. package/dist/sync/media/companions.js +260 -0
  71. package/dist/sync/media/companions.js.map +1 -0
  72. package/dist/sync/media/index.d.ts +9 -0
  73. package/dist/sync/media/index.d.ts.map +1 -0
  74. package/dist/sync/media/index.js +9 -0
  75. package/dist/sync/media/index.js.map +1 -0
  76. package/dist/sync/media/mirror_item.d.ts +27 -0
  77. package/dist/sync/media/mirror_item.d.ts.map +1 -0
  78. package/dist/sync/media/mirror_item.js +207 -0
  79. package/dist/sync/media/mirror_item.js.map +1 -0
  80. package/dist/sync/media/naming_mirror.d.ts +36 -0
  81. package/dist/sync/media/naming_mirror.d.ts.map +1 -0
  82. package/dist/sync/media/naming_mirror.js +143 -0
  83. package/dist/sync/media/naming_mirror.js.map +1 -0
  84. package/dist/sync/media/pull_article.d.ts +37 -0
  85. package/dist/sync/media/pull_article.d.ts.map +1 -0
  86. package/dist/sync/media/pull_article.js +273 -0
  87. package/dist/sync/media/pull_article.js.map +1 -0
  88. package/dist/sync/media/pull_library.d.ts +12 -0
  89. package/dist/sync/media/pull_library.d.ts.map +1 -0
  90. package/dist/sync/media/pull_library.js +255 -0
  91. package/dist/sync/media/pull_library.js.map +1 -0
  92. package/dist/sync/media/remote_index.d.ts +49 -0
  93. package/dist/sync/media/remote_index.d.ts.map +1 -0
  94. package/dist/sync/media/remote_index.js +241 -0
  95. package/dist/sync/media/remote_index.js.map +1 -0
  96. package/dist/sync/media/types.d.ts +237 -0
  97. package/dist/sync/media/types.d.ts.map +1 -0
  98. package/dist/sync/media/types.js +11 -0
  99. package/dist/sync/media/types.js.map +1 -0
  100. package/dist/sync/media.d.ts +1 -74
  101. package/dist/sync/media.d.ts.map +1 -1
  102. package/dist/sync/media.js +1 -592
  103. package/dist/sync/media.js.map +1 -1
  104. package/dist/sync/orchestrator.d.ts +23 -0
  105. package/dist/sync/orchestrator.d.ts.map +1 -1
  106. package/dist/sync/orchestrator.js +85 -1
  107. package/dist/sync/orchestrator.js.map +1 -1
  108. package/dist/sync/preflight.d.ts +1 -1
  109. package/dist/sync/preflight.d.ts.map +1 -1
  110. package/dist/sync/preflight.js +129 -17
  111. package/dist/sync/preflight.js.map +1 -1
  112. package/dist/sync/pull.d.ts +19 -0
  113. package/dist/sync/pull.d.ts.map +1 -1
  114. package/dist/sync/pull.js +169 -15
  115. package/dist/sync/pull.js.map +1 -1
  116. package/dist/sync/push.d.ts +7 -0
  117. package/dist/sync/push.d.ts.map +1 -1
  118. package/dist/sync/push.js +37 -10
  119. package/dist/sync/push.js.map +1 -1
  120. package/dist/sync/status.d.ts +4 -0
  121. package/dist/sync/status.d.ts.map +1 -1
  122. package/dist/sync/status.js +68 -4
  123. package/dist/sync/status.js.map +1 -1
  124. package/dist/utils/config.d.ts +25 -0
  125. package/dist/utils/config.d.ts.map +1 -1
  126. package/dist/utils/config.js +28 -2
  127. package/dist/utils/config.js.map +1 -1
  128. package/dist/utils/frontmatter.d.ts +1 -1
  129. package/dist/utils/frontmatter.d.ts.map +1 -1
  130. package/dist/utils/frontmatter.js +15 -4
  131. package/dist/utils/frontmatter.js.map +1 -1
  132. package/dist/utils/media-body-refs.d.ts +81 -0
  133. package/dist/utils/media-body-refs.d.ts.map +1 -0
  134. package/dist/utils/media-body-refs.js +240 -0
  135. package/dist/utils/media-body-refs.js.map +1 -0
  136. package/dist/utils/media-refs.d.ts +44 -0
  137. package/dist/utils/media-refs.d.ts.map +1 -0
  138. package/dist/utils/media-refs.js +101 -0
  139. package/dist/utils/media-refs.js.map +1 -0
  140. package/dist/utils/naming.d.ts +31 -0
  141. package/dist/utils/naming.d.ts.map +1 -1
  142. package/dist/utils/naming.js +58 -0
  143. package/dist/utils/naming.js.map +1 -1
  144. package/package.json +1 -1
@@ -24,29 +24,88 @@ import path from 'node:path';
24
24
  import yaml from 'js-yaml';
25
25
  import { getPackageVersion } from '../utils/version.js';
26
26
  import { parseMarkdown, lenientRepairMarkdownFrontmatter } from '../utils/frontmatter.js';
27
+ import { storageKeyToMarkdownRef } from '../utils/naming.js';
27
28
  import { listConflicts } from './conflicts.js';
28
29
  import { getWorkspaceStatus } from './status.js';
29
30
  import { calculateHash } from './pull.js';
31
+ import { collectRemoteStorageKeys, storageKeyFromMediaMeta, } from './media.js';
30
32
  import { checkMcpProcess } from '../mcp/heartbeat.js';
33
+ import { VALID_MEDIA_FILE_KEY, MEDIA_FILE_ROUTE_PREFIX, FENCE_POLICY, isCodeFenceDelimiter, } from '../utils/media-refs.js';
34
+ /**
35
+ * Counts the media assets this workspace actually mirrors: canonical binaries under `media/`, excluding
36
+ * `drafts/` staging and the `legacy_*` residue that backs no real record.
37
+ */
38
+ function countMirroredMedia(mediaDir) {
39
+ if (!fs.existsSync(mediaDir))
40
+ return 0;
41
+ let count = 0;
42
+ for (const file of fs.readdirSync(mediaDir)) {
43
+ if (file.endsWith('.yaml') || file.startsWith('legacy_'))
44
+ continue;
45
+ if (!fs.statSync(path.join(mediaDir, file)).isFile())
46
+ continue;
47
+ count++;
48
+ }
49
+ return count;
50
+ }
51
+ /** Any storageKey-style ULID appearing inside a media file URL. */
52
+ const MEDIA_ULID_IN_URL = /[0-9A-HJ-NP-Z]{26}/g;
53
+ /** True when the captured image markup sits inside an inline code span on the same line. */
54
+ function isInlineCodeSpan(line, matchText, matchIndex) {
55
+ if (line.includes('`' + matchText))
56
+ return true;
57
+ const first = line.indexOf('`');
58
+ return first !== -1 && first < matchIndex && matchIndex < line.lastIndexOf('`');
59
+ }
60
+ /**
61
+ * Classify a captured media URL. Anything that cannot name a real asset (template placeholders, or
62
+ * a key polluted by leaked markup) is reported separately so it never counts as missing media.
63
+ */
64
+ function classifyMediaUrl(url) {
65
+ if (url.includes('<') || url.includes('>') || url.includes('${'))
66
+ return 'placeholder';
67
+ const keyMatch = url.match(/(?:^|\/)media\/file\/([^?#]*)/);
68
+ if (!keyMatch)
69
+ return 'valid'; // a plain local path: resolved by filesystem checks instead
70
+ if (VALID_MEDIA_FILE_KEY.test(keyMatch[1]))
71
+ return 'valid';
72
+ // A ULID is present but the captured key is polluted by leaked markup, as in the real legacy
73
+ // body line `![alt](/_emdash/api/media/file/<ULID>.jpg" control=true)`. The asset itself still
74
+ // resolves through the ULID, so only the surrounding capture is treated as residue.
75
+ return MEDIA_ULID_IN_URL.test(keyMatch[1]) ? 'valid' : 'invalid';
76
+ }
31
77
  /**
32
78
  * Scans article markdown to separate standard body image references from
33
- * informational references (code blocks, inline code, HTML comments, or placeholder URLs).
79
+ * informational references (code blocks, inline code, HTML comments, opaque custom-block fences,
80
+ * or placeholder URLs) and from structurally invalid captures.
34
81
  */
35
82
  export function scanArticleMediaDetailed(bodyMarkdown) {
36
83
  const normalRefs = new Set();
37
84
  const informationalRefs = new Set();
85
+ const invalidRefs = new Set();
38
86
  const lines = bodyMarkdown.split('\n');
39
87
  let inFence = false;
40
88
  let fenceDelimiter = '';
89
+ // EmDash serializes unknown Portable Text blocks as single-line opaque fences
90
+ // (`<!--ec:block {...} -->`). Their embedded JSON may contain media URLs that belong to the
91
+ // remote block, not to editable markdown, so they must never be reported as missing.
92
+ let inOpaqueFence = false;
41
93
  for (const line of lines) {
42
94
  const trimmed = line.trim();
95
+ if (/^<!--ec:block\s/.test(trimmed)) {
96
+ inOpaqueFence = !/^.*-->$/.test(trimmed);
97
+ continue;
98
+ }
99
+ if (inOpaqueFence)
100
+ continue;
43
101
  // Note: Doctor treats both backticks and tildes (~~~) as fences for diagnostic
44
102
  // reporting to avoid false warnings on code examples, whereas push guards (G5/G11)
45
103
  // strictly exempt only backtick fences per AGENTS.md.
46
- if (trimmed.startsWith('```') || trimmed.startsWith('~~~')) {
104
+ const delim = isCodeFenceDelimiter(trimmed, FENCE_POLICY.diagnostic);
105
+ if (delim) {
47
106
  if (!inFence) {
48
107
  inFence = true;
49
- fenceDelimiter = trimmed.slice(0, 3);
108
+ fenceDelimiter = delim;
50
109
  continue;
51
110
  }
52
111
  else if (trimmed.startsWith(fenceDelimiter)) {
@@ -60,12 +119,13 @@ export function scanArticleMediaDetailed(bodyMarkdown) {
60
119
  while ((match = mdRegex.exec(line)) !== null) {
61
120
  const url = match[1].trim();
62
121
  if (!url.startsWith('http://') && !url.startsWith('https://') && !url.startsWith('data:')) {
63
- const isPlaceholder = url.includes('<') && url.includes('>');
64
- const isInlineCode = line.includes('`' + match[0]) ||
65
- (line.indexOf('`') !== -1 &&
66
- line.indexOf('`') < match.index &&
67
- match.index < line.lastIndexOf('`'));
68
- if (inFence || isInlineCode || isPlaceholder) {
122
+ const kind = classifyMediaUrl(url);
123
+ if (kind === 'invalid') {
124
+ invalidRefs.add(url);
125
+ }
126
+ else if (inFence ||
127
+ isInlineCodeSpan(line, match[0], match.index) ||
128
+ kind === 'placeholder') {
69
129
  informationalRefs.add(url);
70
130
  }
71
131
  else {
@@ -78,8 +138,11 @@ export function scanArticleMediaDetailed(bodyMarkdown) {
78
138
  while ((match = htmlRegex.exec(line)) !== null) {
79
139
  const url = match[1].trim();
80
140
  if (!url.startsWith('http://') && !url.startsWith('https://') && !url.startsWith('data:')) {
81
- const isPlaceholder = url.includes('<') && url.includes('>');
82
- if (inFence || isPlaceholder || line.includes('<!--')) {
141
+ const kind = classifyMediaUrl(url);
142
+ if (kind === 'invalid') {
143
+ invalidRefs.add(url);
144
+ }
145
+ else if (inFence || kind === 'placeholder' || line.includes('<!--')) {
83
146
  informationalRefs.add(url);
84
147
  }
85
148
  else {
@@ -87,10 +150,22 @@ export function scanArticleMediaDetailed(bodyMarkdown) {
87
150
  }
88
151
  }
89
152
  }
153
+ // Legacy WordPress-derived custom container lines that survived the migration, e.g.
154
+ // `[dimage url="/_emdash/api/media/file/<ULID>.jpg" control=true]`. The URL is quoted inside
155
+ // the line, so the regexes above cannot capture it; a trailing attribute or bracket marks the
156
+ // capture as markup residue rather than a real asset reference.
157
+ const legacyContainerRegex = /\[([a-z]+)\s+url=["']?([^"'\s\]]+)["']?[^\]]*\]/gi;
158
+ while ((match = legacyContainerRegex.exec(line)) !== null) {
159
+ const url = match[2].trim();
160
+ if (!url.startsWith('http://') && !url.startsWith('https://') && !url.startsWith('data:')) {
161
+ informationalRefs.add(url);
162
+ }
163
+ }
90
164
  }
91
165
  return {
92
166
  normalRefs: Array.from(normalRefs).sort(),
93
167
  informationalRefs: Array.from(informationalRefs).sort(),
168
+ invalidRefs: Array.from(invalidRefs).sort(),
94
169
  };
95
170
  }
96
171
  /**
@@ -138,6 +213,7 @@ export async function runWorkspaceDoctor(options) {
138
213
  }
139
214
  // 3. Frontmatter Syntax & Schema Integrity Check
140
215
  const invalidFiles = [];
216
+ const healableFiles = [];
141
217
  let totalArticles = 0;
142
218
  for (const status of ['draft', 'published']) {
143
219
  const dir = path.join(options.workspaceRoot, collection, status);
@@ -157,6 +233,7 @@ export async function runWorkspaceDoctor(options) {
157
233
  const healed = lenientRepairMarkdownFrontmatter(content);
158
234
  if (healed) {
159
235
  parseMarkdown(healed);
236
+ healableFiles.push(path.join(collection, status, file));
160
237
  }
161
238
  else {
162
239
  throw new Error('Unrecoverable parse error');
@@ -177,6 +254,15 @@ export async function runWorkspaceDoctor(options) {
177
254
  details: invalidFiles,
178
255
  });
179
256
  }
257
+ else if (healableFiles.length > 0) {
258
+ checks.push({
259
+ id: 'frontmatter_integrity',
260
+ name: 'Frontmatter Integrity',
261
+ status: 'warning',
262
+ message: `${healableFiles.length} article(s) have invalid frontmatter YAML that Emit can repair automatically. Run "emit pull" (syntax-only re-quoting; local body is strictly preserved).`,
263
+ details: healableFiles,
264
+ });
265
+ }
180
266
  else {
181
267
  checks.push({
182
268
  id: 'frontmatter_integrity',
@@ -341,32 +427,56 @@ export async function runWorkspaceDoctor(options) {
341
427
  });
342
428
  }
343
429
  // 6. Media References Integrity Check
344
- // Index all local media companion YAMLs and files to resolve both local paths and storageKey URLs (D1)
430
+ // Index every local resolution source so a body URL can be matched even when the companion YAML
431
+ // is missing its storageKey field, which is common for legacy corpora (D1)
345
432
  const mediaDir = path.join(options.workspaceRoot, 'media');
346
433
  const knownStorageKeys = new Set();
347
434
  const knownMediaIds = new Set();
348
435
  const knownLocalFiles = new Set();
436
+ // StorageKey-derived stems of mirrored assets. A body URL carries the storageKey, and a mirror is now
437
+ // named after exactly that key, so the stem — not a filename tail parsed out of an id-based name — is
438
+ // what lets `/_emdash/api/media/file/<storageKey>` resolve to a file on disk.
439
+ const knownMediaStems = new Set();
349
440
  if (fs.existsSync(mediaDir)) {
350
441
  const mediaFiles = fs.readdirSync(mediaDir);
351
442
  for (const f of mediaFiles) {
352
443
  knownLocalFiles.add(f);
353
444
  knownLocalFiles.add(path.posix.join('media', f));
445
+ if (f.startsWith('legacy_')) {
446
+ // Leftover mirrors from the removed file-route fallback must never feed the known-storageKey
447
+ // or known-media-id sets: they back no real media record, so a body referencing them stays a
448
+ // missing-file warning and `--check-media-urls` can still downgrade it to a served note.
449
+ continue;
450
+ }
354
451
  if (f.endsWith('.yaml')) {
355
452
  try {
356
453
  const doc = yaml.load(fs.readFileSync(path.join(mediaDir, f), 'utf8'));
357
454
  if (doc) {
358
- if (typeof doc.storageKey === 'string' && doc.storageKey) {
359
- knownStorageKeys.add(doc.storageKey);
360
- }
361
455
  if (typeof doc.id === 'string' && doc.id) {
362
456
  knownMediaIds.add(doc.id);
363
457
  }
458
+ // The storageKey field is missing on older mirrors, but their `url:` still names the key,
459
+ // so both forms count as confirmed local metadata.
460
+ const metaKey = storageKeyFromMediaMeta(doc);
461
+ if (metaKey)
462
+ knownStorageKeys.add(metaKey);
364
463
  }
365
464
  }
366
465
  catch {
367
466
  // ignore corrupted individual yaml
368
467
  }
369
468
  }
469
+ else {
470
+ // media/<markdownRef>.<ext>: the stem is the sanitized storageKey, so it is recorded whole and
471
+ // matched against the key a body URL carries. Legacy id-based names stay readable too, because a
472
+ // workspace that has not been re-pulled yet still holds them.
473
+ const stem = f.replace(/\.[^.]+$/, '');
474
+ knownMediaStems.add(stem);
475
+ knownMediaStems.add(stem.replace(/^\d{8}_/, ''));
476
+ const dash = stem.indexOf('-');
477
+ if (dash !== -1)
478
+ knownMediaStems.add(stem.slice(dash + 1));
479
+ }
370
480
  }
371
481
  const draftsDir = path.join(mediaDir, 'drafts');
372
482
  if (fs.existsSync(draftsDir)) {
@@ -376,8 +486,48 @@ export async function runWorkspaceDoctor(options) {
376
486
  }
377
487
  }
378
488
  }
489
+ // Cache-backed fallbacks: media_state records the confirmed storageKey of every asset Emit
490
+ // uploaded, and base snapshots preserve the remote featured_image object (which carries
491
+ // meta.storageKey) for articles whose local frontmatter only holds the media record id.
492
+ for (const record of options.cache.listMediaStates()) {
493
+ if (record.storageKey)
494
+ knownStorageKeys.add(record.storageKey);
495
+ if (record.mediaId)
496
+ knownMediaIds.add(record.mediaId);
497
+ }
498
+ const knownFeaturedStorageKeys = new Set();
499
+ for (const state of options.cache.getAllSyncStates()) {
500
+ const snapshot = options.cache.getBaseSnapshot(state.id);
501
+ if (!snapshot?.frontmatterYaml)
502
+ continue;
503
+ try {
504
+ const fm = JSON.parse(snapshot.frontmatterYaml);
505
+ const fi = fm.featuredImage ?? fm.featured_image;
506
+ const meta = fi?.meta;
507
+ if (typeof meta?.storageKey === 'string' && meta.storageKey) {
508
+ knownFeaturedStorageKeys.add(meta.storageKey);
509
+ }
510
+ }
511
+ catch {
512
+ // baseline frontmatter is JSON-encoded by contract; ignore unreadable snapshots
513
+ }
514
+ }
379
515
  const missingMedia = [];
516
+ // References that survived every local fallback yet are still served by the public file route. The
517
+ // live HEAD (only when --check-media-urls is set) proves the R2 object exists; it says nothing about
518
+ // whether a D1 record exists, because the probe addresses the storageKey and not the primary key.
519
+ const verifiedFileRouteOnly = [];
520
+ const unreachableFileRoute = [];
380
521
  const informationalUnresolved = [];
522
+ const invalidMediaRefs = [];
523
+ // Candidates that survived every local fallback; probed live only when checkMediaUrls is enabled.
524
+ const pendingRemoteProbes = [];
525
+ const probeKey = (ref) => {
526
+ const m = ref.match(/(?:^|\/)media\/file\/([^?#]+)/);
527
+ if (!m)
528
+ return null;
529
+ return VALID_MEDIA_FILE_KEY.test(m[1]) ? m[1] : null;
530
+ };
381
531
  for (const status of ['draft', 'published']) {
382
532
  const dir = path.join(options.workspaceRoot, collection, status);
383
533
  if (!fs.existsSync(dir))
@@ -392,38 +542,160 @@ export async function runWorkspaceDoctor(options) {
392
542
  const storageKeyMatch = ref.match(/(?:^|\/)media\/file\/([^?#]+)/);
393
543
  if (storageKeyMatch) {
394
544
  const key = storageKeyMatch[1];
395
- return knownStorageKeys.has(key);
545
+ if (knownStorageKeys.has(key))
546
+ return true;
547
+ // The body URL may carry the media record id instead of the storageKey, or a key whose
548
+ // companion YAML lacks the field: resolve by ULID, then by the mirror stem that names the key.
549
+ const ulidMatch = key.match(/[0-9A-HJ-NP-Z]{26}/);
550
+ if (ulidMatch && knownMediaIds.has(ulidMatch[0].toUpperCase()))
551
+ return true;
552
+ const keyStem = storageKeyToMarkdownRef(key);
553
+ if (keyStem && knownMediaStems.has(keyStem))
554
+ return true;
555
+ for (const stem of knownMediaStems) {
556
+ if (key.endsWith(stem))
557
+ return true;
558
+ }
559
+ return knownFeaturedStorageKeys.has(key);
396
560
  }
397
561
  // Check 2: Direct relative or local filesystem path
398
562
  const cleanRef = ref.replace(/^[./]+/, '');
399
563
  const directFull = path.isAbsolute(ref) ? ref : path.join(options.workspaceRoot, ref);
400
- return (fs.existsSync(directFull) || knownLocalFiles.has(ref) || knownLocalFiles.has(cleanRef));
564
+ if (fs.existsSync(directFull) ||
565
+ knownLocalFiles.has(ref) ||
566
+ knownLocalFiles.has(cleanRef)) {
567
+ return true;
568
+ }
569
+ // Check 3: A local mirror reference (`../../media/<storageKey>` or the older depth-free
570
+ // `media/<storageKey>`) names the key outright, so a collision-suffixed or truncated mirror stem
571
+ // leaves no file at that exact path. Resolve it through
572
+ // the same confirmed-key and stem indexes Check 1 uses instead of reporting a mirrored asset missing.
573
+ const localKeyMatch = cleanRef.match(/^media\/([^?#]+)/);
574
+ if (localKeyMatch) {
575
+ const key = localKeyMatch[1];
576
+ if (knownStorageKeys.has(key))
577
+ return true;
578
+ const keyStem = storageKeyToMarkdownRef(key);
579
+ if (keyStem && knownMediaStems.has(keyStem))
580
+ return true;
581
+ }
582
+ return false;
401
583
  };
402
584
  for (const ref of detailed.normalRefs) {
403
- if (!checkRef(ref)) {
404
- missingMedia.push(`${ref} (referenced by ${path.join(collection, status, file)})`);
585
+ if (checkRef(ref))
586
+ continue;
587
+ const source = path.join(collection, status, file);
588
+ const key = options.checkMediaUrls ? probeKey(ref) : null;
589
+ if (key) {
590
+ pendingRemoteProbes.push({ ref, key, source });
591
+ }
592
+ else {
593
+ missingMedia.push(`${ref} (referenced by ${source})`);
405
594
  }
406
595
  }
407
596
  for (const ref of detailed.informationalRefs) {
408
597
  if (!checkRef(ref)) {
409
- informationalUnresolved.push(`${ref} (code-example/placeholder in ${path.join(collection, status, file)})`);
598
+ informationalUnresolved.push(`${ref} (code-example/custom-block in ${path.join(collection, status, file)})`);
410
599
  }
411
600
  }
601
+ for (const ref of detailed.invalidRefs) {
602
+ invalidMediaRefs.push(`${ref} (malformed reference in ${path.join(collection, status, file)})`);
603
+ }
412
604
  }
413
605
  catch {
414
606
  // Skip unreadable files
415
607
  }
416
608
  }
417
609
  }
610
+ // Live file-route probe: legacy migrated assets can still be served by /_emdash/api/media/file/
611
+ // even though their media record returns 404, so confirm them against the origin instead of
612
+ // reporting them as missing files that pull-media cannot fetch.
613
+ if (options.checkMediaUrls && pendingRemoteProbes.length > 0) {
614
+ const origin = options.profileOrigin || options.config.origin;
615
+ const probeFetch = options.fetchFn || globalThis.fetch;
616
+ const reachableByKey = new Map();
617
+ for (const candidate of pendingRemoteProbes) {
618
+ if (reachableByKey.has(candidate.key))
619
+ continue;
620
+ let reachable = false;
621
+ try {
622
+ const url = new URL(`${MEDIA_FILE_ROUTE_PREFIX}${candidate.key}`, origin).toString();
623
+ const res = await probeFetch(url, { method: 'HEAD' });
624
+ reachable = res.ok;
625
+ }
626
+ catch {
627
+ reachable = false;
628
+ }
629
+ reachableByKey.set(candidate.key, reachable);
630
+ }
631
+ for (const candidate of pendingRemoteProbes) {
632
+ if (reachableByKey.get(candidate.key)) {
633
+ verifiedFileRouteOnly.push(`${candidate.ref} (served by the file route but matched by no local mirror or record lookup; referenced by ${candidate.source})`);
634
+ }
635
+ else {
636
+ unreachableFileRoute.push(`${candidate.ref} (referenced by ${candidate.source})`);
637
+ }
638
+ }
639
+ }
640
+ missingMedia.push(...unreachableFileRoute);
641
+ // Remote library census: the list operation is the only handle that reaches migrated assets, because
642
+ // it is the one endpoint that reports each record's own storageKey and exposes no key filter. A
643
+ // complete walk turns "447 references have no local file" into "the library holds M records, this
644
+ // workspace mirrors K of them", which is what tells a user to widen the window instead of chase data
645
+ // loss. Credentials are required, so plain doctor runs stay offline and skip this block.
646
+ let remoteLibrary = null;
647
+ if (options.checkMediaLibrary) {
648
+ const origin = options.profileOrigin || options.config.origin;
649
+ try {
650
+ const index = await collectRemoteStorageKeys({
651
+ workspaceRoot: options.workspaceRoot,
652
+ origin,
653
+ token: options.token || '',
654
+ refreshToken: options.refreshToken,
655
+ fetchFn: options.fetchFn,
656
+ });
657
+ // Live EmDash sends no `totalCount`, so the walk itself is the only library figure available.
658
+ remoteLibrary = {
659
+ totalCount: index.totalCount ?? (index.complete ? index.scannedCount : null),
660
+ complete: index.complete,
661
+ mirroredCount: countMirroredMedia(mediaDir),
662
+ };
663
+ }
664
+ catch {
665
+ // An unreachable or unauthenticated library is not a workspace defect; doctor stays silent.
666
+ }
667
+ }
418
668
  if (missingMedia.length > 0) {
669
+ const coverage = remoteLibrary
670
+ ? remoteLibrary.complete
671
+ ? ` The remote library walk reached ${remoteLibrary.totalCount ?? 'no'} media record(s), and this workspace mirrors ${remoteLibrary.mirroredCount} of them, so most of these references were simply never downloaded.`
672
+ : ` The remote library is larger than the walk that could be completed here, and this workspace mirrors ${remoteLibrary.mirroredCount} record(s), so most of these references were simply never downloaded.`
673
+ : '';
419
674
  checks.push({
420
675
  id: 'media_references',
421
676
  name: 'Media References',
422
677
  status: 'warning',
423
- message: `${missingMedia.length} referenced media file(s) are missing from disk.`,
678
+ message: `${missingMedia.length} referenced media file(s) are missing from disk.${coverage} ` +
679
+ `Run "emit pull-media --article <id>" for the specific article, or "emit doctor --check-media-library" ` +
680
+ `to size the remote library (metadata-only walk). Reserve "emit pull-media --all" for deliberate full offline backups. ` +
681
+ `Body URLs carry R2 storage keys, so a missing local file does not mean the remote asset is broken: see docs/media-id-spaces.md.`,
682
+ suggestion: options.checkMediaUrls
683
+ ? 'These keys are R2 storage keys, not media record ids, so a file-route hit proves only that the object exists. The full library index is reachable without binary downloads through "emit doctor --check-media-library" (or "emit pull-media --all" for complete offline backup), which reports every storageKey the server holds without any server-side query. Confirm by storageKey before registering anything — a blind INSERT can duplicate an existing record. Emit mirrors records, never repairs server data.'
684
+ : undefined,
424
685
  details: missingMedia,
425
686
  });
426
687
  }
688
+ else if (remoteLibrary) {
689
+ const notes = [
690
+ `Remote media library holds ${remoteLibrary.totalCount ?? 'an unknown number of'} record(s); this workspace mirrors ${remoteLibrary.mirroredCount}`,
691
+ ];
692
+ checks.push({
693
+ id: 'media_references',
694
+ name: 'Media References',
695
+ status: 'ok',
696
+ message: notes.join('; '),
697
+ });
698
+ }
427
699
  else if (options.strictMedia && informationalUnresolved.length > 0) {
428
700
  checks.push({
429
701
  id: 'media_references',
@@ -434,15 +706,26 @@ export async function runWorkspaceDoctor(options) {
434
706
  });
435
707
  }
436
708
  else {
437
- const infoNote = informationalUnresolved.length > 0
438
- ? ` (${informationalUnresolved.length} informational/placeholder reference(s) ignored)`
439
- : '';
709
+ const notes = [];
710
+ if (verifiedFileRouteOnly.length > 0) {
711
+ notes.push(`${verifiedFileRouteOnly.length} reference(s) served by the remote file route that no local mirror or record lookup matched`);
712
+ }
713
+ if (informationalUnresolved.length > 0) {
714
+ notes.push(`${informationalUnresolved.length} informational/custom-block reference(s) ignored`);
715
+ }
716
+ if (invalidMediaRefs.length > 0) {
717
+ notes.push(`${invalidMediaRefs.length} malformed reference(s) skipped (not valid media file keys)`);
718
+ }
440
719
  checks.push({
441
720
  id: 'media_references',
442
721
  name: 'Media References',
443
722
  status: 'ok',
444
- message: `All referenced local media files exist on disk.${infoNote}`,
445
- ...(informationalUnresolved.length > 0 ? { details: informationalUnresolved } : {}),
723
+ message: `All referenced local media files exist on disk.${notes.length ? ` (${notes.join('; ')})` : ''}`,
724
+ ...(verifiedFileRouteOnly.length > 0 ||
725
+ informationalUnresolved.length > 0 ||
726
+ invalidMediaRefs.length > 0
727
+ ? { details: [...verifiedFileRouteOnly, ...informationalUnresolved, ...invalidMediaRefs] }
728
+ : {}),
446
729
  });
447
730
  }
448
731
  // 7. MCP Process Check
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/sync/doctor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/sync/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Canonical registry of preflight guards, authoring safety checks, and known error codes.
3
+ *
4
+ * This file is the single source of truth for:
5
+ * 1. Numbered safety guards (G1 through G19).
6
+ * 2. Operational ApiErrors emitted by network/push/media transport layers.
7
+ * 3. Standing protection errors raised by dedicated error classes.
8
+ *
9
+ * Verified against src/ via tests/guards.test.ts to guarantee zero drift.
10
+ */
11
+ export type GuardStage = 'cli-mcp' | 'preflight' | 'push' | 'conflicts' | 'new';
12
+ export type GuardSeverity = 'error' | 'warning' | 'info';
13
+ export interface GuardMeta {
14
+ /** Canonical numeric identifier (G1..G19). */
15
+ id: number;
16
+ /** Primary canonical name / label of the guard. */
17
+ name: string;
18
+ /**
19
+ * Concrete error codes emitted by this guard.
20
+ * Empty for invocation-layer guards (G1), mutations (G7), or syntax warnings (G8).
21
+ */
22
+ codes: readonly string[];
23
+ /** Execution stage where the guard is enforced. */
24
+ stage: GuardStage;
25
+ /** Severity level when triggered. */
26
+ severity: GuardSeverity;
27
+ /** Primary source location for implementation reference. */
28
+ source: string;
29
+ /** Human-readable explanation of authoring misbehavior prevented. */
30
+ description: string;
31
+ }
32
+ /**
33
+ * Operational ApiErrors (network, lock, HTTP transport, server reject).
34
+ * They report a failed system operation rather than a rejected authoring intent.
35
+ * Exhaustively enumerated against src/ to ensure the rogue-code check in tests/guards.test.ts is total.
36
+ */
37
+ export declare const OPERATIONAL_ERROR_CODES: readonly ['PUSH_CREATE_FAILED', 'PUSH_FAILED', 'PUSH_RETRY_FAILED', 'PUBLISH_FAILED', 'UNPUBLISH_FAILED', 'REMOTE_ARTICLE_DELETED', 'CONFLICT_REMOTE_FETCH_FAILED', 'TAXONOMY_UPDATE_FAILED', 'TAXONOMY_DIVERGENCE', 'TAXONOMY_UNION_REJECTED', 'TAXONOMY_FETCH_FAILED', 'ENTRY_LOCKED', 'MEDIA_UPLOAD_URL_FAILED', 'MEDIA_BINARY_UPLOAD_FAILED', 'MEDIA_CONFIRM_FAILED', 'MEDIA_NOT_READY', 'ARTICLE_LIST_FAILED', 'ARTICLE_PULL_FAILED', 'ARTICLE_NOT_FOUND', 'MEDIA_LIST_FAILED', 'MEDIA_SEARCH_QUERY_REQUIRED', 'NETWORK_ERROR', 'REMOTE_DELETE_FAILED', 'REMOTE_DELETE_UNCONFIRMED'];
38
+ /**
39
+ * Standing protection errors raised by dedicated error classes rather than ApiError.
40
+ * They guard destructive operations (e.g. deleting published or modified articles)
41
+ * or fundamental parsing, living outside GUARD_REGISTRY.
42
+ */
43
+ export declare const PROTECTION_ERROR_CODES: readonly ['UNPUSHED_CHANGES_PROTECTION', 'PUBLISHED_ARTICLE_PROTECTION', 'FRONTMATTER_PARSE_ERROR'];
44
+ export declare const GUARD_REGISTRY: readonly GuardMeta[];
45
+ //# sourceMappingURL=guards.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../../src/sync/guards.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,MAAM,GAAG,WAAW,GAAG,KAAK,CAAC;AAChF,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAEzD,MAAM,WAAW,SAAS;IACxB,8CAA8C;IAC9C,EAAE,EAAE,MAAM,CAAC;IACX,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,mDAAmD;IACnD,KAAK,EAAE,UAAU,CAAC;IAClB,qCAAqC;IACrC,QAAQ,EAAE,aAAa,CAAC;IACxB,4DAA4D;IAC5D,MAAM,EAAE,MAAM,CAAC;IACf,qEAAqE;IACrE,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,YAElC,oBAAoB,EACpB,aAAa,EACb,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,wBAAwB,EACxB,8BAA8B,EAE9B,wBAAwB,EACxB,qBAAqB,EACrB,yBAAyB,EACzB,uBAAuB,EAEvB,cAAc,EAEd,yBAAyB,EACzB,4BAA4B,EAC5B,sBAAsB,EACtB,iBAAiB,EAEjB,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,6BAA6B,EAC7B,eAAe,EAEf,sBAAsB,EACtB,2BAA2B,CACnB,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,YACjC,6BAA6B,EAC7B,8BAA8B,EAC9B,yBAAyB,CACjB,CAAC;AAEX,eAAO,MAAM,cAAc,EAAE,SAAS,SAAS,EAkLrC,CAAC"}