Skip to content

Releases

DSH Workbench v0.2.0-rc.6

Pre-release

Choose a tag to compare

@wanyexin1998 wanyexin1998 released this 08 Sep 02:48
Immutable release. Only release title and notes can be modified.

DSH Workbench 0.2.0-rc.6

Status: source preview. Distribution is source plus a downloadable GitHub
Release (two TGZs, two bootstrap scripts, SHA256SUMS, release-manifest.json),
SHA256-verified, not GPG-signed. No npm package.

v0.2.0-rc.5 installed cleanly and then could not quote or ask. Both of
the plugin's headline features were dead from boot on the very Harness it
pins, and neither said anything: no console error, no server log, no visible
failure. Selection quoting was refused on every drag; Quick ask raised a
dialog and stopped. Split Pane, the settings section, and the shared-workspace
warning all worked, which is why the release looked healthy. rc.6 fixes both.
If you are on rc.5, install this over it — see § Upgrading. The Harness pin
does not move, so the fork checkout inside your target is already correct;
only the Workbench package changes.

Fixed

  • Selection quoting reads the chat node table from where it now lives.
    Upstream 0.1.2-rc.1 split the chat half of ui-conversation into a new
    ui-chat package, and the node table went with it. The Session snapshot now
    carries fifteen lifecycle fields and its contract opens by saying it excludes
    Conversation target data. Workbench was still reading snapshot.chat.nodes
    through an optional chain, so every lookup returned undefined and the
    selection judge — which is deliberately fail-closed — refused every passage
    in silence. The table now comes from
    uiConversation.binding(sessionId).target('chat'), the same path ui-chat's
    own consumer takes, resolved through one narrowing point in the harness
    adapter. uiConversation joins the cordis inject list; it is a different
    service from the conversation already injected, and needs no sub-path entry.
  • Interjected (steering) messages can be quoted. The Harness renders a
    steering row with the same component and the same DOM contract as an ordinary
    user row — they are the same user/message event, differing only in whether
    the agent claimed it mid-turn — but the judge's accepted-kind list named only
    user. Some body rows quoted and some silently did not, which is worse to
    diagnose than none of them working.
  • A half-written chat preset repairs itself. Quick ask
    (Ctrl/Command+Shift+C) failed with "cannot create a chat-mode
    Session" and nothing more. The cause was not the regression above: the RPC,
    its request shape, the workspace and Session-list reads and the chord all
    verified intact. The Harness was refusing the create with
    agent-preset/invalid — $DSH_HOME/.agent-presets/chat/ held preset.yml
    and not the agent.cordis.yml the Harness mounts. Workbench's seeder asked
    whether the directory existed, not whether a mountable preset was in it, so
    it answered "already seeded" forever and no path through the product could
    recover. It now gates on the composition file and writes only what is
    missing, never overwriting a file that exists, and says so once when it
    repairs. A deleted preset is still never re-created.
  • Everything past the first quote works. Saving a note on a quote answered
    "the draft changed, please retry" and did nothing; so did adding a second
    quote, and deleting one. The composer keeps two text projections of the same
    document — in one, every chip expands to its display text; in the other,
    every chip is exactly one character — and the two APIs involved disagree
    about which they speak, in prose only. occurrences[].offset/length are
    clipboard coordinates; the TokenSpan that insertReference takes is
    resolved against the detect text. Workbench handed the first straight to the
    second. With no chip in the draft the projections are identical character
    for character, which is exactly why the first quote always worked and
    nothing looked wrong. Every span is now converted before it is sent.
  • A face that moved no longer looks like a face that is absent. Both
    rejections above were the same silent return null. Each now emits one
    deduplicated diagnostic naming which of the two happened. That distinction is
    the single thing that would have turned this from hours into minutes.

Changed

  • The unit test doubles are built to the host's shape, not to the plugin's
    convenience.
    rc.4 and rc.5 were the same failure twice: the fakes were
    looser than the Harness, so the suite was fully green on a build that was
    broken at boot. A shared double now enumerates the Session snapshot's fifteen
    real fields and throws on an unknown one, and serves chat nodes only through
    a uiConversation-shaped binding that throws for unknown Sessions and
    returns undefined for an unactivated target, exactly as the Harness does.
    The selection tests reach the node table through the product's own adapter,
    so the next time a face moves they go red instead of green.
  • dsh.client.inject names @deepseek-ai/dsh-client-ui-chat, matching
    upstream consumers of the same target. It orders bundle-factory arrival and
    is skipped when absent; it changes nothing at runtime.
  • Product contract invariant 7's carve-out is restated. It said an existing
    chat/ directory is never modified; it now says no existing file is ever
    overwritten, and names the one repair above as the single exception.

Verified

pnpm release:check, all nine steps, on the release commit:

Step Result
scan-secrets.mjs high-confidence secret/privacy scan passed
release-contract-check.mjs 53 checks, all passed
scan-secrets.test.mjs 67 / 67
install/result.test.mjs 47 / 47
bootstrap/bootstrap.test.mjs 33 / 33
pnpm typecheck passed
pnpm test 673 / 673 across 36 files
pnpm audit --audit-level=low no known vulnerabilities
build-release-bundle.mjs four artifacts packed, SHA256SUMS written

The package suite is 673 where rc.5 was 663: the chat-source seam, the
steering kind, the seeder repair and its no-overwrite rule, and the span
coordinate system are each pinned. Two test doubles were rebuilt to the
host's shape rather than the plugin's convenience — the session/chat face,
and the composer input, which had modelled one text projection where the host
keeps two and so accepted the wrong coordinates silently. Reverting either fix
now turns cases red.

SHA256SUMS describes the stamped installers, and the digest they embed
(b329024e…) is the digest of the TGZ packed beside them.
release-manifest.json records the release commit.

End-to-end on a real Harness, in a browser, with real input. This is what
rc.5 did not have, and it is the only check that would have caught it. The
packed rc.6 TGZ was installed into a profile, the pinned Harness booted against
a real ~/.dsh with real Sessions, and every item below was driven through the
browser — left_click_drag for the gesture, real key events for the chords.
Synthetic click() and programmatic range selection do not exercise these paths
and were not accepted as evidence.

Check Result
Boot graph carries @wanyexin1998/dsh-workbench, console clean pass
Real drag-select over assistant prose raises the selection toolbar pass
"Add to conversation" lands the badge, the quote band and the composer chip pass
A second quote lands beside the first pass
Saving a note on a quote pass
Deleting one quote of two, then the last one pass — composer ends empty
The same inside a Pane in split mode, routed to that Pane's composer only pass
Real Ctrl+Shift+C opens a chat-mode Session beside the current one pass
Ctrl-click on a second Session yields two [data-session-pane] pass
The quote badge does not overlap the turn rail pass — 145px clear
The Settings chord actually toggles Settings when pressed pass

The last two had never been verified before. The badge sits at x 1231–1247 and
the turn rail at 1392–1420 in a 1440px viewport; in split mode the rail is not
rendered at Pane width, so there is nothing to collide with. The Settings chord
was exercised at the chord it is bound to on that machine, which a saved user
override had moved off the Primary+, default; the default-chord dispatch path
was confirmed separately with Primary+/, which is both a default and
punctuation.

Still not verified. macOS, a read-only $DSH_HOME, and the stock-Harness
general-plugin path have never been run on any platform. The isolated installer
end-to-end evidence is unchanged from rc.5 and is described there; this release
does not repeat it, because the installer scripts changed only by their stamped
version and digest. Primary+, as a default — on a machine carrying no saved
override — remains unexercised.

Distribution boundary

The Harness pin (rc4/presentation-on-0.1.2,
c5a387cd2f781d4d9914ea0271ebb507984ca3f4) does not move. The tag
dsh-workbench-v0.2.0-rc.6-pin marks the same commit so a published installer
keeps resolving; every earlier pin tag and its branch stay in place, because
those installers are still out there. Panel Compatibility moves to
0.1.0-rc.4. Its source did not change, but its packed bytes did: the package
declares the Workbench as a workspace:* dev dependency and pnpm rewrites that
to the concrete version at pack time, so its bytes track the Workbench version
and cannot stay still across a bump. A name is bound to its bytes here, so this
cut takes a new one. The Better Sidebar fork is unchanged.

v0.2.0-rc.5 is not withdrawn and its tag is not reused; this repository has
immutable releases, so a burned name can never come back. rc.5 stays published
with this record of what was wrong with it.

Upgrading

See docs/INSTALL.md § Upgrading from v0.2.0-rc.3.
The installer refuses a target that already exists, and deleting the target
would take its isolated Harness home — every Session, Work...

Read more

DSH Workbench v0.2.0-rc.5

Pre-release

Choose a tag to compare

@wanyexin1998 wanyexin1998 released this 07 Sep 08:27
Immutable release. Only release title and notes can be modified.

Source preview. Distribution is source plus these SHA256-verified (not GPG-signed) artifacts. No npm package.

This release replaces v0.2.0-rc.4, published and withdrawn earlier today. That build installed cleanly and then did nothing: the client entry declared the remote service without the remote.session namespace it dereferences, so cordis refused the lookup, the plugin's only apply entry threw, and the fail-soft catch swallowed it — no shortcuts, no Ask, no settings section, no Split Pane, and no error beyond one console warning. The isolated end-to-end run is what found it. rc.4 has been deleted and its number is not reused: this repository has immutable releases enabled, so a withdrawn tag cannot be republished. If you installed rc.4 (Workbench TGZ digest 5bdaf6b2…), install this over it.

Everything else here first appeared in rc.4 and is unchanged: the Harness pin is the same commit, and no source outside the client entry moved.

Pin: Harness fork rc4/presentation-on-0.1.2 @ c5a387cd2f781d4d9914ea0271ebb507984ca3f4, on upstream 0.1.2-rc.1 (a66e4702…), tagged dsh-workbench-v0.2.0-rc.5-pin.

Verified. pnpm release:check, all nine steps: 53 contract checks, 663/663 package tests, 67 secret-scanner, 47 install-contract, 33 installer, no known vulnerabilities. SHA256SUMS describes the stamped installers, and the digest they embed is the digest of the TGZ beside them.

Isolated end-to-end, Windows. Run against the withdrawn rc.4 installer, which pinned the same Harness commit this release does: downloaded from the release, verified against SHA256SUMS, run against a clean space-containing target with no -TgzSha256; state: installed / exit 0, with the detached checkout, TGZ digest, self-relative launcher and untouched real ~/.dsh each confirmed afterwards. It cloned from GitHub directly rather than a local mirror, so reachability is evidenced. The fix in this release was then verified in that same isolated install: clean console, the plugin in the client boot graph, and its own shortcut section in Settings.

Not verified. Split Pane itself, quote-badge placement against the host's turn rail, and whether the Settings chord fires when pressed — the first two need a configured model the isolated home does not have, and the third is evidenced only as registered. macOS, read-only $DSH_HOME, and the stock-Harness general-plugin path remain unrun on every platform.

Full notes: RELEASE_NOTES.md · Install: docs/INSTALL.md

DSH Workbench 0.2.0-rc.3

Pre-release

Choose a tag to compare

@wanyexin1998 wanyexin1998 released this 05 Sep 17:06
Immutable release. Only release title and notes can be modified.

DSH Workbench 0.2.0-rc.3

Status: source preview. Distribution is source plus a downloadable GitHub
Release (two TGZs, two bootstrap scripts, SHA256SUMS, release-manifest.json),
SHA256-verified, not GPG-signed. No npm package.

Upgrading from 0.2.0-rc.2 re-pins the Harness fork. The bootstrap
installer now checks out 82de604afc683cd8c7692d0736f26f9ebc0f1823 on
feat/toggle-settings-verb instead of 1a8cf5ba… on
fix/plugin-spec-quoting. The new commit is a direct child of the old one, so
it carries the rc.2 Windows spaces-in-path fix forward; what it adds is
ctx.layout.toggleSettings(). Installing over an existing bootstrap target is
not supported — remove the target and run the installer again.

Added

  • Quoted passages are now marked where they live. "Add to conversation"
    used to repeat every quoted passage in a dock above the composer, putting the
    same text on screen twice and growing the dock with each addition. The
    passage is now marked in the conversation itself — a tinted band with an
    underline, and a numbered badge in the margin beside it — and the composer
    keeps only a numbered chip. The marking is painted through the browser's CSS
    Custom Highlight API: Workbench hands the browser a Range and inserts
    nothing into the Harness DOM. Works on stock Harness.
  • Every quote can carry a note, typed where the quote is. Adding a quote
    opens a comment card beside the passage with the caret already in it, so the
    gesture is select, add, type. Leaving the card saves what you wrote; so do
    the close button and Esc. Delete removes the quote in one click. After the
    card closes nothing is parked beside the paragraph covering the text
    underneath — hover the numbered badge to peek at the note, click it to edit,
    or open the quote list from the composer chip.
  • The Settings shortcut can now close Settings, not just open it. On the
    newly pinned Harness fork the action reads "Toggle settings" and the same
    chord dismisses the panel it opened. A host still on the previous pin keeps
    the open-only verb and its "Open settings" label; stock Harness registers no
    Settings action at all. The plugin prefers the new verb and falls back, so no
    host breaks.

Fixed

  • Open Settings shipped with a default chord that could not be pressed.
    Primary+Space is the language-toggle hotkey of most Chinese IMEs on Windows
    and Spotlight's chord on macOS, so the keystroke was taken before the page
    ever saw it: the action registered, the handler was correct, and pressing the
    keys did nothing at all. The default is now Primary+,. Anyone who had
    rebound the action keeps their own chord — only untouched defaults move.
    Primary+Space now carries a warning in Settings explaining why a chord
    bound to it may never arrive.
  • Selections put internal protocol markup in front of the reader. Side chat
    opened with a <selected_context> tag carrying session ids, node keys,
    sequence numbers and character offsets, and Add to conversation reached the
    same shape at submit time. Nothing downstream read those identifiers, so they
    were noise to the model and a leak to the user. A quote is now plain text: a
    prose heading, the quoted text with a │ gutter on every line, and the note
    on a ↳ line. The HTML escaping went with the tags, so a quote of
    Tom & Jerry no longer arrives as Tom &amp; Jerry.
  • The selection toolbar and reference dock did not follow the theme. They
    set geometry but no colour and fell through to the browser's default buttons,
    staying light in dark mode. Both now use the host's own design tokens, taking
    their separation from shadow in light mode and from a border in dark.
  • A reply streaming in the other Pane re-resolved every quote anchor on every
    frame
    , because the mutation observer watched character data across the whole
    conversation. It now filters to mutations that can affect an anchored row.
    Scrolling separately rebuilt the highlight registry every frame despite a
    comment claiming otherwise; it now publishes only when the ranges really
    change.
  • A saved note stayed parked beside the passage, covering the next
    paragraph.
    Its landing point is computed directly under the passage's last
    line, which is normally the following text. The collapsed state now parks
    nothing at all. Removing the pinned state alone was not enough: the hover
    preview is a latch that only a later pointer event clears, and it was armed
    even while a card was open, hidden behind the render gate — so a save opened
    the gate and the note appeared with no pointer having moved. Arming now
    requires that nothing is open.
  • The default install path never stated that it needs dsh on PATH. A
    reader with no Harness got through the download and the checksum and met a
    raw CommandNotFoundException on the third command, with nothing in the
    repository explaining how to get one. docs/INSTALL.md now states the
    prerequisite before the commands and points anyone without Harness at the
    bootstrap path.

Documentation

The doc set was audited against the code rather than against itself, which
turned up a class of error no release gate was watching for:

  • The compatibility table in both READMEs paired the fork branch
    feat/toggle-settings-verb with 1a8cf5b…, that branch's parent — so a
    reader who pinned what the table said got a Harness without
    toggleSettings(). The pin advance had updated the branch name and left the
    hash. Nothing compared either against release-contract.json; that check now
    exists (see below).
  • Neither README described the quote surface a user now literally sees in their
    conversation. Both now do, including the guarantee that the host DOM is never
    mutated — previously written down only in a source comment.
  • docs/PRODUCT_CONTRACT.md said More Details sends "escaped selected
    context". It has not for several commits.
  • The Windows end-to-end evidence in docs/COMPATIBILITY_MATRIX.md and
    docs/KNOWN_ISSUES.md was gathered against the rc.2 installer, which
    pinned a different Harness commit. Both now say so, and say plainly that the
    rc.3 installer has not been re-run. Three checks that have never run on any
    platform were listed as "targeted for v0.2.0-rc.2"; they are now listed as
    outstanding work rather than as a plan attached to a release that shipped.

Release gates

Two releases in a row shipped a stale version string or commit hash with all
nine gates green, because no gate compared a document against the release
contract. Three checks now close that class:

  • scripts/release-contract-check.mjs sweeps every user-facing document for
    version strings and pinned commit hashes and fails on any that disagrees with
    release-contract.json. Deliberate historical references are declared in a
    visible allowlist that names the file and the reason, so an exemption cannot
    be granted silently.
  • scripts/build-release-bundle.mjs fails if either bootstrap installer's
    embedded Workbench TGZ digest, version, or release URL disagrees with the
    artifact it just packed.
  • scripts/bootstrap/bootstrap.test.mjs asserts both installers' embedded
    WORKBENCH_VERSION and release URL against the contract. That assertion had
    been written as a deferred TODO because the contract used to lag the scripts.

Verified

Measured on the 0.2.0-rc.3 release run, not carried over:

  • Package unit tests: 42 files / 714 passing (dsh-workbench 40/707,
    dsh-workbench-panel-compat 2/7). tsc --noEmit clean. The rc.2 note said
    36 files / 515; that figure was stale by roughly two releases of work.
  • Installer script tests: 32/32 (was 31 — the deferred installer-version
    assertion is now one of them). Install-result contract tests: 47/47.
    Secrets-scanner unit tests: 67/67.
  • node scripts/release-contract-check.mjs: 52 checks, all passing (was 50 —
    the document version and pinned-commit sweeps are the two new ones).
  • pnpm release:check is 9 steps and exits 0.
  • The packed Workbench TGZ hashed identically across the release's two bundle
    passes. Those passes ran from different commits, differing only in the
    installer scripts, which are outside the package's files list — which is
    precisely what makes the stamp-then-rebuild loop terminate rather than chase
    its own tail.
  • Both installers' embedded TGZ digest, version, and release URL are asserted
    against the packed artifact by the bundler itself. The unflagged build failed
    on the stale rc.2 digest before it was stamped, which is the check doing its
    job on its first real release.

Not verified, and unchanged from rc.2: no isolated end-to-end run has been
performed for this release on any platform. The only such run that has ever
happened exercised the rc.2 installer, which pinned a different Harness commit.
See docs/COMPATIBILITY_MATRIX.md § Outstanding verification.

Distribution boundary

The repository is public source, not an official DeepSeek Harness
distribution. Forked Harness and Better Sidebar packages retain their original
names and must not be republished under upstream package namespaces. The
Harness pin (feat/toggle-settings-verb,
82de604afc683cd8c7692d0736f26f9ebc0f1823) is public and independently
verifiable at https://github.com/wanyexin1998/deepseek-harness, and is tagged
dsh-workbench-v0.2.0-rc.3-pin so it stays reachable if the branch moves.
Panel Compatibility (0.1.0-rc.1) is unchanged this release.

v0.2.0-rc.2 — Workbench Ask, shortcuts, and a working installer

Choose a tag to compare

@wanyexin1998 wanyexin1998 released this 30 Aug 22:14
Immutable release. Only release title and notes can be modified.

Status: source preview. Distribution is source plus a downloadable GitHub
Release (two TGZs, two bootstrap scripts, SHA256SUMS, release-manifest.json),
SHA256-verified, not GPG-signed. No npm package.

Fixed

  • The installer scripts did not run at all. Both bootstrap scripts called
    pnpm exec dsh in ten places, but that bin does not exist — apps/cli is
    not a root dependency, so pnpm never links it — and every run failed with
    ERR_PNPM_RECURSIVE_EXEC_FIRST_FAIL. They now call the repository's own
    root script, pnpm dsh, with a tripwire test guarding against a regression.
  • A path containing a space broke installation on Windows. The Harness
    CLI's dsh plugin forwarder runs with shell: true on Windows without
    quoting its arguments, so cmd.exe split a file: path at the first
    space. The default install target, %USERPROFILE%\dsh-workbench\downloads\,
    hits this whenever the Windows username contains a space, failing with an
    ENOENT against a truncated path. Fixed in the pinned Harness fork
    (fix/plugin-spec-quoting, commit 1a8cf5ba416246f22d9526a917af5fb233170c58).
    Stock Harness does not carry this fix; see docs/INSTALL.md and this
    README for the warning.
  • Workbench Ask (Primary+Shift+C) silently did nothing with no current
    Session
    — reliably reproducible right after using the new-Session
    shortcut. It now falls back to the host's most recent Workspace, and shows
    the user a message instead of only logging to the console when no
    Workspace can be resolved at all.
  • Alt+Q (switch to previous Session) never fired on macOS. Option
    synthesizes key into œ, not q, while the binding matched on q — so
    Settings showed "bound to ⌥Q" while the chord silently did nothing. Chords
    that include Alt are now derived from event.code, which is consistent
    across platforms.
  • An action bound only to its shipped default could never be unbound.
    The Settings "Clear" control required an existing override, so an action
    still on its default (e.g. sidebar toggle's browser-reserved Primary+B)
    had both Clear and Reset greyed out — there was no way to free a reserved
    key without first recording a throwaway chord.
  • Primary+Shift+C collides with the DevTools "Inspect element" shortcut
    in every major browser. Settings now surfaces the same browser-reserved
    warning this action already showed for the new-Session/new-window
    collision. The default chord itself is unchanged.
  • Workbench Ask waited a full second before showing the stock-Harness
    degradation notice
    , even though the composer-focus probe it was waiting
    on can never succeed on stock Harness. It now shows immediately.
  • The compatibility guard's verdict was not enforced everywhere. When the
    host's Presentation face failed the startup guard, side chat and Workbench
    Ask still treated it as protocol-2-capable — a click could fork a child
    Session and replace the source Pane. The guarded-incompatible state is now
    invisible to every downstream module, matching stock behavior exactly.
  • The security statement undersold an actual filesystem write. It claimed
    no added Host filesystem capability, but the Host entry seeds the bundled
    chat agent preset into $DSH_HOME/.agent-presets/ (create-only, never
    overwrites, never re-creates after user deletion). Wording now matches
    docs/PRODUCT_CONTRACT.md.

Verified

  • Package unit tests: 36 files / 515 passing; tsc --noEmit passes clean.
  • Installer script tests: 31/31. Install-result contract tests: 47/47.
  • New: secrets-scanner unit tests, 67/67 — previously that scanner shipped
    with zero test coverage of its own, so a broken rule would have gone
    unnoticed.
  • pnpm release:check is now 9 steps (adds the scanner unit-test step).
  • TGZ packing is reproducible: two builds from the same source produce
    byte-identical hashes.
  • Both TGZ SHA256 values are recorded in dist/SHA256SUMS; the general
    plugin installer scripts embed the Workbench TGZ hash directly.

Distribution boundary

The repository is public source, not an official DeepSeek Harness
distribution. Forked Harness and Better Sidebar packages retain their
original names and must not be republished under upstream package
namespaces. The Harness pin (fix/plugin-spec-quoting,
1a8cf5ba416246f22d9526a917af5fb233170c58) is public and independently
verifiable at https://github.com/wanyexin1998/deepseek-harness. Panel
Compatibility (0.1.0-rc.1) is unchanged this release.


DSH Workbench v0.2.0-rc.1

Pre-release

Choose a tag to compare

@wanyexin1998 wanyexin1998 released this 26 Aug 08:56
Immutable release. Only release title and notes can be modified.

DSH Workbench 0.2.0-rc.1

Status: source preview. No npm package or automatic installer is published.

Included

  • Two visible Session Panes over Harness Session Presentation protocol 2.
  • Stable visible membership and independent focused interaction ownership.
  • Explicit SessionProvider binding, Pane-local right/bottom panel hosts, and focus-safe lifecycle teardown.
  • Conversation Navigator with one precise marker per human input.
  • Host-backed shortcuts with Simplified Chinese and English names.
  • Optional Better Sidebar 0.16.1 Pane protocol 1 adapter.

Verified

  • Workbench: 180 tests, typecheck, build, and TGZ pack.
  • Panel Compatibility: 7 tests, typecheck, build, and TGZ pack.
  • Harness fork: 748 focused tests and 5 capacity-2 assembled Web snapshot tests.
  • Dependency audit: no known vulnerabilities in the two distributed source packages at verification time.

Distribution boundary

The repository is public source, not an official DeepSeek Harness distribution. Forked Harness and Better Sidebar packages retain their original names and must not be republished under upstream package namespaces.

End-user source installation requires a user-approved full Workbench commit and detached HEAD verification before repository code executes. Pinned Harness and optional Better Sidebar checkouts receive the same error, HEAD, detached, and clean-worktree verification before their instructions run. The Workbench TGZ includes the complete MIT notice for its bundled Schemastery and Cosmokit code.

Immutable source and artifacts

  • Source commit: 577874a6b88449ca959b883369d3b37a18697121
  • Final Codex Security scan: 109/109 tracked files, 0 findings.
  • Assets: two local TGZ packages, SHA256SUMS, and release-manifest.json
  • GitHub Actions and GitHub Packages/npm publication remain disabled.