Commit graph

134 commits

Author SHA1 Message Date
Ochenstarik
df6636bc60 test(control): add integration test verifying web console embedded resource delivery 2026-08-18 02:24:18 +07:00
Ochenstarik
989d66e998 feat(control): add operator web console for nodes, links, and enrollment code generation 2026-08-18 02:00:41 +07:00
ochenstarik-ui
8af838439a
Merge pull request #55 from ochenstarik-ui/antigravity/desktop-update-proof
test(desktop): prove signature verification against live release
2026-08-18 01:53:00 +07:00
ochenstarik-ui
3f5f733ebe
Merge branch 'main' into antigravity/desktop-update-proof 2026-08-18 01:47:26 +07:00
Ochenstarik
c9cedd0552 ci(windows): separate offline and live release desktop security test steps 2026-08-18 01:11:28 +07:00
ochenstarik-ui
7583b1317c
Merge pull request #53 from ochenstarik-ui/antigravity/node-enrollment-endpoint
feat(control): add operator endpoint for node enrollment code (SMMNODE2)
2026-08-18 01:08:03 +07:00
ochenstarik-ui
ccc834cee2
Merge branch 'main' into antigravity/node-enrollment-endpoint 2026-08-18 01:02:04 +07:00
ochenstarik-ui
0954588cc8
Merge pull request #56 from ochenstarik-ui/codex/release-alpha18-cosign-negative-test
fix: support cosign v3 negative verification for alpha.18
2026-08-18 00:39:46 +07:00
Ochenstarik
55a19e9eea refactor(control): remove duplicate /nodes route for enrollment code 2026-08-18 00:35:38 +07:00
ochenstarik-ui
26a11b77e7 fix: select cosign v3 detached signing mode 2026-08-18 00:25:23 +07:00
Ochenstarik
279349f445 test(desktop): restore valid release assertion in live update verification tests 2026-08-18 00:24:26 +07:00
Ochenstarik
5dcd420d34 test(desktop): add live release update verification tests (intentional failure proof) 2026-08-18 00:17:45 +07:00
ochenstarik-ui
307446915d
Merge pull request #54 from ochenstarik-ui/codex/release-alpha17-machine-output
fix: preserve machine-readable installer output for alpha.17
2026-08-18 00:16:59 +07:00
Ochenstarik
93eb507f7a fix(control): implement IDisposable on NodeEnrollmentService and register event payload in SmmJsonContext 2026-08-18 00:03:37 +07:00
ochenstarik-ui
ba0abd98f9 fix: preserve machine-readable installer output 2026-08-18 00:01:59 +07:00
Ochenstarik
aa8da317cf feat(control): add operator endpoint for node enrollment code 2026-08-17 23:55:29 +07:00
ochenstarik-ui
5fd9def789
Merge pull request #52 from ochenstarik-ui/codex/release-alpha16-cosign-verification
fix: complete clean-host release verification
2026-08-17 23:49:38 +07:00
ochenstarik-ui
7cb7173466 fix: clear cosign command cache in release verification 2026-08-17 23:37:57 +07:00
ochenstarik-ui
5dc4c3970b
Merge pull request #43 from ochenstarik-ui/codex/cosign-provisioning
fix: provision cosign and automate release verification
2026-08-17 23:26:56 +07:00
ochenstarik-ui
6bd58abe2f fix: provision cosign for verified installs 2026-08-15 23:29:49 +07:00
ochenstarik-ui
0405b0b4c6
Merge pull request #42 from ochenstarik-ui/codex/release-alpha14
feat: add one-command alpha14 server installation
2026-08-15 22:52:21 +07:00
ochenstarik-ui
c83fd1ea92 docs: record unpublished alpha10 and alpha11 releases 2026-08-15 22:30:12 +07:00
ochenstarik-ui
d206c2219e feat: add one-command alpha14 server installation 2026-08-15 22:04:25 +07:00
ochenstarik-ui
b0ad40c5cd
Merge pull request #41 from ochenstarik-ui/integration/release-signing-consistency
fix(release): publish signing certificate and verify releases the way an operator does
2026-08-15 13:23:12 +07:00
Ochenstarik
c1e47684e6 fix(verification): verify releases the way an operator does
PR #40 correctly publishes the keyless signing certificate and makes
verify_archive require manifest, signature and certificate together. Three
things around it were inconsistent.

The release-verification scripts fetched assets with `gh release download`.
The workspace-isolation step deliberately removes `.git` so that the install
comes from the release rather than the source tree, and `gh` resolves the
repository from that git context — the tool fought the isolation it runs
inside, which is what broke the first runs. An operator has neither `gh` nor a
token, so the scripts now use public `curl`, `sha256sum` and `cosign` only.
`verify-assets.sh` keeps `gh`: it runs before isolation and only lists assets.

The monitor check addressed a user and a home directory that do not exist.
The bootstrap creates `ochenstarik-monitor` with `/var/lib/ochenstarik-monitor`;
the script used `ochenstarik-smm-monitor` under the Control state directory, so
that section could never have passed. It now also asserts that the forced
command is pinned in `authorized_keys` before running it, and quotes the
command instead of splitting it on whitespace.

The expected asset list did not include the new certificate, so a correct
release would have been reported as unexpected.

Also: a negative case for an archive published without its certificate, removal
of drafting comments that quoted the task text, and documentation of the three
signature files, since `verify-release` now requires them beside the archive and
the documented download list stopped being sufficient.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-15 13:16:27 +07:00
Ochenstarik
55cfdcffac test(release): add certificate fixture material
Keep local signatures out of Rekor and satisfy the fail-closed certificate contract.
2026-08-13 14:37:31 +07:00
Ochenstarik
e1359b1b5f fix(release): publish keyless signing certificate
Close the producer/consumer certificate contract and advance the immutable correction release to alpha.14.
2026-08-13 14:29:16 +07:00
ochenstarik-ui
56a29e2b33
fix(release): normalize Windows checksum asset (#39)
Validate SHA256SUMS with GNU sha256sum before publishing and advance the immutable correction release to alpha.13.

Co-authored-by: Ochenstarik <ochenstarik@inbox.ru>
2026-08-13 13:53:16 +07:00
ochenstarik-ui
ecad5048cc
fix(release): replace alpha8 network compatibility test (#38)
Use a deterministic v1 release fixture, prepare alpha.12 version sources, and document release ownership and burned tags.

Co-authored-by: Ochenstarik <ochenstarik@inbox.ru>
2026-08-13 13:22:48 +07:00
ochenstarik-ui
5349533994 Bump version to v0.1.0-alpha.11
alpha.10 tag produced a failed release pipeline (test-release-contract.sh
still asserted alpha.9, and run-negative-tests.sh test 5 failed on
cross-version verify-release). Per release-policy.md, published tags are
immutable — errors are fixed in the next tag.
2026-08-12 00:47:02 +07:00
ochenstarik-ui
48d096a06e fix(ci): update release contract to alpha.10, remove backward compat test from bootstrap job
- test-release-contract.sh: update hardcoded DEFAULT_RELEASE_TAG assertion to v0.1.0-alpha.10
- run-negative-tests.sh: remove test 5 (alpha.8 backward compat) — verify-release checks
  for artifacts added in later versions, making cross-version testing inherently fragile
2026-08-11 12:01:19 +07:00
ochenstarik-ui
e04037aec8 docs: add Debian VM reboot constraint section 2026-08-11 01:46:04 +07:00
ochenstarik-ui
bb672a299c docs: sync translations and roadmap for release v0.1.0-alpha.10 2026-08-11 01:45:05 +07:00
ochenstarik-ui
e8f771b07d Merge branch 'hermes/release-alpha10' 2026-08-11 01:40:57 +07:00
ochenstarik-ui
93b80e2dac Bump version to v0.1.0-alpha.10 2026-08-11 01:40:28 +07:00
ochenstarik-ui
481d4b7c8a Add alpha.8 backward compatibility test 2026-08-11 01:30:39 +07:00
ochenstarik-ui
7b322a69d3 Add release-verification workflow to main 2026-08-11 01:30:09 +07:00
ochenstarik-ui
6ca8ac8469 Add release verification workflow 2026-08-11 01:28:50 +07:00
ochenstarik-ui
61471f033d
Merge pull request #36 from ochenstarik-ui/fix/version-comparison
fix(bootstrap): compare release versions semantically against the installed one
2026-08-11 01:12:39 +07:00
Ochenstarik
b897b0ea88 fix(bootstrap): compare release versions semantically against the installed one
The update guard compared the archive version with PROGRAM_VERSION using shell
string ordering. Both halves were wrong.

PROGRAM_VERSION is a constant describing the bootstrap source tree ("0.2.0-dev"),
never the deployed component, so it could not represent what is installed. The
cross-role compatibility check compared it with a manifest field such as
"v0.1.0-alpha.9"; those can never be equal, so update-control on a host that also
runs the agent always failed. The downgrade guard compared the same mismatched
pair and passed only by accident, because "v" sorts above "0" in ASCII.

String ordering is also wrong for the version scheme in use: "0.1.0-alpha.10"
sorts below "0.1.0-alpha.9", so the next release after the ninth would have been
rejected as a downgrade.

- record the installed version per role at install and update time, and compare
  against that instead of PROGRAM_VERSION;
- order versions with sort -V after stripping the leading "v", so prerelease
  numbering and tag prefixes compare correctly;
- treat an unknown peer version as a warning rather than a failure, because
  installations predating version recording have nothing to compare against;
- guard all of the above in the bootstrap contract test, including the six
  ordering cases and a check that the lexicographic comparison is not restored.

Verified by deliberately reintroducing each defect: lexicographic comparison,
sort without -V, and a missing version record are all caught by the contract test.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 01:05:22 +07:00
ochenstarik-ui
a6fca04bd6
Merge pull request #35 from ochenstarik-ui/antigravity/signed-delivery-queue-b
feat(security): Queue B signed delivery — DI updater, 10 desktop + 5 bootstrap tests
2026-08-11 00:52:11 +07:00
ochenstarik-ui
b314b4eb03 fix(tests): preserve SMM_ALLOW_UNSIGNED over sudo in native smoke tests 2026-08-10 23:12:59 +07:00
ochenstarik-ui
ff24aceaa3 fix(tests): Support hardened verify_archive in smoke and contract tests
- test-bootstrap-contract: Generate signed manifest.json with cosign test key
- systemd smoke tests: Pass SMM_ALLOW_UNSIGNED=1 fallback when manifest is missing (for CI PR runs)
2026-08-10 23:08:57 +07:00
ochenstarik-ui
d21c0c5d22 fix(security): Add version mismatch check, MSIX cleanup on hash failure, TraceSource diagnostics, csproj fix
- UpdateService: manifest version must match release tag_name (prevents cross-version attacks)
- UpdateService: corrupted MSIX deleted immediately on hash mismatch
- UpdateService: TraceSource logging for all verification steps
- UpdateService: Trust anchor constants with docs/release-policy.md reference
- Bootstrap: docs/release-policy.md reference next to identity constants
- Test csproj: add UpdateService.cs Compile Include (tests won't compile without this)
2026-08-10 20:12:18 +07:00
ochenstarik-ui
ad396fd6a2 fix(tests): Fix Test4 broken JSON, Test2 false positive, add cleanup trap and Test9/Test10 2026-08-10 20:07:49 +07:00
ochenstarik-ui
4f583c9a03 feat(security): Finalize Queue B signed delivery requirements 2026-08-10 19:58:58 +07:00
ochenstarik-ui
ef137bcf7a fix(bootstrap): verify compatible component versions during updates
- Fixed archive hash extraction from manifest using archive basename
- Added version compatibility checks for Control/Agent/helper in update_role
- Expanded UpdateService tests to 4 unit tests
- Verified against alpha.8 manifest
2026-08-10 18:12:22 +07:00
ochenstarik-ui
2ca059f0b3
Merge pull request #33 from ochenstarik-ui/hermes/release-single-writer
Enforce a single immutable release publisher
2026-08-10 17:49:16 +07:00
Ochenstarik
004f01a842 [verified] Enforce a single release publisher 2026-08-10 17:43:18 +07:00
ochenstarik-ui
d0a46f511b
Merge pull request #32 from ochenstarik-ui/hermes/monitor-snapshot-contract
Fix Monitor snapshot contract and alpha.9 release compatibility
2026-08-10 17:31:09 +07:00