Skip to content

CAP-CMT-MTG-015Stand conflicted voters aside from a decision

Markdown

CAP-CMT-MTG-015

Stand conflicted voters aside from a decision

Markdown
  • DocumentDraft
  • Product intentProposed
  • ImplementationInconsistent

KindCapabilityProduct areaCommitteesModuleMeetings, Decisions and RecruitmentRevision1

Read atservices-committees 36129c24react-console baf6dae3

The Formal Contract

The narrative above explains; the sections below are authoritative — the rules, scenarios and tests this document binds.

Outcomes
Conflicted voters do not voteDisclosed interests prompt recusal at the right decisionWho disclosed what stays private
Surfaces
apiportal
Preconditions
The decision is draft or open.
Intent sources
services-committees:docs/milestones/CMTE-M6-disclosures-and-recusals.md#Objective

Controls

24 controls apply, from the corpus control catalogue.

TC-AZ-001 TC-AZ-002 TC-AZ-003 TC-AZ-004 TC-AZ-006 TC-TEN-001 TC-TEN-002 TC-TEN-003 TC-TEN-004 TC-SEC-001 TC-SEC-004 TC-DAT-001 TC-DAT-002 TC-DAT-003 TC-LOG-001 TC-LOG-002 TC-LOG-003 TC-LOG-004 TC-LOG-005 TC-PI-001 TC-PI-003 TC-PI-005 TC-PRV-001 TC-PRV-002

Permissions

KeyChecked atScope
committees.decisions.readapitenant
committees.decisions.manageapitenant
committees.disclosures.readapitenant
committees.portal.participateapirecord

Business Rules

8 rules, 7 to be proved before approval. A rule's product intent is derived from its origin: 0 confirmed by a product decision, the rest inheriting this capability's proposed.

IdRuleKindEnforced atProvenance
01must prove
Proposed
A recusal is recorded with its reason while a decision is draft or open, for one of its voters, once, and never after that voter has voted.
no proof recorded yet
validationservice, databaseobserved
02must prove
Proposed
A recused voter cannot vote on the decision.
no proof recorded yet
validationservicetest
03must prove
Proposed
A recusal that names a disclosure must name one of the recused voter’s own; any other is refused as unknown.
no proof recorded yet
validationservicetest
services-committees:modules/decisions/tests/integration/api/recusal-disclosure.integration.spec.ts#answers 400 unknown_disclosure naming the field for another voter’s disclosure
04must prove
Proposed
A voter is suggested for recusal when one of their accepted or flagged disclosures, for a period not yet ended, names an organization or contact the decision is linked to.
no proof recorded yet
calculationservicetest
services-committees:modules/decisions/tests/integration/services/disclosures.integration.spec.ts#suggests the voter whose accepted disclosure names the decision’s linked organization, and why
05must prove
Proposed
Recusal suggestions are shown only to those who read disclosures, and in the portal a voter sees only their own.
no proof recorded yet
permissionapi, servicetest
services-committees:modules/decisions/tests/integration/api/recusal-confidentiality.integration.spec.ts#shows the bookkeeper an open decision’s recusals without suggestions
06must prove
Proposed
The recusals of a confidential decision are hidden exactly as the decision is.
no proof recorded yet
permissionapi, servicetest
services-committees:modules/decisions/tests/integration/api/recusal-confidentiality.integration.spec.ts#answers the bookkeeper 404 for the confidential decision’s recusals
07must prove
Proposed
A member recuses themselves from the portal with their reason; today the portal refuses a draft decision, though the operation promises draft or open.
no proof recorded yet
validationservicetest
08
Proposed
A recusal never removes the voter from the frozen voters; the committee’s rules decide how it counts.
invariantdatabaseobserved

Scenarios

IdGivenWhenThenProvenance
01A director whose firm is linked to the audit voteStaff holding the disclosures key read the decisionThey see the director suggested for recusal with the reasontest

The Markdown files under specs/ in rhythmsoftware/rhythm-v2-docs are the canonical source of truth. This reader is a generated, read-only projection of them.