1284d28891
Two faults found chasing why Terry (#840) was routing joins to #148, a position outside his team. The leg lookup only considered positions on the curated rotation list. Terry qualified the same day he joined, so his two directs (#843, #844) were too new to be on it. With no leg match the code fell straight through to the GLOBAL company rotation — sending his people to a stranger while his own directs sat on 0/2. That is the opposite of the team-first doctrine the moving link exists to serve. There is now a last-resort step inside the leg: the nearest position still needing its 2, curated or not. The curated order still wins when it applies; the global rotation is now only reached when the member's whole leg really is qualified. Second, the dashboard ignored directDefault entirely. Marty had already set Terry to direct placement in the admin, which the join page honours — but Terry's own share panel still told him his link routed to someone else. Two different answers to "where do my people land". The panel now says rotation is off and every join lands under him, and explains ?direct=0 for the exception. Also made the all-qualified case name what it is: joins go to the company rotation, placed wherever the company is filling, not inside your leg. That wording is what made #148 look like a bug rather than a fallback. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>