Files
werkregie/doc/werkregie.werkbaum
claude-codeandClaude Opus 5.5 273c9f7af0
werkator build succeeded after 00:49
werkator/dependencies build failed after 00:07
Werkbaum: #ops.deps no longer says that JDK 21 stays
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 13:01:57 +02:00

217 lines
13 KiB
Plaintext

%% Werkregie, planned with Werkbaum (https://werkbaum.javagil.de): what exists, what comes next.
%% Status: [^] live on mih09 or in use, [x] done but not in use, [~] in work, [ ] planned, [?] idea, [-] dropped.
%% Each PR updates this file with the status its merge brings: main is what runs, there are no release commits,
%% so the PR that finishes a feature already sets it to [^]. The block behind --- explains the nodes with an id.
%% View: https://werkbaum.javagil.de/?sourceUrl=https://git.javagil.de/mi/werkregie/raw/branch/main/doc/werkregie.werkbaum
[~] #werkregie: Werkregie https://git.javagil.de/mi/werkregie
- [^] #dash: Dashboard https://werkregie.javagil.de
" What the coding agents and the build pipeline are doing, read-only, with links back to the tools.
- [^] #dash.sources: Sources
- [^] #dash.claude: Claude Code sessions, Desktop and terminal (S)
" Busy, waiting and closed sessions; the resume command to copy.
- [^] #dash.codex: Codex threads, Desktop, IDE and CLI (S)
" Codex' SQLite state read-only; a running turn from the tail of the rollout file.
- [^] #dash.werkator: Werkator builds, any number of instances (S)
" Running and finished builds, @ai-review builds as werkrevisor;
" three repositories at a time with a 30 s timeout; the control token reveals private repositories.
- [^] #dash.gitea: Gitea, any number of instances
- [^] Open pull requests, scope mine or all (S)
" The token comes from a tea login, by name or user.
- [^] Commit statuses: Werkator, werkrevisor run and verdict (S)
- [^] #dash.flags: Markers by what a pull request asks of whom (S)
" Festgefahren, Dein Approval, Mergen, Nacharbeit, Wartet auf Review, Von dir approved;
" drafts carry none, are dimmed and sorted last.
- [^] #dash.merge: Mergen also for an agent's pull request that passed everything (XS)
" Werkregie PR#17; not while Gitea's automerge is scheduled.
- [^] #dash.order: Pull requests sorted by the user's next step, the longest waiting first (XS)
" Werkregie PR#17; ORANGE before YELLOW.
- [^] Own activity in the history (XS)
- [^] #dash.projects: Projects matched by repository name across sources (XS)
- [^] #dash.taiga: Taiga, any number of instances and projects
- [^] Open stories, tasks and issues assigned to the user (S)
" Werkregie PR#21: panel Aufgaben; login by user and password from the environment.
" Werkregie PR#23: the API address from Taiga's conf.json, as on a host of its own.
- [^] Configured statuses first, in their order (XS)
- [ ] A story links to its pull requests and its Werkbaum node (S)
- [?] Other task boards than Taiga
- [~] #dash.matrix: Matrix messages with the user's own account
" Werkregie PR#8: walking skeleton; PR#12: verification and key backup.
- [^] #dash.matrix.sdk: Trixnity on the JVM, with vodozemac rather than libolm (XS)
" Werkregie PR#5: it does; the spike is in dashboard/spikes/matrix-sdk.
- [^] Login as a device of its own, in the relay (S) :#dash.matrix.sdk
" Werkregie PR#8: werkregie-dashboard matrix login; the session lives in an H2 file.
" Werkregie PR#11: one client per machine; a second process reads along.
- [^] #dash.matrix.verify: Device verified by the recovery key (S)
" Werkregie PR#12: werkregie-dashboard matrix verify; also takes the security phrase.
- [^] Room keys from the key backup (S) :#dash.matrix.verify
" Werkregie PR#12: rows shown as encrypted get another try when the relay starts.
+ [ ] Device verified by emoji comparison (S)
- [^] Direct messages, mentions in every room, configured rooms (S)
- [^] The server gets room, sender, time and the start of the text (S)
- [^] Panel for the messages (S)
" Werkregie PR#15: rows lead with room and sender.
- [^] #dash.matrix.last: Each direct chat and configured room keeps its last message (S)
" Werkregie PR#13; mentions stay within the period.
- [^] #dash.matrix.read: Unread messages stand out, read ones are subdued (S)
" Werkregie PR#13: read receipts; PR#14: also Element's read marker m.fully_read.
- [^] An empty panel counts the older messages and offers 7 days (XS)
- [ ] #dash.matrix.accounts: Several Matrix accounts and servers (M)
- [^] #dash.matrix.link: Link into Element (XS)
+ [ ] Older messages than the first sync brings (S)
- [^] #dash.page: Page
- [^] Panels: Läuft jetzt, Offene Sessions, Offene Pull Requests, Verlauf (S)
" Three and a half rows until opened; headings name the tools the rows come from.
- [^] Filters: source chips, project combobox, time window, search (S)
- [^] Two-line pull request rows with coloured marker chips (XS)
- [^] Werkator's design, light and dark with a toggle (S)
- [^] Reloads every 5 s while visible; cached data served at once (XS)
- [^] #dash.modes: Modes
- [^] #dash.local: local: everything read on this machine, loopback only, no token (XS)
- [^] #dash.server: server: Werkator, Gitea and relays on a host
- [^] Access token as cookie or bearer; demo data without it (S)
- [^] Relay registry: stale, gone, kept in relays.json (S)
- [^] forget-relay NAME (XS)
- [^] init server: systemd unit and .htaccess (XS)
- [^] Runtime bundle with its own JRE (S)
- [^] #dash.relay: relay: reports local sessions to the server every 5 s
" On think as a systemd user unit; outgoing connections only.
+ [ ] Relays on the Omarchy hosts (XS)
- [~] #dash.pwa: Frontend as a PWA
- [^] Web app manifest and icons (XS)
" Werkregie PR#2; the title bar follows the header's light or dark colour.
- [^] Service worker: app shell offline, API never cached (S)
" Werkregie PR#2: network first; Chrome finds no installability errors.
- [^] Last state shown offline, marked as stale (S)
" Werkregie PR#19: localStorage, an amber banner with the age; never demo data.
- [^] Installed and checked offline on Android (XS)
" 2026-10-11: flight mode, a new start shows the last state under the banner.
- [ ] Installed and checked on iOS and desktop (XS)
+ [?] Push notification when a pull request needs the user
+ [?] #dash.notify: Matrix as a notification channel, for colleagues too
- [?] #dash.store: One database for Werkregie, to be discussed
- [ ] #ops: Build and delivery
- [^] #ops.werkator: Werkator builds werkregie (S)
" Werkregie PR#9: .werkator.yml; mih09 registers the repository since 2026-10-10.
- [^] #ops.werkrevisor: werkrevisor reviews werkregie's pull requests (XS) :#ops.werkator
" Werkregie PR#10: risk categories; the human set branch protection and the reviewer's rights.
- [ ] #ops.github: Werkator pushes a green main to GitHub (XS) :#ops.werkator
- [ ] #ops.port: Port 18091 confirmed with Hostsharing (XS)
- [^] #ops.deps: Kotlin 2.4, Gradle 9.8.1 and current libraries (XS)
" Werkregie PR#6; Temurin 25 since werkregie PR#24, see #ops.jdk.
- [^] #ops.workflow: The shared agentic workflow of all werk repositories (S)
" Werkregie PR#7: doc/agentic-workflow.md, AGENTS.md, CLAUDE.md and PR documents.
" Werkregie PR#18: the purpose line of a scenario reads "&hellip; so that …".
- [^] #ops.master: Master copy of the shared workflow (XS) :#ops.workflow
" Werkregie PR#16; decided by mi on 2026-10-11.
- [~] #ops.jdk: Temurin 25 as JDK and runtime of all werk repositories
" Werkregie PR#20: doc/adrs/0001-2026-10-11.temurin-25.md; decided by mi on 2026-10-11.
- [x] Decision as an ADR (XS)
- [x] Revision: Temurin 25 comes from Foojay (XS)
" Werkregie PR#22; decided by mi on 2026-10-11.
- [x] werkregie builds and runs on Temurin 25 (XS)
" Werkregie PR#24; the runtime bundle carries Temurin 25.0.4.
- [-] Werkator's build environment with Temurin 25
" Foojay caches the JDK in the shared Gradle home; a rootfs would need an upload for each Java update.
- [?] #orchestrator: Orchestrator for agentic software development
" Designed in doc/agentic-flow.werkbaum; nodes move here once they are decided.
---
#dash.flags
Most urgent first: Festgefahren (werkrevisor escalated, RED for an hour
without a new commit, ERROR, or a run without verdict), Dein Approval (a
foreign pull request with a final ORANGE or YELLOW, or without werkrevisor),
Mergen (the user's own pull request approved by another human, or a foreign
one approved by anyone but its author, all checks green, no automerge),
Nacharbeit (conflict or red build on the user's own pull request), Wartet auf
Review (the user's own pull request waits for another human), Von dir
approved. Only the chips are coloured, not the row.
#dash.pwa
User request of 2026-10-10: the Werkregie frontend becomes a progressive
web app, installable on phone and desktop.
User decision of 2026-10-10: the last state, with pull request and session
data, may be kept in the browser's storage for the offline view.
The service worker caches the page, styles, fonts and icons only. The API
answers carry private data behind the access token and are never cached by
the service worker; offline the page shows the last state it keeps in the
browser's storage, marked with its age. Forgetting the access token deletes
it. The local mode on localhost counts as a secure context, so the PWA works
there too.
#dash.matrix
User request of 2026-10-10: messages that matter to the user show in
Werkregie, read-only. Werkregie signs in with the user's own account as a
device of its own, because many rooms are end-to-end encrypted and only a
device of the account can read them. It runs in the relay, so the device
keys stay on the user's machine.
The homeserver is configured; there is no default, and no real homeserver
appears in the repository. Shown: every direct message, mentions in every
room (found after decryption, since the server cannot see them in encrypted
rooms), and all messages of the configured rooms. The server gets only room,
sender, time and the start of the text.
Reading Element Desktop's own store was dropped: it has no interface, and
its data lies encrypted in IndexedDB.
#dash.matrix.sdk
Checked with Trixnity 5.9.2 on 2026-10-10, without signing in anywhere.
It compiles with the dashboard's Kotlin 2.2.21 on Temurin 21 and pulls
kotlin-stdlib 2.3.21. vodozemac comes through JNI: the jar carries the
native library for Linux x86-64 and aarch64 and unpacks it into the temp
directory, which must allow execution; it needs glibc 2.34 (mih09 has
2.36). Olm and Megolm round trips work, and so do discovery and versions
against matrix.org and the user's homeserver.
For the bundle: 49 jars and 24 MB more, and jlink needs java.logging,
java.management, java.instrument and jdk.unsupported besides the
modules it has. The client's store comes next:
trixnity-client-repository-exposed on the sqlite-jdbc the dashboard has.
#dash.taiga
User request of 2026-10-11: plan a Taiga integration. User decisions of
2026-10-11: the open user stories, tasks and issues assigned to the user;
several projects per instance; instances and projects only from the
configuration; the statuses "In Arbeit", then "Bereit" first, configurable,
other open ones after them; login by user and password from the
environment; read by the server and the local mode. The configuration is a
list of task boards with a type, so that more instances and other task
boards fit in later. A link of a story to its pull requests and its
Werkbaum node, which marks a subtree with &taiga.<project-slug>, follows in
a PR of its own.
#dash.matrix.accounts
matrix becomes a list of named accounts, as giteas; a single block is still
read. Each account gets its own directory matrix/<name>/ with store, lock
and messages.json, a source matrix:<name>, and matrix login|verify <name>.
#dash.matrix.link
Element Desktop opens element:// links (io.element.desktop:// for the
stable app when a nightly build holds element://); on a phone matrix.to
opens Element. PR#8 makes it configurable as matrix.link, matrix.to by
default.
#dash.store
The Matrix client needs a store; Trixnity's Exposed repositories need
R2DBC, which SQLite does not offer, so PR#8 uses an H2 file for it.
sqlite-jdbc stays as long as Werkregie reads Codex: it only reads Codex'
own database. Whether Werkregie gets one database of its own, H2 or
another, and what moves into it, is to be discussed.
#dash.notify
Werkregie posts what a pull request asks of whom into a Matrix room, for
colleagues too. A separate feature, later. A bot account of its own will
do; which events go to whom is open.
#ops.github
GitHub carries main only. Until Werkator does it, main is pushed by hand
with git push github.
#ops.port
The server runs on port 18091, picked because it was free; Hostsharing has
not confirmed it for the booked service yet.