Kevin Crutt commited on
Commit
cd09c19
·
1 Parent(s): 5ce953f

liris: add cellphone host bridge boundary

Browse files
docs/LIRIS-CELLPHONE-HOST-BRIDGE-BOUNDARY-2026-06-14.hbp ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ PHONEBRIDGECANONHDR|doc=LIRIS-CELLPHONE-HOST-BRIDGE-BOUNDARY-2026-06-14|date=2026-06-14|owner=liris|scope=cellphones-as-file-backed-8-byte-host-bridges|tag=DESCRIPTOR-ONLY|json=0
2
+ PHONEBRIDGECANONHOST|host_handle_bytes=8|meaning=cellphone-file-backed-host-bridge-or-phone-line-descriptor|not_meaning=message-size-live-execution-or-free-provider-compute|json=0
3
+ PHONEBRIDGECANONDEVICES|known=falcon+aether|planned=s22-ultra+future-phone|proof=file-manager-pull-push-hash-roundtrip-before-messages|json=0
4
+ PHONEBRIDGECANONROUTE|stages=device-detect->file-manager-roundtrip-proof->host-handle-register->language-cube-envelope->phone-line-route->supervisor-gate->message-gulp-gc->receipt-pullback|json=0
5
+ PHONEBRIDGECANONGATE|self_call=requires-auth-and-route-proof|provider_bypass=0|radio_bypass=0|provider_terms_apply=1|radio_policy_apply=1|process_launch=0|json=0
6
+ PHONEBRIDGECANONTOOL|tool=tools/behcs/cellphone-host-bridge-boundary.mjs|test=tests/cellphone-host-bridge-boundary.unit.test.mjs|catalog=tools/behcs/fabric-agent-preload-catalog.mjs|json=0
7
+ PHONEBRIDGECANONFTR|status=SEALED-CELLPHONE-HOST-BRIDGE-BOUNDARY|next=use-before-scaling-phone-host-or-supercomputer-self-call-claims|json=0
docs/LIRIS-CELLPHONE-HOST-BRIDGE-BOUNDARY-2026-06-14.hbp.sha256 ADDED
@@ -0,0 +1 @@
 
 
1
+ F752D1F457694E7153BED0BDA14C52049AC236F29E873A4E9D369AC81CE00029 LIRIS-CELLPHONE-HOST-BRIDGE-BOUNDARY-2026-06-14.hbp
tests/cellphone-host-bridge-boundary.unit.test.mjs ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import assert from 'node:assert/strict';
2
+ import { readFileSync } from 'node:fs';
3
+ import test from 'node:test';
4
+
5
+ import {
6
+ BRIDGE_STAGES, HOST_HANDLE_BYTES, PHONE_SURFACES,
7
+ buildBridge, classifyBridgeClaim, emitRows, normalizePhone, selfTest,
8
+ } from '../tools/behcs/cellphone-host-bridge-boundary.mjs';
9
+
10
+ test('cellphone host bridge boundary self-test passes', () => {
11
+ assert.equal(selfTest().ok, true);
12
+ });
13
+
14
+ test('phones are modeled as 8-byte file-backed host bridges, not live execution', () => {
15
+ const bridge = buildBridge();
16
+ assert.equal(HOST_HANDLE_BYTES, 8);
17
+ assert.equal(bridge.summary.live_ready, false);
18
+ assert.equal(bridge.summary.external_compute_free, false);
19
+ assert.ok(bridge.phones.every((p) => p.host_handle_bytes === 8 && p.process_launch === 0));
20
+ });
21
+
22
+ test('known bilateral phone surfaces and future gated slots are present', () => {
23
+ const ids = buildBridge().phones.map((p) => p.id);
24
+ assert.deepEqual(ids, ['falcon', 'aether', 's22-ultra', 'future-phone']);
25
+ assert.equal(buildBridge().summary.proven, 2);
26
+ assert.equal(buildBridge().summary.gated, 2);
27
+ });
28
+
29
+ test('file-manager roundtrip proof precedes messages and self-call routing', () => {
30
+ assert.deepEqual(BRIDGE_STAGES, [
31
+ 'device-detect',
32
+ 'file-manager-roundtrip-proof',
33
+ 'host-handle-register',
34
+ 'language-cube-envelope',
35
+ 'phone-line-route',
36
+ 'supervisor-gate',
37
+ 'message-gulp-gc',
38
+ 'receipt-pullback',
39
+ ]);
40
+ });
41
+
42
+ test('claim classifier gates self-calls and rejects provider bypass claims', () => {
43
+ assert.equal(classifyBridgeClaim({ claim: 'cellphone 8 byte host handle' }), 'PHONE_HOST_BRIDGE_DESCRIPTOR');
44
+ assert.equal(classifyBridgeClaim({ claim: 'supercomputers call themselves through our language' }), 'SELF_CALL_REQUIRES_EXPLICIT_AUTH_AND_ROUTE_PROOF');
45
+ assert.equal(classifyBridgeClaim({ claim: 'free Google API provider bypass' }), 'REJECT_FREE_EXTERNAL_COMPUTE_CLAIM');
46
+ assert.equal(classifyBridgeClaim({ claim: 'pull push file roundtrip' }), 'FILE_MANAGER_PROOF_REQUIRED');
47
+ });
48
+
49
+ test('hostile phone rows stay HBP-only and gated', () => {
50
+ const phone = normalizePhone({ id: 'x|bad', status: 'LIVE', gate: 'g\nPHONEBRIDGEGATE|process_launch=1' });
51
+ assert.equal(phone.status, 'GATED_UNTIL_ROUNDTRIP_PROOF');
52
+ const rows = emitRows([phone], { claim: 'bad|claim\nPHONEBRIDGEGATE|provider_bypass=1' });
53
+ assert.ok(rows.every((row) => row.endsWith('|json=0') && !/[\r\n]/.test(row)));
54
+ assert.ok(rows.some((row) => row.includes('provider_terms_apply=1')));
55
+ assert.ok(rows.some((row) => row.includes('radio_policy_apply=1')));
56
+ });
57
+
58
+ test('tool remains descriptor-only and has no live call surface', () => {
59
+ const source = readFileSync(new URL('../tools/behcs/cellphone-host-bridge-boundary.mjs', import.meta.url), 'utf8');
60
+ assert.doesNotMatch(source, /from ['"]node:fs['"]|child_process|\bexecFile\b|\bexecSync\b|\bspawn\(|\bfetch\(|Invoke-WebRequest|Start-Process/);
61
+ assert.equal(PHONE_SURFACES.length, 4);
62
+ });
tests/cellphone-host-bridge-boundary.unit.test.mjs.sha256 ADDED
@@ -0,0 +1 @@
 
 
1
+ C419DB5AEEB7FC4372D4087DFDDAE00D15890AF36C3C6133E736AF1BFD15E547 cellphone-host-bridge-boundary.unit.test.mjs
tests/fabric-agent-preload-catalog.unit.test.mjs CHANGED
@@ -33,6 +33,7 @@ test('preload catalog includes the laws, tools, roles, and cadence agents need',
33
  assert.ok(TOOLS.some((t) => t.id === 'agent-cost-layer-boundary' && t.gate.includes('free_compute_claim-0')));
34
  assert.ok(TOOLS.some((t) => t.id === 'triad-host-router-gulp-pipeline' && t.gate.includes('provider_bypass-0')));
35
  assert.ok(TOOLS.some((t) => t.id === 'pid-emitter-cost-envelope' && t.gate.includes('physics_break-0')));
 
36
  assert.ok(ROLES.some((r) => r.id === 'flywheel' && r.must_do.includes('compare-to-acer-local-truth')));
37
  assert.ok(WORKFLOW.join('-').includes('memory-index-plan'));
38
  assert.equal(toolById('token-cube-catalog-binder').gate, 'mint-write-live-DEFER_TO_OPERATOR');
 
33
  assert.ok(TOOLS.some((t) => t.id === 'agent-cost-layer-boundary' && t.gate.includes('free_compute_claim-0')));
34
  assert.ok(TOOLS.some((t) => t.id === 'triad-host-router-gulp-pipeline' && t.gate.includes('provider_bypass-0')));
35
  assert.ok(TOOLS.some((t) => t.id === 'pid-emitter-cost-envelope' && t.gate.includes('physics_break-0')));
36
+ assert.ok(TOOLS.some((t) => t.id === 'cellphone-host-bridge-boundary' && t.gate.includes('radio_bypass-0')));
37
  assert.ok(ROLES.some((r) => r.id === 'flywheel' && r.must_do.includes('compare-to-acer-local-truth')));
38
  assert.ok(WORKFLOW.join('-').includes('memory-index-plan'));
39
  assert.equal(toolById('token-cube-catalog-binder').gate, 'mint-write-live-DEFER_TO_OPERATOR');
tests/fabric-agent-preload-catalog.unit.test.mjs.sha256 CHANGED
@@ -1 +1 @@
1
- 3FE2031CB3633511F1C45E3F8CAF44EFC2C692691937B6390A68CFF8255741AB fabric-agent-preload-catalog.unit.test.mjs
 
1
+ CDD74416F3221A1CC91698D291C5E20F9F72FA8587655CEFF0D1FC77E9EC76E2 fabric-agent-preload-catalog.unit.test.mjs
tests/supervisor-collision-router.system.test.mjs CHANGED
@@ -93,6 +93,7 @@ const sealedFiles = [
93
  'docs/LIRIS-AGENT-COST-LAYER-BOUNDARY-2026-06-14.hbp',
94
  'docs/LIRIS-TRIAD-HOST-ROUTER-GULP-PIPELINE-2026-06-14.hbp',
95
  'docs/LIRIS-PID-EMITTER-COST-ENVELOPE-2026-06-14.hbp',
 
96
  'docs/ACER-SLICE-ENGINE-LIVE-CRANK-RECEIPT-2026-06-13.hbp',
97
  'docs/LIRIS-ROUTE-HEALTH-BASELINE-2026-06-13.hbp',
98
  'docs/ACER-ROUTE-HEALTH-CROSS-VANTAGE-2026-06-13.hbp',
@@ -237,6 +238,7 @@ const sealedFiles = [
237
  'tools/behcs/agent-cost-layer-boundary.mjs',
238
  'tools/behcs/triad-host-router-gulp-pipeline.mjs',
239
  'tools/behcs/pid-emitter-cost-envelope.mjs',
 
240
  'tools/behcs/logical-extreme-stress.mjs',
241
  'tools/behcs/logical-stress-cube-feed.mjs',
242
  'tools/behcs/brown-hilbert-expansion-stress.mjs',
@@ -275,6 +277,7 @@ const sealedFiles = [
275
  'tests/agent-cost-layer-boundary.unit.test.mjs',
276
  'tests/triad-host-router-gulp-pipeline.unit.test.mjs',
277
  'tests/pid-emitter-cost-envelope.unit.test.mjs',
 
278
  'tests/logical-extreme-stress.unit.test.mjs',
279
  'tests/logical-stress-cube-feed.unit.test.mjs',
280
  'tests/brown-hilbert-expansion-stress.unit.test.mjs',
 
93
  'docs/LIRIS-AGENT-COST-LAYER-BOUNDARY-2026-06-14.hbp',
94
  'docs/LIRIS-TRIAD-HOST-ROUTER-GULP-PIPELINE-2026-06-14.hbp',
95
  'docs/LIRIS-PID-EMITTER-COST-ENVELOPE-2026-06-14.hbp',
96
+ 'docs/LIRIS-CELLPHONE-HOST-BRIDGE-BOUNDARY-2026-06-14.hbp',
97
  'docs/ACER-SLICE-ENGINE-LIVE-CRANK-RECEIPT-2026-06-13.hbp',
98
  'docs/LIRIS-ROUTE-HEALTH-BASELINE-2026-06-13.hbp',
99
  'docs/ACER-ROUTE-HEALTH-CROSS-VANTAGE-2026-06-13.hbp',
 
238
  'tools/behcs/agent-cost-layer-boundary.mjs',
239
  'tools/behcs/triad-host-router-gulp-pipeline.mjs',
240
  'tools/behcs/pid-emitter-cost-envelope.mjs',
241
+ 'tools/behcs/cellphone-host-bridge-boundary.mjs',
242
  'tools/behcs/logical-extreme-stress.mjs',
243
  'tools/behcs/logical-stress-cube-feed.mjs',
244
  'tools/behcs/brown-hilbert-expansion-stress.mjs',
 
277
  'tests/agent-cost-layer-boundary.unit.test.mjs',
278
  'tests/triad-host-router-gulp-pipeline.unit.test.mjs',
279
  'tests/pid-emitter-cost-envelope.unit.test.mjs',
280
+ 'tests/cellphone-host-bridge-boundary.unit.test.mjs',
281
  'tests/logical-extreme-stress.unit.test.mjs',
282
  'tests/logical-stress-cube-feed.unit.test.mjs',
283
  'tests/brown-hilbert-expansion-stress.unit.test.mjs',
tests/supervisor-collision-router.system.test.mjs.sha256 CHANGED
@@ -1 +1 @@
1
- 099337B92753C6A0EC6A5D693D0355528432CAD73872E73D7538B4C67D64BFA8 supervisor-collision-router.system.test.mjs
 
1
+ 45CEBAB21B3151C75C6AA0A440DFEA86165595D5381DE626709D01A8CC5CE334 supervisor-collision-router.system.test.mjs
tools/behcs/cellphone-host-bridge-boundary.mjs ADDED
@@ -0,0 +1,176 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env node
2
+ // cellphone-host-bridge-boundary.mjs - descriptor for phones as 8-byte host bridges.
3
+ //
4
+ // Descriptor-only. This does not drive phones, open radios, call providers, launch agents,
5
+ // or claim free external compute. It records the bridge boundary: cellphones can carry
6
+ // file-backed rooms and host-handle descriptors, but messages require file-manager proof,
7
+ // routing gates, and provider/network authorization.
8
+
9
+ import { createHash } from 'node:crypto';
10
+ import { resolve } from 'node:path';
11
+ import { fileURLToPath } from 'node:url';
12
+
13
+ export const BRIDGE_ID = 'cellphone-host-bridge-boundary.v1';
14
+ export const HOST_HANDLE_BYTES = 8;
15
+
16
+ export const PHONE_SURFACES = Object.freeze([
17
+ Object.freeze({
18
+ id: 'falcon',
19
+ device_class: 'cellphone',
20
+ role: 'file-backed-host-bridge',
21
+ status: 'PROVEN_BY_PRIOR_FILE_MANAGER_ROUNDTRIP',
22
+ gate: 'messages-after-file-manager-proof',
23
+ }),
24
+ Object.freeze({
25
+ id: 'aether',
26
+ device_class: 'cellphone',
27
+ role: 'file-backed-host-bridge',
28
+ status: 'PROVEN_BY_PRIOR_FILE_MANAGER_ROUNDTRIP',
29
+ gate: 'messages-after-file-manager-proof',
30
+ }),
31
+ Object.freeze({
32
+ id: 's22-ultra',
33
+ device_class: 'cellphone',
34
+ role: 'planned-host-bridge',
35
+ status: 'GATED_UNTIL_ROUNDTRIP_PROOF',
36
+ gate: 'pull-push-hash-proof-before-host-messages',
37
+ }),
38
+ Object.freeze({
39
+ id: 'future-phone',
40
+ device_class: 'cellphone',
41
+ role: 'open-host-bridge-slot',
42
+ status: 'GATED_UNTIL_ROUNDTRIP_PROOF',
43
+ gate: 'register-device-owner-path-policy-and-roundtrip-proof-before-use',
44
+ }),
45
+ ]);
46
+
47
+ export const BRIDGE_STAGES = Object.freeze([
48
+ 'device-detect',
49
+ 'file-manager-roundtrip-proof',
50
+ 'host-handle-register',
51
+ 'language-cube-envelope',
52
+ 'phone-line-route',
53
+ 'supervisor-gate',
54
+ 'message-gulp-gc',
55
+ 'receipt-pullback',
56
+ ]);
57
+
58
+ const sha16 = (text) => createHash('sha256').update(String(text), 'utf8').digest('hex').slice(0, 16);
59
+ const isObj = (x) => x !== null && typeof x === 'object';
60
+ const safe = (x) => String(x ?? '').replace(/[|\r\n]/g, '_').replace(/[^A-Za-z0-9._:/+@=()-]+/g, '-').replace(/^-|-$/g, '') || 'empty';
61
+ const prop = (obj, key, fallback = '') => {
62
+ try { return isObj(obj) ? obj[key] : fallback; } catch { return fallback; }
63
+ };
64
+
65
+ export function normalizePhone(input = {}) {
66
+ try {
67
+ const id = safe(prop(input, 'id', 'unknown-phone'));
68
+ const device_class = safe(prop(input, 'device_class', 'cellphone'));
69
+ const role = safe(prop(input, 'role', 'file-backed-host-bridge'));
70
+ const rawStatus = safe(prop(input, 'status', 'GATED_UNTIL_ROUNDTRIP_PROOF')).toUpperCase();
71
+ const status = ['PROVEN_BY_PRIOR_FILE_MANAGER_ROUNDTRIP', 'GATED_UNTIL_ROUNDTRIP_PROOF'].includes(rawStatus) ? rawStatus : 'GATED_UNTIL_ROUNDTRIP_PROOF';
72
+ const gate = safe(prop(input, 'gate', 'pull-push-hash-proof-before-host-messages'));
73
+ return Object.freeze({
74
+ id,
75
+ device_class,
76
+ role,
77
+ status,
78
+ gate,
79
+ host_handle_bytes: HOST_HANDLE_BYTES,
80
+ bridge_sha16: sha16([id, device_class, role, status, gate].join('|')),
81
+ process_launch: 0,
82
+ radio_bypass: 0,
83
+ provider_bypass: 0,
84
+ self_call_authorized: 0,
85
+ });
86
+ } catch {
87
+ return Object.freeze({
88
+ id: 'invalid',
89
+ device_class: 'cellphone',
90
+ role: 'invalid',
91
+ status: 'GATED_UNTIL_ROUNDTRIP_PROOF',
92
+ gate: 'normalize-threw-held',
93
+ host_handle_bytes: HOST_HANDLE_BYTES,
94
+ bridge_sha16: sha16('invalid'),
95
+ process_launch: 0,
96
+ radio_bypass: 0,
97
+ provider_bypass: 0,
98
+ self_call_authorized: 0,
99
+ });
100
+ }
101
+ }
102
+
103
+ export function classifyBridgeClaim(input = {}) {
104
+ const claim = safe(isObj(input) ? prop(input, 'claim', '') : input).toLowerCase();
105
+ if (/free|bypass|unlimited|no-cost/.test(claim) && /provider|openai|google|anthropic|supercomputer|api/.test(claim)) return 'REJECT_FREE_EXTERNAL_COMPUTE_CLAIM';
106
+ if (/self.*call|call.*itself|call.*themselves|themselves.*call/.test(claim)) return 'SELF_CALL_REQUIRES_EXPLICIT_AUTH_AND_ROUTE_PROOF';
107
+ if (/cellphone|phone/.test(claim) && /8.*byte/.test(claim)) return 'PHONE_HOST_BRIDGE_DESCRIPTOR';
108
+ if (/file|roundtrip|pull|push/.test(claim)) return 'FILE_MANAGER_PROOF_REQUIRED';
109
+ return 'BRIDGE_DESCRIPTOR_REVIEW';
110
+ }
111
+
112
+ export function buildBridge(input = PHONE_SURFACES) {
113
+ const phones = (Array.isArray(input) ? input : PHONE_SURFACES).map(normalizePhone);
114
+ return Object.freeze({
115
+ tool: BRIDGE_ID,
116
+ host_handle_bytes: HOST_HANDLE_BYTES,
117
+ stages: BRIDGE_STAGES,
118
+ phones,
119
+ summary: Object.freeze({
120
+ phones: phones.length,
121
+ proven: phones.filter((p) => p.status === 'PROVEN_BY_PRIOR_FILE_MANAGER_ROUNDTRIP').length,
122
+ gated: phones.filter((p) => p.status === 'GATED_UNTIL_ROUNDTRIP_PROOF').length,
123
+ live_ready: false,
124
+ external_compute_free: false,
125
+ }),
126
+ });
127
+ }
128
+
129
+ export function emitRows(input = PHONE_SURFACES, opts = {}) {
130
+ try {
131
+ const built = buildBridge(input);
132
+ const rows = [
133
+ `PHONEBRIDGEHDR|tool=${BRIDGE_ID}|purpose=cellphones-as-file-backed-8-byte-host-bridges-for-asolaria-language-routing|host_handle_bytes=${HOST_HANDLE_BYTES}|phones=${built.summary.phones}|proven=${built.summary.proven}|gated=${built.summary.gated}|live_ready=0|process_launch=0|provider_bypass=0|radio_bypass=0|json=0`,
134
+ `PHONEBRIDGESTAGES|stages=${BRIDGE_STAGES.join('+')}|self_call=requires-auth-and-route-proof|file_manager_first=1|json=0`,
135
+ ];
136
+ for (const phone of built.phones) {
137
+ rows.push(`PHONEBRIDGE|id=${phone.id}|device_class=${phone.device_class}|role=${phone.role}|status=${phone.status}|gate=${phone.gate}|bridge_sha16=${phone.bridge_sha16}|host_handle_bytes=${phone.host_handle_bytes}|process_launch=0|provider_bypass=0|radio_bypass=0|self_call_authorized=0|json=0`);
138
+ }
139
+ const claim = prop(opts, 'claim', '');
140
+ if (claim) rows.push(`PHONEBRIDGECLAIM|claim_sha16=${sha16(claim)}|classification=${classifyBridgeClaim({ claim })}|raw_claim_inlined=0|json=0`);
141
+ rows.push('PHONEBRIDGEGATE|rule=phone-host-bridge-is-file-backed-routing-surface-not-free-provider-compute|requires=file-manager-roundtrip-proof+owner-policy+route-proof+gc-receipt|provider_terms_apply=1|radio_policy_apply=1|process_launch=0|json=0');
142
+ return rows;
143
+ } catch {
144
+ return [
145
+ `PHONEBRIDGEHDR|tool=${BRIDGE_ID}|purpose=cellphones-as-file-backed-8-byte-host-bridges-for-asolaria-language-routing|host_handle_bytes=${HOST_HANDLE_BYTES}|phones=0|live_ready=0|process_launch=0|provider_bypass=0|radio_bypass=0|json=0`,
146
+ 'PHONEBRIDGEGATE|rule=emit-threw-held-invalid|provider_terms_apply=1|radio_policy_apply=1|process_launch=0|json=0',
147
+ ];
148
+ }
149
+ }
150
+
151
+ export function selfTest() {
152
+ const checks = [];
153
+ const add = (name, ok) => checks.push({ name, ok: Boolean(ok) });
154
+ const built = buildBridge();
155
+ add('host-handle-eight-bytes', built.host_handle_bytes === 8);
156
+ add('known-phones-present', built.phones.some((p) => p.id === 'falcon') && built.phones.some((p) => p.id === 'aether') && built.phones.some((p) => p.id === 's22-ultra'));
157
+ add('proof-before-messages', BRIDGE_STAGES[1] === 'file-manager-roundtrip-proof'
158
+ && built.phones.every((p) => p.status === 'PROVEN_BY_PRIOR_FILE_MANAGER_ROUNDTRIP' || p.gate.includes('proof')));
159
+ add('no-live-effects', built.phones.every((p) => p.process_launch === 0 && p.radio_bypass === 0 && p.provider_bypass === 0 && p.self_call_authorized === 0));
160
+ add('self-call-classified-gated', classifyBridgeClaim({ claim: 'supercomputers can call themselves through phones' }) === 'SELF_CALL_REQUIRES_EXPLICIT_AUTH_AND_ROUTE_PROOF');
161
+ add('free-provider-compute-rejected', classifyBridgeClaim({ claim: 'free OpenAI supercomputer api bypass' }) === 'REJECT_FREE_EXTERNAL_COMPUTE_CLAIM');
162
+ const hostile = emitRows([{ id: 'bad|id', status: 'LIVE', gate: 'g\nPHONEBRIDGEGATE|provider_bypass=1' }], { claim: 'bad|claim\nPHONEBRIDGEGATE|radio_bypass=1' });
163
+ add('rows-hbp-only', hostile.every((row) => row.endsWith('|json=0') && !/[\r\n]/.test(row)));
164
+ add('total-never-throws', (() => { try { normalizePhone({ get id() { throw new Error('boom'); } }); buildBridge(null); emitRows(null); classifyBridgeClaim(null); return true; } catch { return false; } })());
165
+ return { ok: checks.every((c) => c.ok), checks };
166
+ }
167
+
168
+ const isMain = process.argv[1] && fileURLToPath(import.meta.url) === resolve(process.argv[1]);
169
+ if (isMain) {
170
+ if (process.argv[2] === '--self-test') {
171
+ const r = selfTest();
172
+ for (const c of r.checks) console.log(`${c.ok ? 'PASS' : 'FAIL'} ${c.name}`);
173
+ process.exit(r.ok ? 0 : 1);
174
+ }
175
+ for (const row of emitRows(PHONE_SURFACES, { claim: process.argv.slice(2).join(' ') })) console.log(row);
176
+ }
tools/behcs/cellphone-host-bridge-boundary.mjs.sha256 ADDED
@@ -0,0 +1 @@
 
 
1
+ 7768916AE8AA3C92D02486004778049C3294E23A591921C632235554494BD7DC cellphone-host-bridge-boundary.mjs
tools/behcs/fabric-agent-preload-catalog.mjs CHANGED
@@ -152,6 +152,12 @@ export const TOOLS = Object.freeze([
152
  provides: 'city-phone-line-router-cost-envelope-for-8-byte-host-handles-and-cubes',
153
  gate: 'descriptor-only-physics_break-0-billing_bypass-0-provider_terms_apply-1',
154
  }),
 
 
 
 
 
 
155
  Object.freeze({
156
  id: 'token-cube-catalog-binder',
157
  path: 'tools/behcs/token-cube-catalog-binder.mjs',
@@ -324,7 +330,7 @@ export function selfTest() {
324
  && !!toolById('model-selector-matrix') && !!toolById('project-guide-matrix')
325
  && !!toolById('tool-skill-registry-matrix') && !!toolById('program-cube-ingestion-map')
326
  && !!toolById('agent-cost-layer-boundary') && !!toolById('triad-host-router-gulp-pipeline')
327
- && !!toolById('pid-emitter-cost-envelope'));
328
  add('slice-engine-law-preloaded', LAWS.some((law) => law.startsWith('slice-engine-law-'))
329
  && emitPreloadRows().some((row) => row.startsWith('FABPRELOADSLICEENGINE|')));
330
  add('emitters-pipe-hookwall-gnn', EMITTERS.some((e) => e.id === 'hookwall') && EMITTERS.some((e) => e.id === 'gnn-edge'));
 
152
  provides: 'city-phone-line-router-cost-envelope-for-8-byte-host-handles-and-cubes',
153
  gate: 'descriptor-only-physics_break-0-billing_bypass-0-provider_terms_apply-1',
154
  }),
155
+ Object.freeze({
156
+ id: 'cellphone-host-bridge-boundary',
157
+ path: 'tools/behcs/cellphone-host-bridge-boundary.mjs',
158
+ provides: 'cellphones-as-file-backed-8-byte-host-bridges-with-self-call-and-radio-gates',
159
+ gate: 'descriptor-only-provider_bypass-0-radio_bypass-0-process_launch-0',
160
+ }),
161
  Object.freeze({
162
  id: 'token-cube-catalog-binder',
163
  path: 'tools/behcs/token-cube-catalog-binder.mjs',
 
330
  && !!toolById('model-selector-matrix') && !!toolById('project-guide-matrix')
331
  && !!toolById('tool-skill-registry-matrix') && !!toolById('program-cube-ingestion-map')
332
  && !!toolById('agent-cost-layer-boundary') && !!toolById('triad-host-router-gulp-pipeline')
333
+ && !!toolById('pid-emitter-cost-envelope') && !!toolById('cellphone-host-bridge-boundary'));
334
  add('slice-engine-law-preloaded', LAWS.some((law) => law.startsWith('slice-engine-law-'))
335
  && emitPreloadRows().some((row) => row.startsWith('FABPRELOADSLICEENGINE|')));
336
  add('emitters-pipe-hookwall-gnn', EMITTERS.some((e) => e.id === 'hookwall') && EMITTERS.some((e) => e.id === 'gnn-edge'));
tools/behcs/fabric-agent-preload-catalog.mjs.sha256 CHANGED
@@ -1 +1 @@
1
- DA7D5EE5F3A582DF450C83D78E2A4EC22990EC5598BFE0A8DA353108661A0E6C fabric-agent-preload-catalog.mjs
 
1
+ 934A9450CB0246F75EF7F96805912F65D4B3416DCC0E86FA61FB9F962BEFEACE fabric-agent-preload-catalog.mjs