Repository navigation
D2 follow-up: role-singleton observation by host self-report (ssh probe deleted) - #13339
gunbai-bot[bot] wants to merge 13 commits into
Conversation
…n members; the reader binds the report to the host by tailscale whois on the serving peer, refuses missing/stale/foreign reports as unobservable; ssh probe deleted Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…stant (route for the self-report claims) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
Remote claim_batch at head 0ec7a5c. Runner had EstimatedMemory=24GB, with GUNBC_BIND_MEMORY_CGROUP_BYTES=21474836480 set inside the script (buildbuddy invocation 39e9a967-c846-4792-ae13-b049667fd84e). role_singleton_self_report_witness_test: 12/12 PASS (RC=0), including the 5 REDs with controls, both mutants, and the producer and reader inhabitance claims. At cd98056, D2's deployment_risk_witness_test claims ran 37 PASS / 0 FAIL before the process was killed. The fixture-compile claims (sealed caller, marker readback) are OOM-killed at the 20GB bind, both batched and alone. I am running a baseline at D2's head c07cf7e to see whether that predates this PR. |
…MarkerStatField) into the self-report branch; the stat leg is local-only with the closed field Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
Baseline (buildbuddy, EstimatedMemory=24GB, bind 20GiB): |
…ssion/nimble-ant-374
…s a negative instant; the reader's clock is EpochMs too; RED for the negative decode Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ly; every nonlocal roster host is unobservable (self-report has not landed, #13339) with no transport built; the ssh probe source is deleted and the module names no ssh transport Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…self-report source; per-fetch receipt clock (review 76312); EpochMs built without a cast; delete a_valid_ssh_credential_cannot_make_a_nonlocal_roster_host_observable (no transport input remains: superseded by the self-report wrong-host and absent-report REDs) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
Addressed at 3c0e454:
|
|
Remote claim_batch at 3c0e454 (EstimatedMemory=24GB runner, head pinned in script):
|
…it / assess_and_admit_rostered calls drop the removed own: transport argument Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ond_to_millisecond(curl_localhost_max_time) and the age a typed ReportAge (aged by / ahead by a Millisecond), no hand-scaled Int Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
Head 9cdd356 addresses review 76533. The freshness bound is now |
…ssion/nimble-ant-374
…ssion/nimble-ant-374
|
Head 84be6eb merges D2 bfb2ee9 (clean merge). Remote claim_batch at this head: self-report file 14/14 PASS at a 20GiB bind (RC=0). deployment_risk_witness_test at a 22GiB bind: 27 PASS, then OOM-killed (RC=137) at the first compile-probe claim. D2's own head bfb2ee9 shows the identical result (27 PASS, killed at the same claim), so this predates this PR. The probe claims have no remote verdict at 22GiB after the main merge. |
…ssion/nimble-ant-374
…chMs? (null on the wire when the reporter had no clock reading or names no roster host); an unobservable report is adjudicated before freshness so its own cause survives; a read report with no instant refuses; RED for both Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
Head 2cb52ff addresses review 76947. |
…ssion/nimble-ant-374
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
Closed without folding in the v1 closeout bankruptcy (#13641). Stacked on #13217, which is closed. Under the bankruptcy rule, only work that serves the frozen seed emission, v2-native development or live operations, and that is complete, survives. The branch is kept for archaeology; no follow-up obligation is created. — sent from neat-wolf-604 |
Follows #13217 (D2). Implements the operator ruling of 2026-10-05: role-singleton observation across hosts is self-report, and no srv1→srv2 ssh will be granted. Retarget to
mainonce #13217 merges. Grants nothing. Transport option A is pending the operator via merry-tern-58.What changes
Reporter. Each host's dashboard
/instance.jsonnow carriesrole_singletons(role_singleton_self_report_of). The report is built from the same on-host read D2 already does (broker unit, fabric units, and the store marker's path, content, mode, owner and group), at (host, deployment, member) grain, withobserved_at_unix_millis.Reader.
self_report_reading_source_withis the onlyRoleSingletonReadingSource. The applying host fetches every roster host's report, its own included, usingGetBoundedReportingPeer(curl%{remote_ip}). It accepts a report only if all four hold:tailscale whoissays the serving peer is the roster row's tailnet node (extdeps.tailscale.whois,Node.Name). This binds the report to the host's own WireGuard identity, so no credential is minted.observed_atis within the fetch deadline (curl_localhost_max_time) of the reader's clock, in either direction.Anything else is
RoleSingletonHostUnobservableand is never read as absent.ssh probe: deleted, not kept as a fallback. Its only reachable outcome was a refusal this path already produces. Keeping it would leave a second route (the OverTransport readback) that a later grant could silently revive.
assess_and_admitloses itsowntransport parameter. The fixture probes in D2's sealed-caller claims are updated to the new arity so they still refuse for the sealing reason, not an arity error.Producer split.
roadmap_servegainsdashboard_instance_served_json, the only member that has effects.dashboard_instance_jsonstays pure for its existing witnesses.Owed grants (operator; until both land, prod applies refuse before planning)
fabric-storage-controlfor the dashboard service account. Today only the deploy job principal has it. Without it the reporter reports itself unobservable.REDs, each with a control (
dag/test/claim/live_deploy/role_singleton_self_report_witness_test.dag, over supplied whois results and/instance.jsonbodies):assess_and_admit_rostereddecides over, runs the real fetch and refuses with the self-report cause prefix, so the claim checks the route and not only the verdict.Remote claim_batch evidence will follow in a comment.
🤖 Generated with Claude Code