Add read-only role options, a member roster directory and a removed-member send refusal #228

Merged
weichen merged 1 commits from fix/multiuser-collab-followups into main 2026-10-20 12:00:23 +00:00
Owner

Why: after the Backend role-authority cutover a non-admin project creator could not load professional role options (RolePolicyAdmin.ListRoles requires system.roles.view → store: account action forbidden), member names fell back to the admin-only EXT-19 ListAccounts ("账号目录暂不可用"), and a removed member's send got an unexplained 404.

Evidence: agent-exec unit rdir-backend-role-options-roster-send (PI, success, transport 612e044). Worker: gofmt/vet clean; go test ./pkg/extension ./internal/app ./internal/server ok; new tests TestRoleOptionsExposeEnabledRolesToNonAdminActor, TestAccountDirectoryProjectRosterEnumeratesResolvedMembers, TestProjectLifecycleRemovedMemberMessageIsForbidden.

Impact:

  • New optional extension.RoleOptionsProvider (enabled roles, roleId+name only) implemented on the dispatch Host for any enabled actor.
  • New account directory purpose project.member-roster: rdm plugin only, explicit resolver candidate list (AllCandidates refused), any status, empty query enumerates the scoped roster with normal paging. Other purposes unchanged.
  • POST /api/conversations/{id}/messages answers 403 conversation: not-project-member when the owner's project work is no longer authorized; other endpoints keep 404.
  • SurfaceVersion 2.28.0-experimental.

Refs: Agent-System-Dev .task/fix-multiuser-collab-followups.md

Why: after the Backend role-authority cutover a non-admin project creator could not load professional role options (`RolePolicyAdmin.ListRoles` requires system.roles.view → `store: account action forbidden`), member names fell back to the admin-only EXT-19 `ListAccounts` ("账号目录暂不可用"), and a removed member's send got an unexplained 404. Evidence: agent-exec unit rdir-backend-role-options-roster-send (PI, success, transport 612e044). Worker: gofmt/vet clean; `go test ./pkg/extension ./internal/app ./internal/server` ok; new tests TestRoleOptionsExposeEnabledRolesToNonAdminActor, TestAccountDirectoryProjectRosterEnumeratesResolvedMembers, TestProjectLifecycleRemovedMemberMessageIsForbidden. Impact: - New optional `extension.RoleOptionsProvider` (enabled roles, roleId+name only) implemented on the dispatch Host for any enabled actor. - New account directory purpose `project.member-roster`: rdm plugin only, explicit resolver candidate list (AllCandidates refused), any status, empty query enumerates the scoped roster with normal paging. Other purposes unchanged. - `POST /api/conversations/{id}/messages` answers 403 `conversation: not-project-member` when the owner's project work is no longer authorized; other endpoints keep 404. - SurfaceVersion 2.28.0-experimental. Refs: Agent-System-Dev .task/fix-multiuser-collab-followups.md
weichen added 1 commit 2026-10-20 11:58:10 +00:00
agent-exec transport be0c4744ff5899017313eb3f4fbd4a3f/43fe057c8332
governance / governance (pull_request) Successful in 16s
ci / vet-and-test (pull_request) Successful in 1m43s
612e04402d
weichen merged commit ed956a4d44 into main 2026-10-20 12:00:23 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: weichen/Agent-System-Backend#228