emdash-emit 0.1.10 → 0.1.11

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 ADDED
@@ -0,0 +1,101 @@
1
+ # Changelog
2
+
3
+ All notable changes to the `emdash-emit` (`emit`) project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ---
9
+
10
+ ## [0.1.11] - 2026-11-09
11
+
12
+ ### Fixed
13
+ - **Doctor Media References False-Positive (D1)**:
14
+ - Resolved `/_emdash/api/media/file/<storageKey>` references against indexed `media/*.yaml` companion documents and local media files.
15
+ - Fixes false-positive warnings where valid remote canonical image references were falsely reported as missing from disk.
16
+ - **Push 3-Way Merge Taxonomy Preservation (D2)**:
17
+ - Ensured remote taxonomy terms are fetched via `/_emdash/api/content/{collection}/{id}/terms/{category,tag}` during 409 conflict resolution, rather than assuming empty taxonomies from content GET endpoint.
18
+ - Added `taxonomyConflicts` detection in `mergeTaxonomies`: when local and remote both modify taxonomies differently, push aborts to prevent silent data loss.
19
+ - **CLI Clean Error Output for Frontmatter Failures (D4)**:
20
+ - In `emit push`, trapped `FrontmatterParseError` and plain errors to display single-line actionable error messages with suggestions instead of raw Node runtime stack traces (conforming to AGENTS.md §5).
21
+ - **Single Article Pull Non-Destructive Heal Symmetry (D5)**:
22
+ - Extended the non-destructive frontmatter healing (`tryFastPathOrHeal`) to single-article pull (`emit pull <ULID>`), eliminating behavioral divergence between batch pull and single ID pull.
23
+ - **Guide & Package Distribution (D6)**:
24
+ - Added `emit delete`, `emit conflicts`, `emit doctor`, and `emit pull-media` to `emit guide`'s Handy Commands.
25
+ - Included `CHANGELOG.md` in `package.json`'s `files` distribution array.
26
+
27
+ ---
28
+
29
+ ## [0.1.10] - 2026-11-08
30
+
31
+ ### Summary of Major Architectural Upgrades (Phases 1a, 1b, 2, 3, 4)
32
+
33
+ Version 0.1.10 represents a comprehensive modernization of Emit into an AI-first, zero-data-loss content authoring environment. It eliminates phantom diffs, hardens deletion and conflict safety, enhances workspace diagnostics, and introduces targeted media syncing.
34
+
35
+ ### Added
36
+ - **Phase 1a & 1b: Non-Destructive Frontmatter & Inline Taxonomy Comments**
37
+ - **Non-destructive frontmatter healing**: Unquoted colons, invalid YAML indentations, and encoding quirks are healed non-destructively while strictly preserving local body edits.
38
+ - **Inline Taxonomy Comments (`# <Name>`)**: Frontmatter arrays for categories and tags now support trailing inline comments (e.g. `- tech # 技術`, `- 01M6... # Cloudflare`) so human and AI authors see names alongside IDs.
39
+ - **Bidirectional taxonomy resolution**: Resolves names to IDs and IDs to names cleanly, eliminating phantom diffs on repeated pulls and pushes.
40
+ - **Author Byline normalization**: Strict validation and default auto-selection of active authors for `emit new` / `sync_new`.
41
+
42
+ - **Phase 2: Slug Collision Guards, Safe Deletion, and Summary-First Status**
43
+ - **Duplicate Slug Guard (`DuplicateSlugError` / `DUPLICATE_SLUG_GUARD`)**: Prevents creating new articles whose slugs clash with existing local files (draft or published), indexed cache entries, or remote CMS posts.
44
+ - **Safe Deletion (`emit delete` / `sync_delete`)**:
45
+ - Remote `DELETE` API call with Cloudflare Workers/D1 confirmation.
46
+ - Automatic safety backup: writes a rescue copy to `posts/conflicts/<filename>.deleted.md` before unlinking.
47
+ - Protection against unpushed local modifications (`UnpushedModificationsError` / `UNPUSHED_MODIFICATIONS_PROTECTION`).
48
+ - Guard against unintended deletion of live published articles (`PublishedArticleDeletionForbiddenError`).
49
+ - Media file protection: referenced images in `media/` are preserved even when the article is deleted.
50
+ - Dry-run mode (`--dry-run` / `dryRun: true`) works without requiring authentication tokens.
51
+ - **Summary-First Status (`emit status` / `sync_status`)**: Capped at 30 actionable items and 5 recent articles to prevent context window overflow for AI coding assistants. Added query filters for `search` and `status`.
52
+
53
+ - **Phase 3: Conflict Management Suite, Workspace Doctor, and Uniform `_meta`**
54
+ - **Conflict Management Tooling (`emit conflicts` / `sync_conflicts`)**:
55
+ - `list`: Categorizes quarantined files as `⚠️ SYNC CONFLICT` (`.conflict.md`) or `🗑️ DELETED RESCUE` (`.deleted.md`) with companion metadata and sizes.
56
+ - `diff`: Displays unified diff between quarantined copy and canonical article.
57
+ - `resolve`: Supports `--accept-local` (restore quarantined content to canonical) and `--accept-canonical` (safely discard quarantine copy).
58
+ - **Guard G13 (`CANONICAL_HAS_UNPUSHED_EDITS` / `CanonicalHasUnpushedEditsError`)**: Overwriting a canonical article via `accept-local` is strictly blocked if the canonical file contains unpushed local modifications, requiring an explicit `--force` (`force: true`) flag.
59
+ - **Guard G14 (`QUARANTINED_PATH_REQUIRED` / `QuarantinedPathRequiredError`)**: Restricts resolve operations strictly within `<collection>/conflicts/`, preventing arbitrary file unlinks or overwrites.
60
+ - Warnings on restoring rescue files missing valid Crockford ULIDs.
61
+ - **Workspace Doctor (`emit doctor` / `sync_doctor`)**: Comprehensive diagnostic suite checking version compatibility, origin consistency, frontmatter integrity, conflicts/quarantine, baseline sync status, and referenced media disk existence.
62
+ - **Version Tracking**: Added `createdWithVersion` and `lastSyncedVersion` to `.emit/config.json`, updated automatically on sync operations.
63
+ - **Uniform MCP `_meta`**: Every MCP tool response (both success and error) carries uniform metadata containing `profile`, `workspace`, `origin`, and `resolvedBy` rationale.
64
+
65
+ - **Phase 4: Targeted Media Sync Optimization & Git Best Practices**
66
+ - **Targeted Media Pull (`emit pull-media --article <ULID>` / `sync_pull_media(article: <ULID>)`)**: Downloads only the media assets referenced by a specific article (frontmatter `featuredImage` and body Markdown/HTML images) without syncing the full multi-hundred media library.
67
+ - **Git Media Management Guidance**: Clear recommendations in `README.md` and `.gitignore` on excluding binary images while tracking companion YAML metadata (`media/*.yaml`).
68
+ - **Complete Documentation Harmonization**: Full alignment across `README.md`, `EMIT_MCP_INSTRUCTIONS`, and CLI command help.
69
+
70
+ ### Changed
71
+ - **README Authoring Desk & Division of Labor clarification**: Non-Goals are now stated as deliberate design decisions rather than missing capabilities — `postsSyncLimit` can be raised to effectively sync the full article set, the sliding window bounds what stays on disk (not what is reachable via `emit pull <id>`), and a new "Division of Labor with the Official EmDash MCP" section documents that bulk media library management and site-wide operations are intentionally delegated to the official EmDash MCP / Admin Dashboard. A matching FAQ entry ("comprehensive piece referencing my entire back-catalog") was added, and the `--all` note now honestly reflects that `emit pull-media --all` exists while articles deliberately omit it.
72
+ - Standardized CLI failure outputs across `emit new`, `emit delete`, and `emit conflicts` to print clean single-line actionable errors with suggestions and exit code 1, rather than dumping raw runtime stack traces.
73
+ - Hermetic test isolation: tests stub `fetch` and isolate temporary `HOME` configurations to prevent ambient leakage from developer profiles.
74
+
75
+ ### Known Limitations
76
+ - **Orphaned media records are not reported by `emit doctor`**: If a draft media upload succeeded but the subsequent article push failed, Emit keeps the record in `media_state` with `status = 'failed'` for compensation on the next run. A record that never gets retried remains visible only in the local cache and may linger as a `pending` entry in the remote media library; `emit doctor` currently checks referenced-media *disk existence* but does not yet report these failed/pending `media_state` entries (planned for a future release). Run `emit pull-media` to re-verify library state in the meantime.
77
+ - **Article-targeted media pull (`--article`) scans remote Portable Text content with a ULID regex fallback** when no local Markdown body is available, which may collect ULIDs appearing outside body image references; precise AST-based extraction is planned for a future release.
78
+
79
+ ---
80
+
81
+ ## [0.1.9] - 2026-11-04
82
+
83
+ ### Added
84
+ - **Sliding Window Staging Desk Model**: Bounded synchronizations defaulting to latest 100 articles (`postsSyncLimit`) per status (`all`, `draft`, `published`).
85
+ - **Offline Draft Media Upload Pipeline**: Standalone image references in `media/drafts/*` are automatically uploaded to EmDash R2 storage and rewritten to storageKey-based URLs during `emit push`.
86
+ - **Preflight Guards G1–G12**: Enforces strict invariants before writing to remote CMS (ID mismatch check, unintended publish guard, merge conflict marker detection, title autotrim, opaque block verification, etc.).
87
+ - **Distributed Mutex Lock**: Distributed 7-minute lease protocol via `POST /_emdash/api/content/{collection}/{id}/lock` to prevent multi-agent write collisions.
88
+
89
+ ### Changed
90
+ - Refactored `emit pull` to automatically sync taxonomies (`categories/` and `tags/`) by default alongside articles.
91
+
92
+ ---
93
+
94
+ ## [0.1.8] - 2026-10-31
95
+
96
+ ### Added
97
+ - Initial release of `emdash-emit`.
98
+ - Local-first synchronization engine for Cloudflare Workers + D1 powered EmDash CMS.
99
+ - Multi-site profile management (`emit profile add`, `list`, `use`, `remove`).
100
+ - Native SQLite cache database using Node.js built-in `node:sqlite`.
101
+ - Initial Model Context Protocol (MCP) server support over stdio.
package/README.md CHANGED
@@ -17,6 +17,7 @@
17
17
  - [Unpushed Edits Safeguard](#3-unpushed-edits-safeguard)
18
18
  - [Pure TypeScript & Zero Native Builds](#4-pure-typescript--zero-native-builds)
19
19
  - [Distributed Mutex Lock & 3-Way Merge](#5-distributed-mutex-lock--3-way-merge)
20
+ - [Division of Labor with the Official EmDash MCP](#6-division-of-labor-with-the-official-emdash-mcp)
20
21
  - [🌟 Key Features](#-key-features)
21
22
  - [📦 Installation](#-installation)
22
23
  - [🚀 Initial Setup & Profiles](#-initial-setup--profiles)
@@ -88,9 +89,11 @@ To prevent user expectations from misaligning with the tool's purpose, it is imp
88
89
 
89
90
  If your site contains thousands of articles, they remain safe, searchable, and intact in your Cloudflare D1 database. Emit only pulls the active working set into your local workspace, keeping your directory clean and searches instant. Need to edit a specific older article outside the active window? Simply pull it on demand using `emit pull <article-id>`.
90
91
 
92
+ These Non-Goals are **deliberate design decisions, not missing capabilities**: raising `postsSyncLimit` (see below) can in fact fetch tens of thousands of articles, so Emit *could* clone a whole site — it chooses not to expose that as its default workflow. The sliding window is a boundary on what stays *on disk*, never on what you can *reach*: every historical article remains editable through an on-demand `emit pull <id>`, and writing a long-form piece that cites or revises many past posts works exactly the same way — fetch each referenced article by ULID, edit it, push it. For operations that genuinely belong to the whole library (bulk media management, site-wide content queries), pair Emit with the [official EmDash MCP](#6-division-of-labor-with-the-official-emdash-mcp) instead of asking Emit to reinvent them.
93
+
91
94
  > [!NOTE]
92
- > **Can the sync limit be adjusted?**
93
- > Yes. While `--all` is intentionally omitted from the CLI to protect the sliding window discipline, you can customize the window size by setting `postsSyncLimit: 300` (or any desired number) in `.emit/config.json`. Emit's internal pagination engine will automatically batch-fetch up to that configured limit.
95
+ > **Can the sync limit be adjusted — and why is there no `--all` for articles?**
96
+ > Yes. Set `postsSyncLimit: 300` (or any larger number, e.g. your full article count) in `.emit/config.json`, and Emit's internal pagination engine automatically batch-fetches up to that configured limit. What Emit deliberately omits is a `--all` *flag* for articles: pulling the entire history into the workspace is an explicit configuration choice, not a routine default, so the "staging desk" discipline is preserved in day-to-day UX while remaining fully escapable when you truly want a larger working set. Media is intentionally different — `emit pull-media --all` does exist, because media files are inert assets that never carry unsynced writing risk.
94
97
 
95
98
  ### 2. The Sliding Window "Staging Desk" Model
96
99
 
@@ -122,12 +125,25 @@ To prevent concurrent race conditions when multiple authors or AI agents collabo
122
125
  * Emit acquires a distributed 7-minute lease via `POST /_emdash/api/content/{collection}/{id}/lock` before writing to remote articles, with automatic heartbeats and `try/finally` release guarantees.
123
126
  * If concurrent edits occur, Emit utilizes a **Hybrid 3-Way Merge** engine (`node-diff3`), merging YAML frontmatter fields and Markdown body text independently.
124
127
 
128
+ ### 6. Division of Labor with the Official EmDash MCP
129
+
130
+ Emit is intentionally not a complete EmDash client. The [official EmDash MCP server](https://github.com/aroooy/emdash) (and the Admin Dashboard) remains the canonical surface for whole-library operations, and the two tools are designed to be used **side by side against the same site**:
131
+
132
+ | Operation | Right Tool |
133
+ | --- | --- |
134
+ | Drafting, reviewing, diffing, publishing articles with safety guards | **Emit** (`emit pull` / `emit push`, MCP `sync_*` tools) |
135
+ | On-demand retrieval of any single historical article by ULID | **Emit** (`emit pull <id>`) |
136
+ | Bulk media library management (mass upload, mass delete, full-library listing) | **Official EmDash MCP** (e.g. `media_upload`) / Admin Dashboard |
137
+ | Site-wide content queries, arbitrary collection operations outside the authoring loop | **Official EmDash MCP** raw content tools |
138
+
139
+ This division is a design stance, not a limitation to work around: Emit focuses its guardrails (G1–G14, locks, 3-way merge, quarantine) on the *authoring loop* where data loss actually happens, and leaves fleet-scale operations to the server-native tooling that already handles them safely.
140
+
125
141
  ---
126
142
 
127
143
  ## 🌟 Key Features
128
144
 
129
145
  * **AI-First Authoring Workflow**: Built specifically for autonomous agents and humans to draft, inspect, and sync local Markdown files safely.
130
- * **Sliding Window Synchronization**: Automatically manages an active sliding window of recent posts (default: latest 100), pruning older cached entries from disk.
146
+ * **Sliding Window Synchronization**: Automatically manages an active sliding window of recent posts (default: latest 100), pruning older cached entries from disk. The window bounds what stays on disk, not what you can reach — any historical article remains available via `emit pull <id>`, and the window size is configurable (`postsSyncLimit`) when a larger working set is genuinely needed.
131
147
  * **Unpushed Edits Safeguard**: Detects unpushed local changes outside the sync window and aborts sync safely before any files can be deleted.
132
148
  * **Git-Style Workspace Encapsulation**: Houses local SQLite cache (`node:sqlite`) and workspace configuration neatly inside a `.emit/` hidden folder.
133
149
  * **Multi-Site Profile Management**: Manage multiple EmDash sites and credentials in `~/.config/emit/profiles.yaml` with automatic workspace directory detection.
@@ -466,7 +482,7 @@ You can author articles completely offline using local images and let `emit push
466
482
 
467
483
  #### Workflow B: Pre-Uploaded Media & Featured Hero Images
468
484
 
469
- 1. **Upload via Admin / EmDash MCP**: Upload images via the **EmDash Admin Web Dashboard** (`/admin/media`) or via the official EmDash MCP tool (`media_upload`).
485
+ 1. **Upload via Admin / EmDash MCP**: Upload images via the **EmDash Admin Web Dashboard** (`/admin/media`) or via the official EmDash MCP tool (`media_upload`) — bulk media library management is intentionally the official tooling's domain (see [Division of Labor](#6-division-of-labor-with-the-official-emdash-mcp)).
470
486
  2. **Sync Media Locally (optional)**: Run `emit pull-media` in your workspace to download images and companion `.yaml` metadata files into `media/`. Note that `emit pull-media --prune` safely ignores `media/drafts/`.
471
487
  3. **Embed in Articles**:
472
488
  - For featured hero images: set `featuredImage: "01M67P0MBMJQQXH2K95HHCYRYB"` (26-character canonical media record `id`) or `null` in frontmatter.
@@ -1010,6 +1026,10 @@ Push your changes with 'emit push <file>' or discard them before pulling.
1010
1026
  * If you want to discard local edits: Delete or revert the file, then re-run `emit pull`.
1011
1027
  * If you want to temporarily skip pruning: Run `emit pull --no-prune`.
1012
1028
 
1029
+ ### Q: I want to write a comprehensive piece that references my entire back-catalog — is that supported?
1030
+
1031
+ **Yes.** The sliding window limits which articles *stay on disk*, not which articles you can *work with*. To reference, quote, or revise any historical post, fetch it individually: `emit pull <article-ULID>` (MCP: `sync_pull` with `id`). Each fetched article enters the normal authoring loop — edit, diff, push — with all guardrails applied. If you prefer a permanently larger local working set instead, raise `postsSyncLimit` in `.emit/config.json`; Emit's pagination engine will fetch up to that size automatically. What Emit deliberately does not offer is a default "clone the whole site" mode; for genuine whole-library operations (bulk media management, site-wide queries), use the official EmDash MCP alongside Emit — see [Division of Labor with the Official EmDash MCP](#6-division-of-labor-with-the-official-emdash-mcp).
1032
+
1013
1033
  ### Q: `PushValidationError`: Cannot publish article live without `--allow-publish`
1014
1034
 
1015
1035
  **Cause**: Frontmatter has `status: published`, but `emit push` was executed without `--allow-publish`.
@@ -1 +1 @@
1
- {"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/push.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,kBAAkB,GAAG,IAAI,CAqI9F"}
1
+ {"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/push.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKzC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,kBAAkB,GAAG,IAAI,CAiJ9F"}
@@ -22,6 +22,7 @@
22
22
  import { pushArticle, PushValidationError } from '../../sync/push.js';
23
23
  import { pushAll } from '../../sync/orchestrator.js';
24
24
  import { ApiError } from '../../client/error.js';
25
+ import { FrontmatterParseError } from '../../utils/frontmatter.js';
25
26
  export function registerPushCommand(program, resolveContext) {
26
27
  program
27
28
  .command('push [file]')
@@ -133,11 +134,23 @@ export function registerPushCommand(program, resolveContext) {
133
134
  }
134
135
  process.exit(1);
135
136
  }
137
+ if (err instanceof FrontmatterParseError) {
138
+ console.error(`\n❌ Error: [${err.code}] ${err.message}`);
139
+ if (err.suggestion) {
140
+ console.error(` 💡 Suggestion: ${err.suggestion}`);
141
+ }
142
+ process.exit(1);
143
+ }
136
144
  if (err instanceof ApiError) {
137
145
  console.error(`\n${err.toActionableString()}`);
138
146
  process.exit(1);
139
147
  }
140
- throw err;
148
+ if (err instanceof Error) {
149
+ console.error(`\n❌ Error: ${err.message}`);
150
+ process.exit(1);
151
+ }
152
+ console.error(`\n❌ Error: ${String(err)}`);
153
+ process.exit(1);
141
154
  }
142
155
  });
143
156
  }
@@ -1 +1 @@
1
- {"version":3,"file":"push.js","sourceRoot":"","sources":["../../../src/cli/commands/push.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"push.js","sourceRoot":"","sources":["../../../src/cli/commands/push.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAEnE,MAAM,WAAW,cAAc;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,gGAAgG;IAChG,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,EAC5C,eAAe,EAAE,oBAAoB,GAAG,IAAI,EAC5C,SAAS,CAAC,EAAE,MAAM,GACjB,cAAc,CAiBhB;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,OAAO,EAChB,cAAc,EAAE,kBAAkB,GACjC,IAAI,CAkMN"}
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAEnE,MAAM,WAAW,cAAc;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,gGAAgG;IAChG,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,EAC5C,eAAe,EAAE,oBAAoB,GAAG,IAAI,EAC5C,SAAS,CAAC,EAAE,MAAM,GACjB,cAAc,CAiBhB;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,OAAO,EAChB,cAAc,EAAE,kBAAkB,GACjC,IAAI,CAsMN"}
@@ -156,9 +156,13 @@ export function registerStatusInitCommands(program, resolveContext) {
156
156
  emit push <file> --allow-publish
157
157
 
158
158
  ■ Handy Commands
159
- - emit status ... View local editing status and diff against remote
160
- - emit pull [id] ... Sync remote articles + taxonomies into local workspace
161
- - emit mcp ... Launch stdio MCP server for AI agents (Antigravity, Claude Code)
159
+ - emit status ... View local editing status and diff against remote
160
+ - emit pull [id] ... Sync remote articles + taxonomies into local workspace
161
+ - emit delete <id> ... Safely delete article locally & remotely (saves .deleted.md rescue copy)
162
+ - emit conflicts ... List, diff, and resolve quarantined copies in posts/conflicts/
163
+ - emit doctor ... Diagnose workspace health, version, origin, and media references
164
+ - emit pull-media ... Download remote media assets (supports --article <id> for targeted sync)
165
+ - emit mcp ... Launch stdio MCP server for AI agents (Antigravity, Claude Code)
162
166
 
163
167
  ■ Collaboration Rules with AI (AGENTS.md)
164
168
  - Strict prohibition against creating throwaway temporary files (e.g. temp.md).
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/sync/doctor.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAOrD,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC;AAErD,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;CACpD;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC;IACjD,MAAM,EAAE,iBAAiB,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,yBAAyB;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,aAAa,CAAC;IACrB,MAAM,EAAE,UAAU,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,YAAY,CAAC,CAgMvB"}
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/sync/doctor.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAOrD,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC;AAErD,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;CACpD;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC;IACjD,MAAM,EAAE,iBAAiB,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,yBAAyB;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,aAAa,CAAC;IACrB,MAAM,EAAE,UAAU,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,YAAY,CAAC,CAyPvB"}
@@ -21,6 +21,7 @@
21
21
  */
22
22
  import fs from 'node:fs';
23
23
  import path from 'node:path';
24
+ import yaml from 'js-yaml';
24
25
  import { getPackageVersion } from '../utils/version.js';
25
26
  import { parseMarkdown, lenientRepairMarkdownFrontmatter } from '../utils/frontmatter.js';
26
27
  import { listConflicts } from './conflicts.js';
@@ -169,6 +170,41 @@ export async function runWorkspaceDoctor(options) {
169
170
  });
170
171
  }
171
172
  // 6. Media References Integrity Check
173
+ // Index all local media companion YAMLs and files to resolve both local paths and storageKey URLs (D1)
174
+ const mediaDir = path.join(options.workspaceRoot, 'media');
175
+ const knownStorageKeys = new Set();
176
+ const knownMediaIds = new Set();
177
+ const knownLocalFiles = new Set();
178
+ if (fs.existsSync(mediaDir)) {
179
+ const mediaFiles = fs.readdirSync(mediaDir);
180
+ for (const f of mediaFiles) {
181
+ knownLocalFiles.add(f);
182
+ knownLocalFiles.add(path.posix.join('media', f));
183
+ if (f.endsWith('.yaml')) {
184
+ try {
185
+ const doc = yaml.load(fs.readFileSync(path.join(mediaDir, f), 'utf8'));
186
+ if (doc) {
187
+ if (typeof doc.storageKey === 'string' && doc.storageKey) {
188
+ knownStorageKeys.add(doc.storageKey);
189
+ }
190
+ if (typeof doc.id === 'string' && doc.id) {
191
+ knownMediaIds.add(doc.id);
192
+ }
193
+ }
194
+ }
195
+ catch {
196
+ // ignore corrupted individual yaml
197
+ }
198
+ }
199
+ }
200
+ const draftsDir = path.join(mediaDir, 'drafts');
201
+ if (fs.existsSync(draftsDir)) {
202
+ for (const df of fs.readdirSync(draftsDir)) {
203
+ knownLocalFiles.add(path.posix.join('media', 'drafts', df));
204
+ knownLocalFiles.add(path.posix.join('../../media', 'drafts', df));
205
+ }
206
+ }
207
+ }
172
208
  const missingMedia = [];
173
209
  for (const status of ['draft', 'published']) {
174
210
  const dir = path.join(options.workspaceRoot, collection, status);
@@ -180,8 +216,21 @@ export async function runWorkspaceDoctor(options) {
180
216
  const content = fs.readFileSync(path.join(dir, file), 'utf8');
181
217
  const refs = scanArticleMediaReferences(content);
182
218
  for (const ref of refs) {
183
- const mediaFullPath = path.join(options.workspaceRoot, ref);
184
- if (!fs.existsSync(mediaFullPath)) {
219
+ // Check 1: EmDash public storageKey route: /_emdash/api/media/file/<storageKey>
220
+ const storageKeyMatch = ref.match(/(?:^|\/)media\/file\/([^?#]+)/);
221
+ if (storageKeyMatch) {
222
+ const key = storageKeyMatch[1];
223
+ if (!knownStorageKeys.has(key)) {
224
+ missingMedia.push(`${ref} (storageKey '${key}' not found in media/*.yaml, referenced by ${path.join(collection, status, file)})`);
225
+ }
226
+ continue;
227
+ }
228
+ // Check 2: Direct relative or local filesystem path
229
+ const cleanRef = ref.replace(/^[./]+/, '');
230
+ const directFull = path.isAbsolute(ref) ? ref : path.join(options.workspaceRoot, ref);
231
+ if (!fs.existsSync(directFull) &&
232
+ !knownLocalFiles.has(ref) &&
233
+ !knownLocalFiles.has(cleanRef)) {
185
234
  missingMedia.push(`${ref} (referenced by ${path.join(collection, status, file)})`);
186
235
  }
187
236
  }
@@ -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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"}
@@ -4,16 +4,32 @@ export interface MergeResult {
4
4
  frontmatter: Frontmatter;
5
5
  body: string;
6
6
  warnings: string[];
7
+ /**
8
+ * Taxonomy names (e.g. "categories", "tags") where local and remote both changed the
9
+ * assignment differently. Callers must NOT silently resolve these: taxonomy assignments
10
+ * are user intent and dropping either side is data loss.
11
+ */
12
+ taxonomyConflicts: string[];
7
13
  }
14
+ /**
15
+ * Merges taxonomies per taxonomy name (categories / tags / custom) with set semantics,
16
+ * so an edit to tags never collides with a remote edit to categories.
17
+ */
18
+ export declare function mergeTaxonomies(local: Record<string, string[]> | undefined, base: Record<string, string[]> | undefined | null, remote: Record<string, string[]> | undefined): {
19
+ merged: Record<string, string[]>;
20
+ conflicts: string[];
21
+ };
8
22
  /**
9
23
  * Merges frontmatter fields key by key.
10
24
  * Never inserts conflict markers into YAML (always produces valid Frontmatter).
11
25
  * On collision (both local and remote modified the same field differently), remote takes precedence
12
- * and a warning is logged.
26
+ * and a warning is logged. Taxonomies are the exception: they are merged per taxonomy name with set
27
+ * semantics and true conflicts are reported via `taxonomyConflicts` instead of being overwritten.
13
28
  */
14
29
  export declare function mergeFrontmatter(local: Frontmatter, base: Frontmatter | null, remote: Frontmatter): {
15
30
  merged: Frontmatter;
16
31
  warnings: string[];
32
+ taxonomyConflicts: string[];
17
33
  };
18
34
  /**
19
35
  * Merges markdown body line by line using diff3.
@@ -1 +1 @@
1
- {"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../src/sync/merge.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE3E,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,WAAW,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,WAAW,GAAG,IAAI,EACxB,MAAM,EAAE,WAAW,GAClB;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAuD7C;AAED;;;GAGG;AACH,wBAAgB,SAAS,CACvB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,CAgB9C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,cAAc,EACrB,IAAI,EAAE;IAAE,WAAW,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,EACvD,MAAM,EAAE;IAAE,WAAW,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACjD,WAAW,CAgBb"}
1
+ {"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../src/sync/merge.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE3E,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,WAAW,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB;;;;OAIG;IACH,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B;AAQD;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,SAAS,EAC3C,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,SAAS,GAAG,IAAI,EACjD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,SAAS,GAC3C;IAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,CAqG3D;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,WAAW,GAAG,IAAI,EACxB,MAAM,EAAE,WAAW,GAClB;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,iBAAiB,EAAE,MAAM,EAAE,CAAA;CAAE,CAmE1E;AAED;;;GAGG;AACH,wBAAgB,SAAS,CACvB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,CAgB9C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,cAAc,EACrB,IAAI,EAAE;IAAE,WAAW,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,EACvD,MAAM,EAAE;IAAE,WAAW,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACjD,WAAW,CAiBb"}
@@ -20,14 +20,114 @@
20
20
  * SOFTWARE.
21
21
  */
22
22
  import { merge as diff3Merge } from 'node-diff3';
23
+ /** Order-insensitive normalization for a taxonomy term list (undefined stays undefined). */
24
+ function normalizeTermList(val) {
25
+ if (!Array.isArray(val))
26
+ return undefined;
27
+ return [...new Set(val.map((v) => String(v)))].sort();
28
+ }
29
+ /**
30
+ * Merges taxonomies per taxonomy name (categories / tags / custom) with set semantics,
31
+ * so an edit to tags never collides with a remote edit to categories.
32
+ */
33
+ export function mergeTaxonomies(local, base, remote) {
34
+ const merged = {};
35
+ const conflicts = [];
36
+ const names = new Set([
37
+ ...Object.keys(local || {}),
38
+ ...Object.keys(base || {}),
39
+ ...Object.keys(remote || {}),
40
+ ]);
41
+ const eq = (a, b) => JSON.stringify(a) === JSON.stringify(b);
42
+ for (const name of names) {
43
+ const lDefined = local !== undefined && name in local && local[name] !== undefined;
44
+ const rDefined = remote !== undefined && name in remote && remote[name] !== undefined;
45
+ const bDefined = base !== null && base !== undefined && name in base && base[name] !== undefined;
46
+ // Case 1: Neither side defined this taxonomy
47
+ if (!lDefined && !rDefined) {
48
+ if (bDefined && base[name] !== undefined) {
49
+ merged[name] = base[name];
50
+ }
51
+ continue;
52
+ }
53
+ // Case 2: Only local defined this taxonomy
54
+ if (lDefined && !rDefined) {
55
+ if (!bDefined) {
56
+ merged[name] = local[name];
57
+ }
58
+ else {
59
+ const l = normalizeTermList(local[name]);
60
+ const b = normalizeTermList(base[name]);
61
+ if (eq(l, b)) {
62
+ // Local didn't change it, remote deleted it
63
+ }
64
+ else {
65
+ // Local changed it, remote deleted it -> Conflict
66
+ conflicts.push(name);
67
+ merged[name] = local[name];
68
+ }
69
+ }
70
+ continue;
71
+ }
72
+ // Case 3: Only remote defined this taxonomy (local omitted the field)
73
+ if (!lDefined && rDefined) {
74
+ // Local didn't specify this taxonomy: accept remote state
75
+ merged[name] = remote[name];
76
+ continue;
77
+ }
78
+ // Case 4: Both local and remote defined this taxonomy
79
+ const lRaw = local[name];
80
+ const rRaw = remote[name];
81
+ const l = normalizeTermList(lRaw) ?? [];
82
+ const r = normalizeTermList(rRaw) ?? [];
83
+ if (eq(l, r)) {
84
+ merged[name] = lRaw;
85
+ continue;
86
+ }
87
+ if (!bDefined) {
88
+ conflicts.push(name);
89
+ merged[name] = lRaw;
90
+ continue;
91
+ }
92
+ const b = normalizeTermList(base[name]) ?? [];
93
+ const baseSet = new Set(b);
94
+ const localSet = new Set(l);
95
+ const remoteSet = new Set(r);
96
+ const localAdded = l.filter((x) => !baseSet.has(x));
97
+ const localRemoved = b.filter((x) => !localSet.has(x));
98
+ const remoteAdded = r.filter((x) => !baseSet.has(x));
99
+ const remoteRemoved = b.filter((x) => !remoteSet.has(x));
100
+ // If either side deleted terms, any disagreement is a conflict
101
+ if (localRemoved.length > 0 || remoteRemoved.length > 0) {
102
+ if (!eq(localRemoved.sort(), remoteRemoved.sort()) ||
103
+ !eq(localAdded.sort(), remoteAdded.sort())) {
104
+ conflicts.push(name);
105
+ merged[name] = lRaw;
106
+ continue;
107
+ }
108
+ }
109
+ // Neither side deleted terms (or both did identical deletion/addition):
110
+ // Perform clean set union of additions without conflict
111
+ const allRemovals = new Set([...localRemoved, ...remoteRemoved]);
112
+ const mergedTerms = [
113
+ ...b.filter((x) => !allRemovals.has(x)),
114
+ ...localAdded,
115
+ ...remoteAdded.filter((x) => !localSet.has(x)),
116
+ ];
117
+ merged[name] = mergedTerms;
118
+ }
119
+ return { merged, conflicts };
120
+ }
23
121
  /**
24
122
  * Merges frontmatter fields key by key.
25
123
  * Never inserts conflict markers into YAML (always produces valid Frontmatter).
26
124
  * On collision (both local and remote modified the same field differently), remote takes precedence
27
- * and a warning is logged.
125
+ * and a warning is logged. Taxonomies are the exception: they are merged per taxonomy name with set
126
+ * semantics and true conflicts are reported via `taxonomyConflicts` instead of being overwritten.
28
127
  */
29
128
  export function mergeFrontmatter(local, base, remote) {
30
129
  const warnings = [];
130
+ let taxonomyConflicts = [];
31
131
  const merged = { ...remote };
32
132
  // Helper to check equality
33
133
  const isEqual = (a, b) => JSON.stringify(a) === JSON.stringify(b);
@@ -43,6 +143,12 @@ export function mergeFrontmatter(local, base, remote) {
43
143
  'bylines',
44
144
  ];
45
145
  for (const key of keys) {
146
+ if (key === 'taxonomies') {
147
+ const tax = mergeTaxonomies(local.taxonomies, base ? base.taxonomies : null, remote.taxonomies);
148
+ merged.taxonomies = tax.merged;
149
+ taxonomyConflicts = tax.conflicts;
150
+ continue;
151
+ }
46
152
  const localVal = local[key];
47
153
  const remoteVal = remote[key];
48
154
  const baseVal = base ? base[key] : undefined;
@@ -75,7 +181,7 @@ export function mergeFrontmatter(local, base, remote) {
75
181
  // Preserve mandatory immutable fields
76
182
  merged.id = remote.id || local.id;
77
183
  merged.collection = remote.collection || local.collection;
78
- return { merged, warnings };
184
+ return { merged, warnings, taxonomyConflicts };
79
185
  }
80
186
  /**
81
187
  * Merges markdown body line by line using diff3.
@@ -100,7 +206,7 @@ export function mergeBody(localBody, baseBody, remoteBody) {
100
206
  * Executes a Hybrid 3-Way Merge separating frontmatter structured merge and markdown text merge.
101
207
  */
102
208
  export function hybrid3WayMerge(local, base, remote) {
103
- const { merged: frontmatter, warnings } = mergeFrontmatter(local.frontmatter, base ? base.frontmatter : null, remote.frontmatter);
209
+ const { merged: frontmatter, warnings, taxonomyConflicts, } = mergeFrontmatter(local.frontmatter, base ? base.frontmatter : null, remote.frontmatter);
104
210
  const baseBody = base ? base.body : '';
105
211
  const { mergedBody: body, hasConflict } = mergeBody(local.body, baseBody, remote.body);
106
212
  return {
@@ -108,6 +214,7 @@ export function hybrid3WayMerge(local, base, remote) {
108
214
  frontmatter,
109
215
  body,
110
216
  warnings,
217
+ taxonomyConflicts,
111
218
  };
112
219
  }
113
220
  //# sourceMappingURL=merge.js.map