Version 4.1.0 · All versions

All pages

Policy

The rules Solid Memo's code is based on: which public policy applies (none), which published rules from outside the project the code follows, and the project's own rules, written as data the code checks.

No public policy applies

Solid Memo implements no law, regulation or government policy. It is a volunteer project, not built for or by a public organization, and no public body has asked it to carry out a policy. If that changes, the policy and the code that implements it will be added here.

What the app does with personal data is in privacy.md.

Rules from outside the project

Each of these is a published rule the code follows as written, or with the departures listed. The formats Solid Memo reads and writes are in standards.md.

RuleVersionPublished atImplemented inChecked by
SM-2, the SuperMemo 2 scheduling algorithm1990SuperMemosm2.ts (srs.md)sm2.test.ts, row by row against srs.md's worked examples
FSRS-6, the Free Spaced Repetition Scheduler6, as fsrs-rs v6.6.2Open Spaced Repetitionfsrs.ts (srs.md)fsrs.test.ts, row by row against srs.md's FSRS-6 worked examples, and against fsrs-rs's published test vectors
Unicode CLDR plural rulesthe browser's CLDRUnicode CLDRIntl.PluralRules in i18n.tsx (i18n.md)i18n.test.tsx: every plural message gives exactly its language's categories
BCP 47 language tagsRFC 5646, RFC 4647IETFlanguageTag.ts, locale.ts (vocab.md)languageTag.test.ts, locale.test.ts
Unicode normalization form CUAX #15Unicodethe deck library check and search (deck-library.md, search.ts)deckLibrary.test.ts, search.test.ts
DCAT-AP, the EU's profile of DCAT3.0.1SEMICthe vendored shapes in packages/vocab/vendor/ (validation.md)npm run library:check, and the pySHACL cross-check in CI (shacl_crosscheck.py)

SM-2

Woźniak, P. A. (1990). Optimization of learning. Master's thesis, University of Technology in Poznań. SuperMemo publishes the algorithm's description as Application of a computer to improve the results obtained in working with the SuperMemo method. Solid Memo uses the ease factor and interval formulas as published: an ease factor of 2.5 to start, never below 1.3, intervals of 1 day, 6 days, then the last interval times the ease factor, and a lapse (a grade under 3) starting the card's repetitions again without changing its ease factor. It departs from the description in two recorded ways:

The answer scales and a course's multiple-choice answers map onto the same grades; they do not change the algorithm (srs.md).

FSRS-6

FSRS-6 is the sixth version of the Free Spaced Repetition Scheduler, by Jarrett Ye and the Open Spaced Repetition project, described in The Algorithm. Solid Memo reimplements its formulas and its 21 default parameters as the reference implementation, fsrs-rs v6.6.2 (BSD-3-Clause), gives them; no code is copied from it. It fixes what FSRS-6 leaves to the app (srs.md):

CLDR plural rules

A plural message gives one form for each plural category of its language ("1 card", "2 cards"). The categories, and which number falls in which, are the Unicode CLDR plural rules (by language). The app does not ship them: it asks the browser's Intl.PluralRules, so the CLDR version is whichever the browser has. The tests run on Node.js, which has its own copy of CLDR, and the journeys (strings.ts) pick each plural form in the browser they drive, as the app does.

The project's own rules

The project's own rules are written as data, in formats a machine can read, and live in this repository beside the code that applies them.

RuleWhere it is writtenWhat applies it
The shape of every document in a pod and in the librarySHACL shapes in ns/shapes/ (shapes.md)the app in the browser and npm run library:check (rdf-validate-shacl), and pySHACL in CI (validation.md)
The meaning of every Solid Memo termthe vocabulary in ns/vocab/ (vocab.md)the constants generated from it, kept in step by npm run generate:check
What a library deck version must state, beyond the shapes: its place, its series, its publisher, the version before it and its licenselibraryRules.ts (deck-library.md)npm run library:check, and the Studio's check for the library
What the repository's library asks of a deck: a title, description and keywords in every language the app speaks (LIBRARY_LANGUAGES, from LOCALES in locale.ts), the theme EDUCrepoPolicy in curationRules.tsthe Studio's check for the library; npm run library:check for the languages of each deck's newest version, and the library deck shapes for the rest
What a page may load and runthe Content Security Policy in apps/web/index.html (markdown.md)the browser; build.test.ts checks it

Every published version of a shape or of a deck is frozen: a change is a new version beside it (shapes.md, deck-library.md). So a rule the published shapes do not state, such as that a library deck version names its license, is added as a library rule, not by editing a shape.

No policy outside the project is based on this code. If one is, the code it is based on is the code in this repository.