FTS is an indentation-based executable specification language. A human-readable
.fts model can define domain objects, deterministic utilities, executable
examples, checked properties, morphisms, and machine-checkable evidence.
This repository is a snapshot. Development happens in
digitable-lol/flang — open issues
and pull requests there. Nothing here is updated automatically: no robot
overwrites this repository, so anything you push stays. It also means the code
here ages, and flang is the copy to read when the two disagree.
FTS is the total subset of the flang language: every .fts model is a valid
flang program lying entirely in the total class, the one whose termination the
compiler proves rather than the author promises (flang/SPEC.md, section 1).
The FTS core is by now written in flang itself and lives in flang/core/, next
to the reference implementation it is checked against. Keeping it in a separate
repository would mean maintaining two copies of the same code, and the copies
would diverge the first time someone fixed one of them and forgot the other.
The FTS core, the tools built on it (ftsc, ftsvm, ftspec), the JSON
schema, the examples, and the documentation in docs/ — the FTS part of
the flang repository, without the language itself.
- FTS as a library, as a CLI, or as an MCP server for agents: this mirror is
usable, but
flangcarries the newer version of the same code; - the language — sum types, collections, strings as data, recursion, pattern
matching — its compilation to JavaScript, C, Go, Rust, or Python, or the FTS
core written in flang:
flangonly. None of that is mirrored here.
An introductory course, in Russian: FTS: зачем разработчику исполняемая спецификация.
BSD 2-Clause. See LICENSE; the intent behind it, in Russian, is in LICENSE-RU.md.
Earlier versions were released under Apache-2.0, inherited from the original repository rather than chosen. Anyone who received the code under Apache-2.0 keeps those rights; the change applies to later versions.