Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
d2deb56
feat: require canonical authority for 2.0 normal writes
loopx-agent Oct 13, 2026
b95fe76
test: qualify canonical cutoff and retained recovery journeys
loopx-agent Oct 13, 2026
46805d4
docs: describe 2.0 cutoff and remaining qualification
loopx-agent Oct 13, 2026
6161bb2
fix: preserve original lease fence recovery after writer cutoff
loopx-agent Oct 13, 2026
c099ff2
docs: align canonical creation catalog and cutoff checkpoint
loopx-agent Oct 13, 2026
1e73b32
docs: close completed cutoff integration checkpoint
loopx-agent Oct 13, 2026
da6d5d1
fix: preserve canonical external-wait diagnostics
huangruiteng Oct 13, 2026
691b291
test: exercise supported waits on canonical providers
huangruiteng Oct 13, 2026
82a42a7
chore: refresh registry I/O inventory after rebase
huangruiteng Oct 13, 2026
f5f5ffb
test: keep Dev Book on published release baseline
huangruiteng Oct 13, 2026
b9651fb
fix: select stable predecessor for prerelease bundle build
huangruiteng Oct 13, 2026
0155a54
test: run managed host and turn fixtures on canonical authority
huangruiteng Oct 13, 2026
e9652bd
test: seed packaged user action journey on canonical authority
huangruiteng Oct 13, 2026
8134754
test: recover immutable 1.x histories with the canonical cutoff receiver
loopx-agent Oct 13, 2026
83dd8f7
test: seed retained native consumers from immutable 1.x source
loopx-agent Oct 13, 2026
c6f25e5
test: retain large historical source cutover after writer retirement
loopx-agent Oct 13, 2026
a4af27d
test: recover historical qualification and management races after cutoff
loopx-agent Oct 13, 2026
1c6004d
test: move observable callers to canonical authority
loopx-agent Oct 13, 2026
f2f848a
test: qualify historical recovery and canonical writer races
loopx-agent Oct 13, 2026
3549d65
test: restore original team-plan and promotion recovery coverage
loopx-agent Oct 13, 2026
fc3cffb
test: qualify settlement consumers after canonical cutoff
loopx-agent Oct 13, 2026
27e7beb
test: preserve original planning API parity after writer retirement
loopx-agent Oct 13, 2026
ba4073d
test: qualify packaged task creation with canonical authority
loopx-agent Oct 13, 2026
59fe4d1
test: preserve pinned history in isolated mutation controls
loopx-agent Oct 13, 2026
dcf8b65
Merge main into canonical authority cutoff validation
loopx-agent Oct 13, 2026
36025d2
test: qualify Explore writeback on canonical authority
loopx-agent Oct 13, 2026
9bf742d
test: qualify installed canonical creation and historical import
loopx-agent Oct 13, 2026
4483d5c
test(monitor): adopt canonical and historical fixture ownership
loopx-agent Oct 13, 2026
e15f2ab
test(authority): bind mutation oracles to current recovery owners
loopx-agent Oct 13, 2026
86a5b98
Merge main and retain canonical recovery with Host readback coverage
loopx-agent Oct 13, 2026
e66269b
fix: reject canonical Todo completion policy failures
loopx-agent Oct 13, 2026
3786ee0
Merge main mutation guard repair into canonical writer retirement
loopx-agent Oct 13, 2026
ee9ebea
fix(chat): bind reviewed Todo identity to canonical operation
loopx-agent Oct 13, 2026
4f49400
fix(todos): preserve canonical completion successor contracts
loopx-agent Oct 13, 2026
889a7e4
fix(todos): project update results from original transaction facts
loopx-agent Oct 13, 2026
5205214
fix(todos): restore canonical create responses and full lifecycle checks
loopx-agent Oct 13, 2026
aabbbe4
fix(todos): preserve complete legacy rows during canonical projection
loopx-agent Oct 13, 2026
092a235
Merge main CI repairs into canonical authority cutoff
loopx-agent Oct 13, 2026
e798368
test(todos): qualify canonical monitor and imported durability journeys
loopx-agent Oct 13, 2026
e7ba19e
test(todos): qualify canonical CLI, contention and user gate journeys
loopx-agent Oct 13, 2026
165ffea
refactor(todos): retire unused source preview decision chain
loopx-agent Oct 13, 2026
e8ecea2
test(todos): migrate validation and scheduling journeys to canonical …
loopx-agent Oct 13, 2026
f9b2c06
test(dashboard): qualify blocked readback on canonical providers
loopx-agent Oct 13, 2026
1e689b8
refactor(todos): isolate canonical update response projection
loopx-agent Oct 13, 2026
86265a9
test(todos): distinguish public state from transaction status
loopx-agent Oct 13, 2026
eb1b598
test(coordination): qualify canonical workspace and lease CLI journeys
loopx-agent Oct 13, 2026
4e94b08
fix(todos): preserve canonical actor refusal and delegation boundaries
loopx-agent Oct 13, 2026
8f96961
fix: classify terminal completion fence rejections consistently
loopx-agent Oct 13, 2026
a39a244
test: distinguish Todo state from SQLite operation status
loopx-agent Oct 13, 2026
37fc52f
fix: retain delegated terminal authority reasons in receipts
loopx-agent Oct 13, 2026
7229e95
refactor: retire callerless Python Todo lifecycle authorization
loopx-agent Oct 13, 2026
6a01d3f
docs: reconcile canonical lifecycle ownership and retirement
loopx-agent Oct 13, 2026
5454df6
fix(todos): persist imported terminal continuation repair
loopx-agent Oct 13, 2026
430edf1
test(todos): qualify canonical actor and claim lifecycle callers
loopx-agent Oct 13, 2026
cb39361
docs: reconcile canonical terminal repair and caller boundaries
loopx-agent Oct 13, 2026
09e42d6
test: migrate complete handoff families to canonical authority
loopx-agent Oct 13, 2026
e9148fa
test: observe real writer contention before releasing fence oracle
loopx-agent Oct 13, 2026
409cf8e
test: run successor and integrated canaries on canonical providers
loopx-agent Oct 13, 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
3 changes: 3 additions & 0 deletions .github/workflows/python-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -720,6 +720,9 @@ jobs:
- {suite: installed, shard: 0}
steps:
- uses: actions/checkout@v7
with:
# Cross-version recovery generates originals with a pinned public 1.x source.
fetch-depth: 0
- uses: actions/download-artifact@v7
with:
name: chat-bundle-${{ github.sha }}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ const capabilityCopy: Record<WorkspaceLocale, Record<string, LocalizedCopy>> = {
const fieldCopy: Record<WorkspaceLocale, FieldCopy> = {
en: {
new_goal_provider: { label: "New Goal storage provider", description: "File or SQLite; frozen at creation, independently of execution policy." },
canonical_creation: { label: "Create canonical authority", description: "Future Goals only. Disabled retains the post-promotion target; failures require the original creation retry." },
canonical_creation: { label: "Create canonical authority", description: "Required for new Goals in 2.0. An older disabled setting remains visible until you enable it; existing Goals require import." },
new_goal_handoff_mode: { label: "New Goal execution policy", description: "soft_claim or hard_lease, used with canonical creation. Agents inherit the Goal policy; tool authority is unchanged." },
runtime_profile: { label: "Runtime profile", description: "Restricted keeps scoped LoopX reads only. Trusted owner enables normal host tools while protected operations retain separate checks." },
selection_policy: { label: "Selection policy", description: "Preferred allows an explicit user choice; pinned rejects another executor; flexible permits fallback only inside the eligible pool." },
Expand Down Expand Up @@ -185,7 +185,7 @@ const fieldCopy: Record<WorkspaceLocale, FieldCopy> = {
},
"zh-CN": {
new_goal_provider: { label: "新 Goal 的存储 provider", description: "选择 File 或 SQLite;创建时固定,与执行策略分别选择。" },
canonical_creation: { label: "建立 canonical 权威存储", description: "仅影响此后新建的 Goal。关闭时仅固定晋升后的目标;失败须重试原创建操作。" },
canonical_creation: { label: "建立 canonical 权威存储", description: "2.0 新建 Goal 必须启用。旧的关闭设置会保留显示,需自行启用;已有 Goal 需导入。" },
new_goal_handoff_mode: { label: "新 Goal 的执行策略", description: "canonical 创建使用 soft_claim 或 hard_lease。Agent 继承 Goal 策略;不授予工具权限。" },
runtime_profile: { label: "运行模式", description: "restricted 仅使用受限 LoopX 读取;trusted_owner 开放常规宿主工具,但受保护操作仍单独校验。" },
selection_policy: { label: "选择策略", description: "preferred 允许用户显式改选;pinned 拒绝其他执行器;flexible 只在已授权资源池内回退。" },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -382,8 +382,8 @@ export function MachineConfigurationSettings({ section, onChanged }: { section:
<section className="personal-capability-behavior-note">
<ShieldCheck aria-hidden size={18} />
<div><strong>{locale === "zh-CN" ? "仅影响此后创建的 Goal" : "Future Goals only"}</strong><p>{locale === "zh-CN"
? "启用 canonical 创建后,新 Goal 直接建立权威存储,并采用所选执行策略;失败时须重试原创建操作。关闭时仅固定晋升后的目标存储。已有 Goal 的升级仍需备份、停止写入和结算租约;这里不授予工具权限。"
: "With canonical creation enabled, new Goals establish authority with the selected execution policy; retry the original operation after failure. Disabled only freezes the post-promotion target. Existing Goals still require backup, stopped writers and settled leases for upgrade; this setting grants no tool permissions."}</p></div>
? "2.0 新建 Goal 必须启用 canonical 创建,并采用所选执行策略。旧的关闭设置不会自动改变;启用后再重试创建。已有 Goal 需备份、停止写入并导入;这里不迁移已有数据,也不授予工具权限。"
: "2.0 requires canonical creation with the selected execution policy. An older disabled setting is not changed automatically; enable it before retrying creation. Back up, stop writers and import existing Goals separately. This setting neither migrates existing data nor grants tool permissions."}</p></div>
</section>
) : null}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,68 @@ unpromoted callers remain in ordinary mutation, bootstrap/creation opt-out,
team-plan, Monitor, ownership/source lease and active capture/binding. Reuse
their typed admission/transaction owners; treat retained source capture,
historical receipts and permanent document IO as recovery obligations.
The existing delivery Todos should carry these concrete exits:
The 2.0 alpha implementation now removes the normal Todo/Monitor source writers,
unused line-update helpers and four Todo capture producers, sharing typed refusal across cold-source
entrypoints while keeping original lease release, team-plan receipts and outbox
drain. This candidate changes v0/disabled creation admission and fresh legacy
ownership grants intentionally; it does not change the compatible 1.x line.
The normal-wheel import/consumer matrix, packaged Settings enable/refusal/readback,
real PostgreSQL conformance and risk canary have focused passing evidence. The
native source-lease regression matrix now restores independently frozen 1.x
artifacts instead of recreating retired writers. It covers interrupted fence
recovery, lock-token renewal, stale generation rejection and later-write
protection; acquired intent alone cannot mint a new legacy execution grant.
Retained Monitor and outbox recovery tests now generate originals with a pinned
public 1.x Git source and execute inspection, drain and receipt settlement with
the current receiver. A source intent stopped before its business commit is
retained for import/reconciliation; it cannot authorize a new 2.0 source write.
Current consumer fixtures use canonical authority, while registered-peer legacy
assignment and original result shapes are checked only as historical receipts.
Bounded qualification, lease-fence caller parity and management interleavings
now also consume pinned historical originals. Current explicit drain owns the
rollback/rebootstrap and corrupt-history races; it cannot count as another
primary mutation or report delivery into a superseded generation. Current
pre-import lease acquisition remains refused, and post-import canonical lease
CAS, transfer, release and caller envelopes keep their original assertions.
Observable CLI consumers now exercise both real File and SQLite authority across
absent, disabled and enabled historical capture settings. Dry-run and rejection
checks include the canonical head and journal; accepted no-op mode intents retain
a receipt, while their exact retry leaves that journal unchanged. Bootstrap
replacement and terminal writes on an unmigrated source refuse before mutation;
current release still settles a genuine pre-upgrade lease.
The shared-authority recovery ladder now identifies its immutable 1.x producer
revision separately from the current receiver. Current drain survives process
death at commit, cursor and cleanup boundaries on those original entries; source
replacement, rollback, archive/audit and bounded history checks retain their
assertions. Original handoff/acquire races retain recoverable receipts, while
current File/SQLite races independently prove quiescence and policy admission
against one canonical head. Legacy-source overrides refuse before writing.
These are executable recovery and current-consumer checks, not sustained
operation or substitutes for the independent installed/natural-trial gates.
The callerless Python lifecycle authorization chain and its facade exports are
retired. Canonical File/SQLite entrypoints qualify claim eligibility, immutable
rejection, actor/delegation and lease fences; configuration-time grant validation
and registry fact transport retain their active callers. New delegated terminal
receipts retain the accepted authority reason; original receipt recovery preserves
historical results and rejects a changed reason under the same operation identity.
This closes that private decision chain, not the remaining monitor/handoff caller
families, installed import journey or sustained SQLite qualification.
The remaining actor-module Monitor, binding and terminal consumers now use real
File/SQLite authority. Imported completions without a typed continuation expose
an integration gap: the completion reducer permits explicit repair, but the
outer terminal no-op path discarded that commit. The terminal transaction now
honors that existing repair decision and retains its original operation receipt;
shared provider tests cover rejection, preview, replay and subsequent closeout.
Canonical completion releases its lease atomically, so response-loss recovery
replaces the obsolete separate-release failure seam. A completed ordinary Todo
cannot be reopened through metadata update, and fresh unmigrated claims refuse
without changing the source. These are explicit 2.0 boundaries, not parity with
the retired Markdown writer's split claim/lease and reopen behavior. Historical
receipt recovery, broader CI and installed/natural-trial acceptance stay separate.
The backend configuration catalog now describes the same 2.0 creation boundary.
Exact-head review, core-developer trial and release authorization remain open. Retained outbox recovery and source
lease release are concrete remaining callers, not grounds for keeping normal
Todo producers. The existing delivery Todos should carry these concrete exits:

- Qualify the installed import/backup/recovery journey for the declared source
matrix; importer implementation is already present and is not a missing-code
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -217,11 +217,11 @@ if (rejection === "claim_owner_mismatch") {
}
```

这是同一 `authority` 决策中的片段,不是新的调用接口。未晋升源适配器
`mutation_authority.py::authorize_todo_lifecycle_mutation` 仍在 owner mismatch 后
读取并规范化 registry grant,再通过 `authority_core.decide` 调用同一 TS owner;
canonical 事务也复用该 owner。Python facts、grant 校验和 receipt 投影保留,
不再经由无人调用的单项 grant 查询。
这是同一 `authority` 决策中的片段,不是新的调用接口。canonical 事务复用
该 TS owner;`mutation_authority.py::todo_lifecycle_facts` 只传递 registry facts,
grant 的按需校验和执行授权由事务统一决定。配置入口仍用
`normalize_todo_lifecycle_authority` 校验输入。旧 Python 生命周期授权分支及其
无人调用的 facade 导出已删除;未晋升源须先导入 canonical 才能执行普通写入。

这份 grant 有四个边界:

Expand Down
Loading
Loading