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
65 lines
3.2 KiB
Markdown
65 lines
3.2 KiB
Markdown
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:
|
|
```bash
|
|
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:
|
|
```bash
|
|
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_topic` if it was used, or set it to the next suggested topic
|
|
- If analytics data was imported in this session, set `last_import_date` to today (YYYY-MM-DD) and `last_import_week` to 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.md` exists
|
|
- Append the full post to the `## Collected Post Samples` section:
|
|
```
|
|
### [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
|