update docs, especially progress on matching in meetings

This commit is contained in:
2026-03-14 16:21:03 -06:00
parent 5547148aa3
commit 58f52bc73a
5 changed files with 54 additions and 15 deletions

View File

@@ -181,14 +181,17 @@ Phase 1.4:
- [X] For anyone with the generateEmbeddings flag on their profile: call to OpenAI to get their embedding vector when the flag is set, and also when a profile with that flag is changed.
- [X] Allow blank value for embedding and hard-code their vector as the "data.empty.embedding" value from the test/embedding-empty-string.json file
- [x] Allow organizers with generateEmbeddings flag to select from their list of contacts, and then hit a button to "Check for Profile" that takes them to a screen which will check each of those contacts for a valid profile, one-by-one, and give a report. Each contact should have a link to the DID view so they can see that person's contact info.
- [x] Display on that page the "embedding metadata" much like on the DID view page.
- [ ] Implement matching algorithm
- [x] Implement matching algorithm
- [X] Meeting organizer can trigger a pairing session
- [ ] Allow attendees to be excluded
- [x] Allow attendees to be excluded (ban icon toggle per member; persisted in localStorage scoped to meeting)
- [x] Pairing data is saved in the DB
- [x] Calculate similarity scores between all pairs
- [x] Create pairing algorithm (maximize total similarity)
- [ ] Create "do not pair" groups
- [x] Create "do not pair" groups (named, color-coded groups; members within a group are never paired)
- [x] Pre-match confirmation dialog showing included members, excluded members, do-not-pair groups, and previous pair count
- [x] "Not Paired" summary after matching shows who was left out and why (individually excluded, do-not-pair group, or odd number)
- [x] Basic matching endpoint
- [x] POST endpoint for organizer to trigger matching
@@ -202,6 +205,21 @@ Phase 1.4:
**Validation:** Organizer can trigger matching, and all attendees can see AI-generated pairs with reasonable similarity
#### Exclusion & Do-Not-Pair Implementation Summary (Phase 2 + Phase 4 overlap)
**Backend (endorser-ch):** No changes needed. `matchParticipants()` in `matching.service.js` already accepts `excludedDids`, `excludedPairDids`, and `previousPairDids`. The POST `/api/partner/groupOnboardMatch` endpoint passes these through.
**Frontend (crowd-funder-for-time-pwa) files changed:**
- `src/interfaces/user.ts` — Added `DoNotPairGroup` and `MeetingExclusionState` interfaces
- `src/components/MeetingExclusionGroups.vue` (new, ~240 lines) — Standalone component for managing do-not-pair groups. Color-coded group cards with member chips, add/remove controls, and a `disabled` prop for read-only mode when matches exist.
- `src/components/MeetingMembersList.vue` — Added `excludedDids` / `exclusionLocked` props, ban icon toggle per admitted member, `getAdmittedMembers()` method exposed for parent, `members-loaded` emit for parent sync.
- `src/views/OnboardMeetingSetupView.vue` — Orchestration: exclusion state management with localStorage persistence (scoped to meeting), pre-match confirmation dialog, "Not Paired" summary after matching, locking when matches exist, expanded `postNewMatchesThenRefresh()` body with all three constraint fields.
**Key design decisions:**
- Exclusion state persists in localStorage under key `meeting-exclusion-state`, scoped by `meetingGroupId`. Automatically clears when the organizer switches meetings.
- Locking: all exclusion controls become read-only when `hasActiveMatches` is true. "Erase to Start Over" unlocks them.
- `admittedMembers` is a reactive data property (not a computed via `$refs`) populated via the `members-loaded` event from `MeetingMembersList`, avoiding `$refs` timing issues.
---
### Phase 3: Matching UI and Participant Experience
@@ -229,13 +247,18 @@ Phase 1.4:
### Phase 4: Multiple Rounds and Constraints
**Goal:** Support advanced matching scenarios
- [ ] Exclusion groups
- [ ] UI for organizer to select people
- [ ] Persist exclusion rules across rounds
- [ ] Exclude non-participants
- [ ] Option to mark organizer or others as excluded
- [ ] Ensure excluded people don't appear in matching pool
- [ ] Multiple matching rounds
- [x] Exclusion groups ("Do Not Pair")
- [x] UI for organizer to create named, color-coded groups and assign members
- [x] Persist exclusion rules in localStorage scoped to meeting (auto-clears on meeting change)
- [x] Groups expand to all DID pairs and are sent as `excludedPairDids` to the server
- [x] Controls are locked (read-only) while matches exist; unlock on "Erase to Start Over"
- [x] Exclude non-participants
- [x] Ban icon toggle per admitted member to exclude from matching pool
- [x] Excluded members shown with strikethrough and amber styling
- [x] Ban icon always visible; shows notification explaining lock state when matches exist
- [x] Excluded DIDs sent as `excludedDids` in POST body
- [x] "Erase to Start Over" always clickable; shows notification when no matches exist or matching is in progress
- [x] Multiple matching rounds
- [x] Track previous pairs in meeting state
- [x] Constraint: don't repeat previous pairs
- [x] Calculate when no more unique pairs possible