Skip to content

v0.1.19

Latest

Choose a tag to compare

@nyxthedev nyxthedev released this 09 Oct 15:18

forge-sim v0.1.19

Fix release. Realtime now matches the real @forge/realtime package, the manifest validator accepts the shapes Forge added since July, and the @forge/llm shim knows about Opus 5 and Sonnet 5.

Realtime: channel scoping matches Forge (#11)

Thanks to @leanzero-srl for the production datapoint. The headless API collapsed every channel to a global one, so an app that leaked events across issues or modules passed locally and misbehaved in Forge. Verified against the real @forge/realtime 1.0.1 and @forge/bridge 5.17.0 packages, not just the docs; where the two disagreed, the package wins.

  • Channel identity is built from product-context values, not names. A panel on issue 10001 no longer hears a publish from issue 10002. contextOverrides are keyed by property name and value, so [Jira.Project] in project A and project B are different channels.
  • contextOverrides replace the default module scope instead of being ignored. Non-array overrides throw with Forge's exact message. publishGlobal() ignores overrides, as the real package does.
  • signRealtimeToken() tokens are enforced on the bridge subscribe path.
  • PublishResult on success is { eventId, eventTimestamp } with no errors key, matching the package typings. Code that did if (result.errors) now behaves the same locally and in Forge.
  • @forge/realtime exports the Jira, Confluence and Bitbucket product-context enums; @forge/bridge/realtime subpath resolves.
  • Re-renders triggered from a realtime subscriber are attributed to the subscribing module instead of the last-rendered one. The dev server, MCP tools and renderer bridge all pass the module's product context so scoping is identical across the three surfaces.

Manifest validation

  • @forge/manifest ^12.9 to ^13.5. Manifests using permissions.sandbox, dashboards:filter, global:fullPage and jira:entityPropertySet now validate at deploy and load time instead of being rejected. Regression test pins each accepted shape.

@forge/llm shim (#9, #12, #16, #21)

  • list() and real-passthrough chat() accept claude-opus-5, claude-opus-4-8, claude-opus-4-7 and claude-sonnet-5. claude-3-7-sonnet and claude-3-5-haiku are gone from list() because Atlassian removed them from the supported-models page. A test pins the exact doc list so the next drift fails loudly.
  • Known gap, tracked separately: Forge rejects temperature and top_p on the four new models; the shim still passes them through.

Dev mode

  • State-writer lock: an orphaned forge-sim dev instance can no longer clobber the persisted state of a newer one.

Docs

  • ROADMAP rewritten for the post-release phase (0.2 platform catch-up, 0.3 graph and agents, 0.4 interop and determinism).
  • Stats blocks refreshed: 2,731 tests across 146 files (2,566 core / 139 files), 41 MCP tools.

Full changelog: v0.1.18...v0.1.19