Skip to content

Releases: Fortemi/HotM

HotM 2026.7.1

Choose a tag to compare

@jmagly jmagly released this 30 Jul 02:44

Release 2026.7.1

HotM 2026.7.0

Choose a tag to compare

@jmagly jmagly released this 24 Jul 23:12

HotM 2026.7.0

Release date: 2026-07-24

Type: Signed, profile-scoped suite-contract baseline

Recovery claim: core-v1 only

This release makes HotM's exact Fortemi API, event, compatibility, recovery,
sidecar, and container receipts discoverable. It deliberately does not claim
full-v1 interoperability, complete backup, suite-wide portability, or schema
parity.

Install

Bundled Docker deployment

cat > .env <<'ENV'
POSTGRES_PASSWORD=replace-with-a-long-random-local-password
ENV
docker compose -f docker-compose.prod.yml pull
docker compose -f docker-compose.prod.yml up -d

The supported hotm-bundle:2026.7.0 image contains the HotM UI plus the
digest-pinned Fortemi PostgreSQL/API/MCP runtime. The UI-only
hotm-ui:2026.7.0 image remains available for externally managed Fortemi
deployments.

Desktop

The numbered Gitea release publishes the signed-tag desktop artifacts and
checksum files. The GitHub mirror now resolves to the exact same signed tag
object and release commit and carries the same six byte-verified assets. Gitea
remains the release and signing authority; the correction receipt is tracked
in HotM issue #274.

Contract scope

Released core-v1 recovery

HotM accepts the registered core-v1 migration window: exact schemas 1.0.0,
1.1.0, and 1.2.0. Before upload it validates the TAR inventory, component
digests, JSON records, counts, profile, schema, and minimum-reader boundary.
Recovery suppresses post-import inference so the restored snapshot is not
immediately changed.

The immutable authority is Fortemi commit
81fbeaf065df3818edd046ed8a744f10eeb00e6f, Knowledge Shard contract revision
19. The HotM consumer commits are b394e5160780ac8a752ca0891d7a3686394d2bd0,
b174b3a1b75129fdcaddc7be6afb612056433e53, and
90c7c3c7a475fd6c5ff86ecfbb02c7088d60a263.

Guarded full-v1 boundary

HotM includes a bounded, streaming consumer for exact 2.0.0/full-v1 and
requires dry_run=true&verify_signature=require to pass before it sends a
mutating recovery request. The authority is Fortemi commit
6343bd899958445bbc7e7e87b0dc92a8429d5a06, contract revision 20; the HotM
consumer is b43c65f044381e5af7e4131f2d96ad02173f2db9.

The live clean-destination test stopped before mutation because the current
Fortemi exporter emitted no signature.json. Fortemi issue #1088 owns that
producer defect. Therefore full-v1 interoperability and complete-backup claims
remain false in this release.

Other contract gates

  • Compatibility schema 1, revision 2026-07-06, and
    minimum_hotm_enterprise_client are enforced before capability
    normalization (3e0b6b826454fd710fff82cfad2ba61a224fd513).
  • OpenAPI authority: Fortemi commit
    ec14e0447711c45a8d5c5445ce47a35f26d4346a, artifact SHA-256
    4d1f9655c60ed6f97f86c790cab64ea9826ac9ca61084250a3b242fd10a7e30c.
  • Event/AsyncAPI authority: Fortemi commit
    98c9b29deee43b9c5bd96278f1f96837595882cd, generated AsyncAPI SHA-256
    f6a6fbc39af52b713b6f5c40dbb6e46baeb8a1b352a19288e79073863766bdf4.
  • Desktop sidecar: sidecar-45aff7e6f439, with exact per-platform hashes in
    release/sidecar-provenance.json.
  • Bundle base: Fortemi runtime
    c93742d7c75b481621b821f4584304289eb364d5 at immutable image index
    sha256:7d014c5580e62526069a0fc0d7ad994ed70fa73a8810d2b07476b1dfe5a99ae4.

Verification

  • Full UI suite: 1,588 tests passed.
  • TypeScript production build: passed.
  • Exact core-v1/full-v1 authority and receipt verifier: passed.
  • Bundle build and live smoke: UI /healthz, Fortemi API /livez,
    compatibility metadata, and MCP health passed.
  • Compose resolution, shell syntax, YAML/JSON parsing, sidecar download and
    SHA-256 verification, and provenance coverage passed.

Container issue #241 tracks the immutable image publication receipt. Recovery
issue #272 remains open until a signed producer export completes the live
full-v1 clean-destination cell.

HotM 2026.6.0

Choose a tag to compare

@jmagly jmagly released this 02 Jun 14:47
v2026.6.0
7aa7a7d

Release 2026.6.0

HotM 2026.5.14

Choose a tag to compare

@jmagly jmagly released this 26 May 06:22
v2026.5.14
539ccb4

Release 2026.5.14

HotM 2026.5.13

Choose a tag to compare

@jmagly jmagly released this 18 May 17:53
v2026.5.13
2b88f8c

Release 2026.5.13

HotM 2026.5.12

Choose a tag to compare

@jmagly jmagly released this 16 May 02:14
v2026.5.12
7b5f90b

Targeted follow-up to v2026.5.11's security batch. Drops 'unsafe-inline' and 'unsafe-eval' from CSP script-src, and tightens Mermaid's securityLevel from 'loose' to 'strict'.

Closes #219.

Why this was possible

The conventional wisdom is that Mermaid / KaTeX / React-heavy SPAs require unsafe-eval and unsafe-inline. A direct survey of the production dist/ artifact showed that's not true for this codebase:

Check on built bundle (4.0 MB main + 930 KB lazy ModelPreview) Result
eval(...) calls 0 (4 raw grep hits were syntax-highlighter regex tokens like `/eval(?:cmd)?
new Function(...) calls 0
Function("...") constructor calls 0 (1 raw match was KaTeX's r.callFunction method)
Inline <script> blocks in index.html 0 (both script tags use src=)

Heavy deps analyzed in node_modules vs what actually reaches the bundle:

  • mermaid 11.x: zero eval/Function in shipped dist
  • katex: produces static HTML; no runtime eval
  • d3 (transitive): 2 source files use Function() — Vite tree-shook them out
  • three.js (via @google/model-viewer): 9 source files use eval/Function — built ModelPreview chunk had 0 in output

Vite's tree-shaking plus Mermaid 11's modernization had already eliminated the paths that would have needed those directives. They were defensive boilerplate, not runtime requirements.

Changes

CSP (ui/src-tauri/tauri.conf.json):

- script-src 'self' 'unsafe-inline' 'unsafe-eval'
+ script-src 'self'

style-src 'self' 'unsafe-inline' is intentionally kept — 37+ source files use React's style={{}} prop plus Radix UI internals inject inline styles for animations. Removing it requires a refactor; CSS injection has fundamentally smaller blast radius than script execution.

Mermaid (ui/src/components/MermaidRenderer.tsx):

- securityLevel: 'loose',
+ securityLevel: 'strict',

'loose' allowed HTML in node labels — the actual reachable XSS surface that #213's npm-advisory patch in v2026.5.11 addressed only at the library-version level. 'strict' is the Mermaid library default and disallows HTML/script in labels entirely. No in-tree usage of HTML-in-labels was detected.

Verification

  • npm run typecheck: pass
  • npm test -- --run: 96 test files / 1427 / 1427 tests pass
  • npm run build: pass
  • npm audit on both ui/ and agent-proxy/: 0 vulnerabilities (unchanged from v2026.5.11)
  • act_runner exec -j quality-gate -W .gitea/workflows/ui-ci.yml: success

Still pending (manual)

Tauri desktop runtime verification — open DevTools after a desktop build, render a note with a Mermaid diagram and KaTeX math (both inline and block), and confirm no Refused to execute inline script / Refused to evaluate string console messages on:

  • macOS WebKit
  • Windows WebView2
  • Linux WebKitGTK

The CSP engines on those platforms differ slightly from Vite's bundling assumptions; if anything trips a violation, selectively allow back via 'unsafe-hashes' or hash/nonce rather than re-adding blanket directives.

Component versions

  • ui 2026.5.12 (this release)
  • agent-proxy 0.1.0 (unchanged from v2026.5.11)
  • Bundled Fortemi sidecar v2026.5.6 (unchanged)

Issues

  • Closed: #219
  • Open follow-ups from v2026.5.11: #220 (CI: GT_ACCESS_TOKEN missing), #221 (CI: publish-release if-conditional misfire) — both pre-existing CI infrastructure issues, no impact on shipped artifacts

HotM 2026.5.11

Choose a tag to compare

@jmagly jmagly released this 16 May 00:00
v2026.5.11
9d1b2a0

Release 2026.5.11

HotM 2026.5.10

Choose a tag to compare

@jmagly jmagly released this 12 May 01:56
ff62eca

Release 2026.5.10

HotM 2026.5.9

Choose a tag to compare

@jmagly jmagly released this 11 May 23:43
e3fa170

Release 2026.5.9

HotM 2026.5.8

Choose a tag to compare

@jmagly jmagly released this 11 May 23:02
c0973f7

Release 2026.5.8