LMS wins · verified
Schema alignment audit · 2,677 content items

The schemas were wrong, not the content.

Every bec JSON schema was audited against what the LMS sync actually consumes — importer parsers first, then Zod, then Drizzle. verified edits later, full-repo validation went from 645 passing to 2,547. Each edit below carries its LMS evidence (file:line) and was independently re-verified by an adversarial agent against ≥3 real content items.

bitcoin-educational-contentrepo under audit bitcoin-learning-management-systemsource of truth ~130 agents · 2 workflowsaudit + fix waves 444 tests greenwas 405
Items passing
0
was 645 · +295%
Items with errors
0
was 1,567 · all genuine
Warnings-only
0
was 465
Schema edits applied
0
across 24 schemas
Validation outcome · before → after
before
after
pass error warning-only
01

Schema edits

Policy: LMS wins everywhere. Constraints the importer doesn't enforce were relaxed; fields it consumes were documented; enums it ignores were opened. Click a card for rationale, LMS evidence and content impact. Cards marked corrected were rejected by the adversarial verifier and applied with its correction instead.

— no edits match —
verifier addenda — observations documented, deliberately not applied
    02

    Code findings

    From a 4-dimension review of the CLI, each finding adversarially confirmed before fixing — all fixed in PR #4547. Headline: BIP39 chapter IDs would have broken LMS sync (it uuidValidates them); scaffolds now emit UUIDs.

    03

    Content errors

    87 items · report-only

    Genuine defects in the content itself, surfaced once schemas stopped lying. Deliberately untouched in this PR. Dominant pattern: machine-translated quiz YAML with unquoted colons ("10 000 BTC:n siirto…" parses as a YAML mapping).

    04

    Follow-ups

    Validate professor translation files

    ~2,451 .yml bios are never traversed by bec validate; the relaxed professor-content schema is ready. Small validate.py change.

    Schema for assignment.yml

    The LMS importer consumes id, company, assignment_name, mentor, telegram from it — bec doesn't know the file exists.

    Fix the 87 invalid content items

    Mechanical, scriptable: mostly quoting colons in machine-translated quiz YAML; one missing question.yml (btc102/065).

    courses/dev301 testnet_only typo

    The importer reads test_only; dev301's key is silently ignored, so the course syncs to mainnet.

    bec lint candidate: silent-drop keys

    Link keys the LMS never reads ('Github' capitalized in 53 project files, 'nost' typo, conference 'youtube') — valid but dead data.

    Quiz numbering TOCTOU

    Concurrent bec add quiz can race; numbering breaks at 1000 quizzes per course.