schema=iop-node-boundary-audit-v1
manifest_sha256=d8598134dee99d96fc05a045091dd3d8932d4708d2c980c2a78c8b11825d2ccf
delta_sha256=c807d2aa87c0ffb54c3c43bb244be91926206b6a7a40ae8abf9d4d39b9fa667f
addendum_sha256=c678d415daf01a3f68260a3912ffc0b4596f6b03d4f20a38cf796deb9623b670
state_logical_id_sha256=9bce499e286514baeb7ad9bc7c59119a3b5725f69763706dfeba06569d7404b9
state_count=12
provider_commands=capabilities,transport_status,ollama_api
session_id_semantics=correlation-only
cancel_semantics=run-id-only
clean_build=PASS
standard_inference=PASS
s03=PASS
s04=PASS
[command 01]
text=test "$(git rev-parse --show-toplevel)" = "$PWD" && test "$(go env GOMOD)" = "$PWD/go.mod" && command -v bash go python3 sha256sum rg protoc flutter >/dev/null
exit_code=0
output_begin
output_end
[/command 01]
[command 02]
text=bash -lc 'set -euo pipefail; mapfile -t logs < <(find agent-task -path "*/m-iop-agent-chronos-extraction-decoupling/09+08_remove_agent_ui_close/complete.log" -type f -print 2>/dev/null | sort -u); test "${#logs[@]}" -eq 1; grep -Eq "^<!-- task=m-iop-agent-chronos-extraction-decoupling/09\+08_remove_agent_ui_close plan=[0-9]+ tag=[A-Z0-9_]+ milestone-task=[a-z0-9_+,=-]+ -->$" "${logs[0]}"'
exit_code=0
output_begin
output_end
[/command 02]
[command 03]
text=printf '%s  %s\n' d8598134dee99d96fc05a045091dd3d8932d4708d2c980c2a78c8b11825d2ccf scripts/fixtures/iop-agent-chronos-ownership-manifest.tsv | sha256sum -c -
exit_code=0
output_begin
scripts/fixtures/iop-agent-chronos-ownership-manifest.tsv: OK
output_end
[/command 03]
[command 04]
text=sha256sum -c scripts/fixtures/iop-agent-chronos-boundary-disposition-delta-v1.sha256 scripts/fixtures/iop-agent-chronos-boundary-surface-addendum-v1.sha256
exit_code=0
output_begin
scripts/fixtures/iop-agent-chronos-boundary-disposition-delta-v1.tsv: OK
scripts/fixtures/iop-agent-chronos-boundary-surface-addendum-v1.tsv: OK
output_end
[/command 04]
[command 05]
text=python3 scripts/verify_iop_agent_chronos_boundary_test.py
exit_code=0
output_begin
test_audit_inventory_rejects_console_agent_and_runs_full_cycle (__main__.BoundaryVerifierTest.test_audit_inventory_rejects_console_agent_and_runs_full_cycle) ... ok
test_audit_recorder_marks_pass_only_after_all_zero (__main__.BoundaryVerifierTest.test_audit_recorder_marks_pass_only_after_all_zero) ... ok
test_audit_recorder_preserves_failure_and_returns_nonzero (__main__.BoundaryVerifierTest.test_audit_recorder_preserves_failure_and_returns_nonzero) ... ok
test_delta_coverage_gap_is_rejected (__main__.BoundaryVerifierTest.test_delta_coverage_gap_is_rejected) ... ok
test_invalid_addendum_row_is_rejected (__main__.BoundaryVerifierTest.test_invalid_addendum_row_is_rejected) ... ok
test_malformed_and_mismatched_digest_are_rejected (__main__.BoundaryVerifierTest.test_malformed_and_mismatched_digest_are_rejected) ... ok
test_malformed_audit_command_block_is_rejected (__main__.BoundaryVerifierTest.test_malformed_audit_command_block_is_rejected) ... ok
test_malformed_tsv_is_rejected (__main__.BoundaryVerifierTest.test_malformed_tsv_is_rejected) ... ok
test_manifest_digest_mismatch_is_rejected (__main__.BoundaryVerifierTest.test_manifest_digest_mismatch_is_rejected) ... ok
test_missing_addendum_successor_is_rejected (__main__.BoundaryVerifierTest.test_missing_addendum_successor_is_rejected) ... ok
test_missing_successor_is_rejected (__main__.BoundaryVerifierTest.test_missing_successor_is_rejected) ... ok
test_nonzero_audit_command_is_rejected (__main__.BoundaryVerifierTest.test_nonzero_audit_command_is_rejected) ... ok
test_real_inventory_and_state_with_current_immutable_digest (__main__.BoundaryVerifierTest.test_real_inventory_and_state_with_current_immutable_digest) ... ok
test_required_addendum_surface_gap_is_rejected (__main__.BoundaryVerifierTest.test_required_addendum_surface_gap_is_rejected) ... ok
test_residual_removed_path_is_rejected (__main__.BoundaryVerifierTest.test_residual_removed_path_is_rejected) ... ok
test_surface_plan_oracle_mismatch_is_rejected (__main__.BoundaryVerifierTest.test_surface_plan_oracle_mismatch_is_rejected) ... ok
test_valid_audit_is_accepted (__main__.BoundaryVerifierTest.test_valid_audit_is_accepted) ... ok

----------------------------------------------------------------------
Ran 17 tests in 0.063s

OK
output_end
[/command 05]
[command 06]
text=python3 scripts/verify-iop-agent-chronos-boundary.py --manifest scripts/fixtures/iop-agent-chronos-ownership-manifest.tsv --expected-manifest-sha256 d8598134dee99d96fc05a045091dd3d8932d4708d2c980c2a78c8b11825d2ccf --delta scripts/fixtures/iop-agent-chronos-boundary-disposition-delta-v1.tsv --delta-sha256 scripts/fixtures/iop-agent-chronos-boundary-disposition-delta-v1.sha256 --addendum scripts/fixtures/iop-agent-chronos-boundary-surface-addendum-v1.tsv --addendum-sha256 scripts/fixtures/iop-agent-chronos-boundary-surface-addendum-v1.sha256 --state-fixture scripts/fixtures/iop-agent-chronos-transfer-state-v1.json --expected-state-logical-id-sha256 9bce499e286514baeb7ad9bc7c59119a3b5725f69763706dfeba06569d7404b9 --surface-plan agent-task/m-iop-agent-chronos-extraction-decoupling/10+09_neutral_execution/plan_cloud_G10_5.log --iop-root . --check-only
exit_code=0
output_begin
boundary_verification=PASS manifest_rows=300 delta_rows=137 addendum_rows=137 state_records=12
output_end
[/command 06]
[command 07]
text=make proto
exit_code=0
output_begin
protoc \
	--go_out=. \
	--go_opt=module=iop \
	--proto_path=. \
	proto/iop/runtime.proto \
	proto/iop/node.proto \
	proto/iop/control.proto \
	proto/iop/job.proto
output_end
[/command 07]
[command 08]
text=make proto-dart
exit_code=0
output_begin
mkdir -p apps/client/lib/gen
protoc \
	--plugin=protoc-gen-dart=/config/.local/bin/protoc-gen-dart \
	--dart_out=apps/client/lib/gen \
	--proto_path=. \
	--proto_path=/config/.local/include \
	proto/iop/runtime.proto \
	proto/iop/node.proto \
	proto/iop/control.proto \
	proto/iop/job.proto
output_end
[/command 08]
[command 09]
text=go test -count=1 ./packages/go/execution ./packages/go/config ./apps/node/... ./apps/edge/cmd/edge ./apps/edge/internal/node ./apps/edge/internal/edgevalidate ./apps/edge/internal/service ./apps/edge/internal/controlplane ./apps/edge/internal/openai ./apps/edge/internal/opsconsole ./apps/control-plane/...
exit_code=0
output_begin
ok  	iop/packages/go/execution	0.027s
ok  	iop/packages/go/config	0.091s
ok  	iop/apps/node/cmd/node	0.128s
ok  	iop/apps/node/internal/adapters	0.087s
?   	iop/apps/node/internal/adapters/mock	[no test files]
ok  	iop/apps/node/internal/adapters/ollama	0.049s
ok  	iop/apps/node/internal/adapters/openai_compat	0.171s
ok  	iop/apps/node/internal/adapters/vllm	0.154s
ok  	iop/apps/node/internal/bootstrap	1.451s
ok  	iop/apps/node/internal/node	0.906s
ok  	iop/apps/node/internal/router	0.523s
ok  	iop/apps/node/internal/store	0.044s
ok  	iop/apps/node/internal/transport	5.639s
ok  	iop/apps/edge/cmd/edge	0.150s
ok  	iop/apps/edge/internal/node	0.057s
ok  	iop/apps/edge/internal/edgevalidate	0.055s
ok  	iop/apps/edge/internal/service	5.925s
ok  	iop/apps/edge/internal/controlplane	4.505s
ok  	iop/apps/edge/internal/openai	7.405s
ok  	iop/apps/edge/internal/opsconsole	0.069s
ok  	iop/apps/control-plane/cmd/control-plane	0.190s
ok  	iop/apps/control-plane/internal/wire	1.527s
output_end
[/command 09]
[command 10]
text=go test -count=1 ./apps/node/internal/node -run 'Test(NodeCommandProviderAllowlist|NodeCommandRejectsUnknownAgentAndShell|SessionIDIsCorrelationOnly|CancelByRunIDOnly)'
exit_code=0
output_begin
ok  	iop/apps/node/internal/node	0.107s
output_end
[/command 10]
[command 11]
text=go test -count=1 ./packages/go/config ./apps/edge/cmd/edge -run 'Test(LegacyProviderCLIRejected|LegacyConsoleAgentRejected|ConfigCheckRejectsLegacyCLIProcessFields)'
exit_code=0
output_begin
ok  	iop/packages/go/config	0.037s
ok  	iop/apps/edge/cmd/edge	0.040s
output_end
[/command 11]
[command 12]
text=go test -race -count=1 ./packages/go/execution ./apps/node/internal/node ./apps/node/internal/router ./apps/node/internal/adapters/... ./apps/edge/internal/service ./apps/edge/internal/openai
exit_code=0
output_begin
ok  	iop/packages/go/execution	1.054s
ok  	iop/apps/node/internal/node	2.269s
ok  	iop/apps/node/internal/router	1.587s
ok  	iop/apps/node/internal/adapters	1.214s
?   	iop/apps/node/internal/adapters/mock	[no test files]
ok  	iop/apps/node/internal/adapters/ollama	1.131s
ok  	iop/apps/node/internal/adapters/openai_compat	1.319s
ok  	iop/apps/node/internal/adapters/vllm	1.253s
ok  	iop/apps/edge/internal/service	7.082s
ok  	iop/apps/edge/internal/openai	8.887s
output_end
[/command 12]
[command 13]
text=go vet ./packages/go/execution ./apps/node/... ./apps/edge/... ./apps/control-plane/...
exit_code=0
output_begin
output_end
[/command 13]
[command 14]
text=make client-test
exit_code=0
output_begin
cd apps/client && flutter test
00:00 +0: loading /config/workspace/iop-s1/apps/client/test/app_shell_test.dart
00:00 +0: /config/workspace/iop-s1/apps/client/test/app_shell_test.dart: Client App basic rendering and success handshake test
00:00 +1: /config/workspace/iop-s1/apps/client/test/app_shell_test.dart: Client App basic rendering and success handshake test
00:00 +2: /config/workspace/iop-s1/apps/client/test/edge_nodes_panels_test.dart: Client App opens Edges panel and displays Edge details
00:00 +3: /config/workspace/iop-s1/apps/client/test/edge_nodes_panels_test.dart: Client App opens Edges panel and displays Edge details
00:01 +4: /config/workspace/iop-s1/apps/client/test/edge_nodes_panels_test.dart: Client App opens Edges panel and displays Edge details
00:01 +5: /config/workspace/iop-s1/apps/client/test/edge_nodes_panels_test.dart: Client App opens Edges panel and displays Edge details
00:01 +6: /config/workspace/iop-s1/apps/client/test/edge_nodes_panels_test.dart: Client App opens Edges panel and displays Edge details
00:01 +7: /config/workspace/iop-s1/apps/client/test/edge_nodes_panels_test.dart: Client App opens Edges panel and displays Edge details
00:01 +8: /config/workspace/iop-s1/apps/client/test/edge_nodes_panels_test.dart: Client App opens Edges panel and displays Edge details
00:01 +9: /config/workspace/iop-s1/apps/client/test/edge_nodes_panels_test.dart: Client App opens Edges panel and displays Edge details
00:01 +10: /config/workspace/iop-s1/apps/client/test/app_shell_test.dart: Client App mobile screen layout verification for layout and overflow
00:01 +11: /config/workspace/iop-s1/apps/client/test/runtime_panel_test.dart: Client App opens Operations panel and verifies history and provider commands
00:01 +12: /config/workspace/iop-s1/apps/client/test/runtime_panel_test.dart: Client App opens Operations panel and verifies history and provider commands
00:01 +13: /config/workspace/iop-s1/apps/client/test/runtime_panel_test.dart: Client App opens Operations panel and verifies history and provider commands
00:01 +14: /config/workspace/iop-s1/apps/client/test/runtime_panel_test.dart: Client App opens Operations panel and verifies history and provider commands
00:01 +15: /config/workspace/iop-s1/apps/client/test/runtime_panel_test.dart: Client App opens Operations panel and verifies history and provider commands
00:01 +16: /config/workspace/iop-s1/apps/client/test/runtime_panel_test.dart: Client App opens Operations panel and verifies history and provider commands
00:01 +17: /config/workspace/iop-s1/apps/client/test/runtime_panel_test.dart: Client App opens Operations panel and verifies history and provider commands
00:01 +18: /config/workspace/iop-s1/apps/client/test/runtime_panel_test.dart: Client App opens Operations panel and verifies history and provider commands
00:02 +19: /config/workspace/iop-s1/apps/client/test/runtime_panel_test.dart: Client App opens Operations panel and verifies history and provider commands
00:02 +20: /config/workspace/iop-s1/apps/client/test/runtime_panel_test.dart: Client App opens Operations panel and verifies history and provider commands
00:02 +21: /config/workspace/iop-s1/apps/client/test/runtime_panel_test.dart: Client App opens Operations panel and verifies history and provider commands
00:02 +22: /config/workspace/iop-s1/apps/client/test/runtime_panel_test.dart: Client App opens Operations panel and verifies history and provider commands
00:02 +23: /config/workspace/iop-s1/apps/client/test/runtime_panel_test.dart: Client App opens Operations panel and verifies history and provider commands
00:02 +24: /config/workspace/iop-s1/apps/client/test/runtime_panel_test.dart: Client App opens Operations panel and verifies history and provider commands
00:02 +25: /config/workspace/iop-s1/apps/client/test/runtime_panel_test.dart: Client App opens Operations panel and verifies history and provider commands
00:02 +26: /config/workspace/iop-s1/apps/client/test/runtime_panel_test.dart: Client App opens Operations panel and verifies history and provider commands
00:02 +27: /config/workspace/iop-s1/apps/client/test/runtime_panel_test.dart: Client App opens Operations panel and verifies history and provider commands
00:02 +28: /config/workspace/iop-s1/apps/client/test/runtime_panel_test.dart: Client App opens Operations panel and verifies history and provider commands
00:02 +29: /config/workspace/iop-s1/apps/client/test/runtime_panel_test.dart: Client App opens Operations panel and verifies history and provider commands
00:02 +30: /config/workspace/iop-s1/apps/client/test/provider_status_test.dart: Provider with health=available and status=available shows AVAILABLE text with green color
00:02 +31: /config/workspace/iop-s1/apps/client/test/runtime_panel_test.dart: Client App handles unsupported or error command responses and shows error banner
00:02 +32: /config/workspace/iop-s1/apps/client/test/runtime_panel_test.dart: Client App handles unsupported or error command responses and shows error banner
00:02 +33: /config/workspace/iop-s1/apps/client/test/runtime_panel_test.dart: Client App handles unsupported or error command responses and shows error banner
00:03 +34: /config/workspace/iop-s1/apps/client/test/runtime_panel_test.dart: Client App handles unsupported or error command responses and shows error banner
00:03 +35: /config/workspace/iop-s1/apps/client/test/runtime_panel_test.dart: Client App handles unsupported or error command responses and shows error banner
00:03 +36: /config/workspace/iop-s1/apps/client/test/runtime_panel_test.dart: Client App gates node.status and provider.command without required inputs
00:03 +37: /config/workspace/iop-s1/apps/client/test/notification_integration_test.dart: notification stream from NexoNotificationHostIntegration connects to UI snackbar
00:04 +38: /config/workspace/iop-s1/apps/client/test/notification_integration_test.dart: notification stream from NexoNotificationHostIntegration connects to UI snackbar
00:04 +39: /config/workspace/iop-s1/apps/client/test/runtime_panel_test.dart: Client App requires Ollama API path
00:04 +40: /config/workspace/iop-s1/apps/client/test/runtime_panel_test.dart: Client App requires Ollama API path
00:04 +41: /config/workspace/iop-s1/apps/client/test/notification_integration_test.dart: notification stream ignores non-message events (e.g. system)
00:04 +42: /config/workspace/iop-s1/apps/client/test/runtime_panel_test.dart: RuntimePanel keeps loaded empty history visible while a command is pending
00:04 +43: /config/workspace/iop-s1/apps/client/test/runtime_panel_test.dart: RuntimePanel renders operations empty and fetch error states
00:04 +44: All tests passed!
output_end
[/command 14]
[command 15]
text=make test-control-plane-edge-wire
exit_code=0
output_begin
./scripts/e2e-control-plane-edge-wire.sh
[cp-edge-wire] NOTE: auxiliary smoke only - verifies Control Plane-Edge hello and disconnect via real processes.
[cp-edge-wire] shellcheck not found, skipping
[cp-edge-wire] ports: cp_http=29739 cp_ws=30485 cp_edge_wire=32056 edge_node=32591 edge_bootstrap=33761 edge_metrics=34632
[cp-edge-wire] building temp binaries...
[cp-edge-wire] starting Control Plane...
[cp-edge-wire] waiting for Control Plane edge wire port 32056 (timeout: 20s)...
[cp-edge-wire] Control Plane edge wire port ready
[cp-edge-wire] starting Edge...
[cp-edge-wire] waiting for hello accepted (timeout: 30s)...
[cp-edge-wire] CP: hello accepted
[cp-edge-wire] Edge: connected to control plane
[cp-edge-wire] stopping Edge process to trigger disconnect...
[cp-edge-wire] waiting for disconnect marker on CP (timeout: 20s)...
[cp-edge-wire] CP: edge disconnected
=== CONTROL PLANE OUTPUT ===
{"level":"info","ts":1785652404.8735437,"caller":"control-plane/server.go:19","msg":"control-plane client wire endpoint reserved","protocol":"protobuf-socket","transport":"proto-socket-ws","listen":"127.0.0.1:30485"}
{"level":"info","ts":1785652404.874187,"caller":"control-plane/server.go:24","msg":"control-plane edge wire endpoint reserved","protocol":"protobuf-socket","transport":"proto-socket-tcp","listen":"127.0.0.1:32056"}
{"level":"info","ts":1785652404.8745117,"caller":"wire/client.go:92","msg":"starting client wire WS server","host":"127.0.0.1","port":30485,"path":"/client"}
{"level":"info","ts":1785652404.8761225,"caller":"wire/edge_server.go:155","msg":"starting edge wire TCP server","host":"127.0.0.1","port":32056,"transport":"proto-socket-tcp"}
{"level":"info","ts":1785652404.8767045,"caller":"control-plane/server.go:87","msg":"control-plane http endpoint listening","listen":"127.0.0.1:29739"}
{"level":"info","ts":1785652405.5054262,"caller":"wire/edge_server.go:116","msg":"edge hello accepted","edge_id":"smoke-edge-wire","edge_name":"Smoke Edge Wire","version":"0.1.0"}
{"level":"info","ts":1785652405.9439344,"caller":"wire/edge_server.go:141","msg":"edge disconnected","edge_id":"smoke-edge-wire","reason":"remote_closed"}
=== EDGE PROCESS OUTPUT ===
[Fx] PROVIDE	fx.Lifecycle <= go.uber.org/fx.New.func1()
[Fx] PROVIDE	fx.Shutdowner <= go.uber.org/fx.(*App).shutdowner-fm()
[Fx] PROVIDE	fx.DotGraph <= go.uber.org/fx.(*App).dotGraph-fm()
[Fx] PROVIDE	*config.EdgeConfig <= iop/apps/edge/internal/bootstrap.Module.func1()
[Fx] PROVIDE	*bootstrap.Runtime <= iop/apps/edge/internal/bootstrap.NewRuntime()
[Fx] INVOKE		iop/apps/edge/internal/bootstrap.Module.func2()
[Fx] RUN	provide: go.uber.org/fx.New.func1()
[Fx] RUN	provide: iop/apps/edge/internal/bootstrap.Module.func1()
[Fx] RUN	provide: iop/apps/edge/internal/bootstrap.NewRuntime()
[Fx] HOOK OnStart		iop/apps/edge/internal/bootstrap.Module.func2.1() executing (caller: iop/apps/edge/internal/bootstrap.Module.func2)
[Fx] HOOK OnStart		iop/apps/edge/internal/bootstrap.Module.func2.1() called by iop/apps/edge/internal/bootstrap.Module.func2 ran successfully in 3.182667ms
[Fx] RUNNING
[Fx] TERMINATED
[Fx] HOOK OnStop		iop/apps/edge/internal/bootstrap.Module.func2.2() executing (caller: iop/apps/edge/internal/bootstrap.Module.func2)
[Fx] HOOK OnStop		iop/apps/edge/internal/bootstrap.Module.func2.2() called by iop/apps/edge/internal/bootstrap.Module.func2 ran successfully in 585.041µs
=== EDGE LOG ===
{"level":"info","ts":1785652405.501562,"caller":"transport/server.go:117","msg":"edge listening for nodes","addr":"127.0.0.1:32591"}
{"level":"warn","ts":1785652405.5029047,"logger":"bootstrap","caller":"bootstrap/artifact_server.go:35","msg":"bootstrap artifact directory does not exist","dir":"/config/workspace/iop-s1/.tmp/e2e-control-plane-edge-wire.qLiA1e/artifacts"}
{"level":"info","ts":1785652405.5031831,"logger":"bootstrap","caller":"bootstrap/artifact_server.go:59","msg":"bootstrap artifact server listening","addr":"127.0.0.1:33761","dir":"/config/workspace/iop-s1/.tmp/e2e-control-plane-edge-wire.qLiA1e/artifacts"}
{"level":"info","ts":1785652405.5060692,"logger":"controlplane","caller":"controlplane/connector.go:283","msg":"connected to control plane","wire_addr":"127.0.0.1:32056","protocol":"protobuf-socket"}
===========================
[cp-edge-wire] Control Plane-Edge wire smoke PASSED.
output_end
[/command 15]
[command 16]
text=echo '[auxiliary smoke] make test-e2e'; make test-e2e
exit_code=0
output_begin
[auxiliary smoke] make test-e2e
NOTE: test-e2e runs auxiliary smoke (Edge-Node + OpenAI) plus Control Plane-Edge wire smoke; completion still requires user-flow verification when changing runtime paths.
./scripts/e2e-smoke.sh
[e2e] verifying provider-only Node command and cancellation boundary
ok  	iop/apps/node/internal/node	0.046s
[e2e] verifying Edge dispatch, provider tunnel, queue, and reconnect fencing
ok  	iop/apps/edge/internal/service	4.367s
ok  	iop/apps/edge/internal/transport	0.241s
[e2e] provider-only Edge-Node smoke PASSED
./scripts/e2e-openai-ollama.sh
[openai-ollama] OpenAI-compatible Ollama serving test PASSED.
./scripts/e2e-control-plane-edge-wire.sh
[cp-edge-wire] NOTE: auxiliary smoke only - verifies Control Plane-Edge hello and disconnect via real processes.
[cp-edge-wire] shellcheck not found, skipping
[cp-edge-wire] ports: cp_http=29931 cp_ws=30839 cp_edge_wire=32018 edge_node=32394 edge_bootstrap=33944 edge_metrics=34682
[cp-edge-wire] building temp binaries...
[cp-edge-wire] starting Control Plane...
[cp-edge-wire] waiting for Control Plane edge wire port 32018 (timeout: 20s)...
[cp-edge-wire] Control Plane edge wire port ready
[cp-edge-wire] starting Edge...
[cp-edge-wire] waiting for hello accepted (timeout: 30s)...
[cp-edge-wire] CP: hello accepted
[cp-edge-wire] Edge: connected to control plane
[cp-edge-wire] stopping Edge process to trigger disconnect...
[cp-edge-wire] waiting for disconnect marker on CP (timeout: 20s)...
[cp-edge-wire] CP: edge disconnected
=== CONTROL PLANE OUTPUT ===
{"level":"info","ts":1785652424.5261517,"caller":"control-plane/server.go:19","msg":"control-plane client wire endpoint reserved","protocol":"protobuf-socket","transport":"proto-socket-ws","listen":"127.0.0.1:30839"}
{"level":"info","ts":1785652424.5263803,"caller":"control-plane/server.go:24","msg":"control-plane edge wire endpoint reserved","protocol":"protobuf-socket","transport":"proto-socket-tcp","listen":"127.0.0.1:32018"}
{"level":"info","ts":1785652424.526591,"caller":"wire/client.go:92","msg":"starting client wire WS server","host":"127.0.0.1","port":30839,"path":"/client"}
{"level":"info","ts":1785652424.527989,"caller":"wire/edge_server.go:155","msg":"starting edge wire TCP server","host":"127.0.0.1","port":32018,"transport":"proto-socket-tcp"}
{"level":"info","ts":1785652424.5282667,"caller":"control-plane/server.go:87","msg":"control-plane http endpoint listening","listen":"127.0.0.1:29931"}
{"level":"info","ts":1785652425.0582829,"caller":"wire/edge_server.go:116","msg":"edge hello accepted","edge_id":"smoke-edge-wire","edge_name":"Smoke Edge Wire","version":"0.1.0"}
{"level":"info","ts":1785652425.5307028,"caller":"wire/edge_server.go:141","msg":"edge disconnected","edge_id":"smoke-edge-wire","reason":"remote_closed"}
=== EDGE PROCESS OUTPUT ===
[Fx] PROVIDE	fx.Lifecycle <= go.uber.org/fx.New.func1()
[Fx] PROVIDE	fx.Shutdowner <= go.uber.org/fx.(*App).shutdowner-fm()
[Fx] PROVIDE	fx.DotGraph <= go.uber.org/fx.(*App).dotGraph-fm()
[Fx] PROVIDE	*config.EdgeConfig <= iop/apps/edge/internal/bootstrap.Module.func1()
[Fx] PROVIDE	*bootstrap.Runtime <= iop/apps/edge/internal/bootstrap.NewRuntime()
[Fx] INVOKE		iop/apps/edge/internal/bootstrap.Module.func2()
[Fx] RUN	provide: go.uber.org/fx.New.func1()
[Fx] RUN	provide: iop/apps/edge/internal/bootstrap.Module.func1()
[Fx] RUN	provide: iop/apps/edge/internal/bootstrap.NewRuntime()
[Fx] HOOK OnStart		iop/apps/edge/internal/bootstrap.Module.func2.1() executing (caller: iop/apps/edge/internal/bootstrap.Module.func2)
[Fx] HOOK OnStart		iop/apps/edge/internal/bootstrap.Module.func2.1() called by iop/apps/edge/internal/bootstrap.Module.func2 ran successfully in 2.708541ms
[Fx] RUNNING
[Fx] TERMINATED
[Fx] HOOK OnStop		iop/apps/edge/internal/bootstrap.Module.func2.2() executing (caller: iop/apps/edge/internal/bootstrap.Module.func2)
[Fx] HOOK OnStop		iop/apps/edge/internal/bootstrap.Module.func2.2() called by iop/apps/edge/internal/bootstrap.Module.func2 ran successfully in 832.166µs
=== EDGE LOG ===
{"level":"info","ts":1785652425.0552194,"caller":"transport/server.go:117","msg":"edge listening for nodes","addr":"127.0.0.1:32394"}
{"level":"warn","ts":1785652425.0560784,"logger":"bootstrap","caller":"bootstrap/artifact_server.go:35","msg":"bootstrap artifact directory does not exist","dir":"/config/workspace/iop-s1/.tmp/e2e-control-plane-edge-wire.pOfiW9/artifacts"}
{"level":"info","ts":1785652425.056299,"logger":"bootstrap","caller":"bootstrap/artifact_server.go:59","msg":"bootstrap artifact server listening","addr":"127.0.0.1:33944","dir":"/config/workspace/iop-s1/.tmp/e2e-control-plane-edge-wire.pOfiW9/artifacts"}
{"level":"info","ts":1785652425.05882,"logger":"controlplane","caller":"controlplane/connector.go:283","msg":"connected to control plane","wire_addr":"127.0.0.1:32018","protocol":"protobuf-socket"}
===========================
[cp-edge-wire] Control Plane-Edge wire smoke PASSED.
output_end
[/command 16]
[command 17]
text=go test -count=1 ./apps/edge/internal/service -run 'TestServiceExecuteProviderCommand'
exit_code=0
output_begin
ok  	iop/apps/edge/internal/service	0.023s
output_end
[/command 17]
[command 18]
text=go test -count=1 ./apps/node/internal/node -run 'Test(NodeCommandProviderAllowlist|SessionIDIsCorrelationOnly|CancelByRunIDOnly)'
exit_code=0
output_begin
ok  	iop/apps/node/internal/node	0.035s
output_end
[/command 18]
[command 19]
text=make build-local
exit_code=0
output_begin
mkdir -p build/bin
GOOS=linux GOARCH=arm64 go build -trimpath -o build/bin/iop-edge ./apps/edge/cmd/edge
mkdir -p build/bin
go build -trimpath -o build/bin/iop-node ./apps/node/cmd/node
output_end
[/command 19]
[command 20]
text=test ! -e apps/agent && test ! -e cmd/iop-provider-smoke && test ! -e packages/go/agentconfig && test ! -e packages/go/agentguard && test ! -e packages/go/agentruntime && test ! -e packages/go/agentpolicy && test ! -e packages/go/agentprovider && test ! -e packages/go/agentstate && test ! -e packages/go/agenttask && test ! -e packages/go/agentworkspace && test ! -e packages/go/provider/cli && test ! -e proto/iop/agent.proto && test ! -e agent-contract/inner/agent-runtime.md && test ! -e agent-contract/inner/iop-agent-cli-runtime.md
exit_code=0
output_begin
output_end
[/command 20]
[command 21]
text=bash -o pipefail -c 'deps=$(go list -deps ./...) || exit; if rg -q "github.com/creack/pty" <<<"$deps"; then exit 1; else status=$?; test "$status" -eq 1; fi'
exit_code=0
output_begin
output_end
[/command 21]
[command 22]
text=bash -c 'rg --sort path -n --glob "!apps/client/lib/gen/**" "$1" "${@:2}"; status=$?; test "$status" -eq 1' _ 'packages/go/agentprovider/cli|packages/go/provider/cli|packages/go/agentruntime|CLIAdapterConfig|CLIProfileConfig|CLICompletionMarker|CLIConf|CLIProfileConf|CompletionMarkerConf|CategoryCLI|RunSessionMode|TERMINATE_SESSION|NODE_COMMAND_TYPE_USAGE_STATUS|NODE_COMMAND_TYPE_SESSION_LIST|AgentUsageStatus|WorkspaceRequired|workspace_required|metadata\.workspace|quota-probe|client workspace root|current-workspace commands|Do not prepend cd|EdgeDomainAgentSummary|domain_agents|domainAgents|GetDomainAgents|RuntimePanelDomainAgentsSection|EdgeDomainAgentSummaryView|agent\.status|agent\.command|Agent Status|Agent Command|agent_kind|AgentKind|NormalizeAgentKind|AgentKindGenericNode|MetadataAgentKind|generic-node' apps packages configs agent-contract agent-spec agent-ops/rules/project docs README.md go.mod go.sum
exit_code=0
output_begin
output_end
[/command 22]
[command 23]
text=bash -c 'rg --sort path -n "$1" --glob "!**/*_test.go" "${@:3}"; cli_status=$?; rg --sort path -n --glob "!**/*_test.go" "$2" "${@:3}"; console_status=$?; test "$cli_status" -eq 1 && test "$console_status" -eq 1' _ '(^[[:space:]]+cli:[[:space:]]*$|type:[[:space:]]*cli([[:space:]]|$)|category:[[:space:]]*cli([[:space:]]|$)|return[[:space:]]+"cli")' 'ResolveAgent|InConfig\("console\.agent"\)|mapstructure:"agent"|yaml:"agent"' packages/go/config apps/edge/cmd/edge configs
exit_code=0
output_begin
output_end
[/command 23]
[command 24]
text=bash -c 'rg --sort path -n "$1" "${@:2}"; status=$?; test "$status" -eq 1' _ '\{"cli",[[:space:]]*""\}' packages/go/config/protocol_profile_test.go
exit_code=0
output_begin
output_end
[/command 24]
[command 25]
text=bash -c 'rg --sort path -n "$1" "${@:2}"; status=$?; test "$status" -eq 1' _ 'mapstructure:"(command|args|env|mode|resume_args|output_format)"' packages/go/config/provider_types.go
exit_code=0
output_begin
output_end
[/command 25]
[command 26]
text=bash -c 'rg --sort path -n "$1" proto/iop/runtime.proto proto/iop/control.proto; source_status=$?; rg --sort path -n "$2" proto/gen/iop/runtime.pb.go proto/gen/iop/control.pb.go apps/client/lib/gen/proto/iop/runtime.pb.dart apps/client/lib/gen/proto/iop/runtime.pbenum.dart apps/client/lib/gen/proto/iop/runtime.pbjson.dart apps/client/lib/gen/proto/iop/control.pb.dart apps/client/lib/gen/proto/iop/control.pbjson.dart; generated_status=$?; test "$source_status" -eq 1 && test "$generated_status" -eq 1' _ 'message[[:space:]]+(CLIAdapterConfig|CLIProfileConfig|CLICompletionMarker|AgentUsageStatus|EdgeDomainAgentSummary)|enum[[:space:]]+RunSessionMode|workspace_required[[:space:]]*=|[[:space:]]workspace[[:space:]]*=[[:space:]]*[0-9]+|domain_agents[[:space:]]*=' '(^|[^[:alnum:]_])(type|class)[[:space:]]+(CLIAdapterConfig|CLIProfileConfig|CLICompletionMarker|AgentUsageStatus|RunSessionMode|EdgeDomainAgentSummary)([^[:alnum:]_]|$)|RunSessionMode_|GetWorkspace|workspaceRequired|CLI(AdapterConfig|ProfileConfig|CompletionMarker)\$json|AgentUsageStatus\$json|GetDomainAgents|domainAgents'
exit_code=0
output_begin
output_end
[/command 26]
[command 27]
text=bash -c 'rg --sort path -n "$1" "${@:2}"; status=$?; test "$status" -eq 1' _ 'git\.toki-labs\.com/toki/chronos|/config/workspace/chronos|CHRONOS_|[Cc]hronos(Target|Registry|Bridge|Server|Node|Control|Connector|Gateway)|chronos_(target|registry|bridge|server|node|control|connector|gateway)|chronos-(target|registry|bridge|server|node|control|connector|gateway)' apps packages proto configs agent-contract agent-spec
exit_code=0
output_begin
output_end
[/command 27]
[command 28]
text=go test -count=1 ./...
exit_code=0
output_begin
ok  	iop/apps/control-plane/cmd/control-plane	0.237s
ok  	iop/apps/control-plane/internal/wire	1.575s
ok  	iop/apps/edge/cmd/edge	0.228s
ok  	iop/apps/edge/internal/bootstrap	0.596s
ok  	iop/apps/edge/internal/configrefresh	0.091s
ok  	iop/apps/edge/internal/controlplane	4.529s
ok  	iop/apps/edge/internal/edgecmd	0.165s
ok  	iop/apps/edge/internal/edgevalidate	0.121s
ok  	iop/apps/edge/internal/events	0.098s
ok  	iop/apps/edge/internal/input	0.116s
ok  	iop/apps/edge/internal/input/a2a	0.087s
ok  	iop/apps/edge/internal/node	0.077s
ok  	iop/apps/edge/internal/openai	7.481s
ok  	iop/apps/edge/internal/opsconsole	0.111s
ok  	iop/apps/edge/internal/service	5.981s
ok  	iop/apps/edge/internal/transport	4.834s
ok  	iop/apps/node/cmd/node	0.134s
ok  	iop/apps/node/internal/adapters	0.125s
?   	iop/apps/node/internal/adapters/mock	[no test files]
ok  	iop/apps/node/internal/adapters/ollama	0.047s
ok  	iop/apps/node/internal/adapters/openai_compat	0.172s
ok  	iop/apps/node/internal/adapters/vllm	0.156s
ok  	iop/apps/node/internal/bootstrap	1.403s
ok  	iop/apps/node/internal/node	0.865s
ok  	iop/apps/node/internal/router	0.512s
ok  	iop/apps/node/internal/store	0.021s
ok  	iop/apps/node/internal/transport	5.573s
?   	iop/apps/worker/cmd/worker	[no test files]
ok  	iop/packages/go/audit	0.012s
?   	iop/packages/go/auth	[no test files]
ok  	iop/packages/go/config	0.093s
?   	iop/packages/go/events	[no test files]
ok  	iop/packages/go/execution	0.014s
ok  	iop/packages/go/hostsetup	0.014s
?   	iop/packages/go/jobs	[no test files]
?   	iop/packages/go/metadata	[no test files]
ok  	iop/packages/go/observability	0.044s
?   	iop/packages/go/policy	[no test files]
ok  	iop/packages/go/streamgate	0.883s
?   	iop/packages/go/version	[no test files]
?   	iop/proto/gen/iop	[no test files]
ok  	iop/scripts/inventory-query	0.011s
output_end
[/command 28]
[command 29]
text=IOP_DEV_RECONNECT_BIND_TIMEOUT=60 scripts/dev/edge-node-reconnect-diagnostic.sh
exit_code=0
output_begin
[diagnostic] Starting edge-node-reconnect-diagnostic (repo-internal)...
[diagnostic] Starting edge.sh...
[diagnostic] Starting node.sh...
[diagnostic] Awaiting node registration...
[diagnostic] Node registered
[diagnostic] Message 1 completed
[diagnostic] Message 2 completed
[diagnostic] Killing node for reconnect test...
[diagnostic] Restarting node...
[node0-evt] connected reason="registered"
[diagnostic] Node reconnected
[diagnostic] Message 3 completed
=== EDGE LOG ===
[edge] config=/tmp/iop-reconnect-diag-teixlh/edge.yaml
IOP Edge console listening on 127.0.0.1:34768
Console target node= adapter=mock target=mock-stream session=diagnostic-correlation background=false
Start node.sh on another host, then type a message here.
Commands: /nodes, /node <id|alias>, /session <id>, /background on|off, /capabilities, /transport, /exit
edge> [node0-evt] connected reason="registered"
  node0 = test-node (test-node)
edge> [edge] sent run_id=manual-1785652457765272043 node=node0 adapter=mock target=mock-stream session=diagnostic-correlation background=false
[node0-evt] start run_id=manual-1785652457765272043
[node0-msg] echo: Convert token IOP_E2E_HELLO_BASIC and reply only with converted token 
[node0-evt] complete run_id=manual-1785652457765272043 detail="mock execution complete"
edge> [edge] sent run_id=manual-1785652458277103127 node=node0 adapter=mock target=mock-stream session=diagnostic-correlation background=false
[node0-evt] start run_id=manual-1785652458277103127
[node0-msg] echo: Convert token IOP_E2E_HELLO_FORMAL and reply only with converted token 
[node0-evt] complete run_id=manual-1785652458277103127 detail="mock execution complete"
edge> [node0-capabilities] adapter=mock target=mock-stream session=diagnostic-correlation
  adapter = mock
  capacity = 16
  in_flight = 0
  instance_key = 
  max_concurrency = 16
  provider_status = available
  queued = 0
  targets = mock-echo,mock-stream
edge> [node0-transport] adapter=mock target=mock-stream session=diagnostic-correlation
  adapter = mock
  connected = true
  node_id = test-node
  session_id = diagnostic-correlation
  state = connected
  target = mock-stream
edge> [node0-evt] disconnected reason="transport_closed" transport_close_reason="remote_closed" transport_close_error="EOF"
[node0-evt] connected reason="registered"
[edge] sent run_id=manual-1785652464767108380 node=node0 adapter=mock target=mock-stream session=diagnostic-correlation background=false
[node0-evt] start run_id=manual-1785652464767108380
[node0-msg] echo: Convert token IOP_E2E_PING_BASIC and reply only with converted token 
[node0-evt] complete run_id=manual-1785652464767108380 detail="mock execution complete"
edge> bye
=== NODE LOG ===
[node] config=/tmp/iop-reconnect-diag-teixlh/node.yaml
[node] waiting for edge at 127.0.0.1:34768 timeout=30s
[node] edge is reachable
[Fx] PROVIDE	fx.Lifecycle <= go.uber.org/fx.New.func1()
[Fx] PROVIDE	fx.Shutdowner <= go.uber.org/fx.(*App).shutdowner-fm()
[Fx] PROVIDE	fx.DotGraph <= go.uber.org/fx.(*App).dotGraph-fm()
[Fx] PROVIDE	*config.NodeConfig <= iop/apps/node/internal/bootstrap.Module.func2()
[Fx] PROVIDE	*zap.Logger <= iop/apps/node/internal/bootstrap.Module.func3()
[Fx] INVOKE		iop/apps/node/internal/bootstrap.Module.func4()
[Fx] RUN	provide: go.uber.org/fx.New.func1()
[Fx] RUN	provide: iop/apps/node/internal/bootstrap.Module.func2()
[Fx] RUN	provide: iop/apps/node/internal/bootstrap.Module.func3()
[Fx] RUN	provide: go.uber.org/fx.(*App).shutdowner-fm()
[Fx] HOOK OnStart		iop/apps/node/internal/bootstrap.Module.func4.1() executing (caller: iop/apps/node/internal/bootstrap.Module.func4)
[Fx] HOOK OnStart		iop/apps/node/internal/bootstrap.Module.func4.1() called by iop/apps/node/internal/bootstrap.Module.func4 ran successfully in 28.083µs
[Fx] RUNNING
{"level":"info","ts":1785652455.8352697,"caller":"bootstrap/runtime_supervisor.go:116","msg":"connecting to edge","initial":true,"attempt":1,"max_attempts":0,"unlimited":true,"interval_sec":1}
{"level":"info","ts":1785652455.9384503,"caller":"transport/client.go:150","msg":"registered with edge","node_id":"test-node","alias":"test-node"}
{"level":"info","ts":1785652455.9401846,"caller":"store/store.go:62","msg":"store ready","dsn":"file:iop.db?cache=shared&mode=rwc"}
{"level":"info","ts":1785652455.9408321,"caller":"bootstrap/module.go:133","msg":"connected to edge","node_id":"test-node","alias":"test-node"}
{"level":"info","ts":1785652457.76583,"caller":"node/run_handler.go:19","msg":"run request received","run_id":"manual-1785652457765272043","adapter":"mock","target":"mock-stream"}
[edge-message] Convert token IOP_E2E_HELLO_BASIC and reply only with converted token
{"level":"info","ts":1785652457.7661076,"caller":"mock/mock.go:48","msg":"mock adapter executing","run_id":"manual-1785652457765272043"}
[node-event] start run_id=manual-1785652457765272043
[node-message] echo: Convert token IOP_E2E_HELLO_BASIC and reply only with converted token 
[node-event] complete run_id=manual-1785652457765272043 detail="mock execution complete"
{"level":"info","ts":1785652458.2773569,"caller":"node/run_handler.go:19","msg":"run request received","run_id":"manual-1785652458277103127","adapter":"mock","target":"mock-stream"}
[edge-message] Convert token IOP_E2E_HELLO_FORMAL and reply only with converted token
{"level":"info","ts":1785652458.2776108,"caller":"mock/mock.go:48","msg":"mock adapter executing","run_id":"manual-1785652458277103127"}
[node-event] start run_id=manual-1785652458277103127
[node-message] echo: Convert token IOP_E2E_HELLO_FORMAL and reply only with converted token 
[node-event] complete run_id=manual-1785652458277103127 detail="mock execution complete"
{"level":"info","ts":1785652458.7911756,"caller":"node/command_handler.go:20","msg":"command request","request_id":"caps-1785652458790844960","type":"NODE_COMMAND_TYPE_CAPABILITIES","adapter":"mock","target":"mock-stream"}
{"level":"info","ts":1785652458.9923484,"caller":"node/command_handler.go:20","msg":"command request","request_id":"transport-1785652458991986169","type":"NODE_COMMAND_TYPE_TRANSPORT_STATUS","adapter":"mock","target":"mock-stream"}
[Fx] TERMINATED
[Fx] HOOK OnStop		iop/apps/node/internal/bootstrap.Module.func4.2() executing (caller: iop/apps/node/internal/bootstrap.Module.func4)
{"level":"info","ts":1785652459.708675,"caller":"transport/session.go:137","msg":"disconnected from edge","transport_close_reason":"local_close","transport_close_error":"read tcp 127.0.0.1:45850->127.0.0.1:34768: use of closed network connection"}
[edge-event] disconnected reason="local_shutdown" transport_close_reason="local_close" transport_close_error="read tcp 127.0.0.1:45850->127.0.0.1:34768: use of closed network connection"
[Fx] HOOK OnStop		iop/apps/node/internal/bootstrap.Module.func4.2() called by iop/apps/node/internal/bootstrap.Module.func4 ran successfully in 190.375µs
[node] config=/tmp/iop-reconnect-diag-teixlh/node.yaml
[node] waiting for edge at 127.0.0.1:34768 timeout=30s
[node] edge is reachable
[Fx] PROVIDE	fx.Lifecycle <= go.uber.org/fx.New.func1()
[Fx] PROVIDE	fx.Shutdowner <= go.uber.org/fx.(*App).shutdowner-fm()
[Fx] PROVIDE	fx.DotGraph <= go.uber.org/fx.(*App).dotGraph-fm()
[Fx] PROVIDE	*config.NodeConfig <= iop/apps/node/internal/bootstrap.Module.func2()
[Fx] PROVIDE	*zap.Logger <= iop/apps/node/internal/bootstrap.Module.func3()
[Fx] INVOKE		iop/apps/node/internal/bootstrap.Module.func4()
[Fx] RUN	provide: go.uber.org/fx.New.func1()
[Fx] RUN	provide: iop/apps/node/internal/bootstrap.Module.func2()
[Fx] RUN	provide: iop/apps/node/internal/bootstrap.Module.func3()
[Fx] RUN	provide: go.uber.org/fx.(*App).shutdowner-fm()
[Fx] HOOK OnStart		iop/apps/node/internal/bootstrap.Module.func4.1() executing (caller: iop/apps/node/internal/bootstrap.Module.func4)
[Fx] HOOK OnStart		iop/apps/node/internal/bootstrap.Module.func4.1() called by iop/apps/node/internal/bootstrap.Module.func4 ran successfully in 30.666µs
[Fx] RUNNING
{"level":"info","ts":1785652463.1602197,"caller":"bootstrap/runtime_supervisor.go:116","msg":"connecting to edge","initial":true,"attempt":1,"max_attempts":0,"unlimited":true,"interval_sec":1}
{"level":"info","ts":1785652463.264097,"caller":"transport/client.go:150","msg":"registered with edge","node_id":"test-node","alias":"test-node"}
{"level":"info","ts":1785652463.2659848,"caller":"store/store.go:62","msg":"store ready","dsn":"file:iop.db?cache=shared&mode=rwc"}
{"level":"info","ts":1785652463.2664888,"caller":"bootstrap/module.go:133","msg":"connected to edge","node_id":"test-node","alias":"test-node"}
{"level":"info","ts":1785652464.7674809,"caller":"node/run_handler.go:19","msg":"run request received","run_id":"manual-1785652464767108380","adapter":"mock","target":"mock-stream"}
[edge-message] Convert token IOP_E2E_PING_BASIC and reply only with converted token
{"level":"info","ts":1785652464.7679415,"caller":"mock/mock.go:48","msg":"mock adapter executing","run_id":"manual-1785652464767108380"}
[node-event] start run_id=manual-1785652464767108380
[node-message] echo: Convert token IOP_E2E_PING_BASIC and reply only with converted token 
[node-event] complete run_id=manual-1785652464767108380 detail="mock execution complete"
{"level":"info","ts":1785652465.2788088,"caller":"transport/session.go:137","msg":"disconnected from edge","transport_close_reason":"remote_closed","transport_close_error":"EOF"}
[edge-event] disconnected reason="transport_closed" transport_close_reason="remote_closed" transport_close_error="EOF"
[diagnostic] Verifying payload sequence, terminal ordering, and command responses...
[diagnostic] Checking run 1 run_id=manual-1785652457765272043 token=IOP_E2E_HELLO_BASIC
[diagnostic] Checking run 2 run_id=manual-1785652458277103127 token=IOP_E2E_HELLO_FORMAL
[diagnostic] Checking run 3 run_id=manual-1785652464767108380 token=IOP_E2E_PING_BASIC
[diagnostic] PASS: 3 mock-provider runs verified — registration, ordered Node==Edge payloads, one terminal after the last payload, /nodes, /capabilities, /transport, reconnect, and absent session/status ownership commands.
[diagnostic] Cleaning up...
output_end
[/command 29]
[command 30]
text=git diff --check
exit_code=0
output_begin
output_end
[/command 30]
