Skip to content

Retire the cloudnode name — the binary finally matches the product - #31

Merged
Sbussiso merged 2 commits into
masterfrom
retire-cloudnode-name
Sep 10, 2026
Merged

Retire the cloudnode name — the binary finally matches the product#31
Sbussiso merged 2 commits into
masterfrom
retire-cloudnode-name

Conversation

@Sbussiso

Copy link
Copy Markdown
Contributor

cloudnode was minted under the SourceBox Sentry brand. cameranode replaced it when the repo was renamed in May 2026 — and it's the better word regardless: this binary drives cameras. It was never a cloud node.

The code never followed. Cargo.toml still declared sourcebox-sentry-cloudnode, so every release asset shipped under the dead name. The split identity had started costing real things:

  • install.sh carried a workaround — extract the archive, then rename the binary to cameranode before installing, purely to hide this.
  • The MSI does no such rename, so Windows installs landed as "Sentinel CloudNode" running sourcebox-sentry-cloudnode.exe while the README documented the Linux name. Every Windows instruction was wrong: the file you download, the Start-menu entry you click, where the binary lives, the command you run.

Cargo.toml's comment deferred this to "probably alongside a v1.0.0 release" because renaming orphans systemd units and service registrations. There's nothing to orphan — the deferral was protecting against a cost that doesn't exist yet and would only have grown.

255 occurrences, 62 files.

Deliberately not renamed

  • SOURCEBOX_SENTRY_* and C:\ProgramData\SourceBoxSentry\ — never contained "cloudnode", correctly preserved.
  • opensentry-cloud-node in two brand-history comments — that really was the old GitHub repo name. Falsifying history to satisfy a grep is worse than the inconsistency.

The one edit that could have destroyed data

The two AES key-derivation domains in storage/database.rs were renamed. They're domain separators, not display strings: changing them means an existing encrypted node.db silently won't open — no error, it just fails to decrypt. Safe only because there are no installs.

Their comments used to say "kept verbatim through the rebrands" — which would now be a lie sitting next to a changed constant. They record the one-time exception, and that the window is closed.

Verified

  • release build clean; 237 lib tests pass, including every key-derivation round-trip (roundtrip_with_known_key, derive_key_is_deterministic_within_process, legacy_and_new_keys_are_distinct)
  • integration + doc tests pass, clippy no errors, embedded web UI builds
  • git grep -i cloudnode returns only the two intentional historical references

Also aligned three README Windows names with wix/main.wxs byte for byte — it said "Sentinel Camera Node" where Add/Remove shows "Sentinel CameraNode", so a user uninstalling would search for a name that isn't there.

🤖 Generated with Claude Code

Sbussiso and others added 2 commits September 9, 2026 14:29
No Dependabot config existed here, and this is the repo where that
matters most. CameraNode ships as a BINARY onto customers' own machines,
so a vulnerable dependency is not something we fix by redeploying — it
sits on hardware we do not control until each operator updates. The lag
between "advisory published" and "our build is clean" is the part that
actually costs something.

The gap was concrete, not theoretical: RUSTSEC advisories in this tree
were cleared BY HAND earlier today (reqwest, tokio-tungstenite and warp
were all moved), and nothing has watched them since. `cargo audit` in CI
catches a known advisory against what is already pinned; it does nothing
about a lockfile ageing out of support.

Three ecosystems, and the npm one is easy to overlook: web/ is built
INTO the binary at compile time, so a vulnerable frontend dependency
ships to customer hardware too rather than being served from somewhere
we can patch centrally. github-actions is on the supply path as well —
the Release workflow builds the artifacts customers download.

No auto-merge: a Cargo bump changes a binary customers install.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
`cloudnode` was the name minted under the SourceBox Sentry brand.
`cameranode` replaced it when the repo was renamed in May 2026, and it
is the better word regardless: this binary drives cameras. It was never
a cloud node.

The code never followed. Cargo.toml still declared
`sourcebox-sentry-cloudnode`, so every release asset shipped under the
dead name, and the split identity had started costing real things:

  - install.sh carried a workaround — extract the archive, then RENAME
    the binary to cameranode before installing, purely to hide this.
  - The MSI does no such rename, so Windows installs landed as
    "Sentinel CloudNode" running sourcebox-sentry-cloudnode.exe while
    the README documented the Linux name. Every Windows instruction was
    wrong: the file you download, the Start-menu entry you click, where
    the binary lives, the command you run.

Cargo.toml's own comment deferred this to "probably alongside a v1.0.0
release" because renaming orphans systemd units, Windows service
registrations and Docker volumes. There is nothing to orphan — no
customers, no installs — so the deferral was protecting against a cost
that does not exist yet and would only have grown. Done now instead.

255 occurrences, 62 files. Three things were NOT renamed, deliberately:

  - `SOURCEBOX_SENTRY_*` and `C:\ProgramData\SourceBoxSentry\` — these
    never contained "cloudnode" and are correctly preserved.
  - `opensentry-cloud-node` in two brand-history comments — that really
    was the old GitHub repo name; falsifying history to satisfy a grep
    would be worse than the inconsistency.

The two AES key-derivation domains in storage/database.rs WERE renamed,
which is the one edit here that could have destroyed data: they are
domain separators, not display strings, and changing them means an
existing encrypted node.db silently will not open — no error, it just
fails. Safe only because there are no installs. Their doc comments used
to say "kept verbatim through the rebrands", which would have been a lie
sitting next to a changed constant; they now record that this was a
one-time exception taken in the only window where it was free, and that
the window is closed.

Verified: release build clean, 237 lib tests pass including every
key-derivation round-trip (roundtrip_with_known_key,
derive_key_is_deterministic_within_process,
legacy_and_new_keys_are_distinct), integration tests and doc-tests pass,
clippy no errors, embedded web UI builds. `git grep -i cloudnode` now
returns only the two intentional historical references.

Also aligned three README Windows names with wix/main.wxs byte for byte
— it said "Sentinel Camera Node" where Add/Remove shows "Sentinel
CameraNode", so a user uninstalling would search for a name that is not
there.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@Sbussiso
Sbussiso merged commit 0aba44c into master Sep 10, 2026
1 check passed
@Sbussiso
Sbussiso deleted the retire-cloudnode-name branch September 10, 2026 02:32
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