Access rules: one sentence model (who can verb where), verified until foolproof across CLI, API, MCP, apps, WebMCP #186
Open
opened 2026-10-12 10:46:50 +00:00 by kayg
·
139 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#186
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 2026-10-12: write the access-rules model down and exhaustively try to break it with Codex jobs until we are sure it's foolproof. It must work across the CLI, API, MCP, the apps, and WebMCP in the future. Very simple, very human readable, very robust. Spec: docs/design/access-rules.md on branch access-rules. Supersedes D252's three names once the owner approves.
Starting access rules verification round 1 coverage. Branch: access-rules-r1-coverage. Base SHA:
b0691640ec. Read the 125-line spec atb0691640, required repo docs, DECISIONS.md, and issue #186 plus parent #147; both issues had zero comments before this note.Starting round 1 soundness review on access-rules-r1-soundness, base
b0691640ec(draft v1). Read #186 body and every comment: zero prior comments, no parent issue identified. Worktree spec matches access-rules (SHA256 0409269f70a258c961e4783055c6a1ffeb24e55299dc6857222be80662f4ef15). Will keep spec unchanged, write docs/design/access-rules-verification/round1-soundness.md, split findings/coverage commits, and push the job branch as explicitly requested. No implementation or deployment; no performance measurements needed for this design-only review.Starting access rules verification round 1 surfaces. Branch: access-rules-r1-surfaces. Base SHA:
b0691640ec. Read issue #186's existing coverage comment and parent #147; #147 has zero comments. I am now reading the specification and required decisions, then will prototype sentence/structure round trips and record surface findings.Step 1 committed and pushed:
37275fe5, docs/design/access-rules-verification/round1-soundness.md, S01-S14 (10 P0, 4 P1). Evidence is a concrete named scenario and spec/decision reference per finding, not implementation claims. S01 preferred deploy account differs from own username; S02 replacement name identities; S03 scoped manage edits outside scope/D211; S04 tag/ownership self-expansion; S05 unreviewed IdP widening and stale combined preview; S06 disabled identities still matching Everyone; S07 token intersection loses conditions; S08 scoped manage sees everything; S09 host view vs private session sharing; S10 always-view built-in vs removal cut-off; S11 missing D235 initial any-account login; S12 missing source machine-account identity; S13 missing granular actions/shared typing; S14 person/device reach ambiguity. Documentation diff check passed. Full fast gate still running; no code or parser changes, so no crate/TS-specific gates apply.Step 1 committed as
ee2d399e: added the capability map covering 24 permission-bearing areas and nine rule cases that held up. Evidence and decision anchors are in docs/design/access-rules-verification/round1-coverage.md. The draft remains unchanged.Step 2 committed and pushed as
9bca3cbc: added 10-entry homelab and startup trials and a 12-entry MSP trial. The MSP rules isolate Aster and Birch with positive tag scopes after removing the broad reach default; a dual-tag host would apply both sets, so the tag preview and D211 manager boundary matter. Evidence is in the three scenarios in docs/design/access-rules-verification/round1-coverage.md.Step 3 committed and pushed as
1bbf4332: added ten-entry trials for a 200-person SSO organization, time-limited contractors, and on-call access. The cases show synced groups and absolute expiry are readable; approval request binding, self-approval, the meaning of “for 2 hours,” and one-person exceptions remain unclear or unavailable. See the trial evidence in docs/design/access-rules-verification/round1-coverage.md.Step 2 committed and pushed:
f7d710f7, same findings file, S15-S36 (19 P0, 2 P1, 1 P2 at this checkpoint). S15 full-rule/ending composition; S16 duration reset and active expiry; S17 self/reused approval; S18 disconnected-node D242 boundary; S19 check/use race; S20 detached logins/resume/conntrack cut-off; S21 files-only host execution boundary; S22 paste/resize/clipboard/app input under view; S23 sudo/su/setuid host boundary; S24 browser tunnel requester identity; S25 forwarding final destination; S26 exit internet/private scope; S27 subnet address mutation/overlap; S28 spoofable boot selectors; S29 atomic next-machine claim; S30 boot enrollment vs broad defaults; S31 visible infrastructure exceptions; S32 discovery/why/DNS/reference visibility; S33 why/check route context; S34 atomic narrowing and default recreation; S35 ignored incompatible endings; S36 defaults/built-ins outside canonical slots. Each has named scenario, spec evidence, and smallest proposed repair. git diff --check passed. Completing the coverage matrix and safety-property attempts next; gate is still building.Step 4 committed and pushed as
0124d24c: completed nine organization trials, each with 10–12 rule entries or explicitly marked failed attempts. The CI, AI-agent, and classroom cases confirm narrow network rules and the owner cap, and expose missing run-scoped actions, ordinary join, and narrow machine administration. Full scenarios are in docs/design/access-rules-verification/round1-coverage.md.Correction to step 1: the capability map contains 25 data rows, not 24 as the earlier comment said. The 25th is the separate CA-unlock/pending-admin-actions row (D168, D217, D234). The report now has the complete count in docs/design/access-rules-verification/round1-coverage.md.
Findings committed and pushed as
ab0deb3e: 14 total (P0=1, P1=11, P2=2). Evidence for every finding is in docs/design/access-rules-verification/round1-coverage.md:Top five by safety and breadth: AR-02 (root fallback), AR-04 (cross-route checks), AR-05 (action/role scope), AR-06 (session control), and AR-03 (machine self-service scope). The smallest proposed fixes are recorded per finding. The access-rules draft remains unchanged.
Step 5 committed and pushed as
6ab46fca: clarified that device approval, a fresh passkey for destructive UI actions, and dry run for destructive MCP actions remain required outside the access sentence. The capability map also records immediate cleanup of personal machines when a person is disabled. No new findings were added.Step 3 committed and pushed:
e619ffc46d. Report complete: 37 findings, 28 P0 / 8 P1 / 1 P2. Added S37 (P1): structured rule shape omits mandatory target-account argument. Corrected S15 from P0 to P1: complete-rule union itself already excludes cross-rule mixing; remaining issue is ending conjunction/protocol pairing. Includes symbolic compatibility coverage of every listed who/verb/where/ending class (4,000 single-ending shapes, not runtime tests), all eight safety-property attempts, indirect changes, and cases that hold. Unique IDs/count assertions and diff check pass. Spec unchanged; no deployment or implementation. Full fast gate started at base and remains building; final-head invocation and verbatim output will follow.S18 evidence correction committed and pushed: direct-session outage is a short fail-closed lease under D128, but offline mesh uses last-known rules indefinitely under D166. The report now distinguishes both from D242's absolute at-once cutoff instead of attributing one lease to all paths. Counts remain 28 P0 / 8 P1 / 1 P2. git diff --check passed; no code changed. Full gate is still compiling the native shim on this host; no timing numbers are claimed as evidence.
Step 1 complete: committed canonical grammar, JSON Schema sketch, and scratch round-trip evidence. Commit: 82494c5779b6e030f9fb22ea7f2bf26ae0010a88. Prototype: 10,000 generated rules, 0 round-trip failures; 5 hostile-name cases, 0 failures. The draft delimiter probe failed 3/5 cases; these are undefined-grammar examples, not product-parser failures.
Coverage clarification committed and pushed: S12 now explicitly covers D235's ordinary authorized_keys authentication without a person identity. A valid target key cannot replace source/account login authorization; do not fall back from a refused person to machine authority. Added the same case to lifecycle coverage and separated native host sshd's host boundary (S23). Counts unchanged: 37 findings, 28 P0 / 8 P1 / 1 P2. Diff check passed. Milestone gate passed workspace clippy and is running integration tests; final-head gate is queued behind it.
Coverage analysis complete at head
6ab46fcaonaccess-rules-r1-coverage. The report maps 25 capability areas, models nine organizations with 10–12 entries each, and records 14 findings (P0=1, P1=11, P2=2). Top five: AR-02 missing-account root fallback; AR-04 route-specific checks; AR-05 plugin-action scope; AR-06 session control; AR-03 self-service machine scope. The source spec is unchanged; the branch diff contains only docs/design/access-rules-verification/round1-coverage.md.Self-review: every requested capability is mapped; all nine organizations have 10–20 rule entries; each finding includes an ID, severity, named scenario, model behavior, failure, and smallest proposed change. No area-specific design checklist exists in the repository; I checked against the job checklist and the process Definition of Done.
The required fast gate was run three times. The first two stopped at the latency-proxy preflight under shared-host scheduling. The final run under the weighted user scope passed that preflight, Rust formatting, native formatting, plugin compile-out, clippy, workspace tests, and cargo-deny. It then failed the static binary size budget; TypeScript did not run after that failure. This is unchanged code at the base commit, and no Rust or TypeScript files changed in this branch.
Final
scripts/verify fastoutput (verbatim summary):Coverage clarification committed and pushed:
e845e148b7. S13 now also covers D237 personal-machine join/removal: the draft omits narrow visible starter/built-in authority, while manage-own bundles rule edits and reinstalls. Recommend narrowly named actions under D16, never implicit access from ownership. Counts stay 37 findings, 28 P0 / 8 P1 / 1 P2. Diff check passed. Previous clarification SHAs:b419b4b30a(D128 vs D166);a90c9471(ordinary authorized_keys vs matching login rule). Full milestone Rust tests and dependency checks passed; static release builds remain in progress; final-head gate is queued.Gate blocker on
e845e148b7: scripts/verify fast exits 1 in the static-build row. x86_64 musl binary is 21,857,264 bytes; maximum is 16,404,816 (5,452,448 over). fmt, VT native fmt, CLI compile-out, workspace clippy, workspace tests and cargo-deny pass. Rust failure exits the dispatcher before TypeScript or aarch64 checks. No host-load test exception was needed. Build sources match origin/devc0d01d2285; complete changed-path list relative to that ref:docs/design/TASTE.md
docs/design/access-rules-verification/round1-soundness.md
docs/design/access-rules.md
D243 size reduction on the development line is needed from the orchestrator/integration lane before this gate can pass; this design-review branch adds no binary code. Final-head full run remains active, and supplemental TypeScript checks will cover the skipped functional rows. Verbatim size failure:
Round 1 surface matrix and findings committed:
8ded0646c8(branch access-rules-r1-surfaces; baseb0691640ec).Evidence: docs/design/access-rules-verification/round1-surfaces.md has the 12 exact sentence/body pairs, surface mappings, 13 valid JSON examples, and the shared check/audit/diff/refusal renderer. Scratch probe: 10,000 generated rules, 0 round-trip failures; 5 hostile names, 0 failures; original undefined-delimiter probe 3/5 failures; 0 noncanonical escape spellings accepted.
Finding evidence, with full scenario, model statement, failure and smallest fix in the linked section:
Counts: P0 4, P1 8, P2 2. Cases that held up are recorded at line 703 onward.
Round 1 soundness design review finished; required full gate is blocked by binary size.
Head:
e845e148b7; branch access-rules-r1-soundness, pushed. Findings: docs/design/access-rules-verification/round1-soundness.md. 37 findings: 28 P0, 8 P1, 1 P2. Every entry has a named scenario, model evidence, failure and minimal proposed repair. Coverage includes all listed slot classes (4,000 symbolic single-ending shapes, not runtime requests), all eight safety-property attempts, indirect changes, and cases that hold. Reviewer checklist completed. Draft spec unchanged; no implementation, deployment or performance claims.Top five findings:
Atomic pushed commits:
e845e148docs(access): preserve narrow personal-machine lifecycle actions (#186)a90c9471docs(access): cover ordinary key login authorization boundary (#186)b419b4b3docs(access): distinguish offline mesh from direct session leases (#186)e619ffc4docs(access): map safety coverage and clarify ending finding (#186)f7d710f7docs(access): verify conditions revocation and boot safety (#186)37275fe5docs(access): identify identity and scope soundness gaps (#186)Validation: unique finding IDs/count assertions and git diff --check pass. Full scripts/verify fast at this head exits 1: fmt, native fmt, CLI plugin compile-out, clippy, Rust tests and cargo-deny pass; x86_64 static binary is 21,857,264 bytes against maximum 16,404,816 (5,452,448 over). The dispatcher stops before aarch64 and TypeScript. Supplemental Bash invocation of ts_verify_fast exits 0 (checksums, compilers, unit tests, production build, transfer budget and protocol differential tests). No failing host-load test required a baseline exception.
Complete build sources are unchanged relative to origin/dev
c0d01d2285; only docs/design/TASTE.md, docs/design/access-rules.md and this new report differ. Passing the full gate needs the D243 binary size reduction from the development/integration lane; no budget was changed. Build-host timing lines below are verbatim mandatory gate output, not performance evidence. Scratch build output is being deleted after preserving this issue record. Issue remains open.Final-head scripts/verify fast output, verbatim (exit 1):
Supplemental TypeScript output, verbatim (exit 0):
Finished access rules surface verification on branch head
8ded0646c8. The only tracked change sinceb0691640ecis docs/design/access-rules-verification/round1-surfaces.md. No push or deployment was performed.Findings: 4 P0, 8 P1, 2 P2. Top five:
Evidence: the report contains 12 exact sentence/body pairs, mappings for each requested surface, 13 valid JSON examples, and cases that held up. The scratch probe passed 10,000 generated rules (0 round-trip failures), 5 hostile names (0 failures), and rejected all 3 tested noncanonical escape spellings; the draft delimiter probe failed 3/5 cases.
Final
scripts/verify fastoutput:The verifier exited 1 at the static build size limit; the TypeScript phase was not reached. The worktree diff from the spec base contains documentation only, so this failure is unrelated to the report. The issue remains open.
Starting spec v2 on access-rules-v2, base
b0691640ecfrom origin/access-rules, as the brief explicitly specifies. Read #186 history (22 comments) and parent #147 (0 comments), required contracts, and round-one reports. Continuing their 65 findings: soundness 37, coverage 14, surfaces 14. Documentation only; import reports unchanged, then semantic repairs, canonical grammar/JSON, and a complete finding-to-resolution table. Owner decisions remain unchanged; conflicts become numbered recommendations. Explicit job instruction authorizes pushing this branch.Reports imported unchanged at
c7997a3dand pushed (37 + 14 + 14 = 65 findings). The surfaces report retains its two intentional Markdown hard-break spaces. Semantic repair in progress: explicit D216 network mode, D235 first-admin any-account rule, request composition, all-tags before/after management, live token intersection, narrow D16 actions, view/control separation, and exact UTC deadlines. Evidence: docs/design/access-rules.md. Owner conflicts identified: offline D166 versus D242; own-session D154 wording versus revocation; automatic account matching/shared-account continuity; boot admission; synced additions; browser tunnel requester. No product code or measurements changed. Milestone fast gate launched with job-specific scratch target; final head will be checked separately.Semantic step
ccbf26e1pushed: explicit defaults, route composition, before/after all-tags management, token-owner intersection, narrow actions, session and host privilege boundaries; seven owner recommendations recorded without amending decisions. Language steped0e655e49: canonical verb-specific grammar/RuleBodyV2 and complete request/result forms. Design probe: 22/22 examples fit delimiters; 3/3 omitted separators refuse; 10000 quote/token round trips, 0 failures, 10 hostile-name classes; 2 JSON blocks parse, 6/6 structural negatives refuse. Evidence is in docs/design/access-rules.md, Verification log. Not a production parser/evaluator or performance claim. Milestone scripts/verify fast exited 1 at latency-proxy preflight before Rust/TS; final-head invocation follows the trace-table commit.Trace table committed/pushed at
2fef2070: exactly all 65 source IDs; 57 resolved in draft, 2 accepted P2 limitations, 6 owner-dependent findings and 7 numbered owner questions. Self-review clarification at3d3c9df0ff: duration editor input resolves at preview time, apply preserves that exact deadline (no activation-time reset). Evidence: Conditions and complete finding table in docs/design/access-rules.md. Reports remain byte-identical to all three origin refs; only four documentation paths differ fromb0691640. Weighted fast gate passed its preflight and is compiling unchanged build sources; another final-head invocation will run after this milestone finishes.Spec v2 documentation is committed and pushed on access-rules-v2 at
dcec7b2d32. Counts: 57 resolved in the draft, 2 accepted P2 limitations, 6 owner-dependent findings; 65/65 IDs and severities match round-one reports (33 P0, 27 P1, 5 P2). There are 7 numbered owner questions, copied verbatim below. No product code or DECISIONS changed. Findings, grammar/schema, checks and full trace table: docs/design/access-rules.md. Imported reports are byte-identical to their supplied origin refs.Atomic steps:
c7997a3dreports;ccbf26e1semantics;ed0e655elanguage/JSON/surfaces;2fef2070trace table;3d3c9df0fixed preview deadlines;9610954ecoordination-only pending enrollment;dcec7b2dboot claim before every rule-authorized response. Self-review caught and fixed the last three specification ambiguities.Design evidence: 22/22 canonical examples fit delimiter productions; 3/3 omitted separators refused; 10000 quote/token round trips across 10 hostile-name classes, 0 failures; 2 JSON blocks parse, refs resolve, example validates against structural subset and 6/6 malformed structural cases refuse. Scratch probe is not a product parser, full JSON Schema validator or authorization proof. No timing/performance evidence is claimed.
Owner questions (verbatim):
Open service tunnel, checked for the person/token and final service, as the browser equivalent of a reach check; do not pretend the browser is a machine. This changes v1 safety property 7's universal reach requirement; refuse these tunnels until decided.Final-head scripts/verify fast is running on this SHA with a job-specific target and TRACER_TEST_PORT=4386. Previous preflight failure and superseded documentation-head gate runs are not final-head evidence; older compilation was stopped when the specification corrections changed HEAD, keeping compiler cache. Final result and verbatim transcript will follow; issue remains open.
Spec v2 finished as documentation; integration gate remains blocked. Head
dcec7b2d32on access-rules-v2 is pushed. Reports + spec only: four documentation paths differ fromb0691640, no product code/decisions/dependencies/budgets changed.Finding dispositions: 57 resolved in draft, 2 accepted P2 limitations, 6 owner-dependent findings = all 65 IDs, exactly matching source severities (33 P0, 27 P1, 5 P2). Seven owner questions are copied verbatim below. Draft repairs are not runtime proof or owner approval. Evidence and self-review: docs/design/access-rules.md, canonical grammar/JSON, 22 examples, verification log and exhaustive trace table. 10000 quote/token round trips had 0 failures; 3/3 invalid delimiter cases and 6/6 structural JSON negatives refused. All three reports remain byte-identical to the supplied refs.
Final-head scripts/verify fast exited 1: fmt, VT native fmt, CLI compile-out, clippy, workspace tests and cargo-deny PASS; static builds FAIL. The stripped x86_64 musl binary is 21,857,264 bytes versus 16,404,816 maximum, 5,452,448 over, exactly the round-one reports’ unchanged-source result. Rust failure stops the dispatcher before aarch64 and TypeScript; no TypeScript source was touched. No host-load test failure needed the baseline exception. Passing this gate requires the D243 size-reduction/integration work from the orchestrator; this documentation-only brief does not authorize product fixes or raising the budget.
Run machine: infraternal-dev; CPUWeight=10000 scope, CARGO_BUILD_JOBS=2, job-specific scratch target and TRACER_TEST_PORT=4386. Timing lines in the mandatory transcript are incidental gate output, not performance evidence; no benchmarks or remote lab hosts used. Previous superseded-head runs were stopped after specification corrections; the transcript below is the complete final-head run. Job scratch/build output is being deleted after preserving this record. Issue stays open.
Owner questions (verbatim):
Open service tunnel, checked for the person/token and final service, as the browser equivalent of a reach check; do not pretend the browser is a machine. This changes v1 safety property 7's universal reach requirement; refuse these tunnels until decided.Final-head gate output (verbatim, complete):
Starting round 2 soundness verification on access-rules-r2-soundness, base
dcec7b2d32(v2 spec). Read #186 history and parent #147 (zero comments), repository contract and required decisions. Will first disposition all 65 round-1 IDs, then test new soundness seams under working Q1-Q7 answers. Report only in docs/design/access-rules-verification/round2-soundness.md; spec unchanged. Branch push is explicitly authorized by job brief. No deployment or performance claims.Starting round 2 coverage on branch access-rules-r2-coverage, base
dcec7b2d32. Read the v2 spec in full, required project docs and decisions, #186 history, and parent #147 (0 comments). I am reviewing the round-one finding reports before writing docs/design/access-rules-verification/round2-coverage.md. Spec remains unchanged.Starting round 2 surface verification on
access-rules-r2-surfaces, base SHAdcec7b2d325837414593eaa8eb2027b43b10424e(the specified v2 head). Read all 28 comments on #186 and all comments on parent #147 (zero), the complete v2 spec, required repository docs, and the requested decisions. I will verify all 65 round-one IDs, test a scratch parser/printer, and record the cross-surface examples and any new findings. Documentation only; no deployment or product changes.Step 1 committed and pushed:
0234d43c. docs/design/access-rules-verification/round2-soundness.md replays all 65 round-1 IDs with named scenarios. Automated exact-ID coverage passes (65 unique, no missing/extraneous). Correct replay tally after checking table: 55 closed, 6 partial, 2 open, 2 accepted limitations; the initial prose tally will be corrected in the next atomic step. S18 remains P0 under working Q7 (offline cached rules vs D242); F-SURF-13 remains P2 under working Q1 (three headings vs one list). Six partial closures concern typed multi-operand actions, Q2 service targets and explicit D28 assurance. Full milestone gate is running; docs-only per-commit diff check passes.Step 2 committed and pushed:
b24c453b00. Ten new findings (0 P0, 10 P1, 0 P2) in docs/design/access-rules-verification/round2-soundness.md; each has scenario, model evidence, failure and smallest repair. Per-finding evidence:R2S-01 P1: Conditional management can manufacture unconditional authority; see matching subsection.
R2S-02 P1: The owner intersection cannot literally pass machine reach twice; see matching subsection.
R2S-03 P1: Relational targets have no token/AI principal rule; see matching subsection.
R2S-04 P1: Confirmed personal account does not identify whose account; see matching subsection.
R2S-05 P1: IdP event freshness is distinct from server revision freshness; see matching subsection.
R2S-06 P1: Shared session checks mention owner login but omit owner role loss; see matching subsection.
R2S-07 P1: Live session view and historical output use the same target; see matching subsection.
R2S-08 P1: One target cannot hold multiple authority-bearing action operands; see matching subsection.
R2S-09 P1: Request approval is not the D28 surface assurance check; see matching subsection.
R2S-10 P1: Working Q2 has no person-service target contract; see matching subsection.
Retained S18 P0 and F-SURF-13 P2 are not recounted as new. git diff --check passes; no product changes. Full gate remains active.
Step 1 committed and pushed as
0555e2e9896dcd4a740e24d62a4bf326601eafdc: canonical grammar/RuleBodyV2 review and scenario dispositions for all 65 round-one IDs. The scratch probe passed 10,000 generated rules, 16 hostile-name classes, and refused 13/13 malformed inputs; 65 IDs are unique, with 59 closed and 6 not closed/partial under the supplied answers.git diff --checkpassed.Findings with evidence: S18 remains open because the v2 Q7 recommendation removes D166's indefinite offline behavior and omits the agreed machine count and enterprise-only lease option; S24 remains open because browser tunnels are refused although Q2 says to check a person opening a service; F-SURF-13 does not meet Q1's one-list answer; F-SURF-12 has shared check/result forms but no exact CRUD contracts or diff prose. AR-13 and AR-14 remain the two explicit limitations from D154 and D180.
Step 3 committed and pushed:
bf642acddb. Report coverage/self-review complete: 65 original IDs (55 closed, 6 partial, 2 open, 2 accepted limitations); 10 new P1 findings; retained S18 P0 and F-SURF-13 P2. Compatibility coverage reduces 12 subjects x 7 verbs x 21 target classes x 128 ending subsets (225792 symbolic shapes, not runtime tests) to explicit allow/refuse predicates. Includes every inherited safety property and requested lifecycle/host/network scenario with positive cases. Integrity assertions and git diff --check pass. Final-head full gate will run after the active milestone gate; no code or performance measurements.Step 1 committed and pushed as
f79570f8e7: added scenario-level dispositions for all 65 round-one IDs and mapped 24 permission-bearing capabilities. Evidence: docs/design/access-rules-verification/round2-coverage.md. git diff --check passed; no implementation or spec changes.Further decided-feature check committed and pushed: R2S-11 P1 in docs/design/access-rules-verification/round2-soundness.md. D237 Q17c same-owner personal-machine reach has no stage-one network selector/dependency expansion. Alice's two nodes plus a third require four extra directed named rules; ownership transfer does not adjust those rules. Proposed explicit visible same-current-owner relation, never implicit ownership access. New totals 0 P0/11 P1/0 P2; retained S18 P0 and F-SURF-13 P2. Source spec unchanged; diff check passes. Final-head gate follows milestone.
Step 2 committed and pushed as
38e0bc1798. Added nine organization trials (13–19 rules each), cases that held up, and ten new findings. Evidence is in docs/design/access-rules-verification/round2-coverage.md; git diff --check passed.Findings with scenario evidence:
The spec remains unchanged; no implementation or performance claim was added.
Step committed and pushed:
261f4d4765. R2S-12 P1, docs/design/access-rules-verification/round2-soundness.md: stock PXE has no installer-generated requester key before the first image, while v2 requires a key-bound claim before every rule-authorized image response. Specify authority-free bootstrap or keyless offer-attempt followed by separately confirmed single enrollment key; retain atomic claim/deadline/quarantine. New totals 0 P0/12 P1/0 P2 plus retained S18 P0/F-SURF-13 P2. Diff check passes. Current gate was started before this documentation-only correction; final-head invocation must be refreshed.Final-head gate on
261f4d47hit a non-waivable shim failure while milestone static compilation overlapped: crates/infraternal/tests/shim.rs attached_backpressure_and_detached_progress: attached producer never stalled at head 1265 (minimum 1832); 12 passed/1 failed. Milestone passed this same unchanged test. No product sources differ from basedcec7b2d. This test is not one of the #118 permitted baseline exceptions; will not waive it. Waiting for own active static build to finish, then rerun the focused test and full final gate without own heavy build overlap. Supplemental ts_verify_fast passes: protocol final suite 36 pass/0 fail/34462 assertions. No timings claimed as evidence.Owner answers 2026-10-12 (18:4x IST) to the spec-v2 questions:
Round 2 (running) already assumes these answers.
Step 2 complete. Commit/push:
935dba854a.docs/design/access-rules-verification/round2-surfaces.mdnow maps all 12 fixture rules across app, Mesh, CLI, HTTP, MCP and future WebMCP; audits all 65 round-one IDs; and records 12 new findings (P0 0, P1 4, P2 8). JSON fixture checks: 12/12 body/sentence equality; 10,000 generated parser round trips, 19 hostile-name classes, 14/14 malformed cases refused. The individual findings and evidence lines follow.F2-SURF-01 (P2): Q1's one Access list conflicts with v2's three headings. Scenario and smallest change: report lines 339–345. Evidence: one-list/People/Machines filter requirement versus Roles, Network access and Login access headings.
F2-SURF-02 (P1): Q2's person-level “open service” operation cannot be expressed by the v2 grammar. Scenario and smallest change: report lines 346–352. Evidence: browser local-service tunnel is refused because the browser is not a mesh machine.
F2-SURF-03 (P1): past session output has no permission target distinct from live session view. Scenario and smallest change: report lines 353–359. Evidence: Q5 requires a separate history rule while the grammar only names session/recording views.
F2-SURF-04 (P1): HTTP/MCP/WebMCP list and mutation action schemas are unspecified. Scenario and smallest change: report lines 360–366; candidate cross-surface contracts at lines 287–333.
F2-SURF-05 (P2): the PXE quarantine path does not clearly create the Q4 Inbox item with preview. Scenario and smallest change: report lines 367–373. Evidence: general machine approval mentions Inbox; boot admission flow does not tie itself to it.
F2-SURF-06 (P1): v2's bounded-lease Q7 recommendation conflicts with the supplied D166 outage answer. Scenario and smallest change: report lines 374–380. Evidence: 12 offline machines; need “removal pending on N machines” and enterprise-only strict leases.
F2-SURF-07 (P2): inline shell input is not safe for every quoted name. Scenario and smallest change: report lines 381–387. Evidence: sentence quoting is not shell quoting; propose sentence-file/stdin input.
F2-SURF-08 (P2): human why/diff text has no exact shared template. Scenario and smallest change: report lines 388–394. Evidence: generic missing-check prose does not name the attempted sentence and differs by route.
F2-SURF-09 (P2): the default own-username sentence is hard to read aloud. Scenario and rewrite: report lines 395–401. Proposed wording: “Everyone can log in as themselves on all admitted hosts.”
F2-SURF-10 (P2): v2 does not pin the Unicode data release for Cc/Cf/Zl/Zp classification. Scenario and smallest change: report lines 402–408. Evidence: parsers can disagree on raw-label canonicality across database versions.
F2-SURF-11 (P2): v2 EBNF permits an empty quoted name while prose/schema require nonempty. Scenario and smallest change: report lines 409–415. The scratch parser now refuses empty names.
F2-SURF-12 (P2): editor duration input has no shared grammar although stored deadlines are absolute UTC. Scenario and smallest change: report lines 416–422. Evidence: “may accept 2 hours” leaves surface behavior undefined.
Owner answer Q3 (2026-10-12): "their own username" name matching stays ON by default in the community edition and OFF by default in the enterprise edition (enterprise uses linked/confirmed accounts only). Owner asked for the confirmation (linking) flow to be shown concretely and mocked.
Gate status on
261f4d4765: milestone Rust rows pass except static size; static binary 21857264 bytes vs 16404816 maximum (5452448 over), identical to prior v2/round-1 source results. First final-head run also hit the shim producer-progress timeout during own static overlap. Reran the exact compiled workspace test after build completion: passed (verbatim below). The focused cargo package invocation began redundant feature-specific compilation and was stopped before tests; it is not test evidence. Full final-head rerun is now active without own static overlap. Supplemental TypeScript gate passes. No #118 exception or waiver used.Owner answer L1 (2026-10-12): replace the D235 linking flow with (a) + (b): (a) every ordinary account on a machine the person added counts as that person (community default; off in enterprise, consistent with Q3); (b) otherwise, when in doubt, the first ssh asks for a standard device-code sign-in ("Sign in to infraternal: open /device and enter code XXXX-XXX", passkey to confirm; also
infraternal login), single-use and short-lived, listed in the person's sessions and revocable. Supersedes the D235 Q2a linking UI (description + QR + pick-the-code); to be recorded as an amendment with the access-rules decision.Round 2 soundness design review finished; integration gate blocked only by existing static size.
Head:
261f4d4765; branch access-rules-r2-soundness, pushed. Report: docs/design/access-rules-verification/round2-soundness.md. Only this report differs fromdcec7b2d; source spec/decisions/product code unchanged. No deployment.All 65 round-1 IDs replayed: 55 closed under stated working answers, 6 partial, 2 open, 2 accepted limitations. New findings: 0 P0 / 12 P1 / 0 P2. Retained unresolved originals: S18 P0 and F-SURF-13 P2. Distinct unresolved/new total: 1 P0 / 12 P1 / 1 P2 = 14; partial replays are not counted twice. Every new entry has named scenario, model statement, failure and minimal repair.
Top five:
Coverage: every subject/verb/target/ending class reduced through explicit predicates (225792 symbolic class combinations, not executed tests), every requested lifecycle/network/host boundary, all 8 inherited safety properties, identical adapter permission semantics and cases that held. Self-review/integrity assertions pass: 65 unique source IDs, 12 unique new P1 entries with evidence fields, 8 properties; git diff --check passes.
Final-head scripts/verify fast: exit 1, fmt/native fmt/CLI compile-out/clippy/workspace tests/cargo-deny PASS; static builds FAIL. x86_64 musl binary 21857264 bytes vs 16404816 maximum (5452448 over), identical to prior v2/round-1 unchanged-source reports. Rust dispatcher stops before aarch64/TypeScript. Supplemental ts_verify_fast exit 0; checksums, compilers, unit tests, production build, transfer byte budget, Rust/TS differential and protocol tests pass (final protocol suite: 36 pass, 0 fail, 34462 assertions). No budget changed; passing full gate needs D243 size work from orchestrator/integration.
A previous final-head run hit attached_backpressure_and_detached_progress during own static-build overlap. Exact compiled test rerun passed; refreshed full final-head workspace tests all pass. No #118 exception/waiver or baseline claim used. Superseded
cf13e594gate stopped after final documentation correction. Runs use infraternal-dev, weighted own scope, job scratch target and TRACER_TEST_PORT=4286. Incidental timing lines in mandatory transcripts are not performance evidence; no benchmark/lab host used.Final gate summary verbatim:
Complete final-head transcript and supplemental TypeScript transcript follow in numbered comments, verbatim. Job scratch/build output will be deleted after recording. Issue remains open.
gate-final transcript 1/6; head
261f4d4765. Verbatim output; incidental timing lines are not performance evidence.gate-final transcript 2/6; head
261f4d4765. Verbatim output; incidental timing lines are not performance evidence.gate-final transcript 3/6; head
261f4d4765. Verbatim output; incidental timing lines are not performance evidence.gate-final transcript 4/6; head
261f4d4765. Verbatim output; incidental timing lines are not performance evidence.gate-final transcript 5/6; head
261f4d4765. Verbatim output; incidental timing lines are not performance evidence.gate-final transcript 6/6; head
261f4d4765. Verbatim output; incidental timing lines are not performance evidence.gate-ts transcript 1/1; head
261f4d4765. Verbatim output; incidental timing lines are not performance evidence.Corrected the closing organization-count range to match the nine listed profiles: 13–19 rules. Commit
4e038168is pushed to access-rules-r2-coverage; git diff --check passes.Finish: branch access-rules-r2-surfaces is pushed at
935dba854a. Report: docs/design/access-rules-verification/round2-surfaces.md. It audits all 65 round-one IDs (59 closed under Q1–Q7 answers; 6 not closed/partial) and records 12 new findings: P0 0, P1 4, P2 8. The scratch parser/printer passed 12 examples, 10,000 generated round trips, 19 hostile-name classes, and refused 14/14 malformed inputs.Top five findings:
Required gate: scripts/verify fast returned exit 1. Its final output was:
binary exceeds the 16404816-byte size budget: 21857264 bytes
PT_INTERP: absent; size: 21857264 bytes (baseline 16142672 + allowance 262144 = max 16404816)
+---------------------------+--------------+
| Rust gate | Result |
+---------------------------+--------------+
| fmt | PASS |
| VT native fmt | PASS |
| CLI plugin compile-out | PASS |
| clippy | PASS |
| test | FAIL (101) |
| cargo-deny | PASS |
| static builds | FAIL (1) |
+---------------------------+--------------+
The full parallel test run had two auth failures: server_setup_terminal_echo_and_resume_preserve_offsets_once and socket_tests::fresh_delete::review_mesh_delete_requires_fresh_passkey_tap. Each passed when rerun individually (1/1); the full test row still failed. No product source changed in this design review. The static binary size remains over budget. The issue remains open.
Round-two coverage is complete at head
4e03816857. Report: docs/design/access-rules-verification/round2-coverage.md. It traces all 65 round-one IDs, maps 24 permission-bearing capabilities, trials nine organizations with 13–19 rules each, and records 10 new findings: P0 1, P1 6, P2 3.Top five findings:
scripts/verify fastexited 1 on the static binary size budget. The report is the only file changed by this branch. TypeScript verification was run separately because the Rust failure stops the fast script; it passed, including the 134-stream / 11,439-schedule differential with zero divergences and 36 protocol tests.Final Rust gate output:
Starting spec v3 on access-rules-v3, base
dcec7b2d32from origin/access-rules-v2 as explicitly requested. Read all 68 comments on #186 and parent #147 (zero comments), CLAUDE, DECISIONS, ARCHITECTURE and PROCESS. Continuing the three round-two reports and owner Q1–Q7/L1 answers. Documentation only; import reports unchanged, fold semantic repairs, align grammar/JSON and trace every finding. Push authorized by this brief; no deploy or product code.Steps committed/pushed:
736d8b4aimported three round-two reports byte-identically;87042fd6folds owner Q1–Q7/L1 and D253 plus semantic/grammar repairs;2053d89adefines strict request/mutation/assurance surfaces. Evidence: docs/design/access-rules.md. New/reactivated IdP identities remain pending outside Everyone; provider ordering cancels stale additions; permanent edits require unconditional authority; delegate source reach evaluated once. Trace folding now covers 99 distinct IDs (65 round one + 34 new round two), with retained IDs counted once. No new owner questions so far. Documentation checks pass; milestone full gate is compiling unchanged sources in job scratch.Trace/evidence step committed and pushed:
1b5c0a53, 99/99 distinct IDs/severities match all six source reports: 34 P0, 49 P1, 16 P2; 96 specified resolutions, 3 explicit P2 limitations (AR-13, AR-14, R2-C09), 0 open P0/P1. V3 design probe: 33/33 grammar examples, 7/7 new sentence/body schema pairs, 10000 quote/token round trips (0 failures, 19 known hostile-name classes), 10/10 structural and 7/7 delimiter negatives refused; not a full validator, Unicode conformance or runtime authorization proof. All three round-two imports remain byte-identical. Self-review correctiona19a80f9preserves owner L1 exactly: ordinary accounts on machines added by that person, using verified enrollment provenance rather than mutable ownership labels; enterprise inference off. No new owner questions: None. Full gate still compiling unchanged native sources.Self-review completed at pushed head
d7c6c4c8: source diff is exactly docs/design/access-rules.md plus three unchanged round-two reports. Added the visible owner-only Share session/Revoke session share built-in with per-request exact body/live dependencies; no broad manage or recipient wildcard. L1 correction uses verified adding-person provenance, not a personal-machine-only restriction. Canonical examples/schema pairs and 99-ID trace probe still pass; all owner Q1–Q7/L1 answers are settled and no new question is introduced. Reviewer checklists: round-two soundness lifecycle/compatibility, coverage 24 capabilities/nine profiles, surfaces adapters/lexical forms, PROCESS §2, and TASTE shared UI requirement. No implementation/mockup/screenshots/performance claims. Milestone gate is in native tests, final-head invocation follows sequentially.Final self-review clarification committed/pushed as
cb80a825: parent #147/D209/D210 require fresh request-bound passkey proof for table/Map rule saves even when the addition is widening rather than destructive. Explicitly preserved that in the shared action contract, with server-verified interactive/automation provenance. Counts remain 99 findings (96 written resolutions, 3 accepted P2 limits); no new owner questions. V3 probe and diff checks pass; native tests/dependency checks pass in the milestone gate, static build now running.Gate blocker: milestone scripts/verify fast exits 1 only on the unchanged static size row: 21857264 bytes vs 16404816 maximum (5452448 over), same result as spec v2 and all round-two reviews. fmt, VT native fmt, CLI compile-out, clippy, native tests and cargo-deny PASS. No product sources differ from
dcec7b2d; only four documentation paths changed. Passing this row needs the development/integration binary-size work (D243), outside this documentation-only brief; no budget or product code was changed. Final-head run atcb80a825is now active after milestone completion. An early queued final run unexpectedly ran cached tests during the static build and was stopped (143); it is not final evidence. Verbatim milestone tail:Access mockup round 2 is on branch
mockup-access-r2(head66e5afb1, based onmockup-mesh-r1). Mock only, against the test double, with the MOCKUP / TEST DOUBLE badges. Owner decision L1 applied: the account flow is a device-code "sign in", never "link".URLs (preview build,
INFRATERNAL_CLUSTERS_PREVIEW=1), all start with/?mock=1&proto=clusters&scene=1&mesh=r1&access=r2:&edition=eefor the enterprise edition (rules only, no own-username default, "with approval" available).&access-filter=people|machines|allpicks a chip.&signin=terminalthen open nix-cache in Console. Browser page:&signin=page,&signin=typed(code filled),&signin=done,&signin=refused.&inbox=access, open the sidebar.Captures (
apps/tracer/captures/access-r2/,<name>-<desktop|phone|small>-<ink|paper>.png; desktop 1440x900, phone 393x852, small 375x667):Gates:
bun run checkclean,bun test src186 pass,bun run build && bun run transfer-budget.tsgreen with no mock strings in dist, capture spec 12 tests x 4 plus 1 x 2 passing.scripts/verify fast: the TypeScript side is fine; the Rust gate fails ontest(101) and the static binary size (21857264 > 16404816 baseline+allowance), which this branch does not touch.Design questions (recommendation first):
Final-head attempt at
b92e846dfailed repeated_tiny_credit_pauses_preserve_shell_progress (agent_review wrapper for scripts/verify-agent-snapshot.py, #118 case), then terminated 143 before the remaining rows/summary. Detached origin/dev baselineef6c61ecunder job scratch passed the same Python harness under CPUWeight=10000; load average at baseline start 8.47 16.07 25.55 on infraternal-dev. All non-documentation sources match exactly (git diff HEAD origin/dev excluding docs/ and DECISIONS.md is empty), so baseline used a copy of the same freshly-built GNU binary, avoiding redundant compilation. Baseline passed, so no #118 failure waiver is claimed. Refreshing the full final-head gate. Build-host timing lines are mandatory gate output, not performance evidence.Branch failure (verbatim):
Baseline harness output (verbatim):
Owner answer Q8 (2026-10-12): signed-in terminals expire after 30 days unused by default, with an option to change the period and to turn expiry off, named in user-friendly language in Settings → Account.
Owner decisions 2026-10-12 (AI agents in access rules):
Spec v3 finished as documentation on access-rules-v3, pushed head
b92e846da9. Ready for independent verification; full fast gate remains blocked by existing binary size. No product code, owner decision file, dependency, budget or deployment changed.Evidence: docs/design/access-rules.md (owner answers Q1–Q7/L1, D253, canonical V3 grammar/JSON, exact fixture pairs, surfaces and 99-row Finding → resolution table). Three round-two reports remain byte-identical to supplied origin refs. Source diff from
dcec7b2dis exactly these four documentation paths. Eight atomic commits separate reports/model/surfaces/trace and self-review corrections. The final D253 clarification preserves one hour as a preview-time default, not a hard cap.Counts: 99 distinct source IDs = 65 round one + 34 new round two; retained S18/F-SURF-13 counted once. Severity: P0 34, P1 49, P2 16. Written resolutions: 96; explicit accepted P2 limitations: AR-13, AR-14, R2-C09; open P0/P1: 0. S18 specifies the owner-selected D166 offline boundary rather than claiming instant global removal.
New owner questions (verbatim from spec): None new.
Design probe: 33/33 grammar examples, 7/7 new sentence/body schema-subset pairs, 10000 quote/token round trips (0 failures, 19 known hostile-name classes), 10/10 structural and 7/7 delimiter negatives refused; 99/99 unique source IDs/severities match. Not a production parser/full schema validator, Unicode 16.0 conformance, resolver, authorization proof or performance evidence. Self-review used round-two soundness/coverage/surfaces checklists, all nine profiles, PROCESS §2 and shared UI taste requirements. No UI was built; no screenshots or runtime measurements are claimed.
Final-head scripts/verify fast exits 1: fmt/native fmt/CLI compile-out/clippy/native tests/cargo-deny PASS; static builds FAIL. x86_64 binary 21857264 bytes vs 16404816 maximum (5452448 over), identical to the source-base reviews. aarch64/TypeScript dispatch was skipped after Rust failure; supplemental ts_verify_fast exits 0 (compiler/unit/production build/transfer budget/oracle/differential/protocol checks, including 36 final protocol tests). Size reduction/integration work is needed outside this docs-only brief; no budget waiver. The earlier snapshot-credit failure passed the detached dev harness and the final full run, so no #118 exception was used. Interrupted attempts are recorded above and are not final evidence. Build-host timing lines below are mandatory gate output, not performance measurements.
Final-head full fast-gate output, verbatim (exit 1):
Supplemental TypeScript output, verbatim (exit 0):
Cleanup complete at
b92e846da9: detached baseline removed through Git, job scratch/build target and generated scripts/pycache removed. Working tree clean and HEAD equals origin/access-rules-v3. Full final Rust and supplemental TypeScript outputs are preserved in the finish comment above; fast gate remains blocked solely by the unchanged static size row. No new owner questions.Starting round 3 sequential soundness, coverage and surfaces verification. Branch access-rules-r3; base
b92e846da9, supplied access-rules-v3 head (spec SHA256 8f16ab5ecda31814049b3c3d15964d5897198e63a9ed8e856b995a2bd4959d3e). Continuing all 99 historical IDs and Q1–Q8/L1/AI owner answers from #186; parent #147 has no comments. Reports only, spec unchanged; scratch parser under job cache. Push explicitly authorized by final job instruction. No deployment or performance measurements. Full gate will be recorded; prior size failures are not waived.Soundness step committed/pushed
a6c8f7e5. Report docs/design/access-rules-verification/round3-soundness.md: 99/99 distinct historical replays; 322560 symbolic slot shapes reduced through explicit predicates (not runtime tests); all 8 inherited safety properties and requested lifecycle cases. Findings: R3S-01 P0 community target inference conflicts with this brief confirmed-only Q3 (historical #186 allowed inference); R3S-02 P0 session-carried opener identity can let Bob/Patchbot open a new login beyond existing-session/token scope; R3S-03 P1 Q8 unused-expiry lifecycle/settings missing; R3S-04 P1 later AI own device-code/MCP sign-in/label/listing contract incomplete. Named scenarios and smallest repairs in report. Integrity/diff checks pass; full milestone compiling unchanged source. Coverage pass follows.Coverage step committed/pushed
af814ba3: docs/design/access-rules-verification/round3-coverage.md maps 30 permission-bearing areas and nine organizations, each 12 rules (108 entries). Three P1 findings: R3C-01 unconditional rule-edit requirement contradicts narrow personal join/removal and delegated admission; R3C-02 role grammar has no member operand constraints for parameterized actions; R3C-03 automatic backups/test restore/update/rollback lack a declared maintenance principal beyond transport/person authority. Scenarios/minimum repairs in report. AR-13/14/C09 retained as accepted limits, not new findings. Entry-count/diff checks pass. Surfaces grammar/schema/parser pass follows; no product changes.Surfaces steps committed/pushed
2a14659fand6cc323f0. Report round3-surfaces.md preserves exact v3 EBNF/schema, reproducible scratch source, twelve expanded app/Mesh/CLI/HTTP/MCP/WebMCP serialization/check/diff/audit fixtures (proposed, not executed API calls). Probe: 10000 full-body round trips, 0 failures; 33/33 examples, 7 independent spec pairs, Unicode 16.0.0, 23 hostile-name classes, 12/12 malformed refused. Findings R3F-01 P1 version2/3 check-envelope contradiction; R3F-02 P1 all-IP concrete attempts not representable; R3F-03 P1 atomic batch/mode wire input absent; R3F-04 P2 canonical programming syntax readability; R3F-05 P1 decoded control/bidi label rendering ambiguous. Total unique new/still-unclosed: 12 = P0 2 / P1 9 / P2 1. Coverage explicitly includes the separate approval row: 30 areas. JSON/diff checks pass. Final self-review and branch-head fast gate remain; prior base gate is in static compilation.Gate finding at docs-only branch: milestone native test daemon::readiness_tests::uninstall_handoff_runs_only_after_a_successful_real_socket_write failed in crates/infraternal-agent/src/daemon_readiness_tests.rs:273 (left true, right false; 73 pass/1 fail/12 ignored). This is not a permitted #118 baseline waiver; no waiver claimed and no product code changed. Full gate continues to static build. Will rerun the focused existing binary and refresh full gate at final head sequentially after build completion. Integration/source-test repair is outside this design brief if failure persists. Verbatim:
thread daemon::readiness_tests::uninstall_handoff_runs_only_after_a_successful_real_socket_write panicked at crates/infraternal-agent/src/daemon_readiness_tests.rs:273:9:
assertion
left == rightfailedleft: true
right: false
test result: FAILED. 73 passed; 1 failed; 12 ignored; 0 measured; 0 filtered out; finished in 11.09s
Self-review complete at pushed head
0c163cb232. Source diff from supplied v3 base is exactly the three round3 reports; spec SHA256 unchanged. Integrity: 99/99 historical IDs exact; 12 unique findings (2 P0/9 P1/1 P2); 30 capability rows; 9 organizations × 12 rules=108; 12 surface bodies/check records; 27 valid JSON blocks. Expanded functional probe now refuses 17/17 malformed vectors including invalid dates, duplicate endings and missing boot once; 10000 full-body round trips still 0 failures, 33 examples/7 independent pairs pass. Focused exact compiled readiness test rerun passed 1/1; no waiver claimed. Final-head full gate active without own static-build overlap. No new findings or product changes.Final-head full scripts/verify fast completed at pushed
0c163cb232: exit 1 only on unchanged static size (21857264 vs 16404816 bytes). fmt/native fmt/CLI compile-out/clippy/workspace tests/cargo-deny PASS. Earlier readiness failure passes focused and refreshed full workspace; no #118 waiver used. Dispatcher skips aarch64/TypeScript after static failure; supplemental ts_verify_fast now running. Passing full gate needs D243 size work on the integration line, outside this reports-only review; no budget changed. Verbatim tail:==> static builds
Finished
releaseprofile [optimized] target(s) in 0.41s/home/kayg/.cache/codex-scratch/access-rules-r3/target/x86_64-unknown-linux-musl/release/infraternal: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), static-pie linked, stripped
PT_INTERP: absent; size: 21857264 bytes (baseline 16142672 + allowance 262144 = max 16404816)
binary exceeds the 16404816-byte size budget: 21857264 bytes
+---------------------------+--------------+
| 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-head scripts/verify fast transcript 1/8; head
0c163cb232; exit 1 (static size only). Verbatim output. Incidental build-host timing lines are mandatory gate output, not performance evidence.Final-head scripts/verify fast transcript 2/8; head
0c163cb232; exit 1 (static size only). Verbatim output. Incidental build-host timing lines are mandatory gate output, not performance evidence.Final-head scripts/verify fast transcript 3/8; head
0c163cb232; exit 1 (static size only). Verbatim output. Incidental build-host timing lines are mandatory gate output, not performance evidence.Final-head scripts/verify fast transcript 4/8; head
0c163cb232; exit 1 (static size only). Verbatim output. Incidental build-host timing lines are mandatory gate output, not performance evidence.Final-head scripts/verify fast transcript 5/8; head
0c163cb232; exit 1 (static size only). Verbatim output. Incidental build-host timing lines are mandatory gate output, not performance evidence.Final-head scripts/verify fast transcript 6/8; head
0c163cb232; exit 1 (static size only). Verbatim output. Incidental build-host timing lines are mandatory gate output, not performance evidence.Final-head scripts/verify fast transcript 7/8; head
0c163cb232; exit 1 (static size only). Verbatim output. Incidental build-host timing lines are mandatory gate output, not performance evidence.Final-head scripts/verify fast transcript 8/8; head
0c163cb232; exit 1 (static size only). Verbatim output. Incidental build-host timing lines are mandatory gate output, not performance evidence.Supplemental ts_verify_fast transcript 1/1; final head
0c163cb232; exit 0. Verbatim output. Incidental build-host timings are gate output, not performance evidence.Round 3 verification finished on access-rules-r3, pushed head
0c163cb232. Six atomic documentation commits; only round3-soundness.md, round3-coverage.md and round3-surfaces.md differ from supplied v3 baseb92e846d. Spec/decisions/product code unchanged; no deployment. V3 is not ready to approve: 12 distinct findings = P0 2 / P1 9 / P2 1. Accepted historical AR-13/AR-14/R2-C09 are not new findings.Top five:
Other findings: R3S-04 AI own device-code/MCP sign-in and self-reported label lifecycle; R3C-03 unattended maintenance principal; R3F-01 check envelope version 2/3 mismatch; R3F-02 all-IP concrete attempt representation; R3F-03 atomic batch/mode wire shape; R3F-04 sentence readability; R3F-05 decoded control/bidi label rendering. Every finding has named scenario, model evidence, failure and minimum repair in the reports.
Evidence: 99/99 exact historical ID replays with v2/v3 scenario verdicts; 322560 symbolic class shapes reduced through explicit predicates (not executed authorization tests); all 8 inherited safety properties/lifecycle scenarios. 30 capability areas; 9 organizations × 12 rules = 108. 12 expanded surface/check records, 27 valid JSON blocks. Scratch parser/printer source preserved in surfaces appendix: Unicode 16.0.0, seed 18603, 10000 full-body round trips/0 failures, 33/33 canonical examples, 7 independent spec pairs, 23 hostile-name classes, 17/17 malformed refused. Not a production parser, full authorization validator, Unicode conformance proof, UI test or performance measurement.
Self-review completed against PROCESS §2, historical soundness lifecycle/compatibility, coverage decision/profile and surfaces lexical/adapter checklists. Report integrity and git diff --check pass. Full final-head scripts/verify fast exits 1 only on unchanged static binary size: 21857264 vs 16404816 bytes. Every other Rust row passes. Earlier readiness test failure passed focused 1/1 and refreshed workspace; no #118 waiver used. Rust dispatcher skips aarch64/TypeScript after static failure; supplemental ts_verify_fast exits 0, including compiler/unit/production build/byte budget/differential and 36 final protocol tests, 34462 assertions. Full final gate output posted verbatim in 8 preceding comments; supplemental transcript posted separately. D243 size reduction is needed on integration line; no budget changed. Job scratch/build cleanup follows successful issue upload; executable probe source survives in report appendix. Issue remains open.
Final-head fast gate tail, verbatim:
Finish record correction: the branch contains five atomic documentation commits, not six (git rev-list --count b92e846d..HEAD = 5). Head remains
0c163cb232; findings/gate/evidence unchanged. Only the three round3 reports differ. Temporary job build/parser cache and generated scripts/pycache are being removed after complete transcript upload; probe source remains in the surfaces report.Starting spec v4 on access-rules-v4, base
b92e846da9from the explicitly supplied origin/access-rules-v3. Read #186 history (98 comments), parent #147, required repository docs and round-three findings. Documentation only: import three reports unchanged, resolve 9 P1 and 1 P2, fold Q8/AI decisions, retain R3S-01/02 as open owner questions with the supplied recommendations, and trace all 111 IDs. Push explicitly authorized by this job; no deployment or product code. No performance measurements required.Completed documentation steps on access-rules-v4:
641efce2imported 3 round-three reports byte-identically;3ff448cdfolded Q8/AI lifecycle (30 unused days, qualifying use, inference suppression, one chip, mandatory MCP sign-in, retained token-created provenance);8fa30555resolves R3C-01/02/03 with bounded lifecycle actions, printable role operands and plugin maintenance identities;bea4a148resolves R3F-01..05 with V3 checks, concrete IP attempts, atomic batch/mode types and query codec, human wording and visible decoded-control escaping;ea4967cdtraces all 111 IDs and records two open P0 owner questions with supplied recommendations. Evidence: docs/design/access-rules.md and imported reports. Integrity: 111 distinct IDs match source headings; P0=36/P1=58/P2=17; 101 resolved, 3 accepted P2, 5 historical partials linked to 2 open P0s. 3 JSON blocks parse. Full fast gate compiling unchanged source; final output will follow. No product code or performance claims.Self-review/evidence steps committed and pushed:
0c73e275aligns inherited envelope states, row revisions, concrete actor fields and the unverified sharing promise;2ba35726adds docs/design/access-rules-verification/v4-resolution-checks.md with all 12 scenario replays and current evidence. Terminal sign-out suppresses L1 reentry; expired AI credentials refuse as delegates without signing out an independent human. Mechanical checks: 111/111 unique source IDs and severities, 3 JSON blocks parse with schema refs resolved, 3/3 round-three imports byte-identical, git diff --check passes. Retained RuleBodyV3 probe: 33/33 examples, 7 independent pairs, 10000 full-body round trips/0 failures, 23 hostile-name classes (Unicode 16.0.0), 17/17 malformed refused. Structural duplicate-ending permissiveness is explicitly documented; semantic validator must refuse. Probe does not test new maintenance/attempt/mutation authority or UI. Final head is2ba35726; fast milestone still running, followed by final-head gate. Two open owner questions are R3S-01/02, with recommendations written in the spec; not approved defaults.Owner answers 2026-10-12 to round 3:
Gate finding on docs-only v4: milestone scripts/verify fast exits 1 only on unchanged x86_64 static size, 21857264 bytes vs 16404816 maximum (5452448 over). fmt/native fmt/CLI compile-out/clippy/workspace tests/cargo-deny PASS. The same size was recorded on v3 and round-three reports; all non-documentation sources are unchanged from
b92e846d. No budget waiver or #118 exception. D243 size integration work is needed outside this spec brief. Final-head2ba357265bgate is running; skipped TypeScript rows will be checked supplementally. Verbatim milestone tail:Final-head scripts/verify fast transcript 1/13; head
2ba357265b; exit 1 (static binary size only). Verbatim output. Incidental build-host timing lines are mandatory gate output, not performance evidence.Final-head scripts/verify fast transcript 2/13; head
2ba357265b; exit 1 (static binary size only). Verbatim output. Incidental build-host timing lines are mandatory gate output, not performance evidence.Final-head scripts/verify fast transcript 3/13; head
2ba357265b; exit 1 (static binary size only). Verbatim output. Incidental build-host timing lines are mandatory gate output, not performance evidence.Final-head scripts/verify fast transcript 4/13; head
2ba357265b; exit 1 (static binary size only). Verbatim output. Incidental build-host timing lines are mandatory gate output, not performance evidence.Final-head scripts/verify fast transcript 5/13; head
2ba357265b; exit 1 (static binary size only). Verbatim output. Incidental build-host timing lines are mandatory gate output, not performance evidence.Final-head scripts/verify fast transcript 6/13; head
2ba357265b; exit 1 (static binary size only). Verbatim output. Incidental build-host timing lines are mandatory gate output, not performance evidence.Final-head scripts/verify fast transcript 7/13; head
2ba357265b; exit 1 (static binary size only). Verbatim output. Incidental build-host timing lines are mandatory gate output, not performance evidence.Final-head scripts/verify fast transcript 8/13; head
2ba357265b; exit 1 (static binary size only). Verbatim output. Incidental build-host timing lines are mandatory gate output, not performance evidence.Final-head scripts/verify fast transcript 9/13; head
2ba357265b; exit 1 (static binary size only). Verbatim output. Incidental build-host timing lines are mandatory gate output, not performance evidence.Final-head scripts/verify fast transcript 10/13; head
2ba357265b; exit 1 (static binary size only). Verbatim output. Incidental build-host timing lines are mandatory gate output, not performance evidence.Final-head scripts/verify fast transcript 11/13; head
2ba357265b; exit 1 (static binary size only). Verbatim output. Incidental build-host timing lines are mandatory gate output, not performance evidence.Final-head scripts/verify fast transcript 12/13; head
2ba357265b; exit 1 (static binary size only). Verbatim output. Incidental build-host timing lines are mandatory gate output, not performance evidence.Final-head scripts/verify fast transcript 13/13; head
2ba357265b; exit 1 (static binary size only). Verbatim output. Incidental build-host timing lines are mandatory gate output, not performance evidence.Supplemental ts_verify_fast transcript 1/2; head
2ba357265b; exit 0. Verbatim output. Incidental build-host timings are gate output, not performance evidence.Supplemental ts_verify_fast transcript 2/2; head
2ba357265b; exit 0. Verbatim output. Incidental build-host timings are gate output, not performance evidence.Spec v4 documentation finished and pushed on access-rules-v4 at
2ba357265b, baseb92e846da9. Seven atomic documentation commits; diff is exactly access-rules.md, three byte-identical round-three reports and v4-resolution-checks.md under docs/design/. No product code, decision file, dependency, budget, UI or deployment changed. Job build cache and generated Python cache removed; remaining temporary transcript files are removed after this upload. Issue stays open.Round-three disposition: 9/9 P1 and 1/1 P2 have specified repairs; two P0s remain open owner questions. R3S-01 recommendation: name matching only on machines the person added or an admin marked “Names match people here”, one-time confirmed sign-in elsewhere. R3S-02 recommendation: outgoing mesh from someone-else-controlled sessions blocked by default; owner may explicitly allow “Connect to other machines as me” with “They can connect to other machines using your access.” Owner access loss ends everyone's control. These are recommendations, not owner-approved defaults. AI-token-created provenance is retained separately.
Trace: 111/111 distinct IDs/severities; P0=36/P1=58/P2=17; 101 specified resolutions, 3 accepted P2 limits, 5 historical partials linked to 2 open P0s. Q8 and AI answers folded: default 30 unused days/configurable/Never, qualifying-use clock and sign-out suppression, immutable owner/node credential type, self-reported renamable AI label, one chip, mandatory MCP own sign-in. Integrity: 3 JSON blocks parse/schema refs resolve, 3 round-three imports byte-identical, diff check passes. Retained RuleBodyV3 probe: 33 examples, 7 independent pairs, 10000 round trips/0 failures, 23 hostile-name classes (Unicode 16.0.0), 17/17 malformed refused. New runtime/adapter authorization is not tested by that probe. Evidence/self-review: docs/design/access-rules-verification/v4-resolution-checks.md, all 12 written scenario replays and PROCESS/round-three checklists.
Final-head scripts/verify fast exit 1: fmt/native fmt/CLI compile-out/clippy/workspace tests/cargo-deny PASS; static build FAIL, unchanged x86_64 size 21857264 vs 16404816 bytes (5452448 over). Aarch64/TypeScript dispatcher rows skipped after static failure. Supplemental ts_verify_fast exit 0: compiler/unit/production build/byte budgets/differential/protocol checks, including 36 final protocol tests and 34462 assertions. No #118 waiver needed. Complete final fast output is preserved verbatim in 13 transcript comments; supplemental output in 2 more. Passing the full gate requires D243 size integration work outside this docs-only brief. Build-host timing lines are mandatory output, not performance measurements.
Review steps: read the model and two owner questions in access-rules.md; compare the 111-row resolution table to the imported reports; replay the 12 scenarios in v4-resolution-checks.md. Independent verification must still challenge the written repairs. No screenshots claimed because no UI was built.
Final-head fast gate tail, verbatim:
Starting owner-answer incorporation on access-rules-v4b, base
2ba357265b. Read all 119 comments on #186, including the 2026-10-12 round-three answers, and confirmed parent #147 has 0 comments. I will update only docs/design/access-rules.md.Step 1 resolves R3S-01 in docs/design/access-rules.md. Commit
9ea37b33c0updates the own-username scope and resolves S01, R2S-04 and F2-SURF-09. The table now records 105 specified resolutions, 3 accepted P2 limitations and 2 R3S-02-linked historical partials. git diff --check passed. R3S-02 remains open in this intermediate commit.Step 2 resolves R3S-02 in docs/design/access-rules.md at
e177c9b584. The spec now defines the visible expiring control rule, separate onward-connection opt-in, default refusal reason, D242 cut-off, audit attribution and AI-agent behavior;controlmaps to RuleBodyV3useplus the existinguntilending. Table: 108 specified resolutions, 3 accepted P2 limitations, 111 IDs. Commit whitespace check passed.Gate finding at head
e177c9b584:scripts/verify fastfailedremote_client::tests::tcp_proxy_preserves_spacing_between_packets_already_in_flightat crates/infraternal-agent/src/remote_client_tests.rs:402 (73 passed, 1 failed, 12 ignored). Verbatim test output includestcp_proxy_spacing_us=162057; that is incidental gate output, not performance evidence. This test is outside the specified #118 baseline exceptions, so no waiver is claimed. The changed path is docs/design/access-rules.md only; the gate is continuing.Final-head
scripts/verify fasttranscript 1/9; heade177c9b584; exit 1. Verbatim output. Incidental build-host timing lines are gate output, not performance evidence.Final-head
scripts/verify fasttranscript 2/9; heade177c9b584; exit 1. Verbatim output. Incidental build-host timing lines are gate output, not performance evidence.Final-head
scripts/verify fasttranscript 3/9; heade177c9b584; exit 1. Verbatim output. Incidental build-host timing lines are gate output, not performance evidence.Final-head
scripts/verify fasttranscript 4/9; heade177c9b584; exit 1. Verbatim output. Incidental build-host timing lines are gate output, not performance evidence.Final-head
scripts/verify fasttranscript 5/9; heade177c9b584; exit 1. Verbatim output. Incidental build-host timing lines are gate output, not performance evidence.Final-head
scripts/verify fasttranscript 6/9; heade177c9b584; exit 1. Verbatim output. Incidental build-host timing lines are gate output, not performance evidence.Final-head
scripts/verify fasttranscript 7/9; heade177c9b584; exit 1. Verbatim output. Incidental build-host timing lines are gate output, not performance evidence.Final-head
scripts/verify fasttranscript 8/9; heade177c9b584; exit 1. Verbatim output. Incidental build-host timing lines are gate output, not performance evidence.Final-head
scripts/verify fasttranscript 9/9; heade177c9b584; exit 1. Verbatim output. Incidental build-host timing lines are gate output, not performance evidence.Finished the documentation update at head
e177c9b584. Two atomic commits resolve R3S-01 and R3S-02; only docs/design/access-rules.md changed. The working tree is clean.git diff --check origin/access-rules-v4..HEADpassed. The table has 111 unique IDs: 108 resolved and 3 accepted P2 limitations.Final
scripts/verify fastexited 1. Verbatim output excerpt:The failing
tcp_proxy_preserves_spacing_between_packets_already_in_flighttest is recorded above; it is outside the specified #118 exceptions, and no waiver is claimed. The static size matches the previously recorded v4 failure. No push was performed because the shared worktree instruction says not to push outside the worktree. Issue remains open.Access mockup round 3 (machine line) pushed: branch mockup-access-r3, head
d81a7276d8.Captures: apps/tracer/captures/access-r3/ (l1 console line, l2 rules-only, l3 list narrowed, l4 mesh reach highlighted, l5 only you, l6 hidden machine; 1440x900, 393x852, 375x667; ink and paper; plus -closeup- 2x crops).
URL: /?mock=1&proto=clusters&scene=1&mesh=r1&access=r2 (add &mesh-default=deny for rules-only counts, &edition=ee for only-you, &access-hidden=1 for hidden-machine rules).
Gates: bun run check clean, bun test src 196 pass, access-r3 spec 8 assertion tests + 14 capture tests pass, round-2 chip tests 6/6. Web budgets (production build): critical gzip 294994/307200, deferred 49824/51200, largest on-demand 15176/20480 (before: 294983, 49818, 15176). scripts/verify fast: Rust gate static builds FAIL (binary size, pre-existing), cargo test FAIL (101, no Rust touched).
Access r3 mockup reviewed (2× close-ups, phone + desktop, ink + paper) and published to the clusters preview at
844298b7: http://10.69.69.125:47401/?mock=1&proto=clusters&scene=1&mesh=r1&access=r2Fixed: no tint on "Can reach it" at rest; phone rows ~32 px apart with 44 px targets; Mesh frame
l4b-mesh-reach-arrows-onlyshows only arrows into build-01 bright. Budgets: critical 294,986/307,200, deferred 49,820/51,200, largest chunk 15,179/20,480 gzip. Waiting on owner review.Phone close-up (2×), access r3 at
844298b7:Designer round 4 on branch
mockup-access-r3, head970b6592(merged origin/dev first).1. The connector beside a Mesh card's pill. It starts a rule: drag it onto another card to let this machine reach that one. Real job, kept. It vanished because of an 8 px gap between pill and button and pointer-events: none until shown. Fix: the pill carries an invisible bridge over the gap (the rest of a card takes no pointer events, so the header cannot be the hover region), keyboard focus shows it, touch always shows it, and a tap that goes nowhere shows the tooltip sentence as a toast. Measured at 1440x900, 40-step and 2-step pointer travel: opacity 1 and the element under the pointer.

2. Chips. One fix in the shared chip (packages/ui/styles.css). At DPR 4, all five kinds, ink and paper: text centre within 0.25 px of the pill centre, mark within 0.5 px of the text centre (tag # 0.75 px, thin slanted strokes), ink padding left 8.3 / right 8.4 px, baseline equal to the line's. Test: apps/tracer/test/chips-optical.spec.ts.


Real chips at DPR 1, 2, 4 (drawn 4x):
Synthetic bench:
3. Edit in place. Every changeable word of a rule is a button; it opens its choices at the word (shared anchored popover + choice list); picking applies at once with a toast "Changed to ..." and Undo; invalid values are listed disabled with the reason ("already a rule", "would remove files only"); a row that lets more through says "+4 people". The row keeps its place. The old end-of-row menu is now one button: add a limit, remove. No "Edit rule" panel remains; the Mesh arrow's Edit leads to the list.




Desktop ink:
Unhappy states:
Phone 393x852:
375x667:
Budgets (D188, unchanged limits), default build, before -> after: critical gzip 295,371 -> 295,366 (brotli 245,928 -> 245,938); deferred gzip 50,866 -> 50,864 (brotli 44,958 -> 45,010 of 45,056: only 46 B left, the tap hint costs bytes); largest on-demand chunk gzip 15,946 -> 15,947 of 20,480.
Tests: access-inline-edit.spec.ts 23/23 (after the final assertion fix the four phone/small cases were rerun and pass), chips-optical.spec.ts 2/2, bun test src/canvas/mock 32/32, tsc clean.
Corrected captures for the two review points (popover glass blurs to 28 px at every card level; each choice has its description under the name). Head:
7d2b0637Reviewed and published to the clusters preview at
7d2b0637: http://10.69.69.125:47401/?mock=1&proto=clusters&scene=1&mesh=r1&access=r2 — Mesh → stays reachable (hover bridge, touch, keyboard), chips centred via the shared chip, rules edit in place with Undo, choice list blur 28 px and descriptions on their own line. Deferred brotli margin 46 B (45,010/45,056).kayg referenced this issue2026-10-28 17:53:56 +00:00