matching-domain

Governs deterministic server-side pair scoring and group formation for pool matching.

Updated Dec 24, 2025
One-click install
npx skills add https://github.com/JoyJoin-Tech-Limited/JoyJoin_app_v0.1 --skill matching-domain-joyjoin-tech-limited
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: matching-domain
Source: https://github.com/JoyJoin-Tech-Limited/JoyJoin_app_v0.1/tree/main/.github/skills/matching-domain
Command: npx skills add https://github.com/JoyJoin-Tech-Limited/JoyJoin_app_v0.1 --skill matching-domain-joyjoin-tech-limited

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill includes references (resource) components.

What problem does it solve? It keeps the pool matching system deterministic and safe to modify by enforcing scoring weight rules, the user_interest_signals boundary, L1 hard constraints, and concurrency guards when engineers change matching logic. ## Core Features & Use Cases - Scoring governance: Maintains the default 6D pair weight table and the optional 7D semantic-similarity path, requiring both to sum to 100%. - Signal boundary enforcement: Ensures user_interest_signals never enters the deterministic scoring path and is used only by AI explanation layers. - Group formation rules: Covers L1 hard filters, gender balance modes, duo atomic units, execution guards, and a grill-me stress-test checklist. - Use Case: When adding a new scoring dimension or debugging why groups are not forming, follow the skill to adjust weights in poolMatchingService.ts, verify L1 filters, and run the boundary tests. ## Quick Start Ask the assistant to add a new scoring dimension to the pool matching service while keeping both weight tables summing to 100%.

Frequently Asked Questions about matching-domain

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I add a new scoring dimension to pool matching?▼

Extend the weighted pair-score path in poolMatchingService.ts and adjust both the default 6D and semantic 7D weight tables so each sums to 100%. Source data only from approved tables like user_interests, never user_interest_signals, and update poolMatchingService.test.ts.

Why are groups not forming in my match pool?▼

Check pair scores against the avgScore >= 60 threshold and verify all users pass the L1 hard constraints: budget, gender, industry, education, and age. Also confirm at least minGroupSize (default 4) users remain after filtering.

Can user_interest_signals be used in match scoring?▼

No. user_interest_signals is restricted to AI explanation and enrichment layers only and must never appear in the deterministic scoring path. This invariant is enforced by the interestSignalBoundary.test.ts test.

What is the semantic similarity dimension in matching?▼

It is an optional 7th scoring dimension in matchingSemantic.ts, active only when ENABLE_SEMANTIC_SIMILARITY=true. The other six weights are redistributed to make room, and pair cache keys distinguish semantic from legacy paths.

How is concurrent matching execution prevented?▼

An execution guard prevents two matching runs for the same pool from running simultaneously, and it must always be released in a finally block. Match results are persisted before notifications fire.