- DSL: Rust toolchain auto-installs the required
rustuptarget whentarget=is set, so cross-compilation works without a manualrustup target addstep (#146)
- CLI:
hm initRust template updated to use the currentrust.project().ci()API (#146)
- Breaking: DSL: Rust
build/testnow emit--lockedby default,clippyuses--all-targetsinstead of--tests, andfmtdefaults to--all --check(passlocked=Falseor adjust flags to restore old behavior) (#143) - Breaking: DSL: Imageless root steps now default to
ubuntu:24.04instead ofalpine:latest, fixingapt-get: not founderrors when using built-in toolchains without an explicit image (#144)
- DSL: Rust toolchain gains
ci()(zero-config test+clippy+fmt DAG),test(nextest=True),doctest(),build(),doc(), andfeature_powerset()(cargo-hack) across both Python and TypeScript DSLs (#143) - DSL: All Rust cargo actions accept ergonomic keyword options:
packages,exclude,features,all_features,no_default_features,target,release/profile,locked,workspace, and aflagsescape hatch (#143)
- Breaking: DSL: Remove
default_image(Python) /defaultImage(TypeScript) parameter frompipeline(); set a per-stepimage=instead (#144)
- DSL: Shell-quote all user-supplied cargo values (
packages,features,target, etc.) to prevent shell injection (#143)
- CLI: Cleaned up error messages: removed the dead
harmont.dev/docs/errors/<code>documentation links (all 404) and dropped the misleading "check that the Docker daemon is running" hint from cloud backend errors. (#140) - CLI: A cloud run from a worktree with no
originremote now fails with a clear error explaining that a git remote is required, instead of a confusing 404. (#139) - DSL: Building the DSL engine now fails with a clear error when esbuild is missing instead of silently warning, so the build no longer succeeds without the JS bundle. (#136) (Power)
- CLI:
hm run --cloudnow registers or creates the pipeline automatically on its first run, so a project works straight afterhm initwith no manual dashboard setup. It auto-creates the pipeline on apipeline_not_found, works without a git remote by prompting for the repo name (defaulting to the directory, auto-registering in CI/non-TTY), and persists[cloud] pipeline = "<slug>"to.hm/config.tomlso later runs submit by slug with no prompt. (#140)
- CLI:
hm run --backend cloudnow resolves the target pipeline by repository identity (owner/repo from the git remote) instead of the bare DSL slug, fixing spuriouspipeline_not_found404s when the org's pipeline is stored under a namespaced global slug. (#139) - SDK: Fix
@harmont/hmnpm publishing by upgrading to npm ≥ 11.5.1 in the release workflow, so OIDC trusted publishing authenticates instead of failing with a masked 404. (#138)
- Breaking: CLI: Rename all
HARMONT_*environment variables toHM_*(e.g.HM_API_TOKEN,HM_API_URL,HM_ORG), and drop legacy~/.harmontconfig/credential migration and the.harmont/project-directory fallback (#133) - Breaking: CLI: Rename pipeline directory from
.harmont/to.hm/and adopt hierarchical TOML config (user -> project -> env layering) (#73) - Breaking: DSL: Replace separate
hm.npm()andhm.bun()toolchain factories with unifiedhm.js.project()in both TypeScript and Python DSLs, acceptingruntime(node/bun/deno) andpm(npm/pnpm/yarn-classic/yarn-berry/bun) axes (#58, #67) (versecafe) - Breaking: DSL: Change
pipeline()to accept an array of steps instead of variadic arguments in both Python and TypeScript DSLs (#64) - Breaking: DSL: Remove convenience methods (test/build/lint/fmt/typecheck) from TypeScript
JsProjectclass in favor of the uniformrun("script")method (#67) (versecafe) - Breaking: DSL: Simplify cmake toolchain API with generic
definesdict, compiler/ccache/preset support, drop overspecific parameters (#56) - Breaking: SDK: Rename TypeScript package from
harmontto@harmont/hm(update imports to@harmont/hmand@harmont/hm/toolchains) (#77) - DSL: Use corepack for pnpm and yarn bootstrap instead of
npm install -g pnpm(#67) (versecafe) - CLI: Switch Linux release artifacts to musl (static) binaries and drop glibc builds (#78) (Tadhg Dowdall)
- CLI: Run a local worktree in the cloud with live build logs via
hm run --cloud(#49) - CLI: Add
-k/--keep-goingtohm runto keep independent branches running after a step fails (#102) - CLI: Support TypeScript-only repositories in
hm pipelinesdiscovery (#128) - CLI: Offer to link an organization during the
hm initwizard (#110) - Breaking: DSL: Add step-level and pipeline-level timeout support via
hm.timeout(duration, step)wrapper and pipelinetimeout_secondsfield, replacing the oldtimeoutSecondsstep option (#76) - DSL: Add Deno runtime and Yarn (classic + berry) package manager support to the JS/TS toolchain in both DSLs (#58, #67) (versecafe)
- DSL: Add Elixir/OTP toolchain (
hm.ex) with Mix project support, dependency caching, and example projects for both DSLs (#55) - DSL: Add Bun toolchain with
BunProject, shared install helpers, and example project for both Python and TypeScript DSLs (089cee0) - DSL: Add auto-detection of JS runtime and package manager from
package.jsonengines/packageManager fields and lockfiles (#74) - DSL: Accept named
pipelinesexport as alternative to default export in TypeScript DSL (#61) - CLI: Add
hm initonboarding wizard with 7 project templates (CMake, Elixir, Next.js, JS/TS, Rust, Zig, Python) (#71) - CLI: Add
hm pipelinesandhm rendercommands for machine-readable pipeline discovery and IR output (#33) - CLI: Add
install.shone-line installer with SHA-256 verification, versioned alongside the CLI (#59) - SDK: Publish harmont SDK packages to npm and PyPI with full type support (#75)
- Breaking: DSL: Remove Elm, Haskell, OCaml, .NET, Composer, Perl, and Gradle toolchains from both DSLs (#51)
- Breaking: DSL: Remove schedule trigger and croniter dependency from Python and TypeScript DSLs (#63)
- DSL: Fix example Python pipelines to use current API (
hm.js.project()instead of removedhm.npm()/hm.bun()) (#77) - DSL: Use correct Zig download URL for >= 0.14.1 and bump default to 0.14.1 (
1bf727e) - CLI: Fix
hm pipelinesreturning errors on repos without pipeline files (#34) - CLI:
hm init --forceno longer wipes the entire.hm/directory; it now overwrites only the target template file, preservingconfig.tomland any co-resident pipelines. - CLI:
hm initno longer silently overwrites customized.claude/skills/*/SKILL.mdfiles; edited skills are skipped with a warning unless--forceis passed.