Skip to content

Commit cb99c35

Browse files
committed
docs: unwrap the changelog for release-note rendering
1 parent 3a257f3 commit cb99c35

1 file changed

Lines changed: 19 additions & 60 deletions

File tree

changes/v0.5.0.md

Lines changed: 19 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,18 @@
11
# v0.5.0
22

3-
Breaking. The CLI is overhauled: six commands are replaced, and `expose` now
4-
requires a grantee.
3+
Breaking. The CLI is overhauled: six commands are replaced, and `expose` now requires a grantee.
54

65
## Where this came from
76

8-
The CLI had grown a command at a time, as features landed. By 0.4, five of them
9-
covered one job: getting two machines to talk to each other. `ticket`,
10-
`grant-token`, `add-peer`, `pin`, `remove-peer`.
11-
12-
So we stopped adding to it. We wrote down what you actually type, on both
13-
machines, to get a link up. That became `docs/scenarios.md`.
14-
15-
The first flow did not work. Reaching a shared build box from a laptop already
16-
running a daemon meant sending two values out of band, a key and a token. Neither
17-
was ever used without the other. `add-peer` could not present a token. `--enroll`
18-
existed only on `pai-sho daemon`, so a laptop already serving other peers had to
19-
restart to admit one more. None of it was hidden in the code. It just never came
20-
up until the whole flow was on one page.
21-
22-
The names took several rounds. `pin` was tried and dropped, along with
23-
`grant-key` and `allow`/`connect`. Each described a mechanism rather than the
24-
thing happening, which is closer to: hi, be friends. And: yeah, be friends. That
25-
is `invite` and `accept`, and the rest followed from the pair. An invitation
26-
collapsed into one value instead of two, since both halves always travelled
27-
together anyway. The grant moved onto the invitation: both steps happen
28-
on the same machine and express one intention. And naming went local. A name is
29-
what you type into a URL, so it belongs to whoever is typing.
30-
31-
The same exercise turned up the `expose` default-allow. Writing "and then nothing
32-
is reachable until you grant it" one paragraph away from a command that granted
33-
to every peer you knew is hard to miss once both are on the page.
7+
The CLI had grown a command at a time, as features landed. By 0.4, five of them covered one job: getting two machines to talk to each other. `ticket`, `grant-token`, `add-peer`, `pin`, `remove-peer`.
8+
9+
So we stopped adding to it. We wrote down what you actually type, on both machines, to get a link up. That became `docs/scenarios.md`.
10+
11+
The first flow did not work. Reaching a shared build box from a laptop already running a daemon meant sending two values out of band, a key and a token. Neither was ever used without the other. `add-peer` could not present a token. `--enroll` existed only on `pai-sho daemon`, so a laptop already serving other peers had to restart to admit one more. None of it was hidden in the code. It just never came up until the whole flow was on one page.
12+
13+
The names took several rounds. `pin` was tried and dropped, along with `grant-key` and `allow`/`connect`. Each described a mechanism rather than the thing happening, which is closer to: hi, be friends. And: yeah, be friends. That is `invite` and `accept`, and the rest followed from the pair. An invitation collapsed into one value instead of two, since both halves always travelled together anyway. The grant moved onto the invitation: both steps happen on the same machine and express one intention. And naming went local. A name is what you type into a URL, so it belongs to whoever is typing.
14+
15+
The same exercise turned up the `expose` default-allow. Writing "and then nothing is reachable until you grant it" one paragraph away from a command that granted to every peer you knew is hard to miss once both are on the page.
3416

3517
We think this is much nicer to use, and hope you do too.
3618

@@ -49,50 +31,27 @@ We think this is much nicer to use, and hope you do too.
4931

5032
## Highlights
5133

52-
- **`invite` and `accept`.** One side extends an invitation and the other takes
53-
it up. Neither works alone. An invitation is one value, `<key>.<code>`: who to
54-
dial, and the proof you may. `accept` also takes a bare key. That is the
55-
host-attested path from ADR 0003, where no secret travels into the guest. A
56-
running daemon can admit a peer without restarting
57-
([ADR 0006](https://github.com/cablehead/pai-sho/blob/v0.5.0/docs/adr/0006-invitations.md)).
34+
- **`invite` and `accept`.** One side extends an invitation and the other takes it up. Neither works alone. An invitation is one value, `<key>.<code>`: who to dial, and the proof you may. `accept` also takes a bare key. That is the host-attested path from ADR 0003, where no secret travels into the guest. A running daemon can admit a peer without restarting ([ADR 0006](https://github.com/cablehead/pai-sho/blob/v0.5.0/docs/adr/0006-invitations.md)).
5835

59-
- **`expose` requires `--to <key>` or `--all`.** Bare `expose <port>` used to
60-
grant to every peer the daemon knew, a default-allow inside a system whose
61-
first ADR opens with default deny. `--all` is explicit now, and it means every
62-
peer known at that moment, never a standing rule for peers admitted later.
36+
- **`expose` requires `--to <key>` or `--all`.** Bare `expose <port>` used to grant to every peer the daemon knew, a default-allow inside a system whose first ADR opens with default deny. `--all` is explicit now, and it means every peer known at that moment, never a standing rule for peers admitted later.
6337

64-
- **A pure core.** Admission and authorization moved to `src/core/session.rs`, a
65-
state machine with no IO that returns actions for the shell to carry out. The
66-
decisions are now reachable from unit tests that run in microseconds, where
67-
before they needed two live endpoints and a real listener
68-
([ADR 0007](https://github.com/cablehead/pai-sho/blob/v0.5.0/docs/adr/0007-pure-core.md)).
38+
- **A pure core.** Admission and authorization moved to `src/core/session.rs`, a state machine with no IO that returns actions for the shell to carry out. The decisions are now reachable from unit tests that run in microseconds, where before they needed two live endpoints and a real listener ([ADR 0007](https://github.com/cablehead/pai-sho/blob/v0.5.0/docs/adr/0007-pure-core.md)).
6939

70-
- **`list` says how each peer arrived**, by code or by key, since the two carry
71-
different weight when auditing who is on your network.
40+
- **`list` says how each peer arrived**, by code or by key, since the two carry different weight when auditing who is on your network.
7241

7342
## Fixes
7443

75-
- `add_peer` dialed before recording the peer. A failed dial left nothing behind,
76-
so there was no peer and nothing to retry, and a flow `docs/scenarios.md` said
77-
should work silently didn't. It records first now.
78-
- A failed port bind was logged and dropped, on the theory that the next announce
79-
would retry it. A peer with a stable port set never re-announces, so the port
80-
stayed dark until something else changed. Binds now retry.
44+
- `add_peer` dialed before recording the peer. A failed dial left nothing behind, so there was no peer and nothing to retry, and a flow `docs/scenarios.md` said should work silently didn't. It records first now.
45+
- A failed port bind was logged and dropped, on the theory that the next announce would retry it. A peer with a stable port set never re-announces, so the port stayed dark until something else changed. Binds now retry.
8146

8247
## Tests
8348

84-
72 tests, from a suite that could not reach the security decisions at all. Unit
85-
tests in `core` cover admission, grants, and tunnel authorization; `live_tests.rs`
86-
runs two real daemons over loopback with relays disabled for dialing,
87-
reconnection, binding, and eviction. Mutation testing confirms they bite:
88-
replacing the grant check with `if true` fails five tests.
49+
72 tests, from a suite that could not reach the security decisions at all. Unit tests in `core` cover admission, grants, and tunnel authorization; `live_tests.rs` runs two real daemons over loopback with relays disabled for dialing, reconnection, binding, and eviction. Mutation testing confirms they bite: replacing the grant check with `if true` fails five tests.
8950

9051
## Docs
9152

92-
- `docs/scenarios.md` works two flows end to end, a shared build box reached from
93-
a laptop and a laptop booting a vibenv, with the invariants each depends on.
94-
- New ADRs 0006 (invitations) and 0007 (pure core). 0002 and 0004 carry notes
95-
where their vocabulary no longer matches what shipped.
53+
- `docs/scenarios.md` works two flows end to end, a shared build box reached from a laptop and a laptop booting a vibenv, with the invariants each depends on.
54+
- New ADRs 0006 (invitations) and 0007 (pure core). 0002 and 0004 carry notes where their vocabulary no longer matches what shipped.
9655
- README, `--help`, and the crate description rewritten.
9756

9857
## Raw commits

0 commit comments

Comments
 (0)