---
title: 'Committees, Seats, Appointments and Authority Design Examination'
examined_at: '2026-10-23T09:02:36.831Z'
examiner: codex
source_sha:
  services-committees: 36129c24daeaadcdb339218c38cdeaff9861359d
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
branch: agent/committees-committees-desi-exam-1
examination_basis:
  provenance: observed
  source:
    - 'rhythm-v2-docs:AGENTS.md'
    - 'rhythm-v2-docs:specs/CONVENTIONS.md#6; #9'
    - 'rhythm-v2-docs:specs/templates'
    - >-
      rhythm-v2-docs:specs/committees/committees/MODULE.md; planning;
      FINDINGS.md; ID_REGISTRY.md
    - >-
      services-committees:docs/milestones/CMTE-M1-committees-seats-and-rosters.md;
      docs/milestones/plans/CMTE-M1-plan.md;
      docs/milestones/CMTE-M2-officer-authority.md;
      docs/milestones/CMTE-M7-governance-oversight.md;
      docs/milestones/plans/CMTE-M7-plan.md
examined_counts:
  design_artifacts: 59
  domain_objects: 5
  domain_invariants: 46
  state_models: 5
  transitions: 54
  workflows: 17
  hops: 75
  service_contracts: 4
  operations: 71
  screen_contracts: 11
  screen_actions: 48
  decision_records: 17
  responsibilities_modules: 1
  inference_lists: 32
  inference_operations: 0
coverage:
  operations:
    declared: 71
    contracted: 71
    by_service:
      - contract: SVC-CMT-CMT-appointments
        operations:
          - getAppointmentsHealth
          - listCommitteeAppointments
          - appointToCommittee
          - bulkAppointments
          - getBulkAppointmentsJob
          - getAppointment
          - getAppointmentHistory
          - updateAppointment
          - endAppointment
          - extendAppointment
          - vacateAppointment
          - acceptAppointment
          - declineAppointment
          - listContactAppointments
          - listMyAppointments
          - acceptMyAppointment
          - declineMyAppointment
          - getPortalCommittee
          - getPortalRoster
      - contract: SVC-CMT-CMT-authority
        operations:
          - getAuthorityHealth
          - listAuthorityRules
          - createAuthorityRule
          - getAuthorityRule
          - updateAuthorityRule
          - deleteAuthorityRule
          - getContactAuthority
          - reconcileAuthority
      - contract: SVC-CMT-CMT-committees
        operations:
          - getCommitteesHealth
          - listCommitteeTypes
          - createCommitteeType
          - getCommitteeType
          - updateCommitteeType
          - deleteCommitteeType
          - listPositions
          - createPosition
          - getPosition
          - updatePosition
          - deletePosition
          - getCommitteeSettings
          - updateCommitteeSettings
          - listCommittees
          - createCommittee
          - getCommittee
          - updateCommittee
          - deleteCommittee
          - getCommitteeHistory
          - getCommitteeVacancies
          - getCommitteeEffectiveProfile
          - getCommitteeHierarchy
          - getCommitteeAuditRoster
          - dissolveCommittee
          - listCommitteeRecordLinks
          - createCommitteeRecordLink
          - deleteCommitteeRecordLink
          - listRecordLinkedCommittees
          - listCommitteeTerms
          - createCommitteeTerm
          - getCommitteeTerm
          - updateCommitteeTerm
          - deleteCommitteeTerm
      - contract: SVC-CMT-CMT-seats
        operations:
          - getSeatsHealth
          - listCommitteeSeats
          - createCommitteeSeat
          - defineSeatsFromRoster
          - getCommitteeSeat
          - getCommitteeSeatHistory
          - updateCommitteeSeat
          - deleteCommitteeSeat
          - retireCommitteeSeat
          - suspendCommitteeSeat
          - reactivateCommitteeSeat
  tables:
    declared: 28
    mapped: 28
    live_and_job_tables: 23
    temporal_twins: 5
    query_views: 3
    by_object:
      - object: DOM-CMT-CMT-001
        physical:
          - committees.committees
          - committees.committees_versions
          - committees.committee_terms
          - committees.committee_terms_versions
          - committees.committee_record_links
          - committees.committee_custom_field_values
          - committees.committee_types
          - committees.committee_type_eligibility
          - committees.committee_type_positions
          - committees.positions
          - committees.position_committee_types
          - committees.tenant_settings
          - committees.committees_query (query view)
      - object: DOM-CMT-CMT-002
        physical:
          - committees.committee_seats
          - committees.committee_seats_versions
          - committees.committee_seats_query (query view)
      - object: DOM-CMT-CMT-003
        physical:
          - committees.committee_appointments
          - committees.committee_appointments_versions
          - committees.idempotency_keys
          - committees.event_marks
          - committees.notices
          - committees.appointment_bulk_jobs
          - committees.appointment_bulk_job_steps
          - committees.appointment_bulk_job_events
          - committees.committee_appointments_query (query view)
      - object: DOM-CMT-CMT-005
        physical:
          - committees.authority_rules
          - committees.authority_rules_versions
          - committees.derived_assignments
          - committees.authority_rederivation_jobs
          - committees.authority_rederivation_job_steps
          - committees.authority_rederivation_job_events
          - >-
            platform.security_assignments rows with derivation source committees
            (owned by Platform's security module, written only through
            platform.sync_derived_assignments)
  screens:
    examined: 11
    contracted: 11
    inventory:
      - contract: SCR-CMT-CMT-001
        route: '/console/{tenantId}/committees'
        component: components/committees/explorer/committees-explorer.tsx
      - contract: SCR-CMT-CMT-002
        route: '/console/{tenantId}/committees/new'
        component: components/committees/editor/committee-editor.tsx
      - contract: SCR-CMT-CMT-003
        route: >-
          /console/{tenantId}/committees/{committeeId}?section=overview|members|terms|hierarchy|history|settings
        component: components/committees/committee-360/committee-360-screen.tsx
      - contract: SCR-CMT-CMT-004
        route: '/console/{tenantId}/committees/{committeeId}/edit'
        component: components/committees/editor/committee-editor.tsx
      - contract: SCR-CMT-CMT-005
        route: '/console/{tenantId}/committees/appointments'
        component: components/committees/explorer/appointments-explorer.tsx
      - contract: SCR-CMT-CMT-006
        route: '/console/{tenantId}/configuration/committees/committeeTypes'
        component: components/committees/configuration/committee-type-sections.tsx
      - contract: SCR-CMT-CMT-007
        route: '/console/{tenantId}/configuration/committees/positions'
        component: components/configuration/resources/committees.tsx
      - contract: SCR-CMT-CMT-008
        route: '/console/{tenantId}/configuration/committees/settings'
        component: components/committees/configuration/committee-settings-page.tsx
      - contract: SCR-CMT-CMT-009
        route: '/console/{tenantId}/crm/contacts/{contactId}?tab=committees'
        component: components/record-views/cards/contact/committee-service.tsx
      - contract: SCR-CMT-CMT-010
        route: '/console/{tenantId}/crm/organizations/{organizationId}?tab=contacts'
        component: components/committees/representation/committee-representation-card.tsx
      - contract: SCR-CMT-CMT-011
        route: '/console/{tenantId}'
        component: >-
          Platform's Home attention components (react-console
          mocks/fixtures/attention.ts holds the four lines in mock mode)
  state_machines:
    - label: Durable appointment bulk processing
      workflow: WF-CMT-CMT-007
      provenance: observed
      source: >-
        services-committees:modules/appointments/aws/logic/appointment-bulk.lambda.ts:createAppointmentBulkTaskFunction
    - label: Durable authority re-derivation
      workflow: WF-CMT-CMT-012
      provenance: observed
      source: 'services-committees:modules/authority/aws/logic/authority-jobs.lambda.ts'
  queue_paths:
    - label: Shared business-event work delivery
      workflow: WF-CMT-CMT-011
      provenance: observed
      source: >-
        services-committees:modules/meetings/aws/logic/meetings-functions.lambda.ts;
        lib/events
    - label: Date-pass dead-letter delivery
      workflow: WF-CMT-CMT-008
      provenance: observed
      source: 'services-committees:modules/appointments/aws/logic/term-end.lambda.ts'
    - label: Attention-sweep dead-letter delivery
      workflow: WF-CMT-CMT-015
      provenance: observed
      source: >-
        services-committees:modules/committees/aws/logic/attention-sweeps.lambda.ts
    - label: Authority-repair dead-letter delivery
      workflow: WF-CMT-CMT-013
      provenance: observed
      source: >-
        services-committees:modules/authority/aws/logic/authority-reconciliation.lambda.ts
  schedules:
    - cadence: 'Daily at 06:17 UTC'
      workflow: WF-CMT-CMT-008
    - cadence: Hourly at minute 07
      workflow: WF-CMT-CMT-015
    - cadence: 'Daily at 06:37 UTC'
      workflow: WF-CMT-CMT-015
    - cadence: 'Daily at 07:23 UTC'
      workflow: WF-CMT-CMT-013
    - cadence: Every five minutes
      workflow: WF-CMT-CMT-014
    - cadence: Every minute
      workflow: WF-CMT-CMT-011
  inference:
    model_calls_found: 0
    required_operations: 0
    empty_lists: 32
    charter_gap: FND-CMT-CMT-046
    provenance: observed
    source: >-
      services-committees:modules/committees; modules/seats;
      modules/appointments; modules/authority;
      react-console:components/committees; lib/committees
changes_by_artifact:
  - artifact: SVC-CMT-CMT-appointments
    path: specs/committees/committees/design/contracts/SVC-CMT-CMT-appointments.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields:
      - operations.12.intent
      - consistency.0.rule
  - artifact: SVC-CMT-CMT-authority
    path: specs/committees/committees/design/contracts/SVC-CMT-CMT-authority.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields:
      - operations.2.intent
      - consistency.2.rule
  - artifact: SVC-CMT-CMT-committees
    path: specs/committees/committees/design/contracts/SVC-CMT-CMT-committees.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields:
      - events.0.when
      - consistency.3.rule
  - artifact: SVC-CMT-CMT-seats
    path: specs/committees/committees/design/contracts/SVC-CMT-CMT-seats.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields:
      - events.0.when
  - artifact: ADR-CMT-CMT-001
    path: >-
      specs/committees/committees/design/decisions/ADR-CMT-CMT-001-each-service-module-writes-only-its-own-records.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields:
      - decision
      - title
  - artifact: ADR-CMT-CMT-002
    path: >-
      specs/committees/committees/design/decisions/ADR-CMT-CMT-002-one-rule-decides-who-serves-on-a-date.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields:
      - decision
  - artifact: ADR-CMT-CMT-003
    path: >-
      specs/committees/committees/design/decisions/ADR-CMT-CMT-003-an-edit-saves-what-it-carries.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields:
      - decision
  - artifact: ADR-CMT-CMT-004
    path: >-
      specs/committees/committees/design/decisions/ADR-CMT-CMT-004-committee-scoped-writes-serialize-on-the-committee.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields:
      - decision
      - title
  - artifact: ADR-CMT-CMT-005
    path: >-
      specs/committees/committees/design/decisions/ADR-CMT-CMT-005-a-write-s-consequences-commit-with-the-write.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields: []
  - artifact: ADR-CMT-CMT-006
    path: >-
      specs/committees/committees/design/decisions/ADR-CMT-CMT-006-service-records-end-they-are-not-deleted-or-undone.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields: []
  - artifact: ADR-CMT-CMT-007
    path: >-
      specs/committees/committees/design/decisions/ADR-CMT-CMT-007-bulk-changes-run-as-a-durable-job-of-per-person.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields: []
  - artifact: ADR-CMT-CMT-008
    path: >-
      specs/committees/committees/design/decisions/ADR-CMT-CMT-008-the-committee-is-the-only-custom-field-record.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields: []
  - artifact: ADR-CMT-CMT-009
    path: >-
      specs/committees/committees/design/decisions/ADR-CMT-CMT-009-no-operation-is-published-to-submissions-yet.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields: []
  - artifact: ADR-CMT-CMT-010
    path: >-
      specs/committees/committees/design/decisions/ADR-CMT-CMT-010-version-twins-give-history-and-knowledge-time.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields:
      - decision
  - artifact: ADR-CMT-CMT-011
    path: >-
      specs/committees/committees/design/decisions/ADR-CMT-CMT-011-access-is-workspace-wide-in-this-release.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields: []
  - artifact: ADR-CMT-CMT-012
    path: >-
      specs/committees/committees/design/decisions/ADR-CMT-CMT-012-staff-attention-is-published-with-each-write.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields:
      - title
  - artifact: ADR-CMT-CMT-013
    path: >-
      specs/committees/committees/design/decisions/ADR-CMT-CMT-013-derived-authority-goes-through-one-platform-function.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields: []
  - artifact: ADR-CMT-CMT-014
    path: >-
      specs/committees/committees/design/decisions/ADR-CMT-CMT-014-outside-facts-are-read-from-their-owners-at-write.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields: []
  - artifact: ADR-CMT-CMT-015
    path: >-
      specs/committees/committees/design/decisions/ADR-CMT-CMT-015-offers-send-no-e-mail.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields: []
  - artifact: ADR-CMT-CMT-016
    path: >-
      specs/committees/committees/design/decisions/ADR-CMT-CMT-016-appoint-and-bulk-requests-are-idempotent-for-a-day.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields:
      - consequences.0
  - artifact: ADR-CMT-CMT-017
    path: >-
      specs/committees/committees/design/decisions/ADR-CMT-CMT-017-scheduled-passes-run-per-workspace-and-repeat-safely.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields:
      - title
  - artifact: DOM-CMT-CMT-001
    path: specs/committees/committees/design/objects/DOM-CMT-CMT-001-committee.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields:
      - invariants.1.provenance
      - invariants.2.provenance
      - invariants.3.provenance
      - invariants.5.provenance
      - invariants.6.provenance
      - invariants.7.provenance
      - invariants.10.provenance
      - invariants.3.statement
      - invariants.3.enforced_at
      - invariants.3.source
      - invariants.4.statement
      - invariants.1.source
      - invariants.10.source
      - attributes.19.notes
  - artifact: DOM-CMT-CMT-002
    path: specs/committees/committees/design/objects/DOM-CMT-CMT-002-seat.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields:
      - invariants.0.provenance
      - invariants.2.provenance
      - invariants.4.provenance
      - invariants.5.provenance
      - invariants.0.statement
      - invariants.6.statement
  - artifact: DOM-CMT-CMT-003
    path: specs/committees/committees/design/objects/DOM-CMT-CMT-003-appointment.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields:
      - invariants.0.provenance
      - invariants.1.provenance
      - invariants.2.provenance
      - invariants.4.provenance
      - invariants.5.provenance
      - invariants.6.provenance
      - invariants.7.provenance
      - invariants.8.provenance
      - invariants.9.provenance
      - invariants.10.provenance
      - invariants.0.statement
      - invariants.6.statement
      - invariants.8.statement
      - invariants.9.statement
  - artifact: DOM-CMT-CMT-004
    path: >-
      specs/committees/committees/design/objects/DOM-CMT-CMT-004-roster-and-service-record.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields:
      - invariants.1.provenance
      - invariants.2.provenance
      - invariants.1.statement
      - invariants.5.statement
      - attributes.3.notes
      - invariants.3.statement
  - artifact: DOM-CMT-CMT-005
    path: >-
      specs/committees/committees/design/objects/DOM-CMT-CMT-005-committee-derived-access.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields:
      - invariants.1.provenance
      - invariants.2.provenance
      - invariants.3.provenance
      - invariants.4.provenance
      - invariants.5.provenance
      - invariants.2.statement
      - invariants.6.statement
  - artifact: SCR-CMT-CMT-001
    path: >-
      specs/committees/committees/design/screens/SCR-CMT-CMT-001-committees-explorer.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields:
      - displays.1.source
      - displays.1.field
      - displays.2.field
  - artifact: SCR-CMT-CMT-002
    path: >-
      specs/committees/committees/design/screens/SCR-CMT-CMT-002-new-committee.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields:
      - states
  - artifact: SCR-CMT-CMT-003
    path: >-
      specs/committees/committees/design/screens/SCR-CMT-CMT-003-committee-360.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields:
      - actions
      - actions.8.label
      - actions.9.label
      - actions.11.label
      - actions.12.label
      - actions.13.label
      - actions.15.label
      - actions.16.label
  - artifact: SCR-CMT-CMT-004
    path: >-
      specs/committees/committees/design/screens/SCR-CMT-CMT-004-edit-committee.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields:
      - states
  - artifact: SCR-CMT-CMT-005
    path: >-
      specs/committees/committees/design/screens/SCR-CMT-CMT-005-appointments-explorer.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields: []
  - artifact: SCR-CMT-CMT-006
    path: >-
      specs/committees/committees/design/screens/SCR-CMT-CMT-006-committee-types-configuration.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields: []
  - artifact: SCR-CMT-CMT-007
    path: >-
      specs/committees/committees/design/screens/SCR-CMT-CMT-007-positions-configuration.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields:
      - component
  - artifact: SCR-CMT-CMT-008
    path: >-
      specs/committees/committees/design/screens/SCR-CMT-CMT-008-committees-settings-configuration.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields: []
  - artifact: SCR-CMT-CMT-009
    path: >-
      specs/committees/committees/design/screens/SCR-CMT-CMT-009-contact-committee-service-card.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields: []
  - artifact: SCR-CMT-CMT-010
    path: >-
      specs/committees/committees/design/screens/SCR-CMT-CMT-010-organization-committee-representation-card.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields: []
  - artifact: SCR-CMT-CMT-011
    path: >-
      specs/committees/committees/design/screens/SCR-CMT-CMT-011-governance-lines-on-staff-home.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields: []
  - artifact: STATE-CMT-CMT-001
    path: >-
      specs/committees/committees/design/state-models/STATE-CMT-CMT-001-committee-standing.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields:
      - transitions.0.provenance
      - transitions.2.provenance
      - transitions.3.provenance
      - transitions.6.provenance
      - transitions.7.provenance
      - states.2.meaning
      - concurrency
      - transitions
      - body.initial_arrows
    added_transitions: 1
  - artifact: STATE-CMT-CMT-002
    path: >-
      specs/committees/committees/design/state-models/STATE-CMT-CMT-002-seat-standing.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields:
      - transitions.0.provenance
      - transitions.1.provenance
      - transitions.2.provenance
      - transitions
      - body.initial_arrows
    added_transitions: 9
  - artifact: STATE-CMT-CMT-003
    path: >-
      specs/committees/committees/design/state-models/STATE-CMT-CMT-003-appointment-lifecycle.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields:
      - transitions.0.provenance
      - transitions.1.provenance
      - transitions.3.provenance
      - transitions.4.provenance
      - transitions.5.provenance
      - transitions.6.provenance
      - transitions.7.provenance
      - transitions.9.provenance
      - transitions.3.guard
      - concurrency
      - transitions.2.guard
      - transitions.9.guard
      - transitions
      - body.initial_arrows
    added_transitions: 8
  - artifact: STATE-CMT-CMT-004
    path: >-
      specs/committees/committees/design/state-models/STATE-CMT-CMT-004-derived-assignment-ledger-entry.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields:
      - transitions.0.provenance
      - transitions.1.provenance
      - transitions.2.provenance
      - transitions.0.guard
    added_transitions: 0
  - artifact: STATE-CMT-CMT-005
    path: >-
      specs/committees/committees/design/state-models/STATE-CMT-CMT-005-appointment-request-retry-claim.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields:
      - transitions.0.provenance
      - transitions.1.provenance
      - transitions.2.provenance
    added_transitions: 0
  - artifact: WF-CMT-CMT-001
    path: >-
      specs/committees/committees/design/workflows/WF-CMT-CMT-001-save-a-committee-and-carry-its-consequences.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields:
      - hops.0.provenance
      - hops.1.provenance
      - hops.0.action
  - artifact: WF-CMT-CMT-002
    path: >-
      specs/committees/committees/design/workflows/WF-CMT-CMT-002-dissolve-a-committee.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields:
      - hops.1.provenance
      - hops.2.provenance
      - hops.3.provenance
  - artifact: WF-CMT-CMT-003
    path: >-
      specs/committees/committees/design/workflows/WF-CMT-CMT-003-appoint-a-person-or-offer-them-a-place.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields:
      - hops.0.provenance
      - hops.1.provenance
      - hops.3.provenance
  - artifact: WF-CMT-CMT-004
    path: >-
      specs/committees/committees/design/workflows/WF-CMT-CMT-004-record-the-answer-to-an-offer.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields:
      - hops.0.provenance
      - hops.2.provenance
  - artifact: WF-CMT-CMT-005
    path: >-
      specs/committees/committees/design/workflows/WF-CMT-CMT-005-end-vacate-extend-or-correct-service.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields:
      - hops.3.provenance
  - artifact: WF-CMT-CMT-006
    path: >-
      specs/committees/committees/design/workflows/WF-CMT-CMT-006-move-a-person-to-another-seat.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields: []
  - artifact: WF-CMT-CMT-007
    path: >-
      specs/committees/committees/design/workflows/WF-CMT-CMT-007-change-many-appointments-as-one-background-job.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields: []
  - artifact: WF-CMT-CMT-008
    path: >-
      specs/committees/committees/design/workflows/WF-CMT-CMT-008-run-the-nightly-date-pass.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields:
      - concurrency
  - artifact: WF-CMT-CMT-009
    path: >-
      specs/committees/committees/design/workflows/WF-CMT-CMT-009-end-service-when-a-membership-terminates.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields:
      - hops.1.provenance
  - artifact: WF-CMT-CMT-010
    path: >-
      specs/committees/committees/design/workflows/WF-CMT-CMT-010-carry-service-through-a-crm-contact-merge.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields:
      - hops.0.anchor
      - hops.1.anchor
      - hops.2.anchor
      - hops.3.anchor
  - artifact: WF-CMT-CMT-011
    path: >-
      specs/committees/committees/design/workflows/WF-CMT-CMT-011-deliver-business-events-after-their-write-commits.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields: []
  - artifact: WF-CMT-CMT-012
    path: >-
      specs/committees/committees/design/workflows/WF-CMT-CMT-012-save-an-authority-rule-and-re-derive-its-grants.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields:
      - hops.0.action
      - branches.0
  - artifact: WF-CMT-CMT-013
    path: >-
      specs/committees/committees/design/workflows/WF-CMT-CMT-013-reconcile-derived-grants-with-platform.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields:
      - concurrency
      - hops.2.on_failure
  - artifact: WF-CMT-CMT-014
    path: >-
      specs/committees/committees/design/workflows/WF-CMT-CMT-014-settle-jobs-that-stopped-reporting.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields: []
  - artifact: WF-CMT-CMT-015
    path: >-
      specs/committees/committees/design/workflows/WF-CMT-CMT-015-keep-staff-attention-current.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields: []
  - artifact: WF-CMT-CMT-016
    path: >-
      specs/committees/committees/design/workflows/WF-CMT-CMT-016-define-seats-from-the-current-roster.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields:
      - hops.2.actor_or_service
      - hops.2.action
  - artifact: WF-CMT-CMT-017
    path: >-
      specs/committees/committees/design/workflows/WF-CMT-CMT-017-seed-and-purge-a-workspace-s-governance-records.md
    final_text: OpenAI-authored prose and descriptive fields
    verification_fields: []
protected_value_changes:
  - artifact: DOM-CMT-CMT-001
    field: invariants.1.provenance
    before: test
    after: observed
  - artifact: DOM-CMT-CMT-001
    field: invariants.1.source
    before: >-
      services-committees:modules/committees/db/committees.table.ts:committees_parent_not_self_check;
      committees_parent_cycle_trigger (migration)
    after: >-
      services-committees:modules/committees/db/committees.table.ts:committees_parent_not_self_check;
      services-committees:db/migrations/20261018011234_committee_domain.sql:committees_parent_cycle_check
  - artifact: DOM-CMT-CMT-001
    field: invariants.2.provenance
    before: test
    after: observed
  - artifact: DOM-CMT-CMT-001
    field: invariants.3.enforced_at
    before:
      - service
      - database
    after:
      - service
  - artifact: DOM-CMT-CMT-001
    field: invariants.3.provenance
    before: test
    after: observed
  - artifact: DOM-CMT-CMT-001
    field: invariants.3.source
    before: >-
      services-committees:modules/committees/services/lifecycle/status-change.ts:statusChangeRefusal;
      committees.table.ts:committees_dissolved_on_check
    after: >-
      services-committees:modules/committees/services/lifecycle/status-change.ts:statusChangeRefusal
  - artifact: DOM-CMT-CMT-001
    field: invariants.5.provenance
    before: test
    after: observed
  - artifact: DOM-CMT-CMT-001
    field: invariants.6.provenance
    before: test
    after: observed
  - artifact: DOM-CMT-CMT-001
    field: invariants.7.provenance
    before: test
    after: observed
  - artifact: DOM-CMT-CMT-001
    field: invariants.10.provenance
    before: test
    after: observed
  - artifact: DOM-CMT-CMT-001
    field: invariants.10.source
    before: >-
      services-committees:db/row-level-security.ts; CMTE-M1-S17
      (BR-CAP-CMT-CMT-017-13)
    after: 'services-committees:db/row-level-security.ts'
  - artifact: DOM-CMT-CMT-002
    field: invariants.0.provenance
    before: test
    after: observed
  - artifact: DOM-CMT-CMT-002
    field: invariants.2.provenance
    before: test
    after: observed
  - artifact: DOM-CMT-CMT-002
    field: invariants.4.provenance
    before: test
    after: observed
  - artifact: DOM-CMT-CMT-002
    field: invariants.5.provenance
    before: test
    after: observed
  - artifact: DOM-CMT-CMT-003
    field: invariants.0.provenance
    before: test
    after: observed
  - artifact: DOM-CMT-CMT-003
    field: invariants.1.provenance
    before: test
    after: observed
  - artifact: DOM-CMT-CMT-003
    field: invariants.2.provenance
    before: test
    after: observed
  - artifact: DOM-CMT-CMT-003
    field: invariants.4.provenance
    before: test
    after: observed
  - artifact: DOM-CMT-CMT-003
    field: invariants.5.provenance
    before: test
    after: observed
  - artifact: DOM-CMT-CMT-003
    field: invariants.6.provenance
    before: test
    after: observed
  - artifact: DOM-CMT-CMT-003
    field: invariants.7.provenance
    before: test
    after: observed
  - artifact: DOM-CMT-CMT-003
    field: invariants.8.provenance
    before: test
    after: observed
  - artifact: DOM-CMT-CMT-003
    field: invariants.9.provenance
    before: test
    after: observed
  - artifact: DOM-CMT-CMT-003
    field: invariants.10.provenance
    before: test
    after: observed
  - artifact: DOM-CMT-CMT-004
    field: invariants.1.provenance
    before: test
    after: observed
  - artifact: DOM-CMT-CMT-004
    field: invariants.2.provenance
    before: test
    after: observed
  - artifact: DOM-CMT-CMT-005
    field: invariants.1.provenance
    before: test
    after: observed
  - artifact: DOM-CMT-CMT-005
    field: invariants.2.provenance
    before: test
    after: observed
  - artifact: DOM-CMT-CMT-005
    field: invariants.3.provenance
    before: test
    after: observed
  - artifact: DOM-CMT-CMT-005
    field: invariants.4.provenance
    before: test
    after: observed
  - artifact: DOM-CMT-CMT-005
    field: invariants.5.provenance
    before: test
    after: observed
  - artifact: SCR-CMT-CMT-001
    field: displays.1.source
    before: 'listCommittees, the term containing the browser''s calendar day'
    after: >-
      react-console:lib/committees/explorer/committees.ts:committeeRow
      (currentTermId and currentTermName are always null)
  - artifact: SCR-CMT-CMT-007
    field: component
    before: lib/configuration/committees.ts
    after: components/configuration/resources/committees.tsx
  - artifact: STATE-CMT-CMT-001
    field: transitions.0.provenance
    before: test
    after: observed
  - artifact: STATE-CMT-CMT-001
    field: transitions.2.provenance
    before: test
    after: observed
  - artifact: STATE-CMT-CMT-001
    field: transitions.3.provenance
    before: test
    after: observed
  - artifact: STATE-CMT-CMT-001
    field: transitions.6.provenance
    before: test
    after: observed
  - artifact: STATE-CMT-CMT-001
    field: transitions.7.provenance
    before: test
    after: observed
  - artifact: STATE-CMT-CMT-002
    field: transitions.0.provenance
    before: test
    after: observed
  - artifact: STATE-CMT-CMT-002
    field: transitions.1.provenance
    before: test
    after: observed
  - artifact: STATE-CMT-CMT-002
    field: transitions.2.provenance
    before: test
    after: observed
  - artifact: STATE-CMT-CMT-003
    field: transitions.0.provenance
    before: test
    after: observed
  - artifact: STATE-CMT-CMT-003
    field: transitions.1.provenance
    before: test
    after: observed
  - artifact: STATE-CMT-CMT-003
    field: transitions.3.provenance
    before: test
    after: observed
  - artifact: STATE-CMT-CMT-003
    field: transitions.4.provenance
    before: test
    after: observed
  - artifact: STATE-CMT-CMT-003
    field: transitions.5.provenance
    before: test
    after: observed
  - artifact: STATE-CMT-CMT-003
    field: transitions.6.provenance
    before: test
    after: observed
  - artifact: STATE-CMT-CMT-003
    field: transitions.7.provenance
    before: test
    after: observed
  - artifact: STATE-CMT-CMT-003
    field: transitions.9.provenance
    before: test
    after: observed
  - artifact: STATE-CMT-CMT-004
    field: transitions.0.provenance
    before: test
    after: observed
  - artifact: STATE-CMT-CMT-004
    field: transitions.1.provenance
    before: test
    after: observed
  - artifact: STATE-CMT-CMT-004
    field: transitions.2.provenance
    before: test
    after: observed
  - artifact: STATE-CMT-CMT-005
    field: transitions.0.provenance
    before: test
    after: observed
  - artifact: STATE-CMT-CMT-005
    field: transitions.1.provenance
    before: test
    after: observed
  - artifact: STATE-CMT-CMT-005
    field: transitions.2.provenance
    before: test
    after: observed
  - artifact: WF-CMT-CMT-001
    field: hops.0.provenance
    before: test
    after: observed
  - artifact: WF-CMT-CMT-001
    field: hops.1.provenance
    before: test
    after: observed
  - artifact: WF-CMT-CMT-002
    field: hops.1.provenance
    before: test
    after: observed
  - artifact: WF-CMT-CMT-002
    field: hops.2.provenance
    before: test
    after: observed
  - artifact: WF-CMT-CMT-002
    field: hops.3.provenance
    before: test
    after: observed
  - artifact: WF-CMT-CMT-003
    field: hops.0.provenance
    before: test
    after: observed
  - artifact: WF-CMT-CMT-003
    field: hops.1.provenance
    before: test
    after: observed
  - artifact: WF-CMT-CMT-003
    field: hops.3.provenance
    before: test
    after: observed
  - artifact: WF-CMT-CMT-004
    field: hops.0.provenance
    before: test
    after: observed
  - artifact: WF-CMT-CMT-004
    field: hops.2.provenance
    before: test
    after: observed
  - artifact: WF-CMT-CMT-005
    field: hops.3.provenance
    before: test
    after: observed
  - artifact: WF-CMT-CMT-009
    field: hops.1.provenance
    before: test
    after: observed
  - artifact: WF-CMT-CMT-010
    field: hops.0.anchor
    before: >-
      services-committees:db/migrations/20261018013744_merge_participant_and_query_view.sql:committees.merge_plan_contacts
    after: >-
      services-committees:db/migrations/20261019234639_drop_appointment_custom_field_values.sql:committees.merge_plan_contacts
  - artifact: WF-CMT-CMT-010
    field: hops.1.anchor
    before: >-
      services-committees:lib/record-merge/committees-references.ts:committeesMergeReferences
    after: >-
      services-committees:db/migrations/20261019234639_drop_appointment_custom_field_values.sql:committees.merge_apply_contacts
  - artifact: WF-CMT-CMT-010
    field: hops.2.anchor
    before: >-
      services-committees:modules/authority/tests/integration/db/merge-moves-authority.integration.spec.ts
    after: >-
      services-committees:db/migrations/20261019234639_drop_appointment_custom_field_values.sql:committees.merge_apply_contacts
  - artifact: WF-CMT-CMT-010
    field: hops.3.anchor
    before: >-
      services-committees:modules/appointments/services/events/appointment-events.ts
      (committees.publish_appointment_changed)
    after: >-
      services-committees:db/migrations/20261018132524_roster_contract.sql:committees.publish_appointment_changed
additional_structural_changes:
  - artifact: SCR-CMT-CMT-003
    added_operations:
      - appointToCommittee
      - updateCommitteeSeat
      - suspendCommitteeSeat
      - reactivateCommitteeSeat
      - updateCommitteeTerm
      - deleteCommitteeTerm
      - deleteCommitteeRecordLink
    source: >-
      react-console:components/committees/committee-360;
      components/committees/appointments; components/committees/seats;
      lib/committees
  - artifact: STATE-CMT-CMT-001
    added_transitions: 1
    source: >-
      services-committees:modules/committees/services/persistence/committees.ts:updateCommittee
  - artifact: STATE-CMT-CMT-002
    added_transitions: 9
    source: >-
      services-committees:modules/seats/services/persistence/seats.ts:retireSeat;
      reactivateSeat; suspendSeat
  - artifact: STATE-CMT-CMT-003
    added_transitions: 8
    source: >-
      services-committees:modules/appointments/services/persistence/appointments.ts:endAppointment;
      vacateAppointment; updateAppointment
  - artifact: RESP-CMT
    removed_event_entries:
      - >-
        roster functions committees.active_appointees, participant_matches,
        documents_principal_matches, documents_principal_describe,
        participant_tenure (contract version 1)
      - >-
        merge participant functions committees.merge_plan_contacts and
        merge_apply_contacts
    reason: 'Published database functions are integrations, not business events.'
responsibilities:
  artifact: RESP-CMT
  source: 'rhythm-v2-docs:specs/committees/RESPONSIBILITIES.md'
  verification_fields:
    - modules.0.exposes.events
  final_text: OpenAI-authored module prose and delegation concerns
new_findings:
  - FND-CMT-CMT-049
  - FND-CMT-CMT-050
  - FND-CMT-CMT-051
  - FND-CMT-CMT-052
  - FND-CMT-CMT-053
  - FND-CMT-CMT-054
  - FND-CMT-CMT-055
  - FND-CMT-CMT-056
open_disagreements:
  - FND-CMT-CMT-002
  - FND-CMT-CMT-004
  - FND-CMT-CMT-005
  - FND-CMT-CMT-038
  - FND-CMT-CMT-039
  - FND-CMT-CMT-040
  - FND-CMT-CMT-041
  - FND-CMT-CMT-042
  - FND-CMT-CMT-043
  - FND-CMT-CMT-044
  - FND-CMT-CMT-045
  - FND-CMT-CMT-046
  - FND-CMT-CMT-047
  - FND-CMT-CMT-048
  - FND-CMT-CMT-050
  - FND-CMT-CMT-051
  - FND-CMT-CMT-052
  - FND-CMT-CMT-053
  - FND-CMT-CMT-055
  - FND-CMT-CMT-056
open_questions:
  - OQ-CMT-CMT-001
  - OQ-CMT-CMT-002
  - OQ-CMT-CMT-003
  - OQ-CMT-CMT-004
  - OQ-CMT-CMT-005
  - OQ-CMT-CMT-006
validation:
  corpus_check:
    command: npm ci && npm run check
    errors: 0
  corpus_tests:
    command: npm test
    passed: 4
    failed: 0
  service_and_browser_tests: Source inspected; not executed in this documentation examination.
preservation:
  existing_identifiers: preserved
  source_sha: preserved
  existing_origins: preserved
  intent_and_approval_values: preserved
  planning_artifacts: unchanged
  reader: unchanged
  publication: committed on task branch; not pushed
---

# Committees Design Examination

## Scope and Method

I examined and rewrote every design artifact and the governing-body module’s responsibilities. The examination compared declared operations, database definitions, lifecycle functions, background execution and built console components against the pinned source and the planning records. Source and anchor locations, test titles and decision origins were checked as evidence; static inspection of a test was not treated as execution of that test.

The requested design brief was unavailable. The directly accessible product records establish the cited decisions, while external architecture confirmation and unproved integrations remain findings. Existing approval and intent values were preserved, and this examination does not approve the design.

## Coverage

| Subject | Examined | Accounted for |
|---|---:|---:|
| Design artifacts | 59 | 59 final rewrites |
| Domain objects and invariants | 5 and 46 | All scoped table families |
| Physical tables | 28 | 28, including five temporal twins |
| Query views | 3 | 3 |
| State models and transitions | 5 and 54 | Verified lifecycle paths |
| Workflows and hops | 17 and 75 | Both durable state machines and scoped delivery paths |
| HTTP operations | 71 | 71 across four contracts |
| Screens and actions | 11 and 48 | 11 built surfaces |
| Decision records | 17 | Origins and alternatives examined |
| Inference declarations | 32 | All empty; no model calls found |

The structured inventory identifies every operation, table family, screen, durable state machine, queue path and relevant schedule. Screen coverage includes configuration, CRM cards and Home integration; it does not imply that a separate portal screen or authority editor exists. No inference artifact is required for the scoped code, and the missing charter declaration remains a planning finding.

## Corrections and Final Text

Domain invariants now separate creation validation from lifetime guarantees, staff locking from scheduled paths, and observed implementation from test evidence. The corrected account includes the dissolution import exception, settings without temporal history, distinct vacancy measures, actor-name fallback, conditional grants and forced drift repair.

Lifecycle tables include the previously omitted corrections and repeated actions. Creation diagrams now distinguish active committee defaults, appointment offers from appointed service, and date-derived seat standing. Workflow failure handling identifies committed partial work, never-started jobs, separate retry completion, whole-workspace date-step rollback, bounded event recovery and synchronous attention refusal.

Service contracts retain the exact declared access contexts and permission keys and cover all operations, including health. They distinguish unpublished submission intake from recruitment outcome handling and narrow event timing and repair promises to the implemented behavior. Screen corrections identify the empty Current Term column, the actual positions component, denied editor access and the concrete operations hidden by combined action labels.

Responsibilities now agree with ownership and exposed operations, distinguish published database functions from events and identify direct writes during seat conversion as an exception. Every prose section and descriptive field was rewritten in OpenAI wording; verification and final-text commits remain separate. The structured change register records each artifact, its verification fields, added rows and exact protected-value changes.

## Matters Left Open

Planning still conflicts with lapse publication and restoration of vacated term service. Authority and portal routes remain implemented ahead of settled release gates, membership eligibility can be skipped when its source is absent, and live upstream termination delivery is unproved. These questions remain with Product rather than becoming silent planning edits.

Operational decisions remain open for never-started jobs, whole-workspace date-step failures, attention availability and cross-module seat conversion. Event timing and repair convergence have no demonstrated end-to-end guarantee, and fixture-backed reporting does not prove every browser calculation. Custom-value transport, data-loading adoption, independent Platform architecture confirmation and the charter’s no-inference sentence also remain incomplete.

## Validation

The corpus conformance command passes with zero errors, and all four corpus tests pass. Service and browser tests were inspected as evidence but were not executed; these results establish documentation conformance rather than runtime release readiness. Only the authorized specification, findings, registry, responsibilities, report and module-status files were changed.

## Verdict for Andrew

The examined design faithfully describes the scoped behavior at the pinned revisions, with planning conflicts and incomplete integrations stated as limitations. Its weakest area is end-to-end proof of recovery and cross-service effects, especially scheduled failures and derived authority. Before implementation preparation, Andrew should decide the authority and portal release gates, eligibility fallback, lapse publication and stalled-work recovery.
