Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion agent-context.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,7 @@ routes:
- complexity:gate
- verify:packages
- glossary:check
- check:policy-words
- rtm:check
- test:product
advisory: [verify:research, verify:chaos]
Expand Down Expand Up @@ -239,6 +240,7 @@ routes:
- src/integration/check-runner.ts
- src/integration/ooo-session-facts.ts
- src/integration/ooo-session-mechanism.ts
- src/integration/ooo-patch-session.ts
- src/integration/task-advisers.ts
- src/integration/task-coordinator.ts
- src/integration/task-semantics-interleavings.ts
Expand All @@ -249,7 +251,7 @@ routes:
- docs/design/ooo-execution-bootstrap.md
- docs/design/task-unit-semantics.md
- docs/design/ooo-fusion-planning.md
tests: [tests/integration/ooo-*.test.ts, tests/integration/task-semantics*.test.ts]
tests: [tests/integration/ooo-*.test.ts, tests/integration/task-semantics*.test.ts, tests/integration/task-refinement*.test.ts]
verify:
blocking: [check, test:product, build]
advisory: []
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,14 @@ loop would create the second implementation the same decision warned against, an

- **One programmatic loop.** `dispatchPlan` lives with the other shared execution
decisions, takes a board and worker port, and consumes the board's candidate set. It owns the ordering of
the claim, the freeze, the worker call, the result entry, the verdict, the failure and refusal
the claim, the worker call, the result entry, the verdict, the failure and refusal
accounting, and the session decision at each boundary (`decideSessionMove`), recorded as a run fact when
a run-fact port is supplied.
- **The worker is a port.** What the loop calls to produce a candidate is supplied by its caller - the
arms supply a live model worker or a recorded one, the host supplies the runner it already has. The
port's shape is the one the arms already use; the adapter implements it, and no policy moves into it.
port is parameterized by a declaration with a digest; freezing, rendering and interpretation belong
to its adopter. The [opaque declaration decision](2026-09-21-mechanism-not-policy.md#opaque-dispatch-declarations)
governs this boundary.
- **The arms keep what makes them research.** Their spec files, their cells' declarations (bounds, slots,
per-unit session declarations), their report format and their archive stay where they are. The arms get
their own _declarations and measurements_; they no longer get their own _loop_.
Expand All @@ -64,7 +66,7 @@ loop would create the second implementation the same decision warned against, an
- **The measurements stay comparable.** The driver's report format and its CLI do not change; the loop it
calls is the same code, so a cell recorded before and after this move is the same cell. The archive's
`matrix.json` and the plan's grade rule keep working unchanged.
- **The board is a port.** The loop consumes `DispatchBoard`, the freeze, a
- **The board is a port.** The loop consumes `DispatchBoard`, an admitted opaque declaration, a
worker port and the shared session decision; nothing in the move
adds a product policy or a new store column.
- **Extraction is not product activation.** The fast dispatch tests exercise a fake board, with a real
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@

**派发一份计划的那个循环搬进共享层,臂的驱动成为它的调用方。**

- **一份程序化循环。** `dispatchPlan` 接收黑板与 worker 端口,消费黑板给出的合法集,负责认领、冻结、调用 worker、放结果条目、判定、失败与拒绝记账的操作顺序;边界调用已有 `decideSessionMove`,在提供运行事实端口时记录决定。
- **worker 是端口。** 产出候选的那一步由调用方提供——臂提供实时模型 worker 或录制 worker,宿主提供它已有的 runner。端口形状就是臂已在用的那个;适配层实现它,**策略不进端口**。
- **一份程序化循环。** `dispatchPlan` 接收黑板与 worker 端口,消费黑板给出的合法集,负责认领、调用 worker、放结果条目、判定、失败与拒绝记账的操作顺序;边界调用已有 `decideSessionMove`,在提供运行事实端口时记录决定。
- **worker 是端口。** 产出候选的那一步由调用方提供——臂提供实时模型 worker 或录制 worker,宿主提供它已有的 runner。端口以带摘要的声明参数化;冻结、渲染和解释属于采用方。[不透明声明决策](2026-09-21-mechanism-not-policy.zh-CN.md#不透明派发声明)拥有这条边界。
- **臂保留使其成为研究的东西。** spec 文件、每个格的声明(上限、slots、每单元会话声明)、报告格式与归档都留在原处。臂保留自己的**声明与测量**;不再保留自己的**循环**。
- **2026-09-17 那条决策除这一条外继续有效。** 它"推迟规划平台"的规则不变——通用调度器(自己决定/排序计划、持有队列)不是这次搬的东西。变的只是**执行一份给定计划的循环住在哪**。

Expand All @@ -32,7 +32,7 @@
## 后果

- **测量保持可比。** 驱动的报告格式与 CLI 不变;它调用的循环是同一份代码,所以在此之前与之后记录的格子是同一个格子。归档的 `matrix.json` 与计划的读数分级规则照旧可用。
- **黑板是端口。** 循环消费 `DispatchBoard`、冻结、worker 端口与共享会话决策;不新增产品策略或存储列。
- **黑板是端口。** 循环消费 `DispatchBoard`、已准入的不透明声明、worker 端口与共享会话决策;不新增产品策略或存储列。
- **抽取不等于产品启用。** 快速测试使用假 board,并以真 Store 验证会话事实落库;它们不证明现有 `nmg_board` 宿主流程调用了该循环。产品接入沿用现有黑板与宿主流程,不新增工具、命令或独立 OoO 入口。[调用链审查](../../design/task-unit-semantics-obligations.md#product-call-path-audit-2026-09-20)分别记录已有规则、已有生命周期操作与实际观察到的调用边界。
- **臂的身份保留。** 它的驱动保留 spec 格式、实时/桩 worker 的选择、报告与归档;评审者仍然可以只读臂的驱动就知道"臂跑了什么"。

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
**Approved:** explicit
**Relates to:** [the pilot and its ceiling](2026-09-18-fusion-and-speculation-pilot.md), [fusion legality and accounting](../implemented/2026-09-18-fusion-legality-and-accounting.md)

Implementation evidence: `createPiSessionRunner` and `patchSessionInput` in `.pi/extensions/nmg/ooo-execution.ts` hold one session per run behind the `UnitState` box, `executePiInputWith` delegates to it so the extension keeps exactly one tool surface, and `piSessionWorker` in `evals/ooo-execution/plan-driver.ts` holds one runner per session id. The smoke reported both units in one session (`sessions: [["alpha","summary"]]`, 21k tokens). What remains is not mechanism: no product-side caller yet decides to reuse a session.
Implementation evidence: `createPiSessionRunner` in `.pi/extensions/nmg/ooo-execution.ts` consumes `patchSessionInput` from the [default session adopter](../../../src/integration/ooo-patch-session.ts) and holds one session per run behind its `UnitState` box, `executePiInputWith` delegates to it so the extension keeps exactly one tool surface, and `piSessionWorker` in `evals/ooo-execution/plan-driver.ts` holds one runner per session id. The smoke reported both units in one session (`sessions: [["alpha","summary"]]`, 21k tokens). What remains is not mechanism: no product-side caller yet decides to reuse a session.

## Problem

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
**Approved:** explicit
**Relates to:** [pilot 与其上限](2026-09-18-fusion-and-speculation-pilot.zh-CN.md)、[融合合法性与其记账](../implemented/2026-09-18-fusion-legality-and-accounting.zh-CN.md)

实现证据:`.pi/extensions/nmg/ooo-execution.ts` 的 `createPiSessionRunner` 与 `patchSessionInput` 通过 `UnitState` 盒子让每次运行持有一个会话,`executePiInputWith` 委托给它,扩展因此只保留一套 tool surface,`evals/ooo-execution/plan-driver.ts` 的 `piSessionWorker` 每个 session id 持有一个 runner。冒烟结果显示两个单元同处一个会话(`sessions: [["alpha","summary"]]`,21k tokens)。仍未完成的不再是机制:产品侧还没有调用方去决定复用会话。
实现证据:`.pi/extensions/nmg/ooo-execution.ts` 的 `createPiSessionRunner` 消费[默认会话采用方](../../../src/integration/ooo-patch-session.ts)的 `patchSessionInput`,通过其 `UnitState` 盒子让每次运行持有一个会话,`executePiInputWith` 委托给它,扩展因此只保留一套 tool surface,`evals/ooo-execution/plan-driver.ts` 的 `piSessionWorker` 每个 session id 持有一个 runner。冒烟结果显示两个单元同处一个会话(`sessions: [["alpha","summary"]]`,21k tokens)。仍未完成的不再是机制:产品侧还没有调用方去决定复用会话。

## Problem

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

**Status:** implemented
**Approved:** explicit
**Relates to:** [Mechanism, not policy](../proposed/2026-09-21-mechanism-not-policy.md), [Board governance and capability addressing](2026-09-06-board-governance-addressing.md), [Name the collaboration protocol and its task-unit sub-protocol](2026-09-20-name-the-collaboration-protocol.md), [Task unit semantics](../../design/task-unit-semantics.md), [The contract's obligations](../../design/task-unit-semantics-obligations.md), [Protocol-governed collaboration: the parts, the gaps](../../design/protocol-governed-collaboration.md)
**Relates to:** [Mechanism, not policy](2026-09-21-mechanism-not-policy.md), [Board governance and capability addressing](2026-09-06-board-governance-addressing.md), [Name the collaboration protocol and its task-unit sub-protocol](2026-09-20-name-the-collaboration-protocol.md), [Task unit semantics](../../design/task-unit-semantics.md), [The contract's obligations](../../design/task-unit-semantics-obligations.md), [Protocol-governed collaboration: the parts, the gaps](../../design/protocol-governed-collaboration.md)

## Problem

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

**Status:** implemented
**Approved:** explicit
**Relates to:** [机制,不是策略](../proposed/2026-09-21-mechanism-not-policy.zh-CN.md)、[黑板治理与能力寻址](2026-09-06-board-governance-addressing.zh-CN.md)、[给协作协议及其任务单元子协议命名](2026-09-20-name-the-collaboration-protocol.zh-CN.md)、[任务单元语义](../../design/task-unit-semantics.md)、[契约的义务](../../design/task-unit-semantics-obligations.md)、[协议化协作:组成部分与空缺](../../design/protocol-governed-collaboration.zh-CN.md)
**Relates to:** [机制,不是策略](2026-09-21-mechanism-not-policy.zh-CN.md)、[黑板治理与能力寻址](2026-09-06-board-governance-addressing.zh-CN.md)、[给协作协议及其任务单元子协议命名](2026-09-20-name-the-collaboration-protocol.zh-CN.md)、[任务单元语义](../../design/task-unit-semantics.md)、[契约的义务](../../design/task-unit-semantics-obligations.md)、[协议化协作:组成部分与空缺](../../design/protocol-governed-collaboration.zh-CN.md)

## 问题

Expand Down
Loading
Loading