Releases: Fortemi/HotM
Release list
HotM 2026.7.1
HotM 2026.7.0
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 -dThe 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, revision2026-07-06, and
minimum_hotm_enterprise_clientare 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
c93742d7c75b481621b821f4584304289eb364d5at 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
HotM 2026.5.14
HotM 2026.5.13
HotM 2026.5.12
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:
mermaid11.x: zero eval/Function in shipped distkatex: produces static HTML; no runtime evald3(transitive): 2 source files useFunction()— Vite tree-shook them outthree.js(via@google/model-viewer): 9 source files use eval/Function — builtModelPreviewchunk 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: passnpm test -- --run: 96 test files / 1427 / 1427 tests passnpm run build: passnpm auditon bothui/andagent-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
ui2026.5.12 (this release)agent-proxy0.1.0 (unchanged from v2026.5.11)- Bundled Fortemi sidecar v2026.5.6 (unchanged)