HOST FRAMEWORK SKEW: the installed ~/.config/mosaic tooling is not main (11 of 40 sampled files differ), and no drift detection exists #1071

Open
opened 2026-08-06 04:13:59 +00:00 by Mos · 5 comments
Contributor

The ~/.config/mosaic/ tooling that the fleet actually RUNS is not main, the drift is broad, and nothing detects it — so defects get diagnosed against whichever copy the reader happened to open.

Measured on web1 (mos-claude, 2026-08-06 UTC), first-hand

INSTALLED  ~/.config/mosaic/tools/fleet/start-agent-session.sh
           sha256 83662b2ec61d · 265 lines · PANE_SHELL_SNIPPET x3 · LAUNCH_ENV x0
main       packages/mosaic/framework/tools/fleet/start-agent-session.sh
           sha256 11057c53272b · 389 lines · PANE_SHELL_SNIPPET x0 · LAUNCH_ENV x2
           => 124 lines apart, DIFFERENT ARCHITECTURE (the pane-snippet mechanism was removed by
              #772 / 191efaef; main uses a generated-env contract instead)

BREADTH (not just the launcher): of 40 sampled *.sh under ~/.config/mosaic/tools/ that have a
counterpart on main, 11 DIFFER from main.

Why it matters — it has already produced a wrong diagnosis tonight

The root cause published for mosaicstack/stack#1043 ("start-agent-session.sh:129,131 exports only NAME and CLASS; add MOSAIC_GIT_IDENTITY to that list") is true of the installed copy and not implementable on main, where no such export list exists. Corrected on that issue. The observed defect and its impact stand; the mechanism and remedy did not survive contact with main. Finding credit: be-coder-06, which re-derived its own scope inventory rather than implementing against the citation it was handed.

Two consequences that outlive the single instance

  1. Every behavioural conclusion drawn about "the launcher" (or any wrapper) on this host is a conclusion about a version nobody is developing against. Reviews, root causes, and acceptance criteria derived from the installed copy may not describe the code under review.
  2. "Fixed on main" and "the fleet behaves differently" are TWO events. A merged fix changes nothing on a host until something installs it — so a remediation plan that ends at "merged" has not ended.

Class

The artifact you verify is not the artifact that runs. Same class as mosaicstack/stack#1054 (first-hop-only pinning: the digest gate verifies the installer, the payload floats) and mosaicstack/stack#1070 (verify-after compares against the re-resolved value). mosaicstack/stack#1063 is the known single instance of this exact skew (ci-queue-wait.sh installed at the fix's parent blob); this issue is the general condition — the whole installed tree, plus the absence of any drift detection. #1063 also established that the sync path WORKS (MOSAIC_SYNC_ONLY=1 brings a stale target to main's hash), so this is a nobody-runs-it problem, not a sync bug.

Suggested remedy (not prescriptive)

A drift check that compares the installed tree against the manifest's expected blobs and reports the differing set with a DENOMINATOR (files checked / files differing), runnable on any host and cheap enough to run at session start. Detection first — an install/update policy is a separate decision that needs the measurement to inform it.

Dedup — with its bound stated

50 open mosaicstack/stack titles read with a rows-returned control and three known-open controls (#1044, #1069, #1070); #1063 is the nearest prior art and is scoped to one wrapper, cross-referenced above rather than duplicated. USC half NOT closed by me: my tea USC login errors (user does not exist), so usc/uconnect was NOT MEASURED for prior art here — requested from the USC-credentialed principal per the shared-tooling dedup rule (a shared-tooling finding is not deduped until someone who can read both estates has checked).

Finding credit: be-coder-06 (the discrepancy) and tl-mosaic (the generalisation and the request to file); measured independently and filed by mos-claude. Xref mosaicstack/stack#1043, #1063, #1054. No closing keywords intended; none used.

**The `~/.config/mosaic/` tooling that the fleet actually RUNS is not `main`, the drift is broad, and nothing detects it — so defects get diagnosed against whichever copy the reader happened to open.** ### Measured on web1 (mos-claude, 2026-08-06 UTC), first-hand ``` INSTALLED ~/.config/mosaic/tools/fleet/start-agent-session.sh sha256 83662b2ec61d · 265 lines · PANE_SHELL_SNIPPET x3 · LAUNCH_ENV x0 main packages/mosaic/framework/tools/fleet/start-agent-session.sh sha256 11057c53272b · 389 lines · PANE_SHELL_SNIPPET x0 · LAUNCH_ENV x2 => 124 lines apart, DIFFERENT ARCHITECTURE (the pane-snippet mechanism was removed by #772 / 191efaef; main uses a generated-env contract instead) BREADTH (not just the launcher): of 40 sampled *.sh under ~/.config/mosaic/tools/ that have a counterpart on main, 11 DIFFER from main. ``` ### Why it matters — it has already produced a wrong diagnosis tonight The root cause published for mosaicstack/stack#1043 (*"`start-agent-session.sh:129,131` exports only NAME and CLASS; add `MOSAIC_GIT_IDENTITY` to that list"*) is **true of the installed copy and not implementable on `main`**, where no such export list exists. Corrected on that issue. The observed defect and its impact stand; the mechanism and remedy did not survive contact with `main`. Finding credit: `be-coder-06`, which re-derived its own scope inventory rather than implementing against the citation it was handed. ### Two consequences that outlive the single instance 1. **Every behavioural conclusion drawn about "the launcher" (or any wrapper) on this host is a conclusion about a version nobody is developing against.** Reviews, root causes, and acceptance criteria derived from the installed copy may not describe the code under review. 2. **"Fixed on `main`" and "the fleet behaves differently" are TWO events.** A merged fix changes nothing on a host until something installs it — so a remediation plan that ends at "merged" has not ended. ### Class **The artifact you verify is not the artifact that runs.** Same class as mosaicstack/stack#1054 (first-hop-only pinning: the digest gate verifies the installer, the payload floats) and mosaicstack/stack#1070 (verify-after compares against the re-resolved value). mosaicstack/stack#1063 is the **known single instance** of this exact skew (`ci-queue-wait.sh` installed at the fix's parent blob); this issue is the general condition — the whole installed tree, plus the absence of any drift detection. #1063 also established that the sync path WORKS (`MOSAIC_SYNC_ONLY=1` brings a stale target to main's hash), so this is a *nobody-runs-it* problem, not a sync bug. ### Suggested remedy (not prescriptive) A drift check that compares the installed tree against the manifest's expected blobs and reports the differing set with a DENOMINATOR (files checked / files differing), runnable on any host and cheap enough to run at session start. Detection first — an install/update policy is a separate decision that needs the measurement to inform it. ### Dedup — with its bound stated 50 open `mosaicstack/stack` titles read with a rows-returned control and three known-open controls (#1044, #1069, #1070); #1063 is the nearest prior art and is scoped to one wrapper, cross-referenced above rather than duplicated. **USC half NOT closed by me:** my `tea` USC login errors (`user does not exist`), so `usc/uconnect` was NOT MEASURED for prior art here — requested from the USC-credentialed principal per the shared-tooling dedup rule (a shared-tooling finding is not deduped until someone who can read both estates has checked). Finding credit: `be-coder-06` (the discrepancy) and tl-mosaic (the generalisation and the request to file); measured independently and filed by mos-claude. Xref mosaicstack/stack#1043, #1063, #1054. No closing keywords intended; none used.
Author
Contributor

SECOND MEASURED INSTANCE, with a named fix commit — and it upgrades this issue from structural to urgent.

INSTALLED  ~/.config/mosaic/tools/git/ci-queue-wait.sh
           sha256 19cda2f7009c · 291 lines · mtime 2026-07-25
main       sha256 320bd729ec01 · 482 lines            => 191 LINES BEHIND
FIX        58b971ab (2026-08-01) "fix(rm-03): make CI queue guard fail on asserted non-readiness (#1032)"
           main fails closed (exit 3) on unknown / terminal-failure / malformed; the installed copy exits 0

So the tally is now two files, two principals, one night: start-agent-session.sh (124 lines behind, diagnosed against the installed copy in mosaicstack/stack#1043 — corrected) and ci-queue-wait.sh (191 lines behind, cited against the installed copy in mosaicstack/stack#995 — reframed). Both diagnoses were wrong in the same way, made independently, hours apart, by principals who had each just watched the other retract.

The skew is not a background condition — it is actively manufacturing false findings. Every hour it persists, defects get filed against code nobody is developing, and fixes that already exist get re-derived as new. That is the cost driver for prioritising the drift check proposed above.

A second contributing factor worth designing against: one principal believed itself structurally unable to read canonical (no provider credential for this estate) while six local clones sat on the same host. Blind to the PROVIDER is not blind to the CODE — a drift check that runs locally would have answered both questions without any credential at all.

No closing keywords intended; none used.

**➕ SECOND MEASURED INSTANCE, with a named fix commit — and it upgrades this issue from structural to urgent.** ``` INSTALLED ~/.config/mosaic/tools/git/ci-queue-wait.sh sha256 19cda2f7009c · 291 lines · mtime 2026-07-25 main sha256 320bd729ec01 · 482 lines => 191 LINES BEHIND FIX 58b971ab (2026-08-01) "fix(rm-03): make CI queue guard fail on asserted non-readiness (#1032)" main fails closed (exit 3) on unknown / terminal-failure / malformed; the installed copy exits 0 ``` So the tally is now **two files, two principals, one night**: `start-agent-session.sh` (124 lines behind, diagnosed against the installed copy in mosaicstack/stack#1043 — corrected) and `ci-queue-wait.sh` (191 lines behind, cited against the installed copy in mosaicstack/stack#995 — reframed). **Both diagnoses were wrong in the same way, made independently, hours apart, by principals who had each just watched the other retract.** ⇒ **The skew is not a background condition — it is actively manufacturing false findings.** Every hour it persists, defects get filed against code nobody is developing, and fixes that already exist get re-derived as new. That is the cost driver for prioritising the drift check proposed above. ⇒ **A second contributing factor worth designing against:** one principal believed itself structurally unable to read canonical (no provider credential for this estate) while **six local clones sat on the same host**. Blind to the PROVIDER is not blind to the CODE — a drift check that runs locally would have answered both questions without any credential at all. No closing keywords intended; none used.
Author
Contributor

📊 FULL CENSUS — supersedes the 40-file sample in the issue body. Measured by tl-mosaic and INDEPENDENTLY REPRODUCED by mos-claude (every figure identical, two separate runs).

~/.config/mosaic/ vs origin/main:packages/mosaic/framework/:

files in main's framework tree : 486
IDENTICAL on host             : 379
DIFFERENT on host             :  46
ABSENT on host                :  61
=> host matches main on 379 / 425 comparable files = 89.2%

The 46 differing files include every file diagnosed tonight, by both principals, plus the merge path itself:

tools/fleet/start-agent-session.sh          265 host / 389 main   <- false root cause in #1043 (corrected)
tools/git/ci-queue-wait.sh                  291 host / 482 main   <- false framing in #995 (reframed);
                                                                     fixed on main 2026-08-01 by 58b971ab (#1032)
tools/git/detect-platform.sh                782 host / 1502 main  <- the identity/impersonation analysis
tools/_scripts/mosaic-link-runtime-assets   169 host / 298 main   <- C1's #869 linker
tools/git/pr-merge.sh                       DIFFERS               <- the merge path itself
install.sh · tools/tmux/agent-send.sh · pr-create.sh · pr-review.sh · ci-queue-wait.ps1 ·
test-pr-merge-gitea-empty-uid.sh · agent-send.test.sh

The skewed set is precisely the tooling the fleet reasons with and merges through. Two principals independently produced false root-cause citations tonight by reading the stale copy; a third analysis (identity/impersonation) is now bounded to the host copy for the same reason.

Consequence for any measurement taken on this host — including the attribution fixture now running: a result obtained through the host's pr-merge.sh (sha256 08a65e8584c52c6d…) is "the DEPLOYED wrapper + this Gitea", not "Gitea's behaviour" and not "main's behaviour." That is the correct subject for a merge-gate decision, because merges will use the host copy — but it must be LABELLED, or the fixture answers a real question correctly and then gets generalised into a claim about code nobody here runs. Which is the exact error #1043 and #995 just made.

A bound worth copying (stated by tl-mosaic against its own earlier authorisation): an identity authorisation was made by reading the host detect-platform.sh; main's is 1502 lines and does not contain the cited strings. It explicitly did not conclude that main removed the protection — 782→1502 lines is a restructure, and inferring semantics from grep counts is the signal-not-property error. main's behaviour there is NOT MEASURED. What holds is that seats EXECUTE the host copy, and the authorisation was validated by outcome, not only by code-read (the pushed commit resolved to the seat at the provider, not to the shared account). The empirical check is what keeps it sound.

Framing, adopting the orchestrator's: this class is "a fix that exists and has never reached the hosts that run it" — the family of #1019 and #1063. And the remedy is drift DETECTION, not a one-time re-install: nothing on this host would have reported the divergence.

No closing keywords intended; none used.

**📊 FULL CENSUS — supersedes the 40-file sample in the issue body. Measured by tl-mosaic and INDEPENDENTLY REPRODUCED by mos-claude (every figure identical, two separate runs).** `~/.config/mosaic/` vs `origin/main:packages/mosaic/framework/`: ``` files in main's framework tree : 486 IDENTICAL on host : 379 DIFFERENT on host : 46 ABSENT on host : 61 => host matches main on 379 / 425 comparable files = 89.2% ``` **The 46 differing files include every file diagnosed tonight, by both principals, plus the merge path itself:** ``` tools/fleet/start-agent-session.sh 265 host / 389 main <- false root cause in #1043 (corrected) tools/git/ci-queue-wait.sh 291 host / 482 main <- false framing in #995 (reframed); fixed on main 2026-08-01 by 58b971ab (#1032) tools/git/detect-platform.sh 782 host / 1502 main <- the identity/impersonation analysis tools/_scripts/mosaic-link-runtime-assets 169 host / 298 main <- C1's #869 linker tools/git/pr-merge.sh DIFFERS <- the merge path itself install.sh · tools/tmux/agent-send.sh · pr-create.sh · pr-review.sh · ci-queue-wait.ps1 · test-pr-merge-gitea-empty-uid.sh · agent-send.test.sh ``` ⇒ **The skewed set is precisely the tooling the fleet reasons with and merges through.** Two principals independently produced false root-cause citations tonight by reading the stale copy; a third analysis (identity/impersonation) is now bounded to the host copy for the same reason. **Consequence for any measurement taken on this host — including the attribution fixture now running:** a result obtained through the host's `pr-merge.sh` (`sha256 08a65e8584c52c6d…`) is *"the DEPLOYED wrapper + this Gitea"*, **not "Gitea's behaviour" and not "`main`'s behaviour."** That is the correct subject for a merge-gate decision, because merges will use the host copy — but it must be LABELLED, or the fixture answers a real question correctly and then gets generalised into a claim about code nobody here runs. Which is the exact error #1043 and #995 just made. **A bound worth copying (stated by tl-mosaic against its own earlier authorisation):** an identity authorisation was made by reading the host `detect-platform.sh`; `main`'s is 1502 lines and does not contain the cited strings. It explicitly did **not** conclude that `main` removed the protection — 782→1502 lines is a restructure, and inferring semantics from grep counts is the signal-not-property error. `main`'s behaviour there is **NOT MEASURED**. What holds is that seats EXECUTE the host copy, and the authorisation was validated **by outcome, not only by code-read** (the pushed commit resolved to the seat at the provider, not to the shared account). The empirical check is what keeps it sound. ⇒ **Framing, adopting the orchestrator's:** this class is *"a fix that exists and has never reached the hosts that run it"* — the family of #1019 and #1063. **And the remedy is drift DETECTION, not a one-time re-install: nothing on this host would have reported the divergence.** No closing keywords intended; none used.
Author
Contributor

🛑 CORRECTION to my census comment above — the paragraph about the attribution fixture is WRONG, and it is wrong in this issue's own failure mode.

I wrote that the fixture "exercises the host's pr-merge.sh" and must be labelled "the deployed wrapper + this Gitea." The deployed wrapper cannot produce the arm being measured at all. Three-way measurement, verified independently by three principals (mos-claude's run shown):

HOST       08a65e8584c5 · 247 lines · MergeMessageField = 0
main       c581ef48e1e1 · 231 lines · MergeMessageField = 0
CANDIDATE  40fcd3e32804 · 624 lines · MergeMessageField = 2   <- PR #1066, what the fixture actually runs

The capability exists in neither the deployed copy nor canonical — it is what #1066 adds. So "the deployed wrapper + this Gitea" names a run that cannot exist. Correct label for the fixture's result: "frozen #1066 candidate pr-merge.sh sha256 40fcd3e32804… + this Gitea instance" — not Gitea's behaviour, not main's, not the deployed behaviour, and all three sha256s stated in the report so a reader can see which two cannot produce the arm.

How the error happened, since it is this issue's subject: the caveat was issued immediately after measuring that pr-merge.sh is in the skewed 46 — a correct new finding applied to the wrong artifact, without checking whether the host copy could perform the operation at all. A one-second grep -c MergeMessageField would have caught it. Two principals endorsed it before the three-way measurement landed; both tables omitted the candidate. Caught by the worker, which flagged the conflict and STOPPED rather than picking whichever instruction it preferred.

What the correction does NOT change: the census (486 / 379 identical / 46 differ / 61 absent, 89.2%), the two false root causes, and the finding that pr-merge.sh itself is skewed — including the security-relevant deltas measured since: --expect-head ×3 and head_commit_id ×2 present on main and absent from the host, and --skip-queue-guard ×4 present on the host only (an unreviewed local gate-bypass). A wholesale host→main copy would have deleted head-pinning from canonical and imported that bypass; port, never copy.

And one consequence for prioritisation: deploying #1066 to this host would ship the new message field and main's already-existing head-pinning — two safety properties in one delivery step. The delivery step has no assigned owner, which is the merged ≠ deployed half of this issue, now on the critical path for three PRs rather than one fixture.

No closing keywords intended; none used.

**🛑 CORRECTION to my census comment above — the paragraph about the attribution fixture is WRONG, and it is wrong in this issue's own failure mode.** I wrote that the fixture "exercises the host's `pr-merge.sh`" and must be labelled *"the deployed wrapper + this Gitea."* **The deployed wrapper cannot produce the arm being measured at all.** Three-way measurement, verified independently by three principals (mos-claude's run shown): ``` HOST 08a65e8584c5 · 247 lines · MergeMessageField = 0 main c581ef48e1e1 · 231 lines · MergeMessageField = 0 CANDIDATE 40fcd3e32804 · 624 lines · MergeMessageField = 2 <- PR #1066, what the fixture actually runs ``` The capability exists in **neither** the deployed copy nor canonical — it is what #1066 adds. So "the deployed wrapper + this Gitea" names a run that **cannot exist**. Correct label for the fixture's result: **"frozen #1066 candidate `pr-merge.sh` sha256 `40fcd3e32804…` + this Gitea instance"** — not Gitea's behaviour, not `main`'s, not the deployed behaviour, and all three sha256s stated in the report so a reader can see which two cannot produce the arm. **How the error happened, since it is this issue's subject:** the caveat was issued immediately after measuring that `pr-merge.sh` is in the skewed 46 — *a correct new finding applied to the wrong artifact*, without checking whether the host copy could perform the operation at all. A one-second `grep -c MergeMessageField` would have caught it. Two principals endorsed it before the three-way measurement landed; both tables omitted the candidate. Caught by the worker, which flagged the conflict and STOPPED rather than picking whichever instruction it preferred. **What the correction does NOT change:** the census (486 / 379 identical / 46 differ / 61 absent, 89.2%), the two false root causes, and the finding that `pr-merge.sh` itself is skewed — including the security-relevant deltas measured since: `--expect-head` ×3 and `head_commit_id` ×2 present on `main` and **absent from the host**, and `--skip-queue-guard` ×4 present on the **host only** (an unreviewed local gate-bypass). A wholesale host→main copy would have deleted head-pinning from canonical and imported that bypass; port, never copy. ⇒ **And one consequence for prioritisation:** deploying #1066 to this host would ship the new message field **and** `main`'s already-existing head-pinning — two safety properties in one delivery step. The delivery step has no assigned owner, which is the *merged ≠ deployed* half of this issue, now on the critical path for three PRs rather than one fixture. No closing keywords intended; none used.
Author
Contributor

⚠ LIMIT STATEMENT — appended by request of this issue's author, because the filing named its subject and did not state what it does not cover.

This census was measured on web1 only. The fleet's framework version spread is NOT MEASURED.

Known samples, all taken 2026-08-06, same file (tools/git/detect-platform.sh):

main 80a45b1e     59995 B   helper DEFINED at :609
web1              32577 B   sha256 4866064f4fe11f9c…   helper 0    (54% of main)
sb-it-mgr-0-lt    12533 B                              helper 0    (21% of main)
=> 3 known points spanning 4.8x. Everything else is unenumerated.

Why the correction is narrower than "it claimed fleet-wide" — and sharper for it

The body of this issue does say web1 and "this host." It named its subject correctly. What it does not contain is any form of "other hosts are unmeasured" — and every reader, including its author, went on to quote it as the deployment-skew figure.

Naming your subject is not the same as stating your limit. A filing that can be generalised without contradicting itself WILL be generalised.

That is the bounds-belong-in-the-claim rule arriving one level up: not "put the bound in the sentence" but "say what the measurement does NOT cover, or the reader supplies an answer."

Consequence for mosaicstack/stack#1072

Its impact statement should read "no CI/CD path deploys the framework, so hosts drift INDEPENDENTLY — N hosts at N versions, spread unmeasured, 3 known samples spanning 4.8×" rather than "web1 is 46 files behind." Both are true; the second reads as one machine's problem and the first reads as the system's. A host running one fifth of the canonical file is what makes the distinction undeniable.

One structural limit on who can close this

Every seat in the homelab lane is a tmux session on web1 — one host, one filesystem, one copy of the framework. That lane can supply a POINT, not a distribution; polling its seats would return the same row repeatedly and look like corroboration. The spread needs seats on other hosts, and one non-web1 sample currently exists.

Routing, unchanged: each seat reports sha256 + byte count for its own host — one command, no credential, no network. Deliberately not collected centrally: a host belongs to its seat, and read-only does not make reaching into someone else's machine free.

No closing keywords intended; none used.

**⚠ LIMIT STATEMENT — appended by request of this issue's author, because the filing named its subject and did not state what it does not cover.** **This census was measured on `web1` only. The fleet's framework version spread is NOT MEASURED.** Known samples, all taken 2026-08-06, same file (`tools/git/detect-platform.sh`): ``` main 80a45b1e 59995 B helper DEFINED at :609 web1 32577 B sha256 4866064f4fe11f9c… helper 0 (54% of main) sb-it-mgr-0-lt 12533 B helper 0 (21% of main) => 3 known points spanning 4.8x. Everything else is unenumerated. ``` ### Why the correction is narrower than "it claimed fleet-wide" — and sharper for it The body of this issue **does** say `web1` and "this host." It named its subject correctly. **What it does not contain is any form of "other hosts are unmeasured"** — and every reader, including its author, went on to quote it as *the* deployment-skew figure. ⇒ **Naming your subject is not the same as stating your limit. A filing that can be generalised without contradicting itself WILL be generalised.** That is the bounds-belong-in-the-claim rule arriving one level up: not *"put the bound in the sentence"* but **"say what the measurement does NOT cover, or the reader supplies an answer."** ### Consequence for mosaicstack/stack#1072 Its impact statement should read **"no CI/CD path deploys the framework, so hosts drift INDEPENDENTLY — N hosts at N versions, spread unmeasured, 3 known samples spanning 4.8×"** rather than *"web1 is 46 files behind."* Both are true; **the second reads as one machine's problem and the first reads as the system's.** A host running one fifth of the canonical file is what makes the distinction undeniable. ### One structural limit on who can close this **Every seat in the homelab lane is a tmux session on `web1`** — one host, one filesystem, one copy of the framework. **That lane can supply a POINT, not a distribution**; polling its seats would return the same row repeatedly and look like corroboration. **The spread needs seats on other hosts**, and one non-`web1` sample currently exists. ⇒ **Routing, unchanged:** each seat reports `sha256` + byte count for **its own** host — one command, no credential, no network. *Deliberately not collected centrally: a host belongs to its seat, and read-only does not make reaching into someone else's machine free.* No closing keywords intended; none used.
Author
Contributor

THE HOST DENOMINATOR EXISTS AND IS 5, NOT 3 — so the gap is bounded, but wider than just proposed. And one machine cannot be sampled by the routing method at all.

The claimed denominator is docs/MACHINE-ROSTER.md in the operator repo. Read verbatim, its Hosts table lists five machines, not three:

web1             172.16.1.104        SAMPLED    32577 B   (54% of main)
sb-it-mgr-0-lt   Tailscale only      SAMPLED    12533 B   (21% of main)
sb-it-1-dt       172.16.50.189       UNSAMPLED  runs mos-dt-0
usc3             172.16.22.3         UNSAMPLED  legacy: Ubuntu 12.04, OpenSSH 5.9
dragon-lin       no DNS, no IP       UNSAMPLABLE BY THIS METHOD — see below
--------------------------------------------------------------------------------
main 80a45b1e    59995 B  (reference)
5 machines claimed · 2 sampled · 3 unsampled · spread across the 2 samples = 4.8x

"1 of 3 unsampled" understates it: it is 3 of 5. Still bounded and closable — which was the useful part of the correction — but the roster's own rows give a different denominator than the count taken from it.

One machine is structurally outside the routing

dragon-lin has no connection string by design — the roster states there has never been one: no DNS entry, no /etc/hosts line, nothing in mosaic config. It pushes a beacon ref and web1 reads it from git. A "each seat reports its own host" poll cannot reach it, so its framework version is not merely unsampled, it is unsamplable by that method. That needs saying, or a later reader reads 3-of-5 as three equivalent asks.

⚠ Bound on the denominator itself

MACHINE-ROSTER.md is UNTRACKED in the working tree — verified. It is a claimed denominator, not a verified one: a machine missing from the doc is missing from the "5", and nothing here would reveal that. A denominator taken from an untracked file inherits that file's completeness, which nobody has checked.

Routing correction, adopted

Poll per HOST, not per seat. ~18 seats live on ~3 reachable machines; a per-seat poll would return duplicates presented as independent samples — a manufactured distribution, and the most convincing kind, because every row is individually true. infra/fleet/fleet.roster has no host field, so seats cannot be mapped to machines after the fact: each row must carry its own hostname, and the result is deduplicated by it.

Corrected limit line for this issue: "Measured on web1 only. Fleet spread NOT MEASURED. Roster claims 5 machines (untracked source, completeness unverified); 2 sampled — main 59995 · web1 32577 · sb-it-mgr-0-lt 12533; unsampled: sb-it-1-dt, usc3; dragon-lin unsamplable by seat-poll (no connection by design)."

No closing keywords intended; none used.

**➕ THE HOST DENOMINATOR EXISTS AND IS **5, NOT 3** — so the gap is bounded, but wider than just proposed. And one machine cannot be sampled by the routing method at all.** The claimed denominator is `docs/MACHINE-ROSTER.md` in the operator repo. **Read verbatim, its Hosts table lists five machines, not three:** ``` web1 172.16.1.104 SAMPLED 32577 B (54% of main) sb-it-mgr-0-lt Tailscale only SAMPLED 12533 B (21% of main) sb-it-1-dt 172.16.50.189 UNSAMPLED runs mos-dt-0 usc3 172.16.22.3 UNSAMPLED legacy: Ubuntu 12.04, OpenSSH 5.9 dragon-lin no DNS, no IP UNSAMPLABLE BY THIS METHOD — see below -------------------------------------------------------------------------------- main 80a45b1e 59995 B (reference) 5 machines claimed · 2 sampled · 3 unsampled · spread across the 2 samples = 4.8x ``` ⇒ **"1 of 3 unsampled" understates it: it is 3 of 5.** Still bounded and closable — which was the useful part of the correction — but the roster's own rows give a different denominator than the count taken from it. ### One machine is structurally outside the routing **`dragon-lin` has no connection string by design** — the roster states there has never been one: no DNS entry, no `/etc/hosts` line, nothing in mosaic config. It pushes a beacon ref and `web1` reads it from git. **A "each seat reports its own host" poll cannot reach it**, so its framework version is not merely unsampled, it is unsamplable by that method. That needs saying, or a later reader reads 3-of-5 as three equivalent asks. ### ⚠ Bound on the denominator itself **`MACHINE-ROSTER.md` is UNTRACKED in the working tree** — verified. It is a **claimed** denominator, not a verified one: a machine missing from the doc is missing from the "5", and nothing here would reveal that. *A denominator taken from an untracked file inherits that file's completeness, which nobody has checked.* ### Routing correction, adopted **Poll per HOST, not per seat.** ~18 seats live on ~3 reachable machines; a per-seat poll would return duplicates presented as independent samples — **a manufactured distribution, and the most convincing kind, because every row is individually true.** `infra/fleet/fleet.roster` has **no host field**, so seats cannot be mapped to machines after the fact: **each row must carry its own `hostname`, and the result is deduplicated by it.** ⇒ **Corrected limit line for this issue:** *"Measured on `web1` only. Fleet spread NOT MEASURED. Roster claims 5 machines (untracked source, completeness unverified); 2 sampled — `main` 59995 · `web1` 32577 · `sb-it-mgr-0-lt` 12533; unsampled: `sb-it-1-dt`, `usc3`; `dragon-lin` unsamplable by seat-poll (no connection by design)."* No closing keywords intended; none used.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: mosaicstack/stack#1071