@easysociable/cli 0.1.8 → 0.1.9

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 (93) hide show
  1. package/README.md +29 -9
  2. package/dist/easysociable.js +111 -100
  3. package/dist/easysociable.js.map +1 -1
  4. package/package.json +2 -2
  5. package/scripts/engine/migrate-split-vault.py +75 -0
  6. package/skills/ONBOARDING.md +19 -4
  7. package/skills/easysociable-content/SKILL.md +25 -9
  8. package/content-engine/scripts/fixture.test.mjs +0 -24
  9. package/content-engine/scripts/starter.mjs +0 -58
  10. package/content-engine/scripts/validate.test.mjs +0 -101
  11. package/content-engine/scripts/workbench.mjs +0 -140
  12. package/content-engine/starter/CLAUDE.md +0 -908
  13. package/content-engine/starter/accounts/README.md +0 -9
  14. package/content-engine/starter/accounts/_index.md +0 -31
  15. package/content-engine/starter/accounts/overrides/README.md +0 -3
  16. package/content-engine/starter/engine.json +0 -23
  17. package/content-engine/starter/exports/README.md +0 -28
  18. package/content-engine/starter/hits/README.md +0 -5
  19. package/content-engine/starter/hits/_index.md +0 -30
  20. package/content-engine/starter/hits/_template.md +0 -46
  21. package/content-engine/starter/hits/entries/README.md +0 -3
  22. package/content-engine/starter/inbox/README.md +0 -9
  23. package/content-engine/starter/inbox/_index.md +0 -24
  24. package/content-engine/starter/inbox/entries/README.md +0 -3
  25. package/content-engine/starter/needs/README.md +0 -38
  26. package/content-engine/starter/needs/_index.md +0 -31
  27. package/content-engine/starter/needs/_template.md +0 -24
  28. package/content-engine/starter/needs/entries/README.md +0 -5
  29. package/content-engine/starter/platforms/README.md +0 -19
  30. package/content-engine/starter/platforms/ig.md +0 -69
  31. package/content-engine/starter/platforms/instagram.md +0 -5
  32. package/content-engine/starter/platforms/linkedin.md +0 -72
  33. package/content-engine/starter/platforms/threads.md +0 -69
  34. package/content-engine/starter/platforms/tiktok.md +0 -71
  35. package/content-engine/starter/platforms/x.md +0 -78
  36. package/content-engine/starter/platforms/xiaohongshu.md +0 -19
  37. package/content-engine/starter/products/README.md +0 -38
  38. package/content-engine/starter/products/_index.md +0 -25
  39. package/content-engine/starter/products/_template.md +0 -56
  40. package/content-engine/starter/products/entries/P-001-easysociable.md +0 -150
  41. package/content-engine/starter/products/entries/P-002-content-engine.md +0 -136
  42. package/content-engine/starter/profiles/_index.md +0 -16
  43. package/content-engine/starter/profiles/default/README.md +0 -17
  44. package/content-engine/starter/profiles/default/audience.md +0 -38
  45. package/content-engine/starter/profiles/default/boundaries.md +0 -14
  46. package/content-engine/starter/profiles/default/expression.md +0 -18
  47. package/content-engine/starter/profiles/default/handles.md +0 -8
  48. package/content-engine/starter/profiles/default/keywords.md +0 -31
  49. package/content-engine/starter/profiles/default/lanes.md +0 -12
  50. package/content-engine/starter/profiles/default/pillars.md +0 -33
  51. package/content-engine/starter/profiles/default/stories.md +0 -15
  52. package/content-engine/starter/profiles/default/voice.md +0 -38
  53. package/content-engine/starter/published/_index.md +0 -20
  54. package/content-engine/starter/raw/README.md +0 -4
  55. package/content-engine/starter/raw/_index.md +0 -12
  56. package/content-engine/starter/recommendations/README.md +0 -21
  57. package/content-engine/starter/recommendations/_index.md +0 -21
  58. package/content-engine/starter/recommendations/_template.md +0 -44
  59. package/content-engine/starter/runs/README.md +0 -22
  60. package/content-engine/starter/runs/_index.md +0 -41
  61. package/content-engine/starter/runs/_template/brief.md +0 -76
  62. package/content-engine/starter/runs/_template/draft.md +0 -11
  63. package/content-engine/starter/runs/_template/editor.md +0 -18
  64. package/content-engine/starter/runs/_template/feedback.md +0 -15
  65. package/content-engine/starter/runs/_template/idea.md +0 -27
  66. package/content-engine/starter/runs/_template/pack.md +0 -55
  67. package/content-engine/starter/runs/_template/packet.md +0 -31
  68. package/content-engine/starter/runs/_template/rubric.md +0 -19
  69. package/content-engine/starter/swipe/_index.md +0 -27
  70. package/content-engine/starter/swipe/_template.md +0 -36
  71. package/content-engine/starter/topics/README.md +0 -21
  72. package/content-engine/starter/topics/_index.md +0 -51
  73. package/content-engine/starter/topics/_template-item.md +0 -106
  74. package/content-engine/starter/topics/items/README.md +0 -4
  75. package/content-engine/starter/topics/scoring.md +0 -255
  76. package/content-engine/starter/wiki/README.md +0 -13
  77. package/content-engine/starter/wiki/atoms/_index.md +0 -23
  78. package/content-engine/starter/wiki/atoms/_template.md +0 -31
  79. package/content-engine/starter/wiki/claims/_index.md +0 -26
  80. package/content-engine/starter/wiki/claims/_template.md +0 -38
  81. package/content-engine/starter/workbench/README.md +0 -17
  82. package/content-engine/workbench/__pycache__/build.cpython-310.pyc +0 -0
  83. package/content-engine/workbench/build.py +0 -1467
  84. package/content-engine/workbench/serve.py +0 -53
  85. package/content-engine/workbench/template.html +0 -2683
  86. /package/{content-engine/scripts → scripts/engine}/contracts.mjs +0 -0
  87. /package/{content-engine/scripts → scripts/engine}/export-contracts.mjs +0 -0
  88. /package/{content-engine → scripts/engine}/fixtures/golden-run-en/draft.md +0 -0
  89. /package/{content-engine → scripts/engine}/fixtures/golden-run-en/idea.md +0 -0
  90. /package/{content-engine → scripts/engine}/fixtures/golden-run-en/pack-tiktok.json +0 -0
  91. /package/{content-engine/scripts → scripts/engine}/validate-export.mjs +0 -0
  92. /package/{content-engine/scripts → scripts/engine}/validate-pack.mjs +0 -0
  93. /package/{content-engine/scripts → scripts/engine}/validate-run.mjs +0 -0
@@ -1,33 +0,0 @@
1
- # Content pillars — profile `default`
2
-
3
- Agent: map every draft topic to at least one pillar (or user overrides for one post).
4
-
5
- ## Status
6
-
7
- `active`
8
-
9
- ## Pillars
10
-
11
- ### P1 — (name this pillar)
12
-
13
- **Job:** (one sentence)
14
-
15
- Talk about:
16
-
17
- - (fill)
18
-
19
- ### P2 — (name this pillar)
20
-
21
- **Job:** (one sentence)
22
-
23
- Talk about:
24
-
25
- - (fill)
26
-
27
- ### P3 — (name this pillar)
28
-
29
- **Job:** (one sentence)
30
-
31
- Talk about:
32
-
33
- - (fill)
@@ -1,15 +0,0 @@
1
- # Stories — profile `default`
2
-
3
- **Role:** Narrative inventory the draft may cite.
4
- **Not:** Identity table facts (`./voice.md` Experience).
5
-
6
- 0–1 stories is enough for a first session (`profile: partial`). Skip if the user has none they will make public.
7
-
8
- ## Stories
9
-
10
- ### S1 — (title)
11
-
12
- - **Situation:** (fill)
13
- - **Choice:** (fill)
14
- - **Lesson:** (fill)
15
- - **Public:** yes | no
@@ -1,38 +0,0 @@
1
- # Voice — profile `default`
2
-
3
- **Role:** Who this profile is + how copy should sound.
4
- **Not:** Topics (`./pillars.md`), platform craft (`../../platforms/*.md`), or readers (`./audience.md`).
5
-
6
- ## Identity (who is speaking)
7
-
8
- | Field | Value |
9
- |-------|--------|
10
- | **Public handle** | (fill) |
11
- | **Role** | (fill) |
12
- | **What I build** | (fill) |
13
- | **Point of view** | (fill) |
14
- | **Not claiming** | Invented metrics, customers, quotes, or team size |
15
-
16
- ## Experience
17
-
18
- Facts copy may cite (year, role, thing done). Write `not claiming` when unknown.
19
-
20
- - (fill)
21
-
22
- ## Values
23
-
24
- Claims this profile will always make / will never make. Repeatable topics go in `pillars.md`, not here.
25
-
26
- - (fill)
27
-
28
- ## Persona
29
-
30
- - (fill)
31
- - Direct. Concrete nouns. Address the reader as **you**.
32
- - Do not invent bio facts not listed in Identity.
33
-
34
- ## Do not say
35
-
36
- - (fill)
37
- - Fake social proof
38
- - Empty hype (“game-changer”, “unlock your potential”)
@@ -1,20 +0,0 @@
1
- # Published index
2
-
3
- **Role:** One row per **shipped post** (one platform URL).
4
- **Also:** use history for swipe / atom (join on `swipe` / `atoms`). Claim **proposition** evidence still lives in the claim file’s Evidence table.
5
-
6
- Same **topic** may appear across **multiple runs / multiple published rows**. One **run** → usually **one** published row.
7
-
8
- ## How to use
9
-
10
- - On ship: add a row; update that run’s `runs/_index` → `published`.
11
- - Then bump `n`/`win`/`loss` on cited index rows (`CLAUDE.md` § Catalog evidence).
12
- - Swipe/atom: this table **is** the ledger. Claim: also append the claim file Evidence row (`vs claim`).
13
- - `result`: `win` | `flat` | `loss` | `unknown`.
14
-
15
- ## Catalog
16
-
17
- | date | platform | url | run | pillar | swipe | atoms | claim | result | notes |
18
- |------|----------|-----|-----|--------|-------|-------|-------|--------|-------|
19
-
20
- <!-- Agent: prefer newest on top -->
@@ -1,4 +0,0 @@
1
- # raw/
2
-
3
- Authoritative sources. Registry: **`_index.md`**.
4
- Bodies: `YYYY-MM-DD-short-slug.md`.
@@ -1,12 +0,0 @@
1
- # Raw index
2
-
3
- Authoritative source materials. Bodies are files in this folder; this table is the registry.
4
-
5
- | id | date | capture_id | file | type | source_url | one_liner |
6
- |----|------|------------|------|------|------------|-----------|
7
-
8
- ## Agent rules
9
-
10
- - Create a raw **file** + this row when capture has URL, multi-step structure, media, or user marks important
11
- - `capture_id` must match `inbox/_index` id
12
- - Do not use raw as finished posts
@@ -1,21 +0,0 @@
1
- # recommendations/
2
-
3
- First-class **third-party product and tool library**. This is separate from
4
- `products/`: entries here are products the profile may review, compare, or
5
- recommend, not products EasySociable owns or sells.
6
-
7
- ```text
8
- Profile + Needs + review evidence
9
- → Topic
10
- → optional recommendation_ids
11
- → Run
12
- ```
13
-
14
- ## Rules
15
-
16
- - Do not treat a recommendation as an owned Product or as a product CTA.
17
- - Do not copy vendor marketing claims into `quote` or evidence.
18
- - Record the research date and source URLs. Prices and features can change.
19
- - Record affiliate, sponsorship, or other commercial relationships when known.
20
- - A recommendation needs a review basis: observed workflow, named source,
21
- comparison, or user-provided evidence. An empty entry is not a review.
@@ -1,21 +0,0 @@
1
- # Recommendations index
2
-
3
- Third-party tools and products available for review or comparison. No starter
4
- entries are provided.
5
-
6
- | id | name | status | category | profiles | pillars | last_researched | relationship | file |
7
- |----|------|--------|----------|----------|---------|-----------------|--------------|------|
8
- | -- | ---- | ------ | -------- | -------- | ------- | --------------- | ------------ | ---- |
9
-
10
- ## Status values
11
-
12
- | status | Meaning |
13
- |--------|---------|
14
- | `candidate` | Captured for possible research; not publishable |
15
- | `researched` | Evidence and limits recorded |
16
- | `active` | Available for Topics and reviews |
17
- | `retired` | No longer maintained or relevant |
18
-
19
- `profiles` is a comma-separated many-to-many association. Use `*` only when
20
- the subject is intentionally shared across all profiles. `pillars` records
21
- where the subject is relevant; it does not make the subject an owned product.
@@ -1,44 +0,0 @@
1
- ---
2
- id: R-YYYYMMDD-XX
3
- name:
4
- status: candidate
5
- category:
6
- profiles: default
7
- pillars:
8
- last_researched: YYYY-MM-DD
9
- relationship: none | affiliate | sponsor | client | other
10
- source_urls:
11
- ---
12
-
13
- # Recommendation subject
14
-
15
- ## What it is
16
-
17
- ## Best for
18
-
19
- ## Not for
20
-
21
- ## Problem addressed
22
-
23
- ## Observed workflow
24
-
25
- ## Strengths
26
-
27
- ## Limitations
28
-
29
- ## Alternatives
30
-
31
- ## Pricing snapshot
32
-
33
- Include currency, plan, limits and date. Do not assume the price is current.
34
-
35
- ## Evidence
36
-
37
- Named sources, tests, screenshots, or user reports. Empty is not publishable.
38
-
39
- ## Disclosure
40
-
41
- State affiliate, sponsorship, ownership, or other commercial relationship.
42
-
43
- ## Review notes
44
-
@@ -1,22 +0,0 @@
1
- # runs/
2
-
3
- One folder per **platform run** (“一单”). Same Topic, native rewrite for another network → **another folder**, same `topic_id`.
4
-
5
- | Path | Role |
6
- |------|------|
7
- | `_index.md` | Job queue registry (Approach B scan) |
8
- | `_template/` | Files copied into each new run |
9
- | `YYYY-MM-DD-short-slug[-platform]/` | One platform draft |
10
-
11
- **Agent** creates/updates files and `_index`; user works in chat only.
12
-
13
- See vault root `CLAUDE.md` § Open a run.
14
-
15
- ## Multi-platform
16
-
17
- - Multi-select on 开一单 → **N runs**, not N sections in one draft.
18
- - `idea.md`: `primary_platform` = `platforms` = this run only.
19
- - Before brief/draft: **read** `platforms/<platform>.md` (see `platforms/README.md`).
20
- - `draft.md`: this platform’s copy only, following that craft file.
21
- - Pack: `pack.md` (or `pack-<platform>.md`); exports → `exports/<slug>/`.
22
- - Each ship → one `published/_index` row for that `run_id`.
@@ -1,41 +0,0 @@
1
- # Runs index (production jobs)
2
-
3
- One row = one **platform run** (one folder). Same Topic on multiple platforms = **multiple rows** sharing `topic_id` — **not** one folder with many platform variants.
4
-
5
- Newest on top. Agent updates on open / status change / export / kill.
6
-
7
- | run_id | path | date | status | account | profile | primary_platform | platforms | topic_id | pillar | one_liner | pack | export | notes |
8
- | ------ | ---- | ---- | ------ | ------- | ------- | ---------------- | --------- | -------- | ------ | --------- | ---- | ------ | ----- |
9
-
10
- ## Status values
11
-
12
- | status | Meaning |
13
- | ------------ | ------------------------------------------------ |
14
- | `open` | Folder created; brief not done |
15
- | `brief` | Brief wait / in progress |
16
- | `draft` | Drafting / editing |
17
- | `scored` | Rubric done; ship or hold |
18
- | `ready` | SHIP — copy ready to post (and/or pack ready) |
19
- | `published` | This platform shipped (or user declared done) |
20
- | `hold` | Rubric hold / blocked |
21
- | `killed` | Abandoned |
22
- | `superseded` | Replaced by another run |
23
- | `partial` | **Legacy** — do not use for new runs |
24
-
25
- ## Columns
26
-
27
- | Column | Meaning |
28
- |--------|---------|
29
- | `path` | Wikilink to run folder |
30
- | `primary_platform` | **This** run’s platform (craft + publish target) |
31
- | `platforms` | Must equal `primary_platform` (single value; index compat) |
32
- | `pack` | `no` \| `yes` (image pack written for this run) |
33
- | `export` | `no` \| `yes` (files under `exports/<slug>/`) |
34
- | `topic_id` | `T-…` or none (siblings share the same id) |
35
-
36
- ## Rules
37
-
38
- - On **开一单**: **ask platform(s)** if unset; **one folder + one row per platform**; `status=open`.
39
- - On status change: update this table (source of truth for queue scan).
40
- - On ship: row in **`published/_index`** + here → `published`.
41
- - Do not store draft body or image binaries here.
@@ -1,76 +0,0 @@
1
- ---
2
- status: BRIEF_WAIT
3
- gate_score: 0
4
- gate_pass: false
5
- ---
6
-
7
- # Brief
8
-
9
- ## Thesis
10
-
11
- One sentence a stranger can understand without any product context.
12
-
13
- (fill)
14
-
15
- ## For whom → what changes
16
-
17
- **Reader:** (who specifically has this problem)
18
-
19
- **They currently believe:** (the false belief or stuck assumption)
20
-
21
- **After reading:** (what they should believe, do, or stop doing)
22
-
23
- ## Evidence
24
-
25
- **What we have:** (named sources — Need ids, product facts, mechanisms, cases)
26
-
27
- **Evidence type:** data | example | case | mechanism | expert | observation
28
-
29
- **Quality:** weak | moderate | strong
30
-
31
- **What we cannot prove:** (be honest — no invented outcomes)
32
-
33
- ## Platform and expression
34
-
35
- - **Platform:** x | linkedin | ig | tiktok
36
- - **Form:** short post | thread | carousel | …
37
- - **Hook:** (first line or opening move)
38
- - **Structure:** (the argument flow in one line, e.g. hook → false belief → mechanism → action)
39
-
40
- ## Boundaries
41
-
42
- - **Must include:** (non-negotiable claims or framing)
43
- - **Must avoid:** (hard bans for this draft; merge `profiles/<id>/boundaries.md` + voice Do not say)
44
-
45
- ---
46
-
47
- ## Appendix (machine / handoff — not the reading surface)
48
-
49
- ### Inherited from Topic
50
-
51
- - context:
52
- - audience:
53
- - conflict:
54
- - insight:
55
- - outcome:
56
- - evidence:
57
-
58
- ### Selection
59
-
60
- - swipe: id | none — why
61
- - atoms: hook:… | cta:… | none — why
62
- - claim: id | none — why
63
-
64
- ### Quality gate
65
-
66
- | # | Gate | Score 1–5 | Note |
67
- |---|------|-----------|------|
68
- | 1 | Thesis clarity | | |
69
- | 2 | Evidence strength | | |
70
- | 3 | Angle originality | | |
71
- | 4 | Structure coherence | | |
72
- | 5 | Outcome specificity | | |
73
- | 6 | Tension preservation | | |
74
-
75
- **Total:** /30
76
- **Gate:** PASS (≥24) | REVISE (20–23) | STOP (<20)
@@ -1,11 +0,0 @@
1
- ---
2
- status: DRAFTED
3
- ---
4
-
5
- # Draft
6
-
7
- Copy for **this run’s platform only**. Re-read `platforms/<platform>.md` before writing. Do not paste sibling-run copy unchanged.
8
-
9
- ## Post 1
10
-
11
- ## Post 2 (optional)
@@ -1,18 +0,0 @@
1
- ---
2
- status: EDIT_WAIT
3
- verdict: REVISE | APPROVE
4
- ---
5
-
6
- # Editor report
7
-
8
- ## Must fix
9
-
10
- 1.
11
-
12
- ## Optional
13
-
14
- 1.
15
-
16
- ## Verdict
17
-
18
- REVISE | APPROVE
@@ -1,15 +0,0 @@
1
- ---
2
- status: empty
3
- ---
4
-
5
- # Feedback (after publish)
6
-
7
- This run is one platform. One URL → one `published/_index` row.
8
-
9
- ## This platform
10
-
11
- - **url:**
12
- - **result:** win | flat | loss | unknown
13
- - **metrics:** (user-provided only)
14
- - **vs claim:** support | contradict | unclear | n/a
15
- - **notes:**
@@ -1,27 +0,0 @@
1
- ---
2
- run_id: RUN-YYYYMMDD-slug
3
- status: RUN_OPEN
4
- created: YYYY-MM-DD
5
- ---
6
-
7
- # Idea
8
-
9
- - **one_liner:**
10
- - **account:** your-handle
11
- - **profile:** default
12
- - **pillar:** P1 | P2 | P3
13
- - **primary_platform:** x
14
- - **platforms:** x
15
- <!-- must equal primary_platform (one platform per run) -->
16
- - **topic_id:** none | T-…
17
- - **capture_ids:** none | C-…
18
- - **swipe_id:** none | S1
19
- - **atoms:** none | hook:A-… cta:A-…
20
- - **claim_id:** none | C-…
21
- - **hypothesis:** none | (optional one-off test; prefer claim_id when in catalog)
22
-
23
- ## Platform (this run)
24
-
25
- | platform | copy | images (pack) | publish status |
26
- |----------|------|---------------|----------------|
27
- | x | yes | no | pending |
@@ -1,55 +0,0 @@
1
- ---
2
- # PagePack — this run is already one platform (image decks only; not pure x text)
3
- # Prefer filename: pack.md (or pack-<platform>.md)
4
- # Create when: user wants carousel/slideshow AND rubric SHIP for this run.
5
- # Write the Arc line before pages. Do not default Cover → Point → Steps → Recap → CTA.
6
- ---
7
- status: unused
8
- id:
9
- platform: linkedin
10
- deck_hint:
11
- page_count: 0
12
- ---
13
-
14
- # Pack
15
-
16
- ## Meta
17
-
18
- - **run_id:**
19
- - **pillar:**
20
- - **swipe_id:**
21
- - **claim_id:**
22
- - **language:** en
23
-
24
- ## Arc
25
-
26
- <!-- One line: the argument that needs page turns. Required before Pages. -->
27
- <!-- Recipes: cost-mechanism | listicle | mistakes | claim-proof | compare | (named) -->
28
-
29
- - **one_liner:**
30
- - **recipe:**
31
-
32
- ## Pages
33
-
34
- <!-- Each page: role is a layout retrieval tag, not sequence position. -->
35
- <!-- First page is not automatically cover. Text only — no private AST. -->
36
-
37
- ### page 1
38
-
39
- - **role:**
40
- - **slots:**
41
- - text_0:
42
-
43
- ### page 2
44
-
45
- - **role:**
46
- - **slots:**
47
- - text_0:
48
-
49
- <!-- …repeat through page_count… -->
50
-
51
- ## Render
52
-
53
- - **job_id:**
54
- - **export_path:** exports/<run-slug>/<platform>/
55
- - **status:** not_requested | queued | done | failed
@@ -1,31 +0,0 @@
1
- ---
2
- # Writer context packet — keep short (~400–900 tokens of substance)
3
- # Filled by Agent from pillars slice + platforms rules + one swipe + this brief only
4
- ---
5
-
6
- # Packet
7
-
8
- ## Profile / account
9
-
10
- - account:
11
- - profile:
12
-
13
- ## Pillar slice
14
-
15
- ## Voice (resolved)
16
-
17
- ## Audience (profile audience — core + this platform)
18
-
19
- ## Craft notes (from platforms/<platform>.md — required; summarize rules used)
20
-
21
- ## Swipe beats (if any)
22
-
23
- ## Brief essentials
24
-
25
- ## Hard bans
26
-
27
- ## Boundaries (must_avoid — from boundaries.md + voice Do not say)
28
-
29
- ## Expression likes / dislikes
30
-
31
- ## Story inventory (cite or none)
@@ -1,19 +0,0 @@
1
- ---
2
- status: SCORED
3
- total: 0
4
- ship: false
5
- ---
6
-
7
- # Rubric (max 12, ship if ≥ 8)
8
-
9
- | # | Criterion | Score 0–2 | Note |
10
- |---|-----------|-----------|------|
11
- | 1 | Stop-scroll hook | | |
12
- | 2 | Concrete (not empty wisdom) | | |
13
- | 3 | Save / act potential | | |
14
- | 4 | Platform-native (this run) | | |
15
- | 5 | Non-slop | | |
16
- | 6 | Fits pillar | | |
17
-
18
- **Total:** /12
19
- **Gate:** SHIP (≥8) | HOLD (<8)
@@ -1,27 +0,0 @@
1
- # Swipe index (structure catalog)
2
-
3
- **Role:** Full-post beat order. Global library; scope with **`profiles`** + **`platforms`** columns.
4
-
5
- **Selection:** read this table first → filter platform + profile → drop `dead` → prefer `working` then higher `win/n` → open 0–1 body. **`none` allowed** (declare why).
6
-
7
- ## Status (hit-rate, our posts — not “is this true”)
8
-
9
- | status | Meaning |
10
- |--------|---------|
11
- | `trial` | In catalog; not enough of **our** published uses |
12
- | `working` | Our reuse is helping; prefer in selection |
13
- | `dead` | Never auto-select |
14
-
15
- `n` / `win` / `loss` = our `published.result` cache. `flat` and `unknown` bump `n` only.
16
- **No Evidence table in swipe files.** Use history = `published/_index` (column `swipe`).
17
-
18
- ## Ingest
19
-
20
- See `CLAUDE.md` § Library ingest. No silent seed from runs. Unpublished runs never enter.
21
-
22
- ## Catalog
23
-
24
- | id | file | platforms | profiles | form | beats_or_pages | status | n | win | loss | one_liner | source |
25
- |----|------|-----------|----------|------|----------------|--------|---|-----|------|-----------|--------|
26
-
27
- `profiles: *` = available to all profiles.
@@ -1,36 +0,0 @@
1
- ---
2
- id: S-NEW
3
- platforms: [x]
4
- profiles: ["*"] # profile ids or "*"
5
- form: short_post # short_post | thread | carousel | slideshow
6
- beats_or_pages: 0
7
- status: trial # trial | working | dead
8
- tags: []
9
- ---
10
-
11
- # Title
12
-
13
- ## When to use
14
-
15
- - …
16
-
17
- ## When to avoid
18
-
19
- - …
20
-
21
- ## Beats / pages (argument structure only — no full copy)
22
-
23
- <!-- Not Cover → Point → Steps → Recap → CTA. Those are catalog family names. -->
24
-
25
- 1. …
26
- 2. …
27
-
28
- ## Constraints
29
-
30
- - …
31
-
32
- ## Source
33
-
34
- - capture / raw links if any
35
-
36
- <!-- Use history: published/_index column swipe. Do not add ## Evidence here. -->
@@ -1,21 +0,0 @@
1
- # topics/
2
-
3
- Topic system: **what to produce next**, after an explicit need, offer, review subject, or profile thesis has been judged as an opportunity.
4
-
5
- | Path | Role |
6
- |------|------|
7
- | `_index.md` | Queue registry (one row per topic + `item` link + source engagement) |
8
- | `items/T-*.md` | One file per opportunity: decision summary + readable judgment, then Score/Trace/Constraints appendix |
9
- | `scoring.md` | Opportunity dimensions and dual gate |
10
- | `_template-item.md` | Template for new items |
11
-
12
- Flow:
13
-
14
- ```text
15
- explicit input → editorial judgment
16
- → `_index` + `items/T-…` (opportunity 5-dim)
17
- → ready only if opp≥7.5 and audience≥6
18
- → user opens run → `status=promoted`
19
- ```
20
-
21
- The item file is a **decision card**. A content owner who skips YAML and the appendix must still answer: what problem we address, who it serves, what we will say, why now, what should change, and whether to open a run. Five-dim scores stay in the appendix as a gate, not as the reading surface.
@@ -1,51 +0,0 @@
1
- # Topics index (production queue)
2
-
3
- One row = one topic. Full scorecard in **`item`** file.
4
- Same topic on multiple platforms = **one topic row**; open **N runs** sharing `topic_id`.
5
- Statuses live here and in the item—**not** folder names.
6
-
7
- Newest on top.
8
-
9
- | id | date | opp | aud | status | purpose | scout | platform | pillar | lane | generation_mode | one_liner | item | source_type | src_url | src_handle | src_likes | src_replies | src_bookmarks | engagement_at | capture_id | need_ids | product_ids | product_fit | recommendation_ids | run |
10
- | -- | ---- | --- | --- | ------ | ------- | ----- | -------- | ------ | --------- | ---- | ----------- | ------- | ---------- | --------- | ----------- | ------------- | ------------- | ---------- | --- | --- | --- | --- |
11
-
12
- ## Status values
13
-
14
- | status | Meaning |
15
- |--------|---------|
16
- | `draft` | Created, not fully scored |
17
- | `scored` | Has scores; not yet triaged |
18
- | `ready` | opp ≥ 7.5 **and** aud ≥ 6 (dual gate) |
19
- | `backlog` | opp/aud mid — re-angle, research, or wait |
20
- | `parked` | opp < 6 or aud < 5 or hard-filter fail |
21
- | `library` | Scout purpose library (structure later; not produce-ready) |
22
- | `promoted` | Opened as a run (`run` column set) |
23
- | `killed` | User rejected |
24
-
25
- ## Columns (key)
26
-
27
- | Column | Meaning |
28
- |--------|---------|
29
- | `opp` | Opportunity score (weighted 5-dim: context/audience/conflict/insight/evidence) |
30
- | `aud` | Audience dimension score (hard floor ≥ 6 for ready) |
31
- | `item` | Wikilink to `topics/items/T-….md` |
32
- | `lane` | Publishing lane: teach, build, review, compare, offer, or profile-defined |
33
- | `generation_mode` | How the Topic was formed; see `topics/_template-item.md` |
34
- | `source_type` | `inbox` \| `user` \| `need` \| `product` \| `recommendation` |
35
- | `src_*` | **Source post** engagement snapshot — not your publish metrics |
36
- | `capture_id` | Set only if linked to inbox `C-…`. **Never** put `N-` here; needs live on the item as `need_ids` |
37
- | `need_ids` | Audience evidence cited by the Topic; demand evidence, not product proof |
38
- | `product_ids` | Optional product facts cited by the Topic |
39
- | `product_fit` | `direct` \| `adjacent` \| `none`; editorial relevance only |
40
- | `recommendation_ids` | Optional third-party subjects used for review or comparison |
41
- | `run` | One or more `RUN-…` ids after open (comma-separated if multi-platform siblings) |
42
-
43
- ## Rules
44
-
45
- - Max **5** new **`produce`** topics per promotion session
46
- - Topics require an explicit user, need, product, recommendation, or profile input.
47
- - Scout first; never `ready` on high `src_*` or opp_score alone (need audience ≥ 6 too)
48
- - Scoring: `topics/scoring.md` (opportunity dimensions)
49
- - Product fit is optional and never replaces Need evidence or opportunity scoring.
50
- - `记一下` + URL: **inbox first**, not topics, unless user also asks to score as topic
51
- - On 开一单: append all new run ids to `run`