Skip to content

Commit f60dabd

Browse files
VirusAlexaegupov-nclaude
authored
chore(release): prep for v1.0.0 — pom bump, manifest version, README pin, CHANGELOG (#71)
Three things, all paving the way for the v1.0.0 tag: 1. pom.xml version 0.4.0-SNAPSHOT → 1.0.0-SNAPSHOT. From v1.0 onward, wire formats and CLI flags are part of the contract; breaking either takes a major bump. 2. maven-shade-plugin's ManifestResourceTransformer now emits Implementation-Title + Implementation-Version. The App.versionString() helper reads Class.getPackage().getImplementationVersion() from the bundled manifest and was falling back to the hard-coded "0.1.0-SNAPSHOT" for the entire project's life because the shade transformer didn't write the entry. Tagged releases shipped correctly only because release.yml rewrites pom-version-per-tag before this stage; local jars and the new UI version chips therefore reported "0.1.0-SNAPSHOT" regardless of pom. Fixed in-place — every build (local or CI) now reflects the actual pom version. 3. README + CHANGELOG: docker-pin example bumped from "0.3.2" to "1.0.0"; the `:latest` tag table reworded to clarify it tracks stable 1.x+ (matches release.yml's `!startsWith(version, '0.')` gate added in PR-D). CHANGELOG gets the v1.0.0 entry summarising the audit-driven journey from 0.x and explicitly calling out the stability commitments (wire formats, CLI flags, security model). Local mvn package now reports `netcopy 1.0.0-SNAPSHOT` from the bundled manifest. ArchitectureTest 8/8. Co-authored-by: VirusAlex <alexey.egupov@norse.bh> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 31b3a60 commit f60dabd

3 files changed

Lines changed: 67 additions & 5 deletions

File tree

CHANGELOG.md

Lines changed: 50 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,56 @@
22

33
All notable changes to NetCopy go here. Each release section follows
44
[Keep a Changelog](https://keepachangelog.com) and the project uses
5-
[Semantic Versioning](https://semver.org/) — though `0.x` is treated as
6-
pre-1.0, so any release in this line may break compatibility.
5+
[Semantic Versioning](https://semver.org/). From v1.0.0 onward the wire
6+
formats and CLI flags are stable: removing or breaking either requires
7+
a major bump (and we have `schemaVersion` on every persisted file as the
8+
forward-compat backstop). Pre-1.0 (`0.x`) was free to break.
9+
10+
## [1.0.0] — 2026-05-01
11+
12+
First production release. The 0.x line was a long ramp-up: protocol
13+
work in 0.2, performance + UX iteration in 0.3, a comprehensive
14+
release-readiness audit in 0.4 that closed every blocker, every high,
15+
and every medium finding (security, licensing, ArchUnit invariant
16+
enforcement, schemaVersion, multi-arch image, Docker hardening, doc
17+
alignment). v0.4.x followed up with live-test fixes (TCP pool sizing,
18+
sort + filter UI, symmetric Connect button + classified errors, version
19+
chips in the topbar, two startup hotfixes for shipping bugs).
20+
21+
### Stability commitments (v1.0+)
22+
23+
- **Wire formats** (REST JSON, TCP framing, WebSocket events,
24+
`<file>.netcopy/*` and `<state-dir>/jobs/*.json`) are now stable;
25+
breaking changes will bump the major version. The `schemaVersion`
26+
field on persisted files lets future readers refuse a newer-format
27+
file rather than misinterpret it.
28+
- **CLI flags** documented in `README.md` are stable. New flags can be
29+
added; existing ones won't be removed or renamed without a major
30+
bump.
31+
- **Security model**: no-delete invariant (ArchUnit-enforced), the
32+
whitelist of four classes that may touch destructive APIs, the
33+
`acknowledgeOverwrite` gate on `POST /api/transfers`, NOFOLLOW_LINKS
34+
on every data-plane open, the small TokenGate constant-time
35+
comparison — all part of the contract.
36+
37+
### Changes since v0.4.0
38+
39+
- v0.4.0 itself shipped the full audit-fix bundle (see below).
40+
- v0.4.1: TCP connection pool now sized to `chunksPerFile ×
41+
fileParallelism` instead of just `chunksPerFile` — eliminated the
42+
~280 ms pool-acquire-wait that 32 chunk workers contended on against
43+
8 sockets. Clickable sort columns + per-panel substring filter in
44+
both file panels. Symmetric Connect button on the local-token side
45+
with classified error messages.
46+
- v0.4.2 hotfix: the post-audit cleanup PR added a `kubectl --previous`
47+
reference to a comment in `logback.xml`. XML forbids `--` inside
48+
comments; Logback aborted the parse on every JVM startup with
49+
`SAXParseException`. The runtime kept going on a default appender so
50+
the bug shipped as ~3 hours of degraded log formatting in v0.4.0
51+
through v0.4.1. Removed the offending text.
52+
- v0.4.3: NetCopy version chips in the topbar (local + peer), populated
53+
from `/api/peer/info`. Lets you spot mid-rollout version mismatch at
54+
a glance.
755

856
## [0.4.0] — 2026-04-30
957

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -303,8 +303,8 @@ Two distribution channels, both populated by the same release workflow:
303303

304304
| Tag | When updated |
305305
|---|---|
306-
| `latest` | Highest tagged stable release (`vX.Y.Z`), once 1.x ships. |
307-
| `<version>` (e.g. `0.3.2`) | Pinned to that tag, never overwritten. |
306+
| `latest` | Highest tagged stable release (`vX.Y.Z`); excludes `0.x` pre-1.0 line. |
307+
| `<version>` (e.g. `1.0.0`) | Pinned to that tag, never overwritten. |
308308
| `main` | Rolling — overwritten by every push to `main`. Pre-release. |
309309

310310
**Plain jars** on

pom.xml

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>dev.netcopy</groupId>
88
<artifactId>netcopy</artifactId>
9-
<version>0.4.0-SNAPSHOT</version>
9+
<version>1.0.0-SNAPSHOT</version>
1010
<packaging>jar</packaging>
1111

1212
<name>NetCopy</name>
@@ -163,6 +163,20 @@
163163
<transformers>
164164
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
165165
<mainClass>dev.netcopy.App</mainClass>
166+
<!--
167+
App.versionString() reads
168+
Class.getPackage().getImplementationVersion(), which is
169+
sourced from the bundled jar manifest. The shade-plugin
170+
otherwise drops it; explicitly bake the project version
171+
in so `netcopy -version` and the UI's version chip
172+
report the truth on local builds (the release workflow
173+
rewrites pom version per-tag before this runs, so
174+
tagged releases pick up the tag's version automatically).
175+
-->
176+
<manifestEntries>
177+
<Implementation-Title>NetCopy</Implementation-Title>
178+
<Implementation-Version>${project.version}</Implementation-Version>
179+
</manifestEntries>
166180
</transformer>
167181
<transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
168182
</transformers>

0 commit comments

Comments
 (0)