🐳 第八章 设计自己的Harness
📄 一句话概括

同一份清单,要按【该活多久】分两堆:跨会话的留宿主,随会话生灭的进预设——分错了不是报错,是泄漏。

📝 本节和前面几节的关系

8.3.2 列了清单,这一步把清单上的每一项分到两个平面里。

一、两个平面各放什么

3.2.1 已经讲过这条线:能力挂在会话作用域上,随会话生灭;记录留下,能力不留。

二、判断标准还是那一句

它该活多久。

两堆分完,预设里该有几件就定下来了。

三、挂错平面的三种事故

3.2.2 讲过:泄漏、残留、失控。

三种都不是崩溃型故障,但都会在某个意想不到的时候冒出来。

四、实测:宿主那一份长什么样

在 dump 出来的 1259 行树里,宿主层的几件开头就是:

这三件都不在任何预设里——它们属于进程,不属于会话。

五、动手 Demo:哪些留下,哪些跟着会话走

同一份需求,两边的归处不一样:

host = ["模型路由", "密钥", "沙箱范围"]
session = ["人格指令", "工具清单", "审查输出格式"]
print("  留宿主(%d): %s" % (len(host), "、".join(host)))
print("  跟会话(%d): %s" % (len(session), "、".join(session)))
print("  判断标准只有一条: 它该活多久")

实跑输出:

--------------------------------------------------------------------
哪些留下,哪些跟着会话走
--------------------------------------------------------------------
  同一份需求,两边的归处不一样:

  东西               归哪层     理由
  -----------------------------------------------------------
  模型路由、密钥     宿主层     进程一份,不该每会话重来
  沙箱范围           宿主层     权限要收口,不能会话自己定
  人格指令           会话层     换预设就该换人格
  工具清单           会话层     只读审查与全功能不是一个组合
  审查输出格式       会话层     属于这套预设的做法
  -----------------------------------------------------------

  判断标准还是 3.2.2 那一句:**它该活多久**。
  跨会话的留宿主,随会话生灭的进预设。

分错的三种后果(泄漏/残留/失控)都不是崩溃,是慢慢显形的毛病。 权限三件(sandbox-policy/approval/permission)一件都不在预设里——这是 8.4 的伏笔。 判据始终是那一句:它该活多久。

30 秒实验

  1. 把你清单上的每一项标上【宿主】或【会话】。
  2. 再问一句:分到会话的那些,撤下时能不能算清账?
  3. 分到宿主的那几项,谁有权改它——如果答案是【会话】,那就分错了。

常见误区

  1. 错误:分哪边都行,反正都能用。——纠正:分错不是不能用,是用出别的问题——泄漏、残留、失控三种都是延迟显形的毛病。
  2. 错误:会话级的东西更【灵活】,尽量往会话放。——纠正:权限类的往会话放就失控了——被管理者给自己定规矩,这条线不能越。
  3. 错误:宿主层的东西离我太远,不用管。——纠正:它常常是你唯一能改权限的地方——本章 8.4 的实测就落在这里。
自测三问(点开对答案) 1. 两个平面各放什么? —— **宿主放进程一份的**(模型路由、密钥、沙箱范围、审批策略),**会话放随会话生灭的**(人格、工具清单、输出格式)。 2. 挂错平面的三种事故是什么? —— **泄漏**(会话的东西挂宿主)、**残留**(宿主的挂会话)、**失控**(权限类挂会话)。 3. 权限三件在哪个平面? —— **宿主平面**——`sandbox-policy`/`approval`/`permission` 都在顶层,一件都不在任何预设里。

相关笔记