Skip to content

λ-sampling: quarantine durability and what silence means — both deferred to multi-operator #734

Description

@defenwycke

Two policy questions that §6 sampling raises but does not answer. Neither blocks anything today; both block admitting a node we do not own, so they belong with #608.

Recording them with reasoning so they surface at the right moment rather than being rediscovered.

Context: sampling itself is fine

Measured 2026-08-22 over 24h: 32–40 sampling requests per node per day, zero refusals (vm1 40, vm2 34, vm5 32, vm8 34). The full path is built, wired and exercised — request selection, merkle proof verification, per-leaf PoW/GHOST-09/binding checks. Entropy is drawn by the requester and held in memory only, so leaf selection is genuinely unpredictable to the audited node, which is the property §6 rests on.

Sampling is not the multi-operator blocker. The consequence of catching someone is.

One of the three consequence questions is now settled and recorded in SHARE_SHARD.md §8: a proven liar loses the future, not the past, and nothing may make the merge subtractive. These are the other two.


1. Quarantine durability

quarantined is an in-memory BTreeSet. The code states plainly that "a rolling deploy DOES amnesty every quarantine", so a liar simply waits for the next deploy.

Recommendation: keep in-memory for now.

Persisting it means building an operator release path that nobody will exercise while we own all eight nodes — and an untested recovery path is exactly how the 2026-08-12 fleet-wide terminal quarantine became unrecoverable: the mark worked, the release did not, and a false positive had nowhere to go. The current design is the safe end of that trade and was chosen deliberately, not overlooked.

A TTL variant was considered and is the weakest option: it builds the mechanism against an adversary that does not exist yet, and a patient liar just waits out the timer.

Revisit when: the first node we do not own joins. At that point the release path must be built and tested before the mark is made durable.

2. What silence means

Refusal to serve a sample is explicitly not a verdict, and an expired audit is not one either — §6 declines to say, because the response cap makes an honest partial answer legal. So "stop answering once caught" currently costs nothing.

Recommendation: do not set a policy yet — measure first.

Deciding a threshold without data would repeat a trap we avoided this week. H-7's address proof measured 9,681 passes against 181 failures, and 181 of 181 were Unreachable — transient, spread across seven peers, none above ~8% of its own probes. Had non-response been treated as a verdict there, every honest node would have lost its subnet on a link hiccup and the diversity floor #629 fixed would have collapsed. Sample silence has the same shape.

We currently have no measurement of what honest non-response looks like for sampling: how often a legitimate partial answer, a dropped frame or a busy peer produces silence.

Action taken: a report-only counter of unanswered audits per peer, so the threshold is chosen against real data when the mesh opens rather than guessed. Same report-only-first discipline H-7 followed — the probe ran for weeks before its verdict was ever emitted.


Not urgent, and why that is a real claim

Both are inert while every node is ours. The honest description of today's trust model is "we own all eight nodes", which is already the stated v1 position.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions