ARLIResearch
Deep Analysis · ARLI

Index Network funnel by code: where nine thousand findings are lost

Analysis of an open repository: what gates stand between a found match and a human, and what is the limitation of the matching logic itself.

ARLI, Inc. October 19, 2026 Source: indexnetwork/index repository, MIT license, main branch, 343 TypeScript files
Contents
  1. Summary in three phrases
  2. How this was verified
  3. The path of a finding and the gates along this path
  4. Gates in order, with addresses in the code
  5. Three similarity thresholds in one code
  6. An evaluation that means nothing
  7. A synthetic layer that is not in public materials
  8. What they write about themselves in the comments
  9. Where the rest are lost: step-by-step in numbers
  10. What we take, and what we never take
  11. Boundaries of this analysis
  12. How to check everything yourself
  13. What this means for us

01Summary in three phrases

First. Between a finding and a person stand four gates in a row: the community boundary, the reading ceiling, the return ceiling, and the rule "only what the agent opened becomes an opportunity." Each gate cuts silently, without recording a reason.

Second. The similarity threshold in the most prominent path is set to zero. The logic optimizes not to "return only good ones," but to "fill ten spots." A candidate with weak similarity will make it into the top ten if there aren't enough better ones, and a strong one outside the top ten will never make it.

Third. In the code, there is a service that searches for real people on the open web and synthetically inserts them into pairs. And there is a place where a constant hundred is recorded instead of an evaluation, and zero evidence. Therefore, the six percent who made it is not a consequence of limits, but a consequence of the finding arriving without a reason to look at it.

4gates between finding and person
10candidates for search, return ceiling
0similarity threshold in search by query
100evaluation instead of evaluation for a pair chosen by the agent

In one phrase

Their funnel loses findings not because the findings are bad, but because the system has no rule that distinguishes a good finding from a filled spot. All ceilings are before the person, and there is not a single one on the person themselves.

02How this was verified

I took their open repository entirely, looked at all 343 TypeScript files, found three places where the detection and evaluation logic lives: the intent service, the protocol package, and the database adapters. Then I followed the path of one finding from intent creation to the card at the person's and wrote down every step where it could disappear.

Each statement below is tied to a specific file and line, so it can be verified in a minute, rather than taken at face value. Files and commands for re-verification are listed at the end.

The rule of this analysis

Everything named as a rule or a number is taken from their code or their documentation. Where the breakdown by stages is not derived from open data, it is stated directly, and not substituted with a plausible number.

03The path of a finding and the gates along this path

Below is the path of one finding. Red marks indicate places where it might disappear, and none of them inform either a human or an agent that the finding occurred.

Fig. 1. Eight steps, four of them cutting off intentcreated readingceiling 90 thresholdno threshold returnceiling 10 openingagent only negotiationsup to 12 moves personwithout borders step 0: intent is visible only within communities; no community, no search red frame means the place where the finding disappears silently, without recording the reason ceilings stand up to the person. On the person themselves, there are no limits at all: how many cards to show them, the code does not decide at all, therefore the limit is set by their attention, not the system conclusion: six percent of those who reached is not a consequence of restrictions, but their absence where needed

04Gates in order, with addresses in the code

GateRuleWhere
community boundaryintent is searched only within communities to which it is assigned; no communities, search returns emptyintent.service.ts:488
reading ceilingthe system reads a maximum of 90 candidates per searchintent.service.ts:57, 499
similarity thresholdin query search, the threshold is zero, meaning it is not appliedintent.service.ts:500
return ceilingno more than 10 candidates are returned externally; a maximum of 30 can be requestedintent.service.ts:47, 50, 529
duplicate collapsingone intention in multiple communities yields one row, the best hit remainsintent.service.ts:506
discovery ceilingno more than 30 opportunities per call; one's own intention and self-match are skippedintent.service.ts:60, 562, 563, 568
pair validityactive intentions attributed to this network and different people are needed; otherwise, there will be no opportunitynegotiation.rules.ts:48
right of discoveryonly a candidate discovered by an agent becomes an opportunitytheir opportunity section documentation
negotiation limit12 moves maximum, a move no longer than 4000 charactersnegotiation.constants.ts:2
exhaustion of movesat the limit, the status remains "negotiations", there is no refusal, the question is pendingnegotiation.rules.ts:79, 83
expirationonly archiving of intent, check every 15 minutes; capabilities have no timeoutopportunity-expiration.cron.ts:26

Pay attention to the order. First, they cut by affiliation, then by quantity, then by who opened it. None of these places evaluate the quality of the match. Quality selection is completely absent in this chain.

05Three similarity thresholds in one code

The main finding of the analysis. There are three different similarity thresholds in the repository, and they are not consistent with each other.

Fig. 2. Three thresholds and the one that works for a human search by queryconversation adapterdatabase adapter 0.000.300.70 no threshold: everything gets into the top ten if there aren't enough better ones moderate threshold in another path strict threshold in a third path on the card, a person sees one confidence number, but it comes from different paths with different thresholds

The threshold is set by the calling code, and in the most prominent path, query search, it is set to zero. This is not a one-line oversight; it is a consequence of the design: the system rounds up to ten candidates instead of returning only those that passed evaluation.

What this means in practice

A person whose best candidate scores thirty-one hundredths still receives ten cards. A person who has one strong candidate and nine weaker ones also receives ten. There is no difference between these two cases in the interface, because the logic does not distinguish between “there is a match” and “reached the limit.”

06An evaluation that means nothing

Second in importance. When an opportunity is created by a personal agent after the owner manually selected a counterparty, the pair is recorded as follows: the score is one hundred, the evidence list is empty, and in the reason field, it is written in their own text that there is no score at all.

Their own comment on this point: the agent's judgment is which counterparties it chose, so there is nothing to transfer to the pair. The logic is honest. But the result is this: on the card, a person sees confidence from one path as calculated by the model, and from another as a constant one hundred, and it is impossible to distinguish them by the card.

At the same time, their own documentation shows an example card with eighty-seven hundredths confidence. This means the number on the card is read by a person as a quality assessment, although in one of the paths, it is not an assessment at all.

Zero evidence is the most important thing

An opportunity born from an agent's choice comes to a person without a single piece of evidence. An empty list of evidence is a direct quote from the code, not our interpretation. This is where the gap is, which our evidence envelope closes.

07A synthetic layer that is not in public materials

There is a separate service in the repository. It searches for real people on the open web through an external research interface, registers them as participants with intentions and avatars, and introduces them into pairs through a service account. Up to three such counterparties are allowed per intention.

Further, the system works with them as with ordinary participants: they go through negotiations and can be accepted by a person. After acceptance, a letter with the option to refuse is sent to the real person whose profile was found on the web.

This changes the reading of their funnel. Some of the found matches are not matches between living people, but rather substituted counterparties. This is not separately stipulated in the field report, and the extent of this proportion cannot be derived from open data.

Fig. 3. How a synthetic counterparty enters the funnel intentlive person web searchup to three people establishmentas participants pair and negotiationsas ordinary acceptedletter to a person found people are entered as users with intentions, meaning in the funnel they are indistinguishable from live participants their intentions are formulated by the model based on open sources, and not declared by the person themselves conclusion: the numerator of the funnel is not equal to the number of matches between two consenting live people

08What they write about themselves in the comments

Separately, it is worth noting the honesty of their code. Three confessions they left directly in the text:

First. The list of network intentions is truncated at fifty lines, and filtering happens afterward, so in the loaded network, a person might lose their own intentions. This place has a ticket number.

Second. The field "who proposed" is present, but always empty: the value is not filled anywhere.

Third. Capabilities have no timeout. Expiration is only possible through archiving the intention, so a negotiation that has hit its move limit hangs indefinitely.

Why this is a plus for them

Such comments are usually not written. They mean that the team knows its limitations and states them aloud. This makes their code readable, and them a suitable party for a conversation about the standard.

09Where the rest are lost: step-by-step in numbers

Below are their own field run numbers and what happens between stages according to the code. The breakdown of "exactly how many gate number two were cut off" cannot be derived from the open data, because their report only gives the results of the stage, not the reasons for the disappearance of each finding. This is noted directly, instead of a plausible figure.

StageNumberWhat happens between stages according to the code
intentions541visible only within communities, not searched outside the community
pairs found9 688up to 90 candidates are read for search, up to 10 are output, similarity threshold is zero
negotiation sessions11 593launched only for candidates opened by the agent; limit 12 moves
different pairs of people4 126duplicate pairs are collapsed by counterparty key, the record with higher confidence remains
reached a person572there is no limit on the number of cards a person has at all
introductions made147each human decision is a separate action; a repeated decision is rejected

A ratio worth keeping in mind: about six percent of what was found reached a person, and about a quarter of what reached them led to an acquaintance. The first is a consequence of the selection logic. The second is already human, and logic does not affect it.

One line of output

The system perfectly decides whom to find, and does not decide at all to whom among those found it should show itself. All ceilings are on the search side, none on the evaluation side. Hence the six percent.

10What we take, and what we never take

The solution in their codeOur attitudeWhy
list of reasons for refusal in negotiationswe takenine explicit reasons instead of “it didn’t work out”; we have a move limit, but no such list
checking the suitability of a pair before openingwe takeboth intentions are active and attributed to the network; we have an owner check, but no activity check
limit of 12 moveswe takematches ours; for them, the question at the limit remains open, and this is more correct than a refusal
selection without a threshold with topping up to tenwe don't taketurns the finding into a filled spot and deprives a person of a quality attribute
constant instead of confidencewe don't takethe number on the card ceases to mean anything, and the person doesn't know about it
synthetic counterpartieswe don't takemakes the funnel incomparable with the live market and blurs the very concept of consent
empty proofs from the couplewe don't takeit is precisely this gap that our proof envelope closes
Fig. 4. Our stand versus their logic at the same step Their selection Our selection threshold 0, top-up to tenthe evaluation can be a constant there is no proofceilings only on the search side a person knows no boundaries of a finding there is no threshold at all, but there is no completion eitherthere is no assessment if there isn't one an envelope of proof for each conclusionthe boundaries are named in the finding itself a person sees where the conclusion comes from and where the limit is the difference is not in the number of findings, but in the fact that along with the finding comes a reason to believe it or not believe it

11Boundaries of this analysis

The analysis was done based on the code for a single date, main branch, commit from October nineteenth. The code changes, and any rule here should be re-checked if a decision relies on it.

The funnel numbers are taken from their public report; they do not have a single independent reproduction. The share of synthetic counterparties in these numbers cannot be derived from open data, and we do not estimate it.

We did not look at their operational service, only the open code and documentation. A difference between the code and the deployed system is possible, for example, in threshold settings.

What is intentionally not in this analysis

Decomposition of losses by gates in percentages. Their report does not provide data for such a decomposition, and a plausible figure here would be worse than its absence.

12How to check everything yourself

The repository is open under the MIT license, so verification takes minutes. Below are the files containing all the rules from this analysis, and what to look for in each.

FileWhat to look at
services/api/src/services/intent.service.tssearch and discovery ceilings, similarity threshold equal to zero, recording a pair with a score of one hundred and empty evidence
services/api/src/adapters/chat.database.adapter.tsdefault threshold of thirty hundredths, comment about the list truncated at fifty lines and a ticket
services/api/src/adapters/database.adapter.tsdefault threshold of seventy hundredths
packages/protocol/src/protocol/negotiation.rules.tslist of rejection reasons, pair validity rule, behavior at the move limit
packages/protocol/src/protocol/negotiation.constants.tstwelve moves, four thousand characters per move
services/ghost/src/searching for people on the web, adding them as participants, up to three per intent, rejection letter
services/api/src/crons/opportunity-expiration.cron.tsexpiration only upon intent archiving, check every fifteen minutes

13What this means for us

First and foremost: our position is not "we do the same thing better," but "we do what is missing in this chain." They do not have a single rule that distinguishes a good match from a filled space, and they do not have a single piece of evidence attached to a finding.

Second: two of their rules are worth adopting, and this is not borrowing, but a common industry denominator that they have articulated carefully. The list of rejection reasons and the pair validity check.

Third: our evidence envelope ceases to be an embellishment and becomes a direct answer to a specific line in their code where evidence is an empty list.

2rules we adopt: rejection reasons and pair validity
4solutions we don't adopt: threshold, constant, synthetic, empty evidence
1a line in their code that our envelope closes

Next step

Add two found rules to the stand: the list of rejection reasons and the intent activity check. Both are small, both are testable, and after them, we will have a complete set of what their design does, plus what it doesn't.

ARLI membership: the notes from the workshop

One site of yours, measured, with the price for the work in the same document

ARLI, Inc., a Delaware corporation. Questions: hq@arliwork.com.