No description
  • C 57.6%
  • JavaScript 14.6%
  • Go Template 8%
  • Python 5%
  • C++ 4.7%
  • Other 10%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-10-22 23:36:48 +02:00
assets Home page: open with sharing rules as a general language and protocol; say records and information instead of notes 2026-10-19 19:37:44 +02:00
docs/api lace-site: render landing index.md through one assets/template.html; move logo to assets; drop Forgejo workflow 2026-10-02 07:52:03 +02:00
scenario-tools Explain Marks with a complete membership record example 2026-10-20 15:06:45 +02:00
tools Vendor lace-js at Lace aae42291; Lace's ABI contract now lives in its crate docs 2026-10-22 11:09:31 +02:00
vendor/lace-js Vendor lace-js at Lace 35f16f78 (demand evaluation, kept local evaluations) 2026-10-22 23:36:48 +02:00
.gitattributes Check out files byte-exact on every platform 2026-09-25 16:41:17 +02:00
.gitignore auto save 2026-09-02 19:49:42 +02:00
AGENTS.md Consolidate workspace guidance and retain project-specific instructions 2026-09-23 09:03:32 +02:00
index.md Explain Marks with a complete membership record example 2026-10-20 15:06:45 +02:00
LICENSE auto save 2026-09-01 07:56:55 +02:00
Makefile Workbench runs every exchange over an in-page ILTP connection and shows each direction's text under On the wire; ILTP playground (scenario-tools/iltp.html) loads .lr/.lrs records or a workbench step, edits both policies and shows the full uncompressed exchange; scenario steps drop limits and terminal 2026-10-10 09:53:41 +02:00
package-lock.json auto save 2026-09-02 19:49:42 +02:00
package.json auto save 2026-09-02 19:49:42 +02:00
pyproject.toml auto save 2026-09-02 19:49:42 +02:00
README.md Vendor lace-js at Lace aae42291; Lace's ABI contract now lives in its crate docs 2026-10-22 11:09:31 +02:00
TRADEMARK.md auto save 2026-09-01 07:56:55 +02:00
typedoc.json Give TypeDoc its compiler options directly instead of a generated tsconfig 2026-09-25 19:02:20 +02:00
uv.lock auto save 2026-09-02 19:49:42 +02:00

Lace website

Plain static sources for the Lace landing page and scenario workbench.

From this lace-site checkout, with the lace checkout next to it at ../lace and at the exact revision in vendor/lace-js/LACE_REVISION, run:

make                 # build public/, check it, and run Chromium smoke
make api-docs        # generate Rust, Python, and JavaScript API references
make syntax-test     # regenerate/test all three grammars and the Rust highlighter
make test            # execute every indexed scenario against pinned Lace
make serve HOST=0.0.0.0 PORT=8000

API generation runs cargo doc --locked --no-deps for lace-sans-io, lace-compiler, lace-rt, and lace-tokio; pdoc for the public lace and lace.advanced Python modules through the locked uv project; and the pinned TypeDoc tool over the package declaration entry points. The generated landing page is public/docs/api/index.html. Install GNU Make, Rust/Cargo, a C compiler, uv, Node.js 24, npm, Pandoc, Tree-sitter CLI 0.26.10, and Chromium before building. The smoke check uses chromium by default; set CHROMIUM to another Chromium executable path if needed. The Python and JavaScript documentation tools are resolved from uv.lock and package-lock.json.

public/ is generated and ignored. The build publishes the landing page, the current numbered specifications and their linked local Markdown documents, generated language API references, the scenario workbench, and the authenticated browser runtime at vendor/lace-js/, the same relative path the workbench imports from the source tree. make specs follows Pandoc links from the numbered specifications, preserves source directory paths and link fragments, and renders directory links to their README. The generated docs/source-pages.json inventory records pages for stale-page removal and anchor validation. Run the documentation-generator tests with timeout 55s uv run --frozen python -m unittest discover -s tools/tests.

public/downloads/lace.zip contains the pinned Lace Git tree and every pinned submodule tree, including their source and notices, under a lace/ root folder. Initialize the submodules before building: their pinned commits must be available locally. Archive generation performs no fetches and never reads working-tree file contents. The ZIP comment retains the Lace revision; the publication check compares all archived bytes and file modes against those pinned trees. It contains source, not prebuilt libraries. The build does not publish the copied paper, presentations, examples, or incubators.

vendor/lace-js/SHA256SUMS authenticates every copied distribution file. The build checks that the vendored files match it exactly and that the clean source checkout is at LACE_REVISION. The distribution includes LICENSE, TRADEMARK.md, THIRD-PARTY-NOTICES.txt, and RUST-STANDARD-LIBRARY-NOTICES.html; make runtime copies them unchanged with the bundles and WASM. It does not compare the checkout's own build, because the WASM is not byte-reproducible across hosts or toolchains. No generated output uses a symlink or sibling-relative import.

After committing changes in ../lace, rebuild and refresh the runtime pin:

rustup component add rust-docs
rustup target add wasm32-unknown-unknown
npm --prefix ../lace/js/crates/lace-js run build:wasm
npm --prefix ../lace/js/crates/lace-js run build:dist
rm -rf vendor/lace-js/dist && cp -R ../lace/js/crates/lace-js/dist vendor/lace-js/dist
git -C ../lace rev-parse HEAD > vendor/lace-js/LACE_REVISION
(cd vendor/lace-js/dist && sha256sum * > ../SHA256SUMS)
make runtime-check

The source checkout must be clean for pin validation to pass.

Individual checks

After building their inputs, each check can run separately:

make syntax-test
make tooling-test
make scenario-test
make check-output
make smoke

index.md owns the landing-page source and its page-specific styles. It and the published documents render through the shared Pandoc template assets/template.html, which the build does not publish. The landing visual is assets/interactive-expose-converge-quadrants.html; make extracts its inline SVG to assets/visual-local-first-expose-converge.svg for the static fallback, then copies both to public/.

Landing and source-document code blocks are highlighted at build time by the vendored Rust/Tree-sitter tool in tools/lace-tree-sitter/, through its Pandoc Lua filter and shared /assets/syntax.css. C blocks in linked Lace documents use Pandoc's built-in highlighter. The same Tree-sitter executable highlights scenario Interlang. Its tests verify that removing markup recovers every source byte for JavaScript, Python, Rust, Bash, Interlang/Lacegram, and Lace records.

These grammars are non-normative editor/build tooling synchronized to Lace-010, Lace-030, and Lace-120/130; the numbered specifications remain authoritative. Scenario policies use Interlang, including indented datalog: blocks for advanced rules. Lacegram highlighting displays ordinary Datalog and whole-line comments; it is not canonical Lace-030 validation. The record mode is only a UTF-8 documentation-display grammar; it cannot enforce Blob Data-Length framing or parse arbitrary non-UTF-8 Blob bytes and is not syntax-complete validation. Generated parser.c, grammar.json, and node-types.json files are tracked and updated with their grammar sources. See tools/lace-tree-sitter/README.md.

Scenario record fixtures use ordered [name, value] field occurrences and include only fields needed by their story or policy. Generic fields remain occurrence-based unless a policy records a real singleton contract. Numeric ordering fields use canonical unsigned decimal text with explicit Int ordering.

Every case is an ordered list of steps; each step adds records and runs one bounded interlace, checking every side's exact held and received records and the expected terminal (see scenario-tools/README.md). make also regenerates exact-source highlighted fragments for every rendered scenario policy while publishing the current scenario fixtures and workbench. They load inline from each scenario's policy-highlights.json; the browser falls back to escaped plain source if an artifact is unavailable. The Chromium smoke follows the landing's Explore link to the first beginner scenario and checks the level groups, timeline, dark mode, narrow-screen layout, the trusted-members record values, and a browser OPFS store across close and reopen.

The language libraries are source-checkout surfaces, not promised registry installs. In ../lace, Rust starts at core/crates/lace-tokio/ for async use, core/crates/lace-rt/ for standalone synchronous use, and core/crates/lace-sans-io/ for state machines. The JavaScript and Python guides are js/crates/lace-js/README.md and python/README.md.