@topmindspace/topmind-writing-skills 0.8.39 → 0.8.40

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 (49) hide show
  1. package/CHANGELOG.md +11 -1
  2. package/README.en.md +9 -6
  3. package/README.md +9 -6
  4. package/package.json +1 -1
  5. package/topmind-briefs/CHANGELOG.md +4 -0
  6. package/topmind-briefs/README.en.md +1 -1
  7. package/topmind-briefs/README.md +1 -1
  8. package/topmind-briefs/SKILL.md +2 -2
  9. package/topmind-briefs/package.json +1 -1
  10. package/topmind-briefs/references/emoji-system.md +2 -2
  11. package/topmind-briefs/references/examples.md +1 -1
  12. package/topmind-briefs/references/platform-specs.md +2 -2
  13. package/topmind-briefs/references/style-guide.md +1 -1
  14. package/topmind-briefs/references/x-layout-patterns.md +2 -2
  15. package/topmind-briefs/references/x-post-format.md +7 -5
  16. package/topmind-briefs/scripts/lint_x_post.py +5 -5
  17. package/topmind-cover/README.en.md +1 -1
  18. package/topmind-cover/README.md +1 -1
  19. package/topmind-format/README.en.md +1 -1
  20. package/topmind-format/README.md +1 -1
  21. package/topmind-format/SKILL.md +1 -1
  22. package/topmind-format/package.json +1 -1
  23. package/topmind-format/references/emoji-system.md +2 -2
  24. package/topmind-format/references/x-layout-patterns.md +2 -2
  25. package/topmind-format/references/x-post-format.md +7 -5
  26. package/topmind-format/scripts/lint_x_post.py +5 -5
  27. package/topmind-format/scripts/negative_tests.py +11 -0
  28. package/topmind-poster/README.en.md +1 -1
  29. package/topmind-poster/README.md +1 -1
  30. package/topmind-viral-posts/README.en.md +1 -1
  31. package/topmind-viral-posts/README.md +1 -1
  32. package/topmind-viral-posts/SKILL.md +3 -5
  33. package/topmind-viral-posts/package.json +1 -1
  34. package/topmind-viral-posts/references/emoji-system.md +2 -2
  35. package/topmind-viral-posts/references/x-layout-patterns.md +2 -2
  36. package/topmind-viral-posts/references/x-post-format.md +7 -5
  37. package/topmind-viral-posts/scripts/lint_x_post.py +5 -5
  38. package/topmind-wechat-post/README.en.md +1 -1
  39. package/topmind-wechat-post/README.md +1 -1
  40. package/topmind-wechat-post/SKILL.md +1 -1
  41. package/topmind-wechat-post/package.json +1 -1
  42. package/topmind-wechat-post/references/x-post-format.md +7 -5
  43. package/topmind-wechat-post/scripts/lint_x_post.py +5 -5
  44. package/topmind-x-article/README.en.md +1 -1
  45. package/topmind-x-article/README.md +1 -1
  46. package/topmind-x-article/SKILL.md +1 -1
  47. package/topmind-x-article/package.json +1 -1
  48. package/topmind-x-article/references/x-post-format.md +7 -5
  49. package/topmind-x-article/scripts/lint_x_post.py +5 -5
package/CHANGELOG.md CHANGED
@@ -1,4 +1,14 @@
1
- ## [0.8.39] - 2026-10-16
1
+ ## [0.8.40] - 2026-10-16
2
+
3
+ > 根包 0.8.39 → **0.8.40**(patch);技能版本:topmind-briefs 0.2.20 → 0.2.21、topmind-format 0.1.5 → 0.1.6、topmind-viral-posts 0.3.12 → 0.3.13、topmind-wechat-post 0.3.12 → 0.3.13、topmind-x-article 0.4.18 → 0.4.19。
4
+
5
+ ### 变更(短文去掉 280 字限制)
6
+
7
+ - 统一定义:**短文** = X 纯文本帖,约 1000 字以内都可以;**长文** = X Article;段子规则不变。
8
+ - 删掉所有 280 字 / 加权字数限制和「超了拆 thread / 确认账号支持长帖」的说法;briefs 的 platform-specs、style-guide、examples、SKILL.md,viral-posts 写作铁律,evals 同步。
9
+ - `lint_x_post.py` 的 W7 改为:超过约 1000 字才提示写成长文(X Article);format negative_tests 新增对应用例。
10
+
11
+ - 2026-10-16
2
12
 
3
13
  > 根包 0.8.38 → **0.8.39**(patch);技能版本:topmind-briefs 0.2.19 → 0.2.20、topmind-cover 0.4.10 → 0.4.11、topmind-format 0.1.4 → 0.1.5、topmind-poster 0.1.5 → 0.1.6、topmind-viral-posts 0.3.11 → 0.3.12、topmind-wechat-post 0.3.11 → 0.3.12、topmind-x-article 0.4.17 → 0.4.18。
4
14
 
package/README.en.md CHANGED
@@ -115,17 +115,20 @@ Every skill ships sample outputs written by us (fictional or neutral topics; no
115
115
 
116
116
  ## Skills
117
117
 
118
+ > Terms: **short post (短文)** = a plain-text X post, anything up to about 1000 Chinese characters (no 280-character limit); **long-form (长文)** = an X Article; **duanzi (段子)** = a one-sentence-per-line short-post style.
119
+
120
+
118
121
  | Skill | Version | What it does |
119
122
  |-------|---------|--------------|
120
- | [`topmind-wechat-post`](./topmind-wechat-post/) | **0.3.12** | WeChat article lifecycle: package, review, 3 quality gates, inline typography & publish checklist |
121
- | [`topmind-x-article`](./topmind-x-article/) | **0.4.18** | X long-form one-click publish: Markdown → one-click-copy HTML (images/prompt copy, click-to-zoom images) / plain-text fallback + cover + checklist |
123
+ | [`topmind-wechat-post`](./topmind-wechat-post/) | **0.3.13** | WeChat article lifecycle: package, review, 3 quality gates, inline typography & publish checklist |
124
+ | [`topmind-x-article`](./topmind-x-article/) | **0.4.19** | X long-form one-click publish: Markdown → one-click-copy HTML (images/prompt copy, click-to-zoom images) / plain-text fallback + cover + checklist |
122
125
  | [`topmind-cover`](./topmind-cover/) | **0.4.11** | Cover art for X / WeChat (X master 1500×600 / 5:2): striking, theme-focused; 22-style cover style library + 16:9 X short-post cover scene + 24 title treatments + 7-layer scene recipe + 55 example images (22 styles × 2 sizes + 11 variant samples) + 1 style overview |
123
- | [`topmind-briefs`](./topmind-briefs/) | **0.2.20** | Short-form briefs (WeChat + X): one topic, one chart; data rankings / paper explainers / product alerts / mechanism explainers; sources → images → content → layout; one copy-ready plain-text X block (no HTML by default, emoji optional, no AI tone), links / images sent separately; asks before generating any image |
124
- | [`topmind-viral-posts`](./topmind-viral-posts/) | **0.3.12** | X viral short posts: 18 template types + combinations, duanzi layout (blank lines, no emoji, plain bullet lines), one copy-ready plain-text block per post with hashtags last, links / images sent separately, classification tags listed separately; asks before generating an image |
125
- | [`topmind-format`](./topmind-format/) | **0.1.5** | X plain-text formatter: to duanzi (blank lines, no emoji) / to short post (paragraphing + sensible lists, emoji optional); layout only, words unchanged, with a fidelity check; one copy-ready plain-text body, links / images sent separately |
126
+ | [`topmind-briefs`](./topmind-briefs/) | **0.2.21** | Short-form briefs (WeChat + X): one topic, one chart; data rankings / paper explainers / product alerts / mechanism explainers; sources → images → content → layout; one copy-ready plain-text X block (no HTML by default, emoji optional, no AI tone), links / images sent separately; asks before generating any image |
127
+ | [`topmind-viral-posts`](./topmind-viral-posts/) | **0.3.13** | X viral short posts: 18 template types + combinations, duanzi layout (blank lines, no emoji, plain bullet lines), one copy-ready plain-text block per post with hashtags last, links / images sent separately, classification tags listed separately; asks before generating an image |
128
+ | [`topmind-format`](./topmind-format/) | **0.1.6** | X plain-text formatter: to duanzi (blank lines, no emoji) / to short post (paragraphing + sensible lists, emoji optional); layout only, words unchanged, with a fidelity check; one copy-ready plain-text body, links / images sent separately |
126
129
  | [`topmind-poster`](./topmind-poster/) | **0.1.6** | HTML+CSS → high-res long image / poster / infographic PNG: headless Chrome 2× screenshot + auto-trim; "one image per section" batch workflow (generator + renderer) |
127
130
 
128
- Installer [`@topmindspace/topmind-writing-skills`](https://www.npmjs.com/package/@topmindspace/topmind-writing-skills) is **0.8.39** (whole-repo same-tag releases).
131
+ Installer [`@topmindspace/topmind-writing-skills`](https://www.npmjs.com/package/@topmindspace/topmind-writing-skills) is **0.8.40** (whole-repo same-tag releases).
129
132
 
130
133
  ### Which skill, and how they combine
131
134
 
package/README.md CHANGED
@@ -115,17 +115,20 @@ npx @topmindspace/topmind-writing-skills install topmind-poster
115
115
 
116
116
  ## 技能一览
117
117
 
118
+ > 术语:**短文** = X 纯文本帖,约 1000 字以内都可以(没有 280 字限制);**长文** = X Article;**段子**是一句一行的短文体裁。
119
+
120
+
118
121
  | 技能 | 版本 | 做什么 |
119
122
  |------|------|--------|
120
- | [`topmind-wechat-post`](./topmind-wechat-post/) | **0.3.12** | 公众号文章全生命周期:交付包、审校改写、质量三关、微信内联排版与发布清单 |
121
- | [`topmind-x-article`](./topmind-x-article/) | **0.4.18** | X 长文一键发布:Markdown 原稿 → 一键复制 HTML(含配图/提示词复制、图片点击放大)/ 纯文本兜底 + 封面图 + 发布清单 |
123
+ | [`topmind-wechat-post`](./topmind-wechat-post/) | **0.3.13** | 公众号文章全生命周期:交付包、审校改写、质量三关、微信内联排版与发布清单 |
124
+ | [`topmind-x-article`](./topmind-x-article/) | **0.4.19** | X 长文一键发布:Markdown 原稿 → 一键复制 HTML(含配图/提示词复制、图片点击放大)/ 纯文本兜底 + 封面图 + 发布清单 |
122
125
  | [`topmind-cover`](./topmind-cover/) | **0.4.11** | 文章封面配图(X / 公众号共用,X 主尺寸 1500×600 / 5:2):震撼醒目主题突出;22 种封面风格库 + X 短文 16:9 封面场景 + 24 种标题花式 + 七层场景配方 + 55 张示例图(22 种风格 × 2 尺寸 + 11 张变体样张) + 1 张风格总览图 |
123
- | [`topmind-briefs`](./topmind-briefs/) | **0.2.20** | 干货短文(公众号 + X 双平台):一件事讲透,数据榜单/论文解读/新品速递;信源 → 原图 → 内容 → 排版;X 版交付一段可复制纯文本(默认不出 HTML,emoji 可选,去 AI 味),链接 / 原图 / 配图另发,无原图先询问配图 |
124
- | [`topmind-viral-posts`](./topmind-viral-posts/) | **0.3.12** | X 引流段子/爆款短篇:18 大类型模板 + 组合玩法,段子体(行间空行,零 emoji,分点不加符号)、每条一段可复制纯文本、话题标签在末行,链接 / 原图另发、分类标签另列;无原图先询问再走 topmind-cover |
125
- | [`topmind-format`](./topmind-format/) | **0.1.5** | X 纯文本格式化:转段子(行间空行,零 emoji)/ 格式化成短文(分段 + 合理列表,emoji 可选),只动排版不改字,带原文保真校验;交付一段可复制纯文本,链接 / 原图另发 |
126
+ | [`topmind-briefs`](./topmind-briefs/) | **0.2.21** | 干货短文(公众号 + X 双平台):一件事讲透,数据榜单/论文解读/新品速递;信源 → 原图 → 内容 → 排版;X 版交付一段可复制纯文本(默认不出 HTML,emoji 可选,去 AI 味),链接 / 原图 / 配图另发,无原图先询问配图 |
127
+ | [`topmind-viral-posts`](./topmind-viral-posts/) | **0.3.13** | X 引流段子/爆款短篇:18 大类型模板 + 组合玩法,段子体(行间空行,零 emoji,分点不加符号)、每条一段可复制纯文本、话题标签在末行,链接 / 原图另发、分类标签另列;无原图先询问再走 topmind-cover |
128
+ | [`topmind-format`](./topmind-format/) | **0.1.6** | X 纯文本格式化:转段子(行间空行,零 emoji)/ 格式化成短文(分段 + 合理列表,emoji 可选),只动排版不改字,带原文保真校验;交付一段可复制纯文本,链接 / 原图另发 |
126
129
  | [`topmind-poster`](./topmind-poster/) | **0.1.6** | HTML+CSS → 高清长图 / 海报 / 信息图 PNG:无头 Chrome 2× 截图 + 自动裁白;「一段一图」分段图批量出图(生成器 + 渲染器) |
127
130
 
128
- 安装器 [`@topmindspace/topmind-writing-skills`](https://www.npmjs.com/package/@topmindspace/topmind-writing-skills) 为 **0.8.39**(整仓同 tag 发版)。
131
+ 安装器 [`@topmindspace/topmind-writing-skills`](https://www.npmjs.com/package/@topmindspace/topmind-writing-skills) 为 **0.8.40**(整仓同 tag 发版)。
129
132
 
130
133
  ### 怎么选、怎么组合
131
134
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@topmindspace/topmind-writing-skills",
3
- "version": "0.8.39",
3
+ "version": "0.8.40",
4
4
  "description": "TopMindSpace 写作技能合集 — 通过 npm / npx 安装技能(公众号长文、X 长文、干货短文、X 引流短帖、封面图、长图海报)。只出稿与发布包,不代发。",
5
5
  "license": "MIT",
6
6
  "author": "TopMindspace",
@@ -1,5 +1,9 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.2.21 (2026-10-16)
4
+
5
+ - 短文去掉 280 字限制:X 版一条纯文本帖,约 1000 字内;更长的写成长文(X Article)
6
+
3
7
  ## 0.2.20 (2026-10-16)
4
8
 
5
9
  - 新增 `examples/` 原创示例(X 短文 2 篇 + 链接配图另列 + 公众号短文 1 篇);示例链接换成 example.com 占位
@@ -7,7 +7,7 @@ A brief is not a long-form article — **no HTML by default**: the workflow is v
7
7
  The X version is one copy-ready plain-text block (emoji optional); **links (including sources), original images and any generated images are sent separately**, never mixed into the body.
8
8
  The WeChat version is ~300–800 Chinese characters of Markdown. With no original image it asks before generating one.
9
9
 
10
- - Version: **v0.2.20** (ships with `@topmindspace/topmind-writing-skills@0.8.39`)
10
+ - Version: **v0.2.21** (ships with `@topmindspace/topmind-writing-skills@0.8.40`)
11
11
 
12
12
  ## Install
13
13
 
@@ -7,7 +7,7 @@
7
7
  X 版交付一段可直接复制的纯文本(emoji 可选),**链接(含来源)、原图、配图另发**,不和正文混在一起;公众号版约 300–800 字 Markdown。
8
8
  没有原图时先问要不要配图(`topmind-cover`);链接那一条写明来源名称、发布时间与 URL。
9
9
 
10
- - 版本:**v0.2.20**(随 `@topmindspace/topmind-writing-skills@0.8.39` 发布)
10
+ - 版本:**v0.2.21**(随 `@topmindspace/topmind-writing-skills@0.8.40` 发布)
11
11
 
12
12
  ## 安装
13
13
 
@@ -3,7 +3,7 @@ name: topmind-briefs
3
3
  description: "干货短文:一件事讲透,X + 公众号双平台。短文不是长文——默认不出 HTML:工作流按「核实一手信源 → 找原帖原图 → 写内容 → 排版」;X 版交付一段可直接复制的纯文本(首行钩子、合理分段与列表、去 AI 味、emoji 可选且只用 TopMind 体系、末行 0–2 个话题标签),链接(含来源)、原图(1–2 张)、配图另发,绝不混进正文;公众号版是 300–800 字 Markdown;没有原图时主动询问是否配图,不擅自生图。尊重原始信息、原图、原文。只交付不代发。Use when 写短文、公众号短文、X 短文、发快讯、简讯、速报、数据榜单、榜单速报、论文解读、新品速递、来篇短的、短平快、brief;信息密度型(数据、榜单、发布)走本技能。Do NOT use for 把现成文字格式化、转段子、排版(→ topmind-format)、X 长文与发 X 文章(→ topmind-x-article)、公众号长文与公众号排版 HTML(→ topmind-wechat-post)、引流互动型短帖、段子、涨粉帖、互关帖、爆款短篇(→ topmind-viral-posts)、单独出长图/海报/信息图 PNG(→ topmind-poster)、封面与头图(→ topmind-cover)、把稿子发出去(→ topmind-x,须用户确认)。"
4
4
  license: MIT
5
5
  metadata:
6
- version: "0.2.20"
6
+ version: "0.2.21"
7
7
  action_category: "write"
8
8
  triggers: "写短文, 公众号短文, X 短文, 发快讯, 快讯, 简讯, 速报, 干货短文, 论文解读, 数据榜单, 榜单速报, 新品速递, brief, 来篇短的, 短平快, 发个快讯"
9
9
  author: "TopMindSpace"
@@ -18,7 +18,7 @@ metadata:
18
18
  > **必读必守**:[references/x-delivery-contract.md](references/x-delivery-contract.md)——X 正文是一段可直接复制的纯文本,**不含 URL 和来源行**;链接一条、图片一条另发。分点可用 emoji 或「1)」「·」【小标题】,禁用 `- ` `1. `;emoji 不强制。
19
19
 
20
20
  - 跟 `topmind-viral-posts` 的区别:那是引流互动型段子(第一人称、钩子、涨粉);这是**信息密度型干货短文**(数据、榜单、论文、新品,第三方客观口吻)。
21
- - 跟 `topmind-x-article` / `topmind-wechat-post` 的区别:那两个是长文(数千字、多节多图、HTML 发布包);本技能 X 版一帖或 ≤3 条 thread,公众号版 300–800 字。
21
+ - 跟 `topmind-x-article` / `topmind-wechat-post` 的区别:那两个是长文(数千字、多节多图、HTML 发布包);本技能 X 版是一条纯文本短文(约 1000 字内),公众号版 300–800 字。
22
22
  - 现成文字只要排版 → `topmind-format`。
23
23
 
24
24
  ## 何时不用
@@ -9,5 +9,5 @@
9
9
  "type": "git",
10
10
  "url": "git+https://github.com/topmindspace/topmind-writing-skills.git"
11
11
  },
12
- "version": "0.2.20"
12
+ "version": "0.2.21"
13
13
  }
@@ -64,7 +64,7 @@ X 上常见的 🔥 😍 🚀 💥 开头、6–10 个话题标签、同一列
64
64
 
65
65
  - 标题行首只放第三节对照表里的标题 emoji;对不上关键词就不放,不用 🔥 😍 🚀 凑热度。
66
66
  - 账号辨识度只靠人设点缀(🐔 🐱 + 小动物 / 植物),放首尾。
67
- - 信息密度高的长帖(分【小标题】的那种)可以完全不用 emoji,靠空行和【】小标题分层——这也是 TopMind 风格。
67
+ - 信息密度高的短文(分【小标题】的那种)可以完全不用 emoji,靠空行和【】小标题分层——这也是 TopMind 风格。
68
68
  - 版式规律见 `x-layout-patterns.md`。
69
69
 
70
70
  ## 五、列表 emoji:可选、统一、克制
@@ -82,7 +82,7 @@ X 上常见的 🔥 😍 🚀 💥 开头、6–10 个话题标签、同一列
82
82
  | 段子(viral-posts 段子 / 转段子) | 0 | 0 | 0(分点不加符号,靠行间空行) | 0 |
83
83
  | 短文(topmind-briefs / 格式化成短文) | 0–2 | 0–1 | 一套 emoji 或纯文本符号 | 0 |
84
84
  | 严肃资讯 | 0 | 0–1(只用 ⚡ 📄 ⚠️ 📅) | • ▪ 或 🔹 | 0 |
85
- | 长帖资讯(【小标题】分节) | 0–1(只放结尾) | 0–1 | 一套或不用 | 0 |
85
+ | 分节资讯短文(【小标题】分节) | 0–1(只放结尾) | 0–1 | 一套或不用 | 0 |
86
86
 
87
87
  合计:一帖的点缀类 emoji(人设 + 标题 + 情绪)不超过 3 个,`lint_x_post.py` 超过 4 个会给 W8 警告。
88
88
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  > 模型名、基准名、数字、链接皆为虚构,只演示结构。
4
4
  > 交付按 [x-delivery-contract.md](x-delivery-contract.md):正文是一段可直接复制的纯文本(不含 URL、来源行、配图说明),链接一条、图片一条另发;分点可用 emoji 或「1)」「·」【小标题】,emoji 不强制,规则见 [x-post-format.md](x-post-format.md)。
5
- > 正文超过 280 加权字符时按 thread 拆条,每条一块。
5
+ > X 短文是一条纯文本帖,约 1000 字内都可以,不需要拆条。
6
6
 
7
7
  ## 例 1:数据榜单型(不用 emoji)
8
8
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  ## X 版
6
6
 
7
- - 长度:280 字符内(一条)。超了就拆 thread,最多 3 条,每条都按单帖规格写(首条最重要,时间线上只显示首条和首图)。
7
+ - 长度:一条纯文本帖,约 1000 字以内都可以,没有 280 字限制;首行做钩子。更长、需要多节多图的内容写成长文(X Article,走 `topmind-x-article`)。
8
8
  - 语言:默认中文。英文是例外:只有受众明确是英文区、或素材本身就是英文速报时才用英文(沿用数据榜单型的英文起手);中文写作沿用榜单速报型的结构。
9
9
  - 图片:1–4 张,首图最重要(时间线上只显示首图)。
10
10
  - 格式:纯文本 + 图片。不用 Markdown 标题、加粗和列表(X 不渲染)。
@@ -62,7 +62,7 @@
62
62
 
63
63
  | | X 版 | 公众号版 |
64
64
  |---|---|---|
65
- | 长度 | 每条 ≤280 字符(thread 最多 3 条) | 约 300–800 字 |
65
+ | 长度 | 一条,约 1000 字内 | 约 300–800 字 |
66
66
  | 标题 | 无(首句即标题) | 15 字内 |
67
67
  | 背景 | 不写 | 1–2 句 |
68
68
  | 图片 | 原图 1–2 张,无原图先问 | 原图 1–4 张 |
@@ -4,7 +4,7 @@
4
4
 
5
5
  ## 三原则
6
6
 
7
- **短**:一件事讲完就停。X 版每条 280 字符内(超了拆 thread,最多 3 条);公众号版约 300–800 字
7
+ **短**:一件事讲完就停。X 版一条纯文本帖,约 1000 字内;公众号版约 300–800 字
8
8
  (与 SKILL.md、`platform-specs.md` 同一口径)。
9
9
  **干**:每个字都承载信息。删掉所有"众所周知""值得一提的是"。
10
10
  **准**:数字有来源,判断有依据。不确定的写"据 X 报道",不编。
@@ -12,7 +12,7 @@
12
12
  | C | 英文清单体 | 一句引子 → 13 条 • 列表,每条一行,长短交错,无收尾 |
13
13
  | D | 中文工具推荐 | 痛点场景开头 → 是什么 → 技术来源 → 链接单独一段 → 用法举例 → 隐私说明 → 一句推荐收尾;全程无 emoji、无列表 |
14
14
  | E | 中文作品拆解 | 情绪 emoji + 标题 → 「关键细节拆解:」→ 7 条 🔸 + 1 条 🔹 收束,条目间空行 → 一句总结 → 话题标签 → 末行链接 |
15
- | F | 中文长帖资讯 | 标题行写全核心事实(谁/何时/价格)→ 导语段 → 【小标题】分节 × 5 → 每节 1–4 个短段 → 无 emoji、无话题标签 |
15
+ | F | 中文分节资讯短文 | 标题行写全核心事实(谁/何时/价格)→ 导语段 → 【小标题】分节 × 5 → 每节 1–4 个短段 → 无 emoji、无话题标签 |
16
16
 
17
17
  ## 一、开头钩子
18
18
 
@@ -28,7 +28,7 @@ TopMind 写法:短文首行 = 可选的标题 emoji(按关键词对照表,
28
28
  1. **一段一个意思**:D、F 每段 1–3 句,中文约 40–90 字;段与段之间一定空一行。
29
29
  2. **标题、引导语、列表、收尾、标签之间各空一行**;列表内部一般不空行(A、C)。
30
30
  3. **条目本身很长(超过一行)时,条目之间空一行**(E)——否则手机上挤成一团。
31
- 4. 长帖(F)用【小标题】单独一行分节,节与节之间空一行;小标题后紧跟正文,不再空两行。
31
+ 4. 较长的短文(F)用【小标题】单独一行分节,节与节之间空一行;小标题后紧跟正文,不再空两行。
32
32
  5. 不出现连续两个以上空行(段子体的行间空行是唯一例外)。
33
33
 
34
34
  ## 三、列表写法
@@ -1,5 +1,7 @@
1
1
  # X 纯文本帖排版规则
2
2
 
3
+ > 定义:**短文** = X 纯文本帖,约 1000 字以内都可以,没有 280 字限制;**长文** = X Article(走 `topmind-x-article`)。段子是短文里的一种体裁,另有一行 ≤ 20 字等版式规则。
4
+
3
5
  > 适用:`topmind-briefs`、`topmind-viral-posts`、`topmind-format` 的 X 稿,`topmind-x-article` 的 `X发布稿.txt`(长文,可有文内链接),`topmind-wechat-post` 派生的 X 稿。公众号稿继续用 Markdown。
4
6
  > X 长文富文本(`X长文.html`)以 `x-html-format.md` 为准。
5
7
  > 配套文档:**交付与列表规约 `x-delivery-contract.md`(必读必守)**、emoji `emoji-system.md`、版式规律 `x-layout-patterns.md`。
@@ -20,7 +22,7 @@ X 普通帖不渲染 Markdown:`- ` `* ` `1. ` 列表、`#` 标题、`**加粗*
20
22
  | 重点 | 📌 | 一帖最多标一条 |
21
23
  | 纯文本并列 | · | 不想用 emoji 时的默认;别用半角 `- ` `* `(会被当 Markdown) |
22
24
  | 纯文本步骤 | 1)2)3) | 全角括号;别用 `1.` `1)` |
23
- | 分节 | 【小标题】 | 长帖分节,单独成行 |
25
+ | 分节 | 【小标题】 | 较长的短文分节,单独成行 |
24
26
  | 严肃 / 英文帖 | • ▪ → | 事故、争议类不用 ✅ 🎉 |
25
27
 
26
28
  规则:同层一个符号;一条一行(中文约 30 字内);最多两层;一个列表 3–5 条、不超过 7 条,只有 2 条时写成两句;列表前一行「xx:」引导语。
@@ -29,7 +31,7 @@ X 普通帖不渲染 Markdown:`- ` `* ` `1. ` 列表、`#` 标题、`**加粗*
29
31
  ## 三、段落与留白
30
32
 
31
33
  一段 1–3 行,段与段空一行,不出现连续两个空行(段子体的行间空行除外)。
32
- 钩子 / 标题、正文、列表、收尾、话题标签之间各空一行。长帖(约 500 字以上)用【小标题】单独成行分节。
34
+ 钩子 / 标题、正文、列表、收尾、话题标签之间各空一行。较长的短文(约 500 字以上)用【小标题】单独成行分节。
33
35
  段子体:一句一行,行与行之间都空一行,零 emoji(现成文字转段子体交给 `topmind-format`)。
34
36
 
35
37
  ## 四、来源与核实
@@ -46,7 +48,7 @@ X 普通帖不渲染 Markdown:`- ` `* ` `1. ` 列表、`#` 标题、`**加粗*
46
48
  | 钩子 + 列表 | 钩子 → 「xx:」+ 3–5 条(· / 1)/ 🔹)→ 有观点的收尾 → 标签 | 更新、盘点、干货 |
47
49
  | 步骤 | 痛点 → 1)–5)或 1️⃣–5️⃣ → 一句结论 → 标签 | 教程 |
48
50
  | 对比 | 结论 → ✅ / ❌ 2–3 组 → 建议 → 标签 | 选型、评测 |
49
- | 分节长帖 | 标题行(含核心事实)→ 导语 → 【小标题】× 3–5 → 收尾 → 标签 | 信息量大的资讯(需账号支持长帖) |
51
+ | 分节短文 | 标题行(含核心事实)→ 导语 → 【小标题】× 3–5 → 收尾 → 标签 | 信息量大的资讯(仍在约 1000 字内) |
50
52
 
51
53
  链接和图片不在骨架里,另发。thread:第 1 条放钩子和最关键事实,中间条目以「2/5」开头,最后一条放话题标签;每条单独交付,链接汇总另发(见规约)。
52
54
 
@@ -64,7 +66,7 @@ X 普通帖不渲染 Markdown:`- ` `* ` `1. ` 列表、`#` 标题、`**加粗*
64
66
  |---|---|
65
67
  | `- 要点` / ` - 子要点` | `· 要点` 或 `🔹 要点` / ` ▫️ 子要点` |
66
68
  | `1. 步骤` | `1)步骤` 或 `1️⃣ 步骤` |
67
- | `## 小标题` | 单独一行文字,长帖用【小标题】 |
69
+ | `## 小标题` | 单独一行文字,较长的短文用【小标题】 |
68
70
  | `**重点**` | 去星号,前置或用「」 |
69
71
  | `> 引用` | 「引文」+ 出处 |
70
72
  | `[文字](url)` | 正文留「文字」,url 另发 |
@@ -93,5 +95,5 @@ X 普通帖不渲染 Markdown:`- ` `* ` `1. ` 列表、`#` 标题、`**加粗*
93
95
  |---|---|
94
96
  | E1–E9 | Markdown 列表 / 有序列表 / 标题 / 加粗 / 引用 / 链接 / 表格 / 代码围栏 / 删除线(错误) |
95
97
  | E10–E12 | 正文有 URL / 来源行 / 配图说明或图片占位(错误;`--long` 不查) |
96
- | W1–W7 | 反引号、列表超两层、同层混用符号、列表超 7 条、话题标签不在末行、标签超 3 个、超字数 |
98
+ | W1–W7 | 反引号、列表超两层、同层混用符号、列表超 7 条、话题标签不在末行、标签超 3 个、超过约 1000 字 |
97
99
  | W8–W13 | 点缀表情过多、AI 套话(含排比、「不仅…更…」、空泛形容)、首行过长不像钩子、连续空行、正文混入说明 / 内部标签、段子体出现 emoji(`--duanzi`) |
@@ -21,7 +21,7 @@ X 的普通帖子不渲染 Markdown。本脚本检查 X 稿,并可把常见 Ma
21
21
  E8 代码围栏 ```(多半是把交付代码块的围栏一起复制进来了);E9 删除线 ~~文字~~;--fix 会去掉 E8/E9 符号。
22
22
  --long(x-article 的 X发布稿.txt 长文兜底稿)允许文内链接,不查 E10–E12。
23
23
  警告(不影响退出码,--strict 时算失败):点缀表情过多(W8)、疑似 AI 套话(W9,含排比、「不仅…更…」、空泛形容等)、
24
- 首行过长不像钩子(W10)、连续多个空行(W11)、正文里混入其他非发布内容(W12:说明 / 内部标签 / 帖序号等)、
24
+ 首行过长不像钩子(W10)、超过约 1000 字(W7,短文上限,更长的写成 X Article)、连续多个空行(W11)、正文里混入其他非发布内容(W12:说明 / 内部标签 / 帖序号等)、
25
25
  段子体出现 emoji(W13,需 --duanzi)。
26
26
  短文分点不强制 emoji:🔹 / 1️⃣ 等 emoji 符号,或「1)」「·」「【小标题】」等纯文本方式都可以;只禁止会被当成 Markdown 的 - * + 1.。
27
27
 
@@ -83,7 +83,7 @@ CONTRAST_PAIR = {"✅", "❌"}
83
83
  MAX_ITEMS = 7
84
84
  MAX_LEVELS = 2
85
85
  MAX_TAGS = 3
86
- WEIGHT_LIMIT = 280
86
+ CHAR_LIMIT = 1000 # 短文(X 纯文本帖)约 1000 字内;更长的写成长文(X Article)
87
87
  MAX_DECOR_EMOJI = 4 # 列表符号之外的点缀表情上限(规则建议 1–3 个)
88
88
 
89
89
  # --- 去 AI 味:常见套话(只警告,不报错;规则见 writing-principles.md「去 AI 味」)--
@@ -266,9 +266,9 @@ def lint_post(start: int, lines: list[str], long_mode: bool, duanzi: bool = Fals
266
266
  first = next((ln for ln in lines if ln.strip()), "")
267
267
  if x_weight(first) > HOOK_MAX_WEIGHT:
268
268
  warns.append((start, "W10", f"首行加权字数约 {x_weight(first)},超过 {HOOK_MAX_WEIGHT}(约 30 个汉字):首行做钩子,先给结论或最扎眼的数字"))
269
- w = x_weight("\n".join(ln for ln in lines if not PLACEHOLDER_RE.match(ln)))
270
- if w > WEIGHT_LIMIT:
271
- warns.append((start, "W7", f"加权字数约 {w},超过 {WEIGHT_LIMIT}(约 140 个汉字);长帖请确认账号支持,或精简/拆帖"))
269
+ n = sum(1 for ch in URL_RE.sub("", "\n".join(ln for ln in lines if not PLACEHOLDER_RE.match(ln))) if not ch.isspace())
270
+ if n > CHAR_LIMIT:
271
+ warns.append((start, "W7", f"约 {n} 字,超过短文的 {CHAR_LIMIT} 字左右;这么长的内容写成长文(X Article)"))
272
272
  return errs, warns
273
273
 
274
274
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  A reusable skill for generating cover art for X long-form posts and WeChat articles. Goal: **striking, eye-catching, theme-focused**.
6
6
 
7
- - Version: **v0.4.11** (ships with `@topmindspace/topmind-writing-skills@0.8.39`)
7
+ - Version: **v0.4.11** (ships with `@topmindspace/topmind-writing-skills@0.8.40`)
8
8
 
9
9
  ## Style gallery
10
10
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  为 X 长文和公众号文章生成封面图的可复用技能。目标:**震撼、醒目、主题突出**。
6
6
 
7
- - 版本:**v0.4.11**(随 `@topmindspace/topmind-writing-skills@0.8.39` 发布)
7
+ - 版本:**v0.4.11**(随 `@topmindspace/topmind-writing-skills@0.8.40` 发布)
8
8
 
9
9
  ## 风格样张
10
10
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  Lays out existing text for X: **duanzi mode** (one sentence per line, a blank line between every line, no emoji at all, bullets without symbols) or **short-post mode** (paragraphing; lists become 「·」/「1)」 or, optionally, emoji bullets; title emoji and motifs are optional). Layout only — the words are never changed; a fidelity check enforces it. Links, source lines and image notes are pulled out of the body so it stays one copy-ready plain-text block; links and images are sent separately.
6
6
 
7
- - Version: **v0.1.5** (ships with `@topmindspace/topmind-writing-skills@0.8.39`)
7
+ - Version: **v0.1.6** (ships with `@topmindspace/topmind-writing-skills@0.8.40`)
8
8
 
9
9
  ## Install
10
10
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  把现成的文字排成 X 上好读的样子:**转段子**(每句一行、行间空一行,完全不用 emoji,分点不加符号)或**格式化成短文**(合理分段换行、列表改「·」「1)」或 emoji,标题 emoji 与人设点缀可选)。只动排版,不改字,自带原文保真校验;正文里的链接、来源行、配图行会拿出来另列,交付一段可直接复制的纯文本,链接和图片另发。
6
6
 
7
- - 版本:**v0.1.5**(随 `@topmindspace/topmind-writing-skills@0.8.39` 发布)
7
+ - 版本:**v0.1.6**(随 `@topmindspace/topmind-writing-skills@0.8.40` 发布)
8
8
 
9
9
  ## 安装
10
10
 
@@ -3,7 +3,7 @@ name: topmind-format
3
3
  description: "X 纯文本格式化:用户贴一段现成文字,只改排版、不改字。转段子 → 每句一行、行与行之间空一行,完全不用 emoji(去掉点缀与列表符号,分点一条一行);格式化成短文 → 合理分段换行、合理列表(「·」「1)」或 emoji,emoji 不强制,用就按 TopMind 体系)。保留原文事实与措辞,自带保真校验脚本;交付一段可直接复制的纯文本,原文里的链接(含来源)、原图、配图拿出来另发,不混进正文;没有原图时询问是否配图。只交付不代发。Use when 转段子、改成段子格式、段子格式、格式化、格式化一下、格式化成短文、排一下版、整理格式、加空行、分行、加 emoji、X 排版、format。Do NOT use for 从零写段子、涨粉帖(→ topmind-viral-posts)、从零写干货短文、快讯(→ topmind-briefs)、X 长文(→ topmind-x-article)、公众号排版与公众号 HTML(→ topmind-wechat-post)、封面(→ topmind-cover)、把帖子发出去(→ topmind-x,须用户确认)。"
4
4
  license: MIT
5
5
  metadata:
6
- version: "0.1.5"
6
+ version: "0.1.6"
7
7
  action_category: "write"
8
8
  triggers: "转段子, 改成段子, 段子格式, 格式化, 格式化一下, 格式化成短文, 排一下版, 整理格式, 加空行, 分行, 加 emoji, X 排版, format"
9
9
  author: "TopMindSpace"
@@ -9,5 +9,5 @@
9
9
  "type": "git",
10
10
  "url": "git+https://github.com/topmindspace/topmind-writing-skills.git"
11
11
  },
12
- "version": "0.1.5"
12
+ "version": "0.1.6"
13
13
  }
@@ -64,7 +64,7 @@ X 上常见的 🔥 😍 🚀 💥 开头、6–10 个话题标签、同一列
64
64
 
65
65
  - 标题行首只放第三节对照表里的标题 emoji;对不上关键词就不放,不用 🔥 😍 🚀 凑热度。
66
66
  - 账号辨识度只靠人设点缀(🐔 🐱 + 小动物 / 植物),放首尾。
67
- - 信息密度高的长帖(分【小标题】的那种)可以完全不用 emoji,靠空行和【】小标题分层——这也是 TopMind 风格。
67
+ - 信息密度高的短文(分【小标题】的那种)可以完全不用 emoji,靠空行和【】小标题分层——这也是 TopMind 风格。
68
68
  - 版式规律见 `x-layout-patterns.md`。
69
69
 
70
70
  ## 五、列表 emoji:可选、统一、克制
@@ -82,7 +82,7 @@ X 上常见的 🔥 😍 🚀 💥 开头、6–10 个话题标签、同一列
82
82
  | 段子(viral-posts 段子 / 转段子) | 0 | 0 | 0(分点不加符号,靠行间空行) | 0 |
83
83
  | 短文(topmind-briefs / 格式化成短文) | 0–2 | 0–1 | 一套 emoji 或纯文本符号 | 0 |
84
84
  | 严肃资讯 | 0 | 0–1(只用 ⚡ 📄 ⚠️ 📅) | • ▪ 或 🔹 | 0 |
85
- | 长帖资讯(【小标题】分节) | 0–1(只放结尾) | 0–1 | 一套或不用 | 0 |
85
+ | 分节资讯短文(【小标题】分节) | 0–1(只放结尾) | 0–1 | 一套或不用 | 0 |
86
86
 
87
87
  合计:一帖的点缀类 emoji(人设 + 标题 + 情绪)不超过 3 个,`lint_x_post.py` 超过 4 个会给 W8 警告。
88
88
 
@@ -12,7 +12,7 @@
12
12
  | C | 英文清单体 | 一句引子 → 13 条 • 列表,每条一行,长短交错,无收尾 |
13
13
  | D | 中文工具推荐 | 痛点场景开头 → 是什么 → 技术来源 → 链接单独一段 → 用法举例 → 隐私说明 → 一句推荐收尾;全程无 emoji、无列表 |
14
14
  | E | 中文作品拆解 | 情绪 emoji + 标题 → 「关键细节拆解:」→ 7 条 🔸 + 1 条 🔹 收束,条目间空行 → 一句总结 → 话题标签 → 末行链接 |
15
- | F | 中文长帖资讯 | 标题行写全核心事实(谁/何时/价格)→ 导语段 → 【小标题】分节 × 5 → 每节 1–4 个短段 → 无 emoji、无话题标签 |
15
+ | F | 中文分节资讯短文 | 标题行写全核心事实(谁/何时/价格)→ 导语段 → 【小标题】分节 × 5 → 每节 1–4 个短段 → 无 emoji、无话题标签 |
16
16
 
17
17
  ## 一、开头钩子
18
18
 
@@ -28,7 +28,7 @@ TopMind 写法:短文首行 = 可选的标题 emoji(按关键词对照表,
28
28
  1. **一段一个意思**:D、F 每段 1–3 句,中文约 40–90 字;段与段之间一定空一行。
29
29
  2. **标题、引导语、列表、收尾、标签之间各空一行**;列表内部一般不空行(A、C)。
30
30
  3. **条目本身很长(超过一行)时,条目之间空一行**(E)——否则手机上挤成一团。
31
- 4. 长帖(F)用【小标题】单独一行分节,节与节之间空一行;小标题后紧跟正文,不再空两行。
31
+ 4. 较长的短文(F)用【小标题】单独一行分节,节与节之间空一行;小标题后紧跟正文,不再空两行。
32
32
  5. 不出现连续两个以上空行(段子体的行间空行是唯一例外)。
33
33
 
34
34
  ## 三、列表写法
@@ -1,5 +1,7 @@
1
1
  # X 纯文本帖排版规则
2
2
 
3
+ > 定义:**短文** = X 纯文本帖,约 1000 字以内都可以,没有 280 字限制;**长文** = X Article(走 `topmind-x-article`)。段子是短文里的一种体裁,另有一行 ≤ 20 字等版式规则。
4
+
3
5
  > 适用:`topmind-briefs`、`topmind-viral-posts`、`topmind-format` 的 X 稿,`topmind-x-article` 的 `X发布稿.txt`(长文,可有文内链接),`topmind-wechat-post` 派生的 X 稿。公众号稿继续用 Markdown。
4
6
  > X 长文富文本(`X长文.html`)以 `x-html-format.md` 为准。
5
7
  > 配套文档:**交付与列表规约 `x-delivery-contract.md`(必读必守)**、emoji `emoji-system.md`、版式规律 `x-layout-patterns.md`。
@@ -20,7 +22,7 @@ X 普通帖不渲染 Markdown:`- ` `* ` `1. ` 列表、`#` 标题、`**加粗*
20
22
  | 重点 | 📌 | 一帖最多标一条 |
21
23
  | 纯文本并列 | · | 不想用 emoji 时的默认;别用半角 `- ` `* `(会被当 Markdown) |
22
24
  | 纯文本步骤 | 1)2)3) | 全角括号;别用 `1.` `1)` |
23
- | 分节 | 【小标题】 | 长帖分节,单独成行 |
25
+ | 分节 | 【小标题】 | 较长的短文分节,单独成行 |
24
26
  | 严肃 / 英文帖 | • ▪ → | 事故、争议类不用 ✅ 🎉 |
25
27
 
26
28
  规则:同层一个符号;一条一行(中文约 30 字内);最多两层;一个列表 3–5 条、不超过 7 条,只有 2 条时写成两句;列表前一行「xx:」引导语。
@@ -29,7 +31,7 @@ X 普通帖不渲染 Markdown:`- ` `* ` `1. ` 列表、`#` 标题、`**加粗*
29
31
  ## 三、段落与留白
30
32
 
31
33
  一段 1–3 行,段与段空一行,不出现连续两个空行(段子体的行间空行除外)。
32
- 钩子 / 标题、正文、列表、收尾、话题标签之间各空一行。长帖(约 500 字以上)用【小标题】单独成行分节。
34
+ 钩子 / 标题、正文、列表、收尾、话题标签之间各空一行。较长的短文(约 500 字以上)用【小标题】单独成行分节。
33
35
  段子体:一句一行,行与行之间都空一行,零 emoji(现成文字转段子体交给 `topmind-format`)。
34
36
 
35
37
  ## 四、来源与核实
@@ -46,7 +48,7 @@ X 普通帖不渲染 Markdown:`- ` `* ` `1. ` 列表、`#` 标题、`**加粗*
46
48
  | 钩子 + 列表 | 钩子 → 「xx:」+ 3–5 条(· / 1)/ 🔹)→ 有观点的收尾 → 标签 | 更新、盘点、干货 |
47
49
  | 步骤 | 痛点 → 1)–5)或 1️⃣–5️⃣ → 一句结论 → 标签 | 教程 |
48
50
  | 对比 | 结论 → ✅ / ❌ 2–3 组 → 建议 → 标签 | 选型、评测 |
49
- | 分节长帖 | 标题行(含核心事实)→ 导语 → 【小标题】× 3–5 → 收尾 → 标签 | 信息量大的资讯(需账号支持长帖) |
51
+ | 分节短文 | 标题行(含核心事实)→ 导语 → 【小标题】× 3–5 → 收尾 → 标签 | 信息量大的资讯(仍在约 1000 字内) |
50
52
 
51
53
  链接和图片不在骨架里,另发。thread:第 1 条放钩子和最关键事实,中间条目以「2/5」开头,最后一条放话题标签;每条单独交付,链接汇总另发(见规约)。
52
54
 
@@ -64,7 +66,7 @@ X 普通帖不渲染 Markdown:`- ` `* ` `1. ` 列表、`#` 标题、`**加粗*
64
66
  |---|---|
65
67
  | `- 要点` / ` - 子要点` | `· 要点` 或 `🔹 要点` / ` ▫️ 子要点` |
66
68
  | `1. 步骤` | `1)步骤` 或 `1️⃣ 步骤` |
67
- | `## 小标题` | 单独一行文字,长帖用【小标题】 |
69
+ | `## 小标题` | 单独一行文字,较长的短文用【小标题】 |
68
70
  | `**重点**` | 去星号,前置或用「」 |
69
71
  | `> 引用` | 「引文」+ 出处 |
70
72
  | `[文字](url)` | 正文留「文字」,url 另发 |
@@ -93,5 +95,5 @@ X 普通帖不渲染 Markdown:`- ` `* ` `1. ` 列表、`#` 标题、`**加粗*
93
95
  |---|---|
94
96
  | E1–E9 | Markdown 列表 / 有序列表 / 标题 / 加粗 / 引用 / 链接 / 表格 / 代码围栏 / 删除线(错误) |
95
97
  | E10–E12 | 正文有 URL / 来源行 / 配图说明或图片占位(错误;`--long` 不查) |
96
- | W1–W7 | 反引号、列表超两层、同层混用符号、列表超 7 条、话题标签不在末行、标签超 3 个、超字数 |
98
+ | W1–W7 | 反引号、列表超两层、同层混用符号、列表超 7 条、话题标签不在末行、标签超 3 个、超过约 1000 字 |
97
99
  | W8–W13 | 点缀表情过多、AI 套话(含排比、「不仅…更…」、空泛形容)、首行过长不像钩子、连续空行、正文混入说明 / 内部标签、段子体出现 emoji(`--duanzi`) |
@@ -21,7 +21,7 @@ X 的普通帖子不渲染 Markdown。本脚本检查 X 稿,并可把常见 Ma
21
21
  E8 代码围栏 ```(多半是把交付代码块的围栏一起复制进来了);E9 删除线 ~~文字~~;--fix 会去掉 E8/E9 符号。
22
22
  --long(x-article 的 X发布稿.txt 长文兜底稿)允许文内链接,不查 E10–E12。
23
23
  警告(不影响退出码,--strict 时算失败):点缀表情过多(W8)、疑似 AI 套话(W9,含排比、「不仅…更…」、空泛形容等)、
24
- 首行过长不像钩子(W10)、连续多个空行(W11)、正文里混入其他非发布内容(W12:说明 / 内部标签 / 帖序号等)、
24
+ 首行过长不像钩子(W10)、超过约 1000 字(W7,短文上限,更长的写成 X Article)、连续多个空行(W11)、正文里混入其他非发布内容(W12:说明 / 内部标签 / 帖序号等)、
25
25
  段子体出现 emoji(W13,需 --duanzi)。
26
26
  短文分点不强制 emoji:🔹 / 1️⃣ 等 emoji 符号,或「1)」「·」「【小标题】」等纯文本方式都可以;只禁止会被当成 Markdown 的 - * + 1.。
27
27
 
@@ -83,7 +83,7 @@ CONTRAST_PAIR = {"✅", "❌"}
83
83
  MAX_ITEMS = 7
84
84
  MAX_LEVELS = 2
85
85
  MAX_TAGS = 3
86
- WEIGHT_LIMIT = 280
86
+ CHAR_LIMIT = 1000 # 短文(X 纯文本帖)约 1000 字内;更长的写成长文(X Article)
87
87
  MAX_DECOR_EMOJI = 4 # 列表符号之外的点缀表情上限(规则建议 1–3 个)
88
88
 
89
89
  # --- 去 AI 味:常见套话(只警告,不报错;规则见 writing-principles.md「去 AI 味」)--
@@ -266,9 +266,9 @@ def lint_post(start: int, lines: list[str], long_mode: bool, duanzi: bool = Fals
266
266
  first = next((ln for ln in lines if ln.strip()), "")
267
267
  if x_weight(first) > HOOK_MAX_WEIGHT:
268
268
  warns.append((start, "W10", f"首行加权字数约 {x_weight(first)},超过 {HOOK_MAX_WEIGHT}(约 30 个汉字):首行做钩子,先给结论或最扎眼的数字"))
269
- w = x_weight("\n".join(ln for ln in lines if not PLACEHOLDER_RE.match(ln)))
270
- if w > WEIGHT_LIMIT:
271
- warns.append((start, "W7", f"加权字数约 {w},超过 {WEIGHT_LIMIT}(约 140 个汉字);长帖请确认账号支持,或精简/拆帖"))
269
+ n = sum(1 for ch in URL_RE.sub("", "\n".join(ln for ln in lines if not PLACEHOLDER_RE.match(ln))) if not ch.isspace())
270
+ if n > CHAR_LIMIT:
271
+ warns.append((start, "W7", f"约 {n} 字,超过短文的 {CHAR_LIMIT} 字左右;这么长的内容写成长文(X Article)"))
272
272
  return errs, warns
273
273
 
274
274
 
@@ -189,6 +189,17 @@ def main() -> None:
189
189
  except SyntaxError as e:
190
190
  check(f"可编译: scripts/{py.name}", False, str(e))
191
191
 
192
+ # 短文没有 280 字限制:约 900 字的纯文本不触发 W7;超过约 1000 字才提示写成长文(X Article)
193
+ import tempfile as _tf
194
+ LINT = ROOT / "scripts" / "lint_x_post.py"
195
+ with _tf.TemporaryDirectory() as _d:
196
+ f9 = Path(_d) / "s.txt"; f9.write_text("一段很长的短文\n\n" + "这是正文内容。" * 128 + "\n", encoding="utf-8")
197
+ r = subprocess.run([sys.executable, str(LINT), str(f9)], capture_output=True, text=True)
198
+ check("短文约 900 字不报 W7", "W7" not in r.stdout, r.stdout[:120])
199
+ f9.write_text("一段很长的短文\n\n" + "这是正文内容。" * 160 + "\n", encoding="utf-8")
200
+ r = subprocess.run([sys.executable, str(LINT), str(f9)], capture_output=True, text=True)
201
+ check("超过约 1000 字提示写成 X Article", "W7" in r.stdout and "X Article" in r.stdout, r.stdout[:120])
202
+
192
203
  if fails:
193
204
  print(f"\n[negative_tests] topmind-format: {len(fails)} 项失败")
194
205
  sys.exit(1)
@@ -4,7 +4,7 @@
4
4
 
5
5
  Rankings, infographics, monthly-report long images, posters — plus the "one image per section" workflow for splitting a long article into N shareable images. Text is 100% controllable, diffable, and iterable.
6
6
 
7
- - Version: **v0.1.6** (ships with `@topmindspace/topmind-writing-skills@0.8.39`)
7
+ - Version: **v0.1.6** (ships with `@topmindspace/topmind-writing-skills@0.8.40`)
8
8
 
9
9
  ## Install
10
10
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  榜单、信息图、月报长图、海报,以及「一段一图」的分段图批量出图。文本 100% 可控、可 diff、可迭代。
6
6
 
7
- - 版本:**v0.1.6**(随 `@topmindspace/topmind-writing-skills@0.8.39` 发布)
7
+ - 版本:**v0.1.6**(随 `@topmindspace/topmind-writing-skills@0.8.40` 发布)
8
8
 
9
9
  ## 安装
10
10
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  Short, real, hooked — read in 3 seconds, impossible not to like/comment/follow. 18 post types plus hook × body × closer combinations, summarised from common high-engagement writing patterns in the Chinese X community (all examples are original). Posts default to "duanzi" layout (one sentence per line, a blank line between lines), original images first, plus a hashtag set and classification tags. Existing text → `topmind-format`.
6
6
 
7
- - Version: **v0.3.12** (ships with `@topmindspace/topmind-writing-skills@0.8.39`)
7
+ - Version: **v0.3.13** (ships with `@topmindspace/topmind-writing-skills@0.8.40`)
8
8
 
9
9
  ## Install
10
10
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  短、真、钩子——3 秒看完,忍不住点赞/评论/关注。基于对 X 中文区常见高互动写法的归纳,提供 18 类型模板 + 钩子×主体×收尾组合玩法(示例均为自编),默认段子体排版(一句一行、行间空一行),配图原图优先,并附话题标签与分类标签。
6
6
 
7
- - 版本:**v0.3.12**(随 `@topmindspace/topmind-writing-skills@0.8.39` 发布)
7
+ - 版本:**v0.3.13**(随 `@topmindspace/topmind-writing-skills@0.8.40` 发布)
8
8
 
9
9
  ## 安装
10
10
 
@@ -3,7 +3,7 @@ name: topmind-viral-posts
3
3
  description: "X 引流段子/爆款短篇:18 类型模板(含热点资讯、冷知识、差额冲刺)+ 钩子×主体×收尾组合玩法;段子体排版(一句一行、行间空一行、完全不用 emoji,分点不加符号)、口语化、带互动钩子;每条帖子附话题标签(1–3 个 hashtag)与内部分类标签,每条交付一段可直接复制的纯文本(X 不渲染 Markdown;话题标签在末行),链接(含来源)、原图、配图另发,绝不混进正文;配图原图优先(官方/第三方/自己的后台截图);没有原图时先问用户是否配图,同意后才走 topmind-cover 出 16:9 图。只起草不代发。Use when 引流段子、段子、爆款短篇、爆款短文、涨粉帖、涨粉段子、互关帖、互关求粉、X 短帖、热点段子、蹭热点、新人报到、打卡帖、话题标签、hashtag、X 引流、traffic post、viral post;引流互动型(段子、钩子、涨粉)走本技能。Do NOT use for 把现成文字转段子、格式化、排版(→ topmind-format)、X 长文与发 X 文章(→ topmind-x-article)、公众号文章与公众号短文(→ topmind-wechat-post / topmind-briefs)、信息密度型干货短文、快讯与数据榜单(→ topmind-briefs)、封面与头图(→ topmind-cover)、长图与海报(→ topmind-poster)、把帖子发出去(→ topmind-x,须用户确认)。"
4
4
  license: MIT
5
5
  metadata:
6
- version: "0.3.12"
6
+ version: "0.3.13"
7
7
  action_category: "write"
8
8
  triggers: "引流段子, 段子, 写段子, 冷知识段子, 冲粉帖, 破千, 爆款短篇, 爆款短文, 涨粉帖, 涨粉短帖, 涨粉段子, 互关帖, 互关求粉, X 短帖, 热点段子, 蹭热点, 新人报到, 打卡帖, 话题标签, hashtag, traffic post, viral post, 写引流段子, 涨粉内容, 互关内容, X 引流"
9
9
  author: "TopMindSpace"
@@ -124,11 +124,9 @@ metadata:
124
124
 
125
125
  ## 写作铁律
126
126
 
127
- 1. **140 字生死线**:X 时间线只显示前 280 字符(约 140 个中文字),
128
- 超出部分被折叠。**钩子 + 核心事实 + 行动号召必须在前 140 字内**;
129
- hashtag 放最后一行(被折叠不影响)。
127
+ 1. **开头定生死**:读者先看到的是前几行,**钩子 + 核心事实 + 行动号召放在最前面**;
128
+ hashtag 放最后一行。没有 280 字限制,但段子要短平快,写完把废话砍掉。
130
129
  结构:第一行即钩子 → 2-4 行核心事实 → 最后一行神评论/提问。
131
- 写完数一下字数,超了就砍废话,砍到 140 字内。
132
130
  2. **段子体排版**:一句一行,**行与行之间都空一行**;一行一个意思,尽量不超过 20 字,长句在逗号处断开。
133
131
  现成文字要转段子体时交给 `topmind-format`(只排版不改字);段子体零 emoji(emoji 体系只用于短文体)。
134
132
  3. **口语化**:说人话,不说书面语。"蓝朋友""上岸""串门"比"用户""成功""交流"好。
@@ -9,5 +9,5 @@
9
9
  "type": "git",
10
10
  "url": "git+https://github.com/topmindspace/topmind-writing-skills.git"
11
11
  },
12
- "version": "0.3.12"
12
+ "version": "0.3.13"
13
13
  }
@@ -64,7 +64,7 @@ X 上常见的 🔥 😍 🚀 💥 开头、6–10 个话题标签、同一列
64
64
 
65
65
  - 标题行首只放第三节对照表里的标题 emoji;对不上关键词就不放,不用 🔥 😍 🚀 凑热度。
66
66
  - 账号辨识度只靠人设点缀(🐔 🐱 + 小动物 / 植物),放首尾。
67
- - 信息密度高的长帖(分【小标题】的那种)可以完全不用 emoji,靠空行和【】小标题分层——这也是 TopMind 风格。
67
+ - 信息密度高的短文(分【小标题】的那种)可以完全不用 emoji,靠空行和【】小标题分层——这也是 TopMind 风格。
68
68
  - 版式规律见 `x-layout-patterns.md`。
69
69
 
70
70
  ## 五、列表 emoji:可选、统一、克制
@@ -82,7 +82,7 @@ X 上常见的 🔥 😍 🚀 💥 开头、6–10 个话题标签、同一列
82
82
  | 段子(viral-posts 段子 / 转段子) | 0 | 0 | 0(分点不加符号,靠行间空行) | 0 |
83
83
  | 短文(topmind-briefs / 格式化成短文) | 0–2 | 0–1 | 一套 emoji 或纯文本符号 | 0 |
84
84
  | 严肃资讯 | 0 | 0–1(只用 ⚡ 📄 ⚠️ 📅) | • ▪ 或 🔹 | 0 |
85
- | 长帖资讯(【小标题】分节) | 0–1(只放结尾) | 0–1 | 一套或不用 | 0 |
85
+ | 分节资讯短文(【小标题】分节) | 0–1(只放结尾) | 0–1 | 一套或不用 | 0 |
86
86
 
87
87
  合计:一帖的点缀类 emoji(人设 + 标题 + 情绪)不超过 3 个,`lint_x_post.py` 超过 4 个会给 W8 警告。
88
88
 
@@ -12,7 +12,7 @@
12
12
  | C | 英文清单体 | 一句引子 → 13 条 • 列表,每条一行,长短交错,无收尾 |
13
13
  | D | 中文工具推荐 | 痛点场景开头 → 是什么 → 技术来源 → 链接单独一段 → 用法举例 → 隐私说明 → 一句推荐收尾;全程无 emoji、无列表 |
14
14
  | E | 中文作品拆解 | 情绪 emoji + 标题 → 「关键细节拆解:」→ 7 条 🔸 + 1 条 🔹 收束,条目间空行 → 一句总结 → 话题标签 → 末行链接 |
15
- | F | 中文长帖资讯 | 标题行写全核心事实(谁/何时/价格)→ 导语段 → 【小标题】分节 × 5 → 每节 1–4 个短段 → 无 emoji、无话题标签 |
15
+ | F | 中文分节资讯短文 | 标题行写全核心事实(谁/何时/价格)→ 导语段 → 【小标题】分节 × 5 → 每节 1–4 个短段 → 无 emoji、无话题标签 |
16
16
 
17
17
  ## 一、开头钩子
18
18
 
@@ -28,7 +28,7 @@ TopMind 写法:短文首行 = 可选的标题 emoji(按关键词对照表,
28
28
  1. **一段一个意思**:D、F 每段 1–3 句,中文约 40–90 字;段与段之间一定空一行。
29
29
  2. **标题、引导语、列表、收尾、标签之间各空一行**;列表内部一般不空行(A、C)。
30
30
  3. **条目本身很长(超过一行)时,条目之间空一行**(E)——否则手机上挤成一团。
31
- 4. 长帖(F)用【小标题】单独一行分节,节与节之间空一行;小标题后紧跟正文,不再空两行。
31
+ 4. 较长的短文(F)用【小标题】单独一行分节,节与节之间空一行;小标题后紧跟正文,不再空两行。
32
32
  5. 不出现连续两个以上空行(段子体的行间空行是唯一例外)。
33
33
 
34
34
  ## 三、列表写法
@@ -1,5 +1,7 @@
1
1
  # X 纯文本帖排版规则
2
2
 
3
+ > 定义:**短文** = X 纯文本帖,约 1000 字以内都可以,没有 280 字限制;**长文** = X Article(走 `topmind-x-article`)。段子是短文里的一种体裁,另有一行 ≤ 20 字等版式规则。
4
+
3
5
  > 适用:`topmind-briefs`、`topmind-viral-posts`、`topmind-format` 的 X 稿,`topmind-x-article` 的 `X发布稿.txt`(长文,可有文内链接),`topmind-wechat-post` 派生的 X 稿。公众号稿继续用 Markdown。
4
6
  > X 长文富文本(`X长文.html`)以 `x-html-format.md` 为准。
5
7
  > 配套文档:**交付与列表规约 `x-delivery-contract.md`(必读必守)**、emoji `emoji-system.md`、版式规律 `x-layout-patterns.md`。
@@ -20,7 +22,7 @@ X 普通帖不渲染 Markdown:`- ` `* ` `1. ` 列表、`#` 标题、`**加粗*
20
22
  | 重点 | 📌 | 一帖最多标一条 |
21
23
  | 纯文本并列 | · | 不想用 emoji 时的默认;别用半角 `- ` `* `(会被当 Markdown) |
22
24
  | 纯文本步骤 | 1)2)3) | 全角括号;别用 `1.` `1)` |
23
- | 分节 | 【小标题】 | 长帖分节,单独成行 |
25
+ | 分节 | 【小标题】 | 较长的短文分节,单独成行 |
24
26
  | 严肃 / 英文帖 | • ▪ → | 事故、争议类不用 ✅ 🎉 |
25
27
 
26
28
  规则:同层一个符号;一条一行(中文约 30 字内);最多两层;一个列表 3–5 条、不超过 7 条,只有 2 条时写成两句;列表前一行「xx:」引导语。
@@ -29,7 +31,7 @@ X 普通帖不渲染 Markdown:`- ` `* ` `1. ` 列表、`#` 标题、`**加粗*
29
31
  ## 三、段落与留白
30
32
 
31
33
  一段 1–3 行,段与段空一行,不出现连续两个空行(段子体的行间空行除外)。
32
- 钩子 / 标题、正文、列表、收尾、话题标签之间各空一行。长帖(约 500 字以上)用【小标题】单独成行分节。
34
+ 钩子 / 标题、正文、列表、收尾、话题标签之间各空一行。较长的短文(约 500 字以上)用【小标题】单独成行分节。
33
35
  段子体:一句一行,行与行之间都空一行,零 emoji(现成文字转段子体交给 `topmind-format`)。
34
36
 
35
37
  ## 四、来源与核实
@@ -46,7 +48,7 @@ X 普通帖不渲染 Markdown:`- ` `* ` `1. ` 列表、`#` 标题、`**加粗*
46
48
  | 钩子 + 列表 | 钩子 → 「xx:」+ 3–5 条(· / 1)/ 🔹)→ 有观点的收尾 → 标签 | 更新、盘点、干货 |
47
49
  | 步骤 | 痛点 → 1)–5)或 1️⃣–5️⃣ → 一句结论 → 标签 | 教程 |
48
50
  | 对比 | 结论 → ✅ / ❌ 2–3 组 → 建议 → 标签 | 选型、评测 |
49
- | 分节长帖 | 标题行(含核心事实)→ 导语 → 【小标题】× 3–5 → 收尾 → 标签 | 信息量大的资讯(需账号支持长帖) |
51
+ | 分节短文 | 标题行(含核心事实)→ 导语 → 【小标题】× 3–5 → 收尾 → 标签 | 信息量大的资讯(仍在约 1000 字内) |
50
52
 
51
53
  链接和图片不在骨架里,另发。thread:第 1 条放钩子和最关键事实,中间条目以「2/5」开头,最后一条放话题标签;每条单独交付,链接汇总另发(见规约)。
52
54
 
@@ -64,7 +66,7 @@ X 普通帖不渲染 Markdown:`- ` `* ` `1. ` 列表、`#` 标题、`**加粗*
64
66
  |---|---|
65
67
  | `- 要点` / ` - 子要点` | `· 要点` 或 `🔹 要点` / ` ▫️ 子要点` |
66
68
  | `1. 步骤` | `1)步骤` 或 `1️⃣ 步骤` |
67
- | `## 小标题` | 单独一行文字,长帖用【小标题】 |
69
+ | `## 小标题` | 单独一行文字,较长的短文用【小标题】 |
68
70
  | `**重点**` | 去星号,前置或用「」 |
69
71
  | `> 引用` | 「引文」+ 出处 |
70
72
  | `[文字](url)` | 正文留「文字」,url 另发 |
@@ -93,5 +95,5 @@ X 普通帖不渲染 Markdown:`- ` `* ` `1. ` 列表、`#` 标题、`**加粗*
93
95
  |---|---|
94
96
  | E1–E9 | Markdown 列表 / 有序列表 / 标题 / 加粗 / 引用 / 链接 / 表格 / 代码围栏 / 删除线(错误) |
95
97
  | E10–E12 | 正文有 URL / 来源行 / 配图说明或图片占位(错误;`--long` 不查) |
96
- | W1–W7 | 反引号、列表超两层、同层混用符号、列表超 7 条、话题标签不在末行、标签超 3 个、超字数 |
98
+ | W1–W7 | 反引号、列表超两层、同层混用符号、列表超 7 条、话题标签不在末行、标签超 3 个、超过约 1000 字 |
97
99
  | W8–W13 | 点缀表情过多、AI 套话(含排比、「不仅…更…」、空泛形容)、首行过长不像钩子、连续空行、正文混入说明 / 内部标签、段子体出现 emoji(`--duanzi`) |
@@ -21,7 +21,7 @@ X 的普通帖子不渲染 Markdown。本脚本检查 X 稿,并可把常见 Ma
21
21
  E8 代码围栏 ```(多半是把交付代码块的围栏一起复制进来了);E9 删除线 ~~文字~~;--fix 会去掉 E8/E9 符号。
22
22
  --long(x-article 的 X发布稿.txt 长文兜底稿)允许文内链接,不查 E10–E12。
23
23
  警告(不影响退出码,--strict 时算失败):点缀表情过多(W8)、疑似 AI 套话(W9,含排比、「不仅…更…」、空泛形容等)、
24
- 首行过长不像钩子(W10)、连续多个空行(W11)、正文里混入其他非发布内容(W12:说明 / 内部标签 / 帖序号等)、
24
+ 首行过长不像钩子(W10)、超过约 1000 字(W7,短文上限,更长的写成 X Article)、连续多个空行(W11)、正文里混入其他非发布内容(W12:说明 / 内部标签 / 帖序号等)、
25
25
  段子体出现 emoji(W13,需 --duanzi)。
26
26
  短文分点不强制 emoji:🔹 / 1️⃣ 等 emoji 符号,或「1)」「·」「【小标题】」等纯文本方式都可以;只禁止会被当成 Markdown 的 - * + 1.。
27
27
 
@@ -83,7 +83,7 @@ CONTRAST_PAIR = {"✅", "❌"}
83
83
  MAX_ITEMS = 7
84
84
  MAX_LEVELS = 2
85
85
  MAX_TAGS = 3
86
- WEIGHT_LIMIT = 280
86
+ CHAR_LIMIT = 1000 # 短文(X 纯文本帖)约 1000 字内;更长的写成长文(X Article)
87
87
  MAX_DECOR_EMOJI = 4 # 列表符号之外的点缀表情上限(规则建议 1–3 个)
88
88
 
89
89
  # --- 去 AI 味:常见套话(只警告,不报错;规则见 writing-principles.md「去 AI 味」)--
@@ -266,9 +266,9 @@ def lint_post(start: int, lines: list[str], long_mode: bool, duanzi: bool = Fals
266
266
  first = next((ln for ln in lines if ln.strip()), "")
267
267
  if x_weight(first) > HOOK_MAX_WEIGHT:
268
268
  warns.append((start, "W10", f"首行加权字数约 {x_weight(first)},超过 {HOOK_MAX_WEIGHT}(约 30 个汉字):首行做钩子,先给结论或最扎眼的数字"))
269
- w = x_weight("\n".join(ln for ln in lines if not PLACEHOLDER_RE.match(ln)))
270
- if w > WEIGHT_LIMIT:
271
- warns.append((start, "W7", f"加权字数约 {w},超过 {WEIGHT_LIMIT}(约 140 个汉字);长帖请确认账号支持,或精简/拆帖"))
269
+ n = sum(1 for ch in URL_RE.sub("", "\n".join(ln for ln in lines if not PLACEHOLDER_RE.match(ln))) if not ch.isspace())
270
+ if n > CHAR_LIMIT:
271
+ warns.append((start, "W7", f"约 {n} 字,超过短文的 {CHAR_LIMIT} 字左右;这么长的内容写成长文(X Article)"))
272
272
  return errs, warns
273
273
 
274
274
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  Full lifecycle for WeChat articles: delivery package, review & rewrite, three quality gates, status sync, WeChat inline typography, and publish checklist.
6
6
 
7
- - Version: **v0.3.12** (ships with `@topmindspace/topmind-writing-skills@0.8.39`)
7
+ - Version: **v0.3.13** (ships with `@topmindspace/topmind-writing-skills@0.8.40`)
8
8
 
9
9
  ## Install
10
10
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  公众号文章全生命周期:交付包、审校改写、质量三关、状态同步、微信内联排版与发布清单。
6
6
 
7
- - 版本:**v0.3.12**(随 `@topmindspace/topmind-writing-skills@0.8.39` 发布)
7
+ - 版本:**v0.3.13**(随 `@topmindspace/topmind-writing-skills@0.8.40` 发布)
8
8
 
9
9
  ## 安装
10
10
 
@@ -3,7 +3,7 @@ name: topmind-wechat-post
3
3
  description: "管一篇公众号文章从选题/底稿到发布清单的完整生命周期:交付包搭建、审校改写、质量三关(事实/逻辑/去AI味,含改稿保真溯源审计)、状态同步、微信内联排版与发布清单。只出 HTML 与清单,不代发。Use when 写公众号、写公众号文章、公众号长文、公众号排版、微信排版、公众号定稿、发公众号、公众号交付包、公众号发布清单、wechat、mp format。Do NOT use for 公众号短文与快讯(300–800 字,→ topmind-briefs)、X 帖子与段子(→ topmind-viral-posts;派生的 X 短帖交付一段可复制纯文本,链接、原图另发)、X 纯文本格式化与转段子(→ topmind-format)、X 长文(→ topmind-x-article)、封面与头图(→ topmind-cover)、长图与海报(→ topmind-poster)、只改错别字、小红书/知乎、纯网页发布、通用长文润色(→ topmind-write)。"
4
4
  license: MIT
5
5
  metadata:
6
- version: "0.3.12"
6
+ version: "0.3.13"
7
7
  action_category: "write"
8
8
  triggers: "公众号, 写公众号, 微信排版, 公众号排版, 公众号稿, 公众号长文, 排版这篇文章, 定稿, 发公众号, 公众号交付, wechat, mp format, 写公众号文章, 公众号排版定稿, 公众号发布清单"
9
9
  author: "TopMindSpace"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "topmind-wechat-post",
3
- "version": "0.3.12",
3
+ "version": "0.3.13",
4
4
  "private": true,
5
5
  "description": "公众号文章全生命周期:交付包、审校改写、质量三关、状态同步、微信内联排版与发布清单。",
6
6
  "license": "MIT",
@@ -1,5 +1,7 @@
1
1
  # X 纯文本帖排版规则
2
2
 
3
+ > 定义:**短文** = X 纯文本帖,约 1000 字以内都可以,没有 280 字限制;**长文** = X Article(走 `topmind-x-article`)。段子是短文里的一种体裁,另有一行 ≤ 20 字等版式规则。
4
+
3
5
  > 适用:`topmind-briefs`、`topmind-viral-posts`、`topmind-format` 的 X 稿,`topmind-x-article` 的 `X发布稿.txt`(长文,可有文内链接),`topmind-wechat-post` 派生的 X 稿。公众号稿继续用 Markdown。
4
6
  > X 长文富文本(`X长文.html`)以 `x-html-format.md` 为准。
5
7
  > 配套文档:**交付与列表规约 `x-delivery-contract.md`(必读必守)**、emoji `emoji-system.md`、版式规律 `x-layout-patterns.md`。
@@ -20,7 +22,7 @@ X 普通帖不渲染 Markdown:`- ` `* ` `1. ` 列表、`#` 标题、`**加粗*
20
22
  | 重点 | 📌 | 一帖最多标一条 |
21
23
  | 纯文本并列 | · | 不想用 emoji 时的默认;别用半角 `- ` `* `(会被当 Markdown) |
22
24
  | 纯文本步骤 | 1)2)3) | 全角括号;别用 `1.` `1)` |
23
- | 分节 | 【小标题】 | 长帖分节,单独成行 |
25
+ | 分节 | 【小标题】 | 较长的短文分节,单独成行 |
24
26
  | 严肃 / 英文帖 | • ▪ → | 事故、争议类不用 ✅ 🎉 |
25
27
 
26
28
  规则:同层一个符号;一条一行(中文约 30 字内);最多两层;一个列表 3–5 条、不超过 7 条,只有 2 条时写成两句;列表前一行「xx:」引导语。
@@ -29,7 +31,7 @@ X 普通帖不渲染 Markdown:`- ` `* ` `1. ` 列表、`#` 标题、`**加粗*
29
31
  ## 三、段落与留白
30
32
 
31
33
  一段 1–3 行,段与段空一行,不出现连续两个空行(段子体的行间空行除外)。
32
- 钩子 / 标题、正文、列表、收尾、话题标签之间各空一行。长帖(约 500 字以上)用【小标题】单独成行分节。
34
+ 钩子 / 标题、正文、列表、收尾、话题标签之间各空一行。较长的短文(约 500 字以上)用【小标题】单独成行分节。
33
35
  段子体:一句一行,行与行之间都空一行,零 emoji(现成文字转段子体交给 `topmind-format`)。
34
36
 
35
37
  ## 四、来源与核实
@@ -46,7 +48,7 @@ X 普通帖不渲染 Markdown:`- ` `* ` `1. ` 列表、`#` 标题、`**加粗*
46
48
  | 钩子 + 列表 | 钩子 → 「xx:」+ 3–5 条(· / 1)/ 🔹)→ 有观点的收尾 → 标签 | 更新、盘点、干货 |
47
49
  | 步骤 | 痛点 → 1)–5)或 1️⃣–5️⃣ → 一句结论 → 标签 | 教程 |
48
50
  | 对比 | 结论 → ✅ / ❌ 2–3 组 → 建议 → 标签 | 选型、评测 |
49
- | 分节长帖 | 标题行(含核心事实)→ 导语 → 【小标题】× 3–5 → 收尾 → 标签 | 信息量大的资讯(需账号支持长帖) |
51
+ | 分节短文 | 标题行(含核心事实)→ 导语 → 【小标题】× 3–5 → 收尾 → 标签 | 信息量大的资讯(仍在约 1000 字内) |
50
52
 
51
53
  链接和图片不在骨架里,另发。thread:第 1 条放钩子和最关键事实,中间条目以「2/5」开头,最后一条放话题标签;每条单独交付,链接汇总另发(见规约)。
52
54
 
@@ -64,7 +66,7 @@ X 普通帖不渲染 Markdown:`- ` `* ` `1. ` 列表、`#` 标题、`**加粗*
64
66
  |---|---|
65
67
  | `- 要点` / ` - 子要点` | `· 要点` 或 `🔹 要点` / ` ▫️ 子要点` |
66
68
  | `1. 步骤` | `1)步骤` 或 `1️⃣ 步骤` |
67
- | `## 小标题` | 单独一行文字,长帖用【小标题】 |
69
+ | `## 小标题` | 单独一行文字,较长的短文用【小标题】 |
68
70
  | `**重点**` | 去星号,前置或用「」 |
69
71
  | `> 引用` | 「引文」+ 出处 |
70
72
  | `[文字](url)` | 正文留「文字」,url 另发 |
@@ -93,5 +95,5 @@ X 普通帖不渲染 Markdown:`- ` `* ` `1. ` 列表、`#` 标题、`**加粗*
93
95
  |---|---|
94
96
  | E1–E9 | Markdown 列表 / 有序列表 / 标题 / 加粗 / 引用 / 链接 / 表格 / 代码围栏 / 删除线(错误) |
95
97
  | E10–E12 | 正文有 URL / 来源行 / 配图说明或图片占位(错误;`--long` 不查) |
96
- | W1–W7 | 反引号、列表超两层、同层混用符号、列表超 7 条、话题标签不在末行、标签超 3 个、超字数 |
98
+ | W1–W7 | 反引号、列表超两层、同层混用符号、列表超 7 条、话题标签不在末行、标签超 3 个、超过约 1000 字 |
97
99
  | W8–W13 | 点缀表情过多、AI 套话(含排比、「不仅…更…」、空泛形容)、首行过长不像钩子、连续空行、正文混入说明 / 内部标签、段子体出现 emoji(`--duanzi`) |
@@ -21,7 +21,7 @@ X 的普通帖子不渲染 Markdown。本脚本检查 X 稿,并可把常见 Ma
21
21
  E8 代码围栏 ```(多半是把交付代码块的围栏一起复制进来了);E9 删除线 ~~文字~~;--fix 会去掉 E8/E9 符号。
22
22
  --long(x-article 的 X发布稿.txt 长文兜底稿)允许文内链接,不查 E10–E12。
23
23
  警告(不影响退出码,--strict 时算失败):点缀表情过多(W8)、疑似 AI 套话(W9,含排比、「不仅…更…」、空泛形容等)、
24
- 首行过长不像钩子(W10)、连续多个空行(W11)、正文里混入其他非发布内容(W12:说明 / 内部标签 / 帖序号等)、
24
+ 首行过长不像钩子(W10)、超过约 1000 字(W7,短文上限,更长的写成 X Article)、连续多个空行(W11)、正文里混入其他非发布内容(W12:说明 / 内部标签 / 帖序号等)、
25
25
  段子体出现 emoji(W13,需 --duanzi)。
26
26
  短文分点不强制 emoji:🔹 / 1️⃣ 等 emoji 符号,或「1)」「·」「【小标题】」等纯文本方式都可以;只禁止会被当成 Markdown 的 - * + 1.。
27
27
 
@@ -83,7 +83,7 @@ CONTRAST_PAIR = {"✅", "❌"}
83
83
  MAX_ITEMS = 7
84
84
  MAX_LEVELS = 2
85
85
  MAX_TAGS = 3
86
- WEIGHT_LIMIT = 280
86
+ CHAR_LIMIT = 1000 # 短文(X 纯文本帖)约 1000 字内;更长的写成长文(X Article)
87
87
  MAX_DECOR_EMOJI = 4 # 列表符号之外的点缀表情上限(规则建议 1–3 个)
88
88
 
89
89
  # --- 去 AI 味:常见套话(只警告,不报错;规则见 writing-principles.md「去 AI 味」)--
@@ -266,9 +266,9 @@ def lint_post(start: int, lines: list[str], long_mode: bool, duanzi: bool = Fals
266
266
  first = next((ln for ln in lines if ln.strip()), "")
267
267
  if x_weight(first) > HOOK_MAX_WEIGHT:
268
268
  warns.append((start, "W10", f"首行加权字数约 {x_weight(first)},超过 {HOOK_MAX_WEIGHT}(约 30 个汉字):首行做钩子,先给结论或最扎眼的数字"))
269
- w = x_weight("\n".join(ln for ln in lines if not PLACEHOLDER_RE.match(ln)))
270
- if w > WEIGHT_LIMIT:
271
- warns.append((start, "W7", f"加权字数约 {w},超过 {WEIGHT_LIMIT}(约 140 个汉字);长帖请确认账号支持,或精简/拆帖"))
269
+ n = sum(1 for ch in URL_RE.sub("", "\n".join(ln for ln in lines if not PLACEHOLDER_RE.match(ln))) if not ch.isspace())
270
+ if n > CHAR_LIMIT:
271
+ warns.append((start, "W7", f"约 {n} 字,超过短文的 {CHAR_LIMIT} 字左右;这么长的内容写成长文(X Article)"))
272
272
  return errs, warns
273
273
 
274
274
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  Turn a Markdown draft into a "copy → paste → publish" X long-form (Article) package.
6
6
 
7
- - Version: **v0.4.18** (ships with `@topmindspace/topmind-writing-skills@0.8.39`)
7
+ - Version: **v0.4.19** (ships with `@topmindspace/topmind-writing-skills@0.8.40`)
8
8
 
9
9
  ## Install
10
10
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  把 Markdown 原稿变成"复制 → 粘贴 → 发"的 X 长文(Article)发布包。
6
6
 
7
- - 版本:**v0.4.18**(随 `@topmindspace/topmind-writing-skills@0.8.39` 发布)
7
+ - 版本:**v0.4.19**(随 `@topmindspace/topmind-writing-skills@0.8.40` 发布)
8
8
 
9
9
  ## 安装
10
10
 
@@ -3,7 +3,7 @@ name: topmind-x-article
3
3
  description: "X 长文(Article)一键发布包:Markdown 原稿 → 可直接复制的 X长文.html(富文本一键复制+配图内嵌)/ X发布稿.txt(纯文本兜底,列表自动转 emoji 项目符号;长文可保留文内链接,派生 X 短帖时链接、原图另发)+ 封面图 + 发布清单,由用户人工点发布。Use when X 长文、发 X 文章、写 X 文章、X article、长文发 X、写 X 长文、X 文章排版、推特长文、twitter 长文、Twitter Article。Do NOT use for 短推文、短帖、快讯与段子写稿(→ topmind-viral-posts 或 topmind-briefs)、现成文字格式化与转段子(→ topmind-format)、把短帖发出去(→ topmind-x,须用户确认)、公众号文章(→ topmind-wechat-post)、只要封面或头图(→ topmind-cover)。"
4
4
  license: MIT
5
5
  metadata:
6
- version: "0.4.18"
6
+ version: "0.4.19"
7
7
  action_category: "write"
8
8
  triggers: "X 长文, 发 X 文章, 写 X 文章, X article, 长文发 X, X 发长文, X 文章排版, 转纯文本, X 纯文本, X发布稿, 发 article, 一键复制, 写 X 长文, X 长文发布, 推特长文, twitter 长文, Twitter Article"
9
9
  author: "TopMindSpace"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "topmind-x-article",
3
- "version": "0.4.18",
3
+ "version": "0.4.19",
4
4
  "private": true,
5
5
  "description": "X 长文(Article)一键发布:Markdown 原稿转可直接粘贴的纯文本 + 封面图 + 发布清单。",
6
6
  "license": "MIT",
@@ -1,5 +1,7 @@
1
1
  # X 纯文本帖排版规则
2
2
 
3
+ > 定义:**短文** = X 纯文本帖,约 1000 字以内都可以,没有 280 字限制;**长文** = X Article(走 `topmind-x-article`)。段子是短文里的一种体裁,另有一行 ≤ 20 字等版式规则。
4
+
3
5
  > 适用:`topmind-briefs`、`topmind-viral-posts`、`topmind-format` 的 X 稿,`topmind-x-article` 的 `X发布稿.txt`(长文,可有文内链接),`topmind-wechat-post` 派生的 X 稿。公众号稿继续用 Markdown。
4
6
  > X 长文富文本(`X长文.html`)以 `x-html-format.md` 为准。
5
7
  > 配套文档:**交付与列表规约 `x-delivery-contract.md`(必读必守)**、emoji `emoji-system.md`、版式规律 `x-layout-patterns.md`。
@@ -20,7 +22,7 @@ X 普通帖不渲染 Markdown:`- ` `* ` `1. ` 列表、`#` 标题、`**加粗*
20
22
  | 重点 | 📌 | 一帖最多标一条 |
21
23
  | 纯文本并列 | · | 不想用 emoji 时的默认;别用半角 `- ` `* `(会被当 Markdown) |
22
24
  | 纯文本步骤 | 1)2)3) | 全角括号;别用 `1.` `1)` |
23
- | 分节 | 【小标题】 | 长帖分节,单独成行 |
25
+ | 分节 | 【小标题】 | 较长的短文分节,单独成行 |
24
26
  | 严肃 / 英文帖 | • ▪ → | 事故、争议类不用 ✅ 🎉 |
25
27
 
26
28
  规则:同层一个符号;一条一行(中文约 30 字内);最多两层;一个列表 3–5 条、不超过 7 条,只有 2 条时写成两句;列表前一行「xx:」引导语。
@@ -29,7 +31,7 @@ X 普通帖不渲染 Markdown:`- ` `* ` `1. ` 列表、`#` 标题、`**加粗*
29
31
  ## 三、段落与留白
30
32
 
31
33
  一段 1–3 行,段与段空一行,不出现连续两个空行(段子体的行间空行除外)。
32
- 钩子 / 标题、正文、列表、收尾、话题标签之间各空一行。长帖(约 500 字以上)用【小标题】单独成行分节。
34
+ 钩子 / 标题、正文、列表、收尾、话题标签之间各空一行。较长的短文(约 500 字以上)用【小标题】单独成行分节。
33
35
  段子体:一句一行,行与行之间都空一行,零 emoji(现成文字转段子体交给 `topmind-format`)。
34
36
 
35
37
  ## 四、来源与核实
@@ -46,7 +48,7 @@ X 普通帖不渲染 Markdown:`- ` `* ` `1. ` 列表、`#` 标题、`**加粗*
46
48
  | 钩子 + 列表 | 钩子 → 「xx:」+ 3–5 条(· / 1)/ 🔹)→ 有观点的收尾 → 标签 | 更新、盘点、干货 |
47
49
  | 步骤 | 痛点 → 1)–5)或 1️⃣–5️⃣ → 一句结论 → 标签 | 教程 |
48
50
  | 对比 | 结论 → ✅ / ❌ 2–3 组 → 建议 → 标签 | 选型、评测 |
49
- | 分节长帖 | 标题行(含核心事实)→ 导语 → 【小标题】× 3–5 → 收尾 → 标签 | 信息量大的资讯(需账号支持长帖) |
51
+ | 分节短文 | 标题行(含核心事实)→ 导语 → 【小标题】× 3–5 → 收尾 → 标签 | 信息量大的资讯(仍在约 1000 字内) |
50
52
 
51
53
  链接和图片不在骨架里,另发。thread:第 1 条放钩子和最关键事实,中间条目以「2/5」开头,最后一条放话题标签;每条单独交付,链接汇总另发(见规约)。
52
54
 
@@ -64,7 +66,7 @@ X 普通帖不渲染 Markdown:`- ` `* ` `1. ` 列表、`#` 标题、`**加粗*
64
66
  |---|---|
65
67
  | `- 要点` / ` - 子要点` | `· 要点` 或 `🔹 要点` / ` ▫️ 子要点` |
66
68
  | `1. 步骤` | `1)步骤` 或 `1️⃣ 步骤` |
67
- | `## 小标题` | 单独一行文字,长帖用【小标题】 |
69
+ | `## 小标题` | 单独一行文字,较长的短文用【小标题】 |
68
70
  | `**重点**` | 去星号,前置或用「」 |
69
71
  | `> 引用` | 「引文」+ 出处 |
70
72
  | `[文字](url)` | 正文留「文字」,url 另发 |
@@ -93,5 +95,5 @@ X 普通帖不渲染 Markdown:`- ` `* ` `1. ` 列表、`#` 标题、`**加粗*
93
95
  |---|---|
94
96
  | E1–E9 | Markdown 列表 / 有序列表 / 标题 / 加粗 / 引用 / 链接 / 表格 / 代码围栏 / 删除线(错误) |
95
97
  | E10–E12 | 正文有 URL / 来源行 / 配图说明或图片占位(错误;`--long` 不查) |
96
- | W1–W7 | 反引号、列表超两层、同层混用符号、列表超 7 条、话题标签不在末行、标签超 3 个、超字数 |
98
+ | W1–W7 | 反引号、列表超两层、同层混用符号、列表超 7 条、话题标签不在末行、标签超 3 个、超过约 1000 字 |
97
99
  | W8–W13 | 点缀表情过多、AI 套话(含排比、「不仅…更…」、空泛形容)、首行过长不像钩子、连续空行、正文混入说明 / 内部标签、段子体出现 emoji(`--duanzi`) |
@@ -21,7 +21,7 @@ X 的普通帖子不渲染 Markdown。本脚本检查 X 稿,并可把常见 Ma
21
21
  E8 代码围栏 ```(多半是把交付代码块的围栏一起复制进来了);E9 删除线 ~~文字~~;--fix 会去掉 E8/E9 符号。
22
22
  --long(x-article 的 X发布稿.txt 长文兜底稿)允许文内链接,不查 E10–E12。
23
23
  警告(不影响退出码,--strict 时算失败):点缀表情过多(W8)、疑似 AI 套话(W9,含排比、「不仅…更…」、空泛形容等)、
24
- 首行过长不像钩子(W10)、连续多个空行(W11)、正文里混入其他非发布内容(W12:说明 / 内部标签 / 帖序号等)、
24
+ 首行过长不像钩子(W10)、超过约 1000 字(W7,短文上限,更长的写成 X Article)、连续多个空行(W11)、正文里混入其他非发布内容(W12:说明 / 内部标签 / 帖序号等)、
25
25
  段子体出现 emoji(W13,需 --duanzi)。
26
26
  短文分点不强制 emoji:🔹 / 1️⃣ 等 emoji 符号,或「1)」「·」「【小标题】」等纯文本方式都可以;只禁止会被当成 Markdown 的 - * + 1.。
27
27
 
@@ -83,7 +83,7 @@ CONTRAST_PAIR = {"✅", "❌"}
83
83
  MAX_ITEMS = 7
84
84
  MAX_LEVELS = 2
85
85
  MAX_TAGS = 3
86
- WEIGHT_LIMIT = 280
86
+ CHAR_LIMIT = 1000 # 短文(X 纯文本帖)约 1000 字内;更长的写成长文(X Article)
87
87
  MAX_DECOR_EMOJI = 4 # 列表符号之外的点缀表情上限(规则建议 1–3 个)
88
88
 
89
89
  # --- 去 AI 味:常见套话(只警告,不报错;规则见 writing-principles.md「去 AI 味」)--
@@ -266,9 +266,9 @@ def lint_post(start: int, lines: list[str], long_mode: bool, duanzi: bool = Fals
266
266
  first = next((ln for ln in lines if ln.strip()), "")
267
267
  if x_weight(first) > HOOK_MAX_WEIGHT:
268
268
  warns.append((start, "W10", f"首行加权字数约 {x_weight(first)},超过 {HOOK_MAX_WEIGHT}(约 30 个汉字):首行做钩子,先给结论或最扎眼的数字"))
269
- w = x_weight("\n".join(ln for ln in lines if not PLACEHOLDER_RE.match(ln)))
270
- if w > WEIGHT_LIMIT:
271
- warns.append((start, "W7", f"加权字数约 {w},超过 {WEIGHT_LIMIT}(约 140 个汉字);长帖请确认账号支持,或精简/拆帖"))
269
+ n = sum(1 for ch in URL_RE.sub("", "\n".join(ln for ln in lines if not PLACEHOLDER_RE.match(ln))) if not ch.isspace())
270
+ if n > CHAR_LIMIT:
271
+ warns.append((start, "W7", f"约 {n} 字,超过短文的 {CHAR_LIMIT} 字左右;这么长的内容写成长文(X Article)"))
272
272
  return errs, warns
273
273
 
274
274