Repository navigation
D13: requires clauses on the 14 product-layer service ops (1 Network, 4 opaque, 9 none) - #12983
Conversation
…56sum get rows as ImportsFixed Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…declarer std.resources (#12960) made the bare read ambiguous; the module calls Filesystem.Write, the extdeps.filesystem.filesystem_io service. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ows (210 none / 19 opaque / 291 Network) Manager rulings (quiet-seal-543, 2026-10-02) on the HOLD review plus the re-audit of all 236 none rows against the two classes the first audit missed. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…que, partial-clone git reads Network; NSS boundary (170 none / 29 opaque / 321 Network) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…, drivers, transport helpers, cargo build scripts, npmrc git, agent hooks); 149 none / 91 opaque / 280 Network Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ike its RunArgv siblings Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… toolchain proxies in an input cwd are opaque; 135 none / 119 opaque / 267 Network Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ot ImportsFixed; codex GenerateJsonSchema opaque (runtime argv[0]); 134 none / 120 opaque / 267 Network get is a std.algebra profile method with no importable declaration; the pair stopped being derived because the parsed reader does not read it as a bare reference (same as grub.dag and 35 other get rows), not because an import was added. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… 4 opaque, 9 none); undeclared test fixtures listed Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
# Conflicts: # docs/plans/d13-network-audit.md
briansrls
left a comment
There was a problem hiding this comment.
HOLD at exact head 20018dd8c75fc77735d4c431375ae2f2858c9a59.
P1 — PublishMessage authors an unbound resource requirement
dag/gunbc/auth/approval_ntfy_deployment.dag adds requires Network, but this head does not add import std.resources { Network }, and the module's existing imports do not bind Network.
That import is semantically required, not cosmetic. requires none and requires opaque are the two closed marker atoms that resolve carries unwalked; a named requirement is walked as a declaration reference and then checked to resolve to a declared resource. The D13 Network population in #12965 therefore added import std.resources { Network } in every module that received requires Network.
As written, the ntfy operation can parse and lower its requirements edge but will refuse once this product module reaches the resolve/census route, so it does not provide the declared Network fact to D13 step (b). The current green checks do not exercise that route for this module.
Please add import std.resources { Network } to approval_ntfy_deployment.dag and add or identify a positive route control establishing that ntfy.Publish.PublishMessage's requirement resolves to std.resources.Network rather than merely parsing. The other 13 classifications look correct: the four opaque rows execute caller-selected programs; ReleaseHeld is fixed local /proc/signal work; and the eight transportless rows are pure folds over supplied values.
Exact-head floor, generated, emit-build, and witnesses are green; this hold is semantic, not CI-related. No direct merge or check bypass.
…ent binds; fix the two stale route-control citations in operation_requires_edge_test Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
briansrls
left a comment
There was a problem hiding this comment.
APPROVE-MERGE at exact head c3695b100c0cb6599329fe3e9810ac31a8b518bf.
This resolves my CHANGES_REQUESTED review 5396880727. No findings.
The one-commit delta supplies the missing import std.resources { Network } in approval_ntfy_deployment.dag; PublishMessage now authors the same bound resource identity used by the landed extdeps Network population rather than an unbound spelling.
The generic resolve pair is adequate evidence for this data-row correction. a_requirement_naming_a_declared_resource_resolves_at_resolve_holds and a_requirement_naming_a_non_resource_refuses_at_resolve_RED execute resolve_node over an operation Arrow carrying the requirements edge, differing on whether the target path is marked as a declared resource. Together they establish the exact semantic boundary this row relies on: a bound declared resource is admitted and a bound non-resource is refused. The commit also corrects the stale names in the test's authority comment; it does not weaken or replace the controls.
A full import-closure control specific to ntfy.Publish.PublishMessage would be useful integration evidence, but it is not required for every audited operation row and would test the broader product-module closure rather than a new behavior introduced here. The later demand-census/deletion route must still run at its own composed head and fail closed if this module cannot be observed; this approval does not pre-approve that census result.
The other 13 classifications remain unchanged from the otherwise-satisfactory held head. Exact-head floor, generated, emit-build and witnesses are green. Merge-queue landing only; the composed merge_group candidate must pass against then-current main. No direct merge or check bypass.
…arning reading plus main's first_error locus over the rendered diagnostics Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
14 product-layer service operations in
dag/gunbchad norequiresclause. An absent clause means Undecided, so any caller refuses. This PR audits them under the D13 rule:requires Networkntfy.Publish.PublishMessage(rest to ntfy.sh / tailnet HTTPS)requires opaquegunbc.Cli.Run,claim_executor.Executor.VerifyBuildArtifacts(runtimebin_pathin argv[0]);sol_hold.ActivateHeld(runtime{ipmitool}path);owned_process.launch.LaunchOwned(runtimecommand)requires nonesol_hold.ReleaseHeld(local kill); 8 transport-less pure folds incode_change_workflow,pr_digests,review_verdictThe 30 test/fixture operations without a clause stay undeclared on purpose: no test reads their demand. The doc lists them; a fixture gains a clause when a test needs one.
Route control and follow-up
approval_ntfy_deployment.dagimportsstd.resources { Network }, so therequires Networkmember binds. The route control is the generic pair inv2.test.claim.normalize.operation_requires_edge_test:a_requirement_naming_a_declared_resource_resolves_at_resolve_holdsanda_requirement_naming_a_non_resource_refuses_at_resolve_RED. It runs the realresolve_nodeover an operation Arrow's requirements edge, on a synthetic module.Follow-up (not done here): add a control specific to
ntfy.Publish.PublishMessagethat resolves the product module's import closure through v2, so its requirement is shown to resolve tostd.resources.Network. No required lane resolves this module's requirement edge today: the head before the import was green with the name unbound.🤖 Generated with Claude Code