Skip to content

chore(release): promote develop → main — restore verify canary + adopt-reconcile (v1.8.4) - #294

Merged
saadqbal merged 3 commits into
mainfrom
develop
Jul 2, 2026
Merged

chore(release): promote develop → main — restore verify canary + adopt-reconcile (v1.8.4)#294
saadqbal merged 3 commits into
mainfrom
develop

Conversation

@saadqbal

@saadqbalsaadqbal commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

Promotes develop → main to cut v1.8.4 — the client-side half of the RFC-0001 credential-handoff fix (companion to cli v0.5.1 [shipped] + backend #941 [deployed to dev]).

What ships

(The delta includes #293's commit, but #295 reverts it — the net main state is canary-restored + adopt-reconcile.)

Fleet-safety

Chart templates + values are identical to v1.8.2 (verified) — only Chart.yaml version + the installer scripts changed. So the fleet auto-upgrade 1.8.2 → 1.8.4 is a no-op for running pods, just a version-label bump.

Gates

…5) (#293)
Third R8 install regression found running curl|bash end to end: the #279 reorder
mints the credential (Step 3) and deploys the client pod (Step 4) BEFORE Step 5's
verify_credentials. A freshly minted client is "set to enroll" — it goes active
only once the deployed pod connects — so verify_credentials (api-token-auth)
returns 400/invalid and hard-fails a perfectly good install:
"TRACEBLOC_CLIENT_ID / TRACEBLOC_CLIENT_PASSWORD was rejected by tracebloc".
A minted credential is valid by construction (client create just made it), so
pre-verifying it adds no correctness value and only races enrollment. Trust the
mint; the deployed pod enrolls the client.
- provision.sh: export TRACEBLOC_CLIENT_MINTED=1 on the mint path (cleared up
front, not set on adopt / dual-mode).
- install_client_helm Step 5: when minted, skip verify_credentials and show a
non-fatal "Provisioned client N — it will connect shortly" instead of erroring.
User-entered / dual-mode creds still verify (those can be wrong).
- manifest.sha256 regenerated (provision.sh + install-client-helm.sh are pinned);
chart 1.8.2 -> 1.8.3.
Tests: provision.bats asserts the mint sets MINTED (adopt doesn't); install-client-
helm.bats adds a test that a minted credential skips verify and succeeds even when
verify would return invalid. shellcheck clean; gen-manifest --check passes.
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
@saadqbalsaadqbal added the skip-fr-gate Bypass FR gate for this PR (use only for bootstrap or emergencies — visible in audit) label Jul 1, 2026
@saadqbalsaadqbal self-assigned this Jul 1, 2026
saadqbaland others added 2 commits July 2, 2026 15:02
…vert #293 → v1.8.4) (#295)
#293 skipped verify_credentials for freshly-minted credentials on the premise
that a minted client is "set to enroll" and only goes active once the pod
connects, so the api-token-auth pre-verify would 400 on a valid credential.
That premise was wrong. The real reason verify 400'd was a CLI bug
(tracebloc/cli#125): `client create` wrote the numeric dashboard id — not the
UUID username — as TRACEBLOC_CLIENT_ID, which is the auth username. The
credential was genuinely invalid; verify_credentials was a correct canary that
#293 masked, letting the install "succeed" while the pod crash-looped on
"Unable to log in with provided credentials".
With cli#125 fixed (v0.5.1), a minted credential is valid and verify passes.
Restore the canary so a bad credential fails loudly at install time (Step 5)
instead of silently at pod runtime:
- install-client-helm.sh: drop the TRACEBLOC_CLIENT_MINTED skip branch; always
verify_credentials in Step 5 (mint, adopt, and dual-mode alike).
- provision.sh: drop the TRACEBLOC_CLIENT_MINTED marker (now unused).
- tests + manifest.sha256: reverted to the pre-#293 state.
- Chart: 1.8.3 → 1.8.4 (forward; not a version rollback).
DEPENDS ON tracebloc/cli#125 (v0.5.1) being the latest CLI release — the
installer fetches the CLI fresh, so the canary only passes once v0.5.1 mints
the correct UUID username. Do not release this chart before v0.5.1 is out.
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
…d client in place (RFC-0001 §7.2 / #838) (#298)
* fix(installer): honor TRACEBLOC_CLIENT_ADOPTED — reconcile a connected client in place (RFC-0001 §7.2 / #838)
Re-running the installer on an already-connected client did not behave per
RFC-0001 §7.2. provision_client (Step 3) correctly adopts the existing client
(get-or-create keyed on the cluster) and writes TRACEBLOC_CLIENT_ADOPTED=1 + the
UUID + namespace to the credential file — but install-client-helm.sh had NO adopt
handling. Its non-interactive path is gated on ID *and* PASSWORD both being set;
adopt issues no password (the existing one stands, write-only on the backend), so
Step 5 fell through to the manual "Client ID:" prompt, defaulting to the stale
clientId in the previous values.yaml — a numeric dashboard id on any cluster first
installed during the cli#125 window — which verify_credentials then rejected.
Teach Step 5 an adopt branch: on TRACEBLOC_CLIENT_ADOPTED=1, find the live client
release and `helm upgrade` it in place, reusing its stored credential (no prompt,
no verify, no duplicate) and healing the stored clientId to the adopted UUID so a
cli#125-era install self-corrects. Prefer --reset-then-reuse-values (Helm >= 3.14),
fall back to --reuse-values. Falls through to the normal connect flow only when no
live release is found. The "previous settings?" prompt is skipped on adopt.
Extracted _resolve_chart_ref (shared by the fresh-install and adopt paths). bats:
3 new adopt tests (reconcile-in-place + heal, older-Helm fallback, no-release
fallback); full suite green (47).
No Chart.yaml bump here — ships with #295 as v1.8.4 (avoids a version conflict).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* fix(installer): adopt-reconcile must not depend on TRACEBLOC_CLIENT_ID (Bugbot)
Bugbot (High): _reconcile_adopted_client read the adopted UUID from
TRACEBLOC_CLIENT_ID for --set clientId, but provision_client CLEARS
TRACEBLOC_CLIENT_ID on a real adopt (keeping only TB_NAMESPACE +
TRACEBLOC_CLIENT_ADOPTED=1 — "let install_client_helm reconcile the existing
release from the local values.yaml"). So reconcile always bailed on the empty id
and fell through to the interactive prompt — exactly what this PR set out to fix.
The bats tests masked it by exporting TRACEBLOC_CLIENT_ID directly.
Reconcile the discovered live release in place with --reset-then-reuse-values
(fallback --reuse-values), reusing its stored credential — no dependency on
TRACEBLOC_CLIENT_ID, no --set clientId heal (which fought provision's design and
couldn't work anyway). Tests now export ONLY TRACEBLOC_CLIENT_ADOPTED=1, matching
what provision_client actually leaves in the env. Manifest regenerated.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* fix(installer): heal clientId on adopt via provision handoff (Bugbot ×2)
Resolves both Bugbot findings on the adopt path, which were in tension:
• High — reconcile read the UUID from TRACEBLOC_CLIENT_ID for --set clientId,
but provision_client cleared it on adopt → reconcile bailed on the
empty id and fell through to the interactive prompt.
• Medium — the interim fix reconciled with --reuse-values only, so a cli#125-era
numeric clientId was preserved and the workload still couldn't auth.
provision_client now KEEPS + exports the adopted client id (its UUID username) on
the adopt path (dropping only the absent password), so install_client_helm can:
• heal the stored clientId to the UUID via `--set clientId=<uuid>` when present
(reused values keep the correct stored password) — fixes cli#125-era installs;
• reconcile WITHOUT a heal (no bail to a prompt) when no id was handed over
(rebuilt host / R7 orphan) — the existing credential stands.
Optional --set built as an args array (bash-3.2 safe). Tests: heal-with-UUID +
no-id-reconcile-fallback for Step 5; provision adopt test asserts the id is kept.
provision.bats 12/12, install-client-helm.bats green; manifest regenerated.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
@saadqbalsaadqbal changed the title chore(release): promote develop → main — skip Step-5 verify for minted creds → v1.8.3chore(release): promote develop → main — restore verify canary + adopt-reconcile (v1.8.4)Jul 2, 2026
@saadqbal
saadqbal merged commit a8fd3df into mainJul 2, 2026
58 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

skip-fr-gateBypass FR gate for this PR (use only for bootstrap or emergencies — visible in audit)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@saadqbal@shujaatTracebloc@LukasWodka