fix(mind): route delegated tasks to the repo that will hold the change - #6247
Merged
Conversation
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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
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":falseon every entry would spend budget to say nothing.selfreuses the existingPORTOS_APP_IDconstant fromserver/lib/appIdentity.jsrather 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
server/services/persistentMindTaskCapability.test.js: with the real baseline id plus a managed app in the catalog, only the baseline carriesself: true, and the prompt carries the routing rule. Verified failing before the fix (self: trueabsent) and passing after.server/routes/cosMindRoutes.jsand the client components underclient/srcall spread the entry and read named keys, so the extra optional key passes through untouched.