Repository navigation
Ethos
What ThoughtKnot stands for, and the rules that follow from it. Each rule says how it is checked, so anyone can see whether it holds. 16 of 24 rules checked automatically.
Graph notes are for every reader, whatever their sight, hands or way of reading.
| Rule | State | Checked by |
|---|---|---|
| Every view of every host meets WCAG 2.2 AA in the light and the dark theme. | ✅ Checked automatically |
wcag_aa, wcag_new_hosts, contrast_both_themes
|
| Everything can be done with the keyboard alone. | ✅ Checked automatically |
keyboard_reach, keyboard_any_device, a11y_keyboard_auto
|
| Every control has a name and says its state, and every drawing has a text version. | ✅ Checked automatically |
a11y_semantics_auto, screen_reader_text
|
| Motion stops when asked, colour never carries meaning alone, and text can grow to twice its size. | 🟡 Being built (3 of 4 proved) |
motion_reduced_respected, colour_never_alone, forced_colours, text_scaling
|
A reader should never have to read in a language, a direction or a format that is not their own.
| Rule | State | Checked by |
|---|---|---|
| Every word the reader sees comes from one catalogue, so it can be translated, and follows the host's language. | 🟡 Being built (0 of 3 proved) |
words_catalogue, translations_as_files, language_follows_host
|
| Numbers, dates, times and lists are written and sorted the reader's way. | 🟡 Being built (0 of 2 proved) |
locale_formats, locale_sorting
|
| Right-to-left languages read right to left, checked in test languages on every view. | 🟡 Being built (1 of 4 proved) |
rtl_mirrors, bidi_labels, rtl_drawing_direction, pseudo_locales_checked
|
| A language or culture setting never changes a byte of what is saved. | 🟡 Being built (0 of 1 proved) | locale_never_changes_bytes |
| Words and pictures avoid idioms, jokes, gestures and symbols that only make sense in one culture. | ⚪ Not checked yet | Nothing checks this yet: a word list like the plain-language jargon list is the next step. |
If a reader has to stop and decode a message, the message has failed. Every word is written so a reader with ADHD can scan it: in the app, in the documents and in the code. Plain words hold in every language, so a translation is plain in its own language, never English mixed in.
| Rule | State | Checked by |
|---|---|---|
| What the user reads keeps to a reading grade of 9, sentences of 25 words or fewer, and no jargon. | ✅ Checked automatically | ux_copy_auto |
| Every document and code comment, in whatever language it is written, uses plain language: short sentences, short paragraphs, headings to scan by and no filler words. A file never gets worse, and a new file starts clean. | ✅ Checked automatically | plain_docs_auto |
| UK spelling in code, comments, messages and the interface. | 👤 Checked by a person | Reviewed in each pull request (CONTRIBUTING.md). |
Notes hold private thoughts. Nothing leaves the device unless the person sends it.
| Rule | State | Checked by |
|---|---|---|
| No network request of its own: no analytics, no update checks, no remote images. | ✅ Checked automatically | offline_and_mobile_apis |
| AI is off until the person turns it on, they see what will be sent before it goes, and nothing goes in the background or above a note's classification. | ✅ Checked automatically |
ai_off_until_chosen, seen_before_sent, never_in_background, never_above_ceiling, never_credential
|
An AI may suggest, but only the person changes their graph.
| Rule | State | Checked by |
|---|---|---|
| An AI's answer is a proposal, accepted or rejected by the person one change at a time. | ✅ Checked automatically |
answers_are_proposals, person_decides, proposal_one_by_one
|
| Where an AI helped, it says so. | ✅ Checked automatically | ai_disclosed |
A rule nobody checks is a wish. Each rule here says how it is checked, so anyone can see it holds.
| Rule | State | Checked by |
|---|---|---|
| Spec, then test, then code: each test is seen failing before its code is written. | ✅ Checked automatically |
tests_first, done_means_proved
|
| The quality figures only get better: a release that does worse fails unless the reason is written down. | ✅ Checked automatically | quality_ratchet |
| Every rule on this page names its check, or says plainly that it has none yet. | ✅ Checked automatically | ethos_checked |
Anyone may fork it, change it and send their work back, and the name stays with the original.
| Rule | State | Checked by |
|---|---|---|
| The licence (MPL-2.0) lets anyone use, fork and change the code and send a pull request, and keeps changed files open. | ✅ Checked automatically | mpl_licence |
| The name ThoughtKnot marks the original. A fork goes by its own name (TRADEMARKS.md). | ✅ Checked automatically | community_files |
| Everyone who takes part is treated with respect, and a problem can be reported in private (CODE_OF_CONDUCT.md). | ✅ Checked automatically | community_files |
| Every commit in a pull request is signed off, saying its author may send it under the licence. | 👤 Checked by a person | A box on the pull request template; an automatic check on each commit is the next step. |
| A security problem is reported in private and fixed before it is made public (SECURITY.md). | ✅ Checked automatically | security_policy |
A name in the last column is a requirement in requirements/editor-requirements.gql, proved by the tests it names.
Made from requirements/ethos.gql at 4cb393d on 19 Oct 2026. This page is generated: change the repository, not this page, as edits here are overwritten.