Skip to content

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

Merged
github-actions[bot] merged 2 commits into
mainfrom
docs/context-redaction-followup
Oct 9, 2026
Merged

github-actions[bot] merged 2 commits into
mainfrom
docs/context-redaction-followup

Conversation

@alehar9320-bot

@alehar9320-bot alehar9320-bot commented Oct 9, 2026 •

Copy link
Copy Markdown
Collaborator

Follow-up to #1639 (which followed #885). Covers Vera's nits on context/author-linkedin.md and the context/ privacy test. This PR changes docs and one test only.

context/author-linkedin.md

  • Removed the viewer follow-button state:
    • L117 • FollowingPremium • Following under Christian Pedersen's reposted post.
    • The two Following buttons in Interests → Top Voices (Cassie Kozyrkov and Marc Randolph), plus their blank spacer lines. The Top Voices entries themselves stay.
  • Added a header note: this is a redacted public-profile scrape, logged-in/private UI was removed, and context/ is locked by context-privacy.test.ts.
  • Fixed initiative.IFS → initiative. IFS. It occurred once.
  • No public facts changed.

src/__tests__/context-privacy.test.ts

  • Widened the banned list to: open to work, open to, private to you, several millions, profile views, search appearances, status is online, premium. Matching is case-insensitive.
  • Before adding them, I searched context/ for each one. The only hit was premium in L117, which this PR removes. No public text or identity.md rule needed rewording.
  • context/ is now resolved from the test file's own location (fileURLToPath(import.meta.url)), not from process.cwd().
  • On main's context/, the widened test fails ("premium"). On this branch it passes, including when vitest is run from a different working directory.

Second commit (Vera + Johan comment 6077135635)

  • author-linkedin.md: I added the missing space after the period in three more sentence joins: work with. IFS (L162), business case at hand. Invativa (L184) and leadership. Activities (L214). A search for [a-z]\.[A-Z] now finds no prose joins. URLs and abbreviations are untouched.
  • context-privacy.test.ts: added who your viewers also viewed to the banned list. A search of context/ before the change found no match.
  • identity.md → "Private / do not ship on visitor pages": added a rule saying the "used by millions" reach claim from the GitHub profile README must not ship on visitor pages. The phrase also appears in identity.md L13, which describes the GitHub profile README source. I left that line as is: it describes the source, and the test doesn't ban the phrase.

The removed text still exists in git history. Whether to purge it is Alexander's decision.

Local checks (Node 22): npm test passed (23 files, 390 tests). npm run lint and npm run format:check are clean.

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().
@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: 6380ec9d-f043-4b1c-9342-51b658c6b86f

  • 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.

@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Oct 9, 2026 •

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 23d1fad Commit Preview URL

Branch Preview URL
Oct 09 2026, 08:29 AM

@codecov

codecov Bot commented Oct 9, 2026 •

Copy link
Copy Markdown

Bundle Report

Bundle size has no change ✅

Affected Assets, Files, and Routes:

view changes for bundle: molecular-mars-esm

Assets Changed:

Asset Name Size Change Total Size Change (%)
_astro/page.BdE8wAoK.js (New) 333.55kB 333.55kB 100.0% 🚀
_astro/module.Cg_1HlgX.js (New) 289.4kB 289.4kB 100.0% 🚀
_astro/Chat.astro_astro_type_script_index_0_lang.CLKVtbOO.js (New) 11.45kB 11.45kB 100.0% 🚀
_astro/PostHog.astro_astro_type_script_index_0_lang.CqfmjBRO.js (New) 2.19kB 2.19kB 100.0% 🚀
_astro/hire-analytics._BiWqJZz.js (New) 1.37kB 1.37kB 100.0% 🚀
_astro/BaseLayout.astro_astro_type_script_index_0_lang.CyX6HfYy.js (New) 690 bytes 690 bytes 100.0% 🚀
_astro/contact.astro_astro_type_script_index_0_lang.BS8mqGlW.js (New) 554 bytes 554 bytes 100.0% 🚀
_astro/page.BbuuazF7.js (Deleted) -333.55kB 0 bytes -100.0% 🗑️
_astro/module.Bqg8E_nA.js (Deleted) -289.4kB 0 bytes -100.0% 🗑️
_astro/Chat.astro_astro_type_script_index_0_lang.DVxOkz5T.js (Deleted) -11.45kB 0 bytes -100.0% 🗑️
_astro/PostHog.astro_astro_type_script_index_0_lang.RGA7734E.js (Deleted) -2.19kB 0 bytes -100.0% 🗑️
_astro/hire-analytics.BrUaWVQd.js (Deleted) -1.37kB 0 bytes -100.0% 🗑️
_astro/BaseLayout.astro_astro_type_script_index_0_lang.DFs6JZQl.js (Deleted) -690 bytes 0 bytes -100.0% 🗑️
_astro/contact.astro_astro_type_script_index_0_lang.DNbYQ9Th.js (Deleted) -554 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!

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.
@alehar9320
alehar9320 temporarily deployed to docs/context-redaction-followup - astro-cloudflare-personal-website-web-service PR #1641 October 9, 2026 08:28 — with Render Destroyed
@alehar9320-bot

Copy link
Copy Markdown
Collaborator Author

Owner review on tip 23d1fad: PASS on value. This is docs + test only, it changes no public facts, and visitor pages are untouched. It tightens the public context/ corpus against logged-in LinkedIn UI, which is good for a public repo. The import.meta.url resolution is a good fix.

Soft nit (non-blocking): 'open to' and 'premium' are broad case-insensitive substrings. A future legit line like "open to collaboration" or "premium support" would trip the test. Consider word-boundary regexes, or narrower phrases like open to work / open to: and premium • / try premium. It's fine to ship as is and tighten later.

HOLD: still draft and CI is in progress. Squash once CI is green and Johan + Vera Dual is on this tip. The Codecov bundle +116% is a baseline artifact (the PR has no src/runtime changes), so ignore it.

@alehar9320-bot

Copy link
Copy Markdown
Collaborator Author

Johan (UX): Dual OWN PASS on 23d1fad3

This touches only context/ docs and the context-privacy test. It closes my #1639 nits: it adds a note that the LinkedIn copy is redacted, fences "used by millions" as private, and widens the banned phrases in the privacy test. It also strips the leftover signed-in "Following" and Premium lines. Nothing reads context/ at runtime, so visitors see no change. Locks hold: hire is LinkedIn only, there's no public email or CV PDF, and Ericsson 2014–2016 is kept.

CI is green and the PR merges cleanly. Squash is clear on my side, with Vera's OWN per the usual flow. Overlay 69ca717. Hire LinkedIn.

@alehar9320-bot

Copy link
Copy Markdown
Collaborator Author

Vera Dual OWN PASS WITH NITS on 23d1fad3 (23d1fad), Dual CLOSE BOTH OWN with Johan (6077358079, Dual OWN PASS on the same tip)

Head / scope: two commits (336a825, 23d1fad) off main 966de12f, which is the merge-base. Files changed:

  • context/author-linkedin.md (+6/−9)
  • context/identity.md (+1)
  • src/__tests__/context-privacy.test.ts (+19/−5)

That's docs plus the test, with nothing visitor-facing. Draft (left as is), MERGEABLE / CLEAN, and merge-tree 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.

Scrape diff (author-linkedin.md)

  • ✅ Old L117 • FollowingPremium • Following is dropped. Christian Pedersen's name, headline and post text stay.
  • ✅ Both viewer Following lines under Interests are dropped. Cassie Kozyrkov and Marc Randolph stay with their headlines and follower counts.
  • ✅ The run-on joins are fixed in 4 places: "initiative. IFS", "work with. IFS", "case at hand. Invativa" and "H&M - leadership. Activities". A scan for [a-z].[A-Z] finds no others.
  • ✅ The redacted header is added under the H1. It says logged-in and private UI was removed in docs(context): strip logged-in LinkedIn UI from author-linkedin.md #1639 and this follow-up, and points to the privacy test.
  • ✅ No public facts lost. The only removed lines are the 3 viewer-state lines above plus 2 blank lines. Every other changed line is the same text with a space added.

identity.md: ✅ "used by millions" is added under Private / do not ship on visitor pages: "The 'used by millions' reach claim from the GitHub profile README (no user-count or scale claim)." The other locks are unchanged: LinkedIn-only hire (/in/alehar/), no public email or CV PDF, Ericsson 2014–2016, PM, Developer Experience at IFS, and the copilots size claim fenced.

Test

  • ✅ The banned list is widened from 3 to 9 phrases: open to work, open to, private to you, several millions, profile views, search appearances, status is online, premium and who your viewers also viewed.
  • ✅ context/ now resolves from the test file's own location: resolve(dirname(fileURLToPath(import.meta.url)), '../../context'). It no longer depends on the folder the test is run from.
  • ✅ I ran the same lowercase substring scan against both context/ files at this tip, and both pass for all 9 phrases. It's still deterministic, with no network or timing.

Nits (soft)

  1. The bare 'open to' ban is broad: a future legitimate line like "open to collaboration" or "open to relocation discussions" would fail CI. Prefer 'open to work' plus 'open to:' (the LinkedIn label form) or a word-boundary regex. 'open to work' is also redundant while bare 'open to' is in the list. 'premium' is fine to keep: there's no legitimate need for it in this corpus, and it guards the upsell and badges well. Bob's owner note (6077336686) suggests the same.
  2. identity.md L13 still quotes "used by millions" inline under What he strives for. It's fenced by the new Private bullet, but an inline "(do not ship; see Private)" on L13 would stop an agent lifting the sentence on its own.

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:38
@github-actions
github-actions Bot merged commit 193eb14 into main Oct 9, 2026
15 checks passed
alehar9320-bot added a commit that referenced this pull request Oct 9, 2026
Vera soft nits on #1641 (6077408474): ban 'open to work' and the LinkedIn label 'open to:' instead of bare 'open to', so prose like 'open to collaboration' doesn't fail CI; keep 'premium' and all other entries. Mark the inline 'used by millions' in context/identity.md L13 '(do not ship)'.
github-actions Bot pushed a commit that referenced this pull request Oct 9, 2026
…design-system CTA (#1638)

* fix(hire): count /work/ second Get in touch link

The in-main 'Get in touch on LinkedIn' link on /work/ had no data-hire-* attributes, so hire clicks from it were not counted. Tag it with the same event as the other hire CTAs (hire_cta_click) and its own surface (work_page). Copy, href and styles unchanged.

* test(hire): match /work/ LinkedIn href with an anchored regex

CodeQL flagged js/incomplete-url-substring-sanitization on the includes() URL check in the new /work/ hire test. Match the exact href attribute instead.

* test(hire): lock /work/ ContactCTA hire attrs, drop moot second-link test

#1109 removed the in-main /work/ hire link, so the 'exactly 2 tagged links' test no longer applies. Assert instead that /work/ renders ContactCTA with data-hire-event="hire_cta_click" and data-hire-surface="contact_cta" (Vera nit 1 on #1109).

* fix(work): drop phone FAB-clearance bottom padding after Earlier work

ContactCTA now follows Earlier work directly and carries its own FAB clearance, so .earlier's phone padding-bottom: var(--chat-fab-clearance) (100px) only added blank space (last item to CTA heading 261px -> 161px at 390x844). Desktop was already padding-bottom: 0 and is unchanged. The older FAB lock now asserts work.astro has no FAB padding-bottom; padding-right stays. Vera nit 2 on #1109.

* fix(hire): count IFS Design System case Get in touch (#979)

The in-body 'Get in touch on LinkedIn' on /work/ifs-design-system/ had no data-hire-* attributes, so clicks were not counted. Tag it data-hire-event="hire_cta_click" data-hire-surface="case_study", add case_study to HireSurface, and lock it in identity.test.ts. Copy, href and styles unchanged.

* docs(context): narrow 'open to' ban, fence inline 'used by millions'

Vera soft nits on #1641 (6077408474): ban 'open to work' and the LinkedIn label 'open to:' instead of bare 'open to', so prose like 'open to collaboration' doesn't fail CI; keep 'premium' and all other entries. Mark the inline 'used by millions' in context/identity.md L13 '(do not ship)'.

This branch was successfully deployed

No deployments
docs/context-redaction-followup - astro-cloudflare-personal-website-web-service PR #1641 — 23d1fad3 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

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants