Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
8ca3dda
Merge pull request #111 from tracebloc/sec/rfc-0001-r8-mandatory-verify
saadqbal Jun 25, 2026
8110744
fix: validate COSIGN_VERSION and enforce TLS 1.2 on installer downloa…
shujaatTracebloc Jun 26, 2026
93cf025
chore(schema): re-vendor ingest.v1.json — register seq2seq as recogni…
saadqbal Jun 29, 2026
cc95ee2
feat(auth): send User-Agent version header + handle 426 Upgrade Requi…
saadqbal Jun 29, 2026
5b89ec3
feat(auth): logout revokes the token server-side (cli#112) (#116)
saadqbal Jun 29, 2026
5d64b86
feat(cli): rename dataset → data (ingest/list/delete; keep aliases) (…
saadqbal Jun 29, 2026
5278df8
feat(cli): env-scoped config v2 — per-env profiles fix the cross-env …
saadqbal Jun 29, 2026
c2bd1d7
feat(cli): --verbose + cluster doctor auth checks + resume hint & ins…
saadqbal Jun 29, 2026
9af452c
fix(cli): cluster doctor treats a 426 as a hard upgrade failure, not …
saadqbal Jun 30, 2026
830657a
fix(cli): don't misread a v2-shaped config as v1 (Bugbot/#113) (#123)
saadqbal Jun 30, 2026
9f09a60
fix(cli#125): write the UUID username (not the numeric id) as TRACEBL…
saadqbal Jul 1, 2026
6b7e03e
docs(rfc-0001): CLI auth & client provisioning — accepted design-of-r…
saadqbal Jul 3, 2026
c16922b
feat(cli#131): R7 — adopt-and-backfill the live in-cluster client, do…
saadqbal Jul 6, 2026
66b69b9
feat(cli#128): selected-vs-connected — bind data commands to the acti…
saadqbal Jul 6, 2026
03d5457
fix(cli): advertise `data ingest`/`data delete` in runtime + help str…
LukasWodka Jul 6, 2026
c5f6535
fix(cli): advertise the shipped `data ingest` command in install outp…
LukasWodka Jul 6, 2026
4f8f6e7
feat(cli): location auto-detect for client create (#84) (#93)
LukasWodka Jul 6, 2026
1de77d2
feat(cli): auto-discover the client's namespace, rewrite the first-to…
LukasWodka Jul 7, 2026
0656719
feat(cli): auto-name clients `<firstname>-NN` + make `--location` opt…
saadqbal Jul 7, 2026
1d3d193
reland(#145): destination-table guard (--overwrite) + honest extensio…
LukasWodka Jul 7, 2026
37f88a8
feat(cli): login progress spinner, `auth status --check`, `client sta…
saadqbal Jul 7, 2026
efa84f4
docs(push): fix stale TargetSize NOTE to match no-swap [width, height…
saadqbal Jul 7, 2026
4e5230e
fix(client create): don't mint over a live client when the UID read f…
saadqbal Jul 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,26 @@ jobs:
- name: scripts/sync-schema.sh --check
run: ./scripts/sync-schema.sh --check

installer:
timeout-minutes: 10
name: Installer (shell)
# The curl|sh installer is the most privileged code we ship (it places the
# binary on PATH) and had NO automated test until R8. shellcheck it under
# the POSIX sh dialect it actually runs as, parse it with dash, and run the
# functional harness that asserts cosign verification is mandatory / fails
# closed when cosign is absent (RFC-0001 R8, backend#889).
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: shellcheck + dash parse
run: |
sudo apt-get update -qq && sudo apt-get install -y -qq shellcheck dash
shellcheck --shell=sh --severity=error scripts/install.sh
dash -n scripts/install.sh
bash -n scripts/tests/install-verify.sh
- name: Verification harness (mandatory cosign / fail-closed)
run: bash scripts/tests/install-verify.sh

test:
timeout-minutes: 15
name: Test
Expand Down
24 changes: 17 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ The customer-facing CLI for the tracebloc declarative ingestion path. Wraps the

## Status

**v0.3.0 is released** — the latest stable [release](https://github.com/tracebloc/cli/releases/latest), cut from `develop`. It builds on v0.2.0's guided `dataset push` and `dataset rm` with a new `dataset list` command plus home-screen / output polish (clearer copy, guided-first framing). The binary implements `version`, `completion`, `ingest validate`, `cluster info`, and the full `dataset push` / `dataset list` / `dataset rm` flow — local schema validation, cluster discovery, data staging, submission, and Job watching, end to end.
**v0.3.0 is released** — the latest stable [release](https://github.com/tracebloc/cli/releases/latest), cut from `develop`. It builds on v0.2.0's guided `data ingest` and `dataset rm` with a new `dataset list` command plus home-screen / output polish (clearer copy, guided-first framing). The binary implements `version`, `completion`, `data validate`, `cluster info`, and the full `data ingest` / `dataset list` / `dataset rm` flow — local schema validation, cluster discovery, data staging, submission, and Job watching, end to end.

`dataset push` covers **9 of 10 task categories**: `image_classification`, `object_detection`, `keypoint_detection`, `text_classification`, `masked_language_modeling`, `tabular_classification`, `tabular_regression`, `time_series_forecasting`, and `time_to_event_prediction`. `semantic_segmentation` is pending mask-sidecar support upstream ([data-ingestors#136](https://github.com/tracebloc/data-ingestors/issues/136)); `instance_segmentation` is not yet implemented.
`data ingest` covers **9 of 10 task categories**: `image_classification`, `object_detection`, `keypoint_detection`, `text_classification`, `masked_language_modeling`, `tabular_classification`, `tabular_regression`, `time_series_forecasting`, and `time_to_event_prediction`. `semantic_segmentation` is pending mask-sidecar support upstream ([data-ingestors#136](https://github.com/tracebloc/data-ingestors/issues/136)); `instance_segmentation` is not yet implemented.

The release pipeline ships [`v0.3.0`](https://github.com/tracebloc/cli/releases/latest) as **cosign-signed, multi-arch binaries** — Linux (`amd64`, `arm64`, `386`, `arm`), macOS (`amd64`, `arm64`), and Windows (`amd64`, `arm64`) — each with `SHA256SUMS` and the install scripts. Install via [Customer experience](#customer-experience) or [build from source](#building-from-source). (A Homebrew tap and the `install.tracebloc.io` vanity URL are later follow-ups; the GitHub release URL serves installs today.)

Expand All @@ -24,7 +24,7 @@ The CLI is a sibling interface to the chart, not a replacement. Both translate t
Customer interfaces (pick one or many):
┌─────────────────────────────────────────────────┐
│ Web UI Studio for clicking through │ ← future
│ CLI `tracebloc dataset push ./data` │ ← this repo
│ CLI `tracebloc data ingest ./data` │ ← this repo
│ Python SDK `IngestConfig(...).submit()` │ ← future
│ K8s CRD `kubectl apply` Ingestion CR │ ← future
│ Helm chart tracebloc/ingestor │ ← today
Expand All @@ -50,9 +50,10 @@ The protocol — the v1 schema + the POST endpoint — is the stable point. Ever
curl -fsSL https://github.com/tracebloc/cli/releases/latest/download/install.sh | sh
# Install — Windows (PowerShell)
irm https://github.com/tracebloc/cli/releases/latest/download/install.ps1 | iex
# The installer also creates a short alias: tb works everywhere tracebloc does.

# Per dataset
tracebloc dataset push ./my-data \
tracebloc data ingest ./my-data \
--table cats_dogs_train \
--category image_classification \
--intent train \
Expand All @@ -61,6 +62,15 @@ tracebloc dataset push ./my-data \

> **`tracebloc: command not found` after installing?** The binary installs to `~/.local/bin` when `/usr/local/bin` isn't writable, and an already-running shell won't see the new PATH entry until you open a new terminal (or `. ~/.bashrc`). See **[Troubleshooting installation](docs/troubleshooting.md)**.

> **Signature verification is mandatory.** The installer verifies the binary's
> SHA256 **and** its cosign signature before installing. If `cosign` isn't on
> PATH it bootstraps a pinned, checksum-verified copy; if it can't, the install
> **fails closed** rather than trusting the same-channel checksum alone (it no
> longer silently skips the signature). The one escape, for a genuinely
> constrained environment, is to re-run with `TRACEBLOC_ALLOW_UNVERIFIED=1` —
> which prints a loud warning. For the highest trust, pre-install `cosign`
> (`brew install cosign`, your package manager, or the [released binary](https://github.com/sigstore/cosign/releases)) before running the installer. (RFC-0001 R8.)

What that runs under the curtain:

1. Reads kubeconfig, discovers the parent `tracebloc/client` release in the cluster
Expand Down Expand Up @@ -99,15 +109,15 @@ All v0.1 phases are merged:
| Phase | Ticket | What | Status |
|---|---|---|---|
| 0 | [#148](https://github.com/tracebloc/client/issues/148) | Repo bootstrap + Go module + CI + `tracebloc version` | ✅ |
| 1 | [#149](https://github.com/tracebloc/client/issues/149) | Embed `ingest.v1.json` + `tracebloc ingest validate <path>` (local-only) | ✅ |
| 1 | [#149](https://github.com/tracebloc/client/issues/149) | Embed `ingest.v1.json` + `tracebloc data validate <path>` (local-only) | ✅ |
| 2 | [#150](https://github.com/tracebloc/client/issues/150) | Cluster discovery + ingestor SA token via TokenRequest | ✅ |
| 3 | [#151](https://github.com/tracebloc/client/issues/151) | Stage data into the shared PVC via ephemeral Pod | ✅ |
| 4 | [#152](https://github.com/tracebloc/client/issues/152) | Submit to jobs-manager + watch ingestor Job + summary | ✅ |
| 5 | [#153](https://github.com/tracebloc/client/issues/153) | GitHub Releases + install.sh distribution (Homebrew tap deferred) | ✅ — [`v0.1.0`](https://github.com/tracebloc/cli/releases/tag/v0.1.0) released (stable, 8-platform) |

Beyond the original phases, `dataset push` was widened from image-classification-only to 9 of 10 modalities, and the test suite gained unit-coverage wins plus a kind-based integration harness for the real-I/O seams.
Beyond the original phases, `data ingest` was widened from image-classification-only to 9 of 10 modalities, and the test suite gained unit-coverage wins plus a kind-based integration harness for the real-I/O seams.

**v0.2.0** added a friendlier guided `dataset push` and `dataset rm` on the home screen (#44, #47). **v0.3.0** added the `dataset list` command (#53) plus home-screen / output-spacing polish and feedback-copy refinements (#52, #56). **Next:** cloud-source ingestion (S3/GCS/HTTPS) for datasets above the 1 GiB local cap; `semantic_segmentation` ([data-ingestors#136](https://github.com/tracebloc/data-ingestors/issues/136)) and `instance_segmentation`. Smaller follow-ups are tracked as [open issues](https://github.com/tracebloc/cli/issues).
**v0.2.0** added a friendlier guided `data ingest` and `dataset rm` on the home screen (#44, #47). **v0.3.0** added the `dataset list` command (#53) plus home-screen / output-spacing polish and feedback-copy refinements (#52, #56). **Next:** cloud-source ingestion (S3/GCS/HTTPS) for datasets above the 1 GiB local cap; `semantic_segmentation` ([data-ingestors#136](https://github.com/tracebloc/data-ingestors/issues/136)) and `instance_segmentation`. Smaller follow-ups are tracked as [open issues](https://github.com/tracebloc/cli/issues).

Epic: [tracebloc/client#147](https://github.com/tracebloc/client/issues/147).

Expand Down
Loading
Loading