Conversation
Zero-duration sessions and empty PostHog page tables, same root cause already fixed in portwing (CodesWhat/portwing#214): capture_pageleave was false, so a session's last recorded timestamp is its last pageview and a long read of one page scores as a bounce. PostHog's Web analytics Page, Entry page, and Exit page tables key off $pathname, which the contract never sent, so those tables return zero rows. Flipping capture_pageleave alone fixes nothing. posthog-js only emits $pageleave when the option is an explicit true (or "if_capture_pageview" combined with capture_pageview enabled); both apps set capture_pageview false and capture pageviews by hand, so it has to be true. Once posthog-js emits $pageleave itself, it reaches before_send carrying PostHog's own raw properties, and sanitizeEvent previously fell through to its final `return null` for anything outside the pageview/CTA/web-vitals allowlist, silently dropping every one. This widens sanitizeEvent in both apps/website/src/lib/posthog-privacy.ts and apps/docs/src/lib/posthog-privacy.ts to rebuild $pageleave the same way as $pageview, and adds $pathname to both events' properties, bound to the already-sanitized `path` value rather than the raw pathname. No privacy option changes: cookieless_mode, person_profiles, persistence, disable_persistence, respect_dnt, save_referrer, and save_campaign_params are untouched. No CHANGELOG entry: the closest precedent on this branch, 16800a7 "fix(website): permit analytics loader in csp", is the same size and subsystem and didn't add one either; this repo's CHANGELOG entries track shippable feature/release commits, not instrumentation fixes. Part of X16 in the ops execution plan. The same change is still to come for drydock, sockguard, and codeswhat.com.
Replace the bespoke inline footer in page.tsx with the CodesWhat house pattern: a brand-peer band with product identity (name, blurb, product links) on the left and the CodesWhat pill (coin, "A CodesWhat project", arrow) on the right, followed by a license/copyright line. The pattern comes from codeswhat-components/templates/web-shell's footer.tsx; this site has no Tailwind, so it's recreated in careerrat's own plain-CSS/BEM idiom instead of ported verbatim. The footer is now its own component (src/components/Footer.tsx) instead of inline markup, split into a Product column (Docs, Code signing policy) and a Project column (GitHub, Releases, License), matching the house Product/Project split. Kept from the old footer: all five links (Docs, GitHub, Releases, Code signing policy, License), the copyright line, and the CodesWhat pill with the coin logo. Changed to match the house pattern: the pill now links to https://github.com/CodesWhat (the template's canonical target) instead of https://codeswhat.com, and the copyright line now names the MIT License and links to it, matching the template's "released under the X License" convention. CTA tracking in the footer is deferred. The footer links are plain links for now because ALLOWED_PLACEMENTS in posthog-privacy.ts doesn't have a "footer" entry yet, and that file is owned by an in-flight PR adding pageleave instrumentation. Once that placement lands, the footer links can move to TrackedLink like the other CodesWhat sites. Updated tests/website-copy.test.mjs's footer assertions to read the new Footer.tsx component instead of page.tsx.
feat(analytics): capture $pageleave and send $pathname
feat(website): add house footer
Completes the v0.16.3 first-run, search relevance and locality, provider/runtime, chat, demographic-default privacy, supervised browser-apply, desktop UI, website, documentation, and QA work.
Marks v0.16.3 as the current public release across README, install docs, roadmap, and the tested copy contract while preserving historical release evidence.
chore(release): sync main into v0.16
feat(release): prepare v0.16.4
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
biggest-littlest
left a comment
There was a problem hiding this comment.
Reviewed the promotion ancestry and verified it matches the approved v0.16.4 candidate.
ALARGECOMPANY
left a comment
There was a problem hiding this comment.
Verified the promotion contains the reviewed v0.16.4 candidate with no independent changes.
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: ⛔ Files ignored due to path filters (2)
📒 Files selected for processing (83)
📝 WalkthroughWalkthroughThe update changes macOS releases to an atomic DMG, updater ZIP, and Suggested labels: ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
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. Comment |
#241) Four of careerrat's six CI failures since 08-20 are one cause. `npm ci` died with a misleading `EUSAGE: can only install with an existing package-lock.json` on #206 and #208 while the lockfile was plainly committed. The real error only appears when you run what Renovate runs: npm error code EOVERRIDE npm error Override for sharp@0.35.3 conflicts with direct dependency `overrides.sharp` was a literal `^0.35.0` while `sharp` is also a root devDependency. Pinning the direct dep made the two specs diverge, npm refused to regenerate the lockfile, `renovate/artifacts` went red, and Renovate pushed the package.json change anyway. CI then met a package.json and a lockfile that disagree, which npm 11 reports as a *missing* lockfile rather than a stale one. - fix(deps): point `overrides.sharp` at `$sharp` so the override follows the direct dependency instead of being a second copy of it. Resolves to `^0.35.0` today, so the lockfile is byte-identical and nothing moves. Verified by replaying #206's pin on top: lockfile regenerates and `npm ci` accepts it, where before it was EOVERRIDE then EUSAGE. - chore(config): set `baseBranchPatterns` to the active dev line. All four open dependency PRs target `main`, which the release flow forbids as an independent commit target; sockguard and portwing already pin theirs. - ci(greptile): skip the summon when the PR is already closed. A label can land after close and the frozen reusable workflow fails loudly rather than no-opping ("Pull request #234 is closed"). Staying strict is right for the shared workflow, so the guard belongs in the caller. #208 is a separate cause and is not fixed here: `@vitejs/plugin-react@6` peer-requires `vite@^8` against a pinned `vite@6.4.3`, and no vite major PR exists, so it cannot resolve alone. That wants an ecosystem group in the shared preset.
Promotes the reviewed v0.16.4 candidate from the protected development line to
main.Feature PR: #233
Ancestry sync: #232
All required checks, two independent approvals, CodeQL, 3,856 repository tests, 761 web tests, Windows install smoke, Electron smoke, and release reviews passed on the candidate. Vercel preview was rate-limited at the account level; the repository website production build passed.
Changelog
✨ Added
electron-updater 6.8.9.Restart and install, persisted update state, and shutdown-aware installation.latest-mac.yml.sourceUrl.🔧 Changed
relocation: falseto[].🐛 Fixed
max_commute_days_per_weekfrom passing eligibility checks.🗑️ Removed
openReleasebridge method withrestartAndInstall.🔒 Security
latest-mac.ymlSHA-512 and size metadata.Concerns
restartAndInstalland the new phase fields.