Cold-read triage of the ~34 uncalibrated baseline-audit findings (C13–C46) that never got a second hostile pass. An independent Opus reader classified each against the current code; every disposition was grep-verified in the main session. Result: 0 still-real, 23 already-fixed, 1 outdated-drop (24 grouped/sub-claim entries). No inline code fix needed — the v4.0.0 + S13–S16 remediation had already closed every still-real item (dead lint, 11 orphan agents, carousel full-deck clipboard, router tiering, onboarding inline, de-AI gate, video gate, post-feedback-monitor->Opus, series-path parameterization, SKILL roster). Deliverable: docs/remediation/c13-c46-triage.md (disposition record) + docs/remediation/review.md (S17 review, ALLOW). /trekreview: brief-conformance 0 findings; code-correctness 2 MAJOR in the triage doc's own prose (one overclaim, one line-pointer) FIXED in-session — no false-green disposition. Gate: test-runner.sh 74/0/0, hooks node --test 98/98, analytics 116/116. M0 (per-user data-dir migration) deferred to the UI track. Remediation COMPLETE. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
106 lines
11 KiB
Markdown
106 lines
11 KiB
Markdown
# C13–C46 Triage — disposition of the uncalibrated audit findings
|
||
|
||
> **Session:** S17 (last finish-plan session). **Source:** the ~34 findings the
|
||
> 2026-05-29 baseline audit (`docs/critical-review-2026-05-29.local.md`) flagged in
|
||
> §10 as *file-evidenced but uncalibrated* — never put through the second hostile-read
|
||
> pass that calibrated C1–C12. **Method:** independent COLD read delegated to an Opus
|
||
> Agent (no drafting-session context), every disposition then **grep-verified in the
|
||
> main session** against the current code (v4.1.0). Triage only changes state by
|
||
> *recording a disposition*; any still-real finding is fixed inline before this file is
|
||
> committed.
|
||
|
||
## How the ~34 canonical findings map here
|
||
|
||
The audit never persisted a discrete `C13 … C46` list — §10 reports "46 total canonical
|
||
findings", of which 12 (C1–C12) were calibrated and remediated in v4.0.0, leaving **~34
|
||
uncalibrated (C13–C46)**. The published audit body is the canonical record: it surfaces
|
||
the load-bearing uncalibrated ones as `[unverified-major]` / `[unverified-minor]` and
|
||
folds the rest into §5 / §6 / §9 prose. The 24 grouped findings below cover that set;
|
||
several are multi-sub-claim bundles (F-VIDEO = 3, F-SKILL-ROUTER = 3, F-GENERALIZE = 2),
|
||
which expands the count toward ~34 when each sub-claim is counted. The §3/§3b numeric
|
||
algorithm-claim rows were the *calibrated* C1–C12 set (carousel 6.6 %/1.92 %, comment
|
||
15x/5x, link penalty, 360Brew name/date) — already remediated in v4.0.0 and enforced by
|
||
`test-runner.sh` Section 8; not re-triaged here, confirmed green.
|
||
|
||
## Disposition summary
|
||
|
||
**0 still-real · 23 already-fixed · 1 outdated-drop (deliberate decision)** across the 24
|
||
grouped/sub-claim entries in the table below (the audit bundles F-VIDEO into 3 sub-claims
|
||
and F-SKILL-ROUTER into 3; counting bundles as single groups gives "19 already-fixed, 1
|
||
outdated-drop", same verdict). No inline fix was required for S17. Gate at triage time:
|
||
`test-runner.sh` **74/0/0**, hooks `node --test` **98/98**, analytics `npm test`
|
||
**116/116**.
|
||
|
||
| ID | Finding (short) | Sev | Disposition | Evidence (current code) |
|
||
|----|-----------------|-----|-------------|--------------------------|
|
||
| **F-LINT** | Dead structural lint (29 failures; stale `linkedin:NAME.md` layout, 14-agent list, deleted `personalization-scorer`, fabricated `auto_discover`) | major | already-fixed | `scripts/test-runner.sh` runs **74 pass / 0 fail / 0 warn, exit 0**; derives counts dynamically + asserts `EXPECT_AGENTS/COMMANDS/REFS/SKILLS = 19/29/25/6` |
|
||
| **F-SCHED** | Auto-publish / scheduling boundary never disclosed | major | already-fixed | `README.md` Boundaries §; `commands/calendar.md:92-93` — tool does **not** post on your behalf |
|
||
| **F-PROFILE-SEO** | `/linkedin:profile` is a credibility checklist, not an SEO/search surface | minor | already-fixed | `commands/profile.md` Profile-SEO §: headline-as-highest-weight, per-section keyword table, search-index, semantic search |
|
||
| **F-VIDEO (a)** | No hard 9:16 (1080×1920) + 3-sec-hook gate | major | **outdated-drop** | Deliberate: `commands/video.md` — 4:5/1:1 for feed, 9:16 = opt-in; "3-sec hook" framed as cross-platform folklore, not a LinkedIn ranking signal |
|
||
| **F-VIDEO (b)** | 4:5 "preferred" vs "deprioritized" self-contradiction across files | major | already-fixed | Consistent "preferred" in `commands/video.md`, `references/video-strategy-guide.md`, `references/linkedin-formats.md`; no "deprioritized" string remains |
|
||
| **F-VIDEO (c)** | No caption / SRT output | major | already-fixed | `commands/video.md` (SRT upload / native auto-captions + caption block); `references/video-strategy-guide.md` |
|
||
| **F-VIDEO-TASK** | `video.md` had no `Task` tool to call its own agent | major | already-fixed | `commands/video.md:15` (`Task` in the allowed-tools block at `:8-16`); `:81` invokes `subagent_type: linkedin-studio:video-scripter` |
|
||
| **F-NEWSDIST** | Newsletter *distribution* mechanics omitted (notification leverage, cadence, funnel, cold-start) | minor | already-fixed | Distribution layer in `commands/newsletter.md` (delingstekst + hook gate); mechanics in `references/newsletter-strategy-guide.md`, linked from `strategy.md`/skills |
|
||
| **F-OUTREACH** | Templates-without-tracking (no pipeline state) | minor | already-fixed | `commands/outreach.md` pipeline board/tracker (Step 8); `hooks/scripts/state-updater.mjs` `recordOutreachContact()` |
|
||
| **F-DEAI** | No short-form de-AI/differentiation gate; `differentiation-checker`+`voice-trainer` orphaned | major | already-fixed | `differentiation-checker` wired in `post/quick/react/carousel/video` (5 cmds); `voice-trainer` in `setup.md` |
|
||
| **F-ONBOARD-INLINE** | Onboarding dead-ends at "go run /linkedin:first-post" | major | already-fixed | `commands/onboarding.md` — drafts the first post **inline**; "do NOT hand off to another command" |
|
||
| **F-ROUTER** | Flat 22-item router menu | major | already-fixed | `commands/linkedin.md` — five-journey tiering (Start·Create·Engage·Measure·Grow) + front-doors + ~1K soft-gating |
|
||
| **F-NEWS-BANNER** | No time/effort expectation atop `/linkedin:newsletter` | major | already-fixed | `commands/newsletter.md:25-28` — "multi-session, multi-gate (16 phases) … ~4–8+ hours" banner |
|
||
| **F-CAROUSEL-CLIP** | Only the caption copied, not the full deck | major | already-fixed | `commands/carousel.md:191` — "Assemble the entire deck — every slide's copy … into ONE clipboard payload" |
|
||
| **F-PILLAR-COUNT** | `setup.md` (5) vs `onboarding.md` (3-5) pillar disagreement | minor | already-fixed | The named disagreement is closed — both now **declare 5**: `commands/setup.md:312-313`, `commands/onboarding.md:155` (and `profile.md:155,198`). See note¹ — the surviving "3-5 core topics" strings are a distinct focus-discipline heuristic, not the pillar-count declaration. |
|
||
| **F-ORPHANS** | 11 of 19 agents never invoked by any command | major | already-fixed | All 11 wired — per-agent map below (each ≥1 command) |
|
||
| **F-PFM-MODEL** | `post-feedback-monitor` on Haiku doing numeric reasoning | minor | already-fixed | `agents/post-feedback-monitor.md:15` `model: opus`; lint Section 10 enforces model-consistency |
|
||
| **F-PERSONA-LAYER** | v3.1 per-artifact-persona resolution at the wrong layer | judgment | already-fixed | Resolution moved to orchestrator: `commands/newsletter.md` 4-tier fallback (edition-state → series file → plugin library → interactive); agent only documents the library |
|
||
| **F-TRIO-OVERLAP** | Measure review-trio overlap before defending the redundancy | major | already-fixed | `docs/remediation/overlap-measurement.md` measured catch-sets on the shared Del 4 edition → NO-TRIM (every gate ≥1 unique catch; the 4 overlaps justified, no subsumption) |
|
||
| **F-SKILL-ROUTER (a)** | Router skill still says "thought leadership plugin" | major | already-fixed | `skills/linkedin-studio/SKILL.md` — 0 occurrences of "thought leadership plugin"; named "LinkedIn Studio" |
|
||
| **F-SKILL-ROUTER (b)** | Router skill lists 14 agents | major | already-fixed | `skills/linkedin-studio/SKILL.md` "All Agents" table = **19** rows |
|
||
| **F-SKILL-ROUTER (c)** | Router skill omits `newsletter`/`headless-review`/`pivot`/`react` | major | already-fixed | `skills/linkedin-studio/SKILL.md` — all four present in the command table |
|
||
| **F-GENERALIZE** | Norwegian lock + private series-path default + undocumented env-var + non-shipping contract | major | already-fixed (M0 sub-claim correctly deferred) | Path parameterized `${LTL_SERIES_ROOT:-$HOME/linkedin-series}` (`commands/newsletter.md:46,148-149`, env-var documented); language configurable (`agents/language-reviewer.md`, default `en`); **no `/Users/ktg` or `maskinrommet/serier` in any shipping file**; contract has in-tree fallback (`references/longform-quality-rules.md`) |
|
||
| **F-COUNT-STRINGS** | Stale "25 commands"/count strings in onboarding/router/skill | minor | already-fixed | `commands/onboarding.md` says "29 commands"; remaining count strings are version-history prose; lint guards the current declarations |
|
||
|
||
## F-ORPHANS — per-agent wiring map (all 11 closed)
|
||
|
||
| Agent | Wired into (`subagent_type: linkedin-studio:<name>`) |
|
||
|-------|------------------------------------------------------|
|
||
| content-optimizer | `ab-test.md`, `post.md` |
|
||
| strategy-advisor | `strategy.md` |
|
||
| analytics-interpreter | `report.md`, `analyze.md` |
|
||
| engagement-coach | `firsthour.md` |
|
||
| content-planner | `pipeline.md`, `batch.md` |
|
||
| network-builder | `outreach.md` |
|
||
| trend-spotter | `pipeline.md`, `batch.md` |
|
||
| voice-trainer | `setup.md` |
|
||
| differentiation-checker | `post.md`, `quick.md`, `react.md`, `carousel.md`, `video.md` |
|
||
| post-feedback-monitor | `calendar.md`, `firsthour.md` |
|
||
| video-scripter | `video.md` |
|
||
|
||
## Non-findings (cosmetic only — no action; recorded so they aren't re-raised)
|
||
|
||
- **`agents/language-reviewer.md` description/intro prose** still says "Norwegian", but the
|
||
agent *body* resolves the language via the `language` parameter (default `en`), so
|
||
behavior is generalized. Legacy wording, not a defect.
|
||
- **"LinkedIn thought leadership" phrases** in `commands/linkedin.md`, `onboarding.md`,
|
||
`post.md`, `README.md` describe the content *domain*, not the plugin *name* — the rename
|
||
to "LinkedIn Studio" is complete. Not stale.
|
||
- **¹ "3-5 core topics" in `commands/analyze.md:58,239` and `commands/profile.md:67`** is a
|
||
*focus-discipline heuristic* — a diagnostic/health-check tolerance band ("are you staying
|
||
within a focused 3-5 range?"), NOT a declaration of the pillar count. The audit's
|
||
F-PILLAR-COUNT finding was specifically the **declarative** disagreement between `setup.md`
|
||
(define 5) and `onboarding.md` (3-5), which is resolved (both declare 5). The tolerance band
|
||
is consistent advice (define 5; don't sprawl past it) and was deliberately left as-is —
|
||
editing it would be out-of-scope scope creep on a finding the audit never raised. Recorded
|
||
so the precise boundary of the closed finding isn't mistaken for a tree-wide claim.
|
||
|
||
## Scope boundary recorded
|
||
|
||
**M0 (move all mutable personal data out of the plugin tree into a per-user data dir)** is
|
||
the only audit-adjacent item deliberately **out of S13–S17 scope** — it belongs to the
|
||
separate UI/companion track (UI-brief §9b/M0). S16 routed analytics I/O through the
|
||
`getAnalyticsRoot()` seam so M0 can relocate the root in one place later. F-GENERALIZE's
|
||
*parameterize-the-path / document-the-override* sub-claims are closed here; its
|
||
*relocate-all-data* sub-claim is correctly deferred, not dropped.
|
||
|
||
## Verdict
|
||
|
||
Every C13–C46 grouping has a recorded disposition; **none is still-real**. With the gate
|
||
green, S17 — and the baseline-audit remediation as a whole — is complete.
|