kyle
d9f8fa9331
gatewayd: approvals::text, the posts that show an approval
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-24 04:42:37 -07:00
kyle
18791ab389
gatewayd: mm, patch_post and username
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-24 04:36:45 -07:00
kyle
365e50081d
gatewayd: strip a leading mention of this bot; recognise approval commands
2026-09-24 04:33:03 -07:00
kyle
b45ca14c14
gatewayd: config, [approvals] users and socket
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-24 04:28:26 -07:00
kyle
e0560ab996
brokerd: courier, carrying pending approvals to gatewayd and answers back
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-24 04:25:07 -07:00
kyle
412f80c470
brokerd: config, [gateway] socket for Mattermost approvals
2026-09-24 04:18:04 -07:00
kyle
a00711e379
brokerd: answers carry the Mattermost post; Table::contains
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-24 04:15:11 -07:00
kyle
a5c37d8756
bxctl: deny, another name for refuse
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-24 04:11:01 -07:00
kyle
ebb78e816d
proto: gateway, the four messages between brokerd and gatewayd
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-24 04:07:46 -07:00
kyle
db3f9ed01b
proto: escape, moved from bxctl so gatewayd shows the same thing
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-24 04:01:03 -07:00
kyle
10c80b74f3
gatewayd: read a secret file from the file that was checked
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-24 01:33:36 -07:00
kyle and Claude Opus 5.5
0081f24b70
gatewayd: strict status lines and chunk lines; no as casts (M4a review, findings 1 and 3)
...
A status line splits on single spaces only, and every chunk line must end in CRLF. The bounded
`as` casts in http.rs, handshake.rs and proto's sha1.rs become try_from and from.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com >
2026-09-24 01:23:51 -07:00
kyle
09b074c121
gatewayd: main, serve --config with its start checks
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-24 01:00:22 -07:00
kyle
ed361db718
gatewayd: serve, the event loop, typing, catch-up and reconnecting
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-24 00:55:58 -07:00
kyle
d1d8531495
gatewayd: deliver, turns on loop.sock and answers posted in their thread
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-23 21:34:34 -07:00
kyle
24cac6a4eb
gatewayd: state, what was handled, our threads and turns in flight
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-23 21:23:49 -07:00
kyle
fc32144048
gatewayd: sessions, routing posts to sessions, commands and the queue
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-23 21:17:17 -07:00
kyle
18fddd03d9
gatewayd: mm, Mattermost's events and REST calls, typed
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-23 21:04:00 -07:00
kyle
74e08a5b1a
gatewayd: ws conn, messages, pings, closing and a dead peer
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-23 20:54:38 -07:00
kyle
f649ca9e3d
gatewayd: ws frames, a strict decoder and a masked encoder
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-23 20:50:00 -07:00
kyle
d56fcf8611
gatewayd: ws, the WebSocket error type and the opening handshake
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-23 19:55:22 -07:00
kyle
3a5b693878
gatewayd: http, requests over a stream with size caps and rate-limit waits
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-23 19:51:00 -07:00
kyle
e8311aeb54
gatewayd: net, TCP or verified TLS to the Mattermost server
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-23 19:41:08 -07:00
kyle
608d426f95
gatewayd: secrets from a credential, the environment or a file; runbook entries
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-23 19:37:12 -07:00
kyle
ede25312b3
gatewayd: config, gatewayd.toml into a checked Config
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-23 19:27:43 -07:00
kyle
64b34f48d6
gatewayd: dependencies for TLS and secrets; test-only certificates
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-23 19:17:51 -07:00
kyle
9fa8f0abed
proto: sha1, for the WebSocket handshake check
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-23 19:15:01 -07:00
kyle
9662966b45
toolkit: no thread panic in http_fetch, no casts, exact egress-proxy form
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-23 16:13:43 -07:00
kyle
e69ba632e6
brokerd: escape container errors in the log; prefix and quote two messages
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-23 16:10:54 -07:00
kyle
93539dbead
brokerd: start pipe threads safely and collect output within a grace period
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-23 16:07:15 -07:00
kyle
c87aff0793
brokerd: move the container's pipe handling into pipes.rs
2026-09-23 15:59:44 -07:00
kyle and Claude Opus 5.5
c3aaecdae2
M3b review fixes by the design model: curl --globoff, podman --pull=never
...
Review findings 1 and 2, both plan defects. curl gains --globoff and a
leading --disable; both podman runs gain --pull=never. The given fetch.rs and
the six golden files change with them. Checked on straylight with a rebuilt
image: a glob URL is one request, a missing image fails at once.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com >
2026-09-23 15:25:51 -07:00
kyle
feb50abc88
brokerd serve: run tools in containers when [runner] is set
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-23 09:35:46 -07:00
kyle
e6081a2177
brokerd: start and remove the egress proxy for http_fetch
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-23 09:22:24 -07:00
kyle
cfe13787b0
brokerd: the Podman runtime
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-23 08:51:44 -07:00
kyle
49ac8d72d2
brokerd: the podman argument lists
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-23 01:13:25 -07:00
kyle
81ce5a3345
brokerd: the [runner] section
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-23 01:07:21 -07:00
kyle
95872d94b8
toolkit: the egress proxy
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-23 01:01:13 -07:00
kyle
74da0c9d96
toolkit: is_public, the addresses the egress proxy may reach
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-23 00:19:18 -07:00
kyle
adf6713866
toolkit: http_fetch through curl
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-23 00:14:16 -07:00
kyle
ac1ecacadc
toolkit: shell
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-23 00:06:44 -07:00
kyle
0d444dd5bf
toolkit: the tool program, read_file and write_file
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-23 00:00:03 -07:00
kyle
644fda14da
Refuse grant paths that cannot be mounted
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-22 23:06:09 -07:00
kyle
bf9e79ac21
Seal the fetch target: one value holds the URL and its host
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-22 23:03:49 -07:00
kyle
f095cca1ee
Move the tools' arguments and the host rules to proto
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-22 22:59:40 -07:00
kyle and Claude Opus 5.5
fc8befaf5b
bxctl audit verify: name the log-like files it did not check
...
A .jsonl file whose name is not a date is ignored by brokerd and by verify;
it is now listed, so "ok" does not seem to cover it.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com >
2026-09-22 21:52:54 -07:00
kyle and Claude Opus 5.5
cfa02479c1
Test --accept-break on a real break through the brokerd binary
...
A plain start refuses, --accept-break records the break and serves, and the
next plain start serves. The given tests covered this only at library level.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com >
2026-09-22 21:52:54 -07:00
kyle and Claude Opus 5.5
bb4d7c0919
bxctl: escape frame errors; say the outcome is unknown after a timeout
...
From the independent review of task 23. serde quotes a bad frame's text after
decoding, so a compromised peer could put escape sequences in it. A timed-out
admin request now says whether brokerd acted is unknown, since it may have.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com >
2026-09-22 21:48:24 -07:00
kyle and Claude Opus 5.5
e08deb39a6
brokerd: recover a torn line in place, real dates only, bounded ttl, EMFILE
...
From the independent review of task 23. A torn last line followed by an empty
later file had its recovery written into the later file, which broke the
chain for good; the line is now ended in its own file. The log-name rule
takes months 01 to 12 and days 01 to 31 only. [approvals] ttl_ms is limited
to a day, the longest loopd waits after a pending frame. Running out of file
descriptors or memory pauses the listener instead of stopping brokerd (the
errors the previous fix skipped do not occur on Linux). args.rs's doc fixed.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com >
2026-09-22 21:48:24 -07:00
kyle and Claude Opus 5.5
ba369f82ba
brokerd: refuse / and a symbolic link as a socket's directory
...
brokerd makes a socket's directory 0700. With a socket directly in / it would
chmod /, and through a symbolic link it would change the link's target. Both
are now refused at start with #brokerd-start-failed. Without the fix the link
case started and served, with the shared directory made private.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com >
2026-09-22 21:44:29 -07:00