Repository navigation
v0.37.0
A set is described twice, in the root manifest and in its own, and the two
could disagree without anything saying which value wins (engine#246). Two
additive functions, no schema change: one combines the two entries, one warns
where they differ. validateManifest gains one warning, for a lesson count in
the prose that differs from lesson_count. Nothing turns red;
asContentSetEntry and every error rule behave as before.
A set file inherits what it leaves silent from the root entry (engine#246)
A content repo describes each set twice: in the root manifest.yaml and in
the set's own manifest. inheritFromRootEntry(rootEntry, setEntry) combines
the two into one ParsedSet: a field the set file leaves absent or null
takes the root entry's value, and the projection defaults apply only when both
are silent. Where both carry a value, the set file's is kept; which file owns
which field follows in a later step of engine#246.
Why: asContentSetEntry turns a missing visibility into visible, so a set
hidden at the root was visible to every consumer that projects from the set
file (alc-books and the content template, measured 2026-10-09). The helper is
new API; asContentSetEntry is unchanged, so nothing changes for a consumer
until it combines the two entries.
Root manifest and set manifest disagreeing is reported (engine#246)
validateManifestPair(rootManifest, setManifest) compares a set's two
entries and warns W-MANIFEST-ENTRY-MISMATCH per field both carry with
different values (params setId, field, rootValue, setValue). null
and an absent key are silent at every depth, and nested objects compare by
content. A warning, so no repository turns red; validateManifest is
unchanged and still checks one file at a time.
Why: nothing reported the drift. Measured with this build on 2026-10-09
over the hub, the template and the eight alc-* repositories (53 sets): 46
warnings, 42 for description in seven repositories, 2 for tags, 1 for
title and 1 for title_native. A consumer showed one text or the other
depending on which file it read.
A stated lesson count must match lesson_count (engine#246)
validateManifest warns W-LESSON-COUNT-CLAIM when a set's title or
description states a lesson count in digits ("(90 Lektionen)", "a 15-lesson
course") that differs from its lesson_count; params field, claimed,
lessonCount. Number words are not read: in the content repositories they
also name deliberate subsets. A warning.
Why: alc-psychology described psych-intro as "90 Lektionen" in its set
manifest while the set had 115, and nothing compared the two. Measured with
this build over 65 manifest files of the eleven content repositories (108 set
entries): exactly that one warning.