The LAST second-brain slice; the S0–S3e arc is now complete.
(b) Retire the dead, zero-reader content-history.md across its 8 plumbing
surfaces: the flaky Stop-hook writer prose, the template (git-rm'd), the
migrate-data.mjs B1 MOVE entry + its test assertions, .gitignore, the gate
SC2_CLASSES guard, the data-path ref-doc, and a session-start comment. SC1
grep = 0; migrate suite 5/5 (R8 idempotency demonstrated).
(c) `brain reconcile` — read-side triple-post reconciliation joining silo 1
(## Recent Posts, auto-tracked creation) to the silo 2↔3 graph, surfacing the
coverage gap: posts created via the plugin but never `brain ingest`-ed. New
pure core scripts/brain/src/reconcile.ts (parseRecentPosts tracks the WRITER
format state-updater.mjs:116, NOT the date-only pruner; reconcileRecentPosts
matches hook→record.body→graph for the in-graph/in-brain-only/orphaned tiers;
loadRecentPosts reads STATE_FILE via the canonical getStateFile() chain — a new
cross-seam read, the state file lives outside the brain dataRoot). Wired as the
`brain reconcile` CLI subcommand (inline parsePublishedRecord loader, not the
body-less listPublished). Read-only: never writes the state silo.
Tests (verified live): gate 99/0/0 (ASSERT floor 82→84; new Section 16f
self-test + CLI grep) · brain 127/127 (floor 114→127, +13 reconcile) · hook
suite 136/136. SC4/SC6 end-to-end run is a real behavioural pass (STATE_FILE
seam read + fallback). Honest limit: read-side cannot reconstruct un-captured
specifics/trends — auto-capture is the flagged follow-up.
Brief/plan: docs/second-brain/{brief,plan}-sb-s3e.md (fbad29d). Go-before-code
gate cleared (operator: retire · read-side · build-now).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RigJBiRFNtFZKCz21qNbQ4
3.2 KiB
Before ending this LinkedIn content session, do two things:
1. Update State File If a post was created or finalized in this session, use the state-updater script:
node --input-type=module -e "
import { writeState, updatePostTracking } from '${CLAUDE_PLUGIN_ROOT}/hooks/scripts/state-updater.mjs';
writeState(content => updatePostTracking(content, {
postDate: 'YYYY-MM-DD',
postTopic: 'topic_area',
hookText: 'First 60 chars of hook...',
charCount: NNNN,
format: 'post'
}));
"
Replace the placeholder values with actual post data from this session.
If the user mentioned or updated their follower count during this session:
node --input-type=module -e "
import { writeState, updateFollowerCount } from '${CLAUDE_PLUGIN_ROOT}/hooks/scripts/state-updater.mjs';
writeState(content => updateFollowerCount(content, {
count: NNNN,
month: 'YYYY-MM'
}));
"
- Clear
next_planned_topicif it was used, or set it to the next suggested topic - If analytics data was imported in this session, set
last_import_dateto today (YYYY-MM-DD) andlast_import_weekto current ISO week (YYYY-WXX)
2. Pre-Publish Reminders (only if a post was created)
- Quality Check: Has content been reviewed against quality scorecard? Hook 110-140 chars, 1,200-1,800 chars total, authentic tone, no external links.
- 5x5x5 Engagement: Before posting, complete 15-20 min pre-posting engagement — 5 people with overlapping audiences, find their recent posts, write 5 thoughtful comments (15+ words each).
- First-Hour Plan: Respond within 5 minutes to first comments. Add value in responses. Target 15+ engagements in first hour.
- Posting Time: Post when target audience is most active.
3. Queue Status Check
If posts were added to the queue during this session (${LINKEDIN_STUDIO_DATA:-$HOME/.claude/linkedin-studio}/drafts/queue.json was modified):
- Confirm how many posts were queued and their scheduled dates
- Remind: "View your full schedule with /linkedin:calendar"
If a scheduled post was published during this session:
- Verify it was marked as published in queue.json (status = "published")
- If not, remind: "Run /linkedin:calendar to mark the post as published and update queue status"
Provide reminders naturally based on what was done in the session. If no LinkedIn content was created, skip the reminders and just ensure state is consistent.
4. Voice Sample Collection (if a post was created)
If a LinkedIn post was created or finalized in this session, save the full post text as a voice sample:
- Read the full post text from the draft that was just created
- Check if
${LINKEDIN_STUDIO_DATA:-$HOME/.claude/linkedin-studio}/voice-samples/authentic-voice-samples.mdexists - Append the full post to the
## Collected Post Samplessection:### [YYYY-MM-DD] — [post type] ([char count] chars) [Full post text exactly as written] - Ask the user for confirmation before writing: "I'll save this post as a voice sample for drift detection. OK?"
- This builds the voice sample library that enables automatic drift scoring (needs 5+ samples for reliable scoring)
- The more samples collected, the more accurate the voice-trainer's drift detection becomes