Skip to content

A task typed on Home can land in another project's repository #1466

Description

@AbirAbbas

Seen on dev@debffabf6.

What happened

On 2026-09-24, a /task typed directly on Home while Home showed project B opened a conversation attached to project A's still-running engine. The task commit landed in A; B was untouched. The same result occurred on #1410's merge-base. A plain message typed on Home stayed in B. One run also showed could not start the task · the engine did not answer in time despite the task having started elsewhere; that notice was observed once, not independently reproduced.

Replication

Deterministic (no model). None yet: both launches need a conversation with a live engine, which today means a model.

Field (real models). OPENROUTER_API_KEY, deepseek/deepseek-v4-flash, tmux; a few minutes and a few cents.

export CODEAF_HOME=$(mktemp -d) HOME=$(mktemp -d)
A=$(mktemp -d) && git -C "$A" init -q && git -C "$A" commit -q --allow-empty -m init
B=$(mktemp -d) && git -C "$B" init -q && git -C "$B" commit -q --allow-empty -m init
  1. cd "$A" && codeaf chat, send any message, then close the window. A's engine stays up.
  2. cd "$B" && codeaf chat. Home's seam reads project: with B's folder.
  3. On Home, type /task write h0.txt containing h0 and press enter.

Today the conversation opens in A (its meta.json workspace is A) and the commit task: write h0.txt containing h0 lands in A; git -C "$B" log is unchanged. Control: a plain message typed on Home in step 3 opens in B.

Where

internal/tui3/home.go:3396 at dev@debffabf6, homeStart, begins Home submissions; homeStartWithProject at :3406 delegates to target opening. Search /task dispatch through that path and the hosted engine selection.

The fix

Bind the Home draft's project to the new conversation and its engine before dispatching /task. Refuse visibly if that binding cannot be established; never let an existing engine from another project answer it.

Acceptance

  • e2e: through codeaf chat in tmux, a Home /task issued while A's engine lives creates and commits only in B; the conversation workspace field names B.
  • e2e: a plain Home message still opens in B.
  • Unit: the Home task command and plain-message paths resolve the same target project.
  • Update the Home/task manual and invalidates.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:chatThe v3 surface a person sits in front of (internal/tui3)area:sessionThe engine — turns, tasks, the toolbelt, checkpointsbugSomething the code does that it should notsev:criticalData loss, money spent wrongly, a false done, or the merge queue blocked

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions