Skip to content

feat(installer): first-run UX — interim slice of the v2 spec (copy, naming, location fix, clearer errors) - #307

Merged
saadqbal merged 5 commits into
developfrom
ux/install-first-run-polish
Jul 7, 2026
Merged

feat(installer): first-run UX — interim slice of the v2 spec (copy, naming, location fix, clearer errors)#307
saadqbal merged 5 commits into
developfrom
ux/install-first-run-polish

Conversation

@LukasWodka

@LukasWodkaLukasWodka commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

Summary

Interim slice of the installer first-run UX v2 spec (tracebloc/backend#992): every improvement that is safe against the released CLI (v0.5.1) ships here; the full 4-section restructure is gated on tracebloc/cli#137 + tracebloc/cli#138 reaching a release.

Originally opened as a line-by-line UX pass off a real failed prod install (a typed city — berlin — died with only "see the log"); extended with the spec's copy decisions.

What's in

Bootstrap / banner

  • Verification reframed as plain-language reassurance (no cosign/manifest jargon, no alarming "not found"); lowercase brand; redundant "Running… environment setup" line dropped.
  • Vendor value-prop lines removed from the banner (bash + PowerShell); the trust claim lives in the verified connected summary — now phrased "Models other collaborators submit…" (naming rule: collaborators, never vendors).
  • The inaccurate "nothing modified outside ~/.tracebloc and Docker" promise dropped.

Step 1 (GPU) — Apple-Silicon messaging de-duplicated; ⚠ on the real limitation (no GPU training on macOS), not on the chip.

Step 3 (provision)

  • Name this machineName this client (noun rule: machine = hardware, client = tracebloc entity).
  • Location: auto-detected from the system timezone (OS zone.tab, no network) and offered as the Enter-default. Fixes a live prod bug: the shipped prompt says "optional", but v0.5.1's client create hard-requires --location when it can't prompt — so skipping doomed the create with the error buried in the log. Now: Enter accepts the detected zone; no detection → re-ask (3 tries) instead of minting a doomed request; unattended runs fall back to the detected zone silently. (Prompt disappears entirely once cli#137 ships.)
  • Client-create failures surface the real reason inline (e.g. "berlin" isn't a recognized carbon zone) instead of "see the log".

Summary — next steps rewritten around the goal chain: ingest data → create your use case (https://ai.tracebloc.io/my-use-cases) → invite other collaborators; training explicitly gated on the user's approval; dashboard + tracebloc --help demoted to footnotes.

Step 4 / Windows — stale dataset push/rmdata ingest/delete; internal ticket refs (RFC-0001 R8) removed from user-facing errors.

Testing

bats: 67/68 across provision, bootstrap, install-cli, summary, common (the 1 failure is the pre-existing environmental validate_config case — fails identically on untouched develop). Auto-detect verified on macOS (Europe/BerlinDE). Syntax-checked; summary trust-claim assertions still pass.

Follow-ups (filed)

🤖 Generated with Claude Code

…o-detect, real errors
Line-by-line pass over the one-command install experience, driven by a real
production run that failed opaquely on a mistyped location zone ("berlin").
- Bootstrap: reframe supply-chain verification as plain-language reassurance
(drop cosign/manifest/keyless jargon and the alarming "cosign not found"),
lowercase brand, drop the redundant "Running… environment setup" line.
- Welcome banner: drop the inaccurate "nothing modified outside ~/.tracebloc
and Docker" promise (the installer also brew-installs Docker + system deps);
fix brand casing on the sudo prompt.
- Step 1: de-duplicate the Apple-Silicon messaging and warn on the real
limitation (no GPU training on macOS) rather than on the chip itself.
- Step 3 (provision): auto-detect the carbon-reporting zone from the system
timezone via the OS's own zone.tab (no network call, no embedded zone list
to drift) and let the user Enter-to-accept / override / skip; surface the
ACTUAL client-create failure inline (e.g. an unrecognized zone) instead of a
generic "see the log".
- Step 4 + summary + PowerShell: advertise the shipped dataset commands
(dataset push/rm → data ingest/delete).
- Drop internal ticket refs (RFC-0001 R8) that leaked into user-facing errors.
Tests: provision, bootstrap, install-cli, summary bats suites green (50/50).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@LukasWodka

Copy link
Copy Markdown
ContributorAuthor

👋 Heads-up — Code review queue is at 34 / 30

Above the WIP limit. The team convention is to review existing PRs before opening new work.

Open PRs currently in Code review (oldest first):

Pull from review before opening new work. (This is a nudge from the kanban WIP check, not a block.)

LukasWodkaand others added 2 commits July 6, 2026 18:10
…-led next steps, location fixes
Interim slice of the installer UX v2 spec (full restructure gated on the
next CLI release):
- Banner: drop the vendor value-prop lines (bash + ps1) — the trust claim
lives in the verified connected summary.
- vendors → other collaborators everywhere user-facing; training phrased
as gated on the user's approval.
- Next steps rewritten around the goal: ingest data → create your use
case (real /my-use-cases URL) → invite other collaborators; dashboard +
CLI help demoted to footnotes.
- "Name this machine" → "Name this client" (entity noun rule).
- Location prompt: fix the live skip-path bug — the released CLI (v0.5.1)
hard-requires --location when it can't prompt, so a blank/skip answer
doomed the create with a buried error. Now: Enter accepts the detected
zone; no detection → re-ask (3 tries) instead of minting a doomed
request; unattended runs fall back to the detected zone silently.
Tests: 67/68 bats green (1 pre-existing environmental failure on
validate_config, identical on develop).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@LukasWodkaLukasWodka changed the title feat(installer): overhaul first-run UX — plainer output, location auto-detect, clearer errorsfeat(installer): first-run UX — interim slice of the v2 spec (copy, naming, location fix, clearer errors)Jul 6, 2026
- Regenerate scripts/manifest.sha256 (7 script hashes changed by the copy
pass) — the Static analysis drift check diffs it against the tree.
- Update two bats assertions to the new user-facing strings: the no-name
fatal now says 'name for this client' (noun rule) and the bootstrap
happy path prints 'installer files verified'. Caught by Linux CI only:
on macOS, bats silently passes failing [[ ]] assertions (bash 3.2
errexit quirk), so local green was misleading.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…eview nits)
Two small robustness fixes from PR review, both in provision_client:
- Trim name/location BEFORE the silent auto-detect fallback. A
whitespace-only location answer (spaces then Enter) was non-empty at
the fallback check, so it slipped through untrimmed and only got
emptied afterward — re-dooming the create with a buried error, the
exact failure this PR fixes. Now it degrades to the detected zone.
- When mktemp is unavailable, capture client-create output inside the
install dir (HOST_DATA_DIR, which we own) instead of a predictable
world-writable /tmp path that is a symlink-clobber target under sudo.
Manifest regenerated for the provision.sh change.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@saadqbal

Copy link
Copy Markdown
Contributor

Nice, careful PR 👍 The location auto-detect (no network, OS zone.tab) and the inline create-failure reason are exactly right, and the manifest is clean.

Pushed two small robustness fixes on top (f6e2607) rather than leaving them inline:

  • trim name/location before the silent auto-detect fallback — a whitespace-only location answer was slipping through non-empty and re-dooming the create;
  • capture create output under HOST_DATA_DIR instead of a predictable /tmp path when mktemp is unavailable (symlink-clobber target under sudo).

Both are edge cases; nothing blocking. Good to merge once green.

Sign up for freeto 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.

3 participants

@LukasWodka@saadqbal@divyasinghds