github: shadowy octopus with the head of a robot, emblazoned with the Dreamwidth swirl (Default)
[personal profile] github posting in [site community profile] changelog

Branch: refs/heads/main Home: https://github.com/dreamwidth/dreamwidth Commit: d8f13b74cf96b5c3e1fe4d10f27131360967f4db https://github.com/dreamwidth/dreamwidth/commit/d8f13b74cf96b5c3e1fe4d10f27131360967f4db Author: Mark Smith mark@dreamwidth.org Date: 2026-02-08 (Sun, 08 Feb 2026)

Changed paths: R .github/workflows/tasks/worker-send-email-ses-service.json M .github/workflows/worker-deploy.yml M .github/workflows/worker22-deploy.yml M config/workers.json

Log Message:


Remove dead send-email-ses worker — replaced by dw-send-email

The send-email-ses worker script no longer exists in the repo; it was superseded by dw-send-email (DW::TaskQueue/SQS). Remove the orphaned ECS task definition, deploy workflow entries, and workers.json config.

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)
[personal profile] github posting in [site community profile] changelog

Branch: refs/heads/main Home: https://github.com/dreamwidth/dreamwidth Commit: c6233b86ee47b0048612b74219d0424511ba8fd8 https://github.com/dreamwidth/dreamwidth/commit/c6233b86ee47b0048612b74219d0424511ba8fd8 Author: Mark Smith mark@dreamwidth.org Date: 2026-02-08 (Sun, 08 Feb 2026)

Changed paths: M cgi-bin/Plack/Middleware/DW/SubdomainFunction.pm

Log Message:


Handle __setdomsess in Plack SubdomainFunction middleware

Apache handles /setdomsess on subdomains (shop, journals) in its translation handler to set domain session cookies and redirect. The Plack middleware was missing this, causing 404s on shop.dreamwidth.org when the login flow bounced through /setdomsess.

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)
[personal profile] github posting in [site community profile] changelog

Branch: refs/heads/main Home: https://github.com/dreamwidth/dreamwidth Commit: 1d45aae01c9a5a6f56772cbd670115a16ad71c7c https://github.com/dreamwidth/dreamwidth/commit/1d45aae01c9a5a6f56772cbd670115a16ad71c7c Author: Mark Smith mark@dreamwidth.org Date: 2026-02-08 (Sun, 08 Feb 2026)

Changed paths: R .github/workflows/shop-build.yml R .github/workflows/shop-deploy.yml M .github/workflows/web22-deploy.yml R etc/docker/shop/Dockerfile R etc/docker/shop/config/.dir_scope R etc/docker/shop/config/dreamwidth-dev.conf R etc/docker/shop/config/dreamwidth-prod.conf R etc/docker/shop/config/etc/apache2/apache2.conf R etc/docker/shop/config/etc/apache2/conf-available/charset.conf R etc/docker/shop/config/etc/apache2/conf-available/localized-error-pages.conf R etc/docker/shop/config/etc/apache2/conf-available/other-vhosts-access-log.conf R etc/docker/shop/config/etc/apache2/conf-available/security.conf R etc/docker/shop/config/etc/apache2/conf-available/serve-cgi-bin.conf R etc/docker/shop/config/etc/apache2/conf-enabled/security.conf R etc/docker/shop/config/etc/apache2/envvars R etc/docker/shop/config/etc/apache2/magic R etc/docker/shop/config/etc/apache2/mods-available/access_compat.load R etc/docker/shop/config/etc/apache2/mods-available/actions.conf R etc/docker/shop/config/etc/apache2/mods-available/actions.load R etc/docker/shop/config/etc/apache2/mods-available/alias.conf R etc/docker/shop/config/etc/apache2/mods-available/alias.load R etc/docker/shop/config/etc/apache2/mods-available/allowmethods.load R etc/docker/shop/config/etc/apache2/mods-available/apreq2.load R etc/docker/shop/config/etc/apache2/mods-available/asis.load R etc/docker/shop/config/etc/apache2/mods-available/auth_basic.load R etc/docker/shop/config/etc/apache2/mods-available/auth_digest.load R etc/docker/shop/config/etc/apache2/mods-available/auth_form.load R etc/docker/shop/config/etc/apache2/mods-available/authn_anon.load R etc/docker/shop/config/etc/apache2/mods-available/authn_core.load R etc/docker/shop/config/etc/apache2/mods-available/authn_dbd.load R etc/docker/shop/config/etc/apache2/mods-available/authn_dbm.load R etc/docker/shop/config/etc/apache2/mods-available/authn_file.load R etc/docker/shop/config/etc/apache2/mods-available/authn_socache.load R etc/docker/shop/config/etc/apache2/mods-available/authnz_fcgi.load R etc/docker/shop/config/etc/apache2/mods-available/authnz_ldap.load R etc/docker/shop/config/etc/apache2/mods-available/authz_core.load R etc/docker/shop/config/etc/apache2/mods-available/authz_dbd.load R etc/docker/shop/config/etc/apache2/mods-available/authz_dbm.load R etc/docker/shop/config/etc/apache2/mods-available/authz_groupfile.load R etc/docker/shop/config/etc/apache2/mods-available/authz_host.load R etc/docker/shop/config/etc/apache2/mods-available/authz_owner.load R etc/docker/shop/config/etc/apache2/mods-available/authz_user.load R etc/docker/shop/config/etc/apache2/mods-available/autoindex.conf R etc/docker/shop/config/etc/apache2/mods-available/autoindex.load R etc/docker/shop/config/etc/apache2/mods-available/buffer.load R etc/docker/shop/config/etc/apache2/mods-available/cache.load R etc/docker/shop/config/etc/apache2/mods-available/cache_disk.conf R etc/docker/shop/config/etc/apache2/mods-available/cache_disk.load R etc/docker/shop/config/etc/apache2/mods-available/cache_socache.load R etc/docker/shop/config/etc/apache2/mods-available/cern_meta.load R etc/docker/shop/config/etc/apache2/mods-available/cgi.load R etc/docker/shop/config/etc/apache2/mods-available/cgid.conf R etc/docker/shop/config/etc/apache2/mods-available/cgid.load R etc/docker/shop/config/etc/apache2/mods-available/charset_lite.load R etc/docker/shop/config/etc/apache2/mods-available/data.load R etc/docker/shop/config/etc/apache2/mods-available/dav.load R etc/docker/shop/config/etc/apache2/mods-available/dav_fs.conf R etc/docker/shop/config/etc/apache2/mods-available/dav_fs.load R etc/docker/shop/config/etc/apache2/mods-available/dav_lock.load R etc/docker/shop/config/etc/apache2/mods-available/dbd.load R etc/docker/shop/config/etc/apache2/mods-available/deflate.conf R etc/docker/shop/config/etc/apache2/mods-available/deflate.load R etc/docker/shop/config/etc/apache2/mods-available/dialup.load R etc/docker/shop/config/etc/apache2/mods-available/dir.conf R etc/docker/shop/config/etc/apache2/mods-available/dir.load R etc/docker/shop/config/etc/apache2/mods-available/dump_io.load R etc/docker/shop/config/etc/apache2/mods-available/echo.load R etc/docker/shop/config/etc/apache2/mods-available/env.load R etc/docker/shop/config/etc/apache2/mods-available/expires.load R etc/docker/shop/config/etc/apache2/mods-available/ext_filter.load R etc/docker/shop/config/etc/apache2/mods-available/file_cache.load R etc/docker/shop/config/etc/apache2/mods-available/filter.load R etc/docker/shop/config/etc/apache2/mods-available/headers.load R etc/docker/shop/config/etc/apache2/mods-available/heartbeat.load R etc/docker/shop/config/etc/apache2/mods-available/heartmonitor.load R etc/docker/shop/config/etc/apache2/mods-available/http2.load R etc/docker/shop/config/etc/apache2/mods-available/ident.load R etc/docker/shop/config/etc/apache2/mods-available/imagemap.load R etc/docker/shop/config/etc/apache2/mods-available/include.load R etc/docker/shop/config/etc/apache2/mods-available/info.conf R etc/docker/shop/config/etc/apache2/mods-available/info.load R etc/docker/shop/config/etc/apache2/mods-available/lbmethod_bybusyness.load R etc/docker/shop/config/etc/apache2/mods-available/lbmethod_byrequests.load R etc/docker/shop/config/etc/apache2/mods-available/lbmethod_bytraffic.load R etc/docker/shop/config/etc/apache2/mods-available/lbmethod_heartbeat.load R etc/docker/shop/config/etc/apache2/mods-available/ldap.conf R etc/docker/shop/config/etc/apache2/mods-available/ldap.load R etc/docker/shop/config/etc/apache2/mods-available/log_debug.load R etc/docker/shop/config/etc/apache2/mods-available/log_forensic.load R etc/docker/shop/config/etc/apache2/mods-available/lua.load R etc/docker/shop/config/etc/apache2/mods-available/macro.load R etc/docker/shop/config/etc/apache2/mods-available/mime.conf R etc/docker/shop/config/etc/apache2/mods-available/mime.load R etc/docker/shop/config/etc/apache2/mods-available/mime_magic.conf R etc/docker/shop/config/etc/apache2/mods-available/mime_magic.load R etc/docker/shop/config/etc/apache2/mods-available/mpm_event.conf R etc/docker/shop/config/etc/apache2/mods-available/mpm_event.load R etc/docker/shop/config/etc/apache2/mods-available/mpm_prefork.conf R etc/docker/shop/config/etc/apache2/mods-available/mpm_prefork.load R etc/docker/shop/config/etc/apache2/mods-available/mpm_worker.conf R etc/docker/shop/config/etc/apache2/mods-available/mpm_worker.load R etc/docker/shop/config/etc/apache2/mods-available/negotiation.conf R etc/docker/shop/config/etc/apache2/mods-available/negotiation.load R etc/docker/shop/config/etc/apache2/mods-available/perl.load R etc/docker/shop/config/etc/apache2/mods-available/proxy.conf R etc/docker/shop/config/etc/apache2/mods-available/proxy.load R etc/docker/shop/config/etc/apache2/mods-available/proxy_ajp.load R etc/docker/shop/config/etc/apache2/mods-available/proxy_balancer.conf R etc/docker/shop/config/etc/apache2/mods-available/proxy_balancer.load R etc/docker/shop/config/etc/apache2/mods-available/proxy_connect.load R etc/docker/shop/config/etc/apache2/mods-available/proxy_express.load R etc/docker/shop/config/etc/apache2/mods-available/proxy_fcgi.load R etc/docker/shop/config/etc/apache2/mods-available/proxy_fdpass.load R etc/docker/shop/config/etc/apache2/mods-available/proxy_ftp.conf R etc/docker/shop/config/etc/apache2/mods-available/proxy_ftp.load R etc/docker/shop/config/etc/apache2/mods-available/proxy_hcheck.load R etc/docker/shop/config/etc/apache2/mods-available/proxy_html.conf R etc/docker/shop/config/etc/apache2/mods-available/proxy_html.load R etc/docker/shop/config/etc/apache2/mods-available/proxy_http.load R etc/docker/shop/config/etc/apache2/mods-available/proxy_http2.load R etc/docker/shop/config/etc/apache2/mods-available/proxy_scgi.load R etc/docker/shop/config/etc/apache2/mods-available/proxy_wstunnel.load R etc/docker/shop/config/etc/apache2/mods-available/ratelimit.load R etc/docker/shop/config/etc/apache2/mods-available/reflector.load R etc/docker/shop/config/etc/apache2/mods-available/remoteip.load R etc/docker/shop/config/etc/apache2/mods-available/reqtimeout.conf R etc/docker/shop/config/etc/apache2/mods-available/reqtimeout.load R etc/docker/shop/config/etc/apache2/mods-available/request.load R etc/docker/shop/config/etc/apache2/mods-available/rewrite.load R etc/docker/shop/config/etc/apache2/mods-available/sed.load R etc/docker/shop/config/etc/apache2/mods-available/session.load R etc/docker/shop/config/etc/apache2/mods-available/session_cookie.load R etc/docker/shop/config/etc/apache2/mods-available/session_crypto.load R etc/docker/shop/config/etc/apache2/mods-available/session_dbd.load R etc/docker/shop/config/etc/apache2/mods-available/setenvif.conf R etc/docker/shop/config/etc/apache2/mods-available/setenvif.load R etc/docker/shop/config/etc/apache2/mods-available/slotmem_plain.load R etc/docker/shop/config/etc/apache2/mods-available/slotmem_shm.load R etc/docker/shop/config/etc/apache2/mods-available/socache_dbm.load R etc/docker/shop/config/etc/apache2/mods-available/socache_memcache.load R etc/docker/shop/config/etc/apache2/mods-available/socache_shmcb.load R etc/docker/shop/config/etc/apache2/mods-available/speling.load R etc/docker/shop/config/etc/apache2/mods-available/ssl.conf R etc/docker/shop/config/etc/apache2/mods-available/ssl.load R etc/docker/shop/config/etc/apache2/mods-available/status.conf R etc/docker/shop/config/etc/apache2/mods-available/status.load R etc/docker/shop/config/etc/apache2/mods-available/substitute.load R etc/docker/shop/config/etc/apache2/mods-available/suexec.load R etc/docker/shop/config/etc/apache2/mods-available/unique_id.load R etc/docker/shop/config/etc/apache2/mods-available/userdir.conf R etc/docker/shop/config/etc/apache2/mods-available/userdir.load R etc/docker/shop/config/etc/apache2/mods-available/usertrack.load R etc/docker/shop/config/etc/apache2/mods-available/vhost_alias.load R etc/docker/shop/config/etc/apache2/mods-available/xml2enc.load R etc/docker/shop/config/etc/apache2/mods-enabled/access_compat.load R etc/docker/shop/config/etc/apache2/mods-enabled/alias.conf R etc/docker/shop/config/etc/apache2/mods-enabled/alias.load R etc/docker/shop/config/etc/apache2/mods-enabled/apreq2.load R etc/docker/shop/config/etc/apache2/mods-enabled/auth_basic.load R etc/docker/shop/config/etc/apache2/mods-enabled/authn_core.load R etc/docker/shop/config/etc/apache2/mods-enabled/authn_file.load R etc/docker/shop/config/etc/apache2/mods-enabled/authz_core.load R etc/docker/shop/config/etc/apache2/mods-enabled/authz_host.load R etc/docker/shop/config/etc/apache2/mods-enabled/authz_user.load R etc/docker/shop/config/etc/apache2/mods-enabled/autoindex.conf R etc/docker/shop/config/etc/apache2/mods-enabled/autoindex.load R etc/docker/shop/config/etc/apache2/mods-enabled/deflate.conf R etc/docker/shop/config/etc/apache2/mods-enabled/deflate.load R etc/docker/shop/config/etc/apache2/mods-enabled/dir.conf R etc/docker/shop/config/etc/apache2/mods-enabled/dir.load R etc/docker/shop/config/etc/apache2/mods-enabled/env.load R etc/docker/shop/config/etc/apache2/mods-enabled/filter.load R etc/docker/shop/config/etc/apache2/mods-enabled/mime.conf R etc/docker/shop/config/etc/apache2/mods-enabled/mime.load R etc/docker/shop/config/etc/apache2/mods-enabled/mpm_prefork.conf R etc/docker/shop/config/etc/apache2/mods-enabled/mpm_prefork.load R etc/docker/shop/config/etc/apache2/mods-enabled/negotiation.conf R etc/docker/shop/config/etc/apache2/mods-enabled/negotiation.load R etc/docker/shop/config/etc/apache2/mods-enabled/perl.load R etc/docker/shop/config/etc/apache2/mods-enabled/reqtimeout.conf R etc/docker/shop/config/etc/apache2/mods-enabled/reqtimeout.load R etc/docker/shop/config/etc/apache2/mods-enabled/setenvif.conf R etc/docker/shop/config/etc/apache2/mods-enabled/setenvif.load R etc/docker/shop/config/etc/apache2/mods-enabled/status.conf R etc/docker/shop/config/etc/apache2/mods-enabled/status.load R etc/docker/shop/config/etc/apache2/ports.conf R etc/docker/shop/config/etc/apache2/sites-available/000-default.conf R etc/docker/shop/config/etc/apache2/sites-available/default-ssl.conf R etc/docker/shop/config/etc/varnish/dreamwidth.vcl R etc/docker/shop/scripts/setup.sh R etc/docker/shop/scripts/startup-dev.sh R etc/docker/shop/scripts/startup-prod.sh

Log Message:


Consolidate shop image into web22 — they're identical

The shop and web22 Docker images were byte-for-byte identical (same base, same configs, same startup scripts). Remove the separate shop build/deploy workflows and Dockerfile, and add web-shop as a deploy target in web22-deploy.yml instead.

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

vital functions

Feb. 8th, 2026 10:38 pm
kaberett: Trans symbol with Swiss Army knife tools at other positions around the central circle. (Default)
[personal profile] kaberett

Reading. I have FINISHED Index, A History of the (Dennis Duncan), including both indexes, including The Games Therein, and had a Great time.

Started (just now) The Rose Field, volume three of The Book of Dust (Philip Pullman). Grousing; vague spoilers for vol 2 )

so as I say I'm not hugely hopeful for this, but hey, maybe I'm being unfair to it.

Writing. Did you know that getting knowledge out of your own head and into other people's is a specific set of skills that has very little to do with how well you know the things you're trying to communicate? TRY TO LOOK SHOCKED, PLEASE. (6.3k words, and am absolutely in an Iterative Cycle of trying to make the introduction more-or-less work. It is progressing, just... very slowly.)

Listening. I realised that Hidden Almanac was possibly in fact exactly a useful sort of thing to listen to while Wrangling Laundry, and have therefore started again from the beginning, at least in part as an attempt to actually listen to some of the episodes I dozed through while they were playing in the car...

Playing. Incomplete White Puzzle progresses. (Today I have added I think three pieces to the contiguous section, two of which I had already joined to each other as a free-foating lump, and made another couple of free-floating lump connections.)

I think we also did a bit more Inkulinati before I got horrendously distracted by Puzzle. And the sudoku fixation continues, though it is at least ramping down a little.

Cooking. I have been having A Rough Week brain-wise, but I have today managed to make some bread, and I did earlier in the week gently fry up some celery and garlic to add to the mashed potato & parsnip that we were having with Vegetables and Veg Sossij. I think that is about the extent of it.

Eating. VEGETABLES, including a couple of peppers from an overwintered plant. (Restricted diet for a week up until the Tuesday just gone, so the return of Fibre was Extremely Welcome.) Favourite chocolate stars with raspberries. Fruit With Skin On. Lebkuchen. Stollen. Seeds and nuts.

Growing. I think the nematodes (applied as a split dose a few days apart) have dealt? at least temporarily? with the sodding Sciarid Flies? for now?

Lemongrass needs pricking out. Physalis are showing zero indication that they have any intention of germinating, which is mildly annoying. There are still three not-dead Lithops seedlings, though I doubt they're the same three as last week. Orchids getting increasingly enthusiastic about their plans to flower.

Have not managed to get anything else sown, yet.

Observing. Lots of bulbs: daffodils and crocuses various and snowdrops are Definitely Underway, at this point. We are fairly convinced that the Yelling from the garden around dusk is Amorous Foxes, though we have not (yet?) bestirred ourselves to ask the internet if what we think we're hearing is in fact what we're hearing...

[navel-gazing] reading, fast & slow

Feb. 7th, 2026 11:21 pm
kaberett: Photo of a pile of old leather-bound books. (books)
[personal profile] kaberett

At some point in proceedings (depression? pain? migraine? dense technical text for the PhD? poetry?), I realise, I have gone from reading Unusually Quickly to still reading More? Than Population Norm? (75ish books last year, of which 15ish were graphic novels or otherwise not-a-novel's-worth-of-words), but no faster than I'd be able to read the text aloud -- "hearing" each word in my head, and often rereading sentences repeatedly.

This is in contrast to how I type, which is much faster than I can speak comprehensibly (... though I now recall that I am in fact often asked to Slow The Fuck Down when providing information verbally).

I have over the last little bit been tentatively experimenting with trying not to read each word "aloud", mentally, and instead treating The Written Word as something that doesn't always need to be (pseudo-)vocalised.

It feels weird. It's an active effort. I am extremely dubious about the impact on how much information I retain; Further Study Required. I think this is probably how I used to read (when?); I'm not sure what changed; I'm unsettled.

(And I want to post something to Dreamwidth before bed, and this is a thing I was thinking about a lot while almost-but-not-quite finishing Index, A History of the -- I'm at a point I'd ordinarily count as "finished" but obviously it is in this instance both important and rewarding to read the index, all two of it, so here y'go.)

github: shadowy octopus with the head of a robot, emblazoned with the Dreamwidth swirl (Default)
[personal profile] github posting in [site community profile] changelog

Branch: refs/heads/main Home: https://github.com/dreamwidth/dreamwidth Commit: d7afa745f32d0482c0e8f3da2c041d92a9b5f636 https://github.com/dreamwidth/dreamwidth/commit/d7afa745f32d0482c0e8f3da2c041d92a9b5f636 Author: Mark Smith mark@dreamwidth.org Date: 2026-02-06 (Fri, 06 Feb 2026)

Changed paths: M etc/docker/base/Dockerfile A etc/docker/base/build-static-legacy.sh

Log Message:


Preserve legacy build-static.sh for Ubuntu 18.04 base image

The 18.04 image still uses Compass/YUI which the new build-static.sh no longer supports. COPY a frozen copy of the old script into the image and overwrite the repo version before running the build. Can be removed when the 18.04 images are retired.

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

Commit: b6ef69d4b76f3f3846f49fb62a81d3afc41bc598 https://github.com/dreamwidth/dreamwidth/commit/b6ef69d4b76f3f3846f49fb62a81d3afc41bc598 Author: Mark Smith mark@dreamwidth.org Date: 2026-02-06 (Fri, 06 Feb 2026)

Changed paths: M CLAUDE.md

Log Message:


Add never-amend rule to CLAUDE.md git workflow instructions

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

Compare: https://github.com/dreamwidth/dreamwidth/compare/8f82b8be8ff5...b6ef69d4b76f

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)
[personal profile] github posting in [site community profile] changelog

Branch: refs/heads/main Home: https://github.com/dreamwidth/dreamwidth Commit: e26767b2e3f02ba7ff72fb279dcdf34cb894906a https://github.com/dreamwidth/dreamwidth/commit/e26767b2e3f02ba7ff72fb279dcdf34cb894906a Author: Mark Smith mark@dreamwidth.org Date: 2026-02-06 (Fri, 06 Feb 2026)

Changed paths: M t/bin/initialize-db

Log Message:


Make initialize-db idempotent to avoid errors on rerun

Consolidate individual mysql calls into a single statement using CREATE USER/DATABASE IF NOT EXISTS, so the script can be run repeatedly without throwing errors on an already-initialized database.

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

Commit: 8f82b8be8ff5db0e7e7b0ff8678a4680e7f394b7 https://github.com/dreamwidth/dreamwidth/commit/8f82b8be8ff5db0e7e7b0ff8678a4680e7f394b7 Author: Mark Smith mark@dreamwidth.org Date: 2026-02-06 (Fri, 06 Feb 2026)

Changed paths: M .devcontainer/Dockerfile M .devcontainer/setup.sh M bin/build-static.sh R config.rb M doc/dependencies-system M etc/docker/base22/Dockerfile R ext/dw-nonfree/config.rb

Log Message:


Replace Compass/YUI with Dart Sass/esbuild for static asset builds

  • Switch SCSS compilation from deprecated Ruby Compass to Dart Sass (installed via npm), with proper --load-path for import resolution
  • Replace YUI Compressor (Java) with esbuild (Node.js) for JS minification; CSS skips minification since Dart Sass already outputs compressed CSS
  • Add --sass and --compress flags to build-static.sh for selective builds; asset sync (rsync) always runs
  • Install Node.js 20 LTS via nodesource in devcontainer and base22 Dockerfiles; remove Ruby, Compass, default-jre, and YUI
  • Symlink pre-built static assets in devcontainer setup instead of copying them
  • Delete config.rb (Compass configuration) from both repos
  • Leave Ubuntu 18.04 base image unchanged (being deprecated)

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

Compare: https://github.com/dreamwidth/dreamwidth/compare/4d2a30581c19...8f82b8be8ff5

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)
[personal profile] github posting in [site community profile] changelog

Branch: refs/heads/main Home: https://github.com/dreamwidth/dreamwidth Commit: 4d2a30581c19aa0bbed317e1d87d05fa887026c5 https://github.com/dreamwidth/dreamwidth/commit/4d2a30581c19aa0bbed317e1d87d05fa887026c5 Author: Mark Smith mark@dreamwidth.org Date: 2026-02-06 (Fri, 06 Feb 2026)

Changed paths: M .devcontainer/Dockerfile M .devcontainer/setup.sh A .dockerignore

Log Message:


Pre-bake schema population and static build into devcontainer image

Move database schema setup, YUI compressor download, and static asset compilation from container creation time (setup.sh) into the Dockerfile so they're baked into the image. This makes container startup much faster since setup.sh now only runs idempotent catchup steps.

Static assets are built to /opt/dreamwidth-static/ in the image (since /workspaces/dreamwidth is overlaid by a bind mount at runtime) and fast-copied into place by setup.sh. Also fixes PERL5LIB to point to /opt/dreamwidth-extlib/lib/perl5 where cpm actually installs modules.

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)
[personal profile] github posting in [site community profile] changelog

Branch: refs/heads/main Home: https://github.com/dreamwidth/dreamwidth Commit: 3cd3d09906e985b511fcdfa0b98d2cc959e66424 https://github.com/dreamwidth/dreamwidth/commit/3cd3d09906e985b511fcdfa0b98d2cc959e66424 Author: Mark Smith mark@dreamwidth.org Date: 2026-02-06 (Fri, 06 Feb 2026)

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

Log Message:


Add CI workflow to pre-build devcontainer image on GHCR

Developers now pull ghcr.io/dreamwidth/devcontainer:latest instead of building the image from scratch. The workflow triggers on dependency file changes, nightly, and manual dispatch.

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)
[personal profile] github posting in [site community profile] changelog

Branch: refs/heads/main Home: https://github.com/dreamwidth/dreamwidth Commit: 58e398d69d2464e2f8fc5786c2312b1c2dac4d7b https://github.com/dreamwidth/dreamwidth/commit/58e398d69d2464e2f8fc5786c2312b1c2dac4d7b Author: Mark Smith mark@dreamwidth.org Date: 2026-02-06 (Fri, 06 Feb 2026)

Changed paths: M .devcontainer/devcontainer.json

Log Message:


Remove redundant forwardPorts from devcontainer config

runArgs -p flags already handle port publishing for both VS Code and the devcontainer CLI, so forwardPorts is unnecessary.

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)
[personal profile] github posting in [site community profile] changelog

Branch: refs/heads/main Home: https://github.com/dreamwidth/dreamwidth Commit: 26cb4633dc9643410c171a560bbf82656c144252 https://github.com/dreamwidth/dreamwidth/commit/26cb4633dc9643410c171a560bbf82656c144252 Author: Mark Smith mark@dreamwidth.org Date: 2026-02-06 (Fri, 06 Feb 2026)

Changed paths: M .devcontainer/devcontainer.json

Log Message:


Add explicit port mappings for devcontainer CLI

forwardPorts only works in VS Code; the devcontainer CLI needs -p flags in runArgs to actually publish ports to the host.

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)
[personal profile] github posting in [site community profile] changelog

Branch: refs/heads/main Home: https://github.com/dreamwidth/dreamwidth Commit: 08af0eec17bd6bcabff328014253c09d3f8ddc1b https://github.com/dreamwidth/dreamwidth/commit/08af0eec17bd6bcabff328014253c09d3f8ddc1b Author: Mark Smith mark@dreamwidth.org Date: 2026-02-06 (Fri, 06 Feb 2026)

Changed paths: M .github/workflows/tasks/worker-birthday-notify-service.json M .github/workflows/tasks/worker-change-poster-id-service.json M .github/workflows/tasks/worker-codebuild-notifier-service.json M .github/workflows/tasks/worker-content-importer-lite-service.json M .github/workflows/tasks/worker-content-importer-service.json M .github/workflows/tasks/worker-content-importer-verify-service.json M .github/workflows/tasks/worker-directory-meta-service.json M .github/workflows/tasks/worker-distribute-invites-service.json M .github/workflows/tasks/worker-dw-esn-cluster-subs-service.json M .github/workflows/tasks/worker-dw-esn-filter-subs-service.json M .github/workflows/tasks/worker-dw-esn-fired-event-service.json M .github/workflows/tasks/worker-dw-esn-process-sub-service.json M .github/workflows/tasks/worker-dw-send-email-service.json M .github/workflows/tasks/worker-dw-sphinx-copier-service.json M .github/workflows/tasks/worker-embeds-service.json M .github/workflows/tasks/worker-esn-cluster-subs-service.json M .github/workflows/tasks/worker-esn-filter-subs-service.json M .github/workflows/tasks/worker-esn-fired-event-service.json M .github/workflows/tasks/worker-esn-process-sub-service.json M .github/workflows/tasks/worker-expunge-users-service.json M .github/workflows/tasks/worker-import-eraser-service.json M .github/workflows/tasks/worker-import-scheduler-service.json M .github/workflows/tasks/worker-incoming-email-service.json M .github/workflows/tasks/worker-latest-feed-service.json M .github/workflows/tasks/worker-lazy-cleanup-service.json M .github/workflows/tasks/worker-paidstatus-service.json M .github/workflows/tasks/worker-process-privacy-service.json M .github/workflows/tasks/worker-resolve-extacct-service.json M .github/workflows/tasks/worker-schedule-synsuck-service.json M .github/workflows/tasks/worker-send-email-ses-service.json M .github/workflows/tasks/worker-shop-creditcard-charge-service.json M .github/workflows/tasks/worker-spellcheck-gm-service.json M .github/workflows/tasks/worker-sphinx-copier-service.json M .github/workflows/tasks/worker-sphinx-search-gm-service.json M .github/workflows/tasks/worker-support-notify-service.json M .github/workflows/tasks/worker-synsuck-service.json A .github/workflows/worker22-build.yml A .github/workflows/worker22-deploy.yml M config/update-workflows.py A etc/docker/worker22/Dockerfile A etc/docker/worker22/scripts/setup.sh A etc/docker/worker22/scripts/startup-dev.sh A etc/docker/worker22/scripts/startup-prod.sh

Log Message:


Add worker22 container for Ubuntu 22.04 worker migration

Create etc/docker/worker22/ (FROM base22), with parallel build and deploy workflows so workers can be migrated independently. Both worker and worker22 deploys share the same task definitions and log to the same per-worker CloudWatch log groups (/dreamwidth/worker/NAME), matching the Terraform configuration.

Also updates update-workflows.py to generate both worker-deploy.yml and worker22-deploy.yml, and fixes task definitions to use per-worker log groups instead of the shared /dreamwidth/worker group.

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)
[personal profile] github posting in [site community profile] changelog

Branch: refs/heads/main Home: https://github.com/dreamwidth/dreamwidth Commit: 6ed7244d8b66a8d3807bbac22ec1baffcc566158 https://github.com/dreamwidth/dreamwidth/commit/6ed7244d8b66a8d3807bbac22ec1baffcc566158 Author: Mark Smith mark@dreamwidth.org Date: 2026-02-06 (Fri, 06 Feb 2026)

Changed paths: M etc/docker/proxy/Dockerfile A src/proxy/go.mod

Log Message:


Move proxy container from Ubuntu 18.04 to 24.04

Add go.mod for the proxy since Go 1.22 (shipped with 24.04) requires module mode. The proxy uses only stdlib so no dependencies needed.

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)
[personal profile] github posting in [site community profile] changelog

Branch: refs/heads/main Home: https://github.com/dreamwidth/dreamwidth Commit: 8d37ec5d2b62954d591b7ce02bbcf43e2fa497fd https://github.com/dreamwidth/dreamwidth/commit/8d37ec5d2b62954d591b7ce02bbcf43e2fa497fd Author: Mark Smith mark@dreamwidth.org Date: 2026-02-06 (Fri, 06 Feb 2026)

Changed paths: M .devcontainer/devcontainer.json M .devcontainer/start.sh

Log Message:


Use port 8080 for Starman in devcontainer, forward both server ports

Move Starman from port 80 to 8080 (matching its default) and add forwardPorts for both 8080 (Starman) and 8081 (Apache) so they're accessible at predictable ports on the host.

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

preposterous puzzle: thoughts so far

Feb. 6th, 2026 10:45 pm
kaberett: Trans symbol with Swiss Army knife tools at other positions around the central circle. (Default)
[personal profile] kaberett

The context is Simone Giertz's Incomplete White Puzzle, which A got me partly to troll me and partly because they thought I'd enjoy it and partly because getting the bundle of all three puzzles gets you 20% off individual list prices.

Current status: 105/"500" pieces in their final positions, plus another 57 no longer singletons. I have several semi-sorted categories including (in the halves of the box) "could plausibly have come from a reasonable puzzle" and "bullshit", and (on the table) Swoopy Bullshit, Offset Noses, Weirdly Straight, Multi-Nose Bullshit, and Featureless Curves.

THOUGHTS )

I am having a very pleasant and soothing time, and I am trying to break up the hyperfocus by instituting a rule of Get Up And Do One Unit Of Something Else After Every (Contiguous) Piece Placed, and yes that is me rules-lawyering after the fact...

Exam results.

Feb. 6th, 2026 03:38 pm
wildeabandon: (books)
[personal profile] wildeabandon
I got my exam results yesterday, and they were slightly disappointing, in the "virtually anyone would be fucking delighted, but they were all on the low end of what I was expecting" sense of the word disappointing. I got 15/20 in Catechetics, 16/20 in Anthropology, 17/20 in Psalms & Prophets, and 18/20 in Hebrew II and Ugaritic. The first two are entirely understandable - I wasn't particularly keen on either course, and whilst by no means neglecting them completely, I didn't put in a particularly high level of effort. I'm happy enough with the 18s. They were both challenging courses, and 18 is a bloody good mark.

The one that's bugging me is the Psalms though. I thought I understood the material well, and that I'd had some interesting and insightful things to say. I know that I got 18/20 in the paper that makes up half the mark, which means that I only got 15-16/20 in the exam. Hardly the end of the world, but it's the only one where I don't understand why I didn't do better. I've emailed the prof to ask for feedback, so with luck I'll get something useful. (ETA: Apparently marks get rounded down, not up - I got 8/10 and 9/10 in the two exam questions, and the 8 was because he had to prompt me a couple of times, and since at least one of those time he prompted me for the thing I was about to say anyway I am now feeling a lot less bothered by the overall mark.)

One result though which is positive in a sense is that my overall grade is now almost guaranteed. My average is currently 87%. The top grade boundary is an average of 90%, which had seemed in reach before these results, but would now require me to get 20/20 in all but one of my remaining courses (and 19/20 in that), which isn't really plausible. The grade boundary below is an average of 85%, and whilst the fact that there are just more numbers between 0 and 87 than between 87 and 100 means that there's more scope for my grade to be dragged down than up, I would have to do quite a bit worse than I have been for that to happen. Anyway, the sense that there's not a lot that I can do to change my overall grade means that I can concentrate more on learning for the sake of learning, which in the long term is almost certainly better than chasing grades.
github: shadowy octopus with the head of a robot, emblazoned with the Dreamwidth swirl (Default)
[personal profile] github posting in [site community profile] changelog

Branch: refs/heads/main Home: https://github.com/dreamwidth/dreamwidth Commit: ba0d37394abf33d74665d3583cbf76bf7230e566 https://github.com/dreamwidth/dreamwidth/commit/ba0d37394abf33d74665d3583cbf76bf7230e566 Author: Mark Smith mark@dreamwidth.org Date: 2026-02-05 (Thu, 05 Feb 2026)

Changed paths: M bin/ecs-shell M cgi-bin/DBI/Role.pm

Log Message:


Fix DBD::mysql binary data corruption on Ubuntu 22.04

  • DBI/Role.pm: Add mysql_enable_utf8 => 0 to preserve binary gzip data stored in TEXT columns. DBD::mysql 4.050+ on Ubuntu 22.04 auto-enables UTF-8 handling, which corrupts compressed data. This option is safe on older versions where it was already the default.

  • bin/ecs-shell: Prefer 'web' container over 'cloudwatch-agent' sidecar when connecting to ECS tasks. Fixes "no such file or directory" error for /bin/bash since the cloudwatch-agent container uses a minimal image.

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

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

some good things

Feb. 5th, 2026 10:38 pm
kaberett: Trans symbol with Swiss Army knife tools at other positions around the central circle. (Default)
[personal profile] kaberett
  1. some washi tape I wanted has restocked at a UK retailer! Possibly a second one also! So as and when the website works out what's going on with Desired Tape #2, it is time to place a stationery order for meeeeeeeeeeeeeee
  2. Progress With Preposterous Puzzle! I now have all the edge assembled (I think I wound up with only one piece having been Actually Wrong) and even I have managed to start filling in very slowly (I am up to... about 5 pieces placed so far? which is a further 1% down!)
  3. I got a hug from the Child while saying goodbye this evening!
  4. I have worked out an acceptable Wagamama order from the current menu and am feeling pretty good about my dinner.
  5. Bread for tomorrow (anise, fig, hazelnut, copied from the local fancy bakery) is looking Extremely Promising.

CareADHD Referral

Feb. 5th, 2026 04:04 pm
diffrentcolours: (Default)
[personal profile] diffrentcolours

(backstory: I asked the GP about an ADHD diagnosis in Spring 2023, got given some forms to fill in, sat on them for about a year, filled them in in March 2024, returned them in April, got rejected by the Adult ADHD service for not talking about my childhood symptoms enough; got given a different survey to fill out, returned that in April 2025, got accepted by the Adult ADHD service in September 2025 and put on a 7+ year waiting list)

Last October, [personal profile] cosmolinguist looked into getting a private ADHD diagnosis and compiled some notes for me. In January I managed to force myself to look through them and do some other research. I asked my GP to refer me to CareADHD for an assessment under NHS Right to Choose. The assessment will cost me about £400, which is a lot cheaper than some of the other providers. About a week ago I heard back from the GP saying that they'd done that. I haven't yet heard from CareADHD and obviously now it's not my turn to do something I'm really impatient about it! But I'll give it a little while longer before getting in touch to establish a timeline - it'll probably be another couple of months before I get the diagnosis appointment.

I'm having a lot of feelings about this. I know that getting ADHD meds has been a literal life saver for friends, and I'm hoping it'll help me with my current situation, where lack of concentration is making me suck at my day job and many other things in life. I'm hoping it'll help complement the therapy work I'm doing, where we've been talking about emotional dysregulation and my anhedonia - if I can't enjoy things, I'm significantly less motivated to do them and seek shiny dopamine diversions.

I'm trying not to get my hopes up too much. This won't be a magic bullet that'll solve everything overnight. It might not even help much at all, or it might be a painstaking process of adjusting medications and dosages (and dealing with ongoing meds shortages in the UK, particularly post-Brexit). In the short term it may even make things worse. But the possibility of breaking the decades-long cycle of overcommitment and burnout is so tantalising...

One of Those Guys

Feb. 5th, 2026 03:40 pm
diffrentcolours: (Default)
[personal profile] diffrentcolours

Last night, after a very pleasurable theatre trip with [personal profile] cosmolinguist, I ended up messing around a bit with the smart plugs I bought ages ago.

I have actually been using these plugs somewhat. They're on the house WiFi and that lets me remote-control them through a browser and set timers for them. They also have a mechanical button if you want to interact with them in a more traditional manner - that's basically a hard requirement for any home automation stuff I do, after the time I visited a friend and had to poop in the darkness because the bathroom lights couldn't be switched on until he reinstalled a Raspberry Pi.

But having resurrected Home Assistant on my fileserver I figured it was time to actually get these things talking to each other. I still find HA overly complicated, and I'm not quite sure what the difference is between an "app" and an "integration". I hit a few dead ends following this guide but eventually got to the point where I could use the Home Assistant web UI to control the plugs rather than the built-in web UI.

That doesn't sound like much of an improvement but it's actually quite exciting, because now anything I can do with Home Assistant, I can do with the plugs. I installed up simple speech-to-text and text-to-speech integrations in HA, and now I can talk to the HA app on my phone, tell it to turn the plugs on or off, and it does so! And tells me it's done it in a northern voice called Alan!

It's another small step on the HA journey and I'm still not thinking about temperature monitoring around the house, but it gave me a nice little dopamine hit.

(by this time it was 2am and E prodded me to come to bed, so I excitedly demonstrated this to him and then went to sleep)

Profile

venta: (Default)
venta

December 2025

S M T W T F S
 123456
78910111213
14151617181920
212223 24252627
28293031   

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Feb. 18th, 2026 10:02 pm
Powered by Dreamwidth Studios