Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
8e0476d
fix(quota): resolve fallback from canonical todos
cocolord Sep 7, 2026
f761703
Merge commit '0c619324870f2f4ce9e9a550b6bc0228722d5095' into codex/pr…
cocolord Sep 8, 2026
acd302c
fix(quota): bound fallback reads to direct dependencies
cocolord Sep 8, 2026
5f00200
Merge remote-tracking branch 'origin/main' into codex/pr4061-bounded-…
cocolord Sep 8, 2026
cd41a91
Merge remote-tracking branch 'origin/main' into codex/review-pr4061-b…
cocolord Sep 8, 2026
b27a7a0
fix(quota): preserve fallback wait eligibility and uncertainty
cocolord Sep 8, 2026
661c4e6
fix(quota): reject waits on completed fallback monitors
cocolord Sep 11, 2026
345644d
Merge remote-tracking branch 'origin/main' into codex/scoped-wait-adm…
cocolord Sep 11, 2026
fbfd499
Merge remote-tracking branch 'origin/main' into codex/scoped-wait-adm…
cocolord Sep 11, 2026
4d2d5a7
Merge remote-tracking branch 'origin/main' into codex/scoped-wait-adm…
cocolord Sep 11, 2026
fdaef0b
Merge remote-tracking branch 'origin/main' into codex/scoped-wait-adm…
cocolord Sep 11, 2026
4877152
Merge remote-tracking branch 'origin/main' into codex/scoped-wait-adm…
cocolord Sep 11, 2026
941fbc8
Merge remote-tracking branch 'origin/main' into codex/pr4061-typed-fa…
huangruiteng Sep 12, 2026
7ae1b17
refactor(quota): compose typed fallback disposition from one source s…
huangruiteng Sep 12, 2026
a432b57
docs(rfc): record typed fallback consumer closure and semantic correc…
huangruiteng Sep 12, 2026
8c520fe
fix(frontier): bound preloaded fallback sources at the shared codec b…
huangruiteng Sep 12, 2026
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
Original file line number Diff line number Diff line change
Expand Up @@ -2680,6 +2680,14 @@ It does not qualify D1/D2, alter the default provider, or relax D3 promotion hol
Markdown remains the permanent one-way display; the remaining execution cards
below are unchanged.

Optional fallback advice now consumes a single source snapshot, including direct
archived prerequisites, and delegates dispositions to the existing typed resume
semantics. This retires per-Todo source reads and Python wait/aggregation rules;
it does not add a provider, relax a fence, qualify durability, or make Markdown
authoritative after promotion. Read failure remains uncertainty, never permission
to consult stale display. See the TS RFC's T3 consumer notes for the intentional
alternative-resolution corrections; D1–D3 and the permanent projection plan stay.

Use the [TS execution cards](typescript-control-plane-migration-v0.md#execution-cards-after-the-current-stack)
for command inventory, update/monitor transactions and consumer deletion. Do not
repeat that plan in a second implementation or treat a merged read-policy PR
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2137,6 +2137,12 @@ T3 decision-dependency 读取策略现由同一 TS owner 解释 scope coverage
不改变默认 provider 或放宽 D3 promotion hold。Markdown 继续作为永久单向展示,
后续执行卡与退役条件保留。

可选 fallback 提示改为消费一次来源快照(含直接归档依赖),由 TS 复用既有 resume
语义判断去向,退役逐 Todo 来源读取与 Python 等待/聚合规则。没有新增 provider、
放宽 fence 或完成持久化资格化;promotion 后 Markdown 不恢复 authority。读取失败
仍为 uncertainty,不能回退陈旧展示。候选去向的有意修正见 TS RFC 的 T3 说明;
D1–D3 与永久投影规划不变。

**D1 — 资格化永久投影交付,可与 T1/T2 重叠推进。**

能力缺口 consumer 在 legacy/canonical 输入上共用 TS requirement/resolution owner,
Expand Down
11 changes: 11 additions & 0 deletions docs/architecture/rfcs/typescript-control-plane-migration-v0.md
Original file line number Diff line number Diff line change
Expand Up @@ -577,6 +577,17 @@ Unidentifiable referenced history still needs explicit repair, not a post-promot
Markdown fallback. This closes the demonstrated dependency omission, not all history
import, provider qualification, soak, or D3 cutover requirements.

Optional Vision fallback advice now composes resume evaluation and positive
pending-target proof in `goal_frontier/fallback_disposition.ts`. Python retains
persisted-input codecs, source I/O and presentation, not a second Monitor-wait or
declaration aggregation rule. Live quota reads one complete canonical/legacy
snapshot and selects at most 16 target/direct-dependency records, including
archive; it no longer performs repeated per-Todo queries. Intentional corrections:
alternatives resolve their own declaration symmetrically, uncertainty is scoped
to unresolved declarations, and invalid/ambiguous wait evidence cannot suppress
advice. This closes one T3 consumer, not all quota snapshot consistency or T1/T2;
fallback declarations remain optional advisory input, never execution authority.

- Audit Turn/quota, Dashboard, standing decisions, shared-goal alignment and
amendment revision inputs. Reuse #4117's canonical source adapter and pass
one snapshot through a decision; do not build another Todo inventory.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -441,6 +441,14 @@ user role。历史节点不会进入活动工作或 lease lane。无法识别的
不得恢复 promotion 后的 Markdown fallback。本批闭合已复现的依赖遗漏,不代表所有
历史导入、provider 资格化、soak 或 D3 cutover 条件均完成。

可选 Vision fallback 提示在 `goal_frontier/fallback_disposition.ts` 内组合已有
resume evaluator 与合法 pending target 正向证明。Python 仅保留持久输入 codec、
来源 I/O 和展示,删除独立 Monitor 等待分支与声明聚合规则。Live quota 一次读取
完整 canonical/legacy 快照,再选择最多 16 个目标/直接依赖记录(含归档),不再
逐 Todo 重复查询。有意修正:候选对称地消除所属声明,uncertainty 仅属于尚未解决
的声明,非法/含混等待证据不能隐藏提示。这只闭合一个 T3 consumer,不代表整个
quota 的快照一致性或 T1/T2 完成;声明仍是可选 advisory,不是执行 authority。

- 分别审计 Turn/quota、Dashboard、standing decision、shared-goal alignment、
amendment revision 输入。复用 #4117 canonical source adapter,一次决策传递一份
snapshot,不新增 Todo inventory。
Expand Down
31 changes: 31 additions & 0 deletions docs/reference/protocols/goal-vision-replan-contract-v0.md
Original file line number Diff line number Diff line change
Expand Up @@ -462,6 +462,37 @@ rule uses existing acceptance/lineage facts regardless of the optional advisory
relationships, and it grants no additional authority. Ownership, exclusions,
capabilities, user gates, and quota remain independent execution constraints.

For optional fallback advice, live quota takes one complete Todo source snapshot:
canonical provider records after promotion, otherwise one legacy source read.
Only the declared targets/successors and one layer of direct resume dependencies
are transported to the typed projection (at most 16 records, including archived
prerequisites). Deeper chains do not expand the selection or add reads. No
declarations means no additional source read. This does not promise an atomic
snapshot across the entire quota/status packet.
Existing typed resume, ownership, and lifecycle rules decide availability.
An unavailable, ambiguous, or malformed source read produces
`vision_fallback_lookup_uncertain`; compact display evidence cannot override a
failed authority read. Only absence from a complete source proves not-found.
Pending `todo_done:<continuous_monitor>` keeps an unresolved fallback; a valid
`monitor_changed` generation condition may establish a wait. `fallback_gaps`
remains advisory and adds no replan obligation.

Disposition is per declaration, not per candidate: a runnable, validly waiting,
or bounded create/reopen alternative resolves its own declaration regardless of
the other candidate's order, absence or uncertainty. It cannot clear a different
declaration. Unavailable source/provider evidence stays uncertain; it is not proof of a
valid wait. Waiting uses the shared positive target/generation/repository proof;
an unbound PR reference, archived fallback itself, or contradictory done flag
cannot suppress the advisory. Archived completed prerequisites remain valid
evidence. No fallback declaration is required to discover canonical work, and
none grants execution, user-decision or settlement authority.

可选 fallback 提示从一次完整来源快照读取,最多输送 16 个直接相关记录,保留归档
依赖;无声明不额外读取。按整条声明判断:一个可执行或有合法等待证据的候选即可
消除该声明的提示,但不能替其他声明清账。候选顺序、另一个候选缺失或不确定不再
误伤有效去向。等待复用 TS 的目标、generation 和仓库绑定正向证明;这仍是 advisory,
不要求 Agent 为发现 canonical 工作额外维护声明,也不授予执行、审批或结算权限。

等待资格现在逐项检查已有 acceptance 的 Todo 关联,并在展示裁剪前从完整来源计算。
A 的等待不能遮住尚未落实的 B;有可执行工作则继续,相关工作都具有合法等待证据才暂缓。
无需另外维护 fallback 声明;无关 Todo 的数量和顺序不应改变决策。
Expand Down
2 changes: 2 additions & 0 deletions loopx/control_plane/effect_runtime_handlers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ import {
} from "./todos/resume_condition.ts";
import { evaluateSchedulerStateTransition } from "./scheduler/state_transition_rules.ts";
import { projectTodoResumePlanning } from "./todos/resume_planning.ts";
import { projectFallbackDisposition } from "./goals/goal_frontier/fallback_disposition.ts";
import { projectTodoQuotaPlanning } from "./todos/quota_selection.ts";
import {
evaluateSchedulerStateOperation,
Expand Down Expand Up @@ -416,6 +417,7 @@ export function createEffectRuntimeHandlers(
["todo.resume_condition.normalize", normalizeTodoResumeWhen],
["todo.resume_condition.evaluate", evaluateTodoResumeConditions],
["todo.resume_planning.project", projectTodoResumePlanning],
["goal.fallback_disposition.project", projectFallbackDisposition],
["todo.quota_planning.project", projectTodoQuotaPlanning],
["todo.external_wait.plan", planTodoExternalWaitTransition],
["scheduler.state_transition.evaluate", evaluateSchedulerStateTransition],
Expand Down
9 changes: 9 additions & 0 deletions loopx/control_plane/goals/goal_frontier/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@
from .fallback_disposition import (
VISION_FRONTIER_TODO_DELTA_ACTIONS, # noqa: F401
FallbackDeclaration, # noqa: F401
FallbackTodoSource,
agent_scoped_selectable_advancement_todo_ids, # noqa: F401
declared_fallback_gap_from_agent_vision,
parse_fallback_declarations, # noqa: F401
Expand Down Expand Up @@ -1405,6 +1406,8 @@ def build_goal_frontier_projection_context_from_status(
work_lane_contract: dict[str, Any] | None,
neutral_replan_ack_classifications: set[str],
agent_todo_source_items: list[dict[str, Any]] | None = None,
fallback_todo_source_items: FallbackTodoSource = None,
available_capabilities: Any = None,
registered_agent_ids: list[str] | None = None,
goal_status: str | None = None,
agent_profile: dict[str, Any] | None = None,
Expand Down Expand Up @@ -1536,6 +1539,12 @@ def build_goal_frontier_projection_context_from_status(
latest_agent_vision,
agent_todo_summary=agent_todo_summary,
agent_id=agent_id,
agent_todo_source_items=fallback_todo_source_items,
rollout_events=latest_runs_for_goal(
status_payload,
goal_id=goal_id,
),
available_capabilities=available_capabilities,
),
)
if isinstance(gap, dict)
Expand Down
Loading
Loading