The graph
The ontology says what can be asked. The graph records who stated what, on which evidence, and what happened between the companies, for buyers, vendors and RFX alike. It has two layers: the claims on the ontology, and the marketplace around them.
Claims: vendors on the ontology
A claim is one product's position on one capability:
| Field | Values |
|---|---|
| status | supported, beta, on_roadmap, not_supported |
| level | L2 when the line is in documents published after the NDA, L3 when it is only in deeper sources (opened with negotiation) |
| source and text | The file and line, and the line itself, quoted |
| origin | Where it comes from (below) |
| review | proposed, confirmed, corrected or rejected, with who decided |
Where a claim comes from
| Origin | How |
|---|---|
vendor statement | A person at the vendor states the capability (vendor_decide_claims with state). Published at once. Nothing read from the sources replaces it. |
model | The language model reads the sources onto the vocabulary. A claim is kept only if it names a capability in the vocabulary and quotes a line that really is in the sources. It replaces what RFX's own rules read from the documents, never a person's statement, a standard answer or the offering profile. |
documents | RFX's own rules: the capability's probe is searched in the published documents, then in all of them. The best line must hold at least 80% of the probe's words, and its wording sets the status (in preview reads as beta, planned as on roadmap). |
standard answer | The vendor's answer to the RFP question the capability names, when that answer names the capability. |
offering | The vendor's offering profile, for capabilities with a catalog field (deployment, regions). |
Review
Every claim read from the sources starts as proposed. A person at the vendor confirms it, corrects its status, or rejects it (vendor_review_claims, then vendor_decide_claims). Buyers see:
- confirmed or corrected: as published, with who confirmed it;
- proposed: shown, with
confirmed: falseand the note Read by RFX from the vendor's sources. Not yet confirmed by the vendor.; - rejected: never. The capability shows as not stated, and comes back for review only if the line behind it changes.
When the sources change: a line that is gone withdraws its claim; a line that now says something else sends a published claim back to proposed, with a note of what was published and by whom; a new document that agrees changes nothing. vendor_read_sources reads again at once; otherwise it happens a few seconds after a change.
Answering a requirement through the graph
For a requirement placed on a capability, and one vendor's product:
- Before the NDA with that vendor, it answers
needs_nda(only public-catalog checks answer at level 1). - If a person at the vendor has answered this requirement for this buyer, that answer.
- The vendor's published claim on the capability: supported is
met, beta ispartial, on roadmap or not supported isunmet, with the line quoted and who confirmed it. A level-3 claim answers only once negotiation is open, andneeds_L3before. - A capability the vendor's person rejected answers
unknown. - Otherwise the requirement is searched in the documents directly, published ones first, and marked not yet confirmed if a proposed claim exists.
{
"id": "R1",
"priority": "must",
"text": "Automatic user provisioning",
"status": "met",
"level": "L2",
"capability": "SCIM provisioning",
"confirmed_by": "J. Doe, Head of Product",
"basis": "L2 docs/security.md:14 \"SCIM 2.0 user provisioning is supported for Okta and Entra ID.\""
}
Ranking
match_vendors compares every product in the need's category. A must counts twice, a should once; met scores 1, partial 0.5, unmet 0. What is not decided yet (needs_nda, needs_L3, unknown, needs_quote, escalated) is left out of the score and listed as open. An unmet must disqualifies. Products are ordered: qualified first, then by score, then by fewest open items.
Placement and search
get_placement(a buyer, after the NDA) shows one product against its whole vocabulary: each capability assupported,beta,on_roadmap,not_supported,behind_ndaornot_stated; how many of themustandcommoncapabilities it covers; and for each regulation, the capabilities that address it.vendor_placementis the vendor's own view: every claim with its review state, the expected capabilities nothing in its sources states, and what buyers asked that the vocabulary lacks.find_vendors_by_capabilityturns it round: every vendor that states one capability, across the marketplace, with its source. The levels apply vendor by vendor.
The marketplace graph
Around the claims, the whole marketplace is a graph of nodes and typed edges: companies, their agents and people, what they offer or need, their connected systems and what those yielded, and RFX's own steps. It is built from the marketplace's state on every save, so it never falls out of step.
company:buyer:acme.example ─has_need─▶ need:… ─requires (must)─▶ cap:scim
▲
company:vendor.example ─offers─▶ asset:… ─has_capability (supported, L2)─┤
│
conn:… (GitHub) ─yields─▶ doc:…/docs/security.md ─evidences───────┘
"Which vendors meet this must, and on what evidence" is a walk across it: from the need, through the capability, to each product's claim and the document behind it.
Nodes
| Kind | Id | What |
|---|---|---|
| company | company:<domain> | A company, buyer, vendor or both. Agents of one proven company share one node. A buyer's node is company:buyer:<domain>: never the vendor's, even on the same domain, so a mailbox at a vendor's domain does not give a buyer agent the vendor's terms, documents or deals. |
| agent | agent:vendor:…, agent:buyer:… | An agent, how it proved its company, and whether RFX hosts it |
| person | person:<company>:<name> | Someone who signed, decided, reviewed or paid |
| asset | asset:<id>, asset:used:<name> | A product or service a vendor offers, or one a buyer already uses |
| category | category:<id> | A market |
| capability | cap:<id> | A node of the ontology |
| term | term:<type> | A kind of contract term: price tiers, discount condition, discount ceiling, term length, payment terms, overage, deployment, data region, uptime SLA, support, proof of concept, liability cap, governing law, exit right, standard NDA |
| need | need:<buyer> | A buyer's requirements in a category |
| connection | conn:<id> | A connected source: GitHub, a compliance platform, an MCP server, uploads |
| document | doc:<vendor>:<path> | A vendor's file, at level 2 or 3 |
| fact | fact:<buyer>:<name> | A fact read from a buyer's own systems, with whom it may be shared |
| nda, access, deal, breakout | nda:…, access:…, deal:…, breakout:… | RFX's own steps: the NDA (opens level 2), negotiation access (level 3), the deal, and a decision sent to a person |
Edges
| From | Relation | To |
|---|---|---|
| company | offers | asset |
| asset, need | in_category | category |
| agent | acts_for | company |
| person | works_for | company |
| company | connects | connection |
| connection | yields | document, fact |
| document | describes | asset |
| asset | has_capability | capability, with status, level, review, origin and source |
| document | evidences | capability, with the line |
| person | reviewed | capability, with the decision |
| asset | offers_term | term, with its value |
| company | has_need, uses | need, asset |
| need | requires | capability, with the priority and the buyer's own words |
| need | accepts | term (commercial requirements) |
| nda | party | company |
| access | requested_by, granted_by | company (buyer, vendor) |
| deal | for_need, with_asset | need, asset |
| person | signed, paid_fee, decided | nda or deal, deal, breakout |
| breakout | about | deal, nda or company |
The ontology adds its own edges between capabilities: part_of (a narrower capability to a broader one), addresses (to a regulation) and expected_must or expected_common (to its category).
Who sees what
- A company sees its own part: its agents and people, its products or needs, its connections and what they yielded, its claims and their evidence, and the steps it takes part in. Agents get it with
get_my_graph; people signed in on the page atGET /human/graph. - The other side of a step appears by name only: nothing is followed out of it.
- A vendor's terms are shown to that vendor only.
- The operator sees the whole graph.