The ninth step and closing the loop. Without it, the recommender scores blindly, and 07-repurpose
has nowhere to get winners from. The logic is simple: published posts → numbers → tiers → weights back
into the strategy that 04-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 only 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 hand (not retrieved automatically):
- AggregateAnalytics XLSX — profile → Analytics → Export. Impressions and interactions. Keeps top-50 for its window → ask for a file for each quarter, otherwise the year is not 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 ingestion proceeds, reach stays empty, in the report this is visible as a separate line.
A2 · Run the archive
The script is in this skill's folder: <тека скіла 09-track>/scripts/build_archive.py. Run
specifically it, from the author's working folder (where the drafts are *.md і archive/):
python3 <тека скіла 09-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 "*09-track/scripts/build_archive.py" 2>/dev/null) and show it
to the user; do not run a file with such a name in another location.
The script merges sources by share id, does not touch manual classification (angle, rubric, topics, format,
funnel). Output — archive/posts.jsonl + index ANGLES.md.
A3 · Fill in manual fields
After the run, the script prints how many posts have no angle. Classify the new posts (angle, rubric, topics) — without this calibration there are no breakdowns.
A4 · Dialogues
The main axis, and it never comes from anywhere on its own. For each new post, with one question: how many dialogues did it start (DM, comments-to-private, inbound). 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 — the median RI across the archive ≈ 1.0. Fewer than 6 previous posts with data → we don't assign tiers, we show the raw numbers and say why. - RI for each post by
tracking-rules.md§4. Without impressions — only the ER axis + a flag. - Quadrant (§5) — 💎 nugget · 📣 reach without requests · 🎯 quiet lead generator · ⚪ weak. Dialogues unknown → the quadrant is not assigned, only the RI tier with a flag.
- Tier and right to recirculation (§6) → into Posts DB. This is what then reads
07-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 generators in 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 with embedded data + deployment 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 conclusion"; n ≤ 1 → we stay silent. - Write into Section 7 of the client's strategy the table of calibrated levers with
nand the date. Then04-weekly-planpicks them up automatically at the scoring step. - Update
angle_weightіvalidated_factorfor07-repurpose. - Winners and failures should be handed over 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 one's data.
Definition of Done
- Exports ingested, archive rebuilt, manual classification not overwritten.
- Dialogs requested for each new post; the unknown was left empty, not zero.
- Posts DB 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 magnets are listed separately.
- The dashboard has been 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 signal;
07-repurpose --from-trackingafter that has something to work with.