From 5c6393f2f7533d73b40725e1daf11c2840a4a25e Mon Sep 17 00:00:00 2001 From: Kjell Tore Guttormsen Date: Fri, 17 Jul 2026 03:35:40 +0200 Subject: [PATCH] =?UTF-8?q?docs(linkedin-studio):=20N4=20sannhetspass=20?= =?UTF-8?q?=E2=80=94=20GR-modellkorreksjon=20+=20maturity/saves/k=C3=B8/SB?= =?UTF-8?q?-header=20+=20refs-badge=2028?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Del 1 (RE-verifisert mot ground truth): README maturity-note (herding 29/29 + kald-review 29/29; gjenstår = GUI), CLAUDE.md maturity-linje (B-F10), hardening-plan-køen t.o.m. S31a/b/c, second-brain-header (SB-S3a-e landet, kun S4 gjenstår). Del 2: D-1 BLOCKER — algorithm-signals GR-seksjonen omskrevet mot primærkilde (LinkedIn engineering-blogg 2026-03-12, Hristo Danchev: Generative Recommender (GR) offisielt navn + LLM-retrieval + utrulling annonsert); fabrikasjonsflagget avviste en ekte primærkilde og er trukket med korreksjonsnote; 360Brew-skepsis beholdt. D-2 — saves-begrunnelse: Marketing API v202604 har POST_SAVE på /memberCreatorPostAnalytics (partner-gated; manuell inntasting forblir riktig UX). B-F11 — README refs-badge 26->28 + 25-document->28-document (ls references/*.md = 28). CLAUDE.md Architecture faar specifics-bank + contract-gate-linjer. CHANGELOG-catchup kommer i release-committen (0.6.0) for aa holde versjonsdeklarasjonene konsistente per commit. Co-Authored-By: Claude Fable 5 Claude-Session: df0a1ca3-78dd-455e-99a2-e7c133fcb5f6 --- CLAUDE.md | 6 +++-- README.md | 6 ++--- docs/hardening/plan.md | 5 +++- docs/second-brain/architecture.md | 2 +- references/algorithm-signals-reference.md | 28 ++++++++++++++++------- 5 files changed, 32 insertions(+), 15 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 6fd6dfe..19bb454 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,6 +1,6 @@ # LinkedIn Studio Plugin (v0.5.3) -Full-spectrum LinkedIn content engine — short-form feed posts, carousels, video scripts, and long-form newsletter editions — with the 2026 relevance-ranking model baked in. Maturity v0.5.3: M0 (per-user data dir `${LINKEDIN_STUDIO_DATA:-$HOME/.claude/linkedin-studio}/`, idempotent session-start migration — see `references/data-path-convention.md`) complete; all 29 command surfaces through the interactive quality-gate (`docs/hardening/log.md`). Remaining for v1.0.0: a GUI + independent cold-review coverage (the `/trekreview` artifact `docs/hardening/review.md` persists for S1 only — see `docs/hardening/plan.md`). Version history → `CHANGELOG.md`. +Full-spectrum LinkedIn content engine — short-form feed posts, carousels, video scripts, and long-form newsletter editions — with the 2026 relevance-ranking model baked in. Maturity v0.5.3: M0 (per-user data dir `${LINKEDIN_STUDIO_DATA:-$HOME/.claude/linkedin-studio}/`, idempotent session-start migration — see `references/data-path-convention.md`) complete; all 29 command surfaces through the interactive quality-gate (`docs/hardening/log.md`) AND through independent cold-review (29/29, R2a–R5 — `docs/hardening/review*.md`). Remaining for v1.0.0: a GUI. Version history → `CHANGELOG.md`. ## Architecture @@ -11,7 +11,9 @@ Full-spectrum LinkedIn content engine — short-form feed posts, carousels, vide - **Figure renderer:** `render/build-figur.mjs` — coded data figures (SVG/HTML → PNG via headless Chrome); three targets (article/carousel/single); brand tokens from the user data dir's `profile/brand-tokens.json`, neutral defaults otherwise (see `references/figure-design-guidelines.md`). Standalone CLI + importable module - **Post queue:** `assets/drafts/queue.json` (managed by `hooks/scripts/queue-manager.mjs`) - **Analytics:** CLI `scripts/analytics/` (TypeScript, needs `tsx` + `npm install`); data `assets/analytics/` (gitignored) -- **Analytics metrics (S16):** parsed CSV columns + an optional, manually-entered `saves` count (count-only in native LinkedIn analytics since ~Sept 2025, no CSV export / no API). `parseOptionalCount()`: blank / non-numeric / negative → `undefined` (`unknown`, never 0), a genuine `0` is kept; saves surfaced per-post + as `totalSaves`, but **not** folded into `engagementRate`. `dwell` stays **explicitly unmeasurable** (internal to LinkedIn, no export/API). All analytics I/O routes through the `getAnalyticsRoot()` seam (M0 per-user data-dir). +- **Specifics-bank:** `scripts/specifics-bank/` (TypeScript, needs `tsx` + `npm install`) — deterministic, topic-tagged store of the operator's lived specifics (real numbers, named cases, held opinions) in the per-user data dir; elicited/bound by `/linkedin:newsletter` Step 1.5 so drafts draw from real inventory, never invented filler +- **Contract-gate:** `scripts/contract-gate/` (TypeScript, needs `tsx` + `npm install`) — deterministic §B/§C1 rule-gate on the full draft (`/linkedin:newsletter` Step 4.5, before the AI sweeps); ratifies `rules.ts` against the edition's §E-manifest, then gates with BLOCK/WARN +- **Analytics metrics (S16):** parsed CSV columns + an optional, manually-entered `saves` count (count-only in native LinkedIn analytics since ~Sept 2025, no CSV export; the Marketing API exposes `POST_SAVE` on `/memberCreatorPostAnalytics` from v202604, but access is partner-gated — so manual entry remains the right UX). `parseOptionalCount()`: blank / non-numeric / negative → `undefined` (`unknown`, never 0), a genuine `0` is kept; saves surfaced per-post + as `totalSaves`, but **not** folded into `engagementRate`. `dwell` stays **explicitly unmeasurable** (internal to LinkedIn, no export/API). All analytics I/O routes through the `getAnalyticsRoot()` seam (M0 per-user data-dir). ## Hooks diff --git a/README.md b/README.md index b355d54..7ebacc8 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ ![Commands](https://img.shields.io/badge/commands-29-green) ![Agents](https://img.shields.io/badge/agents-19-orange) ![Hooks](https://img.shields.io/badge/hooks-9-red) -![Reference Docs](https://img.shields.io/badge/reference_docs-26-teal) +![Reference Docs](https://img.shields.io/badge/reference_docs-28-teal) ![License](https://img.shields.io/badge/license-MIT-lightgrey) Most experts know they *should* post on LinkedIn — and quietly don't. The blank editor wins. LinkedIn Studio turns that chore into a system: structured workflows that take you from idea to published, in your own voice, calibrated to how LinkedIn's **topic-relevance** ranking model (2026) actually distributes content. Two engines under one surface — a **feed engine** for short-form posts, carousels, and video scripts, and a **long-form engine** that runs newsletter editions and essays through a serious editorial pipeline before they ever lock. @@ -22,7 +22,7 @@ This is not a shortcut. Hand the wheel to the AI and you land where everyone who > New here? Run `/linkedin:onboarding` — it walks you through profile optimization, personalization, and your first published post in one guided flow (~10 minutes). > [!NOTE] -> **Pre-1.0 (v0.5.0).** The earlier 1.0.0–4.1.0 numbering reflected ambition, not maturity. Honest about where it stands today: the **architecture workstream (M0) is done** — user data now lives in a per-user data dir *outside* the plugin, with automatic migration — but no command has been through a hardening gate, command testing is incomplete, and there is no GUI yet. See [CHANGELOG.md](CHANGELOG.md). +> **Pre-1.0.** The earlier 1.0.0–4.1.0 numbering reflected ambition, not maturity. Honest about where it stands today: the **architecture workstream (M0) is done** — user data lives in a per-user data dir *outside* the plugin, with automatic migration — and all **29 command surfaces have passed both the interactive hardening gate (29/29) and independent cold-review (29/29)**. What remains for 1.0.0 is a GUI. See [CHANGELOG.md](CHANGELOG.md). --- @@ -245,7 +245,7 @@ The README is the front door. The detail lives alongside it: | For… | See | |------|-----| | Architecture — agent pipeline & selection, 9 hooks, 6 skills, personalization scoring, configuration, analytics internals | [CLAUDE.md](CLAUDE.md) | -| The 25-document knowledge base (algorithm signals, angles, frameworks, strategy guides) | [`references/`](references/) | +| The 28-document knowledge base (algorithm signals, angles, frameworks, strategy guides) | [`references/`](references/) | | Full version history and known gaps | [CHANGELOG.md](CHANGELOG.md) | | Maintenance model, fork-and-own, what upstream provides | [GOVERNANCE.md](GOVERNANCE.md) | diff --git a/docs/hardening/plan.md b/docs/hardening/plan.md index 1e22f54..820da07 100644 --- a/docs/hardening/plan.md +++ b/docs/hardening/plan.md @@ -93,6 +93,7 @@ that exercises the command's real path: | S7 batch | S14 import | S21 monetize | S28 ref-consistency B | | S8 pipeline | S15 report | S22 outreach | S29 terminology-scrub | | | | | S30 magnitude-scrub | +| | | | S31a/b/c multiplier-scrub | *S9 newsletter (16-phase) may split into S9a/S9b. Otherwise one command = one session. @@ -135,7 +136,9 @@ carries ~45% *correlational engagement gap* at medium confidence, not a 55% reac 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 +Run after S26; order adjustable (S27 ✅ → S28 ✅ → S29a–e ✅ → S30 ✅ → S31a/b/c ✅ — queue complete, see `log.md`; +S31 was cataloged during S30 as the "Nx"-multiplier + descriptive-% class, amendment followed in practice). +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/docs/second-brain/architecture.md b/docs/second-brain/architecture.md index 67adb0a..83afcb5 100644 --- a/docs/second-brain/architecture.md +++ b/docs/second-brain/architecture.md @@ -1,6 +1,6 @@ # Second Brain — Architecture Design -> **Status:** architecture **approved by operator 2026-06-23**. **SB-S0 (Foundation) + SB-S1 (Ingest + gold signal) + SB-S2 (Evolution loop) landed 2026-06-23** (`scripts/brain/`, 82 tests, gate-wired; ingest CLI + published-only invariant + operator-gated consolidation loop + session-start nudge); S3–S4 remain design-phase. +> **Status:** architecture **approved by operator 2026-06-23**. **SB-S0 (Foundation) + SB-S1 (Ingest + gold signal) + SB-S2 (Evolution loop) landed 2026-06-23** (`scripts/brain/`, 82 tests, gate-wired; ingest CLI + published-only invariant + operator-gated consolidation loop + session-start nudge). **SB-S3a–e landed 2026-06-24** (profile.md reader-wiring, supersede arm, cross-silo id-threading, operations.md ops centre, content-history retirement + read-side reconcile); only S4 (connector) remains design-phase. > **Boundary (confirmed 2026-06-23):** the **engine** (store schema · evolution loop · ingest seam) → **the plugin** (domain-general, shareable); the **user's data** (posts · articles · newsletters · plans · ideas) → the **per-user data dir** (`${LINKEDIN_STUDIO_DATA:-$HOME/.claude/linkedin-studio}/`, survives reinstall); the **personal cockpit** (the operator's day-to-day operations centre) → **Maskinrommet** (a thin layer that reads/writes *through* the plugin's store, never a fork of the engine). > **Research inputs (three parallel threads, 2026-06-23):** `research/connector-egress.md` · `research/secondbrain-sota.md` · `research/silo-inventory.md`. diff --git a/references/algorithm-signals-reference.md b/references/algorithm-signals-reference.md index 3d21c35..2954c1b 100644 --- a/references/algorithm-signals-reference.md +++ b/references/algorithm-signals-reference.md @@ -113,14 +113,25 @@ improves writing); do not justify it as "reduces reach." ## The deployed ranking model — what we can and cannot say -> **An LLM-based relevance-ranking system is live on LinkedIn in 2026.** -> **No public name. No deployment date.** +> **LinkedIn's feed ranking model has an official name: the Generative Recommender (GR).** +> Announced 2026-03-12 on LinkedIn's engineering blog (Hristo Danchev, +> [Engineering the next generation of LinkedIn's feed](https://www.linkedin.com/blog/engineering/feed/engineering-the-next-generation-of-linkedins-feed)): +> a sequential transformer-based ranker that treats member interaction history as a +> timeline, paired with a unified LLM-embedding retrieval system. Rollout announced in +> the same post. | Claim | Statement | Source | Confidence | |-------|-----------|--------|------------| -| A live LLM relevance system exists | Confirmed in direction by LinkedIn's 2026 communications. | LinkedIn comms (2026) | high | -| Production name | **Not publishable as fact.** The most-cited arXiv paper (2501.16450) is a Jan-**2025** *pre-production research* model (V1.0, 150B params, offline parity only), **withdrawn 2025-08-23**. A circulating "Generative Recommender / Hristo Danchev" engineering-post citation was independently flagged as **likely fabricated** — do not propagate. | arXiv 2501.16450; Gemini provenance flag | high (on the negative claim) | -| Deployment date | No primary source. The "early-2026" date is third-party extrapolation from the paper's Jan-**2025** date. **Do not assert a date.** | — | n/a | +| Production name | **Generative Recommender (GR)** — official, primary-source. | LinkedIn engineering blog, 2026-03-12 | high | +| LLM-based retrieval | Confirmed: "a unified retrieval system leveraging advances in LLMs to generate a high-quality representation of our members and content." | Same post | high | +| Deployment | Rollout announced 2026-03-12 ("rolling out a new advanced ranking system"). Full-coverage completion date not stated — do not assert one. | Same post | high (announcement), n/a (completion) | +| "360Brew" as the production name | **Still not publishable.** The arXiv paper (2501.16450) is a Jan-**2025** *pre-production research* model (V1.0, 150B params, offline parity only), **withdrawn 2025-08-23**; the "360Brew" label is third-party and has no official confirmation. GR is the official name. | arXiv 2501.16450 | high (on the negative claim) | + +*Correction note (2026-07-17): this section previously said "No public name. No +deployment date." and flagged the Generative Recommender / Hristo Danchev +engineering-post citation as likely fabricated. That flag was wrong — and was already +wrong at "Last updated 2026-05": the official post had been live since 2026-03-12, +two months earlier. The fabrication flag rejected a genuine primary source.* ## Operational heuristics (directional — test per account) @@ -177,10 +188,11 @@ source.) --- -*Last updated: 2026-05. Maintained as the single canonical algorithm statement; cite, do -not restate.* +*Last updated: 2026-07-17 (GR-model correction). Maintained as the single canonical +algorithm statement; cite, do not restate.* -*Sources (per-claim quality/confidence noted inline): arXiv 2501.16450 (pre-production +*Sources (per-claim quality/confidence noted inline): LinkedIn Engineering — "Engineering +the next generation of LinkedIn's feed" (Hristo Danchev, 2026-03-12); arXiv 2501.16450 (pre-production research paper, withdrawn 2025-08-23); LinkedIn Engineering — "Leveraging Dwell Time" (2024); Tim Jurka, Head of Feed AI (2025-08-11); Laura Lorenzetti, VP & Exec Editor (2026-05-19); Gyanda Sachdeva, VP Product (2026-02-16); Matt Navarra relaying LinkedIn Sr. Director Product (Aug 2025);