Commit Graph
214 Commits
Author SHA1 Message Date
tdurieuxandClaude Opus 5.5 be2f979296 fix: keep redaction marks correct with custom masks, Prism and Mermaid
- The mask from /api/options is stored once loaded; code markers and
  rendered Markdown are refreshed when it arrives instead of keeping the
  XXXX default.
- Mermaid sources are left untouched so diagrams still parse.
- Fenced code blocks are marked from a Prism complete hook, after Prism
  has rewritten their HTML.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 14:46:13 +02:00
tdurieuxandClaude Opus 5.5 80944954d6 fix: bring the admin pages in line with the rest of the app
- Overview: error-volume bars render (the fills were inline spans), the
  cumulative users chart is scaled to its range and labels it, latencies
  over a second read in seconds, and charts and daily numbers use the
  accent instead of four unrelated colours.
- Labels, table headers and state chips drop the mono caps; queue stat
  values drop the serif.
- Error rows keep their content aligned; row metadata wraps instead of
  truncating every item; "1 term" is singular.
- Errors filter uses the shared segmented control; breadcrumbs include
  Admin; user detail spaces its status and actions, uses the accent for
  Generate and says when no access token is stored.
- The jobs table scrolls inside its card on phones.
- Mock server: admin fixtures for every admin endpoint (ADMIN=1).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-08 14:46:03 +02:00
tdurieuxandClaude Opus 5.5 fd1bce74b4 fix: clean up the admin queue controls
The range picker drew a border around every segment inside the group's
border, and Drain used a filled pill that made the most destructive
action the loudest. Segments are now borderless inside one outline with
a tinted selection, all header controls share one height, and Drain and
Clear all use a red outline. Queue labels drop the mono caps. ADMIN=1
signs the mock server in as an administrator.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-08 14:46:01 +02:00
tdurieuxandClaude Opus 5.5 57412d0610 feat: refine the reviewer explorer and the visual system
- Explorer: redacted terms are highlighted in Markdown and code, the
  sidebar shows when the link expires, "Download repository" is the one
  primary action, and signed-out reviewers get a header without Sign in
  or the source-code link.
- Status: a ready anonymization leads with a copyable share link; the
  support links sit flat inside their section.
- One primary colour (accent) for actions and progress; mono is kept for
  IDs, hashes and paths; settings are plain sections instead of cards.
- Font sizes snap to one scale (10-40px); rem values keep following the
  reader's browser font size.
- Ko-fi button uses a dark surface in dark mode instead of a white pill.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-08 14:45:54 +02:00
tdurieuxandClaude Opus 5.5 69f9029301 fix: address review on explorer actions, wrapping and breakpoints
- File-level errors keep the breadcrumb and repository actions; only
  repository-level failures (no file list) hide the bar.
- Code wrapping follows the viewport when it crosses 992px.
- Settings and FAQ tables of contents stack at the same breakpoint as
  their grids, so they no longer stay sticky over stacked content.
- The sign-in page keeps its 480px cap.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 14:45:41 +02:00
tdurieuxandClaude Opus 5.5 361f761f92 fix: tidy the phone layouts
- Wrap long code lines in the explorer below 992px; the declared
  useWrapMode option was never applied.
- Light editor and gutter use the page colour, like dark mode.
- New anonymization uses the same 18px inset as other pages.
- Settings, new conference and FAQ section links scroll in one row
  instead of wrapping under a lone underline.
- Page intros are no longer clamped to two lines.
- Status page actions stack full width without the anonymize form's
  sticky bar styling; dropdown labels no longer split apart.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-08 12:43:24 +02:00
tdurieuxandClaude Opus 5.5 f8b2ea38a1 fix: polish explorer, error states and page alignment
- Explorer: 13px code, page-coloured dark editor, padded Markdown with a
  readable width, full repository ID on hover, sidebar footer kept clear
  of the floating Ko-fi button.
- Explorer errors render as a card with links home and to the FAQ; the
  empty action bar and Raw/Download buttons are hidden.
- Unknown error codes show the generic message instead of the raw
  ERRORS.<code> key.
- All app pages share one content column; New anonymization starts at
  the top instead of floating mid-screen.
- Status page: spaced action buttons, aligned status pill, no second
  Ko-fi embed under the support cards.
- Claim placeholders; consistent notebook option on new conferences.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-08 12:36:15 +02:00
Thomas Durieux fd0dd0adbd chore(deps): upgrade dependencies and remove production vulnerabilities 2026-10-08 10:21:00 +00:00
Thomas Durieux 9435a99b6c fix: prevent admin user crashes and match performance styling (#877) 2026-10-08 10:59:49 +01: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 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 a7e3826da7 fix: restore visible Ko-fi support across screen sizes 2026-10-07 15:02:53 +00:00
Thomas Durieux 282efdc16e fix: make dashboard UI consistent and compact on mobile 2026-10-07 14:54:49 +00:00
Thomas Durieux 45153886e3 fix: derive editor modes from shipped assets for ES2020 browsers 2026-10-07 12:33:44 +00:00
Thomas Durieux 64ae393200 fix: fall back to plain text for unsupported editor modes 2026-10-07 12:24:21 +00:00
Thomas Durieux e268bce1c7 fix: recover stale pull requests and refresh renamed repository caches 2026-10-07 11:58:56 +00:00
Thomas Durieux e6073941b9 fix: verify reconnects through supported GitHub routes and protect active jobs 2026-10-07 11:24:59 +00:00
Thomas Durieux a7ae790640 fix: recover renamed repositories by ID and hide archived actions 2026-10-07 11:10:30 +00:00
Thomas Durieux 3140ad3c45 fix: reconnect resources after GitHub App reinstall 2026-10-07 10:34:55 +00:00
Thomas Durieux b72631bbbe fix: preserve PDF.js rendering in asset builds 2026-10-07 10:34:33 +00:00
Thomas Durieux d28799f234 fix: reconnect anonymizations to recreated source repositories 2026-09-29 23:09:51 +00:00
Thomas Durieux 9c95cfb463 build: include refreshed dashboard assets 2026-09-27 06:17:04 +00:00
Thomas Durieux 7ada28f9e3 fix: report repository refresh failures and reject busy updates 2026-09-27 06:09:19 +00:00
Thomas Durieux 878dda1d37 fix: restore legacy hashbang repository links 2026-09-14 14:32:00 +00:00
Thomas Durieux 7cdf0f5e8d fix: distinguish repository publication and settings dates 2026-09-13 08:42:54 +00:00
tdurieux 99a50cad7b feat: unify GitHub sign-in and connect OAuth for gists 2026-09-10 18:20:56 +02:00
tdurieux 68d9c54fcf fix: keep GitHub access controls beside the source URL 2026-09-10 18:04:56 +02:00
tdurieux df81d7db56 style: restore mobile sign-in and compact access controls 2026-09-10 16:07:02 +02:00
tdurieux bcc7abc975 style: clarify GitHub connections and account navigation 2026-09-10 16:04:44 +02:00
tdurieux b80a15bb69 fix: guide existing accounts to legacy GitHub sign-in 2026-09-10 16:00:28 +02:00
Thomas Durieux a60ad6a921 feat: add read-only GitHub App access alongside OAuth 2026-09-09 22:08:12 +02:00
tdurieux a8a03de4bc fix: preserve saved auto-update settings and clarify file tree icons 2026-09-09 13:57:07 +02:00
tdurieux 8e85458b05 fix: unblock gist and pull request form submissions 2026-09-09 13:41:20 +02:00
tdurieux e68ab037eb perf: load document libraries only when needed 2026-09-09 13:28:44 +02:00
tdurieux 4a18f94631 refactor: migrate the frontend from AngularJS to Vue 3 2026-09-09 13:19:53 +02:00
tdurieuxandClaude Fable 5.1 88d8225f00 feat: rebuild the landing page around the product
The home page led with a text hero, a boxed stats strip, a numbered
how-it-works list, a trust card and three Bootstrap featurettes with
postage-stamp screenshots. It now shows the product first and stays
flat:

- Hero: copy on the left, the anonymize form in a browser frame on the
  right, one primary CTA plus a link to a real anonymized repository,
  and three reassurance points (free, read-only, expires).
- Proof and live stats collapse into hairline strips with no cards;
  the stat bars keep their daily-delta charts and the "+N today" line.
- Before/after example gets a section head and shows the actual XXXX-n
  masks, each labelled for screen readers.
- "What you get" is one large screenshot with three vertical tabs
  (Anonymize, Review, Manage) instead of three columns. Tabs are real
  buttons with tablist/tab/tabpanel roles, roving tabindex and arrow-key
  navigation; the description and link sit outside the button. Signed-out
  visitors are sent to sign in rather than to a dashboard that redirects.
- FAQ teaser with the three questions that come up most, linking into
  the FAQ anchors.
- Phone layout: tabs become a strip above the screenshot with the
  selected description below it, stats go two-up, panes stack, the CTA
  fills the width, and horizontal overflow is clipped so the hero bleed
  can never cause sideways scrolling.

Removes the dead how-it-works, trust, featurette and metrics styles and
the legacy mobile hero font overrides that fought the new sizes.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-09 12:21:02 +02:00
tdurieuxandClaude Fable 5.1 a02e83e48c feat: clarify the menus and rework the settings page
"Report an issue" in the navbar read like a way to report an anonymized
repository, and it opened a blank GitHub issue instead of the template
that asks reporters to confirm the issue is about the service. The user
menu offered "Default settings" and "Logout" with no hint of what lives
behind them, and the Claim page was unreachable from any menu.

The settings page never loaded quotas (the bars stayed in their striped
loading state), mixed serif checkbox labels with sans forms, used
Bootstrap alert colours, and described options in jargon ("Proxy mode",
"Github page", "Line of code").

- Navbar: "Report a bug" links to the issue template with a tooltip that
  names the service; the user menu shows who is signed in and lists
  Settings, Claim an anonymization, Report a bug, Source code, Sign out,
  each with a one-line hint. Icon links get aria-labels.
- Settings: quotas load through a shared quotaService (also used by the
  dashboard); sections match the side navigation, which now follows
  scrolling via a small paperScrollspy directive; copy explains each
  option; account card with Sign out; delete moved into a danger zone;
  Save shows Saving/Saved and the error alert uses the paper palette.
- Conferences list and detail: sort and status buttons show their state,
  hidden statuses appear as chips with a count line, Remove is a button
  behind a divider, dates spell the month, expiry column matches the
  dashboard, detail page gets an Edit button and plan/cost meta.
- New conference: validation errors only appear after a field is touched
  or the form submitted; pricing copy matches how price is computed.
- Status page: progress label no longer overlaps the details below it;
  "Report a bug" points at the template and says whom it is for.
- Claim: single rule, constrained width, explains when to use it.
- Anonymize: shorter placeholder, consistent Auto-update label.
- Mock server gains the endpoints these pages need and an ANON mode.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-08 20:55:22 +02:00
tdurieuxandClaude Fable 5.1 8e9b5b9a45 feat: make the dashboard readable at a glance
The dashboard showed the anonymize date under "Expired", a dash in the
Expires column for 54 of 60 rows, raw status codes such as
branch_not_found, and a chip reading "REMOVED" that actually meant
"removed items are hidden". Muted text sat at 3.5:1 contrast, keyboard
focus was invisible, numbers were left-aligned, and a legacy record
without an identifier rendered as an empty link to /pr/undefined/.

This rewrites the dashboard template and controller and tightens the
theme tokens:

- Status sub-line is labelled ("anonymized on Sep 6, 2026"); Expires
  shows Never, the date, or "Expired on <date>".
- Conference folded into the name cell as a tag; Views right-aligned;
  every column header is a keyboard-sortable button with aria-sort.
- Sort/Status buttons show their state; chips read "Hiding Removed";
  result count and Clear filters; empty state with a way out.
- Status filter covers Ready, In progress, Error, Expired, Removed.
  Stuck downloads say so; codes map to sentences; statuses to labels.
- Lists load in parallel and merge once behind a skeleton; broken
  records are flagged instead of linking nowhere.
- Actions menu: View, View page, Edit, Force update, divider, Remove,
  all as buttons rather than href="#" anchors.
- Theme: warm dark canvas, muted text >= 4.5:1 in both modes, semantic
  status tokens, 11/13/14/16px type scale, mono only for identifiers,
  6px/10px/pill radii, :focus-visible ring, quota bars in ink until a
  limit is near, unlimited shown as such.
- Mobile: no 9px text, filter row wraps in two lines, meta on one line.

Adds scripts/dev-mock.js to serve the dashboard with fixture data and
test/dashboard-ui.test.js covering the filters, template invariants and
token contrast.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-08 20:20:17 +02:00
tdurieux 9f00641529 fix: preserve the year in default conference end dates 2026-09-06 10:47:59 +02:00
tdurieux 681f72f75c fix: inject the translator for profile save errors 2026-09-06 10:47:53 +02:00
tdurieux 793e926463 fix: cancel status polling when the view is destroyed 2026-09-06 10:47:47 +02:00
tdurieux cac76ad7b6 fix: select the PR diff tab after content loads 2026-09-06 10:47:32 +02:00
tdurieux 5c6e5b6519 fix: anonymize PR comment authors and bodies in previews 2026-09-06 10:47:26 +02:00
tdurieux 66e4be0a0c fix: reload PR and Gist views when resource IDs change 2026-09-06 10:47:20 +02:00
tdurieux a6e17e18d9 fix: clear failed searches without racing subsequent requests 2026-09-06 10:47:09 +02:00
tdurieux a27f9f34d6 fix: reload explorer state when repository identity changes 2026-09-06 10:47:03 +02:00
tdurieux b6c0d3a8ed fix: ignore stale file responses after viewer navigation 2026-09-06 10:46:57 +02:00
tdurieux b2dfda1838 fix: sanitize Org previews before trusting rendered HTML 2026-09-06 10:46:44 +02:00
tdurieux cf58aa330b fix: handle prototype property names in repository trees 2026-09-06 10:46:38 +02:00