Home / Changelog

Changelog

All notable user-facing releases of SparkLang (the Spark programming language) are listed here. Site and installers track website/downloads/manifest.json.

Site — 2026-09-04

  • Homepage generated from spark --status (python/sparklang/status.py). Agent contract: /llms.txt, /agent.md.
  • CI job site-homepage dry-runs every snippet and runs the llms.txt-only fixture. Deploy: wrangler pages deploy website --project-name=sparklang-dev.

0.6.22 — 2026-09-02

  • Live --allow-shell: ./spark --live --allow-shell forks ./spark-shell, which execves allowlisted echo / true / false only. Never system(), never /bin/sh -c. Gate: make test-shell.
  • JS + C host FFI: js/sparklang and host/c/sparklang.h. ./spark --embed advertises api=python,js,c. Gate: make test-host-embed.
  • Ask accounting: live wall-clock latency_ms; run-level [accounting-run] via spark-ask-http --rollup. Dry zeros. Gate: make test-ask-gateway.
  • 0.6.17 — 2026-09-02

    • Abstain held-out eval + continue-SAMPLE: ./spark-abstain --live eval stratified train/held-out, precision/recall/F1 (not production SOTA). Continue path: HF generate, SAMPLE_URL, or honest deferred. See Abstain heads.

    0.6.16 — 2026-09-02

    • Abstain real-dim corpus path: curated corpus_seed.jsonl, validate-corpus, synthetic backbone export (dim 768) for dim-matched train/ask, optional env-gated HF smoke (local only, no CI downloads). See Abstain heads.

    0.6.15 — 2026-09-02

    • Abstain /spark_hidden sidecar: HF FastAPI export beside stock vLLM (spark_hidden_sidecar.py), shared contract + client env SPARK_ABSTAIN_VLLM_URL / TIMEOUT / TOKEN. Stub kept for CI. See Abstain heads.

    0.6.14 — 2026-09-02

    • Abstain export→train (dim-matched): ./spark-abstain --live export writes JSONL hiddens from an explicit HF backbone or a CPU toy backbone. Fixtures labels_text.jsonl / labels_exported.jsonl. Docs: Abstain heads. Gate: make test-abstain.

    0.6.13 — 2026-09-02

    • No Bifrost-style model alias pick: dry-run / use auto keeps the prior configured model; live refuses --model auto. Explicit HF path / org/name only.

    0.6.12 — 2026-09-02

    • Abstain HF hooks: live head ask SELECT-before-SAMPLE from last-token hidden (file / HF / optional /spark_hidden). See Abstain heads.

    0.6.11 — 2026-09-02

    • Abstain / IDK heads: head abstain|train|attach|ask + ./spark-abstain. Not LoRA.

    0.6.10 — 2026-09-02

    • Python host embed: from sparklang import run under python/sparklang/ runs a .spark path or source string via the spark CLI (dry-run default; live=True opt-in). Returns stdout / stderr / exit code; missing binary or path fails loud.
    • ./spark --embed handshake advertises api=python (JS / C FFI remain [next]).
    • Example: examples/python/host_embed.py. Gate: make test-host-embed.

    0.6.9 — 2026-09-02

    • Language method "…" on model train / model build (includes spark_faq_index).
    • Live GAS forwards the statement via ./spark-train-http --spark-line.
    • Live model status "job-id" polls that job id — not hardcoded job-dry-001.
    • Dry fixtures fail loud on unknown method or unknown status job id.

    0.6.8 — 2026-09-02

    • Fourth CPU train method: spark_faq_index — FAQ corpus + dual-encoder retriever → faq_index.json + encoder.pt. Not LoRA / not a marker stub. Same HTTP method field.
    • Example: examples/model_train_faq.spark.
    • Docs / hero list four methods honestly.

    0.6.7 — 2026-09-02

    • http get / http post auth + retries: bearer "TOKEN", header "Name: value", retries N, backoff MS (keep existing timeout). Live curl sends real headers; retries only on documented transport exits (7/28/35/52/56) and HTTP 408/429/5xx subset. Dry-run still fixtures-only (missing fixture → exit 1; no fake network).
    • Examples: http_get_auth.spark, http_get_auth_live.spark, http_get_retries_live.spark.
    • Gate: make test-http / SPARK_HTTP_LIVE=1 covers bearer + 503 retry proof.

    0.6.6 — 2026-09-02

    • Three CPU train methods (not LoRA) behind the same HTTP contract: spark_distill_cpuweights.pt; spark_pref_packpref_pack.json + ranker.pt; spark_playbook_fitplaybooks.json + router.pt.
    • Select via POST method, companion --method, or SPARK_TRAIN_METHOD.
    • Live captures: live-train-capture.txt, live-train-methods-capture.txt.
    • Hero / What's real today list the three methods honestly.

    0.6.5 — 2026-09-02

    • Custom train proof: reference trainer runs spark_distill_cpu — tiny PyTorch student on CPU that mimics teacher replies from chat JSONL. Writes real weights.pt. Not LoRA / not HF PEFT / no voice GPU. Live capture via ./spark --live examples/model_train.spark.
    • Hero: “Train specialists — CPU distill, not LoRA” (honest about what the reference path trains).
    • One expect form on homepage / Learn / flagship examples: expect contains NAME fixture "PATH".
    • expect equal / expect contains: assert a bound name against a literal or fixture "PATH". Pass exits 0; fail exits 1 with the reason. Gate: make test-expect.
    • Flagship train→status→expect: model train / model status bind -> names in dry-run so expect can assert. Homepage / Learn use examples/train_eval.spark (exit 0); fail path examples/train_eval_fail.spark (exit 1).
    • Reference trainer: tools/spark-train-ref (server.py + distill_cpu.py).

    0.6.4 — 2026-09-02

    • Landing thesis: homepage leads with train + dry-run CI (why a language: reviewable .spark + fixtures without keys). Voice / network / browser demoted to “also”. Trust strip: MIT · v0.6.3+ · Sparklang naming; no broken personal GitHub CTA.
    • model train / model build = real jobs; model plan = plan only.

    0.6.1 — 2026-09-02

    Status / feature pass:

    • First-class embed / retrieve + dry fixtures + spark-rag-http (also #21).
    • Shell/run dry-run: shell / run allowlist; ./spark --embed stub.
    • Per-ask [accounting] (dry zeros; live prints gateway usage when present).
    • Docs: ADOPTION_BAR, ROADMAP, RELEASE; receptionist [goal] example.
    • Site: SparkLang searchability; de-emphasize MITM/pcap/IDE/voice-as-prod.

    0.6.3 — 2026-09-02

    • Model training pillar: model train / model build submit real training jobs; model status polls artifacts. Dry fixtures under examples/fixtures/train/. Live companion ./spark-train-http (SPARK_TRAIN_BACKEND=http|local-yield). Docs: Model training.
    • model plan replaces blueprint-only markdown export.
    • Analyze / compare / improve stay eval helpers.

    0.6.2 — 2026-09-02

    • Product rename: public identity is SparkLang at https://sparklang.dev/ (site, docs, About, status). Public org source when ready.
    • CLI: binary / bootstrap names stay spark and ./spark-bootstrap (no overnight break).
    • IDE: language ide ops kept; editor story prefers LSP + highlighting.
    • Installer kit filenames / hashes remain 0.6.0 until the next packaging pass.

    0.6.0 — 2026-09-02

    • Runtime / installer kit 0.6.0 (see Downloads manifest).
    • Language + dry-run runtime: .spark programs, fixtures, compile/BC path, IDE language ops, playbooks.
    • Optional live ask via any OpenAI-compatible AI_GATEWAY_URL (not required for the default dry-run story).
    • Optional surfaces: voice/PSTN (gated), browser/MITM, network capture.
    • model analyze / compare / improve = eval helpers; train/build/status arrived in 0.6.3.

    Earlier

    Prior notes stay on this page and in the installer manifest.json history. Binary downloads remain on Downloads (Pages-hosted), not a public git forge.