Repository navigation
Record who speaks for whom in a meeting - #1863
Conversation
A Project Chief or an owner's agent can now hold a position for a person: `speaksFor` is stored on the participant and its position, printed beside that position in decisions/<date>-<slug>.md, and projected by `decisionCardOf` so the client meeting row draws it. A `severe` decision is refused before anything is written when one side rests only on a proxy and the spoken-for person has neither taken a position nor been recorded `silent`. Fixes #1861
The client meeting row draws the proxy, so core-client.md owns the change and says so; the patch mirrors carry the same bytes as core/ after the doc pass. Fixes #1861
|
Verdict: PASS at efcbae9 Ran at this tip: Red firstSwapped only Review
|
Written-by: Dev
Fixes #1861
Owner: Chief
Reviewer: Reviewer
Tip SHA: efcbae9
Base: 479884f
Docs:
docs/subsystems/core-host.md§ Speaking for a person;docs/subsystems/core-client.mdmeeting row proxy line.meetingsacceptsspeaksForon an invited participant and onposition; the id is stored on the participant and its position, printed as(speaks for <id>)beside that position indecisions/<date>-<slug>.md, and exposed bydecisionCardOfasparticipants: [{ name, speaksFor, stance, silent }].speaksForidentity on task rows, but a meeting dropped it, so a Project Chief or an owner's agent could not hold a position for a person and the record could not say whose position it was.proxyRefusalruns insidegovernanceRefusal: aseveredecision whose only position on one side is a proxy is refused before any file or card is written unless the spoken-for person is invited and holds their own position or is recordedsilent. A proxy position counts once inpositions n/m.core/test/meetings.test.js: proxy stored/read back/counts once and appears in the file; severe refused with a governance reason and nodecisions/folder, then passes once the person is silent;decisionCardOfexposes both participants.core/src/host/meetings.jsandcore/src/host/project-board.jsfrommain(479884f), the three new tests fail (12 pass / 3 fail); at the tip 15/15 pass.meetings.js, the meeting projection in hostproject-board.js, the client meeting row andcore/test/meetings.test.jsonly;store.js,project-chief.jsand the Projectchiefseam stay with #1859 and are untouched here.speaksForis a plain string id with no import fromproject-chief.js.Ran:
TZ=UTC npm run verifyfrom the repo root at 3a45b17;node scripts/ds-bot-patches.mjs check;node .github/scripts/check-mojibake.mjs --check.Not run: the live probe on
project-1fe64499(needs a running host with that Project) — left to the Reviewer/acceptance step.Checkpoint
{"pr":1863,"claim":"Chief","issue":1861,"summary":"A meeting now records who a position speaks for. speaksFor is accepted on an invited participant and on position, stored on both the participant and the position, printed beside that position in the archived decision file, and exposed through decisionCardOf so the client meeting row draws the proxy line. proxyRefusal inside governanceRefusal refuses a severe decision whose only position on one side is a proxy unless the spoken-for person holds their own position or is recorded silent.","files":["core/src/host/meetings.js","core/src/host/project-board.js","core/src/client/project-board.js","core/client.js","core/test/meetings.test.js","docs/subsystems/core-host.md","changelog.d/1861-meeting-speaks-for.added.md","patches/ds-bot/0008-client-bundle.patch"],"checks":{"ran":"TZ=UTC npm run verify","result":"green","at":"efcbae93454e966237830e3842645adf8e2a960c"},"next":"Reviewer: review the tip; the live probe on project-1fe64499 with a proxy position and the owner silent is still to run at acceptance."}