mark: A photo of Mark kneeling on top of the Taal Volcano in the Philippines. It was a long hike. (Default)
Mark Smith ([staff profile] mark) wrote in [site community profile] dw_maintenance2026-03-14 01:04 pm

Performing some traffic maintenance today

Happy Saturday!

I'm going to be doing a little maintenance today. It will likely cause a tiny interruption of service (specifically for www.dreamwidth.org) on the order of 2-3 minutes while some settings propagate. If you're on a journal page, that should still work throughout!

If it doesn't work, the rollback plan is pretty quick, I'm just toggling a setting on how traffic gets to the site. I'll update this post if something goes wrong, but don't anticipate any interruption to be longer than 10 minutes even in a rollback situation.

github: shadowy octopus with the head of a robot, emblazoned with the Dreamwidth swirl (Default)
github ([personal profile] github) wrote in [site community profile] changelog2026-03-13 11:32 am

[dreamwidth/dreamwidth] badf5e: Replace Apache with Starman behind Varnish on web22

Branch: refs/heads/main Home: https://github.com/dreamwidth/dreamwidth Commit: badf5eae7a944fed8e8381ee3dff2238633191c6 https://github.com/dreamwidth/dreamwidth/commit/badf5eae7a944fed8e8381ee3dff2238633191c6 Author: Mark Smith mark@dreamwidth.org Date: 2026-03-13 (Fri, 13 Mar 2026)

Changed paths: M etc/docker/web22/Dockerfile M etc/docker/web22/config/etc/varnish/dreamwidth.vcl M etc/docker/web22/scripts/startup-prod.sh

Log Message:


Replace Apache with Starman behind Varnish on web22

Varnish now forwards to Starman on port 8080 instead of Apache on port 80. This removes Apache from the web22 request path entirely, with Varnish's caching layer helping absorb health check traffic that previously queued behind busy Starman workers.

Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com

To unsubscribe from these emails, change your notification settings at https://github.com/dreamwidth/dreamwidth/settings/notifications

github: shadowy octopus with the head of a robot, emblazoned with the Dreamwidth swirl (Default)
github ([personal profile] github) wrote in [site community profile] changelog2026-03-12 10:11 pm

[dreamwidth/dreamwidth] 4b5bcf: Add SO_SNDTIMEO middleware to prevent Starman work...

Branch: refs/heads/main Home: https://github.com/dreamwidth/dreamwidth Commit: 4b5bcf8ad5cda83928da05e87508127b1fdd3a46 https://github.com/dreamwidth/dreamwidth/commit/4b5bcf8ad5cda83928da05e87508127b1fdd3a46 Author: Mark Smith mark@dreamwidth.org Date: 2026-03-12 (Thu, 12 Mar 2026)

Changed paths: M app.psgi A cgi-bin/Plack/Middleware/DW/WriteTimeout.pm A t/plack-write-timeout.t

Log Message:


Add SO_SNDTIMEO middleware to prevent Starman workers blocking on dead connections

When the ALB closes a connection before Starman finishes writing a response (e.g. due to idle timeout), the worker's write() blocks for 15-30 minutes waiting for TCP retransmits to exhaust. With 10 workers, this quickly deadlocks the entire server.

The new DW::WriteTimeout middleware sets SO_SNDTIMEO on the client socket via psgix.io so that blocked writes fail in seconds instead of minutes, freeing the worker to handle new requests.

Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com

To unsubscribe from these emails, change your notification settings at https://github.com/dreamwidth/dreamwidth/settings/notifications

github: shadowy octopus with the head of a robot, emblazoned with the Dreamwidth swirl (Default)
github ([personal profile] github) wrote in [site community profile] changelog2026-03-12 05:08 pm

[dreamwidth/dreamwidth] 64b109: Remove dead utf8convert links, handle invalid UTF-...

Branch: refs/heads/main Home: https://github.com/dreamwidth/dreamwidth Commit: 64b109f6fdd36a9130ef4a90057e71e07be5ec86 https://github.com/dreamwidth/dreamwidth/commit/64b109f6fdd36a9130ef4a90057e71e07be5ec86 Author: Mark Smith mark@dreamwidth.org Date: 2026-03-12 (Thu, 12 Mar 2026)

Changed paths: M bin/upgrading/deadphrases.dat M cgi-bin/DW/Controller/Create.pm M cgi-bin/DW/Controller/Manage/Profile.pm M cgi-bin/LJ/TextUtil.pm M t/plack-request.t M t/textutil.t M views/create/setup.tt M views/manage/profile.tt M views/manage/profile.tt.text

Log Message:


Remove dead utf8convert links, handle invalid UTF-8 in profiles (#3535)

  • Remove dead utf8convert links and handle invalid UTF-8 in profiles

The utf8convert page was removed years ago, but the profile editing and account creation pages still linked to it when a user's name or bio contained invalid UTF-8. This left users unable to edit those fields at all.

Instead of hiding fields behind a dead link, clean invalid UTF-8 byte sequences on load using a new LJ::clean_utf8() utility function. This strips broken sequences while preserving valid multi-byte characters, so the edit fields are always shown.

  • Add LJ::clean_utf8() to LJ::TextUtil
  • Clean name/bio on load in profile and create controllers
  • Remove text_in/is_utf8 conditionals from profile.tt and setup.tt
  • Remove name_absent/bio_absent hidden input fallback logic
  • Mark dead translation strings in deadphrases.dat
  • Add 16 regression tests for text_in, text_trim, and clean_utf8

Fixes #1894

Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com

  • Add tests for undef input and 4-byte UTF-8 (emoji) in clean_utf8

Cover edge cases: undef returns empty string, emoji (4-byte sequences) are preserved, and truncated 4-byte sequences are properly stripped while preserving valid preceding characters.

Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com

github: shadowy octopus with the head of a robot, emblazoned with the Dreamwidth swirl (Default)
github ([personal profile] github) wrote in [site community profile] changelog2026-03-12 04:31 pm

[dreamwidth/dreamwidth] 453fa0: Update dwtool log filtering to be more useful

Branch: refs/heads/main Home: https://github.com/dreamwidth/dreamwidth Commit: 453fa0142c344ae33d3d208067f110e33d7d48d5 https://github.com/dreamwidth/dreamwidth/commit/453fa0142c344ae33d3d208067f110e33d7d48d5 Author: Mark Smith mark@dreamwidth.org Date: 2026-03-12 (Thu, 12 Mar 2026)

Changed paths: M src/dwtool/internal/ui/app.go M src/dwtool/internal/ui/logs.go

Log Message:


Update dwtool log filtering to be more useful

To unsubscribe from these emails, change your notification settings at https://github.com/dreamwidth/dreamwidth/settings/notifications

github: shadowy octopus with the head of a robot, emblazoned with the Dreamwidth swirl (Default)
github ([personal profile] github) wrote in [site community profile] changelog2026-03-11 10:44 pm

[dreamwidth/dreamwidth] 11c403: Fix feed fetching on Ubuntu 22.04+ and reduce back...

Branch: refs/heads/main Home: https://github.com/dreamwidth/dreamwidth Commit: 11c40353c19cc0d986a932efe41668023117b3c6 https://github.com/dreamwidth/dreamwidth/commit/11c40353c19cc0d986a932efe41668023117b3c6 Author: Mark Smith mark@dreamwidth.org Date: 2026-03-11 (Wed, 11 Mar 2026)

Changed paths: M cgi-bin/LJ/SynSuck.pm M cgi-bin/ljlib.pl

Log Message:


Fix feed fetching on Ubuntu 22.04+ and reduce backoff aggressiveness

Force HTTP/1.1 via SSL_alpn_protocols in LJ::get_useragent. LWP does not support HTTP/2, but IO::Socket::SSL on 22.04+ advertises h2 via ALPN by default, causing servers like Tumblr to respond with HTTP/2 which LWP can't parse ("500 Server closed connection").

Also reduce exponential backoff cap from 30 days to 48 hours (max multiplier 2^4=16 instead of 2^7=128) and replace fixed 0-4 minute jitter with proportional jitter (up to 10% of delay) so retries stagger more effectively.

Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com

To unsubscribe from these emails, change your notification settings at https://github.com/dreamwidth/dreamwidth/settings/notifications

pauamma: Cartooney crab wearing hot pink and acid green facemask holding drink with straw (Default)
Res facta quae tamen fingi potuit ([personal profile] pauamma) wrote in [site community profile] dw_dev2026-03-11 01:39 am
Entry tags:

Question thread #149

It's time for another question thread!

The rules:

- You may ask any dev-related question you have in a comment. (It doesn't even need to be about Dreamwidth, although if it involves a language/library/framework/database Dreamwidth doesn't use, you will probably get answers pointing that out and suggesting a better place to ask.)
- You may also answer any question, using the guidelines given in To Answer, Or Not To Answer and in this comment thread.
pauamma: Cartooney crab wearing hot pink and acid green facemask holding drink with straw (Default)
Res facta quae tamen fingi potuit ([personal profile] pauamma) wrote in [site community profile] dw_volunteers2026-03-11 01:34 am
Entry tags:

Volunteer social thread #162

I helped do An Science.

How's everyone doing?
github: shadowy octopus with the head of a robot, emblazoned with the Dreamwidth swirl (Default)
github ([personal profile] github) wrote in [site community profile] changelog2026-03-10 05:42 pm

[dreamwidth/dreamwidth] a7c872: Build JS for ES6, not ES2020 (#3532)

Branch: refs/heads/main Home: https://github.com/dreamwidth/dreamwidth Commit: a7c872c2e9a9286da62970e298ad04106c860b90 https://github.com/dreamwidth/dreamwidth/commit/a7c872c2e9a9286da62970e298ad04106c860b90 Author: momijizukamori momijizukamori+bugzilla@gmail.com Date: 2026-03-10 (Tue, 10 Mar 2026)

Changed paths: M bin/build-static-modern.sh

Log Message:


Build JS for ES6, not ES2020 (#3532)

Co-authored-by: Cocoa momijizukamori@gmail.com

To unsubscribe from these emails, change your notification settings at https://github.com/dreamwidth/dreamwidth/settings/notifications

github: shadowy octopus with the head of a robot, emblazoned with the Dreamwidth swirl (Default)
github ([personal profile] github) wrote in [site community profile] changelog2026-03-09 09:32 pm

[dreamwidth/dreamwidth] 7e2581: Fix Plack print() dropping all arguments after the...

Branch: refs/heads/main Home: https://github.com/dreamwidth/dreamwidth Commit: 7e2581ef4c63b5fd84be3771093348bb9b65fded https://github.com/dreamwidth/dreamwidth/commit/7e2581ef4c63b5fd84be3771093348bb9b65fded Author: Mark Smith mark@dreamwidth.org Date: 2026-03-09 (Mon, 09 Mar 2026)

Changed paths: M cgi-bin/DW/Request/Plack.pm M t/plack-request.t

Log Message:


Fix Plack print() dropping all arguments after the first

DW::Request::Plack::print() only captured $_[1], silently discarding any subsequent arguments. This broke callers that pass multiple args — notably DW::Controller::Interface::Flat which uses $r->print($key, "\n", $val, "\n"), causing the flat client protocol to return keys with no newlines or values.

The Apache2 implementation correctly forwards all args via $self->{r}->print(@). Match that behavior by joining @ before appending to the response body.

Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com

To unsubscribe from these emails, change your notification settings at https://github.com/dreamwidth/dreamwidth/settings/notifications

denise: Image: Me, facing away from camera, on top of the Castel Sant'Angelo in Rome (Default)
Denise ([staff profile] denise) wrote in [site community profile] dw_volunteers2026-03-07 10:21 am

Periodic priv tidy

Noting here for posterity that I'm doing another of my "whenever I remember to do it" sweeps of all privs that have been granted, to remove privs from people who aren't currently actively volunteering with the thing that needs that priv. If I accidentally yanked something someone is using (the interface is hella janky and I would not be surprised if I do accidentally at least once), just holler and I'll add it back! Likewise, if you're still doing one thing but have privs for another thing you aren't using, you can let me know by replying here so I can remove those too.

We thank everyone for their time and help, and anyone who's had privs removed, you are welcome back any time you'd like! We operate on a "principle of least access" basis for privs for security reasons, but that doesn't mean we don't appreciate everything folks do, even if you're limited by that mythical land called "real life". ❤️
github: shadowy octopus with the head of a robot, emblazoned with the Dreamwidth swirl (Default)
github ([personal profile] github) wrote in [site community profile] changelog2026-03-03 09:11 pm

[dreamwidth/dreamwidth] d6710d: Add devtool TUI for devcontainer development workflow

Branch: refs/heads/main Home: https://github.com/dreamwidth/dreamwidth Commit: d6710db7d9e0dde93fc1156a03f8627ffe801625 https://github.com/dreamwidth/dreamwidth/commit/d6710db7d9e0dde93fc1156a03f8627ffe801625 Author: Mark Smith mark@dreamwidth.org Date: 2026-03-03 (Tue, 03 Mar 2026)

Changed paths: M .devcontainer/Dockerfile M .devcontainer/setup.sh A src/devtool/go.mod A src/devtool/go.sum A src/devtool/internal/proc/starman.go A src/devtool/internal/tailer/tailer.go A src/devtool/internal/ui/app.go A src/devtool/internal/ui/keys.go A src/devtool/internal/ui/logpane.go A src/devtool/internal/ui/status.go A src/devtool/internal/ui/styles.go A src/devtool/main.go

Log Message:


Add devtool TUI for devcontainer development workflow

Bubble Tea dashboard (same patterns as dwtool) that monitors and controls the dev environment from a single terminal:

  • Left pane: Starman status (PID, URL, uptime) and last command result
  • Right pane: access/error log tailing with scroll and follow mode
  • Actions: restart Starman (r), tidyall (t), compile test (c), build static (b)
  • Command output streams into the right pane in real time; esc/enter dismisses
  • Tab cycles focus between log panes, f toggles follow, ? shows help

The devcontainer Dockerfile installs Go and setup.sh builds devtool into /usr/local/bin on container creation so it's immediately available.

Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com

Commit: dd7814d468d7543549eab99779c4ca5062c69e66 https://github.com/dreamwidth/dreamwidth/commit/dd7814d468d7543549eab99779c4ca5062c69e66 Author: Mark Smith mark@dreamwidth.org Date: 2026-03-03 (Tue, 03 Mar 2026)

Changed paths: M .devcontainer/Dockerfile M .devcontainer/devcontainer.json M .devcontainer/setup.sh M src/devtool/internal/ui/app.go M src/devtool/internal/ui/keys.go

Log Message:


Persist MySQL across container rebuilds; add update-db and texttool to devtool

Use a Docker named volume for /var/lib/mysql so schema data survives container rebuilds. Pre-baked MySQL data is saved to /opt/dreamwidth-mysql/ in the image and seeded into empty volumes on first run.

Add keybindings for update-db (u) and texttool load (x) to the devtool TUI.

Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com

Commit: e882f36d7986d224b3e68ed8e403cd165eadde06 https://github.com/dreamwidth/dreamwidth/commit/e882f36d7986d224b3e68ed8e403cd165eadde06 Author: Mark Smith mark@dreamwidth.org Date: 2026-03-03 (Tue, 03 Mar 2026)

Changed paths: M .github/workflows/devcontainer-build.yml

Log Message:


Trigger devcontainer image rebuild on any .devcontainer/ change

Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com

Compare: https://github.com/dreamwidth/dreamwidth/compare/b34ffa15c1dd...e882f36d7986

To unsubscribe from these emails, change your notification settings at https://github.com/dreamwidth/dreamwidth/settings/notifications