feat(linkedin-studio): S16 — optional manual saves in analytics + close deferred onboarding Write MAJOR
Lifts the original v4.0.0 Non-Goal: an optional, manually-entered `saves`
metric through the analytics layer, built location-agnostic (option c) so
UI-brief §9b/M0 relocates the data dir in one place later.
- types: PostMetrics.saves? + Weekly/Monthly summary.totalSaves? (optional);
new RankableMetric type for the always-numeric index-access whitelist
- parser: dedicated parseOptionalCount() — blank/non-numeric/negative -> undefined
("unknown != 0"), genuine 0 kept; saves NOT folded into engagementRate
- reports: totalSaves set only when >=1 post carries saves (backward-compat)
- cli: saves surfaced in import summary + weekly/monthly totals + per-post
- S16-pre: onboarding.md allowed-tools gains Write (closes S15-deferred MAJOR)
- docs (three-doc rule): plugin README boundary + analytics README + root README
+ plugin CLAUDE.md + CHANGELOG; dwell stays explicitly unmeasurable
Independent /trekreview: brief-conformance 0 findings; code-correctness 2 MAJOR
(own lockstep misses) FIXED in-session (parseOptionalCount + edge tests). Gate:
tsc clean, analytics 116/116, lint 74/0/0, hooks 98/98. Within-v4.1.0 refinement
(no surface/count/version change).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
8c52bdb2e4
commit
55c94ee964
18 changed files with 417 additions and 118 deletions
|
|
@ -25,6 +25,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||
### Compatibility
|
||||
- **Minor / additive.** No command removed, renamed, or behavior-changed; the 27 existing commands, all 19 agents, and all state shapes are unchanged. The two new commands (`create`, `measure`) register when the plugin command set is rebuilt at session start — **reload required** to see them.
|
||||
|
||||
### Added — within 4.1.0 (refinement sessions, no surface/count/version change)
|
||||
- **Manual per-post saves in analytics (Voyage S16).** Lifts the original v4.0.0 Non-Goal: `PostMetrics` gains an **optional** `saves` field, ingested when the user adds a `Saves` column to the CSV with the count read off native LinkedIn post analytics (count-only, ~Sept 2025; absent from the export, no self-serve API). The parser (`scripts/analytics/src/parsers/csv-parser.ts`) reads it when present; weekly/monthly summaries gain an optional `totalSaves`; the CLI (`import`/`report`) surfaces saves per-post and as a total. **Backward-compatible** — a missing column or blank cell leaves saves *unknown* (never coerced to 0), saves is **not** folded into `engagementRate` (which stays comparable to older imports), and saves-free data round-trips byte-identical. **Dwell stays explicitly unmeasurable** — no dwell field or surface was added. This refines the v4.0.0 "the plugin cannot read those signals" wording: the plugin still cannot *auto-track* saves, but it now ingests a *manually-entered* count. Built location-agnostically through the existing `getAnalyticsRoot()` seam so the planned data-dir migration (UI brief §9b/M0) relocates it in one place. New `RankableMetric` type fixes the trend/alert index access that the optional field would otherwise widen to `number | undefined`.
|
||||
- **Onboarding tool-grant fix (S16-pre).** `commands/onboarding.md` Phase 2 saves voice/user-profile files but its frontmatter omitted `Write`; added `Write` to `allowed-tools` (matching `first-post.md`). Closes a pre-existing tool-contract gap surfaced by the S15 review.
|
||||
|
||||
## [4.0.0] - 2026-05-30
|
||||
|
||||
### Summary
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue