Skip to content

docs(architecture): start deep-modules exercise; ADR-0004, ADR-0005#608

Open
subotic wants to merge 4 commits intomainfrom
worktree-swift-ray-qbtf
Open

docs(architecture): start deep-modules exercise; ADR-0004, ADR-0005#608
subotic wants to merge 4 commits intomainfrom
worktree-swift-ray-qbtf

Conversation

@subotic
Copy link
Copy Markdown
Contributor

@subotic subotic commented May 2, 2026

Summary

  • Multi-session deep-module identification working doc at docs/deep-modules.md — methodology, probe template, probe order, accumulated glossary deltas, method invariants. Probes 1 (SipiCache) and 2 (metadata/) committed; eight more queued.
  • ADR-0004 — image shape lookup moves out of SipiCache to format handlers, with master-format handlers (JP2 + pyramidal TIFF) using a dedicated Essentials-packet shape field for the server-mode hot path. Removes SipiCache::SizeRecord and getSize() (parasitic side-effect index, not a real cache).
  • ADR-0005 — Essentials packet adopts versioned CBOR wire format with format_version discriminator; legacy pipe-delimited reader retained indefinitely. Driven by the 100K-master-file longevity invariant: any future schema change must be deployable without coordinating mass re-encoding.

Status

Backup PR for the deep-modules working-doc exercise. Both ADRs are proposed (not accepted); no code changes in this PR. Treat as a design checkpoint — the actual refactors land in subsequent PRs that consume this doc as input to the Bazel-package migration described in ADR-0003.

Test plan

  • Sanity-check the probe rows render correctly on GitHub
  • Confirm cross-references resolve (docs/deep-modules.mdUBIQUITOUS_LANGUAGE.md, ADR-0001/0003/0004/0005)
  • No production code touched — CI is informational only

🤖 Generated with Claude Code

Working design log for identifying Deep Modules (Ousterhout) in the SIPI
codebase, using the ubiquitous language as a probe and extending the
language as gaps surface. Output drives the Bazel package layout from
ADR-0003.

- docs/deep-modules.md — methodology, probe template, probe order,
  glossary delta register, method invariants. Probes 1 and 2 committed.
- ADR-0004 — image shape lookup is owned by format handlers, with master-
  format handlers (JP2 + pyramidal TIFF) using an Essentials-packet
  shape field for the server-mode hot path.
- ADR-0005 — Essentials packet adopts versioned CBOR wire format;
  legacy pipe-delimited reader retained indefinitely. Driven by the
  100K-master-file longevity invariant.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@codecov
Copy link
Copy Markdown

codecov Bot commented May 2, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 17.3%. Comparing base (99e72be) to head (19f27da).
⚠️ Report is 46 commits behind head on main.

Additional details and impacted files

see 7 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 2, 2026

Overview

Image reference daschswiss/sipi:v4.1.1 daschswiss/sipi:latest
- digest 65b287d0ceae 663c32be3913
- tag v4.1.1 latest
- environment production
- provenance 2fe2441
- vulnerabilities critical: 0 high: 0 medium: 72 low: 18 critical: 0 high: 0 medium: 0 low: 0
- platform linux/amd64 linux/amd64
- size 217 MB 144 MB (-73 MB)
- packages 486 123 (-363)
Environment Variables (6 changes)
  • + 2 added
  • - 2 removed
  • ± 2 changed
  • 1 unchanged
-LANG=en_US.UTF-8
+LANG=C.UTF-8
-LANGUAGE=en_US.UTF-8
-LC_ALL=en_US.UTF-8
+LC_ALL=C.UTF-8
-PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
+SSL_CERT_FILE=/nix/store/zp564phiicll8d53d973gbh8y3iiwlm7-nss-cacert-3.121/etc/ssl/certs/ca-bundle.crt
 TZ=Europe/Zurich
+TZDIR=/nix/store/cxjmhdbpy3bk12jc6lwpmcvlas76a7zm-tzdata-2026a/share/zoneinfo
Labels (7 changes)
  • + 5 added
  • - 1 removed
  • ± 1 changed
-maintainer=support@dasch.swiss
+org.opencontainers.image.description=IIIF-compatible media server.
+org.opencontainers.image.licenses=AGPL-3.0-only
+org.opencontainers.image.revision=2fe244155fcce6e0ea936d8a198bb8692d3e9d32
+org.opencontainers.image.source=https://github.com/dasch-swiss/sipi
+org.opencontainers.image.title=Sipi
-org.opencontainers.image.version=24.04
+org.opencontainers.image.version=v4.1.1
Config (1 changes)
  • ± 1 changed
  • 3 unchanged
 1024/tcp=
 cmd=--config=/sipi/config/sipi.config.lua
-entrypoint=/usr/sbin/pid1 --verbose -- /sipi/sipi
+entrypoint=/nix/store/lzx3vwggc3y2diwpkql7a5k425x46pvz-tini-0.19.0/bin/tini -- /nix/store/jm9jwji5kl9b4bcwmd0y2r00z6ffqwk7-sipi-4.1.1/bin/sipi
 workdir=/sipi
Policies (0 improved, 0 worsened, 2 missing data)
Policy Name daschswiss/sipi:v4.1.1 daschswiss/sipi:latest Change Standing
Default non-root user ⚠️ ⚠️ No Change
No AGPL v3 licenses No Change
No fixable critical or high vulnerabilities No Change
No high-profile vulnerabilities No Change
No outdated base images ❓ No data ❓ No data
No unapproved base images ❓ No data ❓ No data
Supply chain attestations ⚠️ 2 ⚠️ 2 No Change
Packages and Vulnerabilities (609 package changes and 0 vulnerability changes)
  • ➕ 123 packages added
  • ➖ 486 packages removed
Changes for packages of type deb (486 changes)
Package Version
daschswiss/sipi:v4.1.1
Version
daschswiss/sipi:latest
acl 2.3.2-1build1.1
alsa-lib 1.2.11-1ubuntu0.2
aom 3.8.2-2ubuntu0.1
apparmor 4.0.1really4.0.1-0ubuntu0.24.04.6
apt 2.8.3
attr 1:2.5.2-1build1.1
audit 1:3.1.2-2.1build1.1
base-files 13ubuntu10.4
base-passwd 3.6.3build1
bash 5.2.21-2ubuntu4
brotli 1.1.0-2build2
bsdutils 1:2.39.3-9ubuntu6.5
bzip2 1.0.8-5.1build0.1
ca-certificates 20240203
cairo 1.18.0-3build1
cdebconf 0.271ubuntu3
chromaprint 1.5.1-5
cjson 1.7.17-1
codec2 1.2.0-2build1
coreutils 9.4-3ubuntu6.2
curl 8.5.0-2ubuntu10.8
cyrus-sasl2 2.1.28+dfsg1-5ubuntu3.1
dash 0.5.12-6ubuntu5
dav1d 1.4.1-1build1
db5.3 5.3.28+dfsg2-7
dbus 1.14.10-4ubuntu4.1
debconf 1.5.86ubuntu1
debianutils 5.17build1
diffutils 1:3.10-1build1
dpkg 1.22.6ubuntu6.5
e2fsprogs 1.47.0-2.4~exp1ubuntu4.1
elfutils 0.190-1.1ubuntu0.1
expat 2.6.1-2ubuntu0.4
ffmpeg 7:6.1.1-3ubuntu5
fftw3 3.3.10-1ubuntu3
findutils 4.9.0-5build1
flac 1.4.3+ds-2.1ubuntu2
flite 2.2-6build3
fontconfig 2.15.0-1.1ubuntu2
fontconfig-config 2.15.0-1.1ubuntu2
fonts-dejavu 2.37-8
fonts-dejavu-core 2.37-8
fonts-dejavu-mono 2.37-8
freetype 2.13.2+dfsg-1ubuntu0.1
fribidi 1.0.13-3build1
game-music-emu 0.6.3-7build1
gcc-14 14.2.0-4ubuntu2~24.04.1
gcc-14-base 14.2.0-4ubuntu2~24.04.1
gdk-pixbuf 2.42.10+dfsg-3ubuntu3.3
glib2.0 2.80.0-6ubuntu3.8
glibc 2.39-0ubuntu8.7
gmp 2:6.3.0+dfsg-2ubuntu6.1
gnupg2 2.4.4-2ubuntu17.4
gnutls28 3.8.3-1.1ubuntu3.5
gpgv 2.4.4-2ubuntu17.4
graphite2 1.3.14-2build1
grep 3.11-4build1
gzip 1.12-1ubuntu3.1
harfbuzz 8.3.0-2build2
highway 1.0.7-8.1build1
hostname 3.23+nmu2ubuntu2
icu 74.2-1ubuntu3.1
init-system-helpers 1.66ubuntu1
jackd2 1.9.21~dfsg-3ubuntu3
jbigkit 2.1-6.1ubuntu2
jpeg-xl 0.7.0-10.2ubuntu6.1
keyutils 1.6.3-3build1
krb5 1.20.1-6ubuntu2.6
lame 3.100-6build1
lapack 3.12.0-3build1.1
lcms2 2.14-2build1
lerc 4.0.0+ds-4ubuntu2
libacl1 2.3.2-1build1.1
libaom3 3.8.2-2ubuntu0.1
libapparmor1 4.0.1really4.0.1-0ubuntu0.24.04.6
libapt-pkg6.0t64 2.8.3
libasound2-data 1.2.11-1ubuntu0.2
libasound2t64 1.2.11-1ubuntu0.2
libass 1:0.17.1-2build1
libass9 1:0.17.1-2build1
libassuan 2.5.6-1build1
libassuan0 2.5.6-1build1
libasyncns 0.8-6build4
libasyncns0 0.8-6build4
libattr1 1:2.5.2-1build1.1
libaudit-common 1:3.1.2-2.1build1.1
libaudit1 1:3.1.2-2.1build1.1
libavc1394 0.5.4-5build3
libavc1394-0 0.5.4-5build3
libavcodec60 7:6.1.1-3ubuntu5
libavdevice60 7:6.1.1-3ubuntu5
libavfilter9 7:6.1.1-3ubuntu5
libavformat60 7:6.1.1-3ubuntu5
libavutil58 7:6.1.1-3ubuntu5
libblas3 3.12.0-3build1.1
libblkid1 2.39.3-9ubuntu6.5
libbluray 1:1.3.4-1build1
libbluray2 1:1.3.4-1build1
libbrotli1 1.1.0-2build2
libbs2b 3.1.0+dfsg-7build1
libbs2b0 3.1.0+dfsg-7build1
libbsd 0.12.1-1build1.1
libbsd0 0.12.1-1build1.1
libbz2-1.0 1.0.8-5.1build0.1
libc-bin 2.39-0ubuntu8.7
libc6 2.39-0ubuntu8.7
libcaca 0.99.beta20-4ubuntu0.1
libcaca0 0.99.beta20-4ubuntu0.1
libcairo-gobject2 1.18.0-3build1
libcairo2 1.18.0-3build1
libcap-ng 0.8.4-2build2
libcap-ng0 0.8.4-2build2
libcap2 1:2.66-5ubuntu2.2
libcdio 2.1.0-4.1ubuntu1.2
libcdio-cdda2t64 10.2+2.0.1-1.1build2
libcdio-paranoia 10.2+2.0.1-1.1build2
libcdio-paranoia2t64 10.2+2.0.1-1.1build2
libcdio19t64 2.1.0-4.1ubuntu1.2
libchromaprint1 1.5.1-5
libcjson1 1.7.17-1
libcodec2-1.2 1.2.0-2build1
libcom-err2 1.47.0-2.4~exp1ubuntu4.1
libcrypt1 1:4.4.36-4build1
libcurl4t64 8.5.0-2ubuntu10.8
libdatrie 0.2.13-3build1
libdatrie1 0.2.13-3build1
libdav1d7 1.4.1-1build1
libdb5.3t64 5.3.28+dfsg2-7
libdbus-1-3 1.14.10-4ubuntu4.1
libdc1394 2.2.6-4build1
libdc1394-25 2.2.6-4build1
libdebconfclient0 0.271ubuntu3
libdecor-0 0.2.2-1build2
libdecor-0-0 0.2.2-1build2
libdeflate 1.19-1build1.1
libdeflate0 1.19-1build1.1
libdrm 2.4.125-1ubuntu0.1~24.04.1
libdrm-amdgpu1 2.4.125-1ubuntu0.1~24.04.1
libdrm-common 2.4.125-1ubuntu0.1~24.04.1
libdrm-intel1 2.4.125-1ubuntu0.1~24.04.1
libdrm2 2.4.125-1ubuntu0.1~24.04.1
libedit 3.1-20230828-1build1
libedit2 3.1-20230828-1build1
libelf1t64 0.190-1.1ubuntu0.1
libexpat1 2.6.1-2ubuntu0.4
libext2fs2t64 1.47.0-2.4~exp1ubuntu4.1
libffi 3.4.6-1build1
libffi8 3.4.6-1build1
libfftw3-double3 3.3.10-1ubuntu3
libflac12t64 1.4.3+ds-2.1ubuntu2
libflite1 2.2-6build3
libfontconfig1 2.15.0-1.1ubuntu2
libfreetype6 2.13.2+dfsg-1ubuntu0.1
libfribidi0 1.0.13-3build1
libgbm1 25.2.8-0ubuntu0.24.04.1
libgcc-s1 14.2.0-4ubuntu2~24.04.1
libgcrypt20 1.10.3-2build1
libgdk-pixbuf-2.0-0 2.42.10+dfsg-3ubuntu3.3
libgdk-pixbuf2.0-common 2.42.10+dfsg-3ubuntu3.3
libgfortran5 14.2.0-4ubuntu2~24.04.1
libgl1 1.7.0-1build1
libgl1-mesa-dri 25.2.8-0ubuntu0.24.04.1
libglib2.0-0t64 2.80.0-6ubuntu3.8
libglvnd 1.7.0-1build1
libglvnd0 1.7.0-1build1
libglx-mesa0 25.2.8-0ubuntu0.24.04.1
libglx0 1.7.0-1build1
libgme0 0.6.3-7build1
libgmp10 2:6.3.0+dfsg-2ubuntu6.1
libgnutls30t64 3.8.3-1.1ubuntu3.5
libgomp1 14.2.0-4ubuntu2~24.04.1
libgpg-error 1.47-3build2.1
libgpg-error0 1.47-3build2.1
libgraphite2-3 1.3.14-2build1
libgsm 1.0.22-1build1
libgsm1 1.0.22-1build1
libgssapi-krb5-2 1.20.1-6ubuntu2.6
libharfbuzz0b 8.3.0-2build2
libhogweed6t64 3.9.1-2.2build1.1
libhwy1t64 1.0.7-8.1build1
libicu74 74.2-1ubuntu3.1
libidn2 2.3.7-2build1.1
libidn2-0 2.3.7-2build1.1
libiec61883 1.2.0-6build1
libiec61883-0 1.2.0-6build1
libjack-jackd2-0 1.9.21~dfsg-3ubuntu3
libjbig0 2.1-6.1ubuntu2
libjpeg-turbo 2.1.5-2ubuntu2
libjpeg-turbo8 2.1.5-2ubuntu2
libjpeg8 8c-2ubuntu11
libjpeg8-empty 8c-2ubuntu11
libjxl0.7 0.7.0-10.2ubuntu6.1
libk5crypto3 1.20.1-6ubuntu2.6
libkeyutils1 1.6.3-3build1
libkrb5-3 1.20.1-6ubuntu2.6
libkrb5support0 1.20.1-6ubuntu2.6
liblapack3 3.12.0-3build1.1
liblcms2-2 2.14-2build1
libldap2 2.6.10+dfsg-0ubuntu0.24.04.1
liblerc4 4.0.0+ds-4ubuntu2
liblilv-0-0 0.24.22-1build1
libllvm20 1:20.1.2-0ubuntu1~24.04.2
liblz4-1 1.9.4-1build1.1
liblzma5 5.6.1+really5.4.5-1ubuntu0.2
libmbedcrypto7t64 2.28.8-1
libmd 1.1.0-2build1.1
libmd0 1.1.0-2build1.1
libmount1 2.39.3-9ubuntu6.5
libmp3lame0 3.100-6build1
libmpg123-0t64 1.32.5-1ubuntu1.1
libmysofa 1.3.2+dfsg-2ubuntu2
libmysofa1 1.3.2+dfsg-2ubuntu2
libncursesw6 6.4+20240113-1ubuntu2
libnettle8t64 3.9.1-2.2build1.1
libnghttp2-14 1.59.0-1ubuntu0.2
libnorm1t64 1.5.9+dfsg-3.1build1
libnpth0t64 1.6-3.1build1
libnuma1 2.0.18-1ubuntu0.24.04.1
libogg 1.3.5-3build1
libogg0 1.3.5-3build1
libopenal-data 1:1.23.1-4build1
libopenal1 1:1.23.1-4build1
libopenjp2-7 2.5.0-2ubuntu0.4
libopenmpt 0.7.3-1.1build3
libopenmpt0t64 0.7.3-1.1build3
libopus0 1.4-1build1
libp11-kit0 0.25.3-4ubuntu2.1
libpam-modules 1.5.3-5ubuntu5.5
libpam-modules-bin 1.5.3-5ubuntu5.5
libpam-runtime 1.5.3-5ubuntu5.5
libpam0g 1.5.3-5ubuntu5.5
libpango-1.0-0 1.52.1+ds-1build1
libpangocairo-1.0-0 1.52.1+ds-1build1
libpangoft2-1.0-0 1.52.1+ds-1build1
libpciaccess 0.17-3ubuntu0.24.04.2
libpciaccess0 0.17-3ubuntu0.24.04.2
libpcre2-8-0 10.42-4ubuntu2.1
libpgm 5.3.128~dfsg-2.1build1
libpgm-5.3-0t64 5.3.128~dfsg-2.1build1
libpixman-1-0 0.42.2-1build1
libplacebo 6.338.2-2build1
libplacebo338 6.338.2-2build1
libpng1.6 1.6.43-5ubuntu0.5
libpng16-16t64 1.6.43-5ubuntu0.5
libpocketsphinx3 0.8.0+real5prealpha+1-15ubuntu5
libpostproc57 7:6.1.1-3ubuntu5
libproc2-0 2:4.0.4-4ubuntu3.2
libpsl 0.21.2-1.1build1
libpsl5t64 0.21.2-1.1build1
libpulse0 1:16.1+dfsg1-2ubuntu10.1
librabbitmq 0.11.0-1build2
librabbitmq4 0.11.0-1build2
librav1e0 0.7.1-2
libraw1394 2.1.2-2build3
libraw1394-11 2.1.2-2build3
librist 0.2.10+dfsg-2
librist4 0.2.10+dfsg-2
librsvg 2.58.0+dfsg-1build1
librsvg2-2 2.58.0+dfsg-1build1
librtmp1 2.4+20151223.gitfa8646d.1-2build7
librubberband2 3.3.0+dfsg-2build1
libsamplerate 0.2.2-4build1
libsamplerate0 0.2.2-4build1
libsasl2-2 2.1.28+dfsg1-5ubuntu3.1
libsasl2-modules-db 2.1.28+dfsg1-5ubuntu3.1
libsdl2 2.30.0+dfsg-1ubuntu3.1
libsdl2-2.0-0 2.30.0+dfsg-1ubuntu3.1
libseccomp 2.5.5-1ubuntu3.1
libseccomp2 2.5.5-1ubuntu3.1
libselinux 3.5-2ubuntu2.1
libselinux1 3.5-2ubuntu2.1
libsemanage 3.5-1build5
libsemanage-common 3.5-1build5
libsemanage2 3.5-1build5
libsensors-config 1:3.6.0-9build1
libsensors5 1:3.6.0-9build1
libsepol 3.5-2build1
libsepol2 3.5-2build1
libserd-0-0 0.32.2-1
libsharpyuv0 1.3.2-0.4build3
libshine3 3.1.1-2build1
libslang2 2.3.3-3build2
libsmartcols1 2.39.3-9ubuntu6.5
libsnappy1v5 1.1.10-1build1
libsndfile 1.2.2-1ubuntu5.24.04.1
libsndfile1 1.2.2-1ubuntu5.24.04.1
libsndio7.0 1.9.0-0.3build3
libsodium 1.0.18-1ubuntu0.24.04.1
libsodium23 1.0.18-1ubuntu0.24.04.1
libsord-0-0 0.16.16-2build1
libsoxr 0.1.3-4build3
libsoxr0 0.1.3-4build3
libspeex1 1.2.1-2ubuntu2.24.04.1
libsphinxbase3t64 0.8+5prealpha+1-17build2
libsratom-0-0 0.6.16-1build1
libsrt1.5-gnutls 1.5.3-1build2
libss2 1.47.0-2.4~exp1ubuntu4.1
libssh 0.10.6-2ubuntu0.4
libssh-4 0.10.6-2ubuntu0.4
libssh-gcrypt-4 0.10.6-2ubuntu0.4
libssl3t64 3.0.13-0ubuntu3.9
libstdc++6 14.2.0-4ubuntu2~24.04.1
libsvtav1enc1d1 1.7.0+dfsg-2build1
libswresample4 7:6.1.1-3ubuntu5
libswscale7 7:6.1.1-3ubuntu5
libsystemd0 255.4-1ubuntu8.15
libtasn1-6 4.19.0-3ubuntu0.24.04.2
libthai 0.1.29-2build1
libthai-data 0.1.29-2build1
libthai0 0.1.29-2build1
libtheora 1.1.1+dfsg.1-16.1build3
libtheora0 1.1.1+dfsg.1-16.1build3
libtiff6 4.5.1+git230720-4ubuntu2.5
libtinfo6 6.4+20240113-1ubuntu2
libtwolame0 0.4.0-2build3
libudev1 255.4-1ubuntu8.15
libudfread 1.1.2-1build1
libudfread0 1.1.2-1build1
libunibreak 5.1-2build1
libunibreak5 5.1-2build1
libunistring 1.1-2build1.1
libunistring5 1.1-2build1.1
libusb-1.0 2:1.0.27-1
libusb-1.0-0 2:1.0.27-1
libuuid1 2.39.3-9ubuntu6.5
libva 2.20.0-2ubuntu0.1
libva-drm2 2.20.0-2ubuntu0.1
libva-x11-2 2.20.0-2ubuntu0.1
libva2 2.20.0-2ubuntu0.1
libvdpau 1.5-2build1
libvdpau1 1.5-2build1
libvidstab 1.1.0-2build1
libvidstab1.1 1.1.0-2build1
libvorbis 1.3.7-1build3
libvorbis0a 1.3.7-1build3
libvorbisenc2 1.3.7-1build3
libvorbisfile3 1.3.7-1build3
libvpl2 2023.3.0-1build1
libvpx 1.14.0-1ubuntu2.3
libvpx9 1.14.0-1ubuntu2.3
libvulkan1 1.3.275.0-1build1
libwayland-client0 1.22.0-2.1build1
libwayland-cursor0 1.22.0-2.1build1
libwayland-egl1 1.22.0-2.1build1
libwebp 1.3.2-0.4build3
libwebp7 1.3.2-0.4build3
libwebpmux3 1.3.2-0.4build3
libx11 2:1.8.7-1build1
libx11-6 2:1.8.7-1build1
libx11-data 2:1.8.7-1build1
libx11-xcb1 2:1.8.7-1build1
libx264-164 2:0.164.3108+git31e19f9-1
libx265-199 3.5-2build1
libxau 1:1.0.9-1build6
libxau6 1:1.0.9-1build6
libxcb 1.15-1ubuntu2
libxcb-dri3-0 1.15-1ubuntu2
libxcb-glx0 1.15-1ubuntu2
libxcb-present0 1.15-1ubuntu2
libxcb-randr0 1.15-1ubuntu2
libxcb-render0 1.15-1ubuntu2
libxcb-shape0 1.15-1ubuntu2
libxcb-shm0 1.15-1ubuntu2
libxcb-sync1 1.15-1ubuntu2
libxcb-xfixes0 1.15-1ubuntu2
libxcb1 1.15-1ubuntu2
libxcrypt 1:4.4.36-4build1
libxcursor 1:1.2.1-1build1
libxcursor1 1:1.2.1-1build1
libxdmcp 1:1.1.3-0ubuntu6
libxdmcp6 1:1.1.3-0ubuntu6
libxext 2:1.3.4-1build2
libxext6 2:1.3.4-1build2
libxfixes 1:6.0.0-2build1
libxfixes3 1:6.0.0-2build1
libxi 2:1.8.1-1build1
libxi6 2:1.8.1-1build1
libxkbcommon 1.6.0-1build1
libxkbcommon0 1.6.0-1build1
libxml2 2.9.14+dfsg-1.3ubuntu3.7
libxrandr 2:1.5.2-2build1
libxrandr2 2:1.5.2-2build1
libxrender 1:0.9.10-1.1build1
libxrender1 1:0.9.10-1.1build1
libxshmfence 1.3-1build5
libxshmfence1 1.3-1build5
libxss 1:1.2.3-1build3
libxss1 1:1.2.3-1build3
libxv 2:1.0.11-1.1build1
libxv1 2:1.0.11-1.1build1
libxvidcore4 2:1.3.7-1build1
libxxf86vm 1:1.1.4-1build4
libxxf86vm1 1:1.1.4-1build4
libxxhash0 0.8.2-2build1
libzimg2 3.0.5+ds1-1build1
libzix-0-0 0.4.2-2build1
libzmq5 4.3.5-1build2
libzstd 1.5.5+dfsg2-2build1.1
libzstd1 1.5.5+dfsg2-2build1.1
libzvbi-common 0.2.42-2
libzvbi0t64 0.2.42-2
lilv 0.24.22-1build1
llvm-toolchain-20 1:20.1.2-0ubuntu1~24.04.2
lm-sensors 1:3.6.0-9build1
locales 2.39-0ubuntu8.7
login 1:4.13+dfsg1-4ubuntu3.2
logsave 1.47.0-2.4~exp1ubuntu4.1
lz4 1.9.4-1build1.1
mawk 1.3.4.20240123-1build1
mbedtls 2.28.8-1
mesa 25.2.8-0ubuntu0.24.04.1
mesa-libgallium 25.2.8-0ubuntu0.24.04.1
mount 2.39.3-9ubuntu6.5
mpg123 1.32.5-1ubuntu1.1
ncurses 6.4+20240113-1ubuntu2
ncurses-base 6.4+20240113-1ubuntu2
ncurses-bin 6.4+20240113-1ubuntu2
nettle 3.9.1-2.2build1.1
nghttp2 1.59.0-1ubuntu0.2
norm 1.5.9+dfsg-3.1build1
npth 1.6-3.1build1
numactl 2.0.18-1ubuntu0.24.04.1
ocl-icd 2.3.2-1build1
ocl-icd-libopencl1 2.3.2-1build1
onevpl 2023.3.0-1build1
openal-soft 1:1.23.1-4build1
openjpeg2 2.5.0-2ubuntu0.4
openldap 2.6.10+dfsg-0ubuntu0.24.04.1
openssl 3.0.13-0ubuntu3.9
opus 1.4-1build1
p11-kit 0.25.3-4ubuntu2.1
pam 1.5.3-5ubuntu5.5
pango1.0 1.52.1+ds-1build1
passwd 1:4.13+dfsg1-4ubuntu3.2
pcre2 10.42-4ubuntu2.1
perl 5.38.2-3.2ubuntu0.2
perl-base 5.38.2-3.2ubuntu0.2
pixman 0.42.2-1build1
pocketsphinx 0.8.0+real5prealpha+1-15ubuntu5
procps 2:4.0.4-4ubuntu3.2
pulseaudio 1:16.1+dfsg1-2ubuntu10.1
rtmpdump 2.4+20151223.gitfa8646d.1-2build7
rubberband 3.3.0+dfsg-2build1
rust-rav1e 0.7.1-2
sed 4.9-2build1
sensible-utils 0.0.22
serd 0.32.2-1
shadow 1:4.13+dfsg1-4ubuntu3.2
shared-mime-info 2.4-4
shine 3.1.1-2build1
slang2 2.3.3-3build2
snappy 1.1.10-1build1
sndio 1.9.0-0.3build3
sord 0.16.16-2build1
speex 1.2.1-2ubuntu2.24.04.1
sphinxbase 0.8+5prealpha+1-17build2
sratom 0.6.16-1build1
srt 1.5.3-1build2
svt-av1 1.7.0+dfsg-2build1
systemd 255.4-1ubuntu8.15
sysvinit 3.08-6ubuntu3
sysvinit-utils 3.08-6ubuntu3
tar 1.35+dfsg-3build1
tiff 4.5.1+git230720-4ubuntu2.5
twolame 0.4.0-2build3
tzdata 2026a-0ubuntu0.24.04.1
ubuntu-keyring 2023.11.28.1
unminimize 0.2.1
util-linux 2.39.3-9ubuntu6.5
vulkan-loader 1.3.275.0-1build1
wayland 1.22.0-2.1build1
x11-common 1:7.7+23ubuntu3
x264 2:0.164.3108+git31e19f9-1
x265 3.5-2build1
xkb-data 2.41-2ubuntu1.1
xkeyboard-config 2.41-2ubuntu1.1
xorg 1:7.7+23ubuntu3
xvidcore 2:1.3.7-1build1
xxhash 0.8.2-2build1
xz-utils 5.6.1+really5.4.5-1ubuntu0.2
zeromq3 4.3.5-1build2
zimg 3.0.5+ds1-1build1
zix 0.4.2-2build1
zlib 1:1.3.dfsg-3.1ubuntu2.1
zlib1g 1:1.3.dfsg-3.1ubuntu2.1
zvbi 0.2.42-2
Changes for packages of type generic (3 changes)
Package Version
daschswiss/sipi:v4.1.1
Version
daschswiss/sipi:latest
bash 5.3.9
curl 8.19.0
ffmpeg 8.0.1
Changes for packages of type nix (120 changes)
Package Version
daschswiss/sipi:v4.1.1
Version
daschswiss/sipi:latest
acl 2.3.2
alsa-lib 1.2.15.3
alsa-topology-conf 1.2.5.1
alsa-ucm-conf 1.2.15.3
attr 2.5.2
bash 5.3p9
bash-interactive 5.3p9
brotli 1.2.0
bzip2 1.0.8
cjson 1.7.19
coreutils 9.10
curl 8.19.0
dav1d 1.5.3
dbus 1.16.2
dconf 0.49.0
dejavu-fonts-minimal 2.37
dns-root-data 2025-04-14
expat 2.7.5
ffmpeg-headless 8.0.1
fftw-single 3.3.10
flac 1.5.0
fontconfig 2.17.1
freetype 2.14.2
fribidi 1.0.16
gcc 15.2.0
giflib 5.2.2
glib 2.86.3
glibc 2.42-61
gmp-with-cxx 6.3.0
gnutls 3.8.12
graphite2 1.3.14
harfbuzz 12.3.0
hwdata 0.406
keyutils 1.6.3
kmod 31
krb5 1.22.1
lame 3.100
lcms2 2.18
lerc 4.1.0
libaom 3.12.1
libass 0.17.4
libbluray 1.4.1
libdeflate 1.25
libdrm 2.4.131
libevent 2.1.12
libffi 3.5.2
libidn2 2.3.8
libjack2 1.9.22
libjpeg-turbo 3.1.4
libmpg123 1.33.4
libogg 1.3.6
libopenmpt 0.8.6
libopus 1.6.1
libpciaccess 0.19
libpng-apng 1.6.56
libpsl 0.21.5
libpulseaudio 17.0
librist 0.2.11
libsamplerate 0.2.2
libselinux 3.10
libsndfile 1.2.2
libssh 0.12.0
libssh2 1.11.1
libtasn1 4.21.0
libtheora 1.2.0
libtiff 4.7.1
libtool 2.5.4
libunistring 1.4.2
libva-minimal 2.23.0
libvmaf 3.0.0
libvorbis 1.3.7
libvpx 1.16.0
libwebp 1.6.0
libx11 1.8.13
libxau 1.0.12
libxcb 1.17.0
libxcrypt 4.5.2
libxdmcp 1.1.5
libxml2 2.15.1
mbedtls 3.6.5
mpg123 1.33.4
ncurses 6.6
nettle 3.10.2
nghttp2 1.68.1
nghttp3 1.15.0
ngtcp2 1.22.0
nss-cacert 3.121
numactl 2.0.18
ocl-icd 2.3.4
openapv 0.2.1.2
openjpeg 2.5.4
openssl 3.6.1
p11-kit 0.26.2
pcre2 10.46
publicsuffix-list-0 unstable-2026-03-26
readline 8.3p3
sipi 4.1.1
soxr 0.1.3
speex 1.2.1
speexdsp 1.2.1
srt 1.5.4
svt-av1 3.1.2
systemd-minimal 260.1
systemd-minimal-libs 260.1
tini 0.19.0
tzdata 2026a
unbound 1.24.2
util-linux-minimal 2.42
v4l-utils 1.32.0
vid.stab-1.1.1 unstable-2025-08-21
vulkan-loader 1.4.341.0
x264 0-unstable-2025-01-03
x265 4.1
xgcc 15.2.0
xvidcore 1.3.7
xz 5.8.3
zimg 3.0.6
zlib 1.3.2
zstd 1.5.7
zvbi 0.2.44

subotic and others added 3 commits May 3, 2026 15:27
…; add ADR-0006

Probe 3 covers `format_handlers/` (renamed from `formats/`). The five
codec subclasses are textbook deep modules (1:10 to 1:20 hdr:cpp ratios);
the base `SipiIO.h` is bloated with public types; format-handler headers
have a cross-tree `../../src/` include and pull the full SipiImage
definition unnecessarily.

Three structural findings drove ADR-level changes:

1. ADR-0004's `read_shape` is the existing `getDim()` virtual on `SipiIO`
   renamed; the actual change is giving it an Essentials-packet fast path
   in service-master-format handlers, not adding a new method.

2. Service masters move to S3 in 3-6 months (NFS-mounted ZFS today). This
   shifts ADR-0004's load-bearing rationale from "avoid format-native
   parsing" (microseconds) to "minimize range GETs" (milliseconds per
   round-trip). The Essentials packet's role broadens from shape-cache to
   shape + S3-access file-structure index, fetched in one fixed-prefix
   range GET. ADR-0004 expanded accordingly.

3. ADR-0006 modernizes the format-handler API: `std::expected<T, E>` over
   `bool` returns, default args over overload sets, typed sum types over
   magic-string filepaths, per-codec variant params over stringly-typed
   maps, plus a `SIPI_TRY` macro for Rust-?-style ergonomics. Choice of
   `std::expected` (over `absl::StatusOr`) follows the new "Rust-aligned,
   transitional C++" method invariant: SIPI's C++ is transitional; we
   don't harden it for the long term.

Glossary deltas: `Master file` / `Master format` split into `Service
master` / `Service master format` (read by SIPI server) and `Archival
master` / `Archival master format` (OAIS-archived; out of SIPI server's
read path; produced by SIPI CLI in the future workflow). New terms:
`Object storage`, `Range GET`, `read_shape`. Sharpening: `Codec`,
`Pyramidal TIFF` (now service-only), `Essentials packet` (now also S3
index).

Two new method invariants: Rust-aligned transitional C++ (don't adopt
upstream libraries for ergonomics that won't survive the Rust port);
remote-access discipline (one fixed-offset prefix read + one targeted
read; walking IFD chains and box hierarchies are anti-patterns).

No code changes; design checkpoint only.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Probe 4 covers `SipiImage` — the highest-leverage decomposition target
in the codebase. Six distinct responsibility groups in one ~2,526-line
class:

1. Image data container (geometry + raw `byte *pixels`)
2. Metadata holder (5 standards bundle)
3. Format I/O facade (static `io` map + read/write/getDim dispatch)
4. Image processing (12 methods: crop/scale/rotate/convert/dither/...)
5. HTTP integration (`shttps::Connection*` field)
6. Algebra/comparison operators

Plus specific code smells: raw owning pointer (manual mem mgmt; reason
for explicit deep-copy + move ceremony); 5 friend-class declarations
(encapsulation deliberately broken); JPEG-specific `app14_transform`
field on the universal type; static IO registry (misplaced concern);
three scale methods (unstable API); inconsistent metadata accessors
(no `getIptc`); heavy header transitively-includes (shttps + format
handlers + 5 metadata standards + exiv2 + lcms2).

ADR-0007 decomposes into:

- `src/image/` — pure value type (~15 methods; RAII pixel buffer)
- `src/image_processing/` — free functions over `const Image&`

Three concerns leave the class entirely:
- Static `io` map → `format_handlers/`
- `conobj` field → subsumed by `OutputSink::HttpSink` (ADR-0006)
- `app14_transform` → consumed at JPEG decode time

Migration: 8 staged sub-PRs, each independently reversible. First is
a non-code audit of every internal `pixels` use (read/write/pointer-
pass/arithmetic/new-delete classification) plus a benchmark of
representative decode + scale + encode workloads. Gates the rest;
addresses the legitimate concern that pixel-buffer code may do
"crazy stuff" depending on raw-pointer semantics.

Performance preserved: `vector<byte>::operator[]` and `byte_ptr[i]`
compile to identical machine code; `vec.data()` returns a `byte*`
indistinguishable from raw for any C-API use. Fallback
`unique_ptr<byte[]>` if benchmark shows any regression.

Dual-write optimization preserved via `TeeSink` composition in the
`OutputSink` variant per ADR-0006: encoder writes once, each chunk
broadcasts to all sub-sinks (HttpSink + FilePath + future S3Sink).

Bazel-package-dependent steps (move static io map; remove friends with
public API; extract image-processing) gated on DEV-6341 reaching Y+6.
Non-Bazel-dependent steps (raw-pointer audit, vector swap,
app14_transform removal) can land in CMake era.

Glossary deltas: add `Image processing` (umbrella for the new
free-function module), `Tee sink` (provisional, OutputSink composition
primitive). Sharpen `Image` (code-level class becomes narrow value
type; domain term unchanged).

format_handlers Linear tree (DEV-6374 + 13 children) gains explicit
`blockedBy` relations:
- DEV-6375 (Bazel package promotion) ← DEV-6341 (Bazel migration umbrella)
- DEV-6376 (relocate headers) ← DEV-6375
- DEV-6379 (ADR-0004 fast path) ← DEV-6378 (rename)
- DEV-6387 (per-handler unit tests) ← DEV-6375

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
DEV-6353 is the canonical Y+8 tracker (child of DEV-6341 Bazel
migration umbrella). Adds method invariant noting:

- Per-module Bazel-package promotions surfaced by these probes are Y+8
  work, dependency-modelled against DEV-6353 (not DEV-6341 directly).
- Hard prerequisite is DEV-6349 (Y+7 cleanup) merging — full Bazel-only
  state — not Y+6 as ADR-0003 originally said.
- New packages created by probes (image/, image_processing/ from
  Probe 4) extend Y+8a..Y+8e's currently enumerated scope; may land as
  additional Y+8x sub-PRs when DEV-6353 is decomposed (per its note:
  "Decompose when DEV-6349 is in QA").

Linear dependency model updated:

- DEV-6375 (format_handlers Bazel package) now blockedBy DEV-6353
  (was DEV-6341DEV-6353 is more precise).
- DEV-6395 (extract image_processing/) now blockedBy DEV-6353 (creates
  a new Bazel package, requires Y+8 layout).
- DEV-6374 (format_handlers refactor parent) relatedTo DEV-6353 —
  Y+8b ≈ DEV-6375 + DEV-6376 + DEV-6387 essentially.
- DEV-6388 (SipiImage decomposition parent) relatedTo DEV-6353 — work
  extends Y+8d (root files flip) by also splitting SipiImage.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant