Skip to content

Fixes from the review: private SSH tunnel, store and collector, small fixes, upkeep - #23

Merged
snaketech-tu merged 10 commits into
mainfrom
fix/private-tunnel
Nov 10, 2026
Merged

snaketech-tu merged 10 commits into
mainfrom
fix/private-tunnel

Conversation

@snaketech-tu

@snaketech-tu snaketech-tu commented Nov 10, 2026 •

Copy link
Copy Markdown
Owner

This PR now holds the work of #24, #25 and #26 as well. Those were merged into each other's branches, not into main, so it all lands here.

Private SSH tunnel

  • On macOS and Linux, ssh now forwards the server's Docker socket to a socket file instead of a TCP port on 127.0.0.1. The file sits in a folder only the user can open (0700, socket 0600), and the folder is removed when the tunnel stops. Windows still uses a local port for now.
  • Docker requests time out after 30 s without headers.

Store and collector

  • A batch read before "Clear stored logs" is no longer stored after it.
  • When another server answers behind a connection, Stackline pauses collecting and asks whether to keep or delete the old logs. Before, it deleted them without asking.
  • At the size limit, each connection keeps a fair share of the space.
  • A replica read for the first time no longer holds up the other replicas.
  • Deploys are found among thousands of other events.

Small fixes

  • A broken config.json is set aside as config.broken.json, and a banner says so.
  • --host 0.0.0.0 works for IP addresses. Names are still refused, and Stackline warns that the link is unencrypted.
  • CSV cells never start a spreadsheet formula.

Upkeep

  • store.rs is split into store/{mod,schema,query,retention,export}.rs. This only moves code.
  • A new CI job, e2e-swarm, tests a single-node swarm with the demo stack.
  • The README has a new Security section.

Tests

  • cargo test and clippy pass.
  • The swarm and Compose browser tests pass locally.

snaketech-tu and others added 9 commits November 10, 2026 01:12
On macOS and Linux, ssh now forwards the remote Docker socket to a socket
file in a folder made with mode 0700 (StreamLocalBindMask=0177), instead of
a TCP port on 127.0.0.1 that every local program, and a web page, could
reach. The folder is removed with the tunnel. Windows keeps the port for now.

Requests to Docker also give up when no headers come within 30 seconds, so
a hung daemon or tunnel no longer stops log collection for good.
- A clear can no longer leave a batch behind: the store checks the clear
  counter under its write lock and moves the cursor in the same step
- Another server behind a connection pauses collecting and asks whether
  to keep or delete the old logs, instead of deleting them silently
- Over the size limit, connections share the space equally; only those
  above their share lose lines
- First reads of a replica run in the background, two at a time, so a
  slow one no longer holds up the other replicas and the events
- Deploys are looked up by kind instead of among the newest 5,000 events
- --host beyond this computer answers any IP address of the machine (names
  stay refused) and warns that the link travels unencrypted
- A settings file that cannot be read is set aside as config.broken.json;
  Stackline starts with the defaults and says so in the UI
- CSV cells that start like a formula start with an apostrophe
Only moves code: store.rs becomes store/mod.rs with four modules beside
it. Nothing changes in what the store does.
…ess private

- New CI job e2e-swarm: starts a single-node swarm, deploys the demo stack
  and checks replicas, global and crashing services, lines of every replica
  and whole stack traces (e2e/tests/swarm.spec.ts, project "swarm"). It
  runs on its own because the crashing service fills Docker's short event
  history, which the Compose tests read.
- README: a Security section (reads only, private SSH tunnel, sign-in
  token and Host check, --host 0.0.0.0, signed updates, how to report).
Store and collector fixes from the review
Split the log store, test a swarm stack in CI, add a Security section
@snaketech-tu snaketech-tu changed the title Keep the SSH tunnel private: a socket file, not a port Fixes from the review: private SSH tunnel, store and collector, small fixes, upkeep Nov 10, 2026
The fake slow replica answered after 4 s, and two polls may wait 2 s each
for first reads, so on a busy runner it finished during the second poll.
It now takes 8 s.
@snaketech-tu
snaketech-tu merged commit 03966e4 into main Nov 10, 2026
7 checks passed
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