From cc0c574a2e52e2b1f6166e3c1fb76f6d662540b2 Mon Sep 17 00:00:00 2001 From: Abir Abbas Date: Wed, 28 Oct 2026 14:08:44 -0400 Subject: [PATCH 1/6] app: settle a crew proposal's Inbox item when the crew is made Making the crew closed the proposal's ask, but its Inbox item was resolved only through a receipt id, and the formation receipt names the crew, so the item stayed waiting (and a later Inbox read brought it back). Resolve the proposal's item explicitly on create, once; the chat keeps its single formation fact. Co-Authored-By: Claude Opus 5.5 (1M context) --- cmd/codeaf/appcrewmembers.go | 3 +++ cmd/codeaf/appcrewpropose_test.go | 24 ++++++++++++++++++- .../unreleased/0-app-crew-proposal-inbox.md | 8 +++++++ .../manual/chat/team-questions-and-caps.md | 7 ++++++ 4 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 docs/changes/unreleased/0-app-crew-proposal-inbox.md diff --git a/cmd/codeaf/appcrewmembers.go b/cmd/codeaf/appcrewmembers.go index a4f4478fff..92211d7ef0 100644 --- a/cmd/codeaf/appcrewmembers.go +++ b/cmd/codeaf/appcrewmembers.go @@ -740,6 +740,9 @@ func (b *appBackend) dropProposal(id, option string) { // "Made the crew" here drew the card's end twice. A kept agent's receipt // says so in its own words. if option == appwire.ProposalCreate { + // The formation fact names the crew, so its receipt id cannot resolve + // the proposal's Inbox item through the usual receipt-id mapping. + b.inboxResolved(appInboxID(ask.Agent, ask.ID), appwire.Entry{}) return } b.emit.Emit(appwire.EventEntryAdded, appwire.EntryAdded{Entry: appwire.Entry{ diff --git a/cmd/codeaf/appcrewpropose_test.go b/cmd/codeaf/appcrewpropose_test.go index bf52844150..f9240beb68 100644 --- a/cmd/codeaf/appcrewpropose_test.go +++ b/cmd/codeaf/appcrewpropose_test.go @@ -462,6 +462,7 @@ func TestAppCrewProposalAtTheDayCapAsksAboutTheCap(t *testing.T) { // agent alone leaves "Kept as one agent · you ·