Conversation
The Chat agent prompt asks for Todo proposals and the service emits them in turn.completed, but the Personal Workspace wrote them into a legacy proposalsByContext state that nothing rendered since loopx-project#3274. The reply said it found a reviewable step while no step could be seen or confirmed. In a Goal conversation each Todo proposal now becomes a typed todo.create preview (goal, text and priority) keyed by its Turn, so a repeated completion reuses the stored preview. The cards appear in the conversation without opening the drawer, survive a reload, and still require explicit confirmation. A recovered Turn stores its previews for the Session's own Goal only, instead of falling back to the selected or first Goal. Manager answers without a target Goal create nothing. Remove the unused legacy card state, its preview/approve/settle handlers and state labels. Signed-off-by: song <liusongstep@gmail.com>
The browser fixture now forwards scripted proposals in turn.completed, as the Chat service does. A new chat-todo-proposal scenario requires one typed preview per Goal proposal that survives a reload and applies on confirmation, and no preview for a manager answer without a target Goal. Signed-off-by: song <liusongstep@gmail.com>
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Goal And Delivered Outcome
proposals: [{kind: "todo", text, priority, rationale}], and the Chat service emits them inturn.completed(andproposal.ready). Since the Personal Workspace promotion (feat(control-plane): promote the personal Agent workspace #3274),dashboard-page.tsxwrote them into a legacyproposalsByContextstate that nothing reads. The reply said it had found a reviewable step, but no step could be seen, confirmed or recovered after a reload.新任务 · 待你确认card appears under the answer, survives a reload, and确认并应用writes the Todo through the existing typed action apply with a read-back receipt.main.Scope And Continuation
todo.createpreview (goal_id,text,priority) created through the existing preview path, so the owner still confirms every write. Cards are left in the conversation (select: false); a single protected-action preview keeps opening the drawer as before.chat-todo-proposal:<turn id>:<index>, and the action store returns the stored preview for a repeated key, so observing one completion twice cannot offer a duplicate.model.goals[0], which would have attached a manager proposal to an unrelated Goal once wired to writes.请进入要修改的 Goal…is stored inlines, which the workspace shows only for an empty answer, so it is still not visible; a manager proposal has no target Goal to preview. Left unchanged here.Validation
staticpassednpx tsc --noEmitinapps/presentation/dashboard.integrationpassedLOOPX_PERSONAL_WORKSPACE_SCENARIO=chat-todo-proposal node examples/personal-workspace-browser-smoke.mjs(2 runs): manager proposal → no preview; Goal proposal → exactly onetodo.createpreview with Goal and priority and a Turn-derived key, card visible without opening the drawer, still visible after reload, applied on confirmation. The browser fixture now forwards scriptedproposalsinturn.completedas the service does; it previously always sent[], which is why no scenario could catch this.regression_paritypassedintegrationpassedmainalso pass here (includingtyped-actions,team-plan,steward-journey, which share the preview path and the fixture).real_entrypointpassedloopx serve-status+loopx chaton an isolated synthetic registry with a stub Codex app-server answering with a Todo proposal: card shown, survived reload,确认并应用→apply200, drawer操作已完成,结果状态已通过读回验证。, and the Goal state file gained- [ ] [P1] …with aloopx:todomarker.integrationnot_rungoal-draft,capability-scope,steward-group-trigger,conversation-input,automation-cadence,steward-model-settings) already fail on a cleanmaincheckout.Frontend / Visual Evidence
我找到一个可评审的步骤。with nothing under it.新任务 · 待你确认card under the answer; opening it shows the existing typed preview with确认并应用 / 稍后 / 拒绝.Type of Change
LoopX Area
Technical Direction
Shared-authority RFC fixture impact
N/A
Boundary Checklist
none.Signed-off-bytrailer (git commit -s).Future-facing refactor pass: applied — the legacy proposal-card path was the second, unrendered owner of Agent Todo proposals; removing it leaves the typed action store as the single owner. Considered having the Chat service create the previews itself on
proposal.ready; deferred because it would change a service contract that also serves Lark and CLI clients.