Commit Graph
235 Commits
Author SHA1 Message Date
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
Thomas DurieuxandClaude Opus 5.5 643f4b87e9 feat: let authors leave their bibliography unredacted (#941) (#943)
* feat: let owners leave chosen files unredacted (#941)

Redacting self-citations in a bibliography reveals which papers are the
authors' own. Owners can now pick files whose content is served as
written; file names are still redacted. Patterns follow .gitignore rules.

The form gets a file picker fed by GitHub's tree API, and the terms box
grows with its content and only warns about regex symbols that can stop a
term from matching.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix: honour !patterns, keep picked braces literal, preview unredacted README

- Patterns now apply in order and the last match wins, as in .gitignore,
  so "*.bib" then "!private.bib" excludes private.bib instead of
  preserving every other file.
- Picked paths escape glob characters, braces included, with a
  backslash; "[{]" did not survive brace expansion.
- The README preview drops terms when the README is an unredacted file,
  and refreshes when the list changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix: keep rule order when deduplicating unredacted-file patterns

Rules apply in order and the last match wins, so dedupe keeps the last
copy of a repeated pattern instead of the first. The picker also keeps a
plain path in its place when it follows another rule, rather than moving
it to the front as a pick.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix: apply unredacted-file rules to folders, as in .gitignore

A rule that matches a folder now covers every file inside it, so "*.bib"
then "!private" keeps private/refs.bib redacted. A trailing "/" limits a
rule to folders.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix: folder unchecks win over broad rules; accept short commit hashes

- Unchecking a folder that a broader rule such as "*.bib" still covers
  appends a "!/folder/" exclusion, so its files really go back to being
  redacted.
- The tree endpoint accepts the 6+ character hashes the commit field
  allows and resolves them to a full SHA before reading the tree.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix: picker counts folder rules exactly as the server does

Rules ending in "/" stay patterns instead of being read as picked files,
and the checkboxes now run the saved rule list (picks, then patterns)
through the server's matcher, so the dialog cannot show files as
redacted that the server leaves unredacted.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix: insert escaped terms literally in "Match as written"

String.replace expanded "$&", "$'" and "$1" in the term, so the fix
could corrupt the line. Splice by index instead.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 14:10:54 +01:00
Codex 3999a71583 perf: index repository lookups and billing maintenance 2026-11-11 10:18:20 +00:00
Codex 6a230f73b9 perf: select the covering index for folder counts 2026-11-11 10:04:03 +00:00
Codex 1505fd2baa perf: count folder files from a covering index 2026-11-11 09:05:30 +00:00
Codex 0abbe34aed fix: preserve streamer error semantics for cache probes 2026-11-10 12:55:55 +00:00
Codex 07458f536a fix: preserve cache fallback and stream failures during access checks 2026-11-10 12:51:09 +00:00
Codex 4fc3c2e042 perf: serve cached OAuth snapshots without GitHub calls 2026-11-10 12:03:52 +00:00
Codex 5267599254 perf: reduce GitHub quota spent validating credentials 2026-11-10 11:36:55 +00:00
Codex 7c7caa845c fix: prevent folder downloads from exposing GitHub metadata 2026-11-09 10:45:24 +00:00
Codex ac28c64c6c fix: bound ZIP directory memory for slow downloads 2026-11-09 08:54:26 +00:00
Codex 6593319c87 fix: persist login sessions across browser restarts 2026-11-08 20:32:03 +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 DurieuxandClaude Opus 5.5 579ce970c7 feat(ui): redesign the viewer, landing, author and admin screens
Viewer: full-height app bar with a Help menu, search + ZIP sidebar, one
toolbar for README and code, reading mode with a scroll-tracking outline,
docked find for Markdown and code, and redaction slots (a blank stone slot
holding the term number) in prose, headings, code, the tree and the path.

Landing and FAQ: live redaction demo, serif display headings, teal accent.

Author screens: My work table with copy/open/edit actions, a usage meter,
a single-container New anonymization flow with a sticky submit bar, themed
form controls, and consistent GitHub connection cards.

Admin: underline tabs, severity-first errors chart and list, error tiles
that filter (older pages load until matches appear), queue and overview
health states, and shared toolbar heights and borders.

Fixes: guarded localStorage access, failed README images render a
placeholder, phone hover states no longer stick, and UI tests updated for
the new copy and markup.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 10:52:10 +00:00
Thomas Durieux 6df74e80ac fix: keep repositories readable with invalid submodule commits 2026-11-06 12:01:25 +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 823314b5c2 fix: hide donation links for customers with paid access 2026-11-04 13:26:45 +00:00
Thomas Durieux 7ffbfd09d7 fix: count dollar-prefixed directories as literal paths 2026-11-03 15:09:10 +00:00
Thomas Durieux d4b9fd85e7 fix: isolate website limits and scope explorer counts 2026-11-03 15:03:23 +00:00
Thomas Durieux c511e9faff test: exercise streaming traversal in nested tree regression 2026-11-03 08:41:48 +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 88cd1b4cdb Merge pull request #915 from tdurieux/feat/shared-blob-cache
perf: deduplicate cached files across projects and track cache reuse
2026-11-03 09:23:07 +01:00
Thomas Durieux 110f5a5d3b Merge pull request #917 from tdurieux/fix/anonymization-timeout-retries
perf: skip unmatched regex scans in large anonymized files
2026-11-03 09:23:04 +01:00
Thomas Durieux bb366b370b fix: handle settings saves before repository cleanup 2026-11-02 22:16:16 +00:00
Thomas Durieux abfe153cdc fix: preserve saved snapshot during source replacement 2026-11-02 22:10:28 +00:00
Thomas Durieux e96d235cc7 fix: fence tree retirement before lifecycle changes 2026-11-02 22:05:03 +00:00
Thomas Durieux 314d961960 fix: retain concurrently published path indexes for cleanup 2026-11-02 21:57:33 +00:00
Thomas Durieux af23ad9eb5 fix: bound large repository tree memory and cleanup 2026-11-02 21:57:33 +00:00
Thomas Durieux 19b1d5b546 test: declare timer used by progress race regression 2026-11-02 21:55:05 +00:00
Thomas Durieux 807e38dfc7 fix: preserve publication fences during download progress 2026-11-02 21:52:30 +00:00
Thomas Durieux 3c89d3c939 perf: skip unmatched regex scans in large anonymized files 2026-11-02 21:48:40 +00:00
Thomas Durieux 47a436ee4e fix: admit dated repositories before offering checkout 2026-11-02 21:46:26 +00:00
Thomas Durieux 4dc4454459 fix: protect reactivation claims and retain historical purchase prices 2026-11-02 21:39:17 +00:00
Thomas Durieux afd7a8ff3b fix: retain replacement reservations and bound expiration extensions 2026-11-02 21:27:11 +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 036eddfa0e fix: preserve paid hosting deadlines, quotas and review snapshots 2026-11-02 21:03: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 f39b83c0da fix(cache): retry contended fill lease renewals 2026-11-02 14:06:27 +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 dd668c1f4b perf: share verified blobs and expose bounded cache metrics 2026-11-02 12:14:54 +00:00
Thomas Durieux d0b217a448 feat: include public GitHub submodules in shared repositories (#914)
* feat: include public GitHub submodules in shared repositories

* fix: preserve submodule access across token and document contexts
2026-11-02 09:00:02 +01:00
Thomas Durieux 6099356e0e feat: add scoped repository maintenance access for LLM clients (#913)
* feat: add scoped repository maintenance access for LLM clients

* fix: translate maintenance API errors
2026-11-02 07:18:04 +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