This website requires JavaScript.
d1704a5519
revert: the Modal Escape guard for a fullscreen own-content video
peter
2026-10-07 23:59:32 +02:00
121ebeebc1
fix(ui): an Escape while a dialog's own video is fullscreen does not close the dialog
peter
2026-10-07 23:57:04 +02:00
ee5290ba01
refactor(plex): the item progress body extends the shared checkpoint
peter
2026-10-07 23:16:38 +02:00
dd6a666ad1
test(player): hold the session stop and the kept-point rule to the server
peter
2026-10-07 23:16:38 +02:00
392099770a
fix(plex): an episode Plex has no number for is named by its title alone
peter
2026-10-07 23:16:38 +02:00
2aa3ac6e85
fix(player): the browser Back peels each layer over the Plex video, one press at a time
peter
2026-10-07 23:16:38 +02:00
891dc628f3
fix(library): a listing poll can no longer put back an older resume point
peter
2026-10-07 23:16:25 +02:00
0a35f2a3b1
fix(player): a stale session answer can no longer stop the playback that won
peter
2026-10-07 23:16:25 +02:00
d25a132495
fix(ui): a dialog whose own video goes fullscreen no longer crashes the app
peter
2026-10-07 23:16:25 +02:00
61d3a1a189
chore(db): drop plex_items.markers, a column nothing writes or reads
peter
2026-10-07 02:23:37 +02:00
d482a5e8e2
chore(dev): the dev proxy answers a failed connect with 502, as the prod proxy does
peter
2026-10-07 02:23:37 +02:00
2064373ac2
fix(history): a step back never leaves the app for an older page
peter
2026-10-07 02:23:37 +02:00
0cda5b6dd4
fix(player): only the credits that end an item move on to the next one
peter
2026-10-07 01:48:10 +02:00
f3c94641a7
fix(player): a library item played from the start keeps its point
peter
2026-10-07 00:36:28 +02:00
59b27467ab
feat(player): the OS media controls, the basic keys and resume for the library and shared-link players
peter
2026-10-06 23:55:41 +02:00
02feaa9a1c
refactor(player): one panel at a time over the Plex video, and one Back cascade
peter
2026-10-06 23:04:35 +02:00
c1058f1d5a
refactor(player): the Plex session machine is a tested engine, one request per item in flight
peter
2026-10-06 22:31:48 +02:00
23f16b69df
release: 0.101.0 (improvement/e36-delivery)
v0.101.0
peter
2026-10-06 21:14:35 +02:00
c813814c3c
chore(release): 0.101.0
peter
2026-10-06 21:04:19 +02:00
ed6facb703
fix(downloads): a conversion's commit, a stopped upload, the fast join and a clip's copy hold up
peter
2026-10-06 21:02:07 +02:00
d44d8d6dda
fix(gate): knip sees the watch entry, the build must emit watch.html, and two hand copies are held
peter
2026-10-06 03:19:33 +02:00
b20e9a3947
fix(player): the stacked layout's minimum width no longer clips the wide one
peter
2026-10-06 03:19:33 +02:00
6073a006b8
fix(downloads): an upload's cancel, progress, failure and notice speak of an upload
peter
2026-10-06 03:19:32 +02:00
dba4758c59
fix(watch): a link whose video is being made again says so, in the page's language
peter
2026-10-06 03:19:32 +02:00
68cfc7e25d
fix(downloads): an upload's conversion is guarded, counted, named and cleaned up
peter
2026-10-06 03:19:32 +02:00
00886d92fe
fix(player): the YouTube player keeps its size on a short window and when maximised
peter
2026-10-05 23:40:13 +02:00
e7d2eb8cf6
test(downloads): what a share link serves passes the phone-safe rule
peter
2026-10-05 21:05:22 +02:00
e886890d6e
perf(watch): a shared link loads the player, not the app
peter
2026-10-05 20:51:39 +02:00
5561d9a379
feat(downloads): every ready file is phone-safe — uploads and clips too
peter
2026-10-05 03:16:27 +02:00
2768ab5bdd
fix(gate): the plan-code guard catches decision codes, and the purge takes them
peter
2026-10-05 03:16:13 +02:00
8c79590165
release: 0.100.0 (improvement/e35-tooling)
v0.100.0
peter
2026-10-05 01:42:39 +02:00
eef3ac9c5c
chore(release): 0.100.0
peter
2026-10-05 01:14:41 +02:00
4ba7c966d7
fix(nav): the dead-page rewrite does not restore a spent focus stamp
peter
2026-10-05 01:13:06 +02:00
513dd8175a
fix(auth): becoming admin through ADMIN_EMAILS drops the password, on any sign-in
peter
2026-10-05 01:13:06 +02:00
c4298b0a73
docs(comments): no WebSocket and no CI in the present tense
peter
2026-10-05 00:50:36 +02:00
5ca2a0e6ee
fix(gate): the plan-code guard catches bare sprint and phase codes, and the purge takes the P ones
peter
2026-10-05 00:50:36 +02:00
5257d57196
fix(nav): Back onto a removed page also rewrites the entry to the feed
peter
2026-10-05 00:50:35 +02:00
58ad95263c
fix(auth): a Google sign-in that makes an account admin drops a password nobody proved
peter
2026-10-05 00:50:35 +02:00
96ad1ef306
docs(comments): correct comments the cuts left stale
peter
2026-10-05 00:12:23 +02:00
d1bbe4524c
fix(gate): close the gaps in the plan-code guard, the button lists and the tooling
peter
2026-10-05 00:12:22 +02:00
eecc195b7e
fix(migrations): dropping the demo also takes its reset job's interval-change audit rows
peter
2026-10-05 00:12:22 +02:00
2f901ad643
fix(nav): Back onto a page this build no longer has lands on the feed
peter
2026-10-05 00:12:22 +02:00
1f357b0c21
fix(auth): Google adoption revokes the password of a never-activated account
peter
2026-10-05 00:12:22 +02:00
fb962682eb
chore(blame): skip the plan-code purge in git blame
peter
2026-10-04 23:03:27 +02:00
4e71723a07
test(comments): no plan code lands in the code again
peter
2026-10-04 23:03:18 +02:00
4aaaaa7860
chore(comments): drop epic, sprint and review-round ids from the code
peter
2026-10-04 23:03:17 +02:00
c73d8be094
docs(welcome): retake the landing screenshots on today's UI
peter
2026-10-04 22:25:14 +02:00
30545d0d88
fix(gate): --brief leaves the test database's own log out of an excerpt
peter
2026-10-04 22:18:09 +02:00
ac702192c9
docs(claude): drop the canonical-pattern rows a lint rule already holds
peter
2026-10-04 22:12:02 +02:00
24c47d12bd
refactor(backend): select() and an inline now everywhere, held by a test
peter
2026-10-04 22:12:02 +02:00
ab76166878
docs(gates): basedpyright keeps new-errors-only, without a burn-down mandate
peter
2026-10-04 22:09:53 +02:00
a42f346a32
test(gates): the snapshot holds a config per scope, not a path per file
peter
2026-10-04 22:09:38 +02:00
f2fe0fc0df
build(gate)!: coverage leaves the gate and runs on demand
peter
2026-10-04 22:07:00 +02:00
ca707fd390
build(eslint): focus-safe-disabled folds into button-primitive
peter
2026-10-04 22:06:21 +02:00
2eb20ca227
build(eslint): one px-frozen box selector for box utilities and grid minimums
peter
2026-10-04 22:03:19 +02:00
adaa7dc23c
build(eslint): drop the Z_RAW and EDGED_LABEL selectors
peter
2026-10-04 22:00:56 +02:00
91f6a77fa3
build(eslint): drop the three React Compiler rules that cannot fire on 7.1.1
peter
2026-10-04 21:59:55 +02:00
36653886d5
build(frontend)!: knip drops --production; plain knip stays
peter
2026-10-04 21:59:27 +02:00
7e681e112e
test(gates)!: the size/complexity ratchet leaves the gate; audit_metrics reports it
peter
2026-10-04 21:58:26 +02:00
3642397f63
fix(tooling): audit_metrics counts the demo footprint by the banned word
peter
2026-10-04 21:50:48 +02:00
6d8b7be6d8
feat!: remove the shared demo account
peter
2026-10-04 21:50:48 +02:00
cca3315836
feat!: remove direct messaging (chat)
peter
2026-10-04 21:02:03 +02:00
7f08c510bf
feat(auth)!: remove the public access-request endpoint
peter
2026-10-04 21:02:03 +02:00
a499f00209
refactor(compose): localdev is an override of docker-compose.yml, not a copy
peter
2026-10-04 20:09:58 +02:00
c2bf8fb7f6
feat(tooling): audit_metrics.py — size, complexity, gate weight and a speed baseline
peter
2026-10-04 20:09:58 +02:00
11d35910fd
feat(tooling): lint-changed.sh — fast lint lanes on the uncommitted files, usable as a Stop hook
peter
2026-10-04 20:09:58 +02:00
27f48b7a8b
feat(gate): check.sh --brief prints a red lane's first error lines only
peter
2026-10-04 20:09:58 +02:00
bc856ab2af
test: warm cold dynamic imports before the timed cases
peter
2026-10-04 20:09:58 +02:00
0dfb4a984b
release: 0.99.2 (bug/b1-e34-defects)
v0.99.2
peter
2026-10-04 18:28:53 +02:00
5bcd1d8d8a
chore(release): 0.99.2
peter
2026-10-04 18:19:37 +02:00
f49789665e
fix(i18n): label the history cleanup's quota_reaped result
peter
2026-10-04 18:03:19 +02:00
0e077b84c8
fix(search): the live-search tooltip says what a search costs
peter
2026-10-04 17:53:19 +02:00
ce8ccfc3c0
fix(quota): prune quota history past a retention window
peter
2026-10-04 17:53:19 +02:00
33dec56e45
fix(worker): obey the stored concurrency and log level, live
peter
2026-10-04 17:53:19 +02:00
2a699e26ba
release: 0.99.1 (improvement/drop-ci)
v0.99.1
peter
2026-10-04 06:45:48 +02:00
13c8c05661
chore(release): 0.99.1
peter
2026-10-04 06:36:06 +02:00
cc414de952
build: the gate is scripts/check.sh, and CI goes
peter
2026-10-04 06:20:58 +02:00
0528b35f2d
release: 0.99.0 (feature/e32-gate-integrity)
v0.99.0
peter
2026-10-04 05:19:05 +02:00
cb46774851
chore(release): 0.99.0
peter
2026-10-04 05:09:33 +02:00
f1cc6ce5dc
fix: the reconcile scan's return type names its settled sections; the composer stays at its size ceiling
peter
2026-10-04 05:04:14 +02:00
4efe799eda
fix(ui): the issue composer opens on its title, not on the Edit switch
peter
2026-10-04 04:56:57 +02:00
40b27f2982
fix(sync): a channel with no uploads backfills as done, not as a failure
peter
2026-10-04 04:51:25 +02:00
0314c4cce2
fix(plex): the watch reconcile settles each library on its own walk
peter
2026-10-04 04:49:55 +02:00
182ec31120
test(gates): hold the lint and lane configs to a committed snapshot
peter
2026-10-04 04:47:10 +02:00
12a39f5291
fix(plex): the watch reconcile clears only what it walked, and doubts a mirrored 0
peter
2026-10-04 04:16:52 +02:00
79704b0001
fix(youtube): "this playlist no longer exists" only where the user picked that list
peter
2026-10-04 04:16:52 +02:00
4191189b4c
fix(ui): a late form takes a dialog's focus once, even if it arrived elsewhere
peter
2026-10-04 04:16:52 +02:00
7dbda60815
fix(ui): an undo in the same tick as a rebase steps back to a rebased snapshot
peter
2026-10-04 04:16:52 +02:00
d1df76e8e5
test(gates): the complexity ratchet names a function by what it is bound to
peter
2026-10-04 04:16:52 +02:00
3f6a9efd57
test(gates): the register test parses ruff's TOML and holds pytest.ini line by line
peter
2026-10-04 04:16:52 +02:00
64e8f1da3d
fix(lint): E402 is on — the ignore meant for main.py had let 11 late imports in elsewhere
peter
2026-10-04 03:14:24 +02:00
a1224e9a8c
test(gates): the repo-root scripts are linted and format-checked
peter
2026-10-04 03:00:49 +02:00
da4b19a39a
docs(lint): the config comments say which rules can report, and count what is suppressed
peter
2026-10-04 03:00:49 +02:00
5a74cf86b7
test(api): the wire-key checks send every filter field, and tsc says when one is new
peter
2026-10-04 02:57:09 +02:00
e432dc2780
test(gates): the complexity ratchet holds each function by name, and its scope is registered
peter
2026-10-04 02:55:07 +02:00
3741d1a46d
fix(playlists): a list reopened from the cache keeps its rows
peter
2026-10-04 02:48:10 +02:00
98ec1abf25
test(gates): the register test reads every config block, option and key, not eight samples and severities
peter
2026-10-04 02:37:33 +02:00
e5b155ada9
refactor(ui): reuse the store, media-query and deleted-tag rules the review found rebuilt, and name a loading pick
peter
2026-10-04 02:29:03 +02:00
e09d613b04
fix(ui): a reviewed log takes the focus back once, and a dialog's focus survives a Retry
peter
2026-10-04 02:29:03 +02:00
38943fa93e
fix(maintenance): one clock per run, so a video phase 1 recovers is not fetched again in phase 2
peter
2026-10-04 02:14:04 +02:00