Skip to content

fix(hub): show an approval decision once instead of as raw JSON - #130

Merged
TheGreatAxios merged 2 commits into
mainfrom
cl-12071-show-an-approval-decision-once-instead-of-as-raw-json-from
Nov 4, 2026
Merged

TheGreatAxios merged 2 commits into
mainfrom
cl-12071-show-an-approval-decision-once-instead-of-as-raw-json-from

Conversation

@TheGreatAxios

@TheGreatAxios TheGreatAxios commented Nov 4, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • The conversation mirror recognizes Interchange's approval decision message (sent from signal@local, body ApprovalDecision JSON) instead of reading it as the person's words.
  • For the project page it keeps only a note the person wrote with the decision, so an approval shows once, as its card.
  • For a resumed coordinator's held context it reads each decision as a plain line (Approved a request., Rejected a request: <note>).

Verification

  • bun run lint, format:check, typecheck, test (219 pass), pins:verify and vendor:verify pass; CI's e2e and e2e-pipeline pass.
  • Mirror tests read a committed run repo holding a typed message, an approval, a rejection and a rejection with a note, in both modes; they fail against origin/main.
  • Reproduced twice on origin/main: a self-hosted run's stored conversation returns {"outcome":"approved"} as a person turn.

Closes CL-12071

@linear-code

linear-code Bot commented Nov 4, 2026

Copy link
Copy Markdown

CL-12071

@TheGreatAxios
TheGreatAxios force-pushed the cl-12071-show-an-approval-decision-once-instead-of-as-raw-json-from branch from aed2038 to da2694f Compare November 4, 2026 05:52
@TheGreatAxios
TheGreatAxios marked this pull request as ready for review November 4, 2026 05:52

@corbits-triage corbits-triage Bot left a comment •

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Triage requests changes:

  • Conventions: added code matches a code pattern
    • apps/hub/src/mail/conversation-turns.ts:172 empty-list-fallback: Invented fallback `?? []`; handle the missing value instead.

Interchange resumes a tool waiting on the person's approval with the
decision as JSON, sent from signal@local, and stores it in the
coordinator's conversation. The conversation mirror kept every inbound
message not sent by a run as the person's words, so the page showed
{"outcome":"approved"} under the approval card that already shows it.
For the page the mirror keeps only a note the person wrote with the
decision. A resumed coordinator has no card, so its held context reads
each decision as a plain line instead of the JSON.
@TheGreatAxios
TheGreatAxios force-pushed the cl-12071-show-an-approval-decision-once-instead-of-as-raw-json-from branch from da2694f to 1bd1056 Compare November 4, 2026 06:01
@corbits-triage

corbits-triage Bot commented Nov 4, 2026 •

Copy link
Copy Markdown

Triage: Pass

No changes needed from you. A maintainer will review this pull request.

@corbits-triage
corbits-triage Bot dismissed their stale review November 4, 2026 06:14

Nothing triage asked to change still fails, so this request no longer stands.

Comment thread apps/hub/src/config/resume.ts Resolved
Comment thread apps/hub/src/mail/conversation-turns.ts Resolved
corbits-triage[bot]
corbits-triage Bot previously approved these changes Nov 4, 2026

@corbits-triage corbits-triage Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No defects reported.

@TheGreatAxios
TheGreatAxios added this pull request to the merge queue Nov 4, 2026
Merged via the queue into main with commit 481ac4d Nov 4, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant