# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [2.0.0] - 2026-05-28

### Summary
Full-spectrum LinkedIn content engine — short-form feed posts AND long-form newsletter editions in one cohesive surface, with net-fewer commands and net-stronger pipeline. Built across 21 Voyage sessions (S1..S20+S1a) with 1 step = 1 session discipline. Locked decisions A–H in `docs/voyage-build-brief.md` §3.

### Added
- **`/linkedin:newsletter`** — long-form orchestrator command. Multi-session pipeline: load → calibrate → research fan-out → draft → consistency/quality → fact-check sweep → persona sweep → annotate → lock → delivery → hook-gate → schedule. Maintained `edition-state.json` across sessions. Supports newsletter editions, essays, and series articles
- **`/linkedin:outreach`** — outreach orchestrator (absorbed `/linkedin:collab` and `/linkedin:speaking`). Covers collaborations, partner pitches, and CFPs/speaking opportunities in one surface
- **`agents/fact-checker.md`** (Opus, brown) — verifies every factual claim in long-form drafts against primary sources. Outputs 🟢/🔴/🟡 verdicts per claim. Runs BEFORE lock
- **`agents/persona-reviewer.md`** (Opus, olive) — evaluates reader-persona resonance + hook-conversion gate. Two modes: per-persona deep review, multi-persona scoreboard. Runs BEFORE lock
- **`render/` pipeline migrated in-plugin** — `build-html.mjs`, `build-pdf.mjs`, `build-linkedin.mjs`, `build-carousel.mjs`. Self-hosted fonts (Newsreader, Inter, JetBrains Mono) under OFL-1.1 with `render/OFL.txt`. WeasyPrint degradation: missing binary → skip-signal, not throw
- **`config/personas.template.md`** — reader persona library. Knowledge level, time-pressure, resonance criteria per persona. Consumed by `persona-reviewer`
- **`config/edition-state.template.json`** — schema for long-form edition state across sessions
- **`references/longform-quality-rules.md`** — quality bar specific to long-form (different from short-form rules)
- **Router gating** — `/linkedin:monetize` and `/linkedin:outreach` surface "unlocks at ~1K followers" guidance and point sub-1K users at `/linkedin:strategy` first
- **`docs/agents-capability-matrix.md`** — single source of truth for which agent owns which capability. Pipeline diagram + intent table + model tier table

### Changed
- **Agent merges (16 → 14):**
  - `performance-reporter` → `analytics-interpreter` (interpret + report modes, same data sources, mode-selector by trigger phrase)
  - `comment-strategist` → `engagement-coach` (5x5x5 + first-hour + CEA method + target scoring + daily routine + comment quality scorecard; upgraded haiku → sonnet since the agent now handles deeper work)
  - `content-tracker` → absorbed by `state-updater.mjs` + `analytics-interpreter`
  - `personalization-scorer` → absorbed by `personalization-score.mjs` (deterministic, no AI)
- **Command merges (27 → 24):**
  - `/linkedin:templates` → mode in `/linkedin:quick` (8 post-type templates)
  - `/linkedin:publish` → action in `/linkedin:calendar` (mark scheduled posts as published)
  - `/linkedin:authority` → absorbed into `/linkedin:strategy` (canon for authority building, trajectory dedup)
  - `/linkedin:collab` + `/linkedin:speaking` → `/linkedin:outreach`
- **`/linkedin:import` Step 6 analysis** — delegated to `/linkedin:report` (both consume the same `trends` CLI; no more duplicated analysis pipeline)
- **`commands/linkedin.md` router** — newsletter row added, removed-command rows pruned, gating-rule paragraph for monetize/outreach
- **All 6 skill catalogs** reconciled — `linkedin-content-creation`, `linkedin-analytics`, `linkedin-strategy`, `linkedin-networking`, `linkedin-thought-leadership`, `linkedin-voice` all reflect the v2.0.0 command/agent set

### Removed
- `commands/templates.md` (absorbed into `commands/quick.md`)
- `commands/publish.md` (absorbed into `commands/calendar.md`)
- `commands/authority.md` (absorbed into `commands/strategy.md`)
- `commands/collab.md` (absorbed into `commands/outreach.md`)
- `commands/speaking.md` (absorbed into `commands/outreach.md`)
- `agents/content-tracker.md`
- `agents/personalization-scorer.md`
- `agents/performance-reporter.md`
- `agents/comment-strategist.md`

### Fixed
- `references/glossary.md` "Authority Score" entry — corrected stale ref to `commands/authority.md` (removed) → `commands/strategy.md` (canon)
- `scripts/test-runner.sh` `EXPECTED_AGENTS` list — reconciled to 14 agents

### Migration notes
- Plugin remains fully backward-compatible from a user-perspective: removed commands now route to their absorbing command via `commands/linkedin.md`
- v1.x users who had `commands/templates.md` etc. in muscle memory will be auto-redirected by the router

## [1.2.0] - 2026-04-11

### Summary
Friction reduction release. Fewer interactive steps, auto-clipboard, deterministic state management, and progressive onboarding.

### Added
- **`clipboard-helper.mjs`** — cross-platform clipboard utility (macOS `pbcopy`, Linux `xclip`/`xsel`, WSL `clip.exe`). All 8 content commands auto-copy output to clipboard
- **`state-updater.mjs`** — deterministic state mutations: `updatePostTracking`, `pruneContentHistory`, `updateFollowerCount`. Pure functions with 19 tests. No AI involvement in state updates
- **`ical-generator.mjs`** — RFC 5545 calendar file generation for batch scheduling. VALARM reminders, VTIMEZONE support, line folding, special character escaping. 16 tests
- **MCP image carousel pipeline** — `/linkedin:carousel` generates professional slide images via mcp-image (1080x1350, 3:4 ratio) with text overlays. Mermaid Chart and text-based fallbacks
- **Progressive onboarding** — personalization score hidden until 3+ posts; voice guardian suppressed until 5+ voice samples; reasonable defaults in state template
- **iCal integration in batch** — `/linkedin:batch` generates `.ics` file importable into macOS Calendar, Google Calendar, and Outlook
- **Auto-prune content history** — session-start dynamically imports `pruneContentHistory` to remove entries older than 90 days

### Changed
- **Reduced interactive steps** — angle, format, and post type inferred from context. Max 2 questions per post (down from 4-6) in `post`, `quick`, `react`, `pipeline`
- **State management** — Stop hook and 8 commands now reference `state-updater.mjs` for deterministic writes instead of AI-driven YAML editing
- **State file template** — default expertise area changed from domain-specific to `"general"` for better new-user experience

## [1.1.0] - 2026-04-08

### Summary
Q2 2026 feature release. 9 improvements across onboarding, content quality, and analytics pipeline.

### Added
- **`/linkedin:onboarding`** — multi-step onboarding wizard: profile → setup → first-post as one guided flow
- **`/linkedin:carousel`** — structured multi-slide carousel generator with 5 templates and design specs
- **Voice drift scoring** — 6-dimension rubric (sentence structure, word choice, openings, storytelling, tone, formatting) with AUTHENTIC/CAUTION/ALERT/REWRITE verdicts in voice-guardian hook
- **Industry angle variants** — 48 concrete variants (6 industries × 8 angles) in thought-leadership-angles reference
- **Multi-URL comparison** — `/linkedin:react` now supports 2-3 URL synthesis with contrarian and pattern analysis angles
- **Day-of-week heatmap** — `heatmap` CLI command and `HeatmapReport` type in analytics pipeline
- **Month-over-month reports** — `report --month YYYY-MM` CLI command with MoM deltas, weekly breakdown, top performers
- **Automated week-rollover** — session-start hook now writes `posts_this_week: 0` and updates `current_week` on ISO week change
- **Collected Post Samples** — Stop hook passively accumulates published posts in voice-samples file for drift scoring

### Changed
- **README Quick Start** — replaced 4-step manual flow with single `/linkedin:onboarding` entry point
- **`/linkedin:report`** — Step 2 now offers report type choice (weekly/monthly/heatmap)
- **`/linkedin:post`** — Step 2 shows industry-specific angles when user-profile has industry set; Step 3 redirects to carousel when appropriate
- **`/linkedin` router** — added onboarding and carousel to menus and direct routing
- **Command count** — 25 → 27 (onboarding, carousel)

## [1.0.0] - 2026-04-07

### Summary
Public release for open-source marketplace. All runtime bugs fixed, documentation aligned, agent model tiering implemented.

### Fixed
- **Agent model assignments** — all 16 agents corrected from opus to proper tiering (12 Sonnet, 4 Haiku)
- **Queue manager references** — 10 stale `queue-manager.sh` references replaced with `queue-manager.mjs` Node.js invocations
- **Quick-import references** — 2 stale `quick-import.sh` references updated to `.mjs`
- **Personalization score import bug** — standalone execution block now guarded to prevent stdout contamination on import
- **Regex anchor** — invalid `\Z` JavaScript regex replaced with `$` in user-prompt-context.mjs
- **Agent color mismatches** — 8 agent frontmatter colors unified with CLAUDE.md documentation
- **Version inconsistency** — unified from 3 conflicting versions (0.6.0/1.7.0/2.0.1) to 1.0.0

### Added
- **plugin.json** — added `license`, `repository`, `keywords` fields for marketplace compliance
- **README** — attribution note, "What This Plugin Does Not Cover" section, Node.js 18+ prerequisite, hooks badge
- **CONTRIBUTING.md** — replaced GitHub PR template with solo-project boilerplate
- **Quality scorecard** — added "Voice Authenticity" criterion (total now /81)
- **Commands** — `/linkedin:react` and `/linkedin:first-post` added to README command tables
- **agents/README.md** — updated from 14 to 16 agents, added personalization-scorer and post-feedback-monitor
- **SKILL.md** — added 5 missing commands to router command table

### Changed
- **CLAUDE.md** — compacted from 237 to 90 lines, removed duplicated content
- **All hooks** — 100% Node.js (.mjs), no bash dependencies (cross-platform: macOS/Linux/Windows)
- **Error handling** — added JSON.parse guards in queue-manager.mjs and analytics storage.ts

### Removed
- **Skill version fields** — removed non-standard `version:` from all 6 SKILL.md frontmatter
- **Development artifacts** — removed internal evaluation note from collab.md
- **Orphaned files** — deleted outdated docs/commands-reference.md
- **BACKLOG.md and DEVELOPMENT-LOG.md** — gitignored (internal development files)

## [0.6.0] - 2026-02-07

### Note
First formal version. Previously unversioned.

### What exists today
- 20 commands covering full content lifecycle
- 15 specialized agents
- 8 hooks for workflow automation
- Analytics system with CSV import
- 360Brew profile optimization (January 2026 algorithm update)
- Content matrix system (40+ post ideas from single topic)
- Personalization engine
- 20 reference documents for LinkedIn best practices
- Full content pipeline from ideation to post-publish monitoring
