Sari la conținut

Această pagină nu este încă în limba dumneavoastră. Citiți textul în engleză.

Every claim with its file

Check every claim

Every promise on this site is one you can check yourself: each has a row in one file naming the code that delivers it and the check that guards it. There are 97 rows today.
97
Claims you can check
11018
Automated checks
7
Parts of the product covered
7
Checks on the list itself

Why every promise is tied to code

A promise on a site and the app on your desk drift apart easily: the text is written in one place and the code in another. Without something comparing them you would find the gap only after paying.

So every promise has a row tied to the code that delivers it. There are 97 rows today, spread across seven parts of the product.

  • Support

    The support promise on your plan points at the service your request actually lands in.

  • Fingerprint > Change values

    What you see in the Fingerprint window is what the profile gets: one set of rules for the screen and for the launch.

  • Bulk actions

    The line on your plan points at the screen where you actually perform them.

What one row holds

A row holds three things and nothing else: what is promised, where it is done, and what checks it. So any row you pick takes you to a file rather than to an argument.

The middle column is a path you can open, not a folder and not the name of a part of the app. The right one is a check you can run yourself, and it turns red when the behaviour breaks.

  1. 1

    Read the claim

    Take the row about the proxy covering all of a profile's traffic.

  2. 2

    Open the file

    Open apps/desktop/src/lib/forkEngine.js: the rule for the engine is written there.

  3. 3

    Run the check

    Run apps/desktop/test/proxy-covers-https.js: it watches what actually leaves through the proxy.

Promises quoted word for word

There are 97 promises in the registry today, and every one below is quoted from the file word for word. The path beside each points into the code from the repository root, and every one of them exists.

The spread is deliberate: engine, network, team, money, support, app, languages. You will read the rest of the registry exactly the way you read these.

ClaimImplemented inGuarded by
The fingerprint is substituted inside the engine: the patches sit in Chromium itself and are applied at build timeengine/patches/seriesapps/desktop/test/engine-patches-real.js
Each profile is a separate machine: its own cores, memory, graphics cardpackages/shared/src/index.jspackages/shared/test/выбор-редактора-полон.js
A profile's machine does not change from one launch to the nextpackages/shared/src/index.jspackages/shared/test/поколение-3-заморожено.js
Time zone and language agree with the country of the proxypackages/shared/src/index.jsapps/desktop/test/fingerprint-consistency.js
A profile does not open without its own protectionapps/desktop/src/main/main.jsapps/desktop/test/дыры-движка-закрыты.js
A proxy with a password works, and the password never reaches the command lineapps/desktop/src/lib/proxyAuthBridge.jsapps/desktop/test/proxy-auth-bridge.js
The proxy covers all of the profile's traffic, not only httpsapps/desktop/src/lib/forkEngine.jsapps/desktop/test/proxy-covers-https.js
A profile with a configured but unusable proxy does not openapps/desktop/src/main/main.jsapps/desktop/test/leak-verdict.js
The profile is busy on another machine: there will be no second sessionapps/desktop/src/main/main.jsapps/desktop/test/profile-busy.js
A paid plan is granted only for real moneyapps/server/src/billing/billing.service.tsapps/server/test/paid-access.js
Prices on the storefront are computed from the plan grid, not typed by handapps/web/components/pricing/PricingTable.tsxapps/web/test/страница-возможностей.js
Support: a request has somewhere to landapps/server/src/support/support.service.tsapps/server/test/поддержка.js
The limit on simultaneously open profiles is computed from the machine's memoryapps/desktop/src/lib/engine-config.jsapps/desktop/test/предел-открытых.js
All 22 languages are whole and not mixed upapps/desktop/src/i18n/messages.jsapps/desktop/test/i18n-integrity.js

Why this page cannot be quietly edited

A document nobody executes rots within a month, and this one would rot fastest, because it is where an inconvenient truth gets quietly edited. So the registry has a check of its own.

It makes seven assertions. Four are about the named thing existing, three are harder.

  • You always see the whole list

    At least thirty rows, so a broken read cannot look like a clean registry.

  • Every promise names a live file

    The path runs from the repository root and has to exist on disk.

  • Every promise names a live check

    The same rule for the right-hand column.

  • Every check really runs in the suite

    Its name has to appear in the command that runs that part.

  • The check reaches the file it guards

    The hardest of the seven, and the chapter below is about it.

  • No empty cells anywhere

    And the file is not the check: a promise cannot be its own proof.

  • The most expensive promises are named

    Support, fingerprint, proxy, invitation, paid plan, prices.

The rule

A promise with no row does not ship. A registry with no check is just another document that agrees with itself.

When a check watches the wrong file

File alive, check alive, suite green, and it is exercising something else entirely. Nothing on the screen says so, which makes it the quietest failure there is.

So a check has to reach its file. A mention of the file in a comment does not count as execution.

  • By name

    The source of the check names the path or the file name, and too general a root is refused.

  • By package name

    The shared package is imported as @armanos/shared, and that name counts.

Checks outside the run

A written check that no command calls creates the feeling that a place is covered. That feeling is worse than an empty place, because nobody goes back to look.

So the first thing in the whole suite is a check that executes no product code. It compares the check files on disk against what the commands actually call.

  • A check on disk that no command calls

    Named in the failure, with the area it belongs to.

  • A command that calls a file which does not exist

    A dead path looks exactly like coverage.

  • A glob that matches nothing

    An empty pattern runs zero files and reports green.

  • An area missing from the root command

    Then all green means green for part of the tree.

  • A check written after the summary line

    It runs, it prints, and its result is not counted.

Where the numbers come from

The count of automated checks on this page is measured, not typed. It arrives from a green run of the three real suites.

A red run gives the page nothing: it keeps the previous number rather than a flattering one. Prices and quotas never take this path, because the pricing table reads them from the same package the app uses to decide what you are allowed.

Automated checks
11018
server
1535
desktop app
8454
site
1029
Fingerprint readings
37
Languages in the app and on the site
22

The contents of apps/web/measured.json. Recount with node scripts/сосчитать-проверки.js from apps/web.

Putting the defect back

A green check that cannot go red is worth nothing. The method is fixed and boring: break the behaviour the way it really breaks, run the check, and watch it go red for the right reason.

Reading the red message matters as much as seeing it. Red for the wrong reason proves nothing, and neither does a check whose assertions sit below its own summary line.

  1. 1

    Break it

    Return the defect to the product file, in the way it actually occurs.

  2. 2

    Run the check

    It must go red, and the message must name the real cause.

  3. 3

    Read the message

    Red for the wrong reason proves nothing.

  4. 4

    Restore

    Put the code back and confirm the green again.

What could not be measured

The registry is not only a list of things that work: it carries the two places where measurement failed. WebGPU on Windows is unverified, because the rented machine has no graphics card and Chromium then switches the capability off.

Speech voices on Linux read zero, and zero is the platform norm there. Real Chrome reports none either, while the launch flag that opens the system path gives 13363.

Unverified is not the same as working

A measurement that did not happen counts as a failure, never as a skip.

What is not promised

The registry is also a list of what is not sold. A thing with no row is not a claim, and it is not something to count on.

Four of them are asked about often enough to be named here. Each carries the state it is in today, not the one it is heading for.

  • Card payment

    The checkout is written and stays inert without keys, so a paid plan is granted to you by hand. apps/server/src/billing/stripe.service.ts.

  • Code signing and notarization

    Hardened runtime and entitlements are set, a certificate is not, so your system warns you on the first launch. apps/desktop/electron-builder.yml.

  • Terms and refund policy

    Not written. Required for accepting money, not for running the app.

  • Proxy resale

    An order is a recorded intent: no money is taken from you and no provider is called. apps/server/src/proxy-store/proxy-store.service.ts.

The Proxy providers screen in the app: provider cards with address type, regions and price per gigabyte, each with a request access button, and a line at the top saying no payment is taken here.
The Proxy providers screen shows provider prices and records a request, and takes no money for it.

What this does not do

  • A row is not a guarantee that nothing will break. It says a check exists and runs, not that the check covers every case.
  • The registry judges structure, not truth: whether the named check asserts the right thing, it cannot tell. One class of that is now machine-checked: a claim about a live browser has to name a stand that really launches one. The rest still takes a person who reads that check.
  • The number covers three suites: server, app, site. The shared package, the command line tool and the two developer kits run in the same command and are not counted in it.
  • Nothing here says a site cannot recognise a profile. What is guarded is isolation between profiles and a device that stays the same.
  • The rows are written in Russian in the repository. This page translates them, and the file is the original.
  • WebGPU on Windows is unverified, and it stays unverified until it is measured on a machine with a real graphics card.

How to check

Each line names the claim and the file or stand that holds it up.

The registry is a file in the repository, not a page written for you
docs/РЕЕСТР-ОБЕЩАНИЙ.md
A row with a dead file or a dead stand fails the run
apps/web/test/реестр-обещаний.js
A stand that does not reach the file it names is refused
apps/web/test/реестр-обещаний.js, the check "the guard reaches the file it guards"
No check written in the tree is left out of the run
scripts/все-ли-проверки-в-прогоне.js
Site numbers come only from a green run of the real suites
apps/web/scripts/сосчитать-проверки.js · apps/web/test/proof-strip.js
A check written after a stand's summary line does not count, and is refused
apps/desktop/test/checks-really-run.js

Questions

Can a check be left out of the run on purpose?
Yes, and it has to say so in its own file with at least twenty characters of reason. At the end of the run you see every such file by name, because a silent exception list rots and a printed one gets re-read.
Why are comments stripped before a check is matched?
Because a comment saying see this file is not execution. Without stripping, a hollow check could name the file it never touches and pass.
Why are short file roots refused?
A root like index or api turns up inside unrelated words in almost any source file, so a match on it proves nothing. Six such roots are refused outright.
What happens when a file named by a row moves?
Both columns are resolved from the repository root, so a moved file turns the run red until the row is corrected. That is the point of holding the paths rather than the names.

Take one row and break it yourself

The repository is the argument, not this page. Open the file a row names and run the check that sits beside it.