In development
Musical truth maintenance.
Ficta reconciles musical sources that disagree — audio, notation, annotation — into theories you can defend, question, and revise. It mechanises reasoning, not musicianship.
- sourceaudio · MusicXML · annotation
- claimasserted, not yet true
- judgementthe human call, recorded
- theorycoherent, versioned, revisable
- projectionrebuilt from the theory
Nothing skips a step. A source cannot assert a fact into existence, and a projection is never the record — it can always be rebuilt from the theory that produced it.
Ficta is what an editor supplies, marked as supplied.
In music before roughly 1600, sources routinely leave out accidentals the performer is expected to add. Musica recta is the given gamut — what the source actually says. Musica ficta is what informed judgement supplies on top of it.
Editors print ficta above the staff, never inline, so a reader can always tell the source from the inference. Change one ficta decision and the consequences run through the whole passage, which is why it is argued as a constraint problem rather than a matter of taste.
That is this software in one medieval term: claim and fact kept apart, judgement recorded, and a reading that stays revisable because the reasoning was never discarded.
Previously worked on as Arranger's Workbench. The old name described the bench; this one describes the work.
The build, as it was decided.
Ficta is not released. What exists is a specification and an accepted decision record, so that is what this page shows — not screenshots of something unfinished.
- ADR-0001 Application-owned musical knowledge model The musical model belongs to the application. No file format or notation library gets to decide what a note means here.
- ADR-0002 Establish facts through judgements in versioned theories A source makes a claim. A person makes a judgement. Only then is there a fact — and only inside a theory that carries a version.
- ADR-0004 Treat projections as reproducible derivations Anything rendered can be regenerated from the theory behind it. Output is never allowed to become the record.
- ADR-0008 Keep core operation local, require explicit network authority Everything works offline. Reaching the network is a capability that must be granted, never a default.
- ADR-0011 Isolated Python workers for analysis and machine learning Analysis runs in workers that propose results. They cannot write canonical state, so a confident model cannot quietly become the truth.
- ADR-0023 Implement the domain and application core in Rust Truth maintenance and coordinated writes live in one typed core. Nothing outside it establishes musical truth.
| Platform | Desktop — macOS, Linux, Windows |
|---|---|
| Core | Rust. Owns the domain, judgements, and truth maintenance. |
| Analysis | Isolated Python workers that propose, never write |
| Interface | SvelteKit in a Tauri shell |
| Storage | SQLite with content-addressed local objects |
| Network | None by default. Granted per capability, never assumed. |
| Status | In development. Specification and decision record first. |
Nothing to install yet. If you work with sources that disagree and want to hear when there is something to try, get in touch.