Skip to content

Commit f43fe95

Browse files
TeoSlayerteovlclaudematthew-pilot
authored
chore(release): CHANGELOG for v1.12.0 (#300)
chore(release): document v1.12.0 in CHANGELOG 25 commits since v1.11.2: consent-gated Ed25519 telemetry client, app-store telemetry events, pilotctl update + review commands, agent-first CLI overhaul, signed catalogue, decompression-bomb and crypto/rand security fixes, module path rename, and consent/sandbox controls. Co-authored-by: Teodor Calin <teodor@vulturelabs.io> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> Co-authored-by: matthew-pilot <matthew@vulturelabs.io>
1 parent d7963b7 commit f43fe95

1 file changed

Lines changed: 130 additions & 0 deletions

File tree

CHANGELOG.md

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,136 @@ Reliable P2P data transfer across NAT. Tag intentionally held for review.
5050
the direct and relay paths, so two NAT'd peers reconverge in ~1 RTT
5151
instead of waiting 28 s–3 min for blackhole detection.
5252

53+
## [1.12.0] - 2026-06-21
54+
55+
### Added
56+
57+
- **Consent-gated Ed25519 telemetry client (PILOT-400, #263).** The daemon now
58+
includes a telemetry subsystem that emits signed events to
59+
`telemetry.pilotprotocol.network`. Each daemon derives a stable Ed25519
60+
identity (`seed = SHA-256(node_id)`), signs every event with three headers
61+
(`X-Pilot-Timestamp`, `X-Pilot-Public-Key`, `X-Pilot-Signature`), and emits
62+
only when the operator has given explicit consent. Consent is stored in
63+
`~/.pilot/consent.json` and checked on every emission. (telemetry)
64+
65+
- **Telemetry events: `app_installed`, `catalogue_viewed`, `app_detail_viewed`,
66+
`app_usage` (PILOT-401, 402, 406, 407, #277).** Emitted at the appropriate
67+
points in the app-store flow, each carrying `app_id` in the signed payload.
68+
`app_usage` fires on every successful `pilotctl appstore call`. All events are
69+
gated behind the consent check. (telemetry)
70+
71+
- **`pilotctl update` — self-update command (PILOT-396, #262).** Checks the
72+
latest GitHub release, downloads the matching binary for the current OS/arch,
73+
verifies the SHA-256 checksum, and replaces the running binary. Respects
74+
`--dry-run` and `--version <tag>`. (pilotctl)
75+
76+
- **`pilotctl appstore review` — leave a signed review (PILOT-410, #276).**
77+
`pilotctl appstore review <id> --subject <text> --rating <1-5>` submits a
78+
signed review. Subject is capped at 140 characters; rating must be 1–5;
79+
both validated client-side before the signed POST. (pilotctl)
80+
81+
- **Agent-first CLI overhaul (#247).** `pilotctl send-message`, `list-agents`,
82+
and related commands now produce bounded, human-readable output by default —
83+
truncated at a configurable line count with specialist name + summary
84+
highlighted. `--json` still emits raw envelopes. (pilotctl)
85+
86+
- **Consent + sandbox controls.** `pilotctl consent` sub-commands
87+
(`grant`/`revoke`/`show`) manage the consent file interactively.
88+
`pilot-daemon --sandbox` prevents all outbound emission including telemetry.
89+
`skillinject` gains `--mode=append|prepend|replace`. Install-time and review
90+
flows show a consent-disclosure section before writing. (consent)
91+
92+
- **Signed app-store catalogue + Pages catalogue site (#249).** Catalogue JSON
93+
is now Ed25519-signed; `pilotctl appstore install` rejects any catalogue
94+
whose signature fails. A static GitHub Pages site renders the catalogue as a
95+
human-browsable app directory. CI validates catalogue schema on every PR
96+
(#259). (app store)
97+
98+
- **Catalogue list UX: name + headline only, with `view:` pointer (PILOT-404,
99+
PILOT-405, #275).** `pilotctl appstore catalogue` shows one line per app
100+
(`<id> <display_name> — <headline>`) and a trailing `view:` pointer to
101+
`pilotctl appstore view <id>`. (app store)
102+
103+
- **Per-platform app bundles — v3 catalogue format (#296).** App manifests now
104+
carry a `platforms` map (`linux/amd64`, `darwin/arm64`, etc.) so
105+
`pilotctl appstore install` downloads only the binary matching the current
106+
OS and architecture. The catalogue format is versioned at v3; older `pilotctl`
107+
treats missing platform keys as a single universal bundle (backward compat).
108+
(app store)
109+
110+
- **`io.pilot.sixtyfour` v0.1.0 — new app in the catalogue (#289).** First
111+
non-preview app published under the signed per-platform bundle format.
112+
113+
- **Verified-badge client layer (#295).** Daemons can now request and cache a
114+
cryptographic verification badge from the Pilot CA. The badge is exposed via
115+
IPC and surfaced in `pilotctl info` and `pilotctl verify status`. Serves as
116+
the groundwork for badge-gated specialist trust in a future release.
117+
118+
- **`pilotctl verify status` with offline check (#297).** New sub-command
119+
reports the local badge state (verified / unverified / expired) without a
120+
network round-trip, with a `--how-to` flag that prints the steps to earn
121+
verification. (pilotctl)
122+
123+
### Fixed
124+
125+
- **Decompression bomb protection in `untarUnder` (PILOT-418, #288).** App-store
126+
bundle extractor now enforces a 256 MiB per-entry cap and a 1 GiB total cap;
127+
oversized archives are rejected and partial extracts cleaned up. (security)
128+
129+
- **`crypto/rand` replaces `math/rand` in three daemon files (PILOT-417, #283).**
130+
Key-exchange nonces, ephemeral-port selection, and session-token generation
131+
now use `crypto/rand.Read`. (security)
132+
133+
- **`node_id` now populated in all telemetry events (#281, #282).** The telemetry
134+
client was initialized before the daemon identity resolved, leaving `node_id`
135+
empty. Client now reads it lazily. A missing `app_id` in `catalogue_viewed`
136+
payload was also corrected.
137+
138+
- **Consent gates added to all app-store telemetry paths (#278).** Several
139+
app-store emission sites skipped the consent check. Each now calls
140+
`consent.IsGranted()` and short-circuits if consent is absent or revoked.
141+
142+
- **Review prompt output no longer captured by `pilotctl appstore call`
143+
(PILOT-409, #268).** The stdio intercept is now scoped to the method's
144+
structured-output phase only; LLM sub-call progress streams to the terminal.
145+
146+
- **`pilotctl skills disable/enable` rejects non-`all` skill IDs (PILOT-394,
147+
#260).** Previously silently matched nothing and exited 0. Now returns a
148+
non-zero exit code with a clear message when no skills match.
149+
150+
- **Default telemetry endpoint set to production.** The daemon no longer ships
151+
with a localhost fallback; default is
152+
`https://telemetry.pilotprotocol.network/v1/events`. The `PILOT_TELEMETRY_URL`
153+
env override remains for staging.
154+
155+
- **Inner packet `Src` bound to authenticated `peerNodeID` (#294).** Previously
156+
the source node ID in the inner packet was taken from the unverified frame
157+
header. It is now always overwritten with the node ID authenticated by the
158+
key-exchange layer, preventing a peer from spoofing a different node's address
159+
inside an established tunnel.
160+
161+
### Changed
162+
163+
- **MOTD sourced from `pilot-changelog` feed-motd.json (#285).** The poll loop
164+
introduced in v1.11.2 now fetches from `pilot-changelog`'s `scope: motd`
165+
output instead of the bespoke `pilot-motd` repo. No behavior change for users;
166+
`--motd-feed-url` / `$PILOT_MOTD_URL` overrides still work. (motd)
167+
168+
- **Module path renamed: `TeoSlayer``pilot-protocol` (#287).** All internal
169+
imports updated from `github.com/TeoSlayer/pilotprotocol/...` to
170+
`github.com/pilot-protocol/pilotprotocol/...`. The GitHub repository rename
171+
provides a redirect for existing `go get` users.
172+
173+
- **Catalogue CI moved into `web4` (#272).** App-store catalogue validation
174+
now ships as a workflow inside this repo so catalogue PRs validate in place.
175+
176+
### Infrastructure
177+
178+
- `CODEOWNERS` restricted to `@TeoSlayer` only.
179+
- WAL torn-tail registry test reconciled with current protocol contract.
180+
- Daemon package tests now isolate `$HOME` to prevent cross-test interference
181+
(#252).
182+
53183
## [1.11.2] - 2026-06-15
54184

55185
### Added

0 commit comments

Comments
 (0)