217 lines
13 KiB
Plaintext
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 "… 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.
|