MemberJunction / MemberJunction/MJ
Realtime surface tabs: 'tab up front' is hardcoded to the whiteboard — it should be the deployment's choice
- Dominant language
- TSQL
- Stars
- 29
- Forks
- 6
- Avg merge
- 2d 1h
- Merged PRs (30d)
- 323
Description
## What happens
`ShouldRegisterChannelTabUpFront(channelName, hasBeenUsed)` returns `IsWhiteboardChannel(channelName) || hasBeenUsed`, so the whiteboard — and only the whiteboard, matched by name — gets a surface tab at session start before anything has touched it.
The stated reason is good: a user can be the first to draw on a board, whereas every other channel earns its tab on first use. But it is one deployment's answer compiled in, and the predicate's own comment says detection is by name *"so a deployment can't accidentally opt a non-board channel into the immediate-tab behavior"* — which also means a deployment cannot deliberately opt OUT.
## Why it matters
In a voice-first interview the session opens on the agent talking and nobody is going to draw first. A blank board sitting there makes the product read as a tool with a canvas bolted on rather than a conversation that can produce one. The right behaviour there is: no surface until something uses it.
A design-review session wants the opposite, and both are legitimate — which is the argument for configuration rather than a different hardcoded answer.
## Suggested shape
Let the host decide, e.g. a per-channel `TabUpFront` on the channel row (or an overlay input listing channels that tab immediately), defaulting to today's behaviour so nothing changes for existing deployments.
## Note for whoever picks this up
There is a second, easily-missed half: anything tracking surface presence separately must agree with the strip. Claiming a surface is present when no tab exists is how a group gets formed around a pane that is not on screen.
## Environment
MJ 5.51.0, `realtime-surface-tab-style.ts`. Currently patched locally to `return hasBeenUsed` — a reversal, not a fix, which is why this is filed as configuration.
Contributor guide
Research direction
Start with realtime-surface-tab-style.ts and trace ShouldRegisterChannelTabUpFront(channelName, hasBeenUsed), then find the separate surface-presence tracking mentioned in the issue. Define how a deployment or channel row supplies the opt-in setting while preserving today’s default. Done means tab visibility and surface presence agree for configured and unused channels.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- frontend
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 52/100