@geoly-ai/social-hub-cli 0.3.13 → 0.3.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,16 @@ All notable changes to `@geoly-ai/social-hub-cli` are documented in this file.
4
4
 
5
5
  Release workflow: `pnpm release:cli` → `pnpm publish:cli`.
6
6
 
7
+ ## [0.3.14] - 2026-08-05
8
+
9
+ ### Added
10
+
11
+ - reddit-\* 改为本仓库直接维护 —— 补 --relock 模式,恢复被误还原的作者关系轴说明
12
+
13
+ ### Fixed
14
+
15
+ - 还原 4 个 vendored reddit skill —— 冻结区不接受本地修改
16
+
7
17
  ## [0.3.13] - 2026-08-05
8
18
 
9
19
  ### Added
@@ -1,6 +1,6 @@
1
1
  {
2
- "generatedAt": "2026-08-05T03:25:04.819Z",
3
- "cliVersion": "0.3.13",
2
+ "generatedAt": "2026-08-05T06:01:06.323Z",
3
+ "cliVersion": "0.3.14",
4
4
  "commands": [
5
5
  "accounts",
6
6
  "accounts brand-bindings",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@geoly-ai/social-hub-cli",
3
- "version": "0.3.13",
3
+ "version": "0.3.14",
4
4
  "type": "module",
5
5
  "description": "social-hub CLI for Social Ops Hub",
6
6
  "repository": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 1,
3
3
  "package": "social-ops-hub",
4
- "cliVersion": "0.3.13",
4
+ "cliVersion": "0.3.14",
5
5
  "repository": "social-ops-hub",
6
6
  "publish": {
7
7
  "registry": "https://skill.sh",
@@ -359,6 +359,12 @@ ExplicitStructureSpec:
359
359
  - `title` + `body` 的完整帖子调用 `social-hub content post-review`
360
360
  - 仅标题候选可作为 `CandidateOnly` 返回,但必须标注不可直接发布、`ContentReviewStatus: NotRun`、`ReadyForUse: No`;一旦配正文,必须按完整帖子重新审核
361
361
  - 评论/回复调用 `social-hub content review`,并传入 subreddit、帖子和父评论上下文
362
+ - 知道所回帖子的确切 permalink 时带上 `thread.threadPermalink`,不知道就省略。作者关系
363
+ (`authorRelation`)由 Hub 自行派生:请求侧的 `authorRelationHint` 只是**非权威提示**、
364
+ 不是身份声明,虚假声称 `post_author` 是 **422 硬失败**而非降级;`post_author`
365
+ **不加分**,`Update ...` 开头既不扣分也不加分。**不得**为了改变评分而添加 permalink、
366
+ hint 或 update 式开头。完整规则与需记录的派生值见
367
+ `../reddit-strategy-shared/references/content-review-gate.md` §3.05
362
368
  - 先选择审核模式:最终发布账号未确定时省略 `accountId`,使用 ContentOnly;已确定时传真实账号,使用 AccountBound。Hub 要求显式品牌关系时,从已批准的策略绑定传 `brandContext`,不得猜测;`stage` 不确定时省略,不传任意值
363
369
  - 首次请求使用 `rewrite: true, attempt: 1`
364
370
  - `completed/revise` 时,应用 Hub 的 `optimized` 或 `dimensions.issues`,保留事实和内容功能后,用改后的**完整文本** `attempt: 2` 重审
@@ -80,6 +80,15 @@ C-B/C-NB, and rows that were previously low risk.
80
80
  arbitrary `stage` value.
81
81
  3. Send `rewrite: true, attempt: 1`. Inspect `executionStatus` before
82
82
  `verdict`.
83
+ For a comment/reply, include `thread.threadPermalink` when you know the
84
+ permalink of the exact post being replied to; omit it otherwise. Hub uses it
85
+ to derive `authorRelation` itself — the request-side `authorRelationHint` is
86
+ a non-authoritative hint, not an identity claim, and a false `post_author`
87
+ claim is a hard 422, not a downgrade. `post_author` grants **no score bonus**
88
+ and an `Update ...` opening is neither penalised nor rewarded. Never add a
89
+ permalink, a hint, or an update-style opening to move the score. Full rules
90
+ and the derived values to record:
91
+ `../reddit-strategy-shared/references/content-review-gate.md` §3.05.
83
92
  4. On `completed/revise`, apply each listed issue without changing approved
84
93
  facts, SKU bindings, disclosures, or the post/comment function. **Do not
85
94
  adopt the returned `optimized` draft wholesale if it changes any protected
@@ -7,7 +7,7 @@
7
7
  "contentSha256": "501408ce9cd1be969ac91c672523cde18bdbb6118836e032539ef30af98f2711"
8
8
  },
9
9
  "reddit-strategy-shared": {
10
- "contentSha256": "04c91d348907fded8cda969af973056dfff70ecfd96011e6dea01c3462f23ab0"
10
+ "contentSha256": "9ffdae74106e1b93b265bd89f6b0b1674f2b37a9dafd43c4a50129ac75f85862"
11
11
  },
12
12
  "reddit-phase-research": {
13
13
  "contentSha256": "e1818757ae92019448a454b956cb38c9cabc7e3c4762da4a6e4a765d687b8dc6"
@@ -19,10 +19,10 @@
19
19
  "contentSha256": "841d9e9928126553af0211da7d74a69af92076fc00d800dff2243075359b2157"
20
20
  },
21
21
  "reddit-content-writing": {
22
- "contentSha256": "262d8cd5bb4709452793e2711e9ea07ff73e5d46ee2e507d6723f364b3cbed01"
22
+ "contentSha256": "9b2f4cda552d5f76b3ab289504f84db599245e7245297a9d974cc55143872d8d"
23
23
  },
24
24
  "reddit-content-rewrite": {
25
- "contentSha256": "fd96108f6436804e80cb4054e5904df9ef59a4c68cec4efd410f1247bbee4735"
25
+ "contentSha256": "3e7df833877fc81a46d66ab7c827fac386a1413862724179e87570d773ab8935"
26
26
  },
27
27
  "reddit-delivery-check": {
28
28
  "contentSha256": "234d7fd1d8f2db68444674c20418c836c1b2488305b20399114dec89a0de32fc"
@@ -94,6 +94,11 @@ it is delivered to the next skill or presented as ready:
94
94
  - post (`title` + `body`) -> `social-hub content post-review`
95
95
  - comment/reply -> `social-hub content review`
96
96
 
97
+ Author-relation semantics (`authorRelation` / `authorRelationHint` /
98
+ `threadPermalink`) are defined in one place only —
99
+ `references/content-review-gate.md` §3.05. It is a Hub-derived identity check,
100
+ not a scoring option; do not restate or reinterpret it elsewhere.
101
+
97
102
  The producer must apply Hub `revise` feedback and submit the changed draft
98
103
  again within the Hub attempt limit. `executionStatus=completed` with
99
104
  `verdict=pass` is necessary for content review.
@@ -125,13 +125,18 @@ social-hub content review -t <team-id> -j '{
125
125
  "postBody": "<post body or concise factual summary>",
126
126
  "parentComment": "<required for a reply>",
127
127
  "topComments": ["<relevant top comments>"],
128
- "subredditToneHint": "<tone>"
128
+ "subredditToneHint": "<tone>",
129
+ "threadPermalink": "<permalink of the exact post being reviewed, when known>"
129
130
  },
130
131
  "rewrite": true,
131
132
  "attempt": 1
132
133
  }'
133
134
  ```
134
135
 
136
+ `threadPermalink` (also settable as `--thread-permalink`) must be the permalink of
137
+ the **exact post this comment belongs to**, or be omitted. It is not a scoring
138
+ option: see the author-relation section below.
139
+
135
140
  Always inspect `executionStatus` before `verdict`:
136
141
 
137
142
  For AccountBound, add the selected account to either payload:
@@ -151,6 +156,7 @@ property for ContentOnly.
151
156
  | `degraded`, timeout, 5xx, auth/context failure | Not passed. Do not use a local self-score as a substitute. Fix Hub availability and rerun. |
152
157
  | HTTP 400 invalid request | Fix the payload schema or omit an unsupported `stage`; do not count the failed request as an attempt or pass. |
153
158
  | HTTP 422 requesting explicit brand context | Resolve an approved `brandKey`/`campaignId` from Hub context or user-approved strategy; do not guess. |
159
+ | HTTP 422 `AUTHOR_RELATION_MISMATCH` | Hard failure, not a downgrade. You claimed `authorRelationHint: post_author` and Hub's post snapshot shows the publishing account is not that post's author. No LLM call was made and a security audit was written. Do not retry, and do not swap in a different permalink. Verify the publishing account and the permalink, or drop the hint and rerun. |
154
160
  | `revise` after the service attempt limit | Not passed. Stop with `ReadyForNextSkill: No`; do not loop forever or lower the standard. |
155
161
 
156
162
  The current Hub review service supports two attempts. `rewrite: true` lets Hub
@@ -159,6 +165,48 @@ facts, SKU bindings, disclosure requirements, subreddit constraints, and the
159
165
  requested content function. Review the actual final text, not only the model's
160
166
  suggested score.
161
167
 
168
+ ## 3.05 Author relation (`authorRelation`) — derived by Hub, never declared
169
+
170
+ `commentType` says where the comment sits (`top_level` / `reply`).
171
+ `authorRelation` says **who is speaking** (`post_author` / `other` / `unknown`).
172
+ They are two independent axes; read both.
173
+
174
+ **Authoritative source.** `authorRelation` and `authorRelationEvidence` appear
175
+ only in the **response**. Hub derives them from the publishing account, the
176
+ permalink of the post under review, and Hub's own snapshot of that post. The
177
+ request field `authorRelationHint` (CLI: `--author-relation-hint`) is an optional,
178
+ **non-authoritative** hint. It is not proof of identity, it is never echoed back
179
+ as the verdict, and evidence always overrides it — claiming `other` while the
180
+ evidence shows you are the author still yields `post_author`.
181
+
182
+ **Evidence conditions.** `post_author` / `verified_snapshot` is possible only when
183
+ the publishing account, the reviewed post's permalink, Hub's snapshot of that
184
+ post, and the snapshot's subreddit + title binding to this thread all line up.
185
+ Sending a hint, or sending a permalink for which Hub has no snapshot, does not
186
+ produce it. Never substitute another post, a guessed account, or an alternative
187
+ permalink to obtain a verifiable combination.
188
+
189
+ **Conflict and unavailability.** An explicit `post_author` claim contradicted by
190
+ the verified author is a **hard 422 `AUTHOR_RELATION_MISMATCH`**: no LLM call, a
191
+ security audit is written, and neither a retry nor a different permalink fixes it.
192
+ Missing permalink, missing snapshot, `[deleted]` author, no account, or a failed
193
+ thread binding yields `unknown` / `unavailable` — reviewed on the **ordinary
194
+ baseline**, not blocked and not penalised for it.
195
+
196
+ **Scoring boundary.** `post_author` carries **no score bonus**. It only widens
197
+ which concrete developments count as a valid thread anchor (progress, experiments,
198
+ results, failed attempts since the original post). Weights, thresholds, and the
199
+ required evidence strength are unchanged, and compliance, authenticity,
200
+ specificity, and repetition requirements are not relaxed. An opening such as
201
+ `Update in case anyone lands here later` is a neutral discourse marker: it is
202
+ **not penalised and not rewarded**; only the concrete material after it is
203
+ assessed, and a vague update can still hit the context-anchoring hard line and be
204
+ blocked.
205
+
206
+ > Agent rule: never add a hint, a permalink, or an update-style opening in order
207
+ > to move the score. Send only facts that already exist in this real thread and
208
+ > can be checked.
209
+
162
210
  ## 3.1 Structure protection on Hub `optimized` (v2.12.25)
163
211
 
164
212
  The Hub review is the **last remaining normalization exit**: it can silently
@@ -220,6 +268,8 @@ Use this compact record shape:
220
268
  - Scores: <authoritative score(s), if returned>
221
269
  - HubRecordIds: <review/audit ids, if returned>
222
270
  - HubRunOrRequestIds: <ids, if returned>
271
+ - AuthorRelation: post_author | other | unknown | NotReturned | NotApplicable (**copy the server-derived response value; never record the hint you sent.** `NotApplicable` for a post review; `NotReturned` when no successful response carried it — including a `AUTHOR_RELATION_MISMATCH` 422, where the CLI deliberately does not surface the server's derived values)
272
+ - AuthorRelationEvidence: verified_snapshot | verified_live | unavailable | mismatch | NotReturned | NotApplicable
223
273
  - BrandFitReviewRequired: true | false
224
274
  - AccountCandidateFeedback: <summary or None>
225
275
  - ReviewMode: ContentOnly | AccountBound