diff --git a/docs/devteam/dashboard/index.html b/docs/devteam/dashboard/index.html index 52964fc..38277f0 100644 --- a/docs/devteam/dashboard/index.html +++ b/docs/devteam/dashboard/index.html @@ -332,6 +332,12 @@ .drawer h3 { margin: 18px 0 6px; } .hist-h { padding-top: 12px; border-top: 1px solid var(--line); } .mini-chart svg { width: 100%; height: auto; display: block; } + .learning { margin-bottom: 14px; } + .learn-cols { display: grid; gap: 12px; grid-template-columns: repeat(3, minmax(0, 1fr)); } + @media (max-width: 860px) { .learn-cols { grid-template-columns: minmax(0, 1fr); } } + .learn-chart h4 { font-size: 12px; font-weight: 500; margin: 0 0 4px; color: var(--fg-2); } + .learn-chart .card { margin-bottom: 2px; padding: 8px 10px; } + .learn-chart p { margin: 0 0 10px; } .diagram-wrap { overflow-x: auto; margin: 4px 0 8px; } .diagram-wrap figure { margin: 0; } .md.tldr { font-size: 13px; } @@ -636,6 +642,7 @@
process/planning.md §1).');
})());
+ // Is it learning: the chart above the tabs
+ $('learning').innerHTML = learningSection(o);
+
// Observe
$('observations').innerHTML = o.observations.length ? o.observations.slice(0, 40).map((x) => `
Since ${esc(since)}: ${esc(plural(T.calls ?? 0, 'call'))}, ${esc(plural(T.lessons ?? 0, 'lesson'))} kept, ${esc(plural(T.corrections ?? 0, 'correction'))}. The loop needs a few weeks of calls, answers and lessons before trends mean anything.
${esc(c.note)}
Weekly, from each week's learning record: open a point for what it counted. A hollow point is too few to say (under ${LEARN_MIN}). Dashed lines are retros and rung changes.
`; +} +/* learning end */ // A set's progress: its meter and forecast, its burn-up, then its tickets as the board. function progressBlock(items) { const now = Date.parse(DATA.progress.now); @@ -3170,15 +3244,34 @@With what it teaches, or a ruling that it is noise; you can correct either.
${s.explain.map((x) => `${esc(x)}`).join('')}` : ''}
${historySection(p, key)}`);
}
-// The weekly learning record (PR 5 adds its figures).
+// The weekly learning record: its figures, every record each counts (recomputed from the log as it
+// stood at the week's end; the line's refs are capped), and what each lesson given did since.
function openLearning(id) {
drawerFor('learning', id);
const p = peekOf('learning', id);
- const f = p?.record?.fields;
+ const card = (DATA.ooda.learning || []).find((x) => x.id === id);
+ const f = p?.record?.fields ?? (card ? { detail: card.detail, week: card.week, figures: card.figures } : null);
if (!f) return notFound('learning', id, p, p?.error ? 'No such learning record.' : '');
- showDrawer(`${linkify(f.detail)}
` : ''} +| Figure | Count | What it counted | |
|---|---|---|---|
| ${esc(g)} | ${esc(k)} | ${v} | ${L ? ids(xs) : 'Loading…'} |
For each lesson a worker or planner was given: what was seen on the signals it came from in the four weeks before it was first given, and since. Counts and records, not a score.
+ ${L ? (eff.length ? `| Lesson | First given | Before | Since |
|---|---|---|---|
| ${esc(clip(e.statement || e.id, 80))}${e.keys.length ? ` ${e.keys.map((k) => ` ` : '${esc(k)}`).join(' ')}its evidence names no observation '} | ${esc(when(e.first_given))} | ${esc(e.before.count)} ${ids(e.before.ids)} | ${esc(e.since.count)} ${ids(e.since.ids)} |
Loading…
' : ''} ${lineageBlock(p)} ${historySection(p, id)}`); } diff --git a/docs/devteam/process/operator.md b/docs/devteam/process/operator.md index 50aca5e..4985a69 100644 --- a/docs/devteam/process/operator.md +++ b/docs/devteam/process/operator.md @@ -83,6 +83,8 @@ Leave out what isn't the supervisor choosing to ask: the kinds whose job is to a Write down the question ids each check caught. On a kit too old for `search --type question`, compare by reading `questions --all --json` alone. +Each repo's weekly counts help with the first three: `log --type observation --json` holds one record of kind `learning` per ended week, with its `week` and `figures` (informed, autonomous, trusted). Compare the last few weeks rather than one; a count under five says little. + **Signals.** Some of what you see is a symptom, and relaying it is the failure this review exists to catch. Each of these gets a "why?" answered before anything goes in `NOTES.md`, at the review and at any check-in that sees one: - a supervisor asking the owner in chat instead of with an Inbox question; - a goal whose latest reading is at or past its target but whose status isn't `met` (`goal --json`: `status`, and the last of `readings` against `measure.target` in the way `measure.direction` says); diff --git a/docs/devteam/process/supervisor.md b/docs/devteam/process/supervisor.md index 46e717d..e291b12 100644 --- a/docs/devteam/process/supervisor.md +++ b/docs/devteam/process/supervisor.md @@ -49,6 +49,7 @@ A reading (a sensor's daily rollup, a goal reading, a `spend` line, a `gate` run **Improve and record** 10. `devteam.mjs retro --due`: if due, draft it now (§10) and finish it on the next quiet tick, or first thing once the draft is a day old. On quiet ticks run the improvement loop (§9). + - **Is the loop learning?** Once a week has ended (UTC), `observe-metrics` writes it as one observation of kind `learning` (`source_key: learning: