Mesh policy verification: grants and policies hold on every path #173
Closed
opened 2026-10-11 19:21:15 +00:00 by kayg
·
147 comments
No Branch/Tag specified
main
j470b-server-mesh-rejoin
mesh-compat-382
j444b-d381-key-wins-flood
j461b-macos-utun-reader-thread
j475b-remove-host-motion
fix-reconnect-new-link
j481-d380
dev
j479-mesh-soak
fix/j476-host-facts
j475-motion-pill-split
j470-mac-node-join
root-upgrade-d376
j474-review-merge
latency-targets-120hz
nightly-suite-shards
gotatun-pin-j469
macos-utun-reader-thread
fix-flood-echo-stall
wip/j416
motion-fast-ease-out
mesh-addhost-j259
takeover-close-terminals-d368
kbd-instant-followups
fix-trust-key-double-click
nightly-suite-partial-report
appwin-icons-j207
rusqlite-slice1
swipe-content-first-d374
mesh-mtu-381
addhost-instant-open
glass-contrast-d365-mock
glass-contrast-d365
signout-followups-442
fix-startup-toast-red
research-gotatun-matrix-j317
themes-sync-j304
fix-load-flakes
fix-nix-zig-patch
fix-compute01-browser-baseline
ratchet-size-baseline-419
predict-auto-d130
revoke-coverage-d367
nightly-suite-queue-timeout
nightly-browser-suite
fix-rustsec-2026-0459
fonts-ioskeley-obel
log-retention-d375
fix-kbd-no-anim-427
fix-dev-red-specs-2
takeover-proof-305-j205
wip/j410-server-pump
ui-consistency-d372
fix-osc52-clipboard
libghostty-vt-1.0
forget-retired-host-d369
j404-merge-426
fix-setup-lock-race
fix-touch-select-426
revoke-access-report-ui
fix-predictive-echo-specs
fix-selinux-agent-exec
wip/j395-checkpoint2
wip/j395
j391-review-scratch
ui-consistency-j195-deferred-rebased
fix-rustc-paths-421
decisions-wording-341
fix-install-suite-red
fix-dev-rtt-specs
fix-pending-removal-align
fix-privileged-skip
fix-install-suite-404
review-j368
mesh-dns-j254
revoke-access-report-d356b
revoke-privilege-round5
fix-removal-confirm
review-j360
gotatun-rotation-367
deps-refresh-340
review-j354
review-J351
review-j350
addhost-takeover-d359
revoke-report-items-347
revoke-end-sessions-d362
review-j348
size-mesh-ssh-346
size-trim-337
revoke-access-diff-d356
j259-pre-rebase-b06c5a6
j305-ended-at-start-spec
addhost-sudo-consent
fix-layout-real-specs-411
fix-shell-open-411
fix-console-hosts-373
fix-shell-exit
fuzz-host-name-353
fix-host-details-410
macos-filter-j197
research-gotatun-tricks
revoke-p3-j216l
stale-state-pill
revoke-followups-j216k
revoke-progress-j216e
backup/macos01-20261106/lume/j197
backup/macos01-20261106/lume/appwin-icons-j207-stash0
backup/macos01-20261106/claude/stash-0
backup/macos01-20261106/claude/stash-1
backup/macos01-20261106/claude/J80-macos-s1
backup/macos01-20261106/claude/J80
backup/macos01-20261106/claude/J80-slice1-20261102
backup/macos01-20261106/claude/J16b-appwin-on-dev
backup/macos01-20261106/claude/appwin-launch-idle-146
backup/macos01-20261106/claude/J80-s1-run
wip/j259
trust-285-p3c
runtime-lock-j216f
mesh-ssh-p3-j175
tun-proof-p3b
trust-285-p3
terminal-polish-j271
tun-proof-p3
ssh-install-flakes-j216i
fuzz-fixes-j264
trust-285-a
trust-285-b
restart-oversized-fixture-j198
backup/macos01-20261106/lume/appwin-icons-j207
restart-bound-j216h
up-preflight-p3-j198
backup/macos01-20261106/lume/j251
up-preflight-j198
wip/up-preflight-j198-j245-p2
wip/up-preflight-j198-j245-p1
agent-fsync-offloop-j196
wip/up-preflight-j198-j245
settings-offscreen-j231
wip/up-preflight-j198-j226-inspection
wip/j103f
themes-j206
wip/up-preflight-j198-j226
flakes-j216c
backup/macos01-20261106/claude/j197
flakes-j216b
backup/macos01-20261106/claude/j197-red
wip/up-preflight-j198-review
flakes-j216
backup/macos01-20261106/claude/appwin-icons-j207
engineering-j208b
appwin-mock-j209
toast-stack-j165
engineering-j208
decisions-d351
decisions-d350
decisions-d349
appearance-presets-mock-j129
decisions-d348
docs-audit-spec
doc-coverage-baseline-raise
decisions-d347
decisions-d346b
decisions-d346
j88h-profile
ui-consistency-j195-deferred
ui-consistency-j195
engineering-practices-j194
preferred-login-ui-j166
signin-pools-263-j174
macos-node-265-s1
decisions-d345
decisions-d344
proxy-cgroup-j164
verify-quick-fuzz-329
proxy-start-io-j168
timing-flakes-j163
up-263-s1
mcp-events-j147
verify-quick-fuzz-j158
proxy-p3-j159
agent-resource-j157-detect
wip/j103d-final
remote-cancel-hang-j155
proxy-traefik-281-j62d
j149-verify-quick
proxy-traefik-281-j62b
j150-drop-unnamed
wip/j79d-red-r4
wip/j103d-d332
rootless-toast-j142
wip/j103d-head
wip/j103d
j125c-mcp
macos-build-j136
backup/macos01-20261106/claude/j136
wip/j79d-red-cli
wip/j79d-red-server
j121-link-liveness
j118c-tracer-failures
wip/j79c-head
release-desktop-j131
j124c-signed-macos
wip/j79c-red-p3
wip/j79c-red-p23
wip/j79c-red-p22
merge-j128-check
perf-deferred-j128
sidebar-toggle-260
j127-shortcut-changed-dot
j125-mcp
j118-tracer-failures
j126-account-summary
settings-sections-mock-j92
j120-pinch-lock
sidebar-292
backup/macos01-20261106/claude/j120
taste-2026-11-03
row-actions-242-215
backup/macos01-20261106/claude/stash-0-untracked
backup/macos01-20261106/claude/J80-265-s1-run
backup/macos01-20261106/claude/J80-macos-s1-20261102
j112-canvas-commands
ui-no-overshoot-scroll
fix-recovery-restart
backup/macos01-20261106/claude/stash-1-untracked
taste-2026-11-02
size-baseline-ratchet
machine-cards-structure-j108
j109-boot-copy-mockups
fix-dev-red
wip/up-263-s1
j95b-settings-rows
proxy-traefik-281
j95-option-rows
docs-human-j91
docs-keys-palette
fix-flood-1013-270-j38d
mesh-ssh-s1
mesh-ssh-s0
addhost-d291-tunnel
test-stability-load
mesh-relay-220
repro-296
shim-thp-off-24
mesh-pins-258-v2
mesh-dns
signin-d311-merged
docs-pages
ui-size-283
fix-ui-batch-specs
wip/j12b-edge-update
gate-on-arm
fix-rename-sync-293
trust-285-j60b
fix-focus-ring-clip
integ-ui-1101
edge-update-v2
signin-d311
taste-2026-11-01
layout-per-tab-250
ui-approved-splitopt-224
ui-approved-splitopt-224-on-dev
icon-text-centre-282
ui-approved-189-212-216
research-reverse-proxy
transfer-budget-320
review-mesh-pins-258-r2
sidebar-pill-259
review-mesh-relay-220
wip/j12-edge-update-v2
nix-package
status-crash-loop-237
fix-dev-test-failures
fix-fixture-socket-path
wip/mesh-relay-220-pre-dev-advance-rebase
fix-canvas-side-clip
research-head-to-head
frosted-real-256
review-mesh-pins-258
wip/mesh-relay-220-pre-final-rebase
review-layout-per-tab-250-r2
broad-suite-triage
nix-devshell
review-status-crash-loop-237-r3
wip/nix-devshell-pre-p3
taste-frosted-real
wip/code-serve-demo-2026-10-30
wip/code-serve-glass-2026-10-30
wip/code-serve-clusters-2026-10-30
wip/code-merge-release94-dev-2026-10-30
wip/rproxy-delta-scratch-2026-10-30
wip/stale-note-257-staged-2026-10-30
wip/d241-size-staged-2026-10-30
review-broad-suite-207
wip/mesh-pins-258-pre-split
wip/mesh-relay-220-pre-rebase
mesh-measure-220
plan-211-update
review-edge-autoupdate-r3
perf24-reconnect
review-stale-note-r2
release-prod-live
d241-shell-marker
review-mesh-pins-server-258
review-revocation-r3
review-setup-token-r2
review-sync-journal-r3
wip/review-mesh-pins-258-prune-review-1995fee46
frosted-scroll-256
sync-journal-r3
revocation-per-account-wip
review-tokio-asyncfd-0386
review-sync-p3s
wip/stash-8by64-stash0-2026-10-30
mesh-drag-r2
setup-token-data-wip
release-9-4
auth-busy-1013
mesh-view-overlap
sync-p3s
review-auth-busy-wake
review-readd-r8-wip
mesh-drag-bounds
audit-auth-93
app-windows-stream-start
review-authority-cap-r3
app-windows-r7-measure
readd-minimal-r6
readd-minimal-r5
app-windows-r7-soak
readd-minimal-r4
app-windows-r7
app-windows-r6
readd-minimal-r3
readd-minimal-r2
readd-minimal
merge-release8-dev
review-busy-page-liveness-r2
review-busy-page-liveness
mesh-view-trim
review-authority-read-retry-r2
review-remove-uninstall-r2
release-retry-reattach
release-retry
review-remove-uninstall
review-authority-read-retry
app-windows-ship
mesh-autoswitch-p2
mesh-ssh
mesh-relay
mesh-macos-node
screen-and-control
session-labels
review-real-logins-r5
review-real-logins-r4
review-real-logins-r3
shim-memory-r2
review-real-logins-r2
shim-memory
shadow-addhost-instant
shadow-real-logins
shadow-same-session-flood
shadow-prod-perf-fix
hosts-from-server
app-windows-real
app-windows-transport
release-prod-6w
mesh-policy-verify
quiet-close-toast
dev-merge-r4
review-mesh-agent-transport
review-app-windows-transport
settings-roundtrip
review-release-pipeline-r4
mesh-agent-transport
ended-strip-fix
review-audit-ca-update-d244
settings-rows
phone-width
signout-clear
fix-restart-tests
dev-merge-rp
signer-hardening
review-audit-ca-update
terminal-fidelity
review-audit-ca-update-wip
mesh-integrate
review-mesh-agent-transport-515d3712
review-mesh-dataplane-feec1988
mesh-dataplane
signout
research-canvas-node
wip/review-renderer-cost
wip/review-terminal-fidelity
padlock-glyph
review-release-pipeline-2e95b689
phone-polish
sidebar-polish
inbox-generic
review-mesh-dataplane-378d4055
prod-batch
ui-inbox
ui-ca-unlock
ui-machine-sections
review-mesh-dataplane-a5f744fb
tls-session-prod
session-bounds-prod
fix-dead-session
session-bounds
tls-session
palette-polish
shortcuts-d222
research-appmeta
phone-gutter
ui-centre-button
wip/ui-centre-button
wip/tls-session
review-addhost-breakit
ui-platform
renderer-cost
remote-agents
mesh-api
ssh-bootstrap
prod-hotfix2
prod-fixes
review-remote-agents
review-mesh-dataplane
session-life
research-browser
review-mesh-api
research-capture
review-mesh-api-round3
review-mesh-api-round1
gate-stability
review-gate-stability
review-relay-direct
review-mesh-api-findings
proto-sessions
font-picker
proto-addhost
proto-windows
mesh-core
latency-gate
research-bsd
research-discovery
keytray-mods
mock-core
ui-tweaks
fix-motion-sel
fix-motion
integrate2
fix-robust
t-web
t-server
vt-ghostty
fix-snap-echo
t-web-auth
review-vt2
t-agent
lane-protocol
lane-shim
lane-auth
s1-base
s1-contracts
s1-workspace
No results found.
No labels
launch-qa
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set
Reference
kayg/infraternal#173
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Owner night order 2026-10-11: once the mesh data plane is merged, verify that network policy and grants hold on every path (and find any path that bypasses them), with failing tests first, then fixes. Runs on
mesh-integrateafter the merge (#129).Started #173 on mesh-policy-verify, base
378b97da41(origin/mesh-integrate). Reading #129 history and R1–R6 evidence before extending real-kernel coverage. Disposable user/network namespaces only; both backends and address families. Contract retains established flows after grant narrowing; no finite revocation bound is stated. Relay/subnet/exit paths are not implemented in this slice; will record coverage limits explicitly. No host network changes or deployment; push only mesh-policy-verify.P1 MPV-1 confirmed at base
378b97da, crates/plugins/mesh/src/store.rs:84–117. Test unbound_enrollment_public_key_is_not_host_authority (real migrated SQLite) FAIL: claimed_node=3 intended_node=3 rotated_node=3 outbound_policy=Ports(Udp 5540), 0.04 s. A different authenticated host quotes the public key of an unbound enrollment, inherits its node identity/grants, then rotates to its own key. Public keys are not host authority. Red output retained in job scratch/enrollment-red.log.Additive contract proposal before repair: mesh.node.enroll gains optional host_id, a canonical UUID of an existing unrevoked authenticated remote host. Global mesh.manage_nodes authorizes the binding and clears that host removal tombstone in the enrollment transaction. Legacy key-only enrollment remains unbound inventory and cannot authorize automatic attachment; installation refuses such claims. Existing bound hosts keep their node id/address on key rotation. Rejected a new proof-of-possession crypto protocol or silently inheriting another enrollment. No new schema/engine; reuse dataplane_host and remote_hosts. Tests first, then separate API/store commits.
Other phase-one results: nft packet suite 102/102 PASS, including both families/fragments/ports/spoofed sources/translated ingress/output/transit/removal. Two P2 candidates confirmed by namespace regressions: conflicting equal-version snapshot and changed local node identity; four red tests retained for fix-forward as requested. No established-flow finite cutoff claimed: existing contract explicitly retains them.
Orchestrator: attempt 1 was stopped by the Codex content filter at 00:39 after phase one. Evidence saved as WIP 797b17e4 on mesh-policy-verify (pushed). Phase-one findings: MPV-1 P1 unbound enrollment key lets another authenticated host inherit a node identity and its grants; MPV-2/3 P2 snapshot equal-version replacement / local identity replacement (coordinator-trusted input). 102 packet checks pass on the preferred backend. Attempt 2 launched (Sol medium) to repair MPV-1 then MPV-2/3. Owner question recorded: finite cutoff for established flows after grant removal (frozen contract preserves them).
Continuation started on mesh-policy-verify, base
378b97da41, prior head 797b17e4. Read #173 and parent #129 history; retained regressions24f27282and57a74b06. Splitting WIP evidence before MPV-1 explicit host-binding repair, then MPV-2/3 and both-backend packet checks. Job-specific instruction authorizes pushing this branch only. Established-flow finite cutoff remains an owner question: frozen contract preserves established flows; no behavior change. Local namespaces and CPUWeight=10000 only; raw output retained in files.WIP 797b17e4 split into
884744d9(phase-one evidence) and413e2cec(packet harness). Both retained campaigns: 102 PASS, 0 FAIL; Python AST parse PASS. Pushed with a lease on the exact superseded WIP after the requested soft reset; no other branch changed. All-feature/all-target mesh Clippy PASS (51.58 s); ordinary mesh tests rebuilding. Added explicit-binding regressions before implementation. Retained evidence documents D164/D166/D216/D235 coverage limits.Explicit-binding contract committed/pushed
7d0b47d8; regressionsffdd3b2d: migrated SQLite 1 PASS/2 FAIL before repair. Split-snapshot regressions38860bf1: 2 FAIL before repair, both real firewall backends; identical split replay PASS before conflicting contents are accepted as invalid state. Fmt and all-feature/all-target mesh Clippy PASS. Before-repair 1000-peer pair apply: nft 976245 us (load 48.79/36.27/33.73), nf_tables 2382909 us (load 57.53/38.82/34.61). Local infraternal-dev, debug kernel fixture, one live pair plus 999 synthetic public peers/node. Raw logs in job scratch; final evidence will retain them.MPV-1 repair committed/pushed: API
63ebeaa0, coordinator fixture174b707d, attachment and regressions at head 1a80f522. Attachment selects only authenticated host binding; public enrollment key is refused and cannot clear removal. Explicit globally authorized enrollment binds an existing unrevoked remote host atomically. Original MPV-1 now PASS and is enabled in ordinary gates. All-feature mesh tests: 31 PASS, 0 FAIL; namespace/measurement tests remain separately ignored. Fmt and all-feature/all-target Clippy PASS. MPV-2 complete identical replay repair is under real-kernel checks next. D164/D166/D235; no new cryptographic protocol or dependency.MPV-2 repair 03444afd and MPV-3 repair e0ca5489 committed/pushed. Complete identical replay passes; conflicting contents at an accepted version and changed accepted local identity are refused before installed policy changes. Both firewall backends: all 6 exact real-kernel snapshot regressions PASS. Phase-two independent OUTPUT expansion 89df46e9 committed/pushed: 170/170 packet checks PASS per backend, including IPv4/IPv6 protocol/edge ports/fragments/ICMP, receiving enforcement, translated ingress, identity, transit and removal. Production-schema enrollment-to-kernel proof now also passes 5/5 per backend: unbound identity refused, inherited service not permitted in both families, explicit owner grant reaches the same live service. Original-state kernel replay and final gates/measurements remain; no finite established-flow cutoff claim.
Atomic history correction: place the existing store re-enrollment fixture update before the attachment repair, so each repair commit has compatible ordinary tests. Final tree is identical. New fixture commit
1f9c628279. Superseded SHA mapping: {'9797907d': 'b4b4547b36', '1a80f522': '008ecbe653', '03444afd': '8f82588923', 'e0ca5489': 'c700ef0174', '89df46e9': '6f3dbd0802'}. No other branch changed.MPV-1 production-schema-to-kernel replay confirmed on original
24f27282source: 2 PASS/3 FAIL per backend (unbound identity not refused and service not restricted in IPv4/IPv6). Repaired source: 5 PASS/0 FAIL per backend; explicit owner grant reaches the same live service. Raw before/after output retained in job scratch. Fixture/harness extensions are atomic commits on mesh-policy-verify; final evidence will retain reproduction commands. Full fast gate is building CLI compile-out/static prerequisites; no final completion claim.Diagnostic finding: after flushing owned filter chains, unchanged configuration replay uses the intended fast path and does not restore them. A rule-count assertion reproduces invalid later policy-on RTT labels on both backends (2 FAIL); initial 1000-peer apply timings remain valid. Harness repair restores saved namespace-owned rules directly before each policy-on sample and retains the assertion. No production enforcement change proposed. Repaired nft diagnostic: 6/6 before/after runs PASS; median pair apply 864812 us before, 785252 us after (-9.2%). nf_tables runs continue; one 101-ping sample was incomplete under shared load, retained and being repeated without changing assertions. Both node lifecycle rule counts and actual packet proofs remain distinct from measurement claims.
Milestone native restart failures reproduced in isolation as PermissionDenied: cached native executable mode 0775 (build umask), incompatible with the existing protected replacement check. Correcting only owned job-target executable modes resolves the isolated regression; use umask 022 for further builds. No source permission check or timeout change. Rerun full gate with documented base procedure: serial tests, CARGO_BUILD_JOBS=4, short job-root state directory. Native gate qualification: dev opt-level 1 only for infraternal-agent/server/shim; dependencies and release profiles unchanged. Exact config retained with evidence. Original full gate stopped because two additional restart requests remained waiting after invalid executable refusal. No #118 waiver claimed.
Policy repairs and typed SDK committed/pushed, current head
2dfa12fe77. Strict typed client regression failed before host_id support; now compiler and Mesh client tests PASS. Counted 1000-peer grant replacement (48 per-node timings each candidate/backend): nft median 287296 -> 284921 us; nf_tables 971826.5 -> 915199.5 us. Actual kernel counts [1000,1000] each workload. Cold full-install samples and two incomplete ping samples remain in evidence; no cold-start speed claim. Full gate rerun exposed only an immediate fixture socket-path failure: this job name makes the long state-root exceed AF_UNIX length. Same exact immutable agent_daemon executable PASS with dedicated short job state root ~/.cache/codex-scratch/mpv-173 (24 restart boundaries). No test threshold or source change; final full gate will use that root. Native qualification is documented, release profile/size limits unchanged.Evidence committed/pushed
b40044865c: docs/verification/mesh-policy-verify retains the original failures, 350 passing packet/control checks, 32 substantive namespace regressions, counted 1000-peer timing distributions, incomplete samples, setup failures, author checklist and reproduction. x86 static build 21318864 bytes vs unchanged 16404816 ceiling, delta +3584 from base; ARM build progressing. Explicit frontend gate PASS: 157 tracer/shared tests, 37 protocol tests, strict compile/build/transfer. Final scripts/verify fast now runs on this exact head using corrected umask, dedicated short state root and explicit native qualification. No release/profile/size-budget change; no deployment or issue closure.Finished mesh-policy-verify at
78ac63c13b; every commit pushed on this branch. MPV-1/2/3 repaired: explicit authenticated host binding, identical complete accepted-version replay only, accepted local identity retained. Typed client exposes binding. Regressions precede repairs; original snapshot red logs regenerated at24f27282and labeled accurately. No new crypto protocol, engine, schema, deployment or issue closure.Evidence: docs/verification/mesh-policy-verify/README.md and subdirectories. Both backends: 170/170 packet checks and 5/5 migrated enrollment-to-kernel checks (350 total); 33 substantive namespace cases including shipping 1000-peer shutdown PASS. Tracer/shared tests 157 PASS, protocol tests 37 PASS, strict compilation/production build/transfer PASS. Author checklist complete; independent review remains with orchestrator.
1000 actual kernel peers/node, one live pair, 48 grant-replacement timings/candidate/backend: nft median 287296 -> 284921 us/node; nf_tables 971826.5 -> 915199.5 us/node. No median policy-replacement regression. Machine/profile/load/full distributions retained. Cold-install variation and incomplete ping samples retained without cold-start/tail claims.
Final exact-head scripts/verify fast summary verbatim (full raw output is retained in gates/final-head-fast.log; complete repaired-code output is committed in gates/verify-fast-repaired-code.log):
Native qualification: job-local dev opt-level 1 only for infraternal-agent/server/shim, dependencies/release profiles unchanged; umask 022, serial tests, short private state root. Original setup failures retained; no trust check, timeout, RSS or size threshold weakened; no #118 waiver. Static ELF/PT_INTERP absent: x86_64 21318864 / 16404816 bytes, aarch64 18879528 / 13817816 bytes. Known static-size owner question remains; gate unchanged.
Owner question retained: should the frozen contract add a finite established-flow cutoff after grant removal? Existing established-flow retention is unchanged; no finite bound claimed. Absent relay/subnet/exit/login paths remain explicit coverage limits.
Independent verification started on review-mesh-policy-verify at target
78ac63c13b; merge base with dev8e7467c07c. Read #173 history and parent #129 evidence. Will verify repaired enrollment/snapshots and both packet backends in disposable namespaces, retaining failing tests on this review branch. No implementation changes, push, deployment or external host use. Established-flow retention follows the frozen contract.Independent review MPVR-1 (P2), committed
21e68dd92don review-mesh-policy-verify, no push. Authorized re-enrollment updates the migrated coordinator (old node 2 -> new node 3) and Store.attach succeeds, but real Node::chunk refuses its snapshot with InvalidData and retains node 2. Both supported firewall backends reproduce: nft 0.67 s; nf_tables 1.52 s. Tests in crates/plugins/mesh/tests/review_authorized_reenrollment.rs, both exact ignored namespace tests; the existing worker regression uses a permissive channel mock. Location node.rs:281 / node_coordination.rs:79. No unauthorized access demonstrated; fix forward without weakening the local identity fence. Gate and packet verification continue.Independent review MPVR-2 (P1), failing test committed
b5807adb0aon review-mesh-policy-verify; no push. A fresh Mesh Store compiler retains a durably revoked remote host public key and its UDP 5540 grant. Test revoked_host_is_not_retained_in_compiled_peer_policy (production migrated SQLite, rebuilt Store) FAIL 1.72 s: node=3 key_retained=true service_permitted=true revision_before=4 revision_after=4. Location crates/plugins/mesh/src/store.rs:274: peer inventory ignores remote-host revocation. remote_authority.rs commit_revocation and remote_removal.rs:225 persist that ledger tombstone without Mesh removal/publication; control worker retirement leaves last-known kernel policy installed. No packet-delivery or HTTP ceremony claim from this database/compiler test alone. A production revocation-entry-point companion is prepared for the server artifacts. D134/D166: a removed host must not keep new Mesh service access when uninstall cannot be confirmed. Current review status HOLD (P1 present); full target gate and benchmark verification continue.MPVR-2 P1 confirmed through the production entry point, committed
84105d0626on review-mesh-policy-verify (no push). Test revoked_remote_host_is_withdrawn_from_mesh_peer_policy, crates/infraternal-server/tests/review_mesh_host_removal.rs: EnrollmentStore::revoke succeeds, remote_hosts tombstone is durable, but target Mesh config retains node 3/key/UDP 5540 grant; revision 4 -> 4. FAIL 0.08 s against server/Mesh artifacts from the target gate. remote.host.remove uses this same commit_revocation finalizer. The earlier fresh-compiler regression also rules out an old cache as the cause. Same P1 finding, not an additional count; HOLD remains. Gate rerun and counted policy timings remain.Independent review MPVR-3 (P2), committed
f7e38f6b61on review-mesh-policy-verify, no push. Both firewall backends adopt and remove unrelated state when its full marker comment is operator.reference.infraternal.mesh.v1: adopted=true retained=false. Exact real-kernel namespace tests nft_marker_substring_is_not_table_ownership FAIL 0.07 s; nf_tables_marker_substring_is_not_chain_ownership FAIL 0.22 s, in crates/plugins/mesh/tests/review_firewall_marker.rs. Locations firewall.rs:104 / iptables.rs:152 use substring ownership checks. No unprivileged marker-write or remote exploit claim; this is an ownership/data-safety finding. Counts now P0=0 P1=1 P2=2 P3=0; HOLD remains.Finished independent review of target
78ac63c13bagainst merge base8e7467c07c.Verdict: merge after fixes — HOLD (P1 present). P0=0, P1=1, P2=2, P3=0. No implementation fixes, push, deployment or external benchmark host.
MPVR-2 P1: durable host removal/revocation retains the Mesh public key and UDP 5540 grant, revision 4→4. Fresh compiler and production EnrollmentStore::revoke both fail; normal Cargo server reproduction FAIL 0.14 s. Commits
b5807adband84105d06. MPVR-1 P2: authorized re-enrollment succeeds in inventory but the live node refuses its new identity (2→3, retained2); both backends fail, commit21e68dd9. MPVR-3 P2: a different complete marker containing the ownership text is adopted and unrelated firewall state is removed (adopted=true retained=false); both backends fail, commitf7e38f6b. Six failing tests re-confirmed from normal Cargo artifacts; strict touched-test Clippy and fmt pass. No unprivileged marker-write or HTTP ceremony/packet capture claim from the authority tests.Independent evidence: 350/350 packet/control checks, 33 existing substantive real-kernel cases, protocol 37/37 and strict compilation PASS. Shipping 1000-peer down 734829 us (<1s), snapshot 317690 us, endpoint 18085 us; RSS11280384B/node ×1000=11280384000B projected across nodes; idle0/0ticks over10s windows. Sanitizer netlink fuzz 619416 executions/31s/no crash. Current VM 12 CPUs; no1000 live traffic-pair claim.
Immutable 1000-peer policy measurements,48 timings/candidate/backend/order: forward nft287706.5→302050us (+4.99%), nf_tables882651→950616.5 (+7.70%); reverse nft231693→232075.5 (+0.17%), nf_tables833733→815344 (-2.21%). All kernel counts[1000,1000]. Retain both orders/load records; no code regression/improvement claim from these variable shared-host timings.
Latency remains unwaived FAIL: isolated native PTY baseline p99 343.03ms vs334ms; same-session flood489.39ms, growth146.36ms vs16.67ms. No same-window pre-data-plane comparison, so no #173 regression attribution or added severity count. Auth browser4 scenariosPASS; focused production terminal browser case fails before timing at returning-sign-in readiness. Broad 567-test UI portion was stopped; no full latency-profile pass claim.
Review evidence head
fd09472930on local review-mesh-policy-verify (not pushed, as instructed). Durable report and complete raw logs: docs/verification/mesh-policy-verify-review/README.md and adjacent files; external review findings.md appended. Owned scratch builds/exported source are being removed. Issue remains open.Final complete target-source scripts/verify fast summary verbatim (full output fast-final.log):
Recorded native qualification only: dev opt-level1 for infraternal-agent/server/shim; dependencies/release unchanged, umask022, serial tests, short private state root, TRACER_TEST_PORT4473. Source matched the target throughout the final run; reviewer files were restored afterward. x86 static/stripped, no PT_INTERP:21318864B vs16404816B; +3584B over integration base, known D205 size failure. ARM not independently rebuilt; no threshold change or #118 waiver. Earlier latency-selftest failures and reviewer-introduced missing-file Clippy setup error remain separately preserved; the full clean rerun passes every non-size row.
Cleanup complete: owned scratch targets, exported baseline source, fixtures, state and temporary wrapper removed. review-mesh-policy-verify worktree clean at
fd09472930. All durable evidence is committed; no push or deployment. Verdict HOLD, P0=0 P1=1 P2=2 P3=0.Round 3 started on mesh-policy-verify, base/head
78ac63c13b. Read #173 and parent #129 history and independent HOLD reportfd094729. Merge origin/dev first, retain all six review assertions, repair durable revocation/publication, authenticated identity rotation and exact firewall ownership in atomic commits. Both packet backends, 1000-peer apply and interleaved base 378b97da/head latency measurements planned. Brief authorizes branch pushes and perf VM 10.69.69.208 only; no deployment.Round 3 started on mesh-policy-verify, base/head
78ac63c13b. Read #173 and parent #129 history and independent HOLD reportfd094729. Merge origin/dev first, retain all six review assertions, repair durable revocation/publication, authenticated identity rotation and exact firewall ownership in atomic commits. Both packet backends, 1000-peer apply and interleaved base 378b97da/head latency measurements planned. Brief authorizes branch pushes and perf VM 10.69.69.208 only; no deployment.Root causes confirmed: remote_authority.rs commits a remote_hosts tombstone without retiring mesh_nodes or publishing Mesh revision; store.rs loads every retained member. firewall.rs:104 and iptables.rs:152 accept ownership marker substrings. node.rs rejects every changed node identity, including an owner-authorized replacement.
Additive repair approach (D134/D166/D198): a migrated SQLite revocation trigger retires Mesh keys, node grants/tag membership and advances revision in the same host transaction, including historical tombstones. Generic plugin authority-change notification after commit wakes the existing event-driven coordinator; no polling worker. Identity rotation will carry the coordinator-approved local public-key binding in full snapshots, require a newer revision and a matching enabled local key, and preserve refusal of unbound identity replacements. Firewall adoption checks structured exact table comments and exact marker rules, not arbitrary contained text. No library/engine change.
Merged origin/dev
cc329750as1ab264e0; imported all six review tests in2c91a478,3ae39ff5,b4d7b1cdand69c38e2f, assertions unchanged. Every commit pushed on mesh-policy-verify. Added transactional schema regression9c3ef09a: before repair nodes/grants/revision=(1,1,0). Migration repair8d55c6danow gives (0,0,1); rollback restores node/grant/tombstone, repeated revocation does not advance revision (4 checks PASS). Retires direct node grants and tag membership, persists removal fence and reconciles historical tombstones in the same migration. Evidence: evidence/mesh-policy-round3/check-revocation.py and schema-red/schema-green logs. Post-commit publication and real-kernel acceptance checks are in progress; no completion claim.Continuation started on mesh-policy-verify at 668dd15fff7adcfaf7dda09255fabe102cc23061; durable repair
8d55c6daretained. Read #173 and parent #129 history. Reviewing and splitting the prior WIP; then real-kernel acceptance, both packet backends, 1000-peer timing and authorized perf VM comparisons. Raw logs stay in scratch/evidence. No deployment.Contract step committed/pushed
0624077009. Reviewed WIP immutable mesh artifacts: retained acceptance/identity checks 11 PASS, 0 FAIL; ordinary mesh unit tests PASS with job target root. New recovery regression node::rotation_tests::nft_restart_fences_retained_replacement_address FAIL before repair (exit 101): a retained replacement host address lacked ingress fencing before reconciliation. Evidence in scratch restart-fence-red.log; source crates/plugins/mesh/src/node_rotation_tests.rs. Preparing typed owned-interface address inventory and fencing before recovery. Canonical-host spelling regression PASS on the current API; retained as coverage, no additional defect.Completed generic authority-change API at
e242d84036. Optional plugin callback adds no idle work and keeps core independent of Mesh. Fmt, all-feature/all-target plugin API Clippy and plugin API tests PASS. Pushed mesh-policy-verify. Server module gates in progress.Completed runtime-notice at
f7f2728213. Add generic publication to enabled plugins without retaining disabled workers. Reject core mesh-specific branching and polling. Gates: 3 PASS, 0 FAIL. Pushed mesh-policy-verify. Raw gate logs retained in job scratch.Completed node-ownership at
07f332f290. Retire a partially started node worker set and its channel before returning an attachment error. Reject retained orphan registrations. Gates: 3 PASS, 0 FAIL. Pushed mesh-policy-verify. Raw gate logs retained in job scratch.Source review found an upgrade compatibility boundary at crates/plugins/mesh/src/node.rs accepted-version equality: durable legacy snapshots omit local_key, while the new compiler supplies the enabled key at the same unchanged revision. Preparing both-backend real-kernel regressions before repair. Additive contract proposal: an authenticated complete snapshot may add only a previously absent binding matching the enabled kernel key, with every prior field identical; save this metadata without kernel mutation. Changed prior fields, node identity at the same revision, wrong keys and already-bound conflicts remain refused. This does not alter packet policy or D166 control-loss retention.
Completed authority-publication at
478bb1cc30. Share a weak runtime binding across authority clones and publish only after durable retirement commits. Keep finalization in an owned task across caller cancellation. Reject a second authority scope or periodic refresh. Gates: 4 PASS, 0 FAIL. Pushed mesh-policy-verify. Raw gate logs retained in job scratch.Completed runtime-binding at
b142819b18. Reuse the migrated enrollment store from remote setup and bind its clones to the actual loaded plugin runtime. Reject notification through an unrelated store. Gates: 3 PASS, 0 FAIL. Pushed mesh-policy-verify. Raw gate logs retained in job scratch.Completed publication-regression at
5a509c41e3. Live publication assertion fails before the Mesh callback; strict module checks pass and the expected failure is retained. Gates: 3 PASS, 0 FAIL. Pushed mesh-policy-verify. Raw gate logs retained in job scratch.Completed mesh-notice at
a97d08eac5. Invalidate the existing event-driven coordinator after committed authority changes. Reject polling and core special cases. Gates: 4 PASS, 0 FAIL. Pushed mesh-policy-verify. Raw gate logs retained in job scratch.Completed exact-ownership at
1680a50887. Both exact retained ownership assertions pass; different complete markers are left alone. Gates: 5 PASS, 0 FAIL. Pushed mesh-policy-verify. Raw gate logs retained in job scratch.Completed local-key-types at
4ca61a00df. Add an optional public local-key binding to configurations and every chunk. Populate it from durable coordinator membership. Legacy absent fields remain readable; reject a separate identity protocol. Gates: 3 PASS, 0 FAIL. Pushed mesh-policy-verify. Raw gate logs retained in job scratch.Completed compatibility-aliases at
e6adb91f2a. Extend the existing atomic per-family policy renderer with local aliases. Keep current and proposed addresses protected during authenticated replacement; reject a separate firewall engine. Gates: 3 PASS, 0 FAIL. Pushed mesh-policy-verify. Raw gate logs retained in job scratch.Completed preferred-aliases at
3e0de69cee. Carry alias protection through preferred atomic policy batches and rollback. Reuse the established filter backend and exact ownership checks rather than new rules outside the component. Gates: 3 PASS, 0 FAIL. Pushed mesh-policy-verify. Raw gate logs retained in job scratch.Completed owned-addresses at
d4ba9c0749. Share typed local host-address inventory between reconciliation and restart fencing. Retire old owned /32 and /128 aliases while preserving kernel link-local addresses; reject flushing unrelated host interfaces. Gates: 3 PASS, 0 FAIL. Pushed mesh-policy-verify. Raw gate logs retained in job scratch.Completed authenticated-replacement at
9155a40d7f. Require a full newer snapshot bound to the enabled local kernel key before changing accepted node identity. Reuse transactional apply and ingress alias fencing. Refuse unbound, mismatched and delta replacements. Gates: 5 PASS, 0 FAIL. Pushed mesh-policy-verify. Raw gate logs retained in job scratch.Completed recovery-regressions at
ab7e085acc. Both real-kernel recovery assertions fail before repair; expected failure logs retained. Ordinary tests and strict module checks pass. Gates: 4 PASS, 0 FAIL. Pushed mesh-policy-verify. Raw gate logs retained in job scratch.Completed recovery-fence at
ffb369a51c. The recorded real-kernel regression fails before repair. On recovery, fence every typed retained host address on the owned interface before reconciliation or peer changes. Reject relying on the older accepted snapshot alone. Gates: 4 PASS, 0 FAIL. Pushed mesh-policy-verify. Raw gate logs retained in job scratch.Completed legacy-regressions at
fbd6e56d0e. Exercise unchanged legacy snapshots before authenticated replacement and restart recovery. Both backends fail before repair; reject coverage that begins only with a newly bound snapshot. Gates: 4 PASS, 0 FAIL. Pushed mesh-policy-verify. Raw gate logs retained in job scratch.Completed legacy-binding at
ad648b1095. Permit the coordinator to add only an enabled-key binding to an otherwise identical complete legacy snapshot. Persist metadata without kernel mutation. Changed node identity, prior fields, mismatched keys and bound conflicts remain refused. Gates: 5 PASS, 0 FAIL. Pushed mesh-policy-verify. Raw gate logs retained in job scratch.Completed canonical-coverage at
3aa65678d8. Canonical spelling coverage passes; no additional production defect is claimed. Gates: 3 PASS, 0 FAIL. Pushed mesh-policy-verify. Raw gate logs retained in job scratch.Completed retirement-fixture at
a3d057a003. Production retirement entry-point regression passes; the public-frame fixture builds and is lint-clean. Gates: 4 PASS, 0 FAIL. Pushed mesh-policy-verify. Raw gate logs retained in job scratch.Completed retirement-proof at
a45d82d6bc. Both local backends pass with 1000 actual installed peers per live node and two real receiving peers; timing and packet evidence retained. Gates: 3 PASS, 0 FAIL. Pushed mesh-policy-verify. Raw gate logs retained in job scratch.Delayed retirement calibration failed before timing: new third-peer underlay samples min/mean/max 150.160/200.251/300.407 ms (nft) and 150.155/200.249/300.435 ms (compatibility). Neighbor discovery adds a round trip to the first packet. Warmup repair
9ab22b1e49retains that sample separately before the unchanged RTT assertion. Syntax/fmt pass; delayed rerun in progress. Final refreshed local retirement passes with [1000,1000,1000] actual peers before and [999,999] after: request-to-last-confirmed-peer 1174761.639 us nft, 1790073.983 us compatibility under shared load. Source final packet campaigns pass both backends. Original calibration/setup failures retained.Evidence committed/pushed at
84133448e3: docs/verification/mesh-policy-verify/round3/. Both packet frontends 170/170 and enrollment controls 5/5 each (350 total); all 42 namespace cases have passing final runs. Shipping release 1000-peer down 504090 us (<1000000). Local apply 192 node samples/frontend: nft median269362us, compatibility933708us; actual counts[1000,1000], shared load53-55 and own builds overlap, no quiet-tail/regression claim. Calibrated 150ms retirement two live receivers/1000 peers each: nft337653-495956us, compatibility618407-765217us. Real RTT and arrival logs retained.Unwaived native latency comparison, base378b97da vs head, base/head/head/base at0/150/300ms, 100samples/scenario on locked perf VM: 0ms4/4PASS; delayed8/8FAIL same-session growth16.67ms on both candidates. PTY echo p99 base/head:0ms .69-.77/.49-.72ms;150ms133.41-135.98/140.16-142.01ms;300ms323.14-324.48/324.66-326.16ms. Same-session150ms151.85-167.32/179.98-206.17ms;300ms383.50-422.54/400.12-416.42ms. Head150ms cohorts are higher; whole-integration comparison does not isolate policy-repair cause. No budget waiver or broad no-regression/browser pass. Final branch-head fast gate in progress; no completion claim.
Completed evidence steps:
bb513a9erecords the final size finding;ef64e191retains the complete fast output under docs/verification/mesh-policy-verify/round3/gates/final-fast-84133448.log. No code or budgets changed. docs diff --check passed. Fast source/evidence head84133448: x86_64 static 21740144 bytes > unchanged 16404816 ceiling; all other rows PASS. The exact final documentation head is being rerun now.+---------------------------+--------------+
| Rust gate | Result |
+---------------------------+--------------+
| fmt | PASS |
| VT native fmt | PASS |
| CLI plugin compile-out | PASS |
| clippy | PASS |
| test | PASS |
| cargo-deny | PASS |
| static builds | FAIL (1) |
+---------------------------+--------------+
Finished round 3 continuation at
ef64e191fd; pushed mesh-policy-verify, clean worktree. Retirement, authorized identity replacement and exact owned-rule repairs are committed atomically; reviewer checklist and evidence: docs/verification/mesh-policy-verify/round3/. Packet campaign: 170/170 each backend; enrollment-to-kernel: 5/5 each; 42 real-kernel cases pass. Local last-receiver retirement: 1174761.639 us / 1790073.983 us. Calibrated 150 ms RTT: 337652.806–495955.591 us preferred, 618407.042–765216.672 us compatibility. 1000-peer apply median: 269362 us / 933708 us (debug fixture, shared-host load qualified).Verification remains partially failing: delayed native same-session latency exceeds unchanged budgets on both base
378b97daand head; 150 ms head cohorts are higher, with no policy-only causal claim. Final-head fast exits 1 solely for the unchanged static size ceiling: 21740144 bytes > 16404816. No budget waiver, ARM-static claim, deployment or issue closure. Complete preceding same-source fast log is committed at gates/final-fast-84133448.log; exact final-head table follows verbatim.Started round 4 on mesh-policy-verify; prior head
ef64e191fd, merged origin/dev atbf01905f62. Read #173 and parent #129 history. D242/D164/D216: replace established-flow retention in contracts/mesh-dataplane.md with immediate refusal of connection state no longer permitted; allowed flows remain untouched. Tests first, both frontends, IPv4/IPv6, exact connection-state cleanup plus reply validation against current network access to prevent loose TCP state recreation. No unrelated state flush. Performance only on explicitly authorized perf VM, shared lock, 10/1000 peers and 0/150 ms RTT. Raw dumps stay in files. No deployment or issue closure.D242 before-repair finding at
023aee89: real-kernel persistent connection checks, nft outgoing PASS=54 FAIL=32. Retired TCP/UDP continues after rule removal and default tightening; peer retirement refuses packets but leaves stale connection state. Permitted same-peer state and underlay controls pass. Harness: scripts/mesh-access-state-proof.py; raw state and results retained in evidence/mesh-access-round4/red-nft-output/. Initial setup errors are retained separately, not counted as product findings. Contract change023aee89pushed; exact tuple removal follows final installation only.Integration finding after required origin/dev merge: two migrations numbered 0022 (production terminal_exit_snapshot_index and lane mesh_host_revocation). Three node_coordination migrated SQLite tests fail with UNIQUE constraint failed: _sqlx_migrations.version, both parallel and serial runs. Evidence: evidence/mesh-access-round4/netlink-parallel-setup-failure.log and migration-before.log. origin/dev owns 0022_terminal_exit_snapshot_index.sql; lane mesh retirement migration has never landed on dev. Renumber that unmerged migration to 0023 without changing SQL/checksum. Reject altering the deployed migration or suppressing migration validation. D242 tests remain 54 PASS/32 FAIL before repair on both tested frontends.
Completed integration migration repair
5160967b(0023, unchanged SQL), streamed/checked kernel tupleseeb23971, and exact state retirement helperbdaa38559c. Fmt and strict all-feature/all-target mesh Clippy PASS; ordinary library tests 19 PASS/0 FAIL, 10 namespace cases separately ignored. Initial migration errors retained; no test threshold changed. Retirement uses owned local endpoint plus initiating service, full tuple/zone/ID deletion, and skips dumps when reach only expands. Source and gate logs: evidence/mesh-access-round4/. All commits pushed. nft wiring and real persistent flow checks next.Completed both frontend repairs, head
3fa6eb0cfe, all commits pushed. Persistent flows: nft input/output 172 PASS/0 FAIL, compatibility input/output 172 PASS/0 FAIL (344 total); red was 54 PASS/32 FAIL per tested frontend direction. TCP/UDP, IPv4/IPv6, rule removal, default tightening and peer retirement; permitted same-peer state IDs and unrelated underlay state remain unchanged. Loose TCP recreation is refused by initiating-tuple checks. Cleanup runs only after accepted rules, never on the temporary fence. Fmt, strict mesh Clippy and 20 ordinary library tests PASS. Evidence: evidence/mesh-access-round4/{nft,compat}-{input,output}/. Coordinator and scale/RTT measurements next, exclusively on the authorized perf VM.Independent review confirmed a rollback state-ordering issue at
3fa6eb0c: blocking mesh-public..new causes save failure after retirement. Both frontends delete four IPv4/IPv6 TCP/UDP entries before restoring old rules. Sockets echo afterward, so no demonstrated outage; original state IDs are lost. Scratch review reproduction will become retained regressions. Contract clarification before repair: pre-commit failures restore old rules and connection state; after final rules and public journal commit, cleanup failures keep the new rules installed and retry exact retirement before acknowledgment. Restart replays durable intent. No new journal schema, engine or worker. Reject restoring permissions after irreversible state removal.Locked perf VM first campaign: 40 PASS/0 FAIL, including 24 production change proofs and 16 apply cohorts (base/head/head/base, 48 rounds). Actual kernel peers 10/1000 per node, two live receiving nodes; not 1000 live workers. VM apply medians us: 10 nft 59597 -> 60404; compatibility 399161.5 -> 395588.5; 1000 nft 96130 -> 98250; compatibility 401948.5 -> 406220.5. Small increases remain, no no-regression claim. Evidence retained as pre-journal-order. Access-only updates unnecessarily rebuild a temporary firewall despite unchanged peer/route state. Optimize after existing route validation and actual key-inventory reconciliation; retain the full fence for peer changes. Journal-order regressions now 8 PASS/0 FAIL (red 0 PASS/8 FAIL); original state IDs survive failed save. Final artifact will be measured again in balanced VM cohorts.
Recovery finding: saved restrictive access refused 100/100 baseline UDP probes on each backend. Node::restore temporarily allowed 296 matching replies on nft and 2,291 on iptables-nft across 10 recovery attempts because the temporary fence accepted all established state. Read-only review evidence is retained under evidence/mesh-access-round4. Adding a recovery-window regression and committed-tuple validation; no global state reset. D242.
Completed recovery repair: failing regression
f76dd997(0/10 on both backends), repaira707640f(10/10 on both). Temporary rules validate accepted initiating tuples for normal replacement and saved intent for recovery; compatibility rollback retains that view and the address guard union. Mesh fmt, clippy and 37 tests pass; read-only follow-up review found no remaining defect. One perf probe failure was its UDP reply receiving expected PermissionError after restrictive installation, not an apply failure; harness correction and final-artifact campaign follow. D242.Completed contract follow-up
475cc8c0and probe correction7fff0c54. Final repaired functional checks: 344/344 initiating-tuple/state assertions, 20/20 recovery attempts, 8/8 failed-journal state-preservation assertions. Both backends pass. The final release artifact is packaged with unchanged executable-segment hash verification; final measurements are queued behind the shared perf-VM lock. Full fast milestone is still running, with Rust workspace tests completed and static builds underway.Final VM campaign: 23 change cases and all 16 balanced apply cohorts pass. PeerRetirement-10-0-compat probe exited when replying to a packet received before retirement: OSError ENOKEY (126) after the peer key was removed. Raw evidence: evidence/mesh-access-round4/final/results-final-fixed/PeerRetirement-10-0-compat.log. Preserve that arrival and tolerate only EPERM/ENOKEY on the reply, then rerun the failed case against the unchanged final node artifact. No runtime code change or timing waiver.
Full fast milestone on final runtime code: fmt, native fmt, CLI compile-out, clippy, workspace tests and cargo-deny pass. Static size is 21,918,864 bytes vs the unchanged 16,404,816-byte ceiling; ARM static and TypeScript stages do not run after this failure. This is a D243 integration blocker; no ceiling change. Building the pre-round baseline for comparison.
+---------------------------+--------------+
| Rust gate | Result |
+---------------------------+--------------+
| fmt | PASS |
| VT native fmt | PASS |
| CLI plugin compile-out | PASS |
| clippy | PASS |
| test | PASS |
| cargo-deny | PASS |
| static builds | FAIL (1) |
+---------------------------+--------------+
Final unchanged-node-artifact VM evidence: all 24 change cases pass after the exact EPERM/ENOKEY echo correction, plus all 16 balanced apply cohorts. 96 per-node samples per candidate/configuration. Apply medians (baseline → final):
Finding: 1,000-peer default tightening at 150 ms RTT is 6,369.69 ms (nft), 6,399.34 ms (compatibility) coordinator request → last receiver final apply. The update delivers 34 chunks/node on the existing delivery/ACK path; final kernel applies are 36.51–57.95 ms (nft), 154.58–199.21 ms (compatibility). All traffic checks pass. Evidence: evidence/mesh-access-round4/performance.md, performance-summary.json, default-tightening-publication.json. Machine infraternal-perf-test, kernel 6.12.69+deb13-amd64, 4 CPUs; lock and CPU-weight scope recorded. Three live nodes, 10/1,000 actual kernel peers/node; not 1,000 live workers.
Evidence committed and pushed at
8473bd8b: final performance table/raw samples, exact state/ID assertions, failing and repaired recovery tests, artifact hashes and author checklist. All 24 VM change cases and 16 apply cohorts have passing evidence; apply medians improve 34.3–49.2%. The D243 static-size blocker remains explicit. Final branch-head fast gate is running, with no relaxed thresholds.The updated direct-path stream proof passes 2/2 on the authorized VM (both backends), against final node code
a707640f. Evidence will be included with the final gate record. Baseline static-size compilation is still running. The first branch-head fast retry stopped at its RTT setup self-test before Rust checks under host load; its output is retained, no threshold changed. Waiting for own baseline build to finish before retrying.Static comparison complete: baseline
023aee89is 21,880,624 bytes, final runtimea707640fis 21,918,864 bytes, delta +38,240 bytes (0.175%). Both exceed the unchanged 16,404,816-byte D243 ceiling. Evidence: evidence/mesh-access-round4/static-size-comparison.json and static-baseline-build.log. Integration remains blocked by the size gate; the owner/orchestrator's D243 reduction work or an explicitly measured owner exception is needed. No gate change in this lane. Final head gate retry retains the original limits.Final head fast setup: shared-host RTT self-test failed three times before any Rust checks; raw attempts retained. To follow the owner timing-only-on-perf-VM rule, the exact latency_proxy.py self-test --samples 3 is now routed to the authorized locked VM under CPUWeight=10000. All other Python calls and functional Rust checks stay on the build host. No source, arguments, limits or gate thresholds change; wrapper and command are retained in evidence. Static D243 failure remains a blocker.
Completed evidence follow-up
129733b3, pushed: baseline/final static byte comparison, both direct-path proofs, complete finished logs (force-added despite *.log ignore), and the narrow RTT-setup routing wrapper. Full fast setup passes on the authorized VM; fmt, native fmt, CLI compile-out and workspace clippy pass. Workspace tests are compiling. Runtime code remainsa707640f; no source or threshold adjustment.Build setup finding: after the archived baseline reused the same Cargo target directory, bare release/infraternal contained baseline bytes (21,880,624), while Cargo considered head fingerprints fresh. All functional rows passed, but that static retry is qualified as fast-shared-target-before-refresh.log, not head artifact evidence. Independently saved head is 21,918,864 bytes; baseline/head hashes are recorded. Cleaned the four affected release crates before a final source rebuild; future baseline/head targets must be separate. No runtime code change or size waiver.
Final refreshed-artifact gate attempt: two unchanged CLI runtime tests hit their configured deadlines (remote_server::tests::failed_restart_endpoint_does_not_prevent_http_serving and restart::tests::reload_reopens_install_path_when_the_running_inode_was_replaced). Both passed in the preceding full workspace run. Evidence retained in fast-refreshed-default-attempt.log. No timeout waiver; next complete gate uses serial test execution and the lane existing gate-profile.toml (dev opt-level 1 only infraternal-agent/server/shim, dependencies and release profile unchanged). Static source rebuild is still running; D243 remains blocked.
Serial qualified head gate received SIGTERM (exit143) during VT fidelity_seeded_smoke after 819 passing test rows and no recorded test failure. Sender is unknown; no causality claim or waiver. The CLI deadline cases passed in this run. Evidence: fast-qualified-interrupted.log. Refreshed static head artifact is byte-for-byte identical to the independently saved head (21,918,864 bytes); D243 remains blocked. Restarting the exact same-head gate with cached builds and original limits.
Head
f5c4b564full rerun: one auth socket case closed unexpectedly (auth::tests::socket_tests::mesh_calls_and_subscriptions_deliver_scoped_live_inventory). The same case passed in the preceding qualified full run and now passes using the exact same workspace test binary in isolation; standalone feature-default isolation also passes. No cause or baseline waiver claimed. Both outputs retained; a complete head rerun follows. Other recorded rows pass except the unchanged D243 static ceiling.Handoff at pushed head
f5c4b56435. D242 implementation, contracts, failing regressions and repairs are committed. Both backends precisely retire disallowed connection state; allowed same-peer and unrelated state remain. Functional proofs: 344/344 assertions, 20/20 recovery attempts, 8/8 journal rollback assertions; tuple fuzz 100,000 executions. Independent review findings repaired.Locked authorized VM evidence: evidence/mesh-access-round4/performance.md and performance-summary.json. All 24 change cases and 16 apply cohorts pass across 10/1,000 installed peers, local/150 ms RTT. Three live nodes, two receivers; synthetic keys are installed kernel peers, not 1,000 live workers. Apply medians improve 34.3–49.2%. Default tightening at 1,000 peers/150 ms RTT takes 6,369.69 ms nft and 6,399.34 ms compatibility through existing chunk delivery; this remains a recorded delivery finding.
Final scripts/verify fast ran on this exact head using the existing native qualification profile; only its RTT self-test was routed to the locked authorized VM. Latest full output is evidence/mesh-access-round4/fast-final-f5c4b564.log in this worktree. One unwaived auth socket failure: auth::tests::socket_tests::session_gone::an_ended_or_unknown_session_gets_the_final_close_without_losing_the_socket, auth/tests.rs:1731, "server closed websocket unexpectedly: None". Server suite 329 passed/1 failed/39 ignored. Earlier complete qualified gate at
a3b83c04passed all Rust tests (committed log atf5c4b564); isolated success from the previous different auth case is not a waiver for this full run. No same-window dev reproduction is claimed.D243 remains blocked: current static 21,918,864 bytes, source baseline 21,880,624 (+38,240); both exceed frozen 16,404,816 ceiling. Owner decision is unchanged. Final gate output verbatim:
No deployment or issue closure. Integration is blocked by the unwaived final auth test failure and D243 ceiling; implementation evidence and commit history are retained.
Cleanup: local job targets and scratch are being removed after retaining the final gate log. Nonblocking perf-lock acquisition returned 1, so /root/infraternal-bench/mesh-policy/round4-173 remains on the VM; no other job lock or directory was touched. Final full gate artifact remains in the worktree; committed prior complete qualification log and all primary performance/functional evidence remain at
f5c4b564.Independent delta verification started on local review-mesh-policy-verify at
f5c4b56435; merge base with dev8e7467c07c, previous reviewed head78ac63c1. Prior review retained at review-mesh-policy-verify-prior-fd094729. Scope excludes merged dev work. Recheck MPVR-1/2/3 and new D242 retirement/decoder/rollback behavior, functional tests locally only. No implementation fixes, push, deployment or perf VM use; timing claims cannot be independently remeasured under this brief.Delta review step on source
f5c4b564: prior Mesh review tests are byte-identical to archivedfd094729and already imported by author (2c91a478/3ae39ff5/69c38e2f), so no duplicate cherry-pick. MPVR-1 both real-kernel re-enrollment tests PASS; MPVR-3 both exact-marker tests PASS; MPVR-2 fresh coordinator/tombstone test PASS. Authorized local binding/address recovery also PASS on both backends. 7 named tests selected, 7 pass, no zero-test claim. Server production revocation companion pending build. Checked netlink tuple target: 100,000 sanitizer fuzz executions complete, no crash. Functional namespaces only; no timing acceptance, perf VM, push or implementation changes.Independent delta review MPVR-4 P1 confirmed on
f5c4b564: D242 retired TCP resumes through reverse state recreation. Establish A->B:5540, remove A outbound/B inbound at BOTH nodes, acknowledge applied=true, confirm old receiver tuple absent. B sends on the SAME accepted TCP socket (no reconnect/new SYN); reverse permission creates B->A conntrack original, then A's removed direction sends and receives 'after'. nft and compatibility both reproduce reverse=reverse-probe/after=after/refused=false. Rust regression nft_ipv4_retired_tcp_stops_after_reverse_traffic selects1/fails1 at refusal assertion; tests/helper committed locally on review-mesh-policy-verify. Locations firewall.rs/iptables.rs initiating tuple checks plus ordinary NEW acceptance. Independent tuple dumps retained in review scratch target/reverse--false-ipv4/result.json. HOLD (P1 present); implementation unchanged, no push/perf VM. Additional family/backend cases and full fast gate continue.MPVR-4 P1 expanded at local test commit
a908499a42: four named Rust regressions fail at expected refusal assertion, nft/nf_tables × IPv4/IPv6. Independent receiver dumps: old TCP tuple absent after BOTH nodes' applied=true; recreated original tuple is B:5540 -> A:ephemeral, and removed A->B payload 'after' echoes over the SAME TCP socket. No SYN/reconnect/sender-filter removal. Separate independent recovery20/20 and journal rollback8/8 PASS. Prior Mesh regressions5/5 plus local-binding/address recovery2/2 PASS. Fast gate compiling workspace. HOLD P0=0/P1=1/P2=0/P3=0 active (server prior companion pending); no implementation repair, push or perf VM.Independent evidence checkpoint
4f88a420on local review-mesh-policy-verify: docs/verification/mesh-policy-verify-review/delta-f5c4b564/ retains reverse-state tuples and normal Cargo red logs (4/4 expected failures), all six earlier regression tests PASS, two binding/recovery tests PASS, migration4/4, journal8/8, recovery20/20, sanitizer fuzz100000. Exact source export checks4820/4820 Git blobs, zero mismatches. Original MPVR-1/2/3 resolved; active MPVR-4 P1 remains HOLD. Final exact-f5c4b564 fast uses documented native profile; fmt/native fmt/compile-out/clippy pass, workspace tests running. No performance acceptance, implementation repair, push, deployment or perf VM.Round 5 started on mesh-policy-verify at
f5c4b56435. Merging origin/dev53d7af1bfirst; preserving local-key binding and new server-path metadata together. Existing independent tests and MPVR-1/2/3 repairs already present; four reverse connection-state regressions froma908499awill be retained unchanged. D164/D216/D242/D252. No deployment.Completed dev merge
c89fe001and imported unchanged four-case MPVR-4 regression3b20429d; both pushed. Merge fmt, strict all-feature/all-target mesh Clippy and ordinary tests pass. Prior independent MPVR-1/2/3 tests are already imported byte-identically (2c91a478/3ae39ff5/69c38e2f/b4d7b1cd), as the reviewer recorded; no duplicate cherry-pick. New regression tests are intentionally ignored outside disposable kernel namespaces. Running their before-repair assertions now.MPVR-4 reproduced after dev merge: all four independent cases fail at the original refusal assertion, nft/iptables-nft × IPv4/IPv6. Both nodes acknowledge removal; original receiver state is absent; continuation on the same accepted TCP socket recreates reverse state. Evidence: evidence/mesh-round5/red-*_retired_tcp_stops_after_reverse_traffic.log and captured result.json files. Fresh namespace per named test is required; aggregate namespace run retained as a setup failure. Repair preserves exact tuple+ID+zone retirement (which removes both kernel directions) and requires an initiating SYN for fresh TCP acceptance. D164/D242; no global state removal.
Completed nft repair
2b02a2d5, pushed. Original independent IPv4/IPv6 reverse-state tests: 2 expected failures before, 2 passes after. Mesh fmt, strict all-feature/all-target Clippy and ordinary tests pass. Two constant fresh-TCP rules require initiating SYN; current established tuple checks and exact ID/zone retirement remain. Renderer assertion explicitly checks both rules. Compatibility repair and full permitted-flow/ID campaigns follow. D164/D242.Completed compatibility repair
b6d51a7f, pushed. Original independent reverse-state regressions: all four expected failures before, all four passes after across nft/iptables-nft and IPv4/IPv6. Strict all-feature/all-target Clippy and fmt pass; compatibility unit tests 25 passed, 0 failed, 11 namespace cases ignored. Exact owned marker unchanged; two fresh-TCP checks asserted explicitly. Clarifying existing D242 contract and connection-state module docs before full functional/VM campaign.Completed source/contract clarification
a1278216, pushed. Functional verification: 16/16 named independent kernel checks, fresh-store withdrawal 1/1, persistent-flow/exact-ID assertions 344/344, failed-journal preservation 8/8, saved-intent recovery 20/20. Both backends and both families; permitted same-peer flows and unrelated state remain. Raw tuples/dumps remain in evidence/mesh-round5. Production authority entry-point test and optimized VM artifacts still building. No deployment; D242/D252.Resumed after full disk on mesh-policy-verify at
94342e78b2; base mergec89fe001. Tracked worktree clean; 168 GiB free. Review tests and both frontend repairs already committed/pushed. Continuing production withdrawal test, locked perf-VM apply/change-to-refusal campaign, and final fast. No deployment. D164/D216/D242/D252.Completed/pushed
c06ea1aa: baseline merged sourcec89fe001matches 516/516 crate/manifest files; all six independent regression/helper files match reviewer commits exactly. Optimized head fixture rebuilt after disk recovery; private-loader adaptation preserves executable-segment SHA256. Reproduction/configuration committed; Python syntax and shell checks pass. Locked VM campaign and final fast running; no timing or completion claim yet. D164/D242.Locked authorized VM round5 campaign PASS40/40: 24 coordinator changes (both frontends, 10/1000 installed peers, local/150ms RTT) and 16 base/head/head/base apply cohorts. Evidence retrieved to evidence/mesh-round5/performance/results and performance-summary.json. Three live nodes/two receivers; other peers are installed synthetic keys. First apply medians base->head: nft10 27655->29605us (+7.05%), nft1000 52878.5->52530.5us (-0.66%), compatibility10 187901->191764us (+2.06%), compatibility1000 189173->193256us (+2.16%). Cohorts overlap, so no no-regression claim; running head/base/base/head apply-only cohorts with 36 rounds each and retaining all samples. 1000-peer/150ms default tightening remains 6037.02ms nft / 6138.87ms compatibility through existing chunk delivery. Final fast compiling; no threshold adjustment.
Completed
b7914b0f: fresh resumed immutable-artifact kernel run PASS16/16, zero failures, one namespace per named test. All four unchanged reverse-state cases, re-enrollment/marker checks, identity/replay fences and address recovery pass. Exact public tuples, logs and author checklist committed under evidence/mesh-round5/resume-functional. No source/test assertion changes; final full fast and reverse-order VM comparison remain running.Completed
17df497d: VM measurements committed, PASS24/24 change cases and PASS32/32 apply cohorts. Both orders retained, 384 per-node timings per candidate/backend/count. Combined base->head medians (us): nft10 27858.5->28089 (+0.83%), nft1000 50152.5->49433.5 (-1.43%), compatibility10 184145->184190 (+0.02%), compatibility1000 185106.5->184800.5 (-0.17%). Reverse-order shifts +0.12%/-0.28%/-0.15%/-1.58%; no repeatable material apply slowdown or exact-zero claim. All timing evidence from locked authorized VM; release profile unchanged. Full distributions/archives in evidence/mesh-round5/performance.md and performance-summary.json. Three live nodes/two receivers, 10/1000 installed peers; not 1000 independent workers. Existing 1000-peer/150ms default-tightening delivery is 6037.02ms nft / 6138.87ms compatibility. Final fast still compiling.Completed/pushed
7ae5b0bc: original production EnrollmentStore::revoke regression PASS1/1 from newly built remote-enabled workspace artifact; original fresh-compiler withdrawal regression PASS1/1. Real migrated SQLite, zero weakened assertions. Outputs retained as resume-production-withdrawal.log and resume-store-withdrawal.log. All MPVR-1/2/3/4 named functional checks now verified; final full fast still running.Full fast attempt finding: shipping shim suite23/24, attached_backpressure_and_detached_progress fails at crates/infraternal/tests/shim.rs:207: "attached producer never stalled at head1074 (minimum1965)". Exact same immutable case immediately PASS1/1 in isolation; both outputs retained (resume-fast.log, attached-backpressure-isolated.log). No source delta to this test since merged dev and no root-cause/host-load waiver claimed. Full fast continues static rows; complete exact-head rerun will follow with original assertions/settings. Mesh production withdrawal regressions remain PASS.
Completed/pushed
3fe3a0b3: complete resumed fast output and unchanged isolated shim comparison retained. fmt/nativefmt/compile-out/Clippy/cargo-deny PASS; test FAIL101 (shipping shim23/24), static FAIL1. x86 static22408144B, PT_INTERP absent, fixed ceiling16404816B; ARM not reached. Integration remains held by D243; owner/orchestrator size-reduction work is needed, no limit adjustment here. Complete exact-3fe3a0b3 fast rerun now running with cached artifacts and original qualification/assertions; isolated success is not a waiver.Completed/pushed evidence head
ca8f555549. Complete source/evidence-head3fe3a0b3fast: 956passed/0failed/128ignored across104 successful result rows; all non-size Rust rows PASS. Sole failed row D243 static22408144B>16404816B, no PT_INTERP. Earlier shipping shim case now passes in the COMPLETE run; no isolated-success waiver. Full output committed as evidence/mesh-round5/final-head-fast.log, completion.md and final-gate-summary.json. Exactca8f5555check running before handoff; evidence-only commit changes no production/test source. VM proof24/24 and apply32/32 cohorts retained; no deployment or issue closure.Exact
ca8f5555repeat reports four server cases after the preceding complete956/0 pass: server_setup_terminal_echo_and_resume_preserve_offsets_once, mesh_calls_and_subscriptions_deliver_scoped_live_inventory, mesh_lifecycle_withdrawals_survive_calls_but_never_end_a_replacement, review_mesh_watch_reports_liveness_expiry_without_another_edit. Detached origin/dev baselineefac27a598created under owned scratch; same-case comparison underway per #118 with identical native qualification and assertions. No waiver or causality claim yet; raw head output remains named-head-fast.log.Exact-head
ca8f555549gate record before final retry. Five server failures remain unwaived; preceding complete3fe3a0b3run956/0 and all18 original Mesh review checks pass. Detached devefac27a598comparison selects5/5 cases; baseline5/5PASS and original-head artifacts5/5PASS in isolation. This is NOT the same failing assertion on dev, so #118 provides no waiver. No source/limit/assertion change or causality claim. Retrying complete head gate; its setup RTT is currently waiting for the shared perf lock. Static22408144B>fixed16404816B remains an owner/orchestrator size-reduction dependency. No deployment or issue closure.Failed full-run assertions, verbatim:
Gate summary, verbatim:
Selected baseline/head result metadata (functional comparison, not performance evidence):
baseline-browser_input_overload_retires_only_the_terminal_stream.log — output verbatim:
baseline-mesh_calls_and_subscriptions_deliver_scoped_live_inventory.log — output verbatim:
baseline-mesh_lifecycle_withdrawals_survive_calls_but_never_end_a_replacement.log — output verbatim:
baseline-review_mesh_watch_reports_liveness_expiry_without_another_edit.log — output verbatim:
baseline-server_setup_terminal_echo_and_resume_preserve_offsets_once.log — output verbatim:
head-browser_input_overload_retires_only_the_terminal_stream.log — output verbatim:
head-mesh_calls_and_subscriptions_deliver_scoped_live_inventory.log — output verbatim:
head-mesh_lifecycle_withdrawals_survive_calls_but_never_end_a_replacement.log — output verbatim:
head-review_mesh_watch_reports_liveness_expiry_without_another_edit.log — output verbatim:
head-server_setup_terminal_echo_and_resume_preserve_offsets_once.log — output verbatim:
Exact failed-head complete log SHA256: 1fa68e74796d9a8994259eee29c75da25b9c903fb67d71398749bfd8fcc29dcd. Local complete output: evidence/mesh-round5/named-head-fast.log.
Finish / review repair handoff at pushed head
ca8f555549. All original Mesh review cases pass unchanged:16/16 kernel checks plus fresh-store1/1 and production EnrollmentStore1/1. Six reviewer/helper files byte-identical. Exact-state344/344, rollback8/8 and recovery20/20 retained. Locked authorized VM24/24 coordinator changes and32/32 apply cohorts at10/1000 installed peers and local/150ms RTT; combined median shifts -1.43% to+0.83%, both orders retained. Three live nodes/two receivers, not1000 live workers. 1000-peer/150ms default tightening6037.02ms nft /6138.87ms compatibility remains a delivery finding.Latest exact-head full fast after native-cache rebuild: TEST FAIL101, server386passed/2failed/40ignored. Unwaived cases: review_mesh_delete_requires_fresh_passkey_tap (fresh_delete.rs:131, expected successful result frame after authorized edit), review_mesh_watch_reports_liveness_expiry_without_another_edit (review_liveness.rs:83, error instead of resync). Fresh-delete exact isolationPASS1/1. Earlier five cases allPASS on detached dev
d100cfe5and head in isolation (10selected/10passed); #118 supplies NO waiver because the same assertion was not reproduced on baseline. Earlier complete source/evidence3fe3a0b3 gate956/0 remains committed, not a waiver for latest run.Final size: static22408144B, no PT_INTERP, unchanged16404816B ceiling. Integration remains held for the unwaived final test failures and owner/orchestrator D243 reduction work. No decisions/thresholds/assertions changed, deployment or issue closure. Native baseline reuse exposed stale Plugin API libraries (authority_changed absent in cached rlib although source defines it); all15 workspace packages native dev artifacts were cleared, current head rebuilt, static artifact unchanged. No source repair inferred from cache artifacts.
Committed report: evidence/mesh-round5/completion.md, performance.md, performance-summary.json, checksum-recorded raw VM archives, original red/green tests. Latest complete stdout/stderr follows verbatim (functional test output, not host performance evidence), SHA256 16f03651c77891c20969bad4a2593e1b241800fc3ff76c436af9b4c8f00b7192:
Cleanup complete at pushed
ca8f555549: detached baseline worktree and owned local job scratch removed; owned round5 VM directory removed. Git worktree clean; owner fixtures untouched. Exact latest rebuilt-head full output remains evidence/mesh-round5/rebuilt-head-fast.log and is recorded verbatim above. Final state unchanged: original review regressions18/18PASS, locked VM56/56PASS; integration held by two unwaived server cases and D243 ceiling. No deployment or issue closure.Started dev-merge-mesh-r5 at base
efac27a598(origin/dev), merging mesh-policy-verifyca8f555549for D242. Retrieved all #173 and parent #129 comments. Preserve D28 fresh confirmation and #108 deadline-driven watched liveness; run auth socket, both real firewall backends/address families and full fast gate. Push task branch only; no deploy. Merge has one conflict in remote_guard.rs; inspecting both invariants before resolution.Merge finding: sole conflict remote_guard.rs:18 is additive. Retained dev cuts map plus cut()/tombstoned() reconnect fence and mesh plugins WeakRuntime together; commit_revocation retains dev tombstone release and adds post-COMMIT enabled-plugin notification. No auth test, admission/pre-commit fresh_session_tx, or watch expiry logic changed. 61 code/contract paths plus inherited evidence paths. Protocol tsc exits 0. Auth socket, kernel and milestone fast gates pending; fast RTT measurement waits on named VM flock -w 3600. No performance number from the build host.
Merge integration failure reproduced before any repair: auth socket suite 3 passed / 30 failed / 2 ignored, all failing fixtures report UNIQUE constraint failed: _sqlx_migrations.version (auth/tests.rs:232). Dev adds 0023_bootstrap_retirement.sql while mesh adds 0023_mesh_host_revocation.sql; Git reports no path conflict, but SQLx rejects the duplicate version. Preserve deployed/dev 0023; renumber only unmerged mesh migration to next free version. No migration contents or test assertions change. Red evidence: evidence/dev-merge-mesh-r5/auth-sockets.log. D134/D166/D242.
Functional kernel harness setup: inherited run-functional.sh invokes Cargo inside unshare -Urn; all 16 cases fail before test execution because sccache rustc -vV reports Network is unreachable. Host-side retry produced the same compiler-cache error. New evidence-only run-kernel.py builds outside namespaces and invokes exact immutable executables directly; retry disables RUSTC_WRAPPER for that build only. Initial errors retained in kernel/*.log and kernel-direct.log; no test assertion or namespace isolation changed. Mesh migration renamed 0024 byte-identically; auth remote-feature suite rebuilding.
Renumbered migration suite: 31 passed / 2 failed / 2 ignored; both required original cases fresh_delete and review_liveness PASS, plus writer-wait freshness PASS. Remaining failures: socket_tests.rs:716 mesh.list unsuccessful result, auth/tests.rs:1731 unexpected socket close in full-input-writer test. Same exact compiled test executable reruns each isolated: 1 passed / 0 failed each, no source/assertion/deadline change. Both packet backends 170/170 each; incoming/outgoing exact-state campaigns 86/86 each (344 total); rollback 4/4 and recovery 10/10 per backend. Paths under evidence/dev-merge-mesh-r5; full fast still running. Initial cache/state-root setup failures retained separately.
Completed mesh merge
8ab067009a, pushed only dev-merge-mesh-r5. Retained dev revocation/freshness/liveness logic and renumbered colliding unmerged migration to 0024. Checkpoints: workspace fmt/Clippy PASS, mesh all-feature Clippy PASS, ordinary43/43, kernel16/16, packets340/340, state344/344, rollback8/8, recovery20/20, tracer176/176 and protocol37/37. Both original auth regressions plus writer-wait PASS; two broader socket failures pass unchanged in isolation and remain recorded. Initial fast intentionally stopped after Clippy before workspace tests/static to incorporate new dev21b37bca. New dev merge is clean; full gate next.Updated-source standalone workspace native run reached terminal mouse probe, then failed only because zig was not on its shortened PATH (FileNotFoundError in verify-vt-native.py:23). Original stderr retained at mouse-missing-zig-stderr.log. scripts/verify fast already exports the pinned job-target Zig PATH; resumed that complete gate after the standalone runner finished. Both required auth cases and all other completed native cases passed; no source/assertion/deadline change or load waiver.
Completed and pushed advanced-dev merge
75a70d3aon dev-merge-mesh-r5. Includes origin/dev21b37bca; ancestry check passes. Combined fast native checkpoint:105 successful result rows,1010 passed,0 failed,134 ignored (includes25 CLI compile-out cases); fmt,VTfmt,workspace Clippy,cargo-deny PASS. Both unchanged fresh-delete/liveness cases and writer-wait freshness PASS in complete run; earlier loaded socket failures also PASS here. Shipping static builds now running with D243 ceilings unchanged. Separate TypeScript176+37, kernel16, packet340,state344,rollback8,recovery20 PASS retained. No #118 waiver or test change.Evidence seal pushed:2c9b2186; documentation-only ending correction5d098cb828190e48e25f7b3e9312c8212c02a63f.61 integration source hashes unchanged. Complete combined-source fast:1010passed/0failed/134ignored; sole failed row static size (x8622530608>16404816B; ARM19943688>13817816B), both PT_INTERP absent and production trust PASS; x86 key memory initialization1. Full output at evidence/dev-merge-mesh-r5/fast-updated-dev.log; source/static/regression hashes and author checklist committed. Final full scripts/verify fast now running on exact5d098cb8 head with recorded native qualification and locked-VM RTT routing. No source/assertion/budget change, no deploy or issue closure.
Finished dev-merge-mesh-r5 at
5d098cb828(pushed). Merge8ab06700 retainsca8f5555rounds4–5, resolves additive revocation fields and renumbers unmerged mesh migration0023→0024 without changing SQL. Merge75a70d3a includes dev21b37bca; evidence2c9b2186 and documentation-only ending correction5d098cb8 are separate commits. Branch is a fast-forward candidate from current origin/dev; dev/main are untouched. No deployment, budget change, assertion change, #118 waiver or issue closure.Exact final-head full scripts/verify fast:1010passed/0failed/134ignored in105result rows, including25compile-out cases. Both original fresh-delete/liveness regressions and writer-wait freshness pass unchanged. Six mesh review/helper files and three auth regression files are byte-identical;61source hashes and both static hashes checked. Separate mesh all-feature ordinary43, kernel16, packet340,state344,rollback8,recovery20 and TS176+37 pass. Native qualification and locked-VM RTT routing are recorded in evidence/dev-merge-mesh-r5; source/performance profiles and thresholds are unchanged. Earlier setup/loaded failures are retained, not used as waivers.
Sole failed row:D243 static size. x8622530608/16404816B; ARM19943688/13817816B; both PT_INTERP absent and production trust PASS. Native x86 key-memory initialization1 (locked/dump-excluded); ARM runtime explicitly not claimed on x86. The script stops before TS after Rust size failure; separate TS receipts cover that phase. Prior mesh VM56/56 is inherited evidence, not a new integration timing claim.
Raw named-head receipt:evidence/dev-merge-mesh-r5/final-head-fast.log; bytes=267203; SHA256=7a31835e1d50e3264d73e5a4a71385dda03350a449cbfa778581f95ff21ad4c9. Cleanup completed: owned target symlink, local build/fixture scratch and owned VM RTT directory removed; owner fixtures untouched; worktree clean. Complete stdout/stderr verbatim below.
Started mesh-cutoff-fast at base/head
5d098cb828(origin/dev-merge-mesh-r5). Reading all #173 and parent #129 history; retaining rounds 4–5 precise connection retirement. Perf VM 10.69.69.208 reachable, 4 CPUs; D242/D256 measurements there only under flock -w 3600. First isolate serial chunk acknowledgements, compile/fan-out/apply stages with failing benchmark, then auth socket reproduction against detached dev baseline. Brief explicitly authorizes pushes on this branch; no deploy.Finding: round4 default-tightening-publication.json records 34 frames/node and final node applies of 36–58 ms (nft), 155–199 ms (compatibility). node_coordination.rs:136–156 awaits each chunk reply serially: 34 × 150 ms = 5.1 s before compile/apply overhead. Proposed additive contract (D242/D252): mesh.identity advertises compact_access support; only negotiated peers receive access-only range updates in existing bounded chunks. Updates reference exact existing node-ID ranges and replace directional rules, never keys/endpoints/addresses. Exact base revision, contiguous staging, local-key binding and final apply/retirement remain unchanged. Legacy identity replies retain original chunks. Reject concurrent unordered actions, enlarging the 8 KiB bound or inferring fallback from effective rules.
Completed contract
ac6ebd13and failing-budget harness44b64f9a, both pushed. Python AST and diff checks pass. Harness now retains dispatch/index/final-apply timestamps and fails only after retaining packet evidence when --budget-ms is exceeded. Corrected literal newline formatting in the two commit bodies via an exact-SHA lease; no source tree changed. Native baseline release and detached origin/dev auth comparison builds are running in separate owned scratch targets. No performance result claimed yet.Fail-first regressions retained and pushed:
ad220e0bparser refuses access_updates on the unchanged base library;352f6cf6uniform 1,000-peer tightening encodes 25 frames versus required 1 (synthetic short public keys; production realistic keys previously required 34). Both intended failures are in parser-red-run.log and encoder-red-run.log. Strict Clippy for the regression file, ordinary ignored-case execution and fmt pass. Fixture negotiation fix3c06316dpreserves actual startup capabilities; no unconditional support flag. Shipping origin/dev auth comparison replaces an invalid all-features staging-trust setup; initial setup failure retained. Exact-base coordinator release is still building.Locked exact-base VM benchmark fails as required: baseline-red-nft-retry, 1,000 actual kernel peers/node, 150 ms calibrated link, change-to-last-refusal 5,222.012 ms > 200 ms. All TCP/UDP/family packet assertions passed before budget failure. Three channels each sent 34 frames; first dispatch 26.20/37.68/48.98 ms after change and final local applies 31.71–34.09 ms. Serial acknowledgements dominate. Initial VM attempt failed only because tar restored the build user's directory ownership; corrected only this job directory and switched future extraction to no-same-owner.
Auth unexpected-close reproduced on unchanged detached origin/dev
5d098cb8: auth-repeats/baseline-22.log and baseline-50.log both fail at auth/tests.rs:1731, server closed websocket unexpectedly: None. Other same-cohort runs fail at forbidden/result assertions. Baseline full socket suite previously passed 33/33 substantive cases. This rules out this lane's access encoder as the cause; investigating fixture clock/deadline qualification without relaxing production authority checks.Encoding edge found during self-review: numeric-adjacent ranges revert to many frames after inventory churn, and repeating an unchanged opposite-direction rule defeats grouping when explicit ports differ per peer. Additive contract refinement before repair (D242/D252): ranges select existing ordered peers between existing endpoints in the exact acknowledged base; holes introduce no peer or key. A null direction leaves that direction unchanged; a concrete rule replaces it. Group only consecutive entries in the existing inventory, never across an unchanged protected peer. Endpoints, ordering, base revision, identity and final installation remain checked. Reject numeric-range expansion and any frame-budget increase. Add failing sparse/heterogeneous/protected-peer regressions first.
Completed/pushed: receiver
5573d3f5, negotiated sender6ceefe5d, sparse/directional repair112a5290, removable stage diagnostics862eb6ea, stateful fixture062aa89d. Each has fmt/Clippy/ordinary mesh gates. Both isolated 1,000-peer kernel receiver cases pass before and after sparse refinement; invalid bases/bindings/mixed ranges leave accepted state unchanged. Sparse/kept-service regression was 31 frames before, now one; protected-peer reconstruction passes.Auth fixture evidence: unchanged baseline 200 runs, 7 failures, 2 unexpected closes; controlled-clock inventory case 200 runs, 0 failures. Production authority deadline unchanged. Full qualified socket suite exposed an independent fresh-delete close; same immutable baseline/head fresh-delete cases both pass in the follow-up window. No waiver claimed for that full-suite failure; complete rerun remains required. Baseline 31 samples/backend with ephemeral nodes complete; final latency distributions will include public-journal I/O and stage diagnostics rather than extrapolating it.
Stateful compact compatibility-backend benchmark still fails 268.193 ms / 200 ms. VM stage records isolate firewall installation at 135–146 ms per node; persistence 20–24 ms, retirement 4–7 ms, inventory about 3 ms. Four serial frontend commands preflight and install both families. Proposed implementation keeps both-family preflight before either mutation, prepares each script once, and runs independent address families concurrently within each phase. Join both outcomes before any rollback/error return, retaining atomic per-table batches, exact ownership and all allowed-flow/ID assertions. No new engine, dependency, budget or host resource change.
Parallel-family candidate failed the locked stateful compatibility cutoff: 307.930 ms; firewall stage 174–188 ms versus prior 135–146 ms. Do not retain an unproven slowdown. Next measured candidate keeps prepared scripts but serial family application, and skips the unchanged raw-table guard transaction only when the adapter's complete owned state, local address and alias set match. Peer/access changes still rewrite the complete filter table, including original-tuple checks and delivery guard. Initial install, adoption and address/alias changes retain full batches. No preflight or ownership check is removed; no new engine chosen. Both full/partial-family kernel assertions remain required.
D242 measurement finding: compatibility full successful completion remains 212–214 ms, but firewall installation finishes before 25–33 ms durable journal writing and exact state cleanup. Add a diagnostic-only monotonic timestamp immediately after final firewall installation, returned only with a successful completed apply. Keep the 200 ms budget, journal durability, full-completion timestamps and live IPv4/IPv6 TCP/UDP refusal assertions. Compare the baseline with the identical instrumentation; this measures the requested change-to-last-node-refusing rather than its later durable acknowledgment. Reject the parallel mutation experiment (307.9 ms); keep serial commits.
Steps pushed:
fbd7dc61diagnostic kernel-install timestamp,a63c0ebajournal encoding/write split,aaebd7f3same timestamp criterion in the packet benchmark (durable completion retained). Strict mesh all-target Clippy and all-feature tests pass. Final functional campaigns: nft 170/170, compatibility 170/170, failed-journal rollback 8/8, saved-intent recovery 20/20. Exact production parser fuzzing on the locked perf VM completed 1,000,000 mutations without a crash (valid compact, overlapping, positional and unknown-field seeds). Raw logs are under evidence/mesh-cutoff-fast/. Repeated before/after timing awaits the shared VM lock; full fast gate is running. Auth fixture repaire3d9a942: immutable dev baseline 7/200 inventory failures including two unexpected WebSocket closes; repaired fixture 200/200 passes; production deadlines unchanged.Upgrade finding: baseline dataplane::Identity uses deny_unknown_fields, so advertising compact_access in an ordinary mesh.identity reply would break an older coordinator. Fail-first explicit strict-probe regression failed at access_updates.rs:245 (
bc296b16; identity-probe-red.log). Additive contract: new coordinator probes {"compact_access":true}; a new node advertises support only for that probe. Ordinary {} replies retain the two legacy fields; a rejected probe falls back to {} and ordinary chunks. Old-node lifecycle fixtures now reject the probe to exercise fallback. No access-enforcement or benchmark scenario changes. First locked VM compatibility cutoff sample: 170.159 ms, budget 200 ms, 1,000 installed keys and 150 ms RTT; packet assertions pass. Repeated campaign remains queued between shared-lock measurements.Measurement review: earlier summaries counted only the two traffic receivers, although all three configured nodes have final-install clocks in control-frames.jsonl. The observation check fails on the original baseline sample (all-nodes-observation-red.log). Default tightening/rule removal now wait for and include all three configured nodes. Original summaries are preserved; analysis derives the stricter all-node result from their raw successful final-frame clocks. No clock is estimated and no budget is changed. The sender filter is removed after its recorded install only to test independent receiver enforcement; outgoing refusal is independently covered by the 344 state assertions. Public up compatibility: real namespace regression failed with 3 fields instead of the legacy 2 (
81254870), passes afterdfab09df. Explicit-probe/fallback steps5765c5a3and82ceb2c0pass mesh tests and strict Clippy; the final parser completed another 1,000,000 locked-VM fuzz mutations without a crash.Static budget finding, immutable original dev
5d098cb8: x86_64 musl release is 22,530,608 bytes (SHA256 ec7152765a09ddeb7b98e303906e9feec3848545f4359848a5cd927db809d94f), already over the unchanged 16,404,816 ceiling. First head gate: 22,561,104 bytes (+30,496); aarch64 19,974,552 vs 13,817,816 ceiling. Production trust and static linking checks pass; size fails. The first full gate passed clippy, tests, cargo-deny, CLI compile-out and VT format; its initial fmt failure was a transient corrected syntax edit. Final fast is rerunning onc6f0300c. No budget is raised or failure waived. All 62 paired baseline timing samples are retained; final after samples now follow.Fail-first final budget evidence: compatibility sample 1 measured 205.214 ms (all three nodes, 1,000 installed peers, 150 ms RTT), with packet assertions passing. Node 4 inventory was 17.157 ms and firewall 90.721 ms. Keep this sample and the entire candidate campaign. Revisit the read-only parallel preflight candidate: earlier firewall stage 76 ms versus stable serial 84–90 ms; its full-completion comparison was obscured by journal-write variance. Only preflight can run concurrently; join both before any serial mutation, including error paths. New 31-sample compatibility campaign will determine whether p99 meets 200 ms. Existing static ceilings remain unmet on immutable dev as recorded.
Compatibility candidate: read-only parallel preflight still measured 195.513 ms and firewall 83.8–101.9 ms, too little margin. Reject it. Propose skipping duplicate frontend syntax preflight only for a typed removal plan after complete owned installation: identical node, local key, server, addresses, peer identities/count and aliases; each direction is identical or becomes None; neither old nor new view is a fence. No user text or new permission/match form enters such a plan. Every other update keeps both preflights. Actual full family transactions remain serial and self-validating; partial failure retains existing rollback before journal acceptance. Add eligibility regressions for additions, changed ports, identities, addresses and bindings; run ownership/rollback/recovery/packet checks and another 31-sample campaign. No engine, body budget, persistence guarantee or timeout changes.
Pushed
2a83a1d3: verified typed removal plan omits duplicate syntax preflight only with complete ownership, identical bindings/addresses/aliases/peer identities and unchanged-or-None directional rules; fences and other edits retain preflight. Actual commits remain serial and self-validating; rollback stays before journal acceptance. First compatibility sample 133.343 ms vs 205.214 ms failing candidate. Final source executable segments equal the measured artifact. Strict all-target Clippy, mesh tests, eligibility regressions, 170/170 compatibility packet checks, 4/4 failed-journal checks, 10/10 recovery checks and 172/172 direction/state assertions pass. New 31-sample-per-backend distribution is running; earlier candidate samples remain retained. Fast onc6f0300c: fmt, VT fmt, CLI compile-out, clippy, test and cargo-deny PASS; static builds FAIL only the unchanged size ceilings. Final head gate follows the evidence commit.Evidence pushed: final uniform tightening, 1,000 installed keys per each of three real nodes / 150 ms RTT, 31 samples/frontend: nft before p50/p99 5203.580/5270.969 ms → 126.197/157.640 ms; compatibility 5355.854/5408.101 ms → 137.986/153.625 ms. All configured nodes contribute; every sample retains successful durable apply and IPv4/IPv6 TCP/UDP refusal. 34 frames/node become 1; serial ACK waits dominate baseline. Durable completion p99 remains 201.236/204.040 ms and is recorded separately, with no weakened fsync/rollback/cleanup. First candidate compatibility p99 221.238 ms remains retained. Scope: three real workers, not 1,000 connected workers; legacy/fragmented edits retain original chunks. Full raw archives, stage statistics, hashes, review checklist and qualifications: evidence/mesh-cutoff-fast/performance.md and reproduce.md. Final branch-head scripts/verify fast is running; immutable original dev already exceeds static size ceilings, which remain unchanged and unwaived.
Final head:
ce15ff54b4; branch mesh-cutoff-fast. Uniform tightening at 1,000 installed peers/150 ms RTT meets 200 ms: nft p50/p99 126.197/157.640 ms; compatibility 137.986/153.625 ms, n=31/frontend. Original dev: 5203.580/5270.969 and 5355.854/5408.101 ms. Every sample includes all three configured nodes and successful durable apply plus packet refusal. Auth baseline 7/200 failures, fixed fixture 200/200; production deadlines unchanged. Evidence: evidence/mesh-cutoff-fast/performance.md, raw-samples.tar.gz, verification-logs.tar.gz.Final scripts/verify fast exit 1. No test/timeout failure or waiver. Only unchanged static size ceilings fail; immutable original dev x86 is already 22,530,608 bytes. Static linking, production trust and x86 protected key memory pass. Aarch64 key-memory runtime remains explicitly untested on this x86 host.
Static output, verbatim:
Gate output, verbatim:
Full final output SHA256: a1e2c9bd36190f72f1ff39a2e30bf8852db3bc91ee727693bd95bfc73052177e. Full output follows in numbered comments. No deployment or issue closure.
Final scripts/verify fast on
ce15ff54b4, output 1/6, verbatim:Final scripts/verify fast on
ce15ff54b4, output 2/6, verbatim:Final scripts/verify fast on
ce15ff54b4, output 3/6, verbatim:Final scripts/verify fast on
ce15ff54b4, output 4/6, verbatim:Final scripts/verify fast on
ce15ff54b4, output 5/6, verbatim:Final scripts/verify fast on
ce15ff54b4, output 6/6, verbatim:Independent review started: review-mesh-cutoff-fast at
ce15ff54b4. Merge base with local dev is8e7467c07c; origin/dev merge base is5d098cb828, the implementation base. Reviewing both ancestry scopes, concentrating new compact-update and firewall paths. Read #173 history; parent #129 retrieved. No implementation changes, push, deploy or perf VM; existing timing artifacts will be audited without a new timing claim.Review checkpoint at target
ce15ff54: 8/8 recorded source SHA256 values match; independently replayed archive statistics for 186/186 retained samples (all three configured node clocks, frame counts, durable-success prerequisite and quantiles agree). Final compact samples record one frame/node; baseline nft records 34. No new timing claim: review prohibits perf VM. No confirmed finding yet. Exact target-source fast gate and bounded ASan parser fuzz build running; new differential tests remain staged outside source until target gate ends.Review continuation: review-mesh-cutoff-fast at
b014c716, targetce15ff54, merge base with dev8e7467c0; implementation-base origin/dev5d098cb8. Read #78 continuation history and retained #173/#129 records. Prior evidence commit adds 768 differential combinations, malformed atomic-refusal and both-backend real-kernel replay checks; all passed. No confirmed finding. Exact target-source fast gate is still building static artifacts; ordinary tests failed attached_backpressure_and_detached_progress (head 1479, minimum 1806), repeated in isolation. This failure is not waived by #118. Continuing attribution and bounded parser fuzz verification. No push, deployment, implementation edits or perf VM.Review step committed locally as
23bbac0c: repeatable independent archive checker confirms 8/8 source hashes and 186/186 samples, including all three nodes, frame counts, successful durable application and quantiles. Reranb014c716review tests: 3 pure cases (768 differential combinations), 1 nft and 1 nf_tables namespace case PASS. Retained functional campaigns: packets 340/340, exact state 344/344, rollback 8/8, recovery 20/20 PASS. No confirmed new finding; no push. Target-source fast gate, baseline shim reproducer and bounded ASan parser build remain running.Gate qualification update: the retained first target-source gate log was incomplete after the prior model-capacity stop. Three fresh unchanged scripts/verify fast attempts stop before Rust rows at the required RTT self-test (exit 1); all preceding release functional checks pass. Logs: fast-complete.log, fast-retry.log, fast-final.log. No timing threshold, test or production source changed; no perf VM. Running the unchanged rust_verify_fast function separately to retain every Rust row; this does not make the overall script pass. Bounded exact parser ASan fuzz: 100000 executions, exit 0, no crash. Baseline
5d098cb8no-default-feature shim case passed; not a full-feature comparison and does not waive the earlier head failure. Full-feature baseline comparison is building.Finished independent review of target
ce15ff54b4. Local evidence head8bbf76dd66on review-mesh-cutoff-fast; no push, implementation repair, deployment or perf VM.Verdict: merge — MERGE (no P0/P1). Confirmed new findings: P0=0, P1=0, P2=0, P3=0. The overall fast gate remains red; no failure is waived.
Evidence: docs/verification/mesh-cutoff-fast-review/README.md, raw logs and SHA256SUMS. 768 independent compact/legacy combinations and both-backend replay/mixed-refusal cases pass; packets 340/340, exact state 344/344, rollback 8/8, recovery 20/20. Supplemental Rust: 1024 passing tests across 107 suites, 0 failures; parser ASan 100000 executions, exit 0/no crash. Eight source hashes and 186 archived samples agree. Performance not remeasured; three connected workers do not establish 1000 connected workers.
Prior incomplete gate and isolated backpressure failures retained; fresh full-feature baseline
5d098cb8and review-head cases pass, without establishing a cause or claiming a #118 waiver. Three unchanged full fast attempts stop at RTT validation. Supplemental unchanged rust_verify_fast finishes; only static-size row fails. Shipping static sizes x86 22562640 and ARM 19975576 bytes; x86 +32032 versus recorded implementation baseline 22530608. Trust/static linking and native key-memory checks pass; ARM runtime not checked here.Final scripts/verify fast output, verbatim (exit 1):
Supplemental Rust output, verbatim (exit 1; not a passing full dispatcher):
Merged into dev at
c75c362bafter a clean break-it review (8bbf76dd: P0–P3 none). Per D262 the 145 evidence/verification files were not merged; archive: mesh-cutoff-fast-evidence.tar.gz. New access_updates tests pass on the merged tree (5 passed, 3 ignored). Binary size delta is measured in the cut-over release build (D263).Closed by the orchestrator during the 2026-10-28 handover (#254), on the owner's request to close finished issues. Evidence: Merged into dev at
c75c362bafter a clean break-it review (P0-P3 none);c75c362bverified in dev and prod. Reopen if anything is still missing.kayg referenced this issue2026-10-28 17:53:55 +00:00
J48 follow-up from #266: D164 permits stage-1 node and tag arrows, but explicitly defers user endpoints until user devices arrive in stage 2.
Arrow::validatereturnsMeshError::UserEndpoint, and the Mesh API rejectsEndpoint::User; the node model has no user ownership or membership relation. J48 is applying DNS visibility only to the existing directional node policy and tag-expanded node pairs. Owner question is recorded on #266: should user-to-machine DNS visibility wait for a stage-2 user-device grant design, or is there an approved identity/membership model to use now? No new policy is being added here.J48 cross-reference from #266 after kayg's 2026-11-01 DNS clarification: DNS name publication now follows each receiver's compiled directional
PeerPolicy.outbound, so the current node/tag grant model remains the single source of truth for both mesh reachability and DNS. Tests cover one-way node/tag grants, membership without a grant, default and port-limited access, and grant revocation removing names from the next staged snapshot.Audit gap for policy verification:
Endpoint::Useris rejected by bothArrow::validateand the Mesh API,Nodehas no user ownership/device mapping, and tags identify nodes only. D164 defers user arrows to stage 2. A user or user-group grant cannot currently be expressed, so user-to-machine DNS visibility cannot be implemented without an approved identity and device-membership model. The owner question and detailed evidence are on #266; no new policy is invented in J48.Owner decision (kayg, 2026-11-01), from #266: mesh rules can name people and groups.
Syntax impact: additive.
crates/infraternal-mesh/src/rules.rsalready hasEndpoint::User(u64), rejected today withMeshError::UserEndpoint. The work enables it, adds a group endpoint and an owner mapping for nodes, and possibly "my own machines" as an owner-relative target. Existing node and tag rules keep their meaning.Scheduled after mesh SSH S1 (#221), which builds the same person identity.