Task: Describe the design the journey landed

Table of Contents

This page documents a task in the Land the role request journey story. It captures the goal, current status, acceptance, and any notes or results.

1. Goal

The journey document still describes the design that was rejected. It puts the request in ores.workflow as an instance that suspends and resumes, names five IAM request subjects that were never built, and lists seven gaps of which five are answered. Rewrite it around the design that was built: an approval request is its own record with a kind, ores.inbox holds the queue and the decision, and IAM holds only the detail of a role grant. State which gaps are closed and how, and which the two new tasks close.

2. Status

Field Value
State DONE
Parent story Land the role request journey
Now Nothing.
Waiting on Nothing.
Next Nothing.
Last touched 2026-10-08

3. Acceptance

  • The document's Entities composed names the approval request, and not a workflow instance, as the request.
  • The document's Operations and messages names the subjects that exist, and drops the five that were never built.
  • Every one of the seven gaps is marked closed or open, and the one that is not fully closed says what is left and where it is captured.
  • No credential field is named, and no subject is spelled in a form the entity protocol forbids.

The third criterion was amended. It read "the two open ones point at their tasks", which was true when gaps 4 and 7 were the open pair; both are now built, so the criterion states the rule instead of a count that has moved on.

4. Plan

The document is rewritten in place rather than replaced, because a user journey is a design document that outlives its sprint, and a reader arriving from the older text should be able to see what changed and why. Six sections move; the rest — the goal, the actors, the steps' ordering, the screens — stand, because the journey was right about what a person is trying to do and wrong only about what holds the waiting.

The design change is stated where it matters rather than assumed. The old text put the request in ores.workflow as an instance that suspends and resumes; the new text says why that turned out to be unnecessary, in the section that made the claim, so the two readings sit side by side. The same applies to the seven gaps: they are kept as a table with a state per gap, because two of them were closed by changing the design rather than by building what they asked for, and that is the part a future reader would otherwise have to reconstruct.

The subjects are replaced with the ones that exist, taken from the models rather than from memory: compass codegen generates every subject from a model, so the models are the source and the document cites them. Nothing is spelled in a form the protocol forbids, which is checked rather than asserted.

5. Measurements

Every number this task claims about a tree, with the command that produced it and the commit it was measured at. A number without both is not a measurement, because a clean-up record describes a tree and trunk moves under a branch: a consumer count, a gate's component count and a suite's size all change with no code changing, and the reader of a bare number cannot tell which tree it came from. Where the raw output matters, put it in an evidence/ file beside the task and name that file in the Command column.

What Value Command Commit
Subject declarations, and none added 213 declarations, 0 accepted in the baseline, none new check_subject_conformance.py 0e38c2a6fe plus this branch
Dangling id links 0 ./compass.sh lint 0e38c2a6fe plus this branch
Org links 7292 files scanned, 0 unresolved emacs -Q --script projects/ores.lisp/src/ores-check-org-links.el 0e38c2a6fe plus this branch
Pattern uses every service architecture pattern and its uses link each other build/scripts/check_pattern_uses.py 0e38c2a6fe plus this branch

6. Notes

7. Test Scenarios

Manual QA scenarios (scaffolded via compass add test_scenario) that verify this task. Link new ones here as they're created; the scenario doc itself links back via its "Verifies task" field.

Scenario State Notes
     

8. PRs

PR Title
#2785 [doc] Describe the design the role request journey landed

9. Review

Comment summary File Decision Notes
       

10. Result

The journey document now describes the design that was built, and every one of its seven gaps is marked.

Six sections moved. The request is an approval request in ores.inbox with a kind, a state and a deadline, and not a workflow instance; the paragraph that claimed otherwise now says where that claim came from and why it was unnecessary, so a reader from the older text can follow the change rather than notice a gap. The entities table names the request, its kind, its decision, the IAM detail behind it and the notification a person is given. The operations table names the subjects that exist, taken from the models that generate them.

The seven gaps are a table with a state each, because two of them were closed by changing the design rather than by building what they asked for. Gap 2 — the workflow engine cannot wait on a person — was answered by not needing the engine; gap 6 — no query returns a request as a row — was answered by making the request a table. Gap 7 is half closed: the deadline is built, and the reminder before it is not. That remainder is captured, and the document says why it is a different behaviour rather than a loose end.

Two things were decided while writing it. The document names the screens that were built, because a journey that names only wireframes leaves a reader unable to find the code. And the credential sentence was reworded to state the guarantee without listing the fields: the acceptance said no credential field is named, and the old sentence named four in order to exclude them.

The deadline task's work had to land first. Its subject, inbox.v1.ops.expire_overdue_approvals, and the two pages this document links to — Approval request expiry and the reminder capture — were not on main when this was written, and a dangling id link fails compass lint. So the branch was rebased onto that work once it merged and the links were added then, rather than the document shipping a subject it could not point at.

Emacs 29.3 (Org mode 9.6.15)