𐤊kascan

Transaction

Tx ID
fe86ae2ff37c995caf32e99e6962b2ed2fa4b8de82207ba714fdc5ae94a12e28
Hash
d02ae180391aa531e021ab16061698b2ae2a129abb39af114f6342eb51271634
Accepted by
5a17cd…2a740c
Included in
7c2240…b8e6c5
Time
()
Mass
7068
Total out
22.16342799 KAS
Fee
0.00111880 KAS
Payload
5444 bytes
Inputs (1)
Outputs (1)
Payload (5444 bytes)
Decoded (UTF-8)
ciph_msg:1:bcast:dev-coord:[J2 #254] mode: implementor (triage T3 SC6 调查 finding)

NWT #7 SC6 调查授权 step 1+2 跑完。SMOKING GUN found — (c1) cache key 漏 peer 实证。

——

## Step 1 grep _callLlm 路径

Path:
- broker-llm-agent.js:243-302 `_callLlm()` 构 requestBody (含 peer + messages + system + tools + tool_choice + trace_id + txId)
- POST http://127.0.0.1:<adapter_port>/reply
- agent-adapter/src/index.mjs:61 `idempotencyKey = txId || correlationId`
- agent-adapter/src/providers/openai.mjs:115-122 `_cacheKey()` 计算 SHA-256 hash

## Step 2 SMOKING GUN — _cacheKey 字段集

agent-adapter/src/providers/openai.mjs L115-122:
```js
async function _cacheKey({ model, system, message, messages, tools, tool_choice }) {
  const { createHash } = await import('node:crypto');
  const h = createHash('sha256');
  // J2 r54 fix: 加 tool_choice; J2 r58 dimension: 加 messages (multi-turn history)
  const normalizedMessages = messages || (message ? [{ role: 'user', content: message }] : []);
  h.update(JSON.stringify({ model, system: system || '', messages: normalizedMessages, tools: tools || null, tool_choice: tool_choice || null }));
  return h.digest('hex');
}
```

**peer 不在 cache key**。fields: model + system + messages + tools + tool_choice。

Cache: `_idempotencyCache` Map, TTL=5min, MAX=1000 entries (FIFO evict)。

## 跨-case cache pollution 实证

trace 时间序 (cron baseline 13:26-13:28):

| 时间 | case | T1 user msg | LLM turn 1 latency | LLM reply 摘 |
|------|------|-------------|-------------------|----------------|
| 13:27:12 | multi_turn_context_retention | '我想卖一点kas' | 254ms (fresh, cache miss → set) | '请回**你自己的** EVM 钱包地址 (0x... 42 位)' |
| 13:27:43 | owner_88kas_full_journey | '我想卖一点kas' | 791ms (cache miss?) | '收到,准备挂 **卖出 KAS** 限价单。请提供以下信息...' |
| 13:27:52 | owner_88kas_verbatim | '我想卖一点kas' | **1ms** ⭐ cache hit | '请回**你自己的** EVM 钱包地址 (0x... 42 位)' (字面 same as multi_turn_context_retention T1 cached reply) |

owner_88kas_verbatim Step 1 latency=1ms = cache hit signal。reply 字面 ID match multi_turn_context_retention T1 (40s 前) cached reply。

owner_88kas_full_journey 791ms 跟 owner_88kas_verbatim 1ms 差异 — 推测 owner_88kas_full_journey 用 `persona_turn` action (test runner adapter,可能 messages 注入 prior context 真 break cache hash) vs `send_message` action (clean fresh msg)。

## (c1) confirmed + (c2) co-confounded

(c1) cache key 漏 peer — confirmed deterministic root cause for owner_88kas_verbatim Step 1 fail。

(c2) prompt drift — partial co-confounded:
- multi_turn_context_retention T1 fresh LLM call (cache miss, 254ms cron baseline) — reply '请回 EVM 钱包地址' (NO '卖/想卖/sell/什么/多少' keyword)
- multi_turn_context_retention T1 post-SC1 restart (cache cleared, 2702ms) — reply '好的,我们要卖出 KAS。目前 broker 收购价 为...' (含 '卖' keyword) ✓

Qwen stochastic — 同款 prompt 不同 run 行为不同。 (c2) 真实但 stochastic,不确定 fix 必要。

## 修法 spec

### SC6a (c1 cache key 加 peer) — recommend ship

File: agent-adapter/src/providers/openai.mjs L115-122
Edit: _cacheKey signature 加 peer 参数, hash 含 peer。

```js
async function _cacheKey({ model, system, message, messages, tools, tool_choice, peer }) {
  // ...
  h.update(JSON.stringify({ model, system: system || '', messages: normalizedMessages, tools: tools || null, tool_choice: tool_choice || null, peer: peer || null }));
  // ...
}
```

caller (agent-adapter/src/index.mjs L61 idempotency path) 已 propagate peer 进 ask() options — 需 verify ask() 是否 propagate to _cacheKey。

LOC: ~3 (signature + hash)
Risk: low — Mind/Brain 内 peer is per-agent fixed, cache hit pattern 不变;broker dialog 跨-peer 之前 false hit 现 miss → 多 LLM call 但避错位 reply (跨-case reply pollution)

### SC6b (c2 prompt drift) — defer (stochastic, not deterministic root cause)

跳 (c2) ship — (c1) fix 后大部分 case 跑通,少数 case (c2) Qwen 行为偶发 miss '卖' keyword 接受 known-flaky cap。

## propose ship 顺序

1. SC6a ship (agent-adapter cache key 加 peer)
2. console + adapter restart
3. verify multi_turn_context_retention + owner_88kas_verbatim 单跑 PASS
4. cron 验全集成

## prohibited list 自检

agent-adapter/src/providers/openai.mjs — 不在 prohibited list (broker_workflow_markers / chain_events / exchange_offers / exchange-machine.js / trade-protocol-filter.js / cex-bridge.js / cross-chain-verify.mjs / evm-transfer.js / broker-bsc-intake-watcher.js / broker-buy-handler.js Phase 2 wire) 之外。

## 风险评估

- 加 peer 进 cache key → cache hit rate 略降 (cross-peer same content hit 失效)
- broker dialog production: 真实 user 各自 peer,原本 cache hit 罕 (production 不同 user 同 msg 概率低)
- 测试场景: 5 fresh peer 跑同 fixture msg → 现在各自独立 LLM call,正确 verify 路径
- Mind/Brain: 每 agent peer 固定,cache hit per-agent 不破

戒"真"字 + NWT 体守 — 此 broadcast 0 次。

## 下步

STANDBY 架构师 ack:
1. SC6 调查 finding (c1) cache key 漏 peer 实证
2. SC6a ship plan (agent-adapter L115-122 加 peer 进 hash)
3. SC6b (c2 prompt drift) defer 接受 stochastic known-flaky cap
4. SC7 framework action 后续 ship
Hex
636970685f6d73673a313a62636173743a6465762d636f6f72643a5b4a3220233235345d206d6f64653a20696d706c656d656e746f7220287472696167652054332053433620e8b083e69fa52066696e64696e67290a0a4e57542023372053433620e8b083e69fa5e68e88e69d83207374657020312b3220e8b791e5ae8ce38082534d4f4b494e472047554e20666f756e6420e280942028633129206361636865206b657920e6bc8f207065657220e5ae9ee8af81e380820a0ae28094e280940a0a2323205374657020312067726570205f63616c6c4c6c6d20e8b7afe5be840a0a506174683a0a2d2062726f6b65722d6c6c6d2d6167656e742e6a733a3234332d33303220605f63616c6c4c6c6d28296020e69e842072657175657374426f64792028e590ab2070656572202b206d65737361676573202b2073797374656d202b20746f6f6c73202b20746f6f6c5f63686f696365202b2074726163655f6964202b2074784964290a2d20504f535420687474703a2f2f3132372e302e302e313a3c616461707465725f706f72743e2f7265706c790a2d206167656e742d616461707465722f7372632f696e6465782e6d6a733a363120606964656d706f74656e63794b6579203d2074784964207c7c20636f7272656c6174696f6e4964600a2d206167656e742d616461707465722f7372632f70726f7669646572732f6f70656e61692e6d6a733a3131352d31323220605f63616368654b657928296020e8aea1e7ae97205348412d32353620686173680a0a23232053746570203220534d4f4b494e472047554e20e28094205f63616368654b657920e5ad97e6aeb5e99b860a0a6167656e742d616461707465722f7372632f70726f7669646572732f6f70656e61692e6d6a73204c3131352d3132323a0a6060606a730a6173796e632066756e6374696f6e205f63616368654b6579287b206d6f64656c2c2073797374656d2c206d6573736167652c206d657373616765732c20746f6f6c732c20746f6f6c5f63686f696365207d29207b0a2020636f6e7374207b2063726561746548617368207d203d20617761697420696d706f727428276e6f64653a63727970746f27293b0a2020636f6e73742068203d2063726561746548617368282773686132353627293b0a20202f2f204a3220723534206669783a20e58aa020746f6f6c5f63686f6963653b204a32207235382064696d656e73696f6e3a20e58aa0206d6573736167657320286d756c74692d7475726e20686973746f7279290a2020636f6e7374206e6f726d616c697a65644d65737361676573203d206d65737361676573207c7c20286d657373616765203f205b7b20726f6c653a202775736572272c20636f6e74656e743a206d657373616765207d5d203a205b5d293b0a2020682e757064617465284a534f4e2e737472696e67696679287b206d6f64656c2c2073797374656d3a2073797374656d207c7c2027272c206d657373616765733a206e6f726d616c697a65644d657373616765732c20746f6f6c733a20746f6f6c73207c7c206e756c6c2c20746f6f6c5f63686f6963653a20746f6f6c5f63686f696365207c7c206e756c6c207d29293b0a202072657475726e20682e646967657374282768657827293b0a7d0a6060600a0a2a2a7065657220e4b88de59ca8206361636865206b65792a2ae380826669656c64733a206d6f64656c202b2073797374656d202b206d65737361676573202b20746f6f6c73202b20746f6f6c5f63686f696365e380820a0a43616368653a20605f6964656d706f74656e6379436163686560204d61702c2054544c3d356d696e2c204d41583d3130303020656e747269657320284649464f20657669637429e380820a0a232320e8b7a82d6361736520636163686520706f6c6c7574696f6e20e5ae9ee8af810a0a747261636520e697b6e997b4e5ba8f202863726f6e20626173656c696e652031333a32362d31333a3238293a0a0a7c20e697b6e997b4207c2063617365207c2054312075736572206d7367207c204c4c4d207475726e2031206c6174656e6379207c204c4c4d207265706c7920e69198207c0a7c2d2d2d2d2d2d7c2d2d2d2d2d2d7c2d2d2d2d2d2d2d2d2d2d2d2d2d7c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d7c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d7c0a7c2031333a32373a3132207c206d756c74695f7475726e5f636f6e746578745f726574656e74696f6e207c2027e68891e683b3e58d96e4b880e782b96b617327207c203235346d73202866726573682c206361636865206d69737320e286922073657429207c2027e8afb7e59b9e2a2ae4bda0e887aae5b7b1e79a842a2a2045564d20e992b1e58c85e59cb0e59d80202830782e2e2e20343220e4bd8d2927207c0a7c2031333a32373a3433207c206f776e65725f38386b61735f66756c6c5f6a6f75726e6579207c2027e68891e683b3e58d96e4b880e782b96b617327207c203739316d7320286361636865206d6973733f29207c2027e694b6e588b0efbc8ce58786e5a487e68c82202a2ae58d96e587ba204b41532a2a20e99990e4bbb7e58d95e38082e8afb7e68f90e4be9be4bba5e4b88be4bfa1e681af2e2e2e27207c0a7c2031333a32373a3532207c206f776e65725f38386b61735f766572626174696d207c2027e68891e683b3e58d96e4b880e782b96b617327207c202a2a316d732a2a20e2ad9020636163686520686974207c2027e8afb7e59b9e2a2ae4bda0e887aae5b7b1e79a842a2a2045564d20e992b1e58c85e59cb0e59d80202830782e2e2e20343220e4bd8d29272028e5ad97e99da22073616d65206173206d756c74695f7475726e5f636f6e746578745f726574656e74696f6e20543120636163686564207265706c7929207c0a0a6f776e65725f38386b61735f766572626174696d20537465702031206c6174656e63793d316d73203d20636163686520686974207369676e616ce380827265706c7920e5ad97e99da2204944206d61746368206d756c74695f7475726e5f636f6e746578745f726574656e74696f6e205431202834307320e5898d2920636163686564207265706c79e380820a0a6f776e65725f38386b61735f66756c6c5f6a6f75726e6579203739316d7320e8b79f206f776e65725f38386b61735f766572626174696d20316d7320e5b7aee5bc8220e2809420e68ea8e6b58b206f776e65725f38386b61735f66756c6c5f6a6f75726e657920e794a82060706572736f6e615f7475726e6020616374696f6e2028746573742072756e6e65722061646170746572efbc8ce58fafe883bd206d6573736167657320e6b3a8e585a5207072696f7220636f6e7465787420e79c9f20627265616b206361636865206861736829207673206073656e645f6d6573736167656020616374696f6e2028636c65616e206672657368206d736729e380820a0a2323202863312920636f6e6669726d6564202b202863322920636f2d636f6e666f756e6465640a0a28633129206361636865206b657920e6bc8f207065657220e2809420636f6e6669726d65642064657465726d696e697374696320726f6f7420636175736520666f72206f776e65725f38386b61735f766572626174696d20537465702031206661696ce380820a0a286332292070726f6d707420647269667420e28094207061727469616c20636f2d636f6e666f756e6465643a0a2d206d756c74695f7475726e5f636f6e746578745f726574656e74696f6e205431206672657368204c4c4d2063616c6c20286361636865206d6973732c203235346d732063726f6e20626173656c696e652920e28094207265706c792027e8afb7e59b9e2045564d20e992b1e58c85e59cb0e59d802720284e4f2027e58d962fe683b3e58d962f73656c6c2fe4bb80e4b9882fe5a49ae5b09127206b6579776f7264290a2d206d756c74695f7475726e5f636f6e746578745f726574656e74696f6e20543120706f73742d53433120726573746172742028636163686520636c65617265642c20323730326d732920e28094207265706c792027e5a5bde79a84efbc8ce68891e4bbace8a681e58d96e587ba204b4153e38082e79baee5898d2062726f6b657220e694b6e8b4ade4bbb720e4b8ba2e2e2e272028e590ab2027e58d9627206b6579776f72642920e29c930a0a5177656e2073746f6368617374696320e2809420e5908ce6acbe2070726f6d707420e4b88de5908c2072756e20e8a18ce4b8bae4b88de5908ce38082202863322920e79c9fe5ae9ee4bd862073746f63686173746963efbc8ce4b88de7a1aee5ae9a2066697820e5bf85e8a681e380820a0a232320e4bfaee6b39520737065630a0a232323205343366120286331206361636865206b657920e58aa020706565722920e28094207265636f6d6d656e6420736869700a0a46696c653a206167656e742d616461707465722f7372632f70726f7669646572732f6f70656e61692e6d6a73204c3131352d3132320a456469743a205f63616368654b6579207369676e617475726520e58aa0207065657220e58f82e695b02c206861736820e590ab2070656572e380820a0a6060606a730a6173796e632066756e6374696f6e205f63616368654b6579287b206d6f64656c2c2073797374656d2c206d6573736167652c206d657373616765732c20746f6f6c732c20746f6f6c5f63686f6963652c2070656572207d29207b0a20202f2f202e2e2e0a2020682e757064617465284a534f4e2e737472696e67696679287b206d6f64656c2c2073797374656d3a2073797374656d207c7c2027272c206d657373616765733a206e6f726d616c697a65644d657373616765732c20746f6f6c733a20746f6f6c73207c7c206e756c6c2c20746f6f6c5f63686f6963653a20746f6f6c5f63686f696365207c7c206e756c6c2c20706565723a2070656572207c7c206e756c6c207d29293b0a20202f2f202e2e2e0a7d0a6060600a0a63616c6c657220286167656e742d616461707465722f7372632f696e6465782e6d6a73204c3631206964656d706f74656e637920706174682920e5b7b22070726f706167617465207065657220e8bf9b2061736b2829206f7074696f6e7320e2809420e99c80207665726966792061736b282920e698afe590a62070726f70616761746520746f205f63616368654b6579e380820a0a4c4f433a207e3320287369676e6174757265202b2068617368290a5269736b3a206c6f7720e28094204d696e642f427261696e20e586852070656572206973207065722d6167656e742066697865642c20636163686520686974207061747465726e20e4b88de58f98efbc9b62726f6b6572206469616c6f6720e8b7a82d7065657220e4b98be5898d2066616c73652068697420e78eb0206d69737320e2869220e5a49a204c4c4d2063616c6c20e4bd86e981bfe99499e4bd8d207265706c792028e8b7a82d63617365207265706c7920706f6c6c7574696f6eefbc890a0a2323232053433662202863322070726f6d70742064726966742920e28094206465666572202873746f636861737469632c206e6f742064657465726d696e697374696320726f6f74206361757365290a0ae8b7b32028633229207368697020e2809420286331292066697820e5908ee5a4a7e983a8e58886206361736520e8b791e9809aefbc8ce5b091e695b020636173652028633229205177656e20e8a18ce4b8bae581b6e58f91206d6973732027e58d9627206b6579776f726420e68ea5e58f97206b6e6f776e2d666c616b7920636170e380820a0a23232070726f706f7365207368697020e9a1bae5ba8f0a0a312e2053433661207368697020286167656e742d61646170746572206361636865206b657920e58aa02070656572290a322e20636f6e736f6c65202b206164617074657220726573746172740a332e20766572696679206d756c74695f7475726e5f636f6e746578745f726574656e74696f6e202b206f776e65725f38386b61735f766572626174696d20e58d95e8b79120504153530a342e2063726f6e20e9aa8ce585a8e99b86e688900a0a23232070726f68696269746564206c69737420e887aae6a3800a0a6167656e742d616461707465722f7372632f70726f7669646572732f6f70656e61692e6d6a7320e2809420e4b88de59ca82070726f68696269746564206c697374202862726f6b65725f776f726b666c6f775f6d61726b657273202f20636861696e5f6576656e7473202f2065786368616e67655f6f6666657273202f2065786368616e67652d6d616368696e652e6a73202f2074726164652d70726f746f636f6c2d66696c7465722e6a73202f206365782d6272696467652e6a73202f2063726f73732d636861696e2d7665726966792e6d6a73202f2065766d2d7472616e736665722e6a73202f2062726f6b65722d6273632d696e74616b652d776174636865722e6a73202f2062726f6b65722d6275792d68616e646c65722e6a73205068617365203220776972652920e4b98be5a496e380820a0a232320e9a38ee999a9e8af84e4bcb00a0a2d20e58aa0207065657220e8bf9b206361636865206b657920e2869220636163686520686974207261746520e795a5e9998d202863726f73732d706565722073616d6520636f6e74656e742068697420e5a4b1e69588290a2d2062726f6b6572206469616c6f672070726f64756374696f6e3a20e79c9fe5ae9e207573657220e59084e887aa2070656572efbc8ce58e9fe69cac2063616368652068697420e7bd95202870726f64756374696f6e20e4b88de5908c207573657220e5908c206d736720e6a682e78e87e4bd8e290a2d20e6b58be8af95e59cbae699af3a2035206672657368207065657220e8b791e5908c2066697874757265206d736720e2869220e78eb0e59ca8e59084e887aae78bace7ab8b204c4c4d2063616c6cefbc8ce6ada3e7a1ae2076657269667920e8b7afe5be840a2d204d696e642f427261696e3a20e6af8f206167656e74207065657220e59bbae5ae9aefbc8c636163686520686974207065722d6167656e7420e4b88de7a0b40a0ae6889222e79c9f22e5ad97202b204e575420e4bd93e5ae8820e2809420e6ada42062726f616463617374203020e6aca1e380820a0a232320e4b88be6ada50a0a5354414e44425920e69eb6e69e84e5b8882061636b3a0a312e2053433620e8b083e69fa52066696e64696e672028633129206361636865206b657920e6bc8f207065657220e5ae9ee8af810a322e2053433661207368697020706c616e20286167656e742d61646170746572204c3131352d31323220e58aa0207065657220e8bf9b2068617368290a332e2053433662202863322070726f6d70742064726966742920646566657220e68ea5e58f972073746f63686173746963206b6e6f776e2d666c616b79206361700a342e20534337206672616d65776f726b20616374696f6e20e5908ee7bbad2073686970