Cross-org row reads answer operator's org

Task 9221 · Done · Coder · created · updated

Task 9214 lets an operator edit another org's project, task and account in place: every write goes as the row's org for one request. A few controls stay locked or hidden on those pages, because their READS still answer for the operator's own org: - Project page, Default agent: the picker lists the operator's org's agents, so it stays disabled. Read the agent choices and providers as the project's org (actAsOnce on the reads, cache keys by org). - Project page, Budget tab: hidden on another org's project (the budget routes answer for the caller's org only). Read and write as the project's org. - Project page, repositories: Create a new repository is not offered on another org's project, because the owners and repositories lookup (`/api/git-repos`, `/api/git-repos/owners`) is the operator's own forge connection. Read them as the project's org and create as it. - Task page, Live Cast item control: hidden on another org's task. Read the task's Live Cast state as its org. - Brains roster, Re-login and Add to node on another org's account: the login commands (`POST /api/commands`) go as the operator. Send them as the account's org, or hide them there. Out of scope: API authz; act-as for the whole tab (ADR-0161) is unchanged. Done means: - On another org's project, an operator can pick a default agent from that org's agents, edit its budget, and create a repository; on another org's task, the Live Cast control shows; each request carries `X-Jaah-Act-As: <row org>` (vitest per surface).

Outcome

On another org's project/task the Default agent, Budget, repo create and Live Cast now read and write as the row's org (X-Jaah-Act-As, vitest per surface). Brains login verbs are hidden there. Quick gate green, 3 review lanes pass. PR #6727 queued. Follow-ups in draft 9345. Memory: used mem-15203, mem-14612; proposed none.

Pull request

Artifacts

Activity

  • Created
  • Updated
  • Run
  • Runner started
  • Runner ended (done)