Task: Inventory the routes and operations the credentials journeys need
Table of Contents
This page documents a task in the Implement the credentials journeys in ores.web story. It captures the goal, current status, acceptance, and any notes or results.
1. Goal
Give the group one page that says, for every credentials step, whether the operation exists, what carries it, whether the browser can reach it and what permission it needs. The per-screen findings the prototypes recorded mix three different problems — a missing subject, a missing route and a handler that answers with nothing — and each has a different owner and cost. The build tasks are sized from this page.
The answer does not depend on which variant the product owner picks, because no variant changes what the server serves, so this work could proceed while the prototypes are under review.
2. Status
| Field | Value |
|---|---|
| State | DONE |
| Parent story | Implement the credentials journeys in ores.web |
| Now | Nothing. |
| Waiting on | Nothing. |
| Next | Nothing. |
| Last touched | 2026-09-30 |
3. Acceptance
- Every step of the three journeys has its subject, its
ores.httproute, its BFF route and its permission, on the investigation. - Every claim carries the command that produced it, and the snapshot names its commit.
- The four kinds of gap are separated, so a route gap is not sized as a subject gap.
- The defect the census found is filed as its own capture, not as a journey gap.
- The story's
* Documentstable links the investigation. compass lintpasses.
4. Plan
- Count the routes on both HTTP surfaces: the BFF, which the browser reaches,
and
ores.http, which it does not. - List the subjects from the generated protocol, so the census does not inherit a design document's claim.
- Check the permission each operation needs against the handler's guard, and against the catalogue that grants it.
- Read the handlers the journeys' subjects reach, to separate a handler that answers with no rows from one that answers.
- Write the per-journey tables, the gap counts and the recommendations.
- File the defect the census found.
5. Measurements
| What | Value | Command | Commit | ||||
|---|---|---|---|---|---|---|---|
| Routes the browser can use | 23 | =grep -c "server\.\(get\ | post\ | put\ | delete\ | patch\)(" projects/ores.web/packages/bff/src/server.ts= | dbbde296d0 |
| Credentials routes the browser can use | 2 | =grep -c "server\.\(get\ | post\)('api\(account\ | password-policy\)" projects/ores.web/packages/bff/src/server.ts= | dbbde296d0 | ||
| IAM routes external clients can use | 50 in 12 files | =grep -rc "router->\(get\ | post\ | put\ | delete\)(\"/api/v1/iam" projects/ores.http/iam/src/routes/iam/*.cpp= | dbbde296d0 | |
| BFF routes the three journeys need | 10 distinct | the investigation's per-journey tables | dbbde296d0 | ||||
| Handlers that answer with no rows | 2 | session_operations_handler.hpp |
dbbde296d0 | ||||
| Unguarded session reads | 3 | grep -n has_permission projects/ores.iam/core/include/ores.iam.core/messaging/session_handler.hpp |
dbbde296d0 | ||||
Callers of set_password_reset_required |
0 | grep -rn set_password_reset_required projects/ --include=*.cpp --include=*.hpp |
dbbde296d0 |
6. Notes
- The census was run twice: once against the BFF alone, which concluded that
nothing serves the credentials data, and once against both surfaces, which is
the record. The first pass is kept in the investigation's
* Paths taken, because the mistake is the reusable part: anores.httproute is not a browser read. - The permission column checks the handler's guard, not the catalogue. The two
disagree twice:
sessions:deleteis required and never granted, andsessions:readis granted and never required.
7. Test Scenarios
| Scenario | State | Notes |
|---|---|---|
8. PRs
| PR | Title |
|---|---|
| #2438 | [agile] Inventory the routes the credentials journeys need |
9. Review
| Comment summary | File | Decision | Notes |
|---|---|---|---|
10. Result
Done 2026-09-30. Snapshot: commit dbbde296d0.
The investigation
The routes and operations the credentials journeys need
carries a table per journey — step, subject, ores.http route, BFF route,
permission — and the totals:
| Gap | Count |
|---|---|
| BFF routes to add | 10 distinct (3 for the member's screen, 6 for the administrator's, 4 for the audit; 3 serve two journeys) |
| Handlers to finish | 2 (sessions.active and sessions.samples, both one-line stubs) |
| Subjects to design | 6 |
| Request shapes to widen | 1 (sessions.list needs an account filter) |
| Defects to fix | 1 |
The defect: list_sessions, get_session and get_many_sessions check no
permission, while the account reads check iam::accounts:read and the
login-record reads check iam::login_info:read. The catalogue grants
iam::sessions:read for exactly this purpose. Filed as
The session read handlers skip the permission check the catalogue grants.
Verification: compass lint passes, and the durable-document link advisory is
unchanged. Every count was produced by the command in the investigation's
* Methodology table, run at the snapshot commit. The backlog indexes were
regenerated, so the new capture is in the inbox index.