Repository navigation
Open
Labels
app/chatPackage/app: chat (pkgs/ or apps/ in this repo)Package/app: chat (pkgs/ or apps/ in this repo)kind/ciCI/CD pipelines, workflows, and build automationCI/CD pipelines, workflows, and build automationpriority/normalOrdinary priority (the default)Ordinary priority (the default)queue/claimedQueue worker lifecycle stateQueue worker lifecycle statesource/creatorFiled by the new-issue-creator jobFiled by the new-issue-creator jobstatus/in-progressQueue worker lifecycle stateQueue worker lifecycle statetask/small-fixQueue packet kind: bounded fix with reproduction and targeted testsQueue packet kind: bounded fix with reproduction and targeted testswork/assignedQueue worker lifecycle stateQueue worker lifecycle state
Description
Problem
pkgs/chat/main_test.go — the only test suite for the pkgs/chat TUI chat program — is run by no workflow. The one workflow that touches the module, go-modules-build.yml, verifies tidy/build/vet only; it never runs go test. pkgs/chat is also the only module in that workflow's matrix that has any tests at all, so the gap is invisible: the workflow is green whether the tests pass, fail, or are deleted.
Evidence (verified this run, laptop primary @ e90672d, HEAD == origin/main)
.github/workflows/go-modules-build.yml(matrix line ~57:module: [chat, database, graph, import, launcher, tea]) runs exactly three verifications per module:go mod tidycleanliness,go build ./..., andgo vet ./.... There is nogo teststep in the file, and no other workflow mentionspkgs/chat.- Hand run on the laptop this run:
cd pkgs/chat && go test ./...→ ok, 5 tests pass (1.128 s, fully offline). - What the 5 tests pin (
main_test.golines 68–207, against the 238-linemain.go): Enter on empty input broadcasts nothing; Enter on real text broadcasts it verbatim exactly once;sendreaches only live programs (removed sessions get nothing); removing an unknown session is a no-op; and the registry holds up under concurrent register/send/remove. - Why these pins matter here: the open chat issues are exactly in this area — chat: broadcast fan-out runs each Send in its own goroutine — messages arrive out of order and a stalled session piles up unbounded blocked goroutines #4389 (broadcast fan-out ordering / unbounded blocked goroutines), chat: completion waiter can block forever on p.Wait() before program startup — session never deregistered #4515 (completion waiter can block forever; session never deregistered), chat: per-session message history is never trimmed — every message re-joins the full history into the 5-line viewport, so a long-lived session grows unbounded and rendering is quadratic #3268 (unbounded per-session history). The registry/broadcast contract tests are the regression net for those fixes, and today a fix for any of them can merge with the net never run.
Why it matters
Build+vet proves the chat program compiles; it says nothing about the broadcast semantics that are its whole behaviour. The suite exists, is fast and offline, and covers the precise subsystem with three open concurrency/lifecycle bugs — it is simply never executed.
Acceptance criteria
- An automated check (a
go test ./...step ingo-modules-build.ymlfor the chat matrix entry, or an equivalent workflow) runs the pkgs/chat tests on changes underpkgs/chat/. - The check passes on current main (5 tests at filing).
- Breaking a pinned behaviour (e.g. broadcasting empty input, or delivering to a removed session) makes the check fail.
Metadata
Metadata
Assignees
Labels
app/chatPackage/app: chat (pkgs/ or apps/ in this repo)Package/app: chat (pkgs/ or apps/ in this repo)kind/ciCI/CD pipelines, workflows, and build automationCI/CD pipelines, workflows, and build automationpriority/normalOrdinary priority (the default)Ordinary priority (the default)queue/claimedQueue worker lifecycle stateQueue worker lifecycle statesource/creatorFiled by the new-issue-creator jobFiled by the new-issue-creator jobstatus/in-progressQueue worker lifecycle stateQueue worker lifecycle statetask/small-fixQueue packet kind: bounded fix with reproduction and targeted testsQueue packet kind: bounded fix with reproduction and targeted testswork/assignedQueue worker lifecycle stateQueue worker lifecycle state
Activity
developing-today commentedon Nov 5, 2026
CODE-1756
dezren39 commentedon Nov 5, 2026
🤖 Agent note · state: filed
dezren39 commentedon Nov 5, 2026
🤖 Agent note · picked up
dezren39 commentedon Nov 5, 2026
🤖 Agent note · triage findings
dezren39 commentedon Nov 5, 2026
🤖 Agent note · handed off
dezren39 commentedon Nov 5, 2026
🤖 Agent note · handed off
go test ./...check for pkgs/chat in CI (fails if pkgs/chat/main_test.go is absent), passing on current main.