4875127daa
Every spawned peer is now a member with a role, and the role travels with it
from the spawn call to the roster.
MCP:
bridge_spawn gains role: architect | dev | reviewer (default dev). An
unknown role is refused with the valid spellings in the message.
bridge_list returns "members" instead of "workers"; each row carries both
role (what it is for) and profile (which backend it runs on).
The spawn result echoes the role back, so a spawn that fell back to dev is
visible rather than silent.
REST:
GET/POST /members and DELETE /members/{paneId} replace /workers.
POST accepts role= as a query param or a body field; an unknown role is 400.
Code:
dev.ltms.bridged.worker package -> dev.ltms.bridged.member
WorkerSession -> MemberSession, plus a MemberRole role component
WorkerPresence -> MemberPresence
SessionManager.acquire gains a role parameter; the existing overloads keep
working and default to DEV, which is exactly what "worker" used to mean.
ClaudeCodeLauncher and OpenCodeLauncher keep their names on purpose — they
are named after the backend, not the role.
Not done here: the launch charter is still one string for every role, so a
member is told its role by nobody yet. That is the next ticket.
mvn clean install: 583 tests, 0 failures, 0 errors, BUILD SUCCESS.
34 lines
1.0 KiB
Java
34 lines
1.0 KiB
Java
package dev.ltms.bridged.inject;
|
|
|
|
import org.junit.jupiter.api.Test;
|
|
|
|
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
|
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
|
|
/** The CB-113 worker-availability registry. */
|
|
class WorkerPresenceTest {
|
|
|
|
@Test
|
|
void tracksPresenceAndForgets() {
|
|
MemberPresence p = new MemberPresence();
|
|
assertFalse(p.isPresent("term_a"), "unseen worker is not available");
|
|
|
|
p.markPresent("term_a");
|
|
assertTrue(p.isPresent("term_a"), "a worker seen on the MCP is available");
|
|
|
|
p.forget("term_a");
|
|
assertFalse(p.isPresent("term_a"), "a torn-down worker is no longer available");
|
|
}
|
|
|
|
@Test
|
|
void nullOrBlankMarkIsANoOp() {
|
|
MemberPresence p = new MemberPresence();
|
|
assertDoesNotThrow(() -> {
|
|
p.markPresent(null);
|
|
p.markPresent(" ");
|
|
});
|
|
assertFalse(p.isPresent(""), "blank/null contacts (the primary) are never present");
|
|
}
|
|
}
|