diff --git a/agents/trend-spotter.md b/agents/trend-spotter.md index 231e19e..8804ecf 100644 --- a/agents/trend-spotter.md +++ b/agents/trend-spotter.md @@ -335,7 +335,7 @@ Search 6: "[AI debate OR controversy OR opinion] LinkedIn [this week]" 3. **Audience fit over virality.** A trend your specific audience cares about at score 6.0 beats a viral topic at score 4.0. Relevance compounds; virality fades. -4. **Credibility is non-negotiable.** Never recommend posting on a topic where the creator has no authority. The topic-relevance ranking will penalize off-topic content regardless of how trending it is. +4. **Credibility is non-negotiable.** Never recommend posting on a topic where the creator has no authority. Topic relevance is a ranking input — off-topic content gets lower reach regardless of how trending it is. 5. **Saturation awareness saves reputation.** Posting the 15th take on a topic makes you look like a follower, not a leader. Better to skip than to add noise. @@ -350,7 +350,7 @@ Search 6: "[AI debate OR controversy OR opinion] LinkedIn [this week]" | Anti-Pattern | Why It Fails | Instead | |--------------|--------------|---------| | Reporting news without perspective | No differentiation, looks like a news feed | Add "So what?" and "Now what?" to every trend | -| Recommending off-topic trends | topic-relevance penalty, damages authority | Always check pillar fit and authority score | +| Recommending off-topic trends | off-topic content gets lower reach, damages authority | Always check pillar fit and authority score | | Chasing every trend | Dilutes positioning, exhausts creator | Max 2-3 trend posts per week, rest is evergreen | | Ignoring saturation | Late takes look derivative | Check saturation before recommending timing | | Same angle every time | Predictable, audience tunes out | Rotate across 8 angles, track recently used | diff --git a/commands/analyze.md b/commands/analyze.md index 8c706df..3ed58c2 100644 --- a/commands/analyze.md +++ b/commands/analyze.md @@ -98,7 +98,7 @@ Based on `references/troubleshooting-guide.md`, diagnose the pattern: - Posted at wrong time for YOUR audience - No pre-posting engagement (cold start) - Topic drift confusing algorithm -- External link penalizing reach +- External links correlate with lower reach - Inconsistent posting breaking topical authority ### Pattern: High Views, Low Engagement diff --git a/commands/audit.md b/commands/audit.md index dbc48ea..0872340 100644 --- a/commands/audit.md +++ b/commands/audit.md @@ -57,7 +57,7 @@ For each top-performing post, analyze: Same analysis for bottom performers: - What went wrong? - Common factors in low-performing posts? -- Were any off-topic (topic-relevance penalty)? +- Were any off-topic (topic relevance is a ranking input — off-topic gets lower reach)? - External links in body? - Poor timing? diff --git a/docs/hardening/log.md b/docs/hardening/log.md index c496f82..011db60 100644 --- a/docs/hardening/log.md +++ b/docs/hardening/log.md @@ -1810,3 +1810,46 @@ skills, plus historical CHANGELOG/docs). Promoted to a dedicated terminology-scr questions for that pass. --- + +### S27 ref-consistency A — "penalty/penalizes" framing → SSOT (external links + topic-relevance) + +**CLASS: reference-consistency** (NOT re-hardening of ✅ commands — surgical SSOT-reconciliation of a +documented divergence-class across multiple files; same tool-grounded discipline: read-and-show → +grep-confirm → re-grep final). Predicate: no surface frames external-link reach-loss or off-topic +reach-loss as a hard *named penalty* — SSOT (`references/algorithm-signals-reference.md:69-75`, `:89-90`) +says links **correlate with lower reach** (LinkedIn denies an *intentional* penalty) and topic relevance is +a **positive ranking input** with **no quantified off-topic figure**. + +**TEST (tool-grounded).** Plugin-wide `grep -rniE "penaliz|penalty"` over commands/agents/references/skills. +The 3 plan-cited lines confirmed (line-nr drift ±1 since plan written: `analyze.md:101` not `:102`, +`audit.md:60` not `:61`). Catalog split into 4 buckets, operator-approved: +- **Bucket A (fix now):** 10 hard-penalty framings of link/topic-relevance in non-format files. +- **Bucket B (defer → S28):** 6 link-penalty lines in `references/linkedin-formats.md` (`:52,:91,:194,:198,:200,:432`) — S28 already opens that file for format magnitudes; reconcile link + format in one pass. +- **Bucket C (leave — already SSOT):** `first-comment-strategy.md:7`, `glossary.md:171` (def cites SSOT); glossary term `### Link Penalty :170` kept (def is correct). +- **Bucket D (surface → new S30):** other unsourced magnitudes (−68% hashtags, −25% short-post, −15-25% topic-gap, −30-50% bait, 55% AI-comment, −25%/post, poll-overuse) — a *different* class. Engagement-pod + AI-slop "penalized" left intact (officially confirmed, high confidence). + +**HARDEN (10 edits, 6 files — Bucket A).** +1. `commands/audit.md:60` `(topic-relevance penalty)` → `(topic relevance is a ranking input — off-topic gets lower reach)`. +2. `agents/trend-spotter.md:338` `ranking will penalize off-topic content` → `Topic relevance is a ranking input — off-topic content gets lower reach`. +3. `agents/trend-spotter.md:353` `topic-relevance penalty, damages authority` → `off-topic content gets lower reach, damages authority`. +4. `references/troubleshooting-guide.md:15` `External link penalizing reach` → `External links correlate with lower reach`. +5. `references/troubleshooting-guide.md:127` `LinkedIn penalizes directing traffic away` → `body links correlate with lower reach (LinkedIn denies an intentional penalty; lead with value)`. +6. `commands/analyze.md:101` `External link penalizing reach` → `External links correlate with lower reach`. +7. `references/first-comment-strategy.md:3` `without triggering algorithm penalties` → `without the lower-reach correlation of body links`. +8. `references/first-comment-strategy.md:10` `Avoids link penalty` → `Avoids the body-link reach correlation`. +9. `references/first-comment-strategy.md:147` `Avoid link penalty` → `Avoid body-link reach hit`. +10. `references/url-processing-templates.md:396` `Reach penalty` → `Correlates with lower reach`. + +**VERIFY.** +- Re-grep final: `topic-relevance penalty|will penalize off-topic` in audit/trend-spotter → **NONE**; + `link penalty|penalizing reach|penalizes directing|triggering algorithm penalties|Reach penalty` in the + 4 link-files → **NONE**. All 10 new SSOT-framed lines present. +- `git diff --stat` = **6 files, +10/−10**. +- `bash scripts/test-runner.sh` → `Passed: 81 · Failed: 0 · Warnings: 0`, **exit 0**; counts **29/19** + unchanged (.md-only prose edits). +- Disposition: **FIXED** (10 edits, 6 files) · Bucket A complete · Bucket B → S28 · Bucket D → S30. + +**SURFACED (out of scope → queued).** Bucket D unsourced-magnitude class promoted to **S30 magnitude-scrub** +(`docs/hardening/plan.md`). Bucket B link-penalty lines folded into **S28**'s pass over `linkedin-formats.md`. + +--- diff --git a/docs/hardening/plan.md b/docs/hardening/plan.md index 040a45c..f1f79dc 100644 --- a/docs/hardening/plan.md +++ b/docs/hardening/plan.md @@ -92,6 +92,7 @@ that exercises the command's real path: | S6 video | S13 calendar | S20 competitive | S27 ref-consistency A | | S7 batch | S14 import | S21 monetize | S28 ref-consistency B | | S8 pipeline | S15 report | S22 outreach | S29 terminology-scrub | +| | | | S30 magnitude-scrub | *S9 newsletter (16-phase) may split into S9a/S9b. Otherwise one command = one session. @@ -100,12 +101,16 @@ follow-up #1 to scheduled work).** NOT full re-hardening of already-✅ commands SSOT-reconciliation of the documented divergences, same tool-grounded discipline (read-and-show → grep-confirm → re-grep final): -- **S27 (A) — "penalty/penalizes" framing → SSOT:** `references/troubleshooting-guide.md:127` - ("External link overuse — LinkedIn **penalizes**" → "correlate with lower reach"), - `commands/analyze.md:102` (milder echo), `commands/audit.md:61` ("topic-relevance **penalty**" - → SSOT frames relevance as a positive driver, not a named penalty). +- **S27 (A) — "penalty/penalizes" framing → SSOT ✅ DONE (2026-06-19, 10 edits/6 files; see `log.md`).** + The 3 cited lines (`troubleshooting-guide.md:127`, `analyze.md:101`, `audit.md:60` — nr drifted ±1) + + 7 same-class siblings (trend-spotter topic-relevance ×2, troubleshooting-guide :15, first-comment-strategy + ×3, url-processing-templates :396) reconciled to "correlate with lower reach" / "topic relevance is a + ranking input — off-topic gets lower reach". Bucket B (link-penalty lines in `linkedin-formats.md`) folded + into S28; Bucket D (other unsourced magnitudes) promoted to S30. - **S28 (B) — format magnitudes → SSOT:** `commands/video.md:69` + `references/linkedin-formats.md` - (the "30% zero-distribution" claim vs SSOT native-video framing). + (the "30% zero-distribution" claim vs SSOT native-video framing) **+ the 6 link-penalty lines folded in + from S27 Bucket B** (`linkedin-formats.md:52,:91,:194,:198,:200,:432`) — reconcile link + format framing + in one pass over that file. **S29 — terminology scrub: "thought leadership" → "LinkedIn Studio" / neutral (added 2026-06-19, operator-approved during S26).** The phrase must not appear anywhere in the plugin (it is named LinkedIn @@ -116,8 +121,18 @@ questions for this pass: (a) user-facing surface only, or include historical CHA `thought-leadership-angles.md` rename is its own sub-step — every pointer to the filename must update with it. Same tool-grounded discipline (read-and-show → grep-confirm → re-grep final); hardening-class. -Run after S26; order adjustable (S27 → S28 → S29). These edit already-hardened files surgically and are -hardening-class (commit local, no push). +**S30 — magnitude scrub: unsourced reach-coefficients → SSOT (surfaced during S27, 2026-06-19).** A +*different* class from S27's link/topic-relevance framing: discrete percentage penalties with **no +primary source in the SSOT** — `−68%` (5+ hashtags: `linkedin-growth-playbook:166`, `ab-testing-framework:66`), +`−25%` (<1000 chars: `linkedin-growth-playbook:224`), `−15-25%` (topic-gap: `glossary:235`), `−30-50%` +(engagement-bait: `glossary:91`), `55%`/`45%` (AI-comment: `engagement-coach:195`, `firsthour:112` — SSOT +carries ~45% *correlational engagement gap* at medium confidence, not a 55% reach penalty), `−25%/post` +(multiple posts/3h: `post-feedback-monitor:330`), poll-overuse (`poll-strategy-guide:20,:205`). **Leave +intact (officially confirmed, high confidence): engagement-pod + AI-slop "penalized" framing.** Full grep +catalog in `log.md` S27 entry, Bucket D. Same discipline; hardening-class. + +Run after S26; order adjustable (S27 ✅ → S28 → S29 → S30). These edit already-hardened files surgically and +are hardening-class (commit local, no push). ## End-of-session ritual (every session — STATE.md handoff baked in) diff --git a/references/first-comment-strategy.md b/references/first-comment-strategy.md index 26b58c4..b6f29f6 100644 --- a/references/first-comment-strategy.md +++ b/references/first-comment-strategy.md @@ -1,13 +1,13 @@ # First Comment Strategy -Your first comment is a strategic tool, not an afterthought. Used correctly, it extends your post's value without triggering algorithm penalties. Used poorly, it looks like spam. +Your first comment is a strategic tool, not an afterthought. Used correctly, it extends your post's value without the lower-reach correlation of body links. Used poorly, it looks like spam. ## Why First Comments Matter External links in the post body correlate with lower reach (correlational, ~38% in 2026; LinkedIn denies an intentional penalty — see `references/algorithm-signals-reference.md`). A first comment is a common hedge — but lead with standalone value either way; it's much more than a link dump. **First comment benefits:** -- Avoids link penalty while still providing resources +- Avoids the body-link reach correlation while still providing resources - Adds a second engagement surface (people reply to comments) - Signals to the algorithm that the post is generating conversation - Lets you add context that didn't fit the post's character limit @@ -144,7 +144,7 @@ Commenting on your own post is not just for adding links. Strategic self-comment | Time | Action | Purpose | |------|--------|---------| | 0 min | Post goes live | — | -| 0-1 min | First comment (if link/resource) | Avoid link penalty | +| 0-1 min | First comment (if link/resource) | Avoid body-link reach hit | | 15-30 min | Reply to first 3-5 commenters | Build early engagement momentum | | 1-2 hours | Add additional perspective or data | Re-ignite algorithm distribution | | 4-6 hours | Respond to remaining comments | Maintain conversation signal | diff --git a/references/troubleshooting-guide.md b/references/troubleshooting-guide.md index 64b49de..63b4dcc 100644 --- a/references/troubleshooting-guide.md +++ b/references/troubleshooting-guide.md @@ -12,7 +12,7 @@ Understanding why content fails is as important as knowing what works. - Posted at wrong time for YOUR audience - No pre-posting engagement (cold start) - Topic drift confusing algorithm about your expertise -- External link penalizing reach +- External links correlate with lower reach - Inconsistent posting breaking topical authority signal **Solutions:** @@ -124,7 +124,7 @@ Understanding how to recover from algorithmic suppression is critical for long-t 1. **Profile-content mismatch (profile/topic mismatch)** - Algorithm validates profile before distributing content 2. **Topic inconsistency** - Confused algorithm about your expertise 3. **Engagement pod detection** - Artificial engagement patterns flagged -4. **External link overuse** - LinkedIn penalizes directing traffic away +4. **External link overuse** - body links correlate with lower reach (LinkedIn denies an intentional penalty; lead with value) 5. **Posting frequency gap** - More than 5 days without posting 6. **Shadow ban from policy violation** - Content flagged for misinformation, spam, or harassment diff --git a/references/url-processing-templates.md b/references/url-processing-templates.md index e3b4645..df13548 100644 --- a/references/url-processing-templates.md +++ b/references/url-processing-templates.md @@ -393,7 +393,7 @@ Before publishing URL-based content: | Copying structure | Looks like plagiarism | Restructure for LinkedIn | | Burying the source | Appears deceptive | Credit early | | Over-quoting | Looks lazy | Paraphrase more | -| Link in post body | Reach penalty | Move to comment | +| Link in post body | Correlates with lower reach | Move to comment | | Missing CTA | Lower engagement | Add discussion question | | Wrong angle | Doesn't fit expertise | Choose relevant angle | | Too timely | Loses relevance fast | Add evergreen insight |