tdurieux and Claude 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
74bd6bb779
fix: restore scripts and video playback on project pages
2026-09-08 18:01:32 +02:00
Thomas Durieux
f6cbdd97bc
Merge pull request #806 from tdurieux/t3code/fix-dependency-security-migration
...
fix: clear dependency vulnerabilities without overrides
2026-09-08 04:36:51 -10:00
tdurieux
5fdec8d6f9
fix: keep dependency downloads portable across registries
2026-09-08 16:34:40 +02:00
tdurieux
da530d645f
fix: clear dependency vulnerabilities without overrides
2026-09-08 16:31:59 +02:00
Thomas Durieux
6ff107abad
Merge pull request #805 from tdurieux/codex/express-5-migration
...
chore: upgrade Express to 5.2.1
2026-09-08 04:25:51 -10:00
tdurieux
8ad0ec65f0
chore: upgrade Express to 5.2.1
2026-09-08 16:22:23 +02:00
Thomas Durieux
a05f42ad9f
Merge pull request #801 from tdurieux/t3code/archive-legacy-spaced-ids
...
fix: archive legacy repository IDs containing spaces
2026-09-08 02:46:38 -10:00
Thomas Durieux
80969c1826
Merge pull request #804 from tdurieux/t3code/parallel-credential-migration
...
perf: parallelize credential migration owner analysis
2026-09-08 02:29:36 -10:00
tdurieux
c7eed1a6b4
perf: parallelize credential migration owner analysis
2026-09-08 14:28:46 +02:00
Thomas Durieux
1449aecf0e
Merge pull request #802 from tdurieux/t3code/recover-owner-credentials
...
fix: recover conflicting credentials by verifying the recorded owner
2026-09-08 02:21:57 -10:00
tdurieux
0c808a8675
fix: recover conflicting credentials by verifying the recorded owner
2026-09-08 14:21:16 +02:00
tdurieux
90f14b19b7
fix: archive legacy repository IDs containing spaces
2026-09-08 14:08:48 +02:00
Thomas Durieux
530e388e46
fix: archive ownerless repositories without assigning ownership ( #800 )
2026-09-08 14:03:09 +02:00
Thomas Durieux
8de4a536cc
fix: recover legacy repository owners through GitHub ( #799 )
2026-09-08 13:39:39 +02:00
Thomas Durieux
3fb376dd53
fix: encrypt stored GitHub credentials ( #797 )
2026-09-08 13:04:28 +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
tdurieux
d793d2c7c6
fix: bind file tree names without compiling repository content
2026-09-06 10:46:32 +02:00
tdurieux
b070d7e281
fix: evaluate document creation timestamps per instance
2026-09-06 09:19:33 +02:00
tdurieux
f312105ec3
fix: fetch private pull request diffs through authenticated API
2026-09-06 09:19:28 +02:00
tdurieux
4aecc1d92f
fix: fetch complete content for truncated Gist files
2026-09-06 09:19:23 +02:00
tdurieux
b1cb9093bb
fix: close streaming responses after upstream errors
2026-09-06 09:19:18 +02:00
tdurieux
38a09188ad
fix: expire conference repositories before completing expiration
2026-09-06 09:18:42 +02:00
tdurieux
6777537d44
fix: restrict S3 deletion to exact keys and descendants
2026-09-06 09:18:37 +02:00
tdurieux
5e84bfaa5b
fix: surface partial S3 object deletion failures
2026-09-06 09:18:32 +02:00
tdurieux
4643e9f838
fix: preserve and anonymize truncated folder warnings
2026-09-06 09:18:28 +02:00
tdurieux
8d2921b406
fix: respect backpressure when resolving Git LFS pointers
2026-09-06 09:18:24 +02:00
tdurieux
9c18526d52
fix: decode and validate webview file paths
2026-09-06 09:17:56 +02:00
tdurieux
67eb83674c
fix: sandbox repository webview documents
2026-09-06 09:17:52 +02:00
tdurieux
3e275311f1
fix: derive file ETags from current source content
2026-09-06 09:17:47 +02:00
tdurieux
c14a548cb9
fix: enforce content policies using original file types
2026-09-06 09:17:42 +02:00
tdurieux
7210db2b61
fix: catch authentication failures in async route handlers
2026-09-06 09:17:37 +02:00
tdurieux
11eb160d2b
fix: prevent stale downloads from reviving removed repositories
2026-09-06 09:17:33 +02:00
tdurieux
2af66cd1b6
fix: authorize coauthors by stable GitHub identity
2026-09-06 09:17:01 +02:00
tdurieux
8ec656c201
fix: authorize access before returning cached GitHub metadata
2026-09-06 09:16:57 +02:00
tdurieux
a401bb21d6
fix: reject OAuth linking across different GitHub identities
2026-09-06 09:16:53 +02:00
tdurieux
50d606d0c1
fix: bound regex execution during anonymization
2026-09-06 09:16:48 +02:00
tdurieux
b3f86513dd
fix: prevent anonymization leaks across stream boundaries
2026-09-06 09:16:44 +02:00
tdurieux
900516f225
fix: omit source content length for rewritten file responses
2026-09-06 09:16:23 +02:00
tdurieux
12c07641e0
fix: persist and recover repository removals for banned owners
2026-09-06 09:16:20 +02:00