Three copy fixes on the household front page, all of them corrections of fact rather than style.
Marreta tile — shortened, as asked. Now: "Paywall sledgehammer: hand it an article URL and it will attempt to smash its paywall. Note: does not work on all sites." The VPN/headless-browser mechanics and the "hard paywalls still win" lecture came out; the note carries the same warning in one clause.
Jellyfin tile + every login instruction — corrected. The page told people Jellyfin keeps its own account and "will not take the family password". That is wrong: Jellyfin authenticates against Authentik over LDAP. Live state behind the change:
Users.AuthenticationProviderId for alex is Jellyfin.Plugin.LDAP_Auth.LdapAuthenticationProviderPlugin — the LDAP door is the door.
The service-account bind plus the plugin's own (memberOf=cn=jellyfin_users,…) search succeed against the running outpost, so the household accounts in that group sign in with their franksdank.cloud username and password.
akadmin joined jellyfin_users in #143, so Frank's own identity works there too.
Six places repeated the wrong claim, not just the tile: the "needs its own login?" table, the "one account opens" list, the "three doors keep their own accounts" warning, the Jellyfin Getting in steps, its If it misbehaves bullet, and the FAQ item. They now say the truth and gained the one failure mode that actually happens — a password that works on the homepage but is refused by Jellyfin means the name is not on the library-access list yet, which is a one-line fix on Frank's side. Plex and the e-book door stay the two genuinely separate accounts.
Model page — the TTS models, added. A new And the voices block in #models, same shape as the existing model table. Facts from the live stack, not from memory: /health on :7772 answers backend=omni-http with five voices (dr.kern, garrickhagon, jeffhays, vaati, wilwheaton), both units active, and the engine's own argv is qwentts.cpp's tts-server with qwen-talker-1.7b-base-Q4_K_M.gguf + qwen-tokenizer-12hz-Q8_0.gguf on --device Vulkan0. Readers get the distinction that matters to them: the cloned voices come from the server, while the AI chat's speaker button is Kokoro running in their own browser with about two dozen preset names — which is why the two lists never match. Programmers get the endpoint and /v1/audio/voices, so the voice list on the page can go stale without ever becoming a lie.
Checks
./tests/run.sh — ALL TESTS PASSED, 841 assertions.
Browser census against an isolated copy of the homepage tree (fake status.json, one model forced down): both tiles render the new copy verbatim, #models shows two tables with rows frank-dragoon / frank-archon / frank-zealot / frank-tts / Kokoro, zero broken images on either page, and the six retired phrases are absent from the rendered text.
Screenshot of the rendered The models section reviewed for layout — both tables and the bullets sit inside the page's column.
Deliberately not done
No vault page changed: nothing elsewhere repeated the "Jellyfin has its own login" claim (grepped), and the operational facts already have one owner in Dankserver/Jellyfin.md.
The TTS cards (frank-tts, open-notebook) stay category: admin — this adds explanation to the shared model page, not a new door for the household.
## What
Three copy fixes on the household front page, all of them corrections of fact rather than style.
**Marreta tile — shortened, as asked.** Now: *"Paywall sledgehammer: hand it an article URL and it will attempt to smash its paywall. Note: does not work on all sites."* The VPN/headless-browser mechanics and the "hard paywalls still win" lecture came out; the note carries the same warning in one clause.
**Jellyfin tile + every login instruction — corrected.** The page told people Jellyfin keeps its own account and *"will not take the family password"*. That is wrong: Jellyfin authenticates against Authentik over LDAP. Live state behind the change:
- `Users.AuthenticationProviderId` for `alex` is `Jellyfin.Plugin.LDAP_Auth.LdapAuthenticationProviderPlugin` — the LDAP door is the door.
- The service-account bind plus the plugin's own `(memberOf=cn=jellyfin_users,…)` search succeed against the running outpost, so the household accounts in that group sign in with their **franksdank.cloud username and password**.
- `akadmin` joined `jellyfin_users` in #143, so Frank's own identity works there too.
Six places repeated the wrong claim, not just the tile: the "needs its own login?" table, the "one account opens" list, the "three doors keep their own accounts" warning, the Jellyfin *Getting in* steps, its *If it misbehaves* bullet, and the FAQ item. They now say the truth and gained the one failure mode that actually happens — a password that works on the homepage but is refused by Jellyfin means the name is not on the library-access list yet, which is a one-line fix on Frank's side. Plex and the e-book door stay the two genuinely separate accounts.
**Model page — the TTS models, added.** A new *And the voices* block in `#models`, same shape as the existing model table. Facts from the live stack, not from memory: `/health` on `:7772` answers `backend=omni-http` with five voices (`dr.kern`, `garrickhagon`, `jeffhays`, `vaati`, `wilwheaton`), both units `active`, and the engine's own argv is `qwentts.cpp`'s `tts-server` with `qwen-talker-1.7b-base-Q4_K_M.gguf` + `qwen-tokenizer-12hz-Q8_0.gguf` on `--device Vulkan0`. Readers get the distinction that matters to them: the cloned voices come from the server, while the AI chat's speaker button is **Kokoro running in their own browser** with about two dozen preset names — which is why the two lists never match. Programmers get the endpoint and `/v1/audio/voices`, so the voice list on the page can go stale without ever becoming a lie.
## Checks
- `./tests/run.sh` — **ALL TESTS PASSED**, 841 assertions.
- Browser census against an isolated copy of the homepage tree (fake `status.json`, one model forced `down`): both tiles render the new copy verbatim, `#models` shows two tables with rows `frank-dragoon / frank-archon / frank-zealot / frank-tts / Kokoro`, zero broken images on either page, and the six retired phrases are absent from the rendered text.
- Screenshot of the rendered *The models* section reviewed for layout — both tables and the bullets sit inside the page's column.
## Deliberately not done
- No vault page changed: nothing elsewhere repeated the "Jellyfin has its own login" claim (grepped), and the operational facts already have one owner in `Dankserver/Jellyfin.md`.
- The TTS cards (`frank-tts`, `open-notebook`) stay `category: admin` — this adds explanation to the shared model page, not a new door for the household.
---
cwd: /home/blank/.omp/wt/wt-20261104-121037-6d1fc1f · session: 01a1a833-a2e6-76b6-8a67-d54ca993dcca
Jellyfin authenticates against Authentik over LDAP, so telling the household
that it "will not take the family password" sent people to the wrong door. The
tile's provider id (alex -> LdapAuthenticationProviderPlugin) and a live bind +
memberOf search against the running outpost are the proof; six places repeated
the claim, and all six now say to sign in with the franksdank.cloud username and
password. Added the failure mode that actually happens: a password that works on
the homepage but is refused here means the name is not in jellyfin_users yet.
Plex and the e-book door stay the two genuinely separate accounts.
Marreta's tile loses its VPN/headless-browser mechanics and keeps one honest
clause: "does not work on all sites".
The models page gains the TTS pair the household keeps meeting: frank-tts
(Qwen3 talker + 12 Hz codec on the iGPU, five cloned voices, live list at
/v1/audio/voices) and Kokoro (82M, stock presets, runs in the user's own
browser) - which is why the AI chat's speaker list never matches the server's.
Verified in a browser against an isolated copy of the tree: both tiles render
the new copy, #models carries both tables, zero broken images, and every
retired phrase is absent from the rendered text. ./tests/run.sh: 841 pass.
dank
merged commit 51007ac604 into main2026-11-04 12:56:45 -08:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
What
Three copy fixes on the household front page, all of them corrections of fact rather than style.
Marreta tile — shortened, as asked. Now: "Paywall sledgehammer: hand it an article URL and it will attempt to smash its paywall. Note: does not work on all sites." The VPN/headless-browser mechanics and the "hard paywalls still win" lecture came out; the note carries the same warning in one clause.
Jellyfin tile + every login instruction — corrected. The page told people Jellyfin keeps its own account and "will not take the family password". That is wrong: Jellyfin authenticates against Authentik over LDAP. Live state behind the change:
Users.AuthenticationProviderIdforalexisJellyfin.Plugin.LDAP_Auth.LdapAuthenticationProviderPlugin— the LDAP door is the door.(memberOf=cn=jellyfin_users,…)search succeed against the running outpost, so the household accounts in that group sign in with their franksdank.cloud username and password.akadminjoinedjellyfin_usersin #143, so Frank's own identity works there too.Six places repeated the wrong claim, not just the tile: the "needs its own login?" table, the "one account opens" list, the "three doors keep their own accounts" warning, the Jellyfin Getting in steps, its If it misbehaves bullet, and the FAQ item. They now say the truth and gained the one failure mode that actually happens — a password that works on the homepage but is refused by Jellyfin means the name is not on the library-access list yet, which is a one-line fix on Frank's side. Plex and the e-book door stay the two genuinely separate accounts.
Model page — the TTS models, added. A new And the voices block in
#models, same shape as the existing model table. Facts from the live stack, not from memory:/healthon:7772answersbackend=omni-httpwith five voices (dr.kern,garrickhagon,jeffhays,vaati,wilwheaton), both unitsactive, and the engine's own argv isqwentts.cpp'stts-serverwithqwen-talker-1.7b-base-Q4_K_M.gguf+qwen-tokenizer-12hz-Q8_0.ggufon--device Vulkan0. Readers get the distinction that matters to them: the cloned voices come from the server, while the AI chat's speaker button is Kokoro running in their own browser with about two dozen preset names — which is why the two lists never match. Programmers get the endpoint and/v1/audio/voices, so the voice list on the page can go stale without ever becoming a lie.Checks
./tests/run.sh— ALL TESTS PASSED, 841 assertions.status.json, one model forceddown): both tiles render the new copy verbatim,#modelsshows two tables with rowsfrank-dragoon / frank-archon / frank-zealot / frank-tts / Kokoro, zero broken images on either page, and the six retired phrases are absent from the rendered text.Deliberately not done
Dankserver/Jellyfin.md.frank-tts,open-notebook) staycategory: admin— this adds explanation to the shared model page, not a new door for the household.cwd: /home/blank/.omp/wt/wt-20261104-121037-6d1fc1f · session: 01a1a833-a2e6-76b6-8a67-d54ca993dcca