Repository navigation
flame 0.5.0
flame 0.5.0 — the flame command for Linux, macOS and Windows, its installer, and
flame-client, flame-core and flame-web, the libraries it is built from.
Installing
curl -fsSL https://propensive.dev/flame | shOr, without trusting the redirect, from this release alone — a 106-byte POSIX-shell bootstrap
which downloads the flame script below, checks it against the digest given here, and runs it:
openssl base64 -d <<EOF | sh -s -- https://github.com/propensive/flame/releases/download/0.5.0/flame 96f6ab199f32aa35712d06f2f148a3f9f4655f001e6ae808036efdcf707b99c4
Zj1gbWt0ZW1wYDtjdXJsIC1zTG8gJGYgJDF8fHdnZXQgLXFPICRmICQxO2Nhc2UgYG9wZW5zc2wg
ZGdzdCAtc2hhMjU2ICRmYCBpbiAqJDIpY2htb2QgK3ggJGY7ZXhlYyAkZjtlc2Fj
EOFChanges
Release 0.5.0 against Soundness 0.70.0 and Pyrocosm 0.5.0 (#26)
flame 0.5.0 is built against Soundness 0.70.0 and Pyrocosm 0.5.0, from releases rather than snapshots, and its executables are packaged with xek 1.0.0. It shows raster images and SVG drawings as media in the web front-end, wraps diagnostics without breaking types or code samples, and lets a submitted line go ahead of pending completions.
The builder pin is now etc/xek.tsv, fetched into dist/xek by make xek-fetch, and make flame packages with the xek 1.0.0 command line.
Wrap diagnostics with Flow, holding types and code samples whole (#25)
Compiler diagnostics in the terminal are word-wrapped at 80 columns, but a highlighted type or code sample must never be split, so SemanticRender.flow tracked columns by hand. Soundness #1992 (propensive/soundness#2121) taught tessellate's Flow.wrap about unbreakable spans, and flame now uses it: the message's pieces are concatenated, each type's and code sample's extent noted, and Flow wraps the prose around them — the same wrap the plain-message path already used.
- Diagnostics wrap exactly as before, with types and code samples kept whole; a type such as
Map[String, Int]is now protected as a span rather than as an atomic word, with the same result. - A multi-line code sample's own newlines remain hard breaks.
Snapshot debt. etc/refs pins Soundness 0.70.0-781ba6058e92 (commit 689be6c03c, main after #2121), published as the pre-release snapshot-781ba6058e92. A snapshot pin is a debt: this repository cannot be released until a Soundness release containing #2121 exists and the pin is bumped to it. The bump also retired the one aspire in the tests for aspirationally (probably #2101).
Let a submitted line go ahead of pending completions, and coalesce them (#24)
A line you submit is no longer held up by completions. Completions arrive with every keystroke and each costs a compile under the session's compiler mutex, so when one probe was slow a whole burst of them queued behind it, with the submitted line at the back: a daemon was seen with 24 completions and 2 evaluations parked on the lock, which made both front-ends look frozen.
Now each completion takes a ticket, and one that is no longer the latest when its turn at the compiler comes answers with nothing (the front-ends already discard a stale reply by generation), so a burst of keystrokes costs one compile. And a completion stands aside while a submission is pending, so an evaluation never waits on a probe.
The underlying slowness — the compiler stating the /home/runner/… source paths recorded in release TASTy, which an autofs-mounted /home on macOS makes ~10,000× slower than an ordinary miss — is for Soundness to fix by compiling with -sourceroot (propensive/soundness#2117); this change keeps the REPL responsive regardless.
Show images, drawings and tree-shaped data as media in the web front-end (#23)
In the browser, a result that is a hallucination Raster (Raster in Png, Raster in Jpeg, or one of no format, carried as PNG) now shows as an image, and a savagery Svg as an inline drawing, in place of their toStrings. The terminal client draws the image in colour, cropped to the terminal's width, and describes the drawing. Hallucination and savagery are on the REPL classpath, so import soundness.* is enough to build them.
A Json, Yaml, Cbor, Xml or Tel value shows as an expandable tree, one node per container or leaf, labelled in the format's own notation: the root and its children start open and anything deeper closed, each node can be opened or closed by clicking it, and those choices survive as the transcript grows. The terminal shows the whole tree. CBOR (breviloquence) and YAML (ypsiloid) join the REPL classpath.
Rendering goes through Pyrocosm's Presentable as before; the media instances come from pyrocosm-media, and each exhibited line imports them inside its own @experimental initializer, so they resolve in every session, experimental or not. The tree instances live in Pyrocosm's model and need no import.
Debt: this pins the Pyrocosm snapshot 0.4.0-ac7462379798 (propensive/pyrocosm#39). Pyrocosm has to be released, and the pin bumped to that release, before flame can be.
Pin the propensive/.github commit that fetches xek's releases (#22)
Moves etc/github-ref to the propensive/.github commit whose xeq-fetch.sh finds the builder under xek's release naming (xek-<version>/xek) as well as the old one. The next xek release can then be pinned here, and executables packaged with it, without another change. The same commit's release.sh can also propose a release to the repositories named in etc/downstream; this repository names none, so its releases are otherwise unchanged.
Run fume 0.5.0, flair 0.4.0 and flame 0.4.0 (#21)
Moves etc/tools to fume 0.5.0, flair 0.4.0 and flame 0.4.0, the releases built against Soundness 0.69.0 and Pyrocosm 0.4.0. fume 0.5.0 reads the 0.69.0 test-event schema, so the suite runs through its event stream rather than fume 0.4.1's legacy fallback. No source changes.
Assets
flame-client, flame-core and flame-web, each attached as <artifactId>-0.5.0.jar, with
its POM and ivy.xml embedded under META-INF/maven/ — the jar alone is enough for a consumer
to resolve it. Depend on this release by pinning it in etc/refs:
propensive/flame 0.5.0
make sync-deps installs the set into a local ivy repository, transitively; see
propensive/.github for the scheme.
Also attached: one flame executable per platform (flame-linux-x64, flame-linux-arm64,
flame-macos-x64, flame-macos-arm64 and flame-windows-x64.exe); flame, the polyglot
bootstrap — a small any-shell script, to be renamed flame.bat or flame.ps1 on Windows, which
downloads the right executable, verifies its checksum, replaces itself and re-invokes; and
install.sh, which https://propensive.dev/flame redirects to. Each executable externalizes
the libraries above, resolving further dependencies from the Soundness and proscala releases and
from Maven Central on first run.