The ninth step and closing the loop. Without it the recommender scores blindly, and content-repurpose
has nowhere to get winners from. The logic is simple: published posts → numbers → tiers → weights back
into the strategy that content-weekly-plan.
| Mode | What it does | Cadence |
|---|---|---|
--mode=ingest |
LinkedIn exports → archive posts.jsonl → Posts DB |
weekly |
--mode=score (default) |
baseline, resonance index, quadrants, tiers, digest, dashboard | weekly |
--mode=calibrate |
breakdowns by pillars/formats/angles → weights into Section 7 of the strategy | monthly |
Normative: ${CLAUDE_PLUGIN_ROOT}/reference/tracking-rules.md — sources and their limits,
baseline, RI formula, quadrants, tiers, n-gate calibration, honesty gates. Read BEFORE
any mode. Additionally methodology.md §6 (metrics pyramid, cadences, feedback rule),
§2.6 (reuse pauses), §4 item 11 (day 3/7/10).
Input: $ARGUMENTS — client (default — the single active one) + flags.
State: client archive (archive/posts.jsonl + ANGLES.md) in the working folder, not in the plugin repo.
Mode A · --mode=ingest — collect the numbers
A1 · Take the exports
Three files, all from LinkedIn, all — by the user's hands (not retrieved automatically):
- AggregateAnalytics XLSX — profile → Analytics → Export. Impressions and interactions. Holds top-50 for its window → ask for a file for each quarter, otherwise the year isn't covered.
- Shares.csv — full text of posts (LinkedIn data export, email in ~24 h).
- Rich_Media.csv — post format.
No fresh XLSX → don't block: text and format ingest proceeds, reach stays empty, in the report this shows as a separate line.
A2 · Run the archive
The script is in this skill's folder: <тека скіла content-track>/scripts/build_archive.py. Run
it specifically, from the author's working folder (where the drafts are *.md і archive/):
python3 <тека скіла content-track>/scripts/build_archive.py --root . --metrics <q1.xlsx> <q2.xlsx> --shares Shares.csv --media Rich_Media.csv
For --metrics you need openpyxl (pip install openpyxl). Determine the path to the skill folder
before running (find ~ -path "*content-track/scripts/build_archive.py" 2>/dev/null) and show it
to the user; don't run a file with that name anywhere else.
The script merges sources by share id, doesn't touch manual classification (angle, rubric, topics, format,
funnel). Output — archive/posts.jsonl + index ANGLES.md.
A3 · Finish manual fields
After the run, the script prints how many posts have no angle. Classify new posts (angle, rubric, topics) — without this calibration has no breakdowns.
A4 · Dialogues
The main axis, and it does not come from anywhere by itself. For each new post with one question: how many dialogues did it start (DM, comments-to-private, inbound). If you don't know — leave it empty, not zero. Leads and calls — same place, if there is attribution.
A5 · У Notion
Write/update rows in 📊 Posts (reference/notion-schema.md): hook, date, URL, pillar,
funnel, format, angle, impressions, likes/comments/reposts, dialogues, leads, export date.
Mode B · --mode=score — what of this worked
- Baseline — rolling (
tracking-rules.md§3): for each post, the median of 12 posts published BEFORE it. The overall median for the entire archive is a mistake: on real data it made 65% of posts winners. Self-check — median RI across the archive ≈ 1.0. Fewer than 6 previous posts with data → we don't assign tiers, we show raw numbers and say why. - RI for each post by
tracking-rules.md§4. Without impressions — only the ER axis + flag. - Quadrant (§5) — 💎 nugget · 📣 reach without applications · 🎯 quiet lead-gen · ⚪ weak. Dialogues unknown → quadrant is not assigned, only tier by RI with a flag.
- Tier and right to recirculation (§6) → in Posts DB. This is what then reads
content-repurpose --from-tracking. - Digest (Telegram, the same channel as the weekly plan):
- top-3 and flop-3 of the week with RI and quadrant;
- coverage line “impressions for N of M posts”;
- 🎯 quiet lead-gens as a separate block — these are candidates for rework #1;
- 1–3 lines “what this means for next week” (no new weights — weights are set by mode C).
- Dashboard — rebuild the client's page from the archive and deploy it. For the author's personal brand, this is one HTML file with embedded data + deploy to Cloudflare Pages; the path and project are taken from the client's config, not invented.
Mode C · --mode=calibrate — numbers → weights
Once a month, and only when a sample has accumulated.
- Breakdowns: pillar · format · angle (lever) · hook type · length · day of week.
- For each segment — median RI versus the overall median, the weight formula, and the n-gate
(
tracking-rules.md§8): n ≥ 4 → weight; n = 2–3 → "signal, not a conclusion"; n ≤ 1 → we stay silent. - Write into Section 7 of the strategy the client's table of calibrated levers with
nand the date. Thencontent-weekly-plantakes them automatically at the scoring step. - Update
angle_weightіvalidated_factorforcontent-repurpose. - Give winners and failures to
grader-rubric.mdas examples of judge calibration. - The default lever table
methodology.md§5 should not be touched — it is a starting hypothesis for a new client, not a place for a specific client's data.
Definition of Done
- Exports are ingested, the archive is rebuilt, manual classification is not overwritten.
- Dialogs are requested for each new post; the unknown was left blank, not zero.
- Posts DB is updated; every post with data has an RI, quadrant, tier, and the right to recirculation.
- The digest is shown with a coverage line; 🎯 quiet lead generators are listed separately.
- The dashboard is rebuilt and deployed (or it is stated why it was skipped).
- In calibration mode — Section 7 is updated only for segments with n ≥ 4; the rest are marked as a signal;
content-repurpose --from-trackingthen has something to work with.