12 Commits
Author SHA1 Message Date
beantownbabeandClaude Sonnet 5 e60eb034ce Audit 22/10 post
Likes A3/T1 (Katrin Schmidt, Namrata Sharma, Alice Autuori audience;
Mckinley Black team; TXproducts Page like excluded entirely),
comments 0/0 (only comment was the Page's own), reposts A0/T2 (Peter
Gaal, Mckinley Black, both internal). Real Eng % 8.1%. Confirmed the
20/10 audit against the fresh export that now includes it (Likes 8,
Comments 0, Reposts 3) - matches exactly what was recorded from
screenshots.

Alice Autuori's status conflict (flagged last commit) is resolved -
the Demographics session confirmed directly with Mckinley,
independent of this session, that she does follow the Page, verified
against her LinkedIn profile, and already restored her Directory
record and removed the outreach_contacts.py duplicate.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-26 09:26:22 +01:00
beantownbabeandClaude Sonnet 5 352740101c Audit 20/10 post, correct Alice Autuori's follower classification
Likes A5/T2 (Dr. Jefferson do Rosario Stelzer, Philipp Brandt, Alice
Autuori, Sabine Brock, Katrin Schmidt audience; Mckinley Black,
Aleksandra Kotenko team), comments 0/0, reposts A0/T3 (Aleksandra,
Peter, Mckinley, all internal). Post isn't in the LinkedIn export yet
(still caps at 01/10), so Real Eng % will compute automatically once
a fresh export includes it, same as 29/09 earlier.

Mckinley confirmed directly that Alice Autuori does not actually
follow the Page, despite an existing Directory entry (followedSort
2023-04) claiming otherwise - another case of the same
engagement-does-not-imply-follower mistake caught during the campaign
audit. Moved her to outreach_contacts.py with her full profile
preserved and all 3 engagement dates (14/07, 28/07, 20/10).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-21 11:11:19 +02:00
beantownbabeandClaude Sonnet 5 d5eff3412e Audit 01/10 post (first post since the campaign ended)
Likes A2/T3 (vaishakh vasudevan, Yosra Gmati audience; Mckinley
Black, Daniel Schmidt, Aleksandra Kotenko team; TXproducts Page like
excluded entirely), comments A0/T0 (only comment was the Page's own),
reposts A0/T4 (Peter Gaal, Daniel Schmidt, Aleksandra Kotenko,
Mckinley Black, all internal). Real Eng % 5.0%.

Yosra Gmati isn't in the Follower Directory yet and her follow status
isn't confirmed, so added to outreach_contacts.py as an engaged
non-follower rather than assumed into the Directory (per the Carousel-
classification/Arunangshu lesson from the campaign audit). vaishakh
vasudevan (already a confirmed follower) got her engagement_notes
extended.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-21 11:08:04 +02:00
beantownbabeandClaude Sonnet 5 0e26e85b02 Audit 29/09, correct Carousel narrative, fix validation/conversion framing
29/09's Carousel ("The two pillars of TXservices") is now in a fresh
export and audited: likes A1/T2 (Sabine Brock audience; Aleksandra
Kotenko, Mckinley Black team), 1 team comment, 3 team reposts ("the
usual suspects" - Aleksandra, Peter, Mckinley). Real Eng % 10.0%,
September's new growth/KPI numbers: 126->142 (+16, +12.7%).

This surfaces a real correction: July actually had 4 Carousels
(09/07, 16/07, 23/07, 30/07), not the 1 everyone's mental model had
been built around, ranging 6.0%-45.0%. Across all 6 Carousels run
this campaign (4 July + 1 August + 1 September) the format averages
25.9% Real Eng %, still the best of any format, but ranges 6.0% to
50.8% - not the clean "wins every time" story the campaign-end
summary told before this. Rewrote September's and campaign-end's
Executive Summaries throughout: the trilogy/stage narratives, the
best-posting-day findings (Tuesday's edge was never confounded by
format once September separated the variables), the recommendations
(pair Carousel with a named claim instead of trusting the format
alone, test the untried Carousel+pain-point combination).

Also fixed a conflation Mckinley flagged directly: July's poll (a
genuine validation test - does this audience respond to an
interactive format at all) and 17/09's pilot-partner ask (a direct
conversion CTA) are different kinds of things and were wrongly
grouped under one "validation" framing in both September's and the
campaign-end's summaries - now described as what they actually are.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-02 11:25:01 +02:00
beantownbabeandClaude Sonnet 5 98b939446c Audit 22/09 post — September fully audited
Real Eng % audit for September's final post, 22/09: 24 total
reactions (likes A20/T3, TXproducts Page like excluded entirely),
no comments, reposts A0/T3 (Mckinley Black, Peter Gaal, Aleksandra
Kotenko, all internal). Adds 10 new Follower Directory entries
surfaced by this post (Dr. Sonia Utermann, Dr. Jefferson do Rosario
Stelzer, Sani Harouna-Mayer, Shrouk Ehab, Harish Purushothaman,
Mallika K., Sebastian Sell, Azat Khadiev, Ali A., Maximilian Harr)
and extends engagement_notes for 7 existing repeat engagers.

Every September campaign post (03/09, 08/09, 15/09, 17/09, 22/09)
is now audited — September's Real Eng % / Follower Study data is
complete, unblocking that month's outstanding narrative sections.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-30 10:47:54 +02:00
beantownbabeandClaude Sonnet 5 73c6093286 Audit 17/09 post
Real Eng % audit for September's 17/09 post: likes A1/T2 (Johannes
Blum, shown as "Johannes Tenten" on this post but the same Hi-Acts/
DESY Innovation Manager as every other audited post, is Audience;
Aleksandra Kotenko and Mckinley Black are Team), no comments, and
reposts A0/T3 (Peter Gaal, Aleksandra Kotenko, Mckinley Black, all
internal). Extends Johannes Blum's Follower Directory engagement_notes
to include this post. Only 22/09 remains unaudited for September.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-30 10:44:54 +02:00
beantownbabeandClaude Sonnet 5 573046c275 Audit 08/09 and 15/09 posts, update Follower Directory
Real Eng % audit for two more September campaign posts: 08/09
(likes A3/T3, comments A2/T1, reposts A0/T3 - Arunangshu Debnath's
reply thread was the standout) and 15/09 (likes A9/T3, no comments,
reposts A0/T4). Extends engagement_notes for five repeat engagers
(Johannes Blum, Marc Thiry, Dr. Palvan Seyidov, Katrin Schmidt,
Sabine Brock) and adds five placeholder entries (Arunangshu Debnath,
Simon Sebold, Martin Uhlig, Chen Shen, Philipp Brandt) pending full
profile details.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-29 11:42:44 +02:00
beantownbabeandClaude Sonnet 5 5522174c5c Audit 27/08, completing all of August's posts
Sabine Brock is the only audience like; the rest (likes and all 3 reposts)
are internal (Daniel Schmidt, Aleksandra Kotenko, Mckinley Black). Page's
own link-drop comment excluded as usual. This closes out August's
post-level auditing entirely, 4 real gaps remain campaign-wide, all in
September (08/09, 15/09, 17/09, 22/09).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-29 10:28:05 +02:00
beantownbabeandClaude Sonnet 5 c810d19cb6 Audit September's first post (03/09, SNIB2026 announcement)
Hand-audited against LinkedIn's own Reactions/Comments/Reposts lists.
Denny Droßmann is a new engaged non-follower; Marc Thiry's repeat-engager
streak extends to 3 posts (16/07, 28/07, 03/09).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-08 09:09:40 +02:00
beantownbabeandClaude Sonnet 5 41432d2ddf Correct 04/08's repost audit: Mihail Petev was never a repost
Auditing our own audit data turned up a real error: Mihail Petev was
recorded as an audience repost of 04/08, but he actually liked the
separate company-page reshare surface (already excluded from the Real
Eng % audit for a different reason — mismatched Impressions denominator)
— not a repost of the original post. The two real reposts of 04/08 were
Peter Gaal and Mckinley Black, both Team. Reposts: audience 1→0, team
stays 2. Real Eng % for 04/08 moves from 49.8% to 49.4% accordingly.
Directory note corrected to match.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-27 08:02:51 +02:00
beantownbabeandClaude Sonnet 5 070710f0b2 Audit 5 more August posts (11/08, 13/08, 18/08, 20/08, 25/08)
Hand-audited each against LinkedIn's own Reactions/Comments/Reposts lists,
same method as July and 04/08/06/08. Notable finds: Sabine Brock (DESY)
gave a substantive comment on 20/08, not just a like; Katrin Schmidt's
perfect July streak continued into August (20/08); Raphael Buck (CEO,
Get Inspired) is a new engaged non-follower, added to outreach_contacts.py.
25/08's audit entry is in place but inert until that post's data is
uploaded (export is only current through Aug 24).

Also cleaned up monthly_report_notes.py's July "outstanding" list: removed
a stale Real Eng %/Clicks methodology item that reads as still-open but was
actually decided and already implemented (see features_shipped).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-26 13:06:08 +02:00
beantownbabeandClaude Sonnet 5 eb402c8713 Roll out Real Eng % everywhere, replacing raw reported engagement rate
Every table, chart, and KPI that shows a per-post engagement rate now uses
Real Eng % (Audience-only, Team excluded, Clicks included, hand-audited) —
the live Content/Overview dashboard and every Reports page alike, not just
the Reports family. Audited posts show the real number; unaudited posts show
"Pending audit" in tables or are excluded (with a count) from charts, never
silently falling back to the raw, Team-inflated figure.

- New engagement_audit.py holds the audit data and Real Eng % calculation,
  shared between app.py and report.py (previously app.py-only, which made
  report.py's PDF unable to use it at all).
- compute_period_stats() (shared by the live app and the PDF) now computes
  Real Eng % per post and an audited-only "Best Post Real Eng." max.
- Traction by Format's separate "Reported Avg Eng %" column is gone entirely
  rather than shown side by side with the real one — one number, one meaning.
- Corrected an earlier internal claim from this same audit: 09/07 does not
  drop to near-bottom under Real Eng %, it stays the clear #1 post (45.0%
  real vs. 47.9% raw) since its large Click volume dominates the calculation.
  Re-checked the Core Message "Emotional outperformed Rational" finding
  against the real numbers rather than just relabeling it — it holds (21.8%
  vs. 8.1% average, a wider gap than under raw numbers).
- Fixed two pre-existing bugs in build_static_export.py surfaced while
  regenerating it: a stale 2-value unpack of _render_reports_tab's now
  3-value return, and insights pages read from TAB_CONTENT_MAP instead of
  the _INSIGHTS_PAGE_BUILDERS functions the dynamic-month refactor moved
  them to.
- Documented the rollout, the 09/07 correction, and two remaining open
  items (historical audit backfill scope, Avg. Eng. Rate's future
  redefinition alongside Clicks/Impressions/CTR %) in Monthly Notes.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-11 12:09:47 +02:00