From e7740914aacee7d8dbb2d0f99c304a2886266dc1 Mon Sep 17 00:00:00 2001 From: Hugh Francis Date: Fri, 13 Nov 2026 23:23:28 -0500 Subject: [PATCH 1/4] knowledge: the agents' own lessons are the supervisor's to keep; only one sent to the owner (--for-owner, with a plain line) reaches their Inbox Co-Authored-By: Claude Opus 5.5 --- docs/devteam/dashboard/index.html | 29 +++++---- docs/devteam/governance/constitution.md | 2 +- docs/devteam/process/operator.md | 2 +- docs/devteam/process/supervisor.md | 2 +- docs/devteam/schema/log.schema.json | 17 +++++- docs/devteam/scripts/devteam.mjs | 80 ++++++++++++++++++++++--- test/dashboard.test.mjs | 11 +++- test/ooda-knowledge.test.mjs | 69 ++++++++++++++++++++- 8 files changed, 186 insertions(+), 26 deletions(-) diff --git a/docs/devteam/dashboard/index.html b/docs/devteam/dashboard/index.html index 5f20707..7667b75 100644 --- a/docs/devteam/dashboard/index.html +++ b/docs/devteam/dashboard/index.html @@ -2150,11 +2150,13 @@

${esc(g.title
${esc(words(c.key.split(':')[0]))} ${subjectLink(c.key.split(':').slice(1).join(':'))} · seen ${esc(c.count)} times
${linkify(c.latest)}
`).join('') : empty('None. Something noticed more than once shows here.'); $('problems').innerHTML = o.problems.length ? o.problems.map((p) => `
sev ${esc(p.severity)}${p.realized ? 'issue' : 'risk'}${esc(p.title)} · ${esc(p.status)}${p.assigned_to ? `, ${esc(p.assigned_to)}` : ''}${(p.threatens || []).length ? ` · threatens ${p.threatens.map(esc).join(', ')}` : ''}${p.detail ? `
${esc(p.detail)}
` : ''}
`).join('') : empty('None open.'); - const cand = o.knowledge.filter((k) => k.status === 'candidate'); + const cand = o.knowledge.filter(ownerLesson); + const agents = o.knowledge.filter((k) => k.status === 'candidate' && !ownerLesson(k)); const acc = o.knowledge.filter((k) => k.status === 'accepted'); $('knowledge').innerHTML = (cand.length ? `

${cand.length} proposed lesson${cand.length > 1 ? 's are' : ' is'} waiting for you in the Inbox.

` : '') + + (agents.length ? `
The agents' own lessons, waiting for the supervisor (${agents.length})

About how the agents work: the supervisor keeps or retires these itself once the evidence is plain. You can read each one, and retire any lesson from its card.

${agents.map((k) => `
${esc(k.kind)}${linkify(k.statement)} · applies to ${esc(scopeWords(k.scope))}
`).join('')}
` : '') + (acc.length ? acc.map((k) => `
${esc(k.kind)}${linkify(k.statement)}${k.valence < 0 ? ' (avoid)' : ''} · applies to ${esc(scopeWords(k.scope))}${k.created_by === 'owner' ? ' · from you' : ''}
`).join('') : '') || - empty('None yet. Things noticed more than once become proposed lessons, which you keep or retire in the Inbox.'); + empty('None yet. Things noticed more than once become lessons: the supervisor keeps the ones about how the agents work, and sends you any that would change something you set.'); // Trust Ladder $('trust-table').innerHTML = 'Kind of decisionNowAt mostAgreed with youCorrected' + o.trust.map((t) => ` @@ -3124,7 +3126,8 @@

Changelog

${merged.length ? `