62 Commits
Author SHA1 Message Date
Thomas DurieuxandClaude Opus 5.5 0f78182c58 fix: keep legacy prices and address review findings
Subscriptions sold at a replaced price lost their plan, because a
subscription was matched only against the configured price. Resolve
prices through the configured price, STRIPE_LEGACY_PRICES, then a
registry that now also records subscription prices and every configured
price at startup. Store the price on subscription grants.

Review fixes:
- Recover a Never expire add-on found by reconciliation before expiring.
- Open Checkout for the subscription cycle the hosting option shows.
- Report conference hosting only while the package payment stands.
- Keep automatic updates on a paid-slot repository while its owner subscribes.
- Apply the repository expiration limit only to repositories.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-12 17:13:19 +00:00
Thomas DurieuxandClaude Opus 5.5 4340a9fe09 docs: keep the €49 annual subscription
Six of the first 22 subscribers chose the annual plan at €49 and it
brought 79% of revenue, so cutting it to €30 would lose money.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-12 16:36:52 +00:00
Thomas DurieuxandClaude Opus 5.5 d25e5336ce feat: let authors pay once per paper instead of subscribing
Most authors use the service for one paper a few times a year, so a
subscription does not fit. Add cheap one-time options (Paper pack, Extra
repository, Live updates, Extended expiration, Never expire), cap free
dated expiration at 5 months, keep cheaper subscriptions for heavy users,
and make every new conference a paid review package in three sizes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-12 16:04:31 +00:00
Codex 3999a71583 perf: index repository lookups and billing maintenance 2026-11-11 10:18:20 +00:00
Thomas DurieuxandClaude Opus 5.5 c685d833ab Merge origin/main into feat/ui-redesign
Backend, scripts, docs and their tests take main's newer code where both
sides changed the same lines (the shared blob cache, GitHubStream and
markdown fixes landed on main after the Go migration branch was cut).
The Dockerfile keeps the Go build from the migration, plus main's
owner-alert-protocol label; .gitignore keeps both sides' entries.

Frontend keeps the redesign and folds in main's features: Stripe billing
in the New anonymization submit bar, GitHub access repair, redaction
syntax help, the preview expand toggle, configurable redaction mask,
folder counts, reviewer-route header rules, link expiry (now in the
viewer's snapshot details) and the explorer error card. main's
narrow-only wrap logic is dropped because the redesign wraps on desktop
and scrolls sideways on phones.

Tests: 1534 passing with SESSION_SECRET set (as in CI). Three main tests
were updated for the agreed viewer design (no site header in the viewer,
no repository-wide file count).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 14:07:33 +00:00
Thomas Durieux 76e5804404 feat: migrate backend to Go with streaming and provider support 2026-11-04 14:21:36 +00:00
Thomas Durieux d4b9fd85e7 fix: isolate website limits and scope explorer counts 2026-11-03 15:03:23 +00:00
Thomas Durieux c32125fc2e fix: coordinate deployments when shared cache writers are active 2026-11-03 08:33:12 +00:00
Thomas Durieux 860169f27b merge: preserve billing admission with bounded tree preparation 2026-11-03 08:33:12 +00:00
Thomas Durieux 70735bd80c fix: enforce resolved storage quotas across shared cache paths 2026-11-03 08:26:43 +00:00
Thomas Durieux e71e6b6389 merge: reconcile paid hosting with shared cache and main 2026-11-03 08:26:43 +00:00
Thomas Durieux 97e5b50cf0 merge: integrate main after progress fence and cache merges 2026-11-03 08:25:43 +00:00
Thomas Durieux af23ad9eb5 fix: bound large repository tree memory and cleanup 2026-11-02 21:57:33 +00:00
Thomas Durieux 4dc4454459 fix: protect reactivation claims and retain historical purchase prices 2026-11-02 21:39:17 +00:00
Thomas Durieux d7a5243054 fix: admit replacement sources and account for resolved storage 2026-11-02 21:18:43 +00:00
Thomas Durieux ded6f905fd merge: reconcile paid hosting with latest main 2026-11-02 21:12:29 +00:00
Thomas Durieux 410863d253 feat: add paid author and conference hosting with Stripe 2026-11-02 20:49:03 +00:00
Thomas Durieux 074a9af315 fix: fence shared transformations and cancel abandoned cache work 2026-11-02 13:58:25 +00:00
Thomas Durieux d851fdb381 fix: coordinate cache disk reservations and tolerate reader renewal contention 2026-11-02 13:42:10 +00:00
Thomas Durieux 4b8635bd53 fix: preserve shared cache response semantics and recover from contention 2026-11-02 13:03:07 +00:00
Thomas Durieux 0efa1590c9 docs: consolidate cache guidance and keep generated reports local 2026-11-02 12:24:01 +00:00
Thomas Durieux dd668c1f4b perf: share verified blobs and expose bounded cache metrics 2026-11-02 12:14:54 +00:00
Thomas Durieux 6cf5445972 fix: fill gaps in GitHub Markdown rendering (#912)
* fix: fill gaps in GitHub Markdown rendering

* fix: harden Markdown dependencies and address review findings
2026-11-02 07:56:32 +01:00
Thomas Durieux 1d326e7c32 fix: repair private repository access from the edit page (#892)
* fix: repair private repository access from the edit page

* fix: respect App rollout and reload renamed sources after repair

* fix: gate access repair by status and update response tests
2026-10-11 12:13:02 +01:00
Thomas Durieux 444e5ab248 fix: save verified email addresses during GitHub registration 2026-10-09 13:24:21 +00:00
Thomas Durieux 37d10eed20 fix: contain upstream failures and back off repeated retries 2026-10-09 03:48:05 +00:00
Thomas Durieux eb4fbb6b15 Merge commit 'refs/security-review/pr849' into HEAD
# Conflicts:
#	src/server/service/review-consent-http.ts
2026-10-08 16:26:12 +00:00
Thomas Durieux 7fc0a79a7a Merge commit 'refs/security-review/pr848' into HEAD 2026-10-08 16:25:33 +00:00
Thomas Durieux 89d7a92072 Merge commit 'refs/security-review/pr847' into HEAD 2026-10-08 16:25:33 +00:00
Thomas Durieux c1d192cb7f Merge commit 'refs/security-review/pr846' into HEAD
# Conflicts:
#	public/script/main.js
2026-10-08 16:25:32 +00:00
Thomas Durieux 5e84a7e1a3 Merge commit 'refs/security-review/pr845' into HEAD 2026-10-08 16:25:01 +00:00
Thomas Durieux 243396515e Merge commit 'refs/security-review/pr844' into HEAD 2026-10-08 16:25:00 +00:00
Thomas Durieux 37a87a0fba Merge commit 'refs/security-review/pr843' into HEAD 2026-10-08 16:25:00 +00:00
Thomas Durieux 9fa9838dea Merge remote-tracking branch 'origin/main' into HEAD 2026-10-08 16:24:40 +00:00
Thomas Durieux a9760eab39 perf: avoid needless downloads and track request latency (#876)
* perf: avoid needless downloads and track request latency

* fix: correct request timing and monitoring revalidation
2026-10-08 10:38:33 +01:00
Thomas Durieux db966356ec fix: support gists through GitHub App login (#875)
* fix: prompt OAuth reconnection when gist credentials are rejected

* fix: support gist reads through GitHub App user grants

* test: adapt truncated gist regression to provider selection

* fix: address gist reconnect visibility and token renewal review

* fix: verify App authorization before revoking OAuth
2026-10-08 10:26:13 +01:00
Thomas Durieux 4fd31a59c8 fix: avoid timeouts for safe ZIP anonymization (#873) 2026-10-08 08:20:26 +01:00
Thomas Durieux 40c369641b fix: keep ZIP downloads flowing through compression (#872) 2026-10-08 04:31:52 +01:00
Thomas Durieux 6434337923 perf: bound request work and resource usage (#866)
* perf: bound request work and resource usage

* fix: address performance review regressions

* fix: guard content expiration and dashboard state

* fix: tolerate cache outages and retire derived paths

* fix: revalidate expiration claims and status pagination

* fix: retry interrupted repository metadata cleanup

* fix: retire obsolete content cache storage

* fix: activate tree metadata and recheck expiration claims

* fix: fence cache publication across expiration

* fix: recover staged trees and enforce cache lifecycle cleanup

* fix: prune expired transforms during database outages

* fix: finish conference removals and reload expiration candidates
2026-10-08 03:38:19 +01:00
Thomas Durieux d3a8b4a8a7 Return artifact consent through registered POST callbacks 2026-09-27 15:59:36 +00:00
Thomas Durieux 09f94137cd Give the disposable MongoDB fixture room for its journal 2026-09-27 15:24:22 +00:00
Thomas Durieux 7fe60a89aa Add scoped completion exchange service transport 2026-09-27 15:18:49 +00:00
Thomas Durieux d909bf281b Exchange owner consent codes for immutable pending bindings 2026-09-27 15:06:14 +00:00
Thomas Durieux e4334bc9a7 Add isolated artifact owner consent page 2026-09-27 14:56:06 +00:00
Thomas Durieux 7b60979c96 Protect artifact consent HTTP requests with current sessions and CSRF 2026-09-27 14:36:46 +00:00
Thomas Durieux 5485f57e02 Retain session-bound artifact owner consent under current authority 2026-09-27 14:16:57 +00:00
Thomas Durieux b776ff7e5a Add bounded authenticated review intent HTTPS consumer 2026-09-27 13:50:20 +00:00
Thomas Durieux 83e8d45192 fix: close rejected artifact service requests before body draining 2026-09-27 13:13:04 +00:00
Thomas Durieux 31dfe0f604 Record clean-install upstream build and full test results 2026-09-27 13:03:02 +00:00
Thomas Durieux eaa84e3af5 Add optional authenticated review-service capabilities endpoint 2026-09-27 12:51:28 +00:00