fix(linkedin-studio): S23 harden profile — re-source profile-as-validated-object overclaim to SSOT, soften SEO claims

Profile is a self-contained, prose-heavy Grow-tier audit command (no agent, no
routing, no state). Grant-hygiene was already clean (Read + AskUserQuestion, both
used, no orphans/missing). The one real axis was b': the file repeatedly framed
the relevance model as reading and VALIDATING your profile and gating distribution
on it — contradicting the SSOT (algorithm-signals-reference.md), which confirms
only topic/interest relevance as a ranking input (content matched to a viewer's
interests, incl. beyond your network) with no off-topic magnitude figure and no
weighted profile criteria. The file was internally inconsistent — its own soft,
SSOT-true framing already sat at :17/:25/:27.

12 edits, commands/profile.md only:
- desc :5: drop "validates your profile BEFORE distributing content".
- :31 + table: drop "the model evaluates five criteria (see SSOT)" false
  attribution + HIGH/MEDIUM "Impact if Missing" postulated weights -> "LinkedIn
  does not publish a profile-scoring breakdown ... practitioner heuristics",
  column -> "Priority (heuristic)".
- :99/:161/:173/:230: reframe "first signal telling ... qualified" / "relevance
  validation" / "checks if you're connected" / "if LinkedIn's AI read my profile,
  would it believe" away from the profile-read-by-model mechanic.
- :25/:27/:51/:67: conflation fix — "your demonstrated expertise" / "tell the
  relevance model what you're expert in" -> "a viewer's interests" / "topic-
  relevance distribution" (SSOT wording) + no-percentage honesty.
- :24 (B2): "Goes to 10% of audience" -> "a slice of your network".
- :52/:61 (P3): "highest-weight search field" -> "highest-leverage" (self-
  justified rest kept).

Verify: re-grep final file — all overclaim/conflation patterns NONE, new SSOT
text in place; grant-hygiene unchanged; test-runner 81/0/0 exit 0; counts 29/19
unchanged (.md-only). FIXED, 0 deferrals.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016qgzo6rxthw7KuxHjn5vyE
This commit is contained in:
Kjell Tore Guttormsen 2026-06-19 21:12:54 +02:00
commit 10e10897ca
2 changed files with 105 additions and 22 deletions

View file

@ -1613,3 +1613,80 @@ source so the B2 rewrite can't be re-rendered from a stale reference).**
non-scope follow-up (the command calls the mutation correctly).
---
### /linkedin:profile — profile/topic-relevance + profile-SEO audit walkthrough (7 sections → prioritized action plan); self-contained, no agent/routing/state (S23)
**INTENT.** Grow-tier **atomic execution command**, prose-heavy + guided (`AskUserQuestion`).
**Self-contained** — no agent delegation, no `/linkedin:Y` routing, no state mutation. Audits the
profile for the topic-relevance ranking signal + profile search-SEO.
**SIMULATE (adversarial cold quality-reviewer; grounded prose-trace — pure prose, NO fixture: command
reads/mutates no state).** Headline section (`:79-96`) traced against operator input
`"AI-rådgiver | KI-transformasjon | Innholdsprodusent"` → checklist `:85-88` yields NO audience / NO
outcome / vague titles → concrete non-generic rewrite direction. Every mechanical claim (grant grep, SSOT
read, pattern greps) from a tool, never by reasoning.
**EVALUATE (relevant axes; mechanical predicate each).**
- **(a) intention: PASS** — desc + Grow-journey role coherent; 3 refs (`algorithm-signals-reference.md`,
`troubleshooting-guide.md`, `SKILL.md`) resolve.
- **(b) algorithm-bar (axis-b): 1 systemic FINDING (B1) + 1 minor (B2).** **B1 — "profile-as-validated-object"
overclaim, 9 sites:** the file repeatedly asserts the relevance model **reads & validates your profile**
and gates distribution on it — `:5` "validates your profile BEFORE distributing content"; `:31` "the model
**evaluates five criteria** (see SSOT)" (**false SSOT attribution** — SSOT has no such breakdown); `:35-39`
"Impact if Missing: **HIGH/HIGH/MEDIUM…**" (postulated coefficients SSOT forbids, `:14/:23`); `:99` "first
signal telling … what you're **qualified** to discuss"; `:161` "relevance **validation**"; `:173` "**checks
if** you're connected"; `:230` "if LinkedIn's AI **read my profile**, would it **believe**"; `:51/:67` SEO
conflation ("**tell the relevance model** what you're expert in" / "the **relevance model's expertise
signal**"). SSOT (`algorithm-signals-reference.md:25-30/:85-90`) confirms ONLY: topic/interest relevance is a
ranking input — content matched to a **viewer's interests** is distributed incl. beyond your network (Jurka,
high); **no off-topic magnitude figure; no weighted profile criteria**. File was **internally inconsistent**
its own soft, SSOT-true framing already at `:17/:25/:27`. Same class as follow-up #1 (`audit.md:61`) +
v4.0.0 "reconcile to one sourced statement". **B2** `:24` "Goes to **10% of audience**" — postulated
old-model number (`:131` "40%" is an illustrative impact-bullet example → PASS).
- **(c) quality rules: PASS** — no post emission (audit prose only); buzzword list cited correctly (`:73`
steers away from "thought leader/guru/ninja").
- **(d) grants + graceful + wiring: PASS.** **Grant-hygiene REN (two-way):** `allowed-tools` = `Read` +
`AskUserQuestion` (`:11-13`), both used (`:21/:27/:31/:236` Read; `:77` AskUserQuestion); WebFetch / Write /
Bash / Task / subagent_type / .mjs → **NONE** (no orphans, no missing node/Bash grant). No agent/routing.
Graceful degradation OK (Q&A runs regardless of ref availability).
- **P3 — profile-SEO honesty (`:41-73`): largely defensible** (about LinkedIn *search*, not the ranking
model; correctly does NOT cite SSOT). One practitioner-claim-as-fact: "**highest-weight** search field"
(`:52` prose + `:61` table) — self-justified mechanically, softened not removed.
**HARDEN (12 edits, 1 file — `commands/profile.md`; all surgical re-source to SSOT framing).**
1. [REWORK · b] `:5` desc — "validates your profile BEFORE distributing content" → "a coherent, on-topic
profile reinforces the topic-relevance signal LinkedIn uses to decide how widely your content is distributed".
2. [REWORK · b] `:24` (B2) — "Goes to 10% of audience" → "a slice of your network sees it".
3. [REWORK · b] `:25/:27` — "content matched to **your demonstrated expertise**" → "**a viewer's interests**"
(SSOT wording) + added "LinkedIn confirms no off-topic reach-reduction figure — not a quantified penalty".
4. [REWORK · b] `:31` + table `:33-39` — dropped "the model evaluates five criteria (see SSOT)" + HIGH/MEDIUM
"Impact if Missing" weights → "LinkedIn does **not** publish a profile-scoring breakdown … practitioner
heuristics", column → "Priority (heuristic)", High/Medium relabeled directional.
5. [REWORK · b] `:99` — "first signal telling … qualified to discuss" → "the clearest place to state … the
strongest single contribution to a coherent topic signal".
6. [REWORK · b] `:161` — "Critical for profile/topic-relevance validation" → "Your top skills are a strong,
searchable topic signal".
7. [REWORK · b] `:173` — "relevance checks if you're connected" → "a network concentrated in your expertise
area reinforces your topic signal and social proof (heuristic — LinkedIn doesn't publish network as a
profile-ranking factor)".
8. [REWORK · b] `:230` — "If LinkedIn's AI read my profile, would it believe I'm an expert" → "Does my
profile make it obvious — to a human and to LinkedIn's topic-matching".
9. [REWORK · b] `:51/:67` SEO conflation — "tell the relevance model what you're expert in" → "make your
topic legible … to topic-relevance distribution"; "the relevance model's expertise signal" → "carry your
strongest on-topic signal".
10. [NICE · P3] `:52/:61` — "highest-weight search field" → "highest-leverage" (×2; rest self-justified, kept).
**VERIFY.**
- Re-grepped final file. All overclaim/conflation patterns (`validates your profile before | evaluates five
criteria | first signal telling | qualified to discuss | checks if you're connected | relevance validation |
if linkedin's ai read | 10% of audience | highest-weight | demonstrated expertise | Impact if Missing | tell
the relevance model | relevance model's expertise signal`) → **NONE**. New SSOT text present (`:26/:28/:33/
:38/:54/:178/:235`).
- Grant-hygiene unchanged: `allowed-tools` = Read + AskUserQuestion (`:11-13`); WebFetch/Write/Bash/Task/.mjs → **NONE**.
- `git diff --stat` = 1 file, **+28 / 22**.
- `bash scripts/test-runner.sh``Passed: 81 · Failed: 0 · Warnings: 0`, **exit 0**; counts **29/19**
unchanged (.md-only edits — node hook/analytics tests not triggered).
- Disposition: **FIXED** (12 edits, 1 file) · 0 deferrals · axis-b **FIXED**, axes a/c/d **PASS** · no
fixture needed (pure prose, no state).
---