# P7-negotiation-market — screen inventory

| | |
| --- | --- |
| Title (ar) | التفاوض والسوق |
| Title (en) | The negotiation and the market |
| Owning epic | D7.0 |
| Reviewer | Raheem takes the decisions; Zayed records them and locks |
| Timebox | 4 days |
| Opened | 2026-09-22 |
| Reviewed | — |
| Locked | — |
| Status | draft |
| Supersedes | `P5-requests-offers`, locked 21 سبتمبر 2026 |

## What this supersedes, and why it had to

`P5-requests-offers` was locked on **21 September 2026** against Raheem's review
of 19 and 20 September. On **22 September** he answered the twelve discussion
questions that prototype had recorded as open, brought eight more requirements
back from a client meeting, and ruled on four board items. **P5's four decisions
all stand.** What does not stand is P5's silence: it drew a negotiation in which
there was no listing policy, no route, no line-item value, no player consent, no
expiry, no second leg and no way for a player to start anything.

P5's own `findings.md` recorded twelve open questions as item 16 of the hand-off
and said in terms that they were "recorded in full and unanswered". They are
answered now. A prototype whose central record is missing seven of its parts is
not repaired — **it is superseded**, which is what this folder is.

### What is carried from P5 unchanged and is not re-asked

All four of P5's locked answers are rendered here as given:

| P5 | Answer | Rendered here as |
| --- | --- | --- |
| D1 `row=headline` | the list row is a headline sentence | every list row on `inbox.html` |
| D2 `counter=beside` | a request is a container of **immutable** offers, one open at a time | `offer.html`, and Q11 confirms it word for word |
| D3 `consent=onrecord` | the owning club's consent is an action on the approach | `offer.html`, now beside a **second** gate |
| D4 `dealtype=perrole` | the deal-type list is computed from the target's profile type | `index.html`, now with T4's third type in it |

`friendly.html` is **not** rebuilt. Board item #19 closes friendlies with a
backlog reference, and P5's copy stands as the dated evidence that the approach
record stretched to something that is not a transfer.

## The question

P5 asked what a negotiation looks like. This prototype asks what a negotiation
**is** — where it may start, who may start it, what it is worth, what freezes
it, who has to agree, and what it becomes.

Seven things in his response are load-bearing and none of them had a screen:

- **A listing is a policy, not a flag.** The club chooses whether to name a deal
  type and whether to restrict it, and a restriction has to mean something when
  a mismatched offer arrives.
- **There are two routes, not one.** An approach that came through the market is
  an application to a channel the owner can close; an approach sent directly runs
  on its own thread and is not closed by anything the listing does.
- **Value is a list.** A fixed fee, instalments, a player in exchange, a sell-on
  percentage. One `amount` column does not survive the cast's own deals.
- **The player is a gate with a reject path**, and he is a different gate from
  the owning club's consent, which P5 already locked.
- **Sometimes the player is not there at all.** An approach about a player who
  was never listed is addressed to the club, and the player receives nothing.
- **A deal has two legs and up to four participants**, and what happens when one
  leg succeeds and the other does not is undecided.
- **A need is a saved market search**, answered by people who nominate
  themselves and by clubs offering players they hold, and those are two different
  things in one list.

## Decisions to settle

Twelve. Each has both answers built and a switch in the variant bar, and each
one is a question the screen can distinguish — not a task and not a taste poll.

| Id | Decision | Options built | Switch |
| --- | --- | --- | --- |
| **D1** | **A restricted listing meets a mismatched offer.** L1 restricts ثامر القرني to انتقال نهائي and نادي صقور الحجاز sends a loan enquiry anyway. His own recommendation is the tray; the block is what the club asked for when it ticked the box. | a) **hard block** — the send is refused, naming the restriction and its date — `restrict=block` b) **an out-of-scope tray** — it arrives, in a separate list the club can still read, and the sender is told it falls outside the stated type — `restrict=tray` | `restrict` |
| **D2** | **A player offered in exchange.** A9 offers فهد الرشودي plus 600,000 ريال for ثامر القرني. فهد holds his own contract, his own window and his own consent. | a) **a linked negotiation** — including him opens his own record, with his own consent gate, bound to this one — `exchange=linked` b) **a valuation only** — he is a line item worth 900,000 ريال and nothing is opened — `exchange=valuation` | `exchange` |
| **D3** | **What holds a draft for internal approval.** DR1 is عمر الدخيل's 3,000,000 ريال draft. Both answers hold it, for different reasons, so the screen has to say **which** reason. | a) **a value threshold** — above a figure the club sets — `approval=value` b) **the sender's role** — anyone who does not own the club account — `approval=role` | `approval` |
| **D4** | **The position taxonomy.** «مدافع» and «ظهير أيسر» are not the same requirement and a club asking for one should not silently get the other. | a) **hierarchical** — a need on مدافع accepts anyone in the defensive line; a need on ظهير أيسر accepts only that — `positions=tree` b) **flat** — the position matches exactly or it does not — `positions=flat` | `positions` |
| **D5** | **Criteria strictness.** His own suggestion is per-criterion. A مدرب مساعد who has been hired as a مدرب أول is the case that makes the strict reading expensive. | a) **required vs preferred per criterion** — a preferred miss lowers the score, a required miss excludes — `criteria=weighted` b) **every published criterion required** — `criteria=strict` | `criteria` |
| **D6** | **The candidate list.** نايف الشهري is 29 against «حتى 26» and scores 74. | a) **a score cut-off** — below it the candidate is not shown — `rank=cutoff` b) **rank everything** — every candidate is listed in order and nothing is hidden — `rank=all` | `rank` |
| **D7** | **The visibility defaults across three audiences** — public, other clubs, and the club you are negotiating with. Board item #15: the direction is confirmed and the defaults are not. | a) **disclose** — nothing is public unless published, other clubs see nothing, and the negotiating counterparty sees everything as a condition of negotiating — `visibility=disclose` b) **equal** — data is visible to clubs generally, and negotiating confers no extra access — `visibility=equal` | `visibility` |
| **D8** | **A deal agreed outside a registration window.** Every agreement in this cast is one: the summer window closed 31 أغسطس and the winter window opens 1 يناير. A15 proposes a start of 1 أكتوبر and can be registered on no day at all. | a) **warn at agreement** — the deal is agreed, and the screen says when it can be registered — `registration=warn` b) **block** — it cannot be agreed until a window can hold it — `registration=block` | `registration` |
| **D9** | **Offer expiry.** Without one, "no new offer while one is pending" deadlocks: A11 has been pending since 12 سبتمبر and nothing can follow it. | a) **a dated expiry on every offer**, set by the sender — `expiry=dated` b) **no expiry** — an offer stands until it is answered or withdrawn — `expiry=manual` | `expiry` |
| **D10** | **How the two legs bind.** A15's player leg is accepted and its compensation leg is open. If اتحاد الوسام refuses the compensation, what happens to the agreement عماد الغانم has already given? | a) **atomic** — one leg fails and both fall — `legs=atomic` b) **independent** — the player leg stands and the club leg reopens — `legs=independent` | `legs` |
| **D11** | **Percentile explainability.** ريان الحارثي scores 88 on four factors. | a) **the factors on the indicator** — `why=inline` b) **the factors on demand** — `why=ondemand` | `why` |
| **D12** | **The two state machines, and a conflict with a locked decision.** S1 locked **six** server-enforced approach states and said no club configures them. Q11 specifies a **seven**-state offer machine that adds `draft`, `expired` and `superseded` and drops `قيد المراجعة` and `عرض مقابل`. | a) **two machines** — S1's six stay on the request and Q11's seven sit on the offer beneath — `states=two` b) **one reconciled machine** — a single vocabulary, with `عرض مقابل` becoming `superseded` on the offer it answers — `states=one` | `states` |

### What the reviewer must answer

- **D1** — The block is what the club literally asked for and it is the only
  answer that keeps "restricted" meaning restricted. The tray is his own
  recommendation and the argument for it is that a loan enquiry on a
  permanent-only listing is often still worth reading. Answer: which, and — the
  half that costs something either way — **whether an offer in the tray is work
  the club owes.** The screen deliberately leaves A10 out of the count of eight
  so that this cannot be answered by arithmetic.
- **D2** — Linked is honest about what فهد الرشودي is: a person with a contract
  and a veto, not a number. It also means one refusal can now sink two deals and
  the screen has to say so. Valuation keeps the negotiation between two clubs
  and defers the second conversation to the day the first one closes — at the
  cost that the club may agree to send a player who then refuses to go. Answer:
  which, and **whether his consent is required before the exchange can be
  accepted or only before it can be registered.**
- **D3** — Both hold DR1, which is the point: the decision is not whether a draft
  can be held but what the club is told about **why**. A value threshold is a
  number the club sets and an auditor can read; a role rule is a sentence about
  who you are and needs no configuration. Answer: which, and **whether the
  threshold or the rule is the club's to set or the platform's.**
- **D4** — The tree is the answer to his own worry that over-restriction refuses
  acceptable chances. It costs a taxonomy somebody has to maintain per sport,
  and the registry does not have one. Flat costs nothing and refuses the
  defensive midfielder who would have been fine. Answer: which, and **if it is
  the tree, who owns the taxonomy** — the platform's registry, or the club on
  each need.
- **D5** — Weighted is his suggestion and it is the only one that lets a club say
  what it actually means. It also makes the score do work the club may not want
  it to do. Strict is legible and it excludes the assistant coach who would have
  been hired. Answer: which, and **whether a required miss hides the candidate
  or shows him refused** — the second half matters because D6 may already hide
  him for a different reason.
- **D6** — A cut-off is a decision the platform takes on the club's behalf and
  it is invisible: the club never learns who was removed. Ranking everything is
  honest and it is a longer list. نايف الشهري is scored at 74 on purpose, high
  enough that no sensible cut-off removes him, so **the decision cannot be
  settled by looking at him** — it has to be settled on the principle. Answer:
  which, and **if it is a cut-off, whether the club is told how many were
  removed.**
- **D7** — This is the one with the largest reach and the least evidence behind
  it, because it governs data on screens two other prototypes own. Disclose
  makes negotiating a privilege that costs you your privacy, which is how the
  business actually works — a club is entitled to know about the injury of the
  player it is buying. Equal is simpler and it lets a club hide an injury from
  the club it is selling to. Answer: which, and — separately — **whether the
  counterparty's extra sight begins when the approach is sent or when the clubs
  agree**, because Q8 sets that boundary for confidentiality and it may not be
  the same boundary.
- **D8** — Warning at agreement is his own framing: «warn at agreement, not at
  failure». Blocking is the only answer that makes an agreed deal mean a
  registrable deal. The cost of warning is a deal that is agreed and may never be
  registrable; the cost of blocking is that the whole of this cast, today, could
  agree to nothing at all. Answer: which, and **what "agreed" is worth if it is
  not registrable** — which is the distinction the point itself is about.
- **D9** — Dated expiry breaks the deadlock and introduces a state nobody chose:
  an offer that failed because a person was on holiday. Manual keeps every
  closure attributable and leaves A11 pending indefinitely with nothing able to
  follow it. Answer: which, and **whether an expired offer reopens the request
  or closes it.**
- **D10** — Atomic is what "one deal" means and it is cruel: عماد الغانم has
  already agreed and his agreement evaporates because two clubs could not settle
  a compensation figure. Independent is kinder and it means the platform holds a
  player agreement attached to no transfer. Answer: which, and **how long a
  surviving leg stands** before it is closed by something.
- **D11** — Inline is the honest reading of a number that will be argued with.
  On demand keeps a list of thirteen candidates readable. Answer: which, and
  **whether the factors are the same four for every need or come from the need's
  own criteria** — because under D5's weighted answer they are not the same four.
- **D12** — **This is a conflict, not a preference, and it is recorded as one.**
  S1's six are locked and were reviewed; Q11's seven are specified and were not
  written with S1 in front of him. Two machines is the reading that breaks
  nothing, and it means a reader sees two state words on one screen and has to
  know which is which. One machine is cleaner and **changes a locked decision**,
  which only a new prototype may do and only a reviewer may authorise. Answer:
  which, and if it is one machine, **which six or seven words survive.**

## Not up for debate — carried, and rendered as given

- **S1, locked 18 سبتمبر 2026.** Two shells; a rail with grouped entries,
  absent-not-disabled; no role switcher; the landing is the work waiting on you
  and carries no number that is not a count of clickable work; badges on two
  entries only from one count; the club is an area with a tab strip; one refusal
  pattern naming what was refused, the rule, the date it changes and the one
  thing to do next; dates in an Arabic sentence use a month name.
- **P2's D5 `mobile=drawer` and D8 `inbox=flat`.** The drawer carries the rail's
  grouped list unchanged; a notification is a record that points at where the
  action lives and is never an action itself. **No consent gate on this
  prototype's screens may be taken from the inbox**, which is a real constraint
  on T2 and is why the consent screens are routes.
- **P5's four**, in the table above.
- **Eligibility is checked before sending.** The refusal is in front of the form
  and the form behind it is inert.
- **No commission anywhere.** The platform is not a party and takes nothing.
  Every value on these screens is a term between two parties.
- **Executing a sell-on is deferred.** T7 defers automated execution of clauses.
  A3's 30% is **captured as structured data and calculated by nobody**, and the
  screen says so rather than implying an engine that does not exist.

## Screens

`p7.js` renders the chrome only, and is `p5.js` with this prototype's switches
and its own `HERE`. The navigation list, the grouping, the two badges and the
absent-not-disabled rule are byte-for-byte S1's, because they are not a
prototype's to vary. The sub-navigation is the club tab strip.

| # | Screen | File | Purpose | Actor | Settles |
| --- | --- | --- | --- | --- | --- |
| 1 | List a player | `index.html` | The listing composer: the deal type or none, the restriction, the extensible policy panel, T4's three types, and the permission granted to ثامر القرني on this listing. The entry screen. | ناصر العمري | **D1**, Q1, Q4, T4 |
| 2 | The approaches list | `inbox.html` | Nine records on two routes, three of them frozen today, one in the out-of-scope tray, and the count of eight with its arithmetic on the screen. | Club, professional, agent | **D1**, **D9**, Q6 |
| 3 | One request | `offer.html` | The container of immutable offers with the line-item value inside them, both consent gates side by side, the expiry, and the state words from whichever D12 answer is selected. | All four parties | **D2**, **D9**, **D12**, Q5, Q11, T2 |
| 4 | The two state machines | `states.html` | Both machines drawn as machines — every state, every transition, what "pending" means, and where a request's word and an offer's word differ. | Anyone reading the record | **D12**, Q11 |
| 5 | One deal | `deal.html` | A15: two legs, three participants, the compensation leg open, the registration window that holds neither, and the signed contract that has not been uploaded. | Club member | **D8**, **D10**, T7, T8 |
| 6 | A direct approach | `direct.html` | A12 read twice — as نادي الصحراء, and as سعد الغامدي, who has no record to open. Plus A8, addressed to a club that is not on the platform and delivered by email. | Club, and the player who is not told | Q8, T3, Q9, the member indicator |
| 7 | Approaching a club | `approach.html` | The symmetric case: ريم المالكي acting for ياسر الجهني, and فيصل الدوسري inside his free window acting for himself. Both T1 outcomes, and the draft that is held. | Professional, agent | **D3**, T1, Q7, Q9 |
| 8 | Who can see what | `visibility.html` | One person's record against three audiences, with the counterparty column filled by an actual live negotiation rather than by a label. | Club member | **D7** |
| 9 | The published-needs board | `board.html` | Six open needs read by a professional and by an agent, with the percentile against each. | Professional, agent, club | **D11** |
| 10 | The club's needs | `needs.html` | A need is a saved market search: the same criteria schema the listing policy uses, on the other surface. | Club member | **D4**, **D5**, Q12 |
| 11 | One need and its candidates | `need.html` | Twelve applications and one club offer — thirteen candidates of two kinds with two downstream paths — the own-club rule, and نايف الشهري at 29 and 74. | Club member | **D4**, **D5**, **D6**, **D11** |

### Why eleven, and why `states.html` is one of them

Every screen either carries a decision or carries a state no other screen can
reach. `states.html` carries no data at all and is in the list anyway, because
D12 is a conflict between a locked decision and a written specification and
**neither of them can be judged from a record that happens to be in one state
today**. A machine is judged as a machine. It is the only screen here that draws
a rule rather than a world, and the repo has no precedent for it; that is
recorded in `findings.md` as a thing to look at rather than hidden.

`direct.html` is one screen showing the same record to two identities, which is
the only honest way to draw T3: the finding is an **absence**, and an absence has
to be next to the presence it is absent from or the reviewer has nothing to
compare.

## Switches carried in the URL

| Parameter | Values | Screens | What it changes |
| --- | --- | --- | --- |
| `locale` | `ar` (default), `en` | all | handled by `shared/proto.js` |
| `theme` | `light` (default), `dark` | all | handled by `shared/proto.js` |
| `state` | see below | all | handled by `shared/proto.js` |
| `restrict` | `tray` (default), `block` | `index.html`, `inbox.html` | **D1** |
| `exchange` | `linked` (default), `valuation` | `offer.html` | **D2** |
| `approval` | `value` (default), `role` | `approach.html` | **D3** |
| `positions` | `tree` (default), `flat` | `needs.html`, `need.html` | **D4** |
| `criteria` | `weighted` (default), `strict` | `needs.html`, `need.html` | **D5** |
| `rank` | `all` (default), `cutoff` | `need.html`, `board.html` | **D6** |
| `visibility` | `disclose` (default), `equal` | `visibility.html` | **D7** |
| `registration` | `warn` (default), `block` | `deal.html` | **D8** |
| `expiry` | `dated` (default), `manual` | `offer.html`, `inbox.html` | **D9** |
| `legs` | `atomic` (default), `independent` | `deal.html` | **D10** |
| `why` | `inline` (default), `ondemand` | `board.html`, `need.html` | **D11** |
| `states` | `two` (default), `one` | `offer.html`, `states.html` | **D12** |
| `mobile` | `drawer` (default), `bar` | all | **Inherited from P2's D5.** Not a decision here. |
| `seat` | `owner` (default), `member` | all | ناصر العمري or عمر الدخيل. Carried; DR1 is عمر's. |
| `role` | `club` (default), `pro`, `agent`, `admin` | all | Who is signed in. **Not a role switcher in the product.** |
| `drawer` | `open` | all | Opens the mobile drawer so a shot of it is reproducible. |

**A default is not an answer.** Where a default matches his stated
recommendation it is marked as such in `findings.md` and nowhere else; the
reviewer's job is to choose, and a switch that opens on one value has not
chosen for him.

## States per screen

Only the states a screen's content can actually reach are built, and where one
of the six is absent the reason is given. This is P2's practice and Raheem
locked it.

| Screen | default | loading | empty | error | partial | no-permission | What the non-obvious ones are |
| --- | --- | --- | --- | --- | --- | --- | --- |
| `index.html` | ✓ | ✓ | | ✓ | ✓ | ✓ | `partial`: the listing is published and the permission on it is granted but not yet acknowledged by ثامر القرني; `error`: the publish failed and the composed policy is still on screen; `no-permission`: نادي واحة الخرج, pending, which lists nothing. **No `empty`** — a composer has no query to return nothing. |
| `inbox.html` | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | `partial`: **the freeze** — three market-route rows frozen today and two direct rows untouched beside them, with the reason on each; `empty`: role-aware, as P5 settled; `no-permission`: a platform administrator, party to nothing |
| `offer.html` | ✓ | ✓ | | ✓ | ✓ | ✓ | `default`: A9 with its two line items; `partial`: **both gates outstanding at once** — A3's owning-club consent and its player gate, which is the screen D12 is read on; `error`: the transition could not be recorded and the typed reply is not lost; `no-permission`: an account that is not a party |
| `states.html` | ✓ | | | | ✓ | | `partial`: **the conflict stated on the screen** — the two vocabularies side by side with the five words that do not correspond marked. **No `loading`, `empty` or `error`** — it draws a rule, and a rule does not fail to load |
| `deal.html` | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | `partial`: **the compensation leg open under the player leg already accepted**, which is D10; `error`: the contract upload was rejected; `empty`: a club that has closed nothing; `no-permission`: a club not party to this deal |
| `direct.html` | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | `empty`: **سعد الغامدي's own view — the approach about him, which for him does not exist**, drawn as a genuinely empty list rather than as a refusal, because a refusal would tell him something is there; `partial`: A8, sent by email to a club that cannot answer in the platform |
| `approach.html` | ✓ | ✓ | | ✓ | ✓ | ✓ | `partial`: **DR1 held for internal approval**, which is D3; `no-permission`: **the eligibility refusal** — عبدالله القحطاني, window 1 يناير 2028, and ثامر القرني refused for a different reason and permitted anyway by PM1 |
| `visibility.html` | ✓ | ✓ | | ✓ | ✓ | ✓ | `partial`: a field the counterparty may see and the public may not, with the live negotiation that grants it named on the row; `no-permission`: a member who may read the setting and not change it |
| `board.html` | ✓ | ✓ | ✓ | ✓ | ✓ | | `partial`: a need published on a position deactivated in the catalogue on 17 سبتمبر 2026, carried from P5; `empty`: no open need matches the filters |
| `needs.html` | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | `partial`: a saved search whose criteria no longer all exist; `no-permission`: the refused route that lands on the board, carried from P5 |
| `need.html` | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | `partial`: **the club offer beside the twelve applications**, two kinds in one list; `empty`: the centre-back need, answered by nobody; `no-permission`: a professional who reached a club's need detail |

## Fixture world

The shared cast in [`../FIXTURES.md`](../FIXTURES.md), including the
**Stage 3** section, which declares everything this prototype renders and was
written in the same commit.

| | |
| --- | --- |
| Today | **18 سبتمبر 2026** — unchanged |
| Signed in | **ناصر العمري** (club), **عمر الدخيل** (the non-owner seat), **فيصل الدوسري** (pro), **ريم المالكي** (agent), **هند الشمري** (admin) |
| The listing | **L1 — ثامر القرني**, انتقال نهائي, restricted, published 15 سبتمبر, **withdrawn today** |
| The permission | **PM1 — ثامر القرني may open negotiations himself**, any club, to 31 ديسمبر 2026 |
| The frozen ones | **A9, A10** — market route | **A11, A12** — direct, untouched |
| The exchange | **A9** — 600,000 ريال + **فهد الرشودي** valued at 900,000 ريال |
| The sell-on | **A3** — 1,200,000 ريال, two instalments, **30% to نادي الصحراء** |
| The player who refused | **مشعل العنزي**, A13, 17 سبتمبر 2026 — the cast's first basketball transfer |
| The two legs | **A15** — عماد الغانم, player leg accepted, **450,000 ريال compensation leg open** |
| The one the player never sees | **A12 — سعد الغامدي** |
| The non-member | **نادي رمال القصيم**, approached by email as **A8** |
| The draft | **DR1 — عمر الدخيل, 3,000,000 ريال**, held |
| Work owed, club | **8**, with the arithmetic on the screen and A10 deliberately outside it |

## Out of scope

- **The shape of an approach.** S1's, locked. Rendered.
- **The refusal pattern.** S1's, locked.
- **Mobile navigation.** P2's D5, carried.
- **Friendlies.** Board item #19 closes them. P5's screen stands.
- **Competition browsing.** Board item #17 is blocked by him and nothing is
  drawn for it.
- **Season history.** Board item #18 is deferred. `season_id` is a storage rule
  with no surface, and inventing one here would contradict the deferral.
- **Automated execution of a sell-on**, contract generation and AI drafting —
  all deferred under T7.
- **The auction layer**, inferred needs and subscriber gap insights — all marked
  ⚪ later. The listing policy is built so none of them is foreclosed, and none
  is drawn.
- **The admin toggle that gates direct approaches per actor type.** Q8 says it
  exists; its editor is a P3 screen and P3 is not superseded here. The refusal
  names the rule and the editor is on the hand-off list.

## Open questions

Surfaced and not answerable by a fixture.

1. **Does the out-of-scope tray count as work the club owes?** Deliberately left
   outside the eight so the count cannot answer it.
2. **When does the counterparty's extra sight begin** — at send, or at
   agreement? Q8 draws the confidentiality boundary at agreement; #15 does not
   say whether visibility uses the same one.
3. **Who owns the position taxonomy** if D4 is answered with the tree — the
   platform's registry, or the club on each need?
4. **What closes a surviving leg** under D10's independent answer? Nothing in
   the response says how long a player agreement attached to no transfer stands.
5. **Is a permission granted per listing, or per listing and per club?** PM1 is
   scoped to «أي نادٍ». The response allows named clubs and the cast holds no
   example, because inventing one would answer question 2 of the four.
6. **Does an expired offer reopen its request or close it?** D9 needs the
   answer and the response does not contain it.

## Not built

- **The permission's revocation in flight.** PM1 is revocable and has not been
  revoked; what happens to a negotiation ثامر القرني opened under a permission
  that is then withdrawn is not drawn, and it is question 5's neighbour.
- **A need answered by a club that is not on the platform.** A8 is a player-side
  approach to a non-member; the club-side equivalent through a need is not.
- **The second and third exchanges.** A9 carries one player. A deal carrying two
  or a chain of three is not drawn and the model must not assume one.
