Read
CLAUDE.mdcompletely before changing anything in this repository. It is the full directive: architecture, invariants, preset and RDF rules, and the reasoning behind each. This file exists because your tool does not load it automatically, and it is a pointer, not a replacement.Where this file and
CLAUDE.mddisagree,CLAUDE.mdwins. It is maintained in the same commit as the change it describes; this file is deliberately short so it has little room to drift.
SSTIM is the open formalized knowledge standard: specification, RDF vocabulary, semantic infrastructure, documentation, interoperability work, and shared identifiers. The broader SSTIM ecosystem adds its reference tooling and community, plus sensory-stimulation applications and initiatives related by adoption, contribution, support, or documented domain relevance. SSTIM Workbench is SSTIM's non-normative executable reference environment, with a precision multi-engine audiovisual application plus Graph Navigator, annotation, and a SPARQL interface over the SSTIM ontology.
Existing BSC/BSC Lab semantic identities and compatibility formats are preserved provenance, not the public project brand. BioSynCare is a separate closed-source commercial application that adopts and contributes to SSTIM; SSTIM Workbench does not feed it today. Do not conflate them or add BioSynCare-specific logic to SSTIM.
These are the rules where a mistake is expensive or irreversible. They are
summarised, not restated in full — CLAUDE.md §3 is authoritative
and includes the reasoning, which matters more than the rule.
- The engine timing context is the only clock.
engine.getAudioContext().currentTimeis the sole authority for audio-visual sync. NeverDate.now(),performance.now(),setTimeoutorsetIntervalfor timing. - Never bundle
static/worklets/. AudioWorklet processors load by URL at runtime. Importing one puts it in Vite's module graph and breaks it. - Never allocate inside
AudioWorkletProcessor.process(). ~2.67 ms budget on the audio thread; garbage collection there is audible. - Never modify ontology files without an explicit instruction naming the
file. Everything under
static/ontology/—manifest.jsonis the authoritative inventory — plus the three defensive publications indocs/technical/, which are timestamped prior-art records. - No health, medical or treatment claims in user-facing copy. Wellness
framing only. Regulatory, not stylistic. See
docs/concept/SCOPE.md. - Name your instrument before claiming something is missing. Before writing
that anything is absent, untested or undone, say what you checked with and
confirm it could see where the thing lives. Use
python3 scripts/locate-iri.py <iri>for SSTIM identifiers, anddocs/ontology/TERM_INDEX.mdbefore saying a term does not exist. An unreachable instrument is INCOMPLETE, never absence. - Svelte 5 runes only.
$props(),$state(),$derived(),onclick,{@render children()}. Notexport let,$:,on:click,<slot />.
| Touching | Read first |
|---|---|
| Presets, voices, bands, groups | CLAUDE.md §4 — the enums are case-sensitive and wrong case fails silently: Binaural, Martigli, Martigli-Binaural, Symmetry; groups Heal, Support, Perform, Indulge, Transcend; waveform fields are numeric 0, never "sine" |
| RDF, OWL, SKOS, SHACL | CLAUDE.md §5 and static/ontology/README.md |
| Audio engines, worklets, timing | CLAUDE.md §3.1–3.3 and §6, src/engines/README.md |
| Service worker / PWA | CLAUDE.md §9 and ADR 0009 — never auto-reload, never intercept cross-origin, never precache the heavy assets |
| Svelte components | CLAUDE.md §2 — runes only |
| Anything user-facing | docs/concept/SCOPE.md — wellness framing, no medical claims |
make validate for anything under static/ontology/ — it is the same gate CI
runs. make test and make check for application changes. Both take a while;
make -j4 -Otarget validate is faster and equivalent.
This repository uses Svelte 5 runes and a modular OWL/SKOS/SHACL ontology.
If you are unsure whether SSTIM already defines a term, grep
docs/ontology/TERM_INDEX.md — it is generated from the 18 modules and
CI-checked. Eighteen modules is more than anyone searches reliably by hand.