@easysociable/cli 0.1.1 → 0.1.2

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 (108) hide show
  1. package/README.md +4 -1
  2. package/dist/easysociable.js +301 -2829
  3. package/dist/easysociable.js.map +1 -1
  4. package/package.json +17 -12
  5. package/skills/ONBOARDING.md +3 -1
  6. package/skills/easysociable-content/INSTALL.md +60 -0
  7. package/skills/easysociable-content/SKILL.md +107 -96
  8. package/skills/easysociable-content/fixtures/golden-run-en/draft.md +13 -0
  9. package/skills/easysociable-content/fixtures/golden-run-en/idea.md +26 -0
  10. package/skills/easysociable-content/fixtures/golden-run-en/pack-tiktok.json +11 -0
  11. package/skills/easysociable-content/platforms/claude.md +1 -2
  12. package/skills/easysociable-content/platforms/codex.md +1 -2
  13. package/skills/easysociable-content/platforms/hermes.md +1 -2
  14. package/skills/easysociable-content/platforms/openclaw.md +1 -2
  15. package/skills/easysociable-content/references/CLI.md +25 -12
  16. package/skills/easysociable-content/references/CONTRACT_SYNC.md +42 -0
  17. package/skills/easysociable-content/references/MCP.md +7 -12
  18. package/skills/easysociable-content/references/PAGE_PACK.md +128 -5
  19. package/skills/easysociable-content/references/PLATFORM_GUIDE.md +36 -0
  20. package/skills/easysociable-content/references/RUN_LAYOUT.md +73 -0
  21. package/skills/easysociable-content/references/TROUBLESHOOTING.md +11 -9
  22. package/skills/easysociable-content/references/VAULT.md +32 -12
  23. package/skills/easysociable-content/references/VOICE.md +16 -0
  24. package/skills/easysociable-content/scripts/contracts.mjs +183 -0
  25. package/skills/easysociable-content/scripts/export-contracts.mjs +76 -0
  26. package/skills/easysociable-content/scripts/fixture.test.mjs +24 -0
  27. package/skills/easysociable-content/scripts/package-skill.mjs +49 -0
  28. package/skills/easysociable-content/scripts/setup.mjs +127 -83
  29. package/skills/easysociable-content/scripts/setup.test.mjs +49 -38
  30. package/skills/easysociable-content/scripts/starter.mjs +50 -48
  31. package/skills/easysociable-content/scripts/validate-export.mjs +42 -0
  32. package/skills/easysociable-content/scripts/validate-pack.mjs +48 -0
  33. package/skills/easysociable-content/scripts/validate-run.mjs +100 -0
  34. package/skills/easysociable-content/scripts/validate.test.mjs +101 -0
  35. package/skills/easysociable-content/scripts/workbench.mjs +135 -0
  36. package/skills/easysociable-content/starter/CLAUDE.md +756 -0
  37. package/skills/easysociable-content/starter/accounts/README.md +9 -0
  38. package/skills/easysociable-content/starter/accounts/_index.md +31 -0
  39. package/skills/easysociable-content/starter/accounts/overrides/README.md +3 -0
  40. package/skills/easysociable-content/starter/discovery/README.md +18 -0
  41. package/skills/easysociable-content/starter/discovery/_index.md +27 -0
  42. package/skills/easysociable-content/starter/discovery/_template.md +41 -0
  43. package/skills/easysociable-content/starter/engine.json +19 -0
  44. package/skills/easysociable-content/starter/exports/README.md +28 -0
  45. package/skills/easysociable-content/starter/inbox/README.md +9 -0
  46. package/skills/easysociable-content/starter/inbox/_index.md +24 -0
  47. package/skills/easysociable-content/starter/inbox/entries/README.md +3 -0
  48. package/skills/easysociable-content/starter/platforms/README.md +19 -0
  49. package/skills/easysociable-content/starter/platforms/ig.md +69 -0
  50. package/skills/easysociable-content/starter/platforms/instagram.md +5 -0
  51. package/skills/easysociable-content/starter/platforms/linkedin.md +72 -0
  52. package/skills/easysociable-content/starter/platforms/threads.md +69 -0
  53. package/skills/easysociable-content/starter/platforms/tiktok.md +71 -0
  54. package/skills/easysociable-content/starter/platforms/x.md +78 -0
  55. package/skills/easysociable-content/starter/platforms/xiaohongshu.md +19 -0
  56. package/skills/easysociable-content/starter/profiles/_index.md +13 -0
  57. package/skills/easysociable-content/starter/profiles/default/README.md +11 -0
  58. package/skills/easysociable-content/starter/profiles/default/audience.md +38 -0
  59. package/skills/easysociable-content/starter/profiles/default/pillars.md +33 -0
  60. package/skills/easysociable-content/starter/profiles/default/voice.md +24 -0
  61. package/skills/easysociable-content/starter/published/_index.md +20 -0
  62. package/skills/easysociable-content/starter/raw/README.md +4 -0
  63. package/skills/easysociable-content/starter/raw/_index.md +12 -0
  64. package/skills/easysociable-content/starter/runs/README.md +22 -0
  65. package/skills/easysociable-content/starter/runs/_index.md +41 -0
  66. package/skills/easysociable-content/starter/runs/_template/brief.md +66 -0
  67. package/skills/easysociable-content/starter/runs/_template/draft.md +11 -0
  68. package/skills/easysociable-content/starter/runs/_template/editor.md +18 -0
  69. package/skills/easysociable-content/starter/runs/_template/feedback.md +15 -0
  70. package/skills/easysociable-content/starter/runs/_template/idea.md +27 -0
  71. package/skills/easysociable-content/starter/runs/_template/pack.md +47 -0
  72. package/skills/easysociable-content/starter/runs/_template/packet.md +25 -0
  73. package/skills/easysociable-content/starter/runs/_template/rubric.md +19 -0
  74. package/skills/easysociable-content/starter/swipe/_index.md +27 -0
  75. package/skills/easysociable-content/starter/swipe/_template.md +34 -0
  76. package/skills/easysociable-content/starter/topics/README.md +25 -0
  77. package/skills/easysociable-content/starter/topics/WATCHLIST.md +65 -0
  78. package/skills/easysociable-content/starter/topics/_index.md +44 -0
  79. package/skills/easysociable-content/starter/topics/_template-item.md +90 -0
  80. package/skills/easysociable-content/starter/topics/items/README.md +4 -0
  81. package/skills/easysociable-content/starter/topics/scoring.md +201 -0
  82. package/skills/easysociable-content/starter/topics/watchlists/README.md +10 -0
  83. package/skills/easysociable-content/starter/topics/watchlists/_shared.md +14 -0
  84. package/skills/easysociable-content/starter/topics/watchlists/default.md +6 -0
  85. package/skills/easysociable-content/starter/wiki/README.md +13 -0
  86. package/skills/easysociable-content/starter/wiki/atoms/_index.md +23 -0
  87. package/skills/easysociable-content/starter/wiki/atoms/_template.md +31 -0
  88. package/skills/easysociable-content/starter/wiki/claims/_index.md +26 -0
  89. package/skills/easysociable-content/starter/wiki/claims/_template.md +38 -0
  90. package/skills/easysociable-content/starter/workbench/README.md +17 -0
  91. package/skills/easysociable-content/workbench/build.py +1074 -0
  92. package/skills/easysociable-content/workbench/serve.py +53 -0
  93. package/skills/easysociable-content/workbench/template.html +2119 -0
  94. package/skills/easysociable-content/workflows/ANALYSIS_AND_COVERAGE.md +14 -5
  95. package/skills/easysociable-content/workflows/CONTENT_EXPORT.md +16 -11
  96. package/skills/easysociable-content/workflows/GETTING_STARTED.md +40 -0
  97. package/skills/easysociable-content/workflows/MCP_FIRST.md +3 -8
  98. package/skills/easysociable-content/workflows/OUT_OF_SCOPE.md +18 -0
  99. package/skills/easysociable-content/workflows/PACK_AUTHORING.md +42 -0
  100. package/skills/easysociable-content/workflows/SWIPE_CAPTURE.md +18 -0
  101. package/skills/easysociable-content/workflows/TOPIC_DRAFT.md +28 -4
  102. package/skills/easysociable-content/workflows/WORKING_DRAFT.md +17 -8
  103. package/skills/easysociable-slideshow/SKILL.md +20 -13
  104. package/skills/easysociable-slideshow/references/VAULT.md +13 -11
  105. package/skills/easysociable-template/scripts/generate-theme-from-hex.mjs +0 -0
  106. package/skills/easysociable-content/workflows/DEVICE_TASKS.md +0 -5
  107. package/skills/easysociable-content/workflows/EXPERIMENTS.md +0 -6
  108. package/skills/easysociable-content/workflows/PUBLICATION.md +0 -5
@@ -1,8 +1,17 @@
1
1
  # Local analysis notes
2
2
 
3
- Save source notes and evidence as Markdown under the selected Obsidian Run.
4
- Record missing context as a checklist in the Run; do not call a Content CLI,
5
- Local API or hosted analysis backend.
3
+ Research before a topic or run exists. Capture still follows engine `CLAUDE.md` § Capture when the user is storing a source.
6
4
 
7
- Template and Slideshow Skills consume the resulting local Pack only after the
8
- Agent and user agree on the content.
5
+ ## Workflow
6
+
7
+ 1. Save sources under `raw/` + `raw/_index.md` when the capture has a URL / structure / media.
8
+ 2. Working notes: `inbox/entries/C-….md` + `inbox/_index.md`.
9
+ 3. Do not silent-write swipe/atoms/claims.
10
+ 4. Network tools are optional; never block on search.
11
+
12
+ ## Done when
13
+
14
+ - Capture Card returned (if this was a capture)
15
+ - Gaps listed as checklist items the user can answer
16
+
17
+ Next: topics or 开一单 per `CLAUDE.md` — not a multi-platform draft in one folder.
@@ -1,19 +1,24 @@
1
1
  # Pack and export workflow
2
2
 
3
- The Content Skill writes a public `content-pack.v1` handoff. It does not choose
4
- private template internals and does not render images itself.
3
+ The Content Skill records the run and verifies the local export. It does not render.
5
4
 
6
5
  ```text
7
- Obsidian Run
8
- → platform Pack
9
- → unified Template/Slideshow MCP or CLI
6
+ one-platform run
7
+ → pack.md (slideshow, after SHIP)
8
+ → Slideshow/Template skill writes pack JSON / fill-slots
10
9
  → Studio preview
11
10
  → user confirmation
12
- → final PNG render
13
- → renders export
14
- → locale exports/<slug>/<platform>/01.png + manifest.json
11
+ → PNG export
12
+ → {engine}/exports/<run-slug>/01.png + manifest.json
15
13
  ```
16
14
 
17
- For a single image, call the published Page Template flow. For multiple pages,
18
- call the Slideshow Run flow. Preview never consumes Render Page allowance;
19
- final rendering does.
15
+ After export:
16
+
17
+ ```bash
18
+ node scripts/validate-export.mjs \
19
+ --export <engine>/exports/<run-slug> \
20
+ --expected-pages <N> --json
21
+ node scripts/validate-run.mjs --run <run-dir> --require-export --json
22
+ ```
23
+
24
+ Set `runs/_index` `export=yes` only when the directory validates. Preview never consumes Render Page allowance; final rendering does.
@@ -0,0 +1,40 @@
1
+ # Getting started
2
+
3
+ After setup, the observatory is `http://127.0.0.1:8765/workbench/`. The user works in chat. The Agent writes markdown. Follow engine `CLAUDE.md`.
4
+
5
+ ## 1. Confirm the engine
6
+
7
+ Read `Content Engine/engine.json` and `CLAUDE.md`. Replace starter `your-handle` / `profiles/default/` before the first serious draft.
8
+
9
+ ## 2. Optional local voice (skip allowed)
10
+
11
+ Ask once whether to fill `profiles/default/voice.md`. This is **local copy persona** — not the hosted Brand Profile (`references/VOICE.md`). Setup must not call `easysociable profiles create`.
12
+
13
+ ## 3. One platform = one run (tracer)
14
+
15
+ Walk one local loop before any hosted render:
16
+
17
+ 1. **Ask platform** if unset. One platform this time (e.g. `x` or `tiktok`).
18
+ 2. Copy `runs/_template/` → `runs/<YYYY-MM-DD-slug[-platform]>/`.
19
+ 3. Fill `idea.md` (platform + `swipe_id` / `atoms` / `claim_id`, `none` OK).
20
+ 4. Append a row on `runs/_index.md` (`status=open`).
21
+ 5. Read `platforms/<platform>.md`, then brief → packet → draft → editor → rubric.
22
+ 6. **x text:** stop at SHIP / READY_TO_POST. No Pack JSON.
23
+ 7. **Slideshow platform:** after SHIP write `pack.md`. Pack JSON waits for Slideshow handoff.
24
+
25
+ Rebuild workbench after writes: `python3 workbench/build.py`.
26
+
27
+ Watchlist scans write **Discovery** (`discovery/D-*.md`), not Topics. Promote a Discovery to a Topic only when the user names it.
28
+
29
+ ## 4. First render (when ready)
30
+
31
+ - **Multi-page** → `easysociable-slideshow` writes `pack-<platform>.json`, then Studio → PNG.
32
+ - **Single-page** → `easysociable-template`.
33
+
34
+ PNGs land at `{engine}/exports/<run-slug>/`.
35
+
36
+ ## Done when
37
+
38
+ - Workbench opens and shows the new run row.
39
+ - User knows 开一单 asks platform(s) and splits N platforms into N folders.
40
+ - User knows Pack JSON is a render handoff, not the default run file.
@@ -1,10 +1,5 @@
1
- # Obsidian-first workflow
1
+ # Filesystem-first, then hosted MCP
2
2
 
3
- There is no Content MCP fallback in V1. Use local filesystem tools to set up or
4
- validate the existing Obsidian Vault, write the Run and platform Pack under
5
- `Content Engine/runs/<slug>/` or `内容引擎/成稿/<slug>/`, then use the unified EasySociable MCP for hosted
6
- Template/Slideshow operations. If the MCP is unavailable, use equivalent
7
- `easysociable` CLI commands.
3
+ There is no Content MCP in V1. Use filesystem tools to write the engine, then the unified EasySociable MCP for hosted Template/Slideshow operations. If MCP is unavailable, use equivalent `easysociable` CLI commands.
8
4
 
9
- Never start a Local API, open SQLite or switch to the retired
10
- `easysociable-content` binary.
5
+ Never start a Local API or open SQLite. Do not require Obsidian.
@@ -0,0 +1,18 @@
1
+ # Out of scope (V1)
2
+
3
+ This skill does not do:
4
+
5
+ | Area | V1 boundary |
6
+ |---|---|
7
+ | Publication / social posting | User posts; Agent records URL + result |
8
+ | UGC / SEO / PublicPiece | Deferred |
9
+ | Hosted metrics backends | User-provided numbers in `feedback.md` only |
10
+ | Device / iPhone automation | Not part of Content Skill |
11
+ | Desktop app / browser extensions | Not part of Content Skill |
12
+ | Content CLI / Content MCP / Local API | Use filesystem + workbench |
13
+ | SQLite Content Engine | Not supported |
14
+ | Obsidian install / vault detection | Not required |
15
+ | Hosted Profile at setup | Create on first render via Slideshow/Template skill |
16
+ | One run folder with many platform drafts | One platform = one run folder |
17
+
18
+ If the user asks for any of the above, explain the boundary and offer the local Markdown alternative or hand off to the correct skill.
@@ -0,0 +1,42 @@
1
+ # Pack authoring
2
+
3
+ Vault-native pack is `pack.md` after rubric SHIP (slideshow platforms only).
4
+ `content-pack.v1` JSON is written by **easysociable-slideshow** at render handoff — not during draft.
5
+
6
+ Full rules: engine `CLAUDE.md` § PagePack + render.
7
+
8
+ ## Vault pack
9
+
10
+ 1. This run is already one platform. Copy `_template/pack.md` → `pack.md` (or `pack-<platform>.md`).
11
+ 2. Public slots only. No private AST. No fake images.
12
+ 3. Show a Pack Card in chat.
13
+
14
+ ## Handoff JSON
15
+
16
+ Slideshow selects a published Page Template per page, then writes:
17
+
18
+ ```json
19
+ {
20
+ "schemaVersion": "content-pack.v1",
21
+ "platform": "tiktok",
22
+ "title": "From idea.md",
23
+ "pages": []
24
+ }
25
+ ```
26
+
27
+ Validate:
28
+
29
+ ```bash
30
+ node scripts/validate-pack.mjs --file <run-dir>/pack-<platform>.json --platform <platform> --json
31
+ node scripts/validate-run.mjs --run <run-dir> --require-pack --json
32
+ ```
33
+
34
+ Pure X text: no pack. `x` / `xiaohongshu` image → Template skill, not a Content Pack.
35
+
36
+ ## Routing after SHIP
37
+
38
+ | Condition | Hand off to |
39
+ |---|---|
40
+ | Single-page intent | `easysociable-template` |
41
+ | Multi-page + slideshow platform | `easysociable-slideshow` |
42
+ | `platform ∈ {x, xiaohongshu}` images | `easysociable-template` only |
@@ -0,0 +1,18 @@
1
+ # Swipe capture
2
+
3
+ Turn a reference post into a reusable **structure** under `swipe/`. Full rules: engine `CLAUDE.md` § Library ingest + § Swipe / atom library.
4
+
5
+ ## When
6
+
7
+ User shares a URL / pattern **and** approves 入库 as swipe. Never silent-seed from a run.
8
+
9
+ ## Workflow
10
+
11
+ 1. Copy `swipe/_template.md` → `swipe/<slug>.md`. Default `status: trial`, n=win=loss=0.
12
+ 2. Add a row on `swipe/_index.md` (`profiles`, `platforms`, `form`, `one_liner`).
13
+ 3. **No Evidence table** in the swipe file. Use history = `published/_index`.
14
+ 4. Hit-status is `trial | working | dead` — not claim epistemology.
15
+
16
+ If the user only said 记一下: **§ Capture** only, then library offer. Do not also open a run unless asked.
17
+
18
+ Hand off to topics / 开一单 when the user wants production, not when capturing.
@@ -1,5 +1,29 @@
1
- # Topic and draft notes
1
+ # Topic draft
2
2
 
3
- Never invent hosted IDs. V1 has no publication endpoint; call a draft complete
4
- only when the local Run and platform Pack have been written to the Obsidian
5
- Vault.
3
+ Score **what to produce**. Full rules: engine `CLAUDE.md` § Topics + `topics/scoring.md`.
4
+
5
+ Watchlist scans do **not** create Topics. They create Discovery records (`CLAUDE.md` § Discovery). Topic scoring starts only when the user names an explicit input (Discovery ID, Capture ID, URL, or idea).
6
+
7
+ ## Pipeline
8
+
9
+ ```text
10
+ explicit input → hard filters → Scout → (produce only) opportunity 5-dim → dual-gate verdict
11
+ ```
12
+
13
+ 1. Hard filters (`topics/scoring.md`). Fail → skip or `parked`.
14
+ 2. **Scout gate** — set `purpose` (`discard` \| `library` \| `produce`) + `scout_label`.
15
+ Default bias: **discard**. Cap **5 `produce`** per promotion session.
16
+ 3. If `produce`: fill context / audience / conflict / insight / evidence fields, then score those five dims → `opp_score`.
17
+ `ready` = opp ≥ **7.5** **and** audience ≥ **6**.
18
+ Conflict > 5 requires a written `current_belief` and `belief_gap`.
19
+ 4. If `library`: optional light item with `status: library`, or capture offer only — never `ready`.
20
+ 5. Write `topics/items/T-YYYYMMDD-XX.md` from `_template-item.md`; add row on `topics/_index.md` (`opp` `aud` `purpose` `scout` + `src_*` when external).
21
+ 6. Output **Opportunity Card** in chat.
22
+
23
+ Suggested swipe/atoms/claim on the topic are **not** citations. Citations happen in `idea.md` when a run opens.
24
+
25
+ ## Topic → run
26
+
27
+ On `用 T-xxx 开一单`: **ask platform(s)** if unset. Create **one run per platform**, same `topic_id`. Mark topic `promoted`. List all RUN ids on the topic `run` column. Inherit opportunity fields into `brief.md`.
28
+
29
+ Do not put multiple platforms in one run folder.
@@ -1,10 +1,19 @@
1
- # Local working draft
1
+ # Working draft
2
2
 
3
- V1 has no Working Draft CLI or Content MCP. Store the working draft as
4
- Markdown/JSON inside the locale run folder (`Content Engine/runs/<slug>/` or
5
- `内容引擎/成稿/<slug>/`), then
6
- write the platform Pack before handing off to the Template or Slideshow Skill.
3
+ Write copy for **this run’s platform only**. Full gates: engine `CLAUDE.md` § Open a run.
7
4
 
8
- Never treat a local draft as a final render. The final checkpoint is the PNG
9
- and `manifest.json` written by the unified `easysociable` CLI after the user
10
- confirms the Studio preview.
5
+ ## Path
6
+
7
+ ```text
8
+ Content Engine/runs/<YYYY-MM-DD-slug[-platform]>/
9
+ ```
10
+
11
+ ## Workflow
12
+
13
+ 1. Load `platforms/<platform>.md` (required; `instagram` → `ig.md`).
14
+ 2. Selection already in `idea.md` (`none` allowed with why).
15
+ 3. Brief OK → `packet.md` → `draft.md` (this platform) → `editor.md` → `rubric.md`.
16
+ 4. Align with `profiles/<id>/voice.md` + audience **core + this platform**.
17
+ 5. Do **not** write `pack-<platform>.json` here. Image decks: `pack.md` only after SHIP.
18
+
19
+ Sibling runs for the same topic each re-read their own craft file. No paste-across.
@@ -1,11 +1,12 @@
1
1
  ---
2
2
  name: easysociable-slideshow
3
3
  description: >
4
- Create and review temporary multi-page Slideshow Runs for EasySociable from a
5
- local Obsidian Content Pack. Use the unified `easysociable` CLI or MCP, open
6
- Studio for preview, and perform final PNG rendering only after confirmation.
7
- There is no Slideshow Template product, UGC publishing, social posting or
8
- separate Slideshow CLI/MCP in V1.
4
+ Create, list, update and review durable multi-page Slideshow Runs for
5
+ EasySociable from a local Obsidian Content Pack. Use the unified
6
+ `easysociable` CLI or MCP, open Studio for preview, and perform final PNG
7
+ rendering only after confirmation. Runs remain in the owner dashboard until
8
+ archive/trash. There is no Slideshow Template product, UGC publishing,
9
+ social posting or separate Slideshow CLI/MCP in V1.
9
10
  ---
10
11
 
11
12
  # EasySociable Slideshow Skill
@@ -27,8 +28,8 @@ It is not a reusable Carousel/Deck Template and it is not a public post.
27
28
  in Studio.
28
29
  6. Studio is preview-only. It has no final download, publish, unpublish, UGC,
29
30
  SEO/GEO or social-posting action.
30
- 7. Agent revisions update the same unexpired Run. Studio activity extends the
31
- seven-day TTL. Expired Runs are not recoverable through the public API.
31
+ 7. Before creating a new Run for an existing content intent, list/find prior Runs
32
+ by `contentSlug` and update the same Run when possible.
32
33
  8. Preview is free but rate/concurrency limited. Final rendering is PNG-only,
33
34
  uses one atomic reservation for all pages and charges only when every page
34
35
  succeeds.
@@ -38,15 +39,21 @@ It is not a reusable Carousel/Deck Template and it is not a public post.
38
39
  1. Validate the Pack and platform/page count.
39
40
  2. Resolve or create the user's Profile/Theme through the unified CLI/MCP.
40
41
  3. Select a compatible published Page Template for every page.
41
- 4. Call:
42
+ 4. List existing Runs when the Pack has a stable content slug:
43
+
44
+ ```bash
45
+ easysociable slideshows list --content-slug my-post --json
46
+ ```
47
+
48
+ 5. Create or update:
42
49
 
43
50
  ```bash
44
51
  easysociable slideshows create --file ./pack.json --json
45
52
  ```
46
53
 
47
- 5. Open the returned `studioUrl` and inspect every page.
48
- 6. Save Studio edits and wait for the saved revision.
49
- 7. After explicit confirmation, call:
54
+ 6. Open the returned `studioUrl` and inspect every page.
55
+ 7. Save Studio edits and wait for the saved revision.
56
+ 8. After explicit confirmation, call:
50
57
 
51
58
  ```bash
52
59
  easysociable slideshows render --id run_xxx --idempotency-key run_xxx-final-1 --json
@@ -60,7 +67,7 @@ It is not a reusable Carousel/Deck Template and it is not a public post.
60
67
 
61
68
  8. Verify checksums and the reconstruction `manifest.json` in the Obsidian
62
69
  Run export. The export is the local final deliverable; cloud artifacts expire
63
- after 24 hours.
70
+ after 24 hours while the Run remains listed for the owner.
64
71
 
65
72
  ## Failure handling
66
73
 
@@ -68,7 +75,7 @@ It is not a reusable Carousel/Deck Template and it is not a public post.
68
75
  error to the Agent; do not substitute another template.
69
76
  - If any final page fails, there is no partial final set and no page charge.
70
77
  - Retry the same final request with the same idempotency key to reuse the Job.
71
- - If the Run is expired, create a new Run from the Pack.
78
+ - If a Run was trashed, create a new Run from the Pack.
72
79
 
73
80
  ## Handoff boundary
74
81
 
@@ -1,18 +1,20 @@
1
1
  # Obsidian export
2
2
 
3
- The local Obsidian Run folder is the final delivery mirror:
3
+ Final PNGs are written at the **engine root exports directory**:
4
4
 
5
5
  ```text
6
- Content Engine/ or 内容引擎/
7
- └── runs/<slug>/ or 成稿/<slug>/
8
- └── exports/<slug>/<platform>/ or 导出/<slug>/<platform>/
9
- ├── 01.png
10
- ├── 02.png
11
- └── manifest.json
6
+ Content Engine/exports/<slug>/<platform>/ (en)
7
+ 内容引擎/导出/<slug>/<platform>/ (zh)
8
+ ├── 01.png
9
+ ├── 02.png
10
+ └── manifest.json
12
11
  ```
13
12
 
14
- Read `locale.json` in the engine root (`en` or `zh`) and use that tree. Pack JSON keys stay English.
13
+ Semantic work and Packs stay under `runs/<slug>/` or `成稿/<slug>/`. Do not
14
+ write PNGs inside the run folder.
15
15
 
16
- The CLI verifies checksums and atomically replaces this directory only after a
17
- complete atomic Hosted Render succeeds. No ZIP is created. The cloud artifact
18
- may expire after 24 hours; the local PNGs remain the user's files.
16
+ Read `locale.json` in the engine root. Pack JSON keys stay English.
17
+
18
+ The CLI verifies checksums and atomically replaces the export directory only
19
+ after a complete atomic Hosted Render succeeds. No ZIP is created. Cloud
20
+ artifacts may expire after 24 hours; local PNGs remain the user's files.
@@ -1,5 +0,0 @@
1
- # Deferred in V1
2
-
3
- Device automation, iPhone publishing, Desktop tasks and Local API workflows are
4
- not part of the V1 Content Skill. Do not invoke or document them as fallback
5
- paths. Keep this file as a migration marker only.
@@ -1,6 +0,0 @@
1
- # Deferred in V1
2
-
3
- Experiments, hypotheses, metrics and proposal activation are retained only as
4
- historical documentation. The V1 Content Skill does not expose these commands
5
- or a backend. Write any future notes as ordinary Markdown in the Obsidian
6
- Vault; do not create hosted experiment records.
@@ -1,5 +0,0 @@
1
- # Deferred in V1
2
-
3
- V1 does not provide publication, social posting, metrics, retrospectives or
4
- UGC/SEO projections. Keep the generated Pack and final PNG export in the local
5
- Obsidian Run; do not call a retired `easysociable-content` command.