ADR-0007: Name, license and distribution
- Status: Accepted (1.0.0, 2026-11-01). Proposed in Sprint 0 (ST-011)
- Related: ST-011, ST-099, PRD §29, §40
Context #
The spec uses "SmartTest" as a working name and asks for npm availability to be verified. The business model is open core plus SaaS.
Findings so far #
npm view smarttest→ 404, "Unpublished". The name was unpublished and is probably claimable. Confirm with npm support or by attempting to publish a placeholder.smart-testexists (0.0.2, an unrelated package).- The
@smarttestscope is unverified. Create the npm org to reserve it. - No trademark search has been done yet.
Decision #
- CLI package
smarttest(binsmarttest) was the plan; see the outcome below. Internal packages under@smarttest/*. - Apache-2.0 for the open-source core. It includes an explicit patent grant, which suits enterprise adoption and an open-core model. Cloud and enterprise code live in separate, closed repositories.
- Publish locally with
pnpm release:publishafterpnpm verify. CI (GitHub Actions) checks every push on Linux, Windows and macOS, but publishing stays a local, manual step, so there is no npm provenance attestation yet. Pre-releases go to thenexttag. - 1.0.0 is the first npm release, published as
@tkmremi/smarttest. The command stayssmarttest(bin), and so do the config file names and the.smarttest/store.
Outcome at publication (1.0.0) #
npm refused the bare name: "Package name too similar to existing package smart-test". The planned fallback @smarttest/cli was not possible either, because the @smarttest npm scope belongs to another account. The package is published under the owner's scope, @tkmremi/smarttest. Internal workspace packages keep their @smarttest/* names; they are bundled into the published package and never published themselves. The config loader also accepts import { defineConfig } from "smarttest", so configs written from a local build keep working.
Fallbacks #
If smarttest can't be claimed: use @smarttest/cli with npx @smarttest/cli, or a rename. Brand assets are generated by scripts/brand/build-readme-assets.mjs, so a rename means one script run plus a search and replace.