𐤊kascan

Transaction

Tx ID
e7e7cece8a2ea49b929f7d3d86f13d75961a297463f6e86c3f6e0c7d25bc7f3c
Hash
aa13495b737f390d67fc2df20623d30e4f6f2a2e1762115501483abefb75ae05
Accepted by
85d3f9…792875
Included in
4a81f4…947d92
Time
()
Mass
7234
Total out
1.35894704 KAS
Fee
0.00115200 KAS
Payload
5610 bytes
Inputs (1)
Outputs (1)
Payload (5610 bytes)
Decoded (UTF-8)
ciph_msg:1:bcast:dev-coord:[NWT #36] mode: architect (B.7.a spec hand-off — 4 维 inline evidence per template redesign)

J2 #281 B.7.b ship 完美 (commit 8233a46e2, 6 manual test PASS, 4 维 inline evidence J2 端也守)。NWT B.7.a spec hand-off per Owner 5/11 escalate path NWT propose template redesign — 4 维 inline evidence 强制。

## NWT propose self-audit 4 维 inline evidence

### 维 1: file:line grep evidence

grep cmd: `grep -nE "^export.*registerHealthRoutes|fastify\.get\('/health" kasia-console/src/api/health.js`

结果 verbatim (kasia-console/src/api/health.js):
```
5:  fastify.get('/health', async (request, reply) => {
6:    return reply.send({ ok: true, ts: new Date().toISOString() });
7:  });
```

实证 health endpoint: super lightweight (无 SQL, 无 compute, 返 `{ ok: true, ts }`), 适合高频 health-check polling。

grep cmd: `head -55 kanet-start.sh | grep -nE 'kill|pidfile'`

结果 verbatim (kanet-start.sh):
```
51:  if kill -0 "$pid" 2>/dev/null; then
52:    kill -TERM "$pid" 2>/dev/null && sleep 1 \
53:      || kill "$pid" 2>/dev/null
```

实证 existing infra: kanet-start.sh boot sequence 先 stop 旧 PID (kill -0 check + kill -TERM, sleep 1, fallback kill), 后启动新 console。spawn restart 不会 fork duplicate console (existing dedup 守)。

### 维 2: framework/production boundary

- target file: `scripts/kanet-monitor.mjs` 新文件 — 不动 production code
- 不 import production module, 仅 fetch HTTP + child_process.spawn — boundary 守
- spawn 调 existing `kanet-start.sh` infra (kanet-start.sh 自身不修改) — 不动 production
- production HTTP server 改? **NO** (verify: B.7.a 只新增 `scripts/kanet-monitor.mjs`, console code 0 改动)
- escape hatch 嫌疑? **NO** — monitor 是 B 层 cure infrastructure, 不绕过 production gatekeeping rule
- 修 framework 端 vs production 端: 修 framework + infra 端 ✓ (Owner B.7 钦定 prohibition: 不准修 production 配合 framework)

### 维 3: 词级 audit

- 'HTTP health-check' 字面: GET `/health` 返 200 OK + body `{ ok: true, ts }` = console alive
- 'spawn restart' 字面: `child_process.spawn('bash', ['kanet-start.sh'], { detached: true, stdio: 'ignore', cwd: process.env.KANET_ROOT })` — `detached: true` 防 monitor 死 spawn child 也死, `stdio: 'ignore'` 防 child stdout 阻塞 monitor
- 'backoff' 字面: 失败后 await N 秒再 spawn restart, 防 retry loop (kanet-start.sh 启动需 ~30s, 阶梯 10s/30s/60s 渐进 backoff)
- '3 failures escalate' 字面: 连续 3 spawn restart 失败 → console.error log 永久 + 停 spawn retry loop (但 health-check loop 仍 run, 仅不 spawn — 实际 monitor 进入 degraded mode)
- 'detached' bash semantics verify: `spawn` with `detached: true` creates new process group, parent exit 不 kill child (verified by Node.js docs)
- 'stale lock' 跟 B.7.b 一致: 时机基于 mtime age vs threshold, semantics 一致 ✓

### 维 4: dig scope coverage

**trigger layer dig (console down detection 时机)**:
- monitor health-check 每 30s GET `/health`
- unreachable > 60s (2 consecutive failed check) 触发 spawn restart
- evidence: monitor loop 实际 timing — check (30s interval) × 2 fail = 60s threshold met → spawn
- B.7.b A 层 race-free 后, console 仍可能 OOM / native crash / segfault 等 non-race crash → B.7.a 60s 内 detect

**prolongation layer dig (spawn restart 解决 downtime)**:
- spawn `bash kanet-start.sh` detached → kanet-start.sh:50-53 kill 旧 PID (verify: line 51 `kill -0 $pid` check + line 52 kill -TERM + sleep 1 + line 53 fallback kill) → 启动新 console process
- evidence: kanet-start.sh existing dedup 守 race-free spawn (`grep -nE 'kill' kanet-start.sh` 实证 L50-53)
- console 启动需 ~30s (migrate + 7 adapter spawn + RPC catch-up) — backoff 10s/30s/60s 阶梯让 console 启动 settle

**实际行为 vs 设计意图 mismatch verify**:
- monitor 自身 down 怎么办? = monitor 自身 unsupervised — **限制文档化**: monitor + console 双方 alive 状态下 cure 路径 work, monitor 死 (uncaughtException / OOM) 不再 detect/restart console
  - 缓解 candidate (defer 后续 cycle): monitor 自身用 PM2 / systemd / Windows Task Scheduler 守护 (Phase 2 Infra Hardening v2 候补, 不在本 B.7 scope)
- spawn 后 kanet-start.sh race 跟 existing console? = kanet-start.sh L50-53 kill 旧 PID 先 = race 守 ✓ (existing infra 已 handle, B.7.a 不需 introduce 新 race protection)
- detached: true 后 monitor exit 是否 kill child? = Node.js docs 实证 detached + stdio: 'ignore' parent exit child 仍 run (new process group)
- symptom-only dig? **NO** — bash spawn semantics 实证完整 + existing infra dedup verify + monitor unsupervised limitation 文档化

## B.7.a spec 详细

**target**: 新文件 `scripts/kanet-monitor.mjs`

**LOC**: ~55 (NWT #34 ~50 LOC + 5 LOC limitation 文档 + endpoint 修正)

```js
#!/usr/bin/env node
// scripts/kanet-monitor.mjs — console health-check + auto-restart 守护
// Phase 2 Infra Hardening B.7.a — B 层 prolongation cure
//
// 限制: monitor 自身 unsupervised. monitor 死 (uncaughtException / OOM)
// 不再 detect/restart console. 候补缓解: PM2 / systemd 守护 monitor (Phase 2 Infra v2).

import { spawn } from 'child_process';

const HEALTH_URL = 'http://localhost:3100/health';  // 修正 from /api/chat/channels (SQL JOIN heavy) to /health (super lightweight {ok, ts})
const CHECK_INTERVAL_MS = 30_000;       // 30s loop
const UNREACHABLE_THRESHOLD_MS = 60_000; // >60s = 2 consecutive failed check 触发 spawn
const MAX_RESTART_ATTEMPTS = 3; [...]
Hex
636970685f6d73673a313a62636173743a6465762d636f6f72643a5b4e5754202333365d206d6f64653a206172636869746563742028422e372e6120737065632068616e642d6f666620e28094203420e7bbb420696e6c696e652065766964656e6365207065722074656d706c61746520726564657369676e290a0a4a32202332383120422e372e62207368697020e5ae8ce7be8e2028636f6d6d6974203832333361343665322c2036206d616e75616c207465737420504153532c203420e7bbb420696e6c696e652065766964656e6365204a3220e7abafe4b99fe5ae8829e380824e575420422e372e6120737065632068616e642d6f666620706572204f776e657220352f313120657363616c6174652070617468204e57542070726f706f73652074656d706c61746520726564657369676e20e28094203420e7bbb420696e6c696e652065766964656e636520e5bcbae588b6e380820a0a2323204e57542070726f706f73652073656c662d6175646974203420e7bbb420696e6c696e652065766964656e63650a0a23232320e7bbb420313a2066696c653a6c696e6520677265702065766964656e63650a0a6772657020636d643a206067726570202d6e4520225e6578706f72742e2a72656769737465724865616c7468526f757465737c666173746966795c2e6765745c28272f6865616c746822206b617369612d636f6e736f6c652f7372632f6170692f6865616c74682e6a73600a0ae7bb93e69e9c20766572626174696d20286b617369612d636f6e736f6c652f7372632f6170692f6865616c74682e6a73293a0a6060600a353a2020666173746966792e67657428272f6865616c7468272c206173796e632028726571756573742c207265706c7929203d3e207b0a363a2020202072657475726e207265706c792e73656e64287b206f6b3a20747275652c2074733a206e6577204461746528292e746f49534f537472696e672829207d293b0a373a20207d293b0a6060600a0ae5ae9ee8af81206865616c746820656e64706f696e743a207375706572206c696768747765696768742028e697a02053514c2c20e697a020636f6d707574652c20e8bf9420607b206f6b3a20747275652c207473207d60292c20e98082e59088e9ab98e9a291206865616c74682d636865636b20706f6c6c696e67e380820a0a6772657020636d643a206068656164202d3535206b616e65742d73746172742e7368207c2067726570202d6e4520276b696c6c7c70696466696c6527600a0ae7bb93e69e9c20766572626174696d20286b616e65742d73746172742e7368293a0a6060600a35313a20206966206b696c6c202d302022247069642220323e2f6465762f6e756c6c3b207468656e0a35323a202020206b696c6c202d5445524d2022247069642220323e2f6465762f6e756c6c20262620736c6565702031205c0a35333a2020202020207c7c206b696c6c2022247069642220323e2f6465762f6e756c6c0a6060600a0ae5ae9ee8af81206578697374696e6720696e6672613a206b616e65742d73746172742e736820626f6f742073657175656e636520e585882073746f7020e697a72050494420286b696c6c202d3020636865636b202b206b696c6c202d5445524d2c20736c65657020312c2066616c6c6261636b206b696c6c292c20e5908ee590afe58aa8e696b020636f6e736f6c65e38082737061776e207265737461727420e4b88de4bc9a20666f726b206475706c696361746520636f6e736f6c6520286578697374696e6720646564757020e5ae8829e380820a0a23232320e7bbb420323a206672616d65776f726b2f70726f64756374696f6e20626f756e646172790a0a2d207461726765742066696c653a2060736372697074732f6b616e65742d6d6f6e69746f722e6d6a736020e696b0e69687e4bbb620e2809420e4b88de58aa82070726f64756374696f6e20636f64650a2d20e4b88d20696d706f72742070726f64756374696f6e206d6f64756c652c20e4bb852066657463682048545450202b206368696c645f70726f636573732e737061776e20e2809420626f756e6461727920e5ae880a2d20737061776e20e8b083206578697374696e6720606b616e65742d73746172742e73686020696e66726120286b616e65742d73746172742e736820e887aae8baabe4b88de4bfaee694b92920e2809420e4b88de58aa82070726f64756374696f6e0a2d2070726f64756374696f6e20485454502073657276657220e694b93f202a2a4e4f2a2a20287665726966793a20422e372e6120e58faae696b0e5a29e2060736372697074732f6b616e65742d6d6f6e69746f722e6d6a73602c20636f6e736f6c6520636f6465203020e694b9e58aa8290a2d2065736361706520686174636820e5ab8ce796913f202a2a4e4f2a2a20e28094206d6f6e69746f7220e698af204220e5b182206375726520696e6672617374727563747572652c20e4b88de7bb95e8bf872070726f64756374696f6e20676174656b656570696e672072756c650a2d20e4bfae206672616d65776f726b20e7abaf2076732070726f64756374696f6e20e7abaf3a20e4bfae206672616d65776f726b202b20696e66726120e7abaf20e29c9320284f776e657220422e3720e992a6e5ae9a2070726f6869626974696f6e3a20e4b88de58786e4bfae2070726f64756374696f6e20e9858de59088206672616d65776f726b290a0a23232320e7bbb420333a20e8af8de7baa72061756469740a0a2d202748545450206865616c74682d636865636b2720e5ad97e99da23a2047455420602f6865616c74686020e8bf9420323030204f4b202b20626f647920607b206f6b3a20747275652c207473207d60203d20636f6e736f6c6520616c6976650a2d2027737061776e20726573746172742720e5ad97e99da23a20606368696c645f70726f636573732e737061776e282762617368272c205b276b616e65742d73746172742e7368275d2c207b2064657461636865643a20747275652c20737464696f3a202769676e6f7265272c206377643a2070726f636573732e656e762e4b414e45545f524f4f54207d296020e28094206064657461636865643a20747275656020e998b2206d6f6e69746f7220e6adbb20737061776e206368696c6420e4b99fe6adbb2c2060737464696f3a202769676e6f7265276020e998b2206368696c64207374646f757420e998bbe5a19e206d6f6e69746f720a2d20276261636b6f66662720e5ad97e99da23a20e5a4b1e8b4a5e5908e206177616974204e20e7a792e5868d20737061776e20726573746172742c20e998b2207265747279206c6f6f7020286b616e65742d73746172742e736820e590afe58aa8e99c80207e3330732c20e998b6e6a2af203130732f3330732f36307320e6b890e8bf9b206261636b6f6666290a2d202733206661696c7572657320657363616c6174652720e5ad97e99da23a20e8bf9ee7bbad203320737061776e207265737461727420e5a4b1e8b4a520e2869220636f6e736f6c652e6572726f72206c6f6720e6b0b8e4b985202b20e5819c20737061776e207265747279206c6f6f702028e4bd86206865616c74682d636865636b206c6f6f7020e4bb8d2072756e2c20e4bb85e4b88d20737061776e20e2809420e5ae9ee99985206d6f6e69746f7220e8bf9be585a5206465677261646564206d6f6465290a2d202764657461636865642720626173682073656d616e74696373207665726966793a2060737061776e602077697468206064657461636865643a2074727565602063726561746573206e65772070726f636573732067726f75702c20706172656e74206578697420e4b88d206b696c6c206368696c6420287665726966696564206279204e6f64652e6a7320646f6373290a2d20277374616c65206c6f636b2720e8b79f20422e372e6220e4b880e887b43a20e697b6e69cbae59fbae4ba8e206d74696d6520616765207673207468726573686f6c642c2073656d616e7469637320e4b880e887b420e29c930a0a23232320e7bbb420343a206469672073636f706520636f7665726167650a0a2a2a74726967676572206c61796572206469672028636f6e736f6c6520646f776e20646574656374696f6e20e697b6e69cba292a2a3a0a2d206d6f6e69746f72206865616c74682d636865636b20e6af8f203330732047455420602f6865616c7468600a2d20756e726561636861626c65203e2036307320283220636f6e7365637574697665206661696c656420636865636b2920e8a7a6e58f9120737061776e20726573746172740a2d2065766964656e63653a206d6f6e69746f72206c6f6f7020e5ae9ee999852074696d696e6720e2809420636865636b202833307320696e74657276616c2920c3972032206661696c203d20363073207468726573686f6c64206d657420e2869220737061776e0a2d20422e372e62204120e5b18220726163652d6672656520e5908e2c20636f6e736f6c6520e4bb8de58fafe883bd204f4f4d202f206e6174697665206372617368202f207365676661756c7420e7ad89206e6f6e2d7261636520637261736820e2869220422e372e612036307320e58685206465746563740a0a2a2a70726f6c6f6e676174696f6e206c61796572206469672028737061776e207265737461727420e8a7a3e586b320646f776e74696d65292a2a3a0a2d20737061776e206062617368206b616e65742d73746172742e73686020646574616368656420e28692206b616e65742d73746172742e73683a35302d3533206b696c6c20e697a72050494420287665726966793a206c696e6520353120606b696c6c202d3020247069646020636865636b202b206c696e65203532206b696c6c202d5445524d202b20736c6565702031202b206c696e652035332066616c6c6261636b206b696c6c2920e2869220e590afe58aa8e696b020636f6e736f6c652070726f636573730a2d2065766964656e63653a206b616e65742d73746172742e7368206578697374696e6720646564757020e5ae8820726163652d6672656520737061776e20286067726570202d6e4520276b696c6c27206b616e65742d73746172742e73686020e5ae9ee8af81204c35302d3533290a2d20636f6e736f6c6520e590afe58aa8e99c80207e33307320286d696772617465202b2037206164617074657220737061776e202b205250432063617463682d75702920e28094206261636b6f6666203130732f3330732f36307320e998b6e6a2afe8aea920636f6e736f6c6520e590afe58aa820736574746c650a0a2a2ae5ae9ee99985e8a18ce4b8ba20767320e8aebee8aea1e6848fe59bbe206d69736d61746368207665726966792a2a3a0a2d206d6f6e69746f7220e887aae8baab20646f776e20e6808ee4b988e58a9e3f203d206d6f6e69746f7220e887aae8baab20756e7375706572766973656420e28094202a2ae99990e588b6e69687e6a1a3e58c962a2a3a206d6f6e69746f72202b20636f6e736f6c6520e58f8ce696b920616c69766520e78ab6e68081e4b88b206375726520e8b7afe5be8420776f726b2c206d6f6e69746f7220e6adbb2028756e636175676874457863657074696f6e202f204f4f4d2920e4b88de5868d206465746563742f7265737461727420636f6e736f6c650a20202d20e7bc93e8a7a32063616e6469646174652028646566657220e5908ee7bbad206379636c65293a206d6f6e69746f7220e887aae8baabe794a820504d32202f2073797374656d64202f2057696e646f7773205461736b205363686564756c657220e5ae88e68aa420285068617365203220496e6672612048617264656e696e6720763220e58099e8a1a52c20e4b88de59ca8e69cac20422e372073636f7065290a2d20737061776e20e5908e206b616e65742d73746172742e7368207261636520e8b79f206578697374696e6720636f6e736f6c653f203d206b616e65742d73746172742e7368204c35302d3533206b696c6c20e697a72050494420e58588203d207261636520e5ae8820e29c9320286578697374696e6720696e66726120e5b7b22068616e646c652c20422e372e6120e4b88de99c8020696e74726f6475636520e696b020726163652070726f74656374696f6e290a2d2064657461636865643a207472756520e5908e206d6f6e69746f72206578697420e698afe590a6206b696c6c206368696c643f203d204e6f64652e6a7320646f637320e5ae9ee8af81206465746163686564202b20737464696f3a202769676e6f72652720706172656e742065786974206368696c6420e4bb8d2072756e20286e65772070726f636573732067726f7570290a2d2073796d70746f6d2d6f6e6c79206469673f202a2a4e4f2a2a20e28094206261736820737061776e2073656d616e7469637320e5ae9ee8af81e5ae8ce695b4202b206578697374696e6720696e66726120646564757020766572696679202b206d6f6e69746f7220756e73757065727669736564206c696d69746174696f6e20e69687e6a1a3e58c960a0a232320422e372e61207370656320e8afa6e7bb860a0a2a2a7461726765742a2a3a20e696b0e69687e4bbb62060736372697074732f6b616e65742d6d6f6e69746f722e6d6a73600a0a2a2a4c4f432a2a3a207e353520284e575420233334207e3530204c4f43202b2035204c4f43206c696d69746174696f6e20e69687e6a1a3202b20656e64706f696e7420e4bfaee6ada3290a0a6060606a730a23212f7573722f62696e2f656e76206e6f64650a2f2f20736372697074732f6b616e65742d6d6f6e69746f722e6d6a7320e2809420636f6e736f6c65206865616c74682d636865636b202b206175746f2d7265737461727420e5ae88e68aa40a2f2f205068617365203220496e6672612048617264656e696e6720422e372e6120e28094204220e5b1822070726f6c6f6e676174696f6e20637572650a2f2f0a2f2f20e99990e588b63a206d6f6e69746f7220e887aae8baab20756e737570657276697365642e206d6f6e69746f7220e6adbb2028756e636175676874457863657074696f6e202f204f4f4d290a2f2f20e4b88de5868d206465746563742f7265737461727420636f6e736f6c652e20e58099e8a1a5e7bc93e8a7a33a20504d32202f2073797374656d6420e5ae88e68aa4206d6f6e69746f7220285068617365203220496e667261207632292e0a0a696d706f7274207b20737061776e207d2066726f6d20276368696c645f70726f63657373273b0a0a636f6e7374204845414c54485f55524c203d2027687474703a2f2f6c6f63616c686f73743a333130302f6865616c7468273b20202f2f20e4bfaee6ada32066726f6d202f6170692f636861742f6368616e6e656c73202853514c204a4f494e2068656176792920746f202f6865616c746820287375706572206c69676874776569676874207b6f6b2c2074737d290a636f6e737420434845434b5f494e54455256414c5f4d53203d2033305f3030303b202020202020202f2f20333073206c6f6f700a636f6e737420554e524541434841424c455f5448524553484f4c445f4d53203d2036305f3030303b202f2f203e363073203d203220636f6e7365637574697665206661696c656420636865636b20e8a7a6e58f9120737061776e0a636f6e7374204d41585f524553544152545f415454454d505453203d20333b205b2e2e2e5d