Solveig

CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

Start here

scratch/daily-standup.md — written at the end of the previous working day to be read at the start of the next: where the tree was left, what went in, and what is outstanding. scratch/ is gitignored and is not part of this repository, so the file is absent on a fresh clone and on any day that was not closed out. When it is absent, git log and the documents named below are the way in.

What this is

A small object-oriented language and its toolkit — bytecode compiler (Solas), VM (SolVM), REPL (Solis) and debugger (Solid). Prototype-based, everything is a message send. ~20k lines of C11, no dependencies. Docs are published at https://hansolovkarlsson.github.io/Solveig/.

parasol/ is Parasol, a second compiler that emits Solveig source, brought in as a subproject on 2026-09-12 with its history and a member of the toolkit since 2026-09-15 (the plan was A member of the toolkit on its roadmap, now frozen; nothing of it is open since 0.47.0 closed 7.1). Its pages are docs/PARASOL*.md, its records to the day it joined are frozen under docs/parasol/, its open roadmap entries are section 7 of docs/ROADMAP.md, and its house rules are in docs/method.md. It has nothing of its own: the version is the tree’s, written into the generated config.h by the Makefile, and parasol/ is cmd, include and src, as solas/ is. The root Makefile builds it since 2026-09-14, in a section that must include no Solveig header and link no Solveig library, and make test runs its suite; nothing under parasol/ includes a Solveig header, and that is the arrangement being tested. Its examples are in examples/, its dialects in lib/ and its seven programs are directories under programs/, none of them counted by docs/programs.md, and everything parasol generates goes under build/.

Commands

make, make test, make embed, make dist, make install, make clean; make examples for every example to a .sob, make sanitize for the suite under AddressSanitizer and UBSan from a clean build, and one Parasol program at a time as make ember, grammar, digest, ledger, prose, minibasic or bignum.

The records

In docs/: journal.md (why, in order — newest first), COMPLETED.md and ROADMAP.md (what exists and what does not — an item moves when it is settled, including settled against), CHANGELOG.md (when it shipped).

There is no postmortem.md, and one should not be created. Predictions are scored in docs/ideas.md, which keeps the claim above the outcome. docs/parasol/POSTMORTEM.md is Parasol’s, moved in with its other records on 2026-09-15 and closed the same day: nothing is appended to it, and a defect found in Parasol after that date is recorded the way any other is.

Each of those opens with a note stating its own job. That note is the specification for what belongs in it — follow it over any general instruction.

The suite checks the documents

make test runs tests/test_documents.c and programs/expect.sol over the prose, and docs/programs.md carries live counts inside HTML comment markers — <n><!--count docs-claims--> claims across <n><!--count docs-documents--> documents, where each <n> is whatever the last run left. Adding a file to docs/ moves those numbers and turns the suite red. Re-run make test after writing any document here, and re-sync the count if it moved.