P4: writes via chat — Reginald proposes, you approve inline #43
Reference in New Issue
Block a user
No description provided.
Delete Branch "p4/chat-writes"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Completes "chat is the write-path" (decisions.md D1). Ask Reginald to re-estimate or reprioritize; it formulates a proposal, you approve it inline, and the write runs through the same guarded
apply_changesengine the Issue screen uses. The model never writes — it proposes; the app owns approval + execution.Core (
@commitea/core)propose_changetool declaration;REGINALD_SYSTEMupdated — "never claim a change is applied; you propose, the human approves."proposalsFor(args, currentLabels, title)— pure: builds the concrete, non-noopChangeProposal(s) (change + label diff) for a request, dropping invalid or unchanged axes.ChangeProposal/ProposeChangeArgstypes.App
propose_changeby planning against the issue's current labels (no write) and returns the proposals with the turn.useChatsurfaces pending proposals +approve/dismiss; approve callsonApplyChange(AppShell's guarded handler → PUT + board/forecast refetch), dismiss leaves it.ChatPanelrenders each proposal as a propose-approve card (diff + Approve/Dismiss).Verified
101 core tests green (4
proposalsForadded), desktop typecheck clean, 14 fixture e2e green.Gated live e2e against
gemma-4-26b: "Set the estimate on #3 to est/5d" → Reginald proposes "est/2d → est/5d" as an inline card and says it's proposed, not done; Dismiss leaves the repo untouched (screenshot in PR). The approve→write path is the #41 engine (separately verified change→revert).Not in this slice (later)
approved:truegate surfaced in the card.capture_work(big-model decomposition → Capture tray) andrecord_directive(→ pm-state ledger) are the remaining write tools.🤖 Generated with Claude Code
Completes "chat is the write-path" (decisions.md D1). Ask Reginald to re-estimate or reprioritize an issue; it formulates a proposal, you approve it inline, and the write runs through the same guarded apply_changes engine the Issue screen uses. The model never writes — it proposes; the app owns approval + execution. core (@commitea/core): - propose_change tool declaration + REGINALD_SYSTEM updated ("never claim a change is applied; you propose, the human approves"). - proposalsFor(args, currentLabels, title): pure — builds the concrete, non-noop ChangeProposal(s) (change + label diff) for a propose_change request, dropping invalid/unchanged axes. ChangeProposal / ProposeChangeArgs types. app: - model bridge executes propose_change by planning against the issue's current labels (no write) and returns the proposals with the turn. - useChat surfaces pending proposals + approve/dismiss; approve calls onApplyChange (AppShell's guarded handler → PUT + board/forecast refetch), dismiss leaves it. - ChatPanel renders each proposal as a propose-approve card (diff + Approve/Dismiss). Verified: 101 core tests green (4 proposalsFor added), desktop typecheck clean, 14 fixture e2e green. Gated live e2e against gemma-4-26b: "Set the estimate on #3 to est/5d" → Reginald proposes "est/2d → est/5d" as an inline card, says it's *proposed* not done; Dismiss leaves the repo untouched. The approve→write path is the #41 engine (separately verified change→revert). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>christian referenced this pull request2026-07-10 19:57:45 +00:00