The 0.0.x rpms were classed other, so installer totals left out about 220
lifetime downloads; they are installers like the 2.x rpm. Only one snapshot
has reached PostHog with the old kind, and the dashboard tiles compute
growth per asset, so the switch moves no counts.
The stable*.yml docstring said one count per 2.x launch or Check now. The
website's update proxy also fetches each file itself, about 96 a day per
file, and 2.2.4+ checks reach GitHub only when they fall back.
The self-hosted stack lives on the legacy branch, released as
legacy-v0.0.41. Delete surfsense_backend/, surfsense_mcp/, docker/
except keygen/ (production's Keygen CE images), the root VERSION and
scripts/bump-version.{sh,ps1}. surfsense_web/ stays until the website
split.
New release-stats kinds installer_rpm, install_script, apt_index and checksums; the 0.0.x rpms keep the kind they were first sent with. The kind table names the package managers behind each installer count, since none of them reads stable*.yml.
urllib follows a redirect on its own and copies every header onto it,
the Authorization one included, so a 3xx to another host still carried
the token after next-page links were checked. The default opener now
follows a redirect only on the API's origin and raises
GitHubOriginError for any other, before a request goes there.
Each run sent yesterday's views and clones once, under a random event id,
so a rerun the same day doubled the daily sum and a missed run left a gap.
Send one github_traffic_day per whole day GitHub still holds, at that day's
midnight UTC with a uuid derived from the repository and the day, so PostHog
keeps one copy per day. The 14-day totals stay on github_traffic_snapshot.
A daily job reads every release's per-asset download counts and, when
RELEASE_STATS_TOKEN has push access, the 14-day traffic GitHub otherwise
drops. It keeps the snapshot as a 90-day artifact and, with
POSTHOG_PROJECT_API_KEY set, sends personless events classified by which
client fetches each asset.
- chat.md, overview.md: how a streamed token renders only the live reply
(runSummaries, the 32 ms notice gap, LiveThreadRuntime, the bounded
highlighter, memoized panels) and that the columns resize.
- model-capabilities.md, agent.md, data-model.md, 07-dev-setup.md: the two
chat modes, their gates and defaults, where a pick is stored, the 0-id fix,
and how to re-run the OpenRouter sweep and regenerate capabilities.json.
- RELEASE.md: the steps 2.2.0 was released by, from the bump (with its
PowerShell form) to the tag on the merge, the Known issues, an optional
update check and publishing with --latest; dry runs are signed.
- 06-repo-readme.md, AGENTS.md, README.md's comment: the README's structure,
how to change it and its translations, re-checking the format table, and
replacing the demo video.
- Stale statements fixed (the Apple agreement, opencode never shipped, three
languages, Studio's exec(), proposal statuses, the roadmap), and each gap
still open after the release in its doc's Known gaps, linked to #2219-#2230.
It compared the catalogs against LF output while git checks them out as CRLF, so it failed all three catalogs for every Windows contributor, and the check-translations pre-commit hook with them. Line endings are git's to decide, so they are normalised before the comparison.
It also kept its own copy of the shipped languages, where a stale list would skip a language in silence. It now reads LOCALES from i18n/locales.ts, and flags a catalog with no entry there as well as an entry with no catalog.
Co-authored-by: Cursor <cursoragent@cursor.com>
Move the engineering specs out of plans/ into a root docs/ folder.
architecture/ describes what is true in the code now, one doc per
feature. adr/ records decisions: 0003 is restored and 0004-0027 are
new. proposals/ holds designs not built yet: plugins and the CUDA
backend. contracts/ holds the frozen interfaces between trees, with
the fixtures their tests read. ROADMAP.md names the initiatives.
The shipped phase plans are deleted; git history keeps them. plans/
keeps business, launch and ops material only.
Also: CONTRIBUTING.md rewritten around this flow, a CODEOWNERS file,
a Docs section in AGENTS.md, scripts/check_docs.py (was
check_plan_links.py) as a pre-commit hook, the backend tests path
filter extended to docs/contracts, and the five tests that read the
contract fixtures pointed at their new path.
Co-authored-by: Cursor <cursoragent@cursor.com>
scripts/bump-version.ps1 still bumped surfsense_desktop and
surfsense_browser_extension, both deleted, so it had drifted from its
.sh twin. Both scripts also reported "Bumping all packages", which
would let someone cutting a desktop release believe the desktop
version had been written when it had not.
They own the hosted line only -- root VERSION, v0.* tags,
docker-build.yml. The desktop app keeps its own number in
surfsense_local/VERSION.
Co-authored-by: Cursor <cursoragent@cursor.com>
- Added a new page focused on transforming documents into professional deliverables, reflecting user demand for practical applications over academic use.
- Updated keyword research to emphasize business-oriented terms, including "private ai for business" and "secure ai for business," based on user data analysis.
- Revised existing documents to align with findings from production chat data, highlighting the shift in user intent from study to professional tasks.
- Introduced new data files for keyword ideas and overviews to support the updated strategy.
- Changed the method of retrieving the app version in the Docker build workflow from the pyproject.toml file to the VERSION file for improved consistency and reliability.
- Updated error messaging to reflect the new source of the app version.
- Added support for multiple queues in Celery worker configuration.
- Modified connector deletion to handle documents inline instead of using a background task.
- Updated response messages for document creation and connector deletion to reflect new processing status.
- Removed the obsolete connector deletion Celery task file.
- Added initialization script for Electric SQL user in Docker setup.
- Updated Electric SQL client to support new PGlite architecture and sync functionality.
- Improved notification fetching and syncing logic in useNotifications hook.
- Refactored ElectricProvider to handle initialization state and errors more gracefully.
- Removed deprecated electric.config.ts file and adjusted package dependencies accordingly.
- Added Electric SQL service to docker-compose for real-time data synchronization.
- Introduced PostgreSQL configuration for logical replication and performance tuning.
- Created scripts for initializing Electric SQL user and electrifying tables.
- Implemented notification model and service in the backend.
- Developed ElectricProvider and useNotifications hook in the frontend for managing notifications.
- Updated environment variables and package dependencies for Electric SQL integration.
- Modified Dockerfile to use placeholder values for frontend environment variables, allowing for runtime substitution.
- Enhanced entrypoint script to apply runtime environment variable configuration, replacing placeholders in JavaScript files with actual values.
- Updated documentation paths in MDX files for Google OAuth images and added detailed setup guides for Discord, Linear, Notion, and Slack OAuth integrations.