@hanna84/mcp-writing 1.9.2 → 1.9.3
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 +10 -0
- package/README.md +57 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,11 +4,21 @@ All notable changes to this project will be documented in this file. Dates are d
|
|
|
4
4
|
|
|
5
5
|
Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
|
6
6
|
|
|
7
|
+
#### [v1.9.3](https://github.com/hannasdev/mcp-writing.git
|
|
8
|
+
/compare/v1.9.2...v1.9.3)
|
|
9
|
+
|
|
10
|
+
- docs: add data ownership model section to README [`#52`](https://github.com/hannasdev/mcp-writing.git
|
|
11
|
+
/pull/52)
|
|
12
|
+
|
|
7
13
|
#### [v1.9.2](https://github.com/hannasdev/mcp-writing.git
|
|
8
14
|
/compare/v1.9.1...v1.9.2)
|
|
9
15
|
|
|
16
|
+
> 20 April 2026
|
|
17
|
+
|
|
10
18
|
- docs: generate tool reference and enforce it in CI [`#55`](https://github.com/hannasdev/mcp-writing.git
|
|
11
19
|
/pull/55)
|
|
20
|
+
- Release 1.9.2 [`7711c9e`](https://github.com/hannasdev/mcp-writing.git
|
|
21
|
+
/commit/7711c9ef9b84ef68d6b9e6c022ec02655e105876)
|
|
12
22
|
|
|
13
23
|
#### [v1.9.1](https://github.com/hannasdev/mcp-writing.git
|
|
14
24
|
/compare/v1.9.0...v1.9.1)
|
package/README.md
CHANGED
|
@@ -248,6 +248,63 @@ Recommended workflow:
|
|
|
248
248
|
|
|
249
249
|
---
|
|
250
250
|
|
|
251
|
+
## Data ownership model
|
|
252
|
+
|
|
253
|
+
Two separate rulesets apply depending on whether a file lives under `scenes/` (import-managed) or `world/` (human/agent-managed). Mixing writers outside these rules risks silent data loss.
|
|
254
|
+
|
|
255
|
+
### scenes/ — import-managed files
|
|
256
|
+
|
|
257
|
+
The importer is the authoritative writer for Scrivener-imported prose; any edits to `scenes/**/*.md` (manual or via tools) will be overwritten on re-import. Sidecars are shared but with clearly partitioned fields.
|
|
258
|
+
|
|
259
|
+
| File | Writer | Fields written | Behavior on re-import |
|
|
260
|
+
|---|---|---|---|
|
|
261
|
+
| `scenes/**/*.md` | **Scrivener / importer** | Full prose content | **Unconditionally overwritten.** Never edit `.md` files directly — changes will be lost on the next import. |
|
|
262
|
+
| `scenes/**/*.meta.yaml` | **Importer** (Scrivener fields) + **AI agent** (enrichment fields) | Importer writes: `scene_id`, `external_source`, `external_id` (always); `title`, `timeline_position`, `save_the_cat_beat` (from Scrivener metadata, also writable by agents via `update_scene_metadata`) | Importer spreads existing sidecar first, then overlays only its fields. All other fields (logline, status, tags, characters, notes, flags, …) are preserved across re-imports. |
|
|
263
|
+
|
|
264
|
+
**Rule:** write AI-side fields via the appropriate tool — never touch the Scrivener-controlled fields manually or the importer will overwrite them.
|
|
265
|
+
- `update_scene_metadata` supports: `logline`, `status`, `tags`, `characters`, `places`, `pov`, `part`, `chapter`, `timeline_position`, `story_time`, `save_the_cat_beat`, `title`.
|
|
266
|
+
- `flag_scene` appends accumulating continuity/review notes (free-text `flags` list).
|
|
267
|
+
- `enrich_scene` re-derives lightweight metadata from the current prose and clears staleness.
|
|
268
|
+
- `metadata_stale` is a SQLite-only flag set automatically by sync when prose changes — it is not a sidecar field and cannot be written by tools.
|
|
269
|
+
|
|
270
|
+
### sync — read-only with respect to files
|
|
271
|
+
|
|
272
|
+
`sync` reads files and writes only to SQLite. It never touches `.md` prose. The one exception is auto-migration: if a `.md` file has YAML frontmatter but no sidecar yet, sync will create the `.meta.yaml` from the frontmatter (one-time, non-destructive). After that, the sidecar is the source of truth and frontmatter is ignored.
|
|
273
|
+
|
|
274
|
+
| Operation | Reads | Writes |
|
|
275
|
+
|---|---|---|
|
|
276
|
+
| Indexing pass | `scenes/**/*.md`, `scenes/**/*.meta.yaml`, `world/**/*.md`, `world/**/*.meta.yaml` | SQLite only |
|
|
277
|
+
| Frontmatter auto-migration | Any `.md`/`.txt` file (frontmatter block) | Corresponding `.meta.yaml` (created once if missing, for any file type including `world/**`) |
|
|
278
|
+
|
|
279
|
+
`sync` never overwrites an existing sidecar and never touches a `.md` prose file.
|
|
280
|
+
|
|
281
|
+
### world/ — human/agent-managed files
|
|
282
|
+
|
|
283
|
+
The importer never reads or writes anything under `world/`. These files are fully owned by humans and the AI agent and are safe to edit at any time without import risk.
|
|
284
|
+
|
|
285
|
+
| File | Writer | Description |
|
|
286
|
+
|---|---|---|
|
|
287
|
+
| `world/characters/<slug>/sheet.md` | **Human** (after creation) | Canonical character sheet prose. `create_character_sheet` writes this file once on first setup; after that it is human-owned and no tool modifies it. |
|
|
288
|
+
| `world/characters/<slug>/*.md` | **Human or AI agent** | Arc notes, relationship docs, history. Add and edit freely. |
|
|
289
|
+
| `world/characters/<slug>/sheet.meta.yaml` | **AI agent** | Character metadata (`name`, `role`, `arc_summary`, `first_appearance`, `traits`). Written by `create_character_sheet`, `update_character_sheet`. |
|
|
290
|
+
| `world/places/<slug>/sheet.md` | **Human** (after creation) | Canonical place sheet prose. `create_place_sheet` writes this file once on first setup; after that it is human-owned and no tool modifies it. |
|
|
291
|
+
| `world/places/<slug>/sheet.meta.yaml` | **AI agent** | Place metadata (`name`, `associated_characters`, `tags`). Written by `create_place_sheet`, `update_place_sheet`. |
|
|
292
|
+
| `world/reference/**/*.md` | **Human** | Free-form reference notes (world rules, timelines, etc.). Never indexed as entities. |
|
|
293
|
+
|
|
294
|
+
**Rule:** all character and place changes that should survive forever — backstory, relationships, traits, arc notes — belong in `world/`. This content is never at risk from a Scrivener re-import.
|
|
295
|
+
|
|
296
|
+
### Summary
|
|
297
|
+
|
|
298
|
+
| What you want to change | Where to make the change |
|
|
299
|
+
|---|---|
|
|
300
|
+
| Prose wording | Scrivener → re-import |
|
|
301
|
+
| Scene logline, status, tags, beat analysis | `scenes/*.meta.yaml` via AI tools |
|
|
302
|
+
| Character traits, backstory, relationships | `world/characters/<slug>/` files |
|
|
303
|
+
| Place descriptions and lore | `world/places/<slug>/` files |
|
|
304
|
+
| Shared world rules, timelines, reference | `world/reference/` files |
|
|
305
|
+
|
|
306
|
+
---
|
|
307
|
+
|
|
251
308
|
## Appendix: Real-world usage scenarios
|
|
252
309
|
|
|
253
310
|
The tool list is useful as reference. These example workflows show how people actually use `mcp-writing` while drafting and revising.
|