The first week of running cross-project session logging, every entry landed in one of three buckets. By week three, the AI was making a quiet error nobody noticed for a month: anything that touched a system or a repo went into the workspace bucket. Anything that touched a business decision should have gone into the business bucket. Instead, those business decisions were getting filed under whichever workspace folder had the code change.

The categorization drift is subtle. A session looks like this:

  • Operator opens a session, asks for help drafting a sales email
  • AI drafts the email, opens the contacts file to fill in the company name
  • Operator approves the draft
  • AI logs the work

The log goes under whichever project owns contacts.md. The business decision (sending a sales email to a specific company) doesn’t get recorded against the business project. It gets recorded against the workspace-management project.

Six weeks later you look at the business project’s session log and it’s nearly empty. You look at the workspace project’s session log and it’s full of business decisions miscategorized as “updated contacts.md.”

Why It Drifts

The AI categorizes by what file got touched, not what intent the work served. Files are concrete. Intent is fuzzy. So when the keyword recognition kicks in for project routing, the technical-sounding bucket wins every time.

Two related project names will lose to whichever one has more file-system anchors. The business project (people, decisions, narratives) loses to the workspace project (folders, configs, agents).

The Fix

Define projects by what changes, not by topic keywords.

If a session’s primary output is a sales email to a specific customer, the project is the business that customer belongs to, not the file-management bucket where contacts.md happens to sit. If the primary output is a refactored agent definition, the project is workspace-development, even if the agent is used by a specific business.

Two heuristics that resolved it:

  1. What gets the deliverable? The owner of the artifact is the owner of the session.
  2. Where would the operator look for this six months from now? That’s where it should be logged.

Both were obvious in retrospect. Neither was obvious until I’d accumulated six weeks of mislabeled entries and started wondering why the business project looked dead.

The Larger Pattern

Anything that auto-categorizes by surface signal will drift toward whichever surface is most explicit. File paths beat intent. Tag clouds beat narratives. Code metrics beat product metrics.

If the routing matters, route by what gets delivered, not by what gets touched. The fix is a one-line update to the routing rules. The annoying part is realizing you need it.