Files
mw-pfeddersheim-workstation/docs/tech/stack.md
T
mw ce99f58374 docs: Caddy manual override + OnlyOffice MCP SSE investigation (#92)
Record the Caddy reverse-proxy at /etc/caddy/ (14 *.localhost sites,
mkcert TLS, systemd caddy.service) as a manual override in
docs/tech/manual-overrides.md - no caddy Ansible role exists yet.

Add a 'Local Dev Services' section to docs/tech/stack.md listing all
*.localhost sites and useful Caddy commands.

New learning record docs/learnings/2026-07-06-caddy-onlyoffice-mcp-sse-
investigation.md: Caddy emits 'context canceled' SSE aborts (~1.5ms) on
onlyoffice.localhost/mcp -> localhost:3847. Upstream verified alive
(HTTP 406 to plain GET = expected). Handed off to GitLab issue
satware/mcp/onlyoffice#92 with 5 hypotheses, 7 tasks, and a proposed
flush_interval -1 + transport http { versions 1.1 } mitigation (not
applied yet to avoid masking root cause).
2026-07-06 08:58:27 +02:00

6.5 KiB

description, tags, last_updated
description tags last_updated
Detailed inventory of the core software stack, OS context, and maintenance policies for the mw-pfeddersheim-workstation.
software-stack
inventory
tech-stack
2026-07-06

Software Stack - mw-pfeddersheim-workstation

Core Development Environment

Technology Version Description
Node.js 25.6.1 Primary JavaScript/TypeScript runtime
Python 3.14.3 Secondary scripting and AI automation language
PHP 8.5.3 (CLI) Legacy and ERP integration language
Ansible 2.20.2 (core) Infrastructure provisioning and configuration
Docker 29.2.1 Containerization and environment isolation
Git latest Version control
ripgrep latest Fast line-oriented search tool (rg)
bat latest A cat clone with syntax highlighting
rustdesk latest Remote management via Tailscale

Desktop Environment

|| Technology | Version | Description | ||------------|---------|-------------| || Hyprland | 0.55.2 | Wayland compositor (uwsm-managed) | || Waybar | latest | Status bar (with USB auto-mount module) | || Kitty | latest | GPU-accelerated terminal emulator | || Fuzzel | latest | Application launcher (preferred over Wofi) | || Dunst | latest | Notification daemon | || yazi | latest | Terminal file manager (full deps: chafa, 7zip, resvg, etc.) |

Known Issues (2026-05-22 Boot Audit)

Domain Issue Status
PCIe slot GPU in bottom PCIEX4 slot (PCIe 2.0 x4, ~2 GB/s) instead of top PCIEX16 (PCIe 3.0 x16, ~16 GB/s). 8x bandwidth loss Pending: physical move required
PCIe slot NVMe Samsung PM9A1 running Gen2 x4 (8 GT/s) instead of Gen3 x4 (16 GT/s). May resolve after GPU slot fix + BIOS Gen3 setting Pending: BIOS tuning
Idle daemon hypridle SEGV crash loop — sdbus-cpp 2.3.0 ABI break Fixed: sdbus-cpp upgraded to 2.3.1-1
Webcam (UVC) Device 1-10 has multiple UVC control failures (zoom/pan/tilt/iris non-functional due to firmware non-compliance) Known hardware limitation, core capture works
KVM /dev/kvm unavailable — libvirtd cannot use hardware acceleration Open — check BIOS VT-x/AMD-V
Wi-Fi regulatory regulatory.db firmware missing — channels restricted Open — install wireless-regdb
D-Bus Stale org.kde.kwalletd6.service file; dunst/kscreen naming mismatches Fixed: kwalletd6 stub removed; kscreen/kscreenlocker/libkscreen uninstalled (35 MiB)
XDG portals Deprecated UseIn key usage (portals.conf preferred) Low priority, functional

Removed (2026-05-22, ADR 0007): All X11 display managers (lightdm, sddm), X11 video/input drivers (xf86-*), X11 tools (xterm, xorg-xinit, x11vnc, etc.), entire KDE Plasma stack (kwin, plasma-desktop, plasma-workspace, plasma-nm, plasma-pa, powerdevil, etc.), and Dolphin (replaced by yazi). greetd+tuigreet is the active DM. Screenshots use grim+slurp+grimblast.

Browsers

Technology Version Notes
Google Chrome 148.0.7778.178 (AUR) Sole browser — Wayland-native, VA-API on NVIDIA
Chromium removed All artifacts cleaned 2026-05-22 (see ADR 0006)

OS Context

  • OS: Linux (Manjaro/Arch Linux based)
  • Architecture: x86_64

Package Domain Classification (ADR 0007 Tier 4)

Packages previously listed as "Misc" reclassified to functional domains:

Package New Domain Role
uv Python Toolchain Fast Python package/env manager
jq Shell/Terminal JSON processor
inxi Hardware System hardware info
lsof Core OS List open files
iproute2 Network Advanced routing/networking
openresolv Network DNS resolver management
perl-image-exiftool Dev Tools Metadata read/write
icoutils Dev Tools ICO/ANE cursor extraction
innoextract-git Dev Tools Inno Setup installer extraction
opencl-headers GPU Compute OpenCL C headers
libxnvctrl-580xx NVIDIA NVML/XNVCTRL for 580xx
zram-generator Core OS Systemd zram swap generator
mkinitcpio-openswap Core OS Swap resume hook for mkinitcpio

Maintenance Policies

  • Updates: System-wide updates via pacman managed through maintenance scripts.
  • Node.js: Global packages managed via pnpm.
  • Python: Use uv for environment management.
  • PHP: Managed via system package manager, focused on CLI execution.

Tool Path Summary

  • Ansible: /usr/bin/ansible
  • Python: /usr/bin/python
  • Docker: /usr/bin/docker

Local Dev Services (Manual - not Ansible-managed)

System-level services running on this workstation that are configured manually outside this repo's Ansible roles. See docs/tech/manual-overrides.md for the full override table and docs/learnings/2026-07-06-caddy-onlyoffice-mcp-sse-investigation.md for the active Caddy/OnlyOffice investigation.

Caddy (port 443, systemd caddy.service)

Item Value
Package caddy (pacman)
Service caddy.service (enabled, runs as caddy user)
Config /etc/caddy/Caddyfile + /etc/caddy/conf.d/localhost-dev.conf
TLS mkcert-generated pair at /etc/caddy/localhost{,-key}.pem
Admin endpoint Unix socket /run/caddy/admin.socket
Sites 14 *.localhost virtual hosts (see table below)

*.localhost sites

Site Backend / Handler Notes
mcp.localhost reverse_proxy localhost:50880 MCP server (node, pid 1167)
artifacts.localhost file_server browse root /var/www/artifacts Static artifacts
onlyoffice.localhost reverse_proxy localhost:3847 OnlyOffice MCP server; emitting context canceled SSE aborts (issue #92)
project-1.localhost ... project-10.localhost respond "project-N - placeholder" 10 reserved placeholders
demo.satware.com.localhost reverse_proxy localhost:38081 webdevops/php-apache-dev container

Wildcard cert covers one level only. demo.satware.com.localhost works (single label under *.localhost); deeper nesting (e.g. sub.demo.satware.com.localhost) would NOT be covered.

Useful Caddy commands

sudo caddy validate --config /etc/caddy/Caddyfile --adapter caddyfile
sudo systemctl reload caddy
sudo journalctl -u caddy --no-pager -n 50
curl -sk https://onlyoffice.localhost/ping   # test (skips cert verify)