Skip to content

fix(mind): route delegated tasks to the repo that will hold the change - #6247

Merged
atomantic merged 1 commit into
mainfrom
cos/task-mtnb7y8v/agent-e968a2f2
Sep 4, 2026
Merged

fix(mind): route delegated tasks to the repo that will hold the change#6247
atomantic merged 1 commit into
mainfrom
cos/task-mtnb7y8v/agent-e968a2f2

Conversation

@atomantic

Copy link
Copy Markdown
Owner

Summary

The persistent mind picks one configured app — one repository — for every CoS agent task it queues, and the task-capability prompt only told it to "choose one configured app." Nothing said which repo owns a given piece of work, so work on a PortOS integration got routed to the app the integration is about.

That happened: a wake that wanted to extend PortOS's Eidoverse world support queued its task against the Eidoverse Worlds checkout. The agent there could not see PortOS's connector (server/services/eidoverseWorld.js), its projection layer (eidoverseWorldProjection.js), or its privacy-safe source adapters (eidoverseWorldSources.js), so it re-derived most of that work as "missing" and opened a docs-only PR against a fork of a third-party upstream. That PR has been closed with the reasoning recorded on it.

What changed

  • The prompt states the routing rule. Pick the repository that will hold the change, not the subject the work is about. PortOS owns every integration it ships — the connector, projection, routes, UI, and settings for another app all live in the PortOS repo. Another app's repo is the target only when the change must land in that repo's own source. When PortOS work looks like it needs something another project does not expose yet, the task still targets PortOS and establishes from PortOS's own integration what is genuinely missing before anyone proposes a change to that project.
  • The catalog marks the PortOS baseline entry self: true, so the rule points at a concrete id rather than a name the mind has to recognize. Only that one entry carries the flag — the prompt catalog is bounded at 4 000 characters and drops apps past the limit, so an unconditional "self":false on every entry would spend budget to say nothing.

self reuses the existing PORTOS_APP_ID constant from server/lib/appIdentity.js rather than a second literal.

Follow-up

The two host-identity items that are genuinely PortOS-side work — serving a privacy-safe host descriptor from the Eidoverse bridge, and giving the world a self-description entity — are filed as #6246, decision-complete. The two that belong to the Eidoverse sequencer itself are recorded upstream rather than here.

Test plan

  • New test in server/services/persistentMindTaskCapability.test.js: with the real baseline id plus a managed app in the catalog, only the baseline carries self: true, and the prompt carries the routing rule. Verified failing before the fix (self: true absent) and passing after.
  • Full server suite green: 1 948 files, 39 276 tests, exit 0.
  • Traced every consumer of the catalog shape — server/routes/cosMindRoutes.js and the client components under client/src all spread the entry and read named keys, so the extra optional key passes through untouched.

The persistent mind picks an app for every CoS task it queues, and the
task-capability prompt only told it to "choose one configured app" — nothing
said which repo owns a given piece of work. So work on a PortOS integration
was routed to the app the integration is *about*: a wake that wanted to extend
PortOS's Eidoverse world support queued the task against the Eidoverse Worlds
checkout, where the agent could not see PortOS's connector, projection, or
sources layer at all and re-derived most of it as "missing" in a docs-only PR
against a third-party fork.

The prompt now states the rule — pick the repository that will hold the change,
not the subject it is about — and names PortOS as the owner of every integration
it ships. The catalog marks the PortOS baseline entry with 'self: true' so the
rule points at a concrete id rather than a name the mind has to guess; only that
entry carries the flag, keeping the bounded prompt catalog small.
@atomantic
atomantic merged commit 1c08064 into main Sep 4, 2026
7 checks passed
@atomantic
atomantic deleted the cos/task-mtnb7y8v/agent-e968a2f2 branch September 4, 2026 19:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant