Skip to content

v2.2.0 — the Morning Brief

Choose a tag to compare

@hyasin270 hyasin270 released this 05 Sep 08:13
· 549 commits to main since this release
5fe45b6

The Morning Brief: the programme's routine data, read every morning, so support goes where it is needed.

Structured-pedagogy programmes that scaled kept delivery honest with routine data. Tusome recorded every coach visit on a tablet. Each term, dashboards of visit rates and pupil fluency were shared with every coach, in front of the local education directors [Piper-JEC18]. The same programme's own review found it "failed to fully exploit the available classroom observational data to better target instructional support" [Piper-JEC18]. The Morning Brief closes that loop at a daily rhythm. Every working morning the programme team gets one thread, in the channel it already uses, that answers five questions with a number behind each. Who is on the platform, and who used it? Are teachers teaching with the lesson plans? Is the teaching improving? Are coaches making their visits against target? Where should attention go next? The last panel lists every school, worst first. The charts, the cohort and the window are the same every day, so the team sees drift, not a story. Friday's thread rolls up the week.

Where it sits in a structured-pedagogy programme: the monitoring and support-targeting loop. It reads what the other parts record (lesson plans, coaching, reading checks, attendance, observations) and points coaches and managers at the schools that need a visit.

Watch the film (81 s): Morning_Brief_Every_Morning.mp4, attached below.

Slides for programme teams: Every_Morning.pdf, attached below.

What it does not do (honest limits)

  • Platform activity, not learning. It reports what teachers and coaches did on the platform. Its reading panel shows Rumi's own reading checks, not an independent assessment.
  • Only what is recorded. A visit or a lesson that happens off the platform does not appear.
  • Read-only. It reads the database and changes nothing; it messages the programme team, never teachers.
  • A brief is not an evaluation. Trends show where to look; they do not show what caused a change.

Sources

  • [Piper-JEC18] Piper, B., DeStefano, J., Kinyanjui, E. M., & Ong'ele, S., 2018, "Scaling up successfully: Lessons from Kenya's Tusome national literacy program", Journal of Educational Change 19(3):293–321. https://doi.org/10.1007/s10833-018-9325-4

For implementers

It arrives wherever your deployment already talks (WhatsApp, Slack or Discord, and Rumi Messenger since v2.7.0) through the bot's own channel drivers, and leaves a live page in the dashboard behind it. No new credentials: one read-only database URL and a list of recipients.

What's new

  • brief/ — the Python package. A code-level calendar (a morning brief covers the previous working day; Monday's is about Friday). Live-schema detection: panels switch themselves on from information_schema, so a fork that records classroom observations gets that panel for free. Every metric is a tagged SQL query with its prose twin in brief/README.md. Panels follow one binding grammar: a delta chip on every headline, one organising unit breaking down every panel, every school listed worst-first, smoothed lines with the real points marked. python3 brief/cli.py check says what your database can draw; python3 brief/cli.py sample renders a synthetic brief with no database at all.
  • Delivery through the messaging router — rumi brief [--send] [--weekly] [--dry-run], an idempotent sender, and bot/workers/brief.worker.js for any daily cron. New team targets in the drivers: slack:channel:C…, discord:channel:…, and …@g.us WhatsApp groups.
  • A live page — /observability/brief (latest daily and weekly) and /observability/brief/screen?p=N, a self-refreshing single panel for an office wall.
  • The morning-brief agent skill, docs/features/morning-brief.md, a BRIEF_* block in .env.template, a rumi status row, and a CI job that runs the Python suites.

Get started

pip install matplotlib numpy 'psycopg[binary]'
# .env: BRIEF_DATABASE_URL=<read-only Postgres URL>  BRIEF_RECIPIENTS=<targets>  BRIEF_TZ=<IANA zone>
rumi brief            # a dry run
rumi brief --send     # deliver it

Full changelog: CHANGELOG.md