Story: Hotfix: the denial test counts on a caller without a role

Table of Contents

This page documents a story in Sprint 27. It captures the goal, current status, acceptance criteria, and the tasks that compose it.

1. Goal

Let the denial case of the account-access read exercise the refusal it describes, so the suite tests the authorization boundary rather than a state no account is in.

2. Status

Field Value
State DONE
Parent sprint Sprint 27
Now Nothing.
Waiting on Nothing.
Next Nothing.
Last touched 2026-10-09

3. Acceptance

  • The denial case calls the read with a caller that holds no role.
  • ores.iam.core.tests passes.
  • The production gate and its documented contract are unchanged.

4. Tasks

Task State Start End Description
Scaffold story: Hotfix: the denial test counts on a caller without a role DONE 2026-10-09 2026-10-09 Story scaffolding rides this task: documents, sprint wiring, and the scaffold PR. Close it before merging that PR.
Implement Hotfix: the denial test counts on a caller without a role DONE   2026-10-09 Initial task for: Hotfix: the denial test counts on a caller without a role

5. Decisions

  • The production gate is not changed here. read_account_access refuses a caller without iam::roles:read, and its header states that contract precisely. This fix makes the test's caller genuinely lack the code rather than relaxing the contract.
  • The boundary question is left open, deliberately. efe1543875 granted iam::roles:read to Member so a member can read the role catalogue, and the same code gates reading another account's access, so every member may now read any account's roles, permissions and assignment tail. That grant is argued for the catalogue and against account data in its own message, so the two readings are in conflict. Resolving it means giving the account-access read an entitlement members do not hold – iam::accounts:read is one – which changes production behaviour and the documented contract. It is a decision about the boundary, not a test fix, and it is not taken here.

6. Out of scope

  • Whether a member should be able to read another account's access. See the second decision.

7. Result

Done. The case takes back the Member assignment the account trigger gave the caller before calling the read, which is the state an administrator can leave an account in. ores.iam.core.tests passes: 771 assertions in 252 test cases.

Emacs 29.3 (Org mode 9.6.15)