Skip to content

docs(context): strip logged-in LinkedIn UI from author-linkedin.md - #1639

Merged
alehar9320-bot merged 1 commit into
mainfrom
docs/context-strip-linkedin-ui
Oct 9, 2026
Merged

alehar9320-bot merged 1 commit into
mainfrom
docs/context-strip-linkedin-ui

Conversation

@alehar9320-bot

Copy link
Copy Markdown
Collaborator

Privacy cleanup for context/author-linkedin.md, a logged-in LinkedIn scrape that sits in this public repo. Follows #885, which removed the same "Open to work" roles list from the identity corpus. Docs plus one test; no visitor UI changes.

Removed from context/author-linkedin.md (line numbers on main e71a1eb5)

From Vera's list:

  • L53–54 "Open to work" roles list (Product Manager, Frontend Web Developer, Business Analyst, Team Lead…).
  • L32, L46 the "Open to" buttons.
  • L63–76 "Suggested for you" / "Private to you" Premium upsell + job-fit box ("Stand out to employers", "Try Premium for SEK 0", 1-month trial, "Connect with a Product Manager…").
  • L216 "several millions": both copies of the sentence now read "One key pillar has been the rollout of AI Coding Copilots; a strategic initiative." The rest of the role description is unchanged.
  • L328–334 Recommendations block. It only held the owner prompt "You haven't received a recommendation yet / Try asking one of your connections / Ask for a recommendation", with no recommendation content.
  • L403–461 "Who your viewers also viewed" (Private to you), "People you may know" (named people from his network), and "You might like / Pages for you" (connection counts at Rootcode and MillenniumIT ESP).
  • L462–466 online status and the messaging overlay ("Compose message").

Also removed (owner-only, beyond the list):

  • L3–24 logged-in global nav: notification counts, Home/My Network/Jobs/Messaging (5), Me menu, For Business, "Try Premium for SEK 0", "Status is online".
  • L29–31, L48–52 "Resources" / "Add profile section" / "Enhance profile" edit controls.
  • L56–61 "Show details / Edit / Tell non-profits you're interested… / Get started", the owner's Open-to-volunteer prompt.
  • L77–87 "Analytics · Private to you": 48 profile views, 7 post impressions, 37 search appearances.
  • L138 "Create a post".
  • L146, L176 "• YouVerified • You" is now "• Verified" (the "You" self-view marker is gone).
  • L385, L391 viewer-relative connection degrees ("2nd/3rd degree connection") on Interests → Top Voices.

No public fact was changed. Headline, location, About, Top skills, Featured, posts, Experience, Education, certifications, projects, volunteering, skills, publications, courses, honors, languages, interests and the public profile URL all stay.

Also

  • context/identity.md: the two policy lines that quoted the banned phrase now call it "the copilots business-value size claim". The rule itself is unchanged.
  • New src/__tests__/context-privacy.test.ts reads every file under context/ and fails if any contains "Open to work", "Private to you" or "several millions" (case-insensitive). It fails on main (author-linkedin.md: "open to work", identity.md: "several millions") and passes here.

History

This removes the content from the tip only. The removed text stays in git history (including #885 and earlier commits). No history rewrite was done; purging it is Alexander's decision.

Checks run locally (Node 22): npm test 23 files / 390 tests pass, npm run lint clean, npm run format:check clean.

Remove owner-only/logged-in LinkedIn chrome from the public scrape:
Open to work roles, Open to buttons, Private to you Premium/analytics
boxes, the unapproved copilots value size, the recommendation prompt,
viewer/network suggestions and the messaging overlay. Public profile
facts are unchanged. Reword identity.md so the banned phrase is not
repeated, and add a context/ privacy test.
@alehar9320
alehar9320 temporarily deployed to docs/context-strip-linkedin-ui - astro-cloudflare-personal-website-web-service PR #1639 October 9, 2026 08:12 — with Render Destroyed
@coderabbitai

coderabbitai Bot commented Oct 9, 2026 •

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 2535aad5-3260-4065-b68f-ab34ad16dc48

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@mergify mergify Bot added the size/L label Oct 9, 2026
@cloudflare-workers-and-pages

Copy link
Copy Markdown
Contributor

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Preview URL Updated (UTC)
✅ Deployment successful!
View logs
me 156d5e3 Commit Preview URL

Branch Preview URL
Oct 09 2026, 08:13 AM

@codecov

codecov Bot commented Oct 9, 2026 •

Copy link
Copy Markdown

Bundle Report

Changes will decrease total bundle size by 745.89kB (-53.85%) ⬇️. This is within the configured threshold ✅

Detailed changes
Bundle name Size Change
molecular-mars-esm 639.21kB -745.89kB (-53.85%) ⬇️

Affected Assets, Files, and Routes:

view changes for bundle: molecular-mars-esm

Assets Changed:

Asset Name Size Change Total Size Change (%)
_astro/page.C9--xS3X.js (New) 333.55kB 333.55kB 100.0% 🚀
_astro/module.DcxYUbIN.js (New) 289.4kB 289.4kB 100.0% 🚀
_astro/Chat.astro_astro_type_script_index_0_lang.k74IlYkj.js (New) 11.45kB 11.45kB 100.0% 🚀
_astro/PostHog.astro_astro_type_script_index_0_lang.CCJF_csu.js (New) 2.19kB 2.19kB 100.0% 🚀
_astro/hire-analytics.DhHYzGvw.js (New) 1.37kB 1.37kB 100.0% 🚀
_astro/BaseLayout.astro_astro_type_script_index_0_lang.DkBoIH3E.js (New) 690 bytes 690 bytes 100.0% 🚀
_astro/contact.astro_astro_type_script_index_0_lang.Cu3slK-I.js (New) 554 bytes 554 bytes 100.0% 🚀
chunks/whats-new_CSQwGkhf.mjs (Deleted) -481.76kB 0 bytes -100.0% 🗑️
chunks/entrypoints_cL1LIxmM.mjs (Deleted) -192.73kB 0 bytes -100.0% 🗑️
chunks/schemas_BmHpCW3-.mjs (Deleted) -160.67kB 0 bytes -100.0% 🗑️
virtual_astro_middleware.mjs (Deleted) -126.58kB 0 bytes -100.0% 🗑️
chunks/server_eij-Qhp8.mjs (Deleted) -105.71kB 0 bytes -100.0% 🗑️
chunks/assets_QgNlWx7J.mjs (Deleted) -57.34kB 0 bytes -100.0% 🗑️
chunks/sequence_66iN-S8W.mjs (Deleted) -47.94kB 0 bytes -100.0% 🗑️
_astro/whats-new.BMO7uSN5.css (Deleted) -43.81kB 0 bytes -100.0% 🗑️
chunks/shorthash_C1znZ6LJ.mjs (Deleted) -29.34kB 0 bytes -100.0% 🗑️
chunks/image-binding-transform_D-l8wuYq.mjs (Deleted) -24.19kB 0 bytes -100.0% 🗑️
chunks/_astro_data-layer-content_BWMoVvwp.mjs (Deleted) -19.61kB 0 bytes -100.0% 🗑️
chunks/parse_Cu0OL1lq.mjs (Deleted) -15.9kB 0 bytes -100.0% 🗑️
chunks/chat_C3rSNFhi.mjs (Deleted) -12.47kB 0 bytes -100.0% 🗑️
chunks/visits_DozCW0xB.mjs (Deleted) -8.72kB 0 bytes -100.0% 🗑️
chunks/release-summary_C5T0QJI9.mjs (Deleted) -8.11kB 0 bytes -100.0% 🗑️
chunks/visitor-changelog_DFprsykt.mjs (Deleted) -8.05kB 0 bytes -100.0% 🗑️
chunks/github-releases_B_4UEBOu.mjs (Deleted) -7.13kB 0 bytes -100.0% 🗑️
chunks/semanticAttributes_C7CalV7n.mjs (Deleted) -6.7kB 0 bytes -100.0% 🗑️
entry.mjs (Deleted) -5.7kB 0 bytes -100.0% 🗑️
chunks/release-summary_B6lbfcej.mjs (Deleted) -5.29kB 0 bytes -100.0% 🗑️
chunks/_virtual_astro_session-driver_C8NwSWf_.mjs (Deleted) -3.47kB 0 bytes -100.0% 🗑️
chunks/static-image-collection_CQ1P6-eZ.mjs (Deleted) -2.84kB 0 bytes -100.0% 🗑️
chunks/releases_C1DaOjhD.mjs (Deleted) -2.19kB 0 bytes -100.0% 🗑️
chunks/image-transform-endpoint_DJgYDkP7.mjs (Deleted) -1.83kB 0 bytes -100.0% 🗑️
chunks/compiler_Djus_NTG.mjs (Deleted) -1.77kB 0 bytes -100.0% 🗑️
chunks/consts_CHyWN2V2.mjs (Deleted) -1.13kB 0 bytes -100.0% 🗑️
chunks/image-service-workerd_C8DCTExW.mjs (Deleted) -960 bytes 0 bytes -100.0% 🗑️
chunks/rolldown-runtime_Cu3-K-zv.mjs (Deleted) -941 bytes 0 bytes -100.0% 🗑️
chunks/_virtual_astro_server-island-manifest_Dyn0OT7y.mjs (Deleted) -798 bytes 0 bytes -100.0% 🗑️
chunks/content-assets_DYJvEway.mjs (Deleted) -732 bytes 0 bytes -100.0% 🗑️
chunks/noop-entrypoint_CqeoM1WT.mjs (Deleted) -680 bytes 0 bytes -100.0% 🗑️

@codecov

codecov Bot commented Oct 9, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ All tests successful. No failed tests found.

📢 Thoughts on this report? Let us know!

@alehar9320-bot

Copy link
Copy Markdown
Collaborator Author

Johan (Lead UX) — Dual OWN PASS WITH NITS on 156d5e30 (156d5e3)

Scope: branched from main e71a1eb5. Changes context/author-linkedin.md (−146/+3), context/identity.md (2 lines) and the new src/__tests__/context-privacy.test.ts. Nothing reaches visitors. I rechecked that no file in src/, scripts/, public/ or the build/worker config reads context/.

Removed from the scrape:

  • logged-in LinkedIn UI: nav and notifications, Premium upsells, "Add profile section" / "Enhance profile"
  • the "Open to work" role list, which is now gone from all of context/
  • the "Private to you" analytics: profile views, post impressions, search appearances
  • "Who your viewers also viewed" and "People you may know" with third-party names
  • recommendations prompts, 2nd/3rd-degree badges, the messaging overlay, and "You" on post bylines
  • the copilots line: "…driving business value in the size of several millions" became "…a strategic initiative."

Kept: headline "Product @ifs | Developer Experience", the About text, the PM - Developer Experience role (Feb 2025–), every IFS row, Ericsson 2014 / 2015 / 2015–16, Chalmers M.Sc./B.Sc., Kellogg, the public posts, and linkedin.com/in/alehar. identity.md still says hire is LinkedIn only, no public email and no CV, and adds no new metrics.

Test: it scans every file under context/ for open to work, private to you and several millions, case-insensitive. It's meaningful, because the current main version of author-linkedin.md would fail it. It also guards against an empty scan. Brittleness is low.

Nits (soft):

  1. The guard only catches those three exact phrases. If the role list is re-scraped under a bare "Open to" header, or the analytics come back as "profile views" / "search appearances" / "Who your viewers also viewed", the test still passes. Consider adding those phrases.
  2. "used by millions" is still unfenced in identity.md (the GitHub README quote under What he strives for). Fence it under Private or ban it too. My earlier nits on docs: agent-facing identity corpus in context/ #885 (twin-is-AI line, "No CV PDF") are also still open.
  3. The redacted copilots sentence now ends "a strategic initiative.IFS…", so the scrape isn't verbatim any more. That's fine, but a one-line "redacted" note at the top would stop agents treating it as raw LinkedIn text.

CI: green (Build & Test, Quality, CodeQL, codecov, Snyk, Workers). Merge state: CLEAN. Left as draft. Overlay 69ca717 untouched, hire is LinkedIn only, and #800 isn't touched. The squash HOLDs for Vera's Dual OWN and CI.

@alehar9320-bot

Copy link
Copy Markdown
Collaborator Author

Vera Dual OWN PASS WITH NITS on 156d5e30 (156d5e3), Dual CLOSE BOTH OWN with Johan (6077135635, PASS WITH NITS on the same tip)

Head / scope

  • A single commit off main e71a1eb5, which is also the merge-base. Files changed:
    • context/author-linkedin.md (+3/−146)
    • context/identity.md (+2/−2)
    • src/__tests__/context-privacy.test.ts (+30, new)
  • Nothing else changes. The only change under src/ is the test, so nothing visitors see changes.
  • Draft (left as is), MERGEABLE / CLEAN. git merge-tree against main shows no conflicts.
  • CI is green: Build & Test, Quality, CodeQL/Analyze, Workers Builds, codecov, Snyk and CodeRabbit all pass. Mergify, Auto-Merge and Release Metadata are skipping.

Privacy: every item from my earlier list is gone from author-linkedin.md

  • The "Open to work" role list and both "Open to" buttons.
  • The "Private to you" boxes, plus profile views, post impressions and search appearances.
  • The Premium upsell, "Stand out to employers" and the career-goals prompt.
  • "Several millions". The sentence is now "…a strategic initiative."
  • The recommendation prompt and the 2nd/3rd-degree badges.
  • "Who your viewers also viewed", "People you may know" (third-party names) and the Rootcode/MillenniumIT page suggestions.
  • "Status is online" and the messaging overlay.
  • The logged-in nav (notifications, Jobs, Messaging, Me, For Business), "Create a post", "Add profile section / Enhance profile", and "You" on post bylines.

A grep across all of context/ for open to, open to work, premium, private to you, several millions, profile views/search appearances, status is online and messaging leaves exactly one hit: L117 (see nit 1).

No public facts lost: I went through all 146 removed lines. Every one is logged-in UI, private analytics, a third-party suggestion or the unapproved claim. None is a profile fact. Everything below is still in the file:

  • Headline, About, Top skills, the Featured/Design System Awards post.
  • The public IFS Colombo trainee post and the 25R1 post.
  • IFS full-time "8 yrs 5 mos": PM DevEx Feb 2025–, PM Product Experience Apr 2022–Feb 2025, Lead Software Designer, and "Show all 6 experiences".
  • Invativa.
  • Ericsson part-time Aug 2015–Aug 2016 and the internships Jun–Aug 2015 and Jun–Aug 2014.
  • Chalmers M.Sc. 2015–2017 and B.Sc. 2012–2015.
  • Kellogg Product Strategy (May 2023) and Cisco CNA.
  • Projects, Hack for Sweden volunteering, skills, both publications, courses, honors, and languages (English, German).
  • Greater Stockholm, 500+ connections, 624 followers, and linkedin.com/in/alehar.

The only removed fact-like text is the "several millions" value claim, which is intentional.

identity.md: "The LinkedIn copilots business-value size claim is not authorized for the visitor site (and was stripped from the scrape)". The Private / do not ship bullet is now "The copilots business-value size claim from LinkedIn (no figure, no size)". The do-not-ship meaning is kept. The rewording also has to avoid the phrase itself, because the new test bans it in context/. The other locks are unchanged: hire via LinkedIn only (/in/alehar/), no public email, Ericsson kept, PM, Developer Experience at IFS, "up to" proof, Greater Stockholm.

Test: it walks context/ recursively and checks that each file, lowercased, doesn't contain open to work, private to you or several millions. It includes a guard so it can't pass by scanning zero files.

  • It guards the right core strings and would fail if they came back. Main's author-linkedin.md contains all three.
  • It's deterministic: sync filesystem reads, no network, no timing, so it isn't flaky.

Nits (all soft, non-blocking)

  1. L117 • FollowingPremium • Following is viewer state, so drop it or reduce it to just the name and headline. On the byline, "Premium" is Christian Pedersen's badge, not proof of Alexander's own subscription. "Following" is Alexander's follow state, though, and the line keeps the word Premium in a public corpus. The same applies to the Interests "Following" lines (L312/L317), which are optional.
  2. The test only bans three phrases. Like Johan's nit 1, consider adding open to, profile views, search appearances, status is online and who your viewers also viewed. Once L117 is fixed, add premium too.
  3. listFiles('context') resolves relative to process.cwd(). That's fine under the repo-root vitest config, but it breaks if the test is run from another cwd. fileURLToPath(new URL('../../context', import.meta.url)) would make it location-independent.
  4. Like Johan's nit 3: add a one-line note at the top saying the file is redacted, not verbatim. The copilots sentence now runs "initiative.IFS…".
  5. The open items from docs: agent-facing identity corpus in context/ #885 still apply: fence "used by millions", "No CV PDF" wording, a twin-is-AI/audience line, and the hero subtitle lock.

Dual CLOSE BOTH OWN. Bob may squash once the draft is lifted through the normal owner path. Overlay 69ca717. Hire LinkedIn.

@alehar9320-bot
alehar9320-bot marked this pull request as ready for review October 9, 2026 08:20
@alehar9320-bot
alehar9320-bot merged commit 966de12 into main Oct 9, 2026
15 of 16 checks passed
@alehar9320-bot
alehar9320-bot deleted the docs/context-strip-linkedin-ui branch October 9, 2026 08:21
github-actions Bot pushed a commit that referenced this pull request Oct 9, 2026
…1641)

* docs(context): tighten LinkedIn scrape redaction (#1639 follow-up)

Drop viewer follow-button state (FollowingPremium / Following) from the
scrape, add a redaction header note, fix the 'initiative.IFS' glue, widen
the context/ privacy test's banned list and resolve context/ from the
test file location instead of process.cwd().

* docs(context): fix scrape sentence joins, add viewer and reach guards

Add a space after the period in three '…see more' joins (work with. IFS,
at hand. Invativa, leadership. Activities). Ban 'who your viewers also
viewed' in the context/ privacy test, and list the 'used by millions'
reach claim as do-not-ship in identity.md.

This branch was successfully deployed

No deployments
docs/context-strip-linkedin-ui - astro-cloudflare-personal-website-web-service PR #1639 — 156d5e30 Deployed Oct 9, 2026 by alehar9320
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants