The five dimensions
Four sliders and one computed value. Why alignment is not a goal you wrote down.
lib/services/decision_engine.dartsrc/engines/decision-engine.tsYou are weighing a choice. Rihla gives you five angles on it, and hands back a reflection rather than a verdict.
The five
| Dimension | Direction | How it is set |
|---|---|---|
| Impact | Positive | You rate it |
| Effort | Cost | You rate it |
| Time | Cost | You rate it |
| Risk | Cost | You rate it |
| Alignment | Positive | Computed from your data |
Four of them are your honest gut read, and the app says so — the helper text under Effort is literally "your honest gut read, not a project plan". A decision tool that asks you to estimate effort in hours is asking for a number you do not have, and will then treat that number as evidence.
Alignment is the interesting one
It is the only dimension that is not a slider. It is derived from
lifeBalanceShares — where your effort has actually been going — so an option
that serves a neglected life area scores higher on alignment than one that
serves the area already taking most of your week.
This is worth being precise about, because the website got it wrong once and repeated it for months. Alignment is not "does this match a goal you wrote down". Goals you wrote down are aspirations. Where your hours went is a measurement, and the measurement is what the score reads.
Thin input stops the output
If there is not enough behind a decision, the engine stops rather than padding what it has. This is the same rule as everywhere else in the app, and it is the reason the decision log is worth re-reading months later: nothing in it was generated to fill a card.
It reflects; it never rules
The output is a lean — toward yes, away, evenly split, or none — and the language around it is constrained by a published list. Nineteen imperative phrases are blocked outright, so the engine cannot say "you should", "go for it", or "don't". It can say what the ratings imply and what stands out.
That constraint is enforced by a substring matcher, not by a prompt. See the honesty guard.