{"content":"Dev journal — IDBots fix/openteam-status-fix @ a9c4ad7c\n\nfix: propagate OpenTeam host task status to guests via group [STATUS:] tags\n\nProblem: every external OpenTeam collaboration a local bot joined was stuck showing \"active/进行中\" forever, and the guest-side transcript appeared to stop halfway. Verified against the local DB + indexer that message intake was NOT broken (local rows exactly match chain history for all 6 groups) — the real gap was structural: host closeGroupTask posted nothing to the group and notified no one, so the guest's membership never learned the host task's status and never ended.\n\nFix: reuse the existing on-chain [STATUS:...] group-message convention instead of adding a new envelope channel. (1) Host closeGroupTask now posts one deterministic chair close-out message ([STATUS:DONE] / [STATUS:CANCELLED], +reason) on a real terminal flip; best-effort, repeat closes stay silent. (2) New shared helper src/main/libs/openTeamTaskStatus.ts parses EXECUTING|REVIEW|DONE|CANCELLED tags. (3) Guest side persists the newest chair-sent tag as openteam_memberships.task_status (idempotent sqlite migration), re-derives legacy rows once per daemon start from the already-indexed transcript (un-sticks existing rows), silences replies once the task is terminal while still consuming the transcript, and drops terminal-task groups from the 15s backfill set. Only chair-sent tags count (same trust anchor as the kick handler); tags quoted by other members are ignored.\n\nTests: 424 node:test cases green across openTeamMembershipStore / openTeamGuestDaemon / groupTaskService / groupTaskDaemon / openTeam* / groupChatBackfill suites, including new coverage for tag parsing, terminal silence, retro-backfill, and the close-out announcement.","contentType":"text/plain;utf-8","attachments":[],"quotePin":""}