feat: restyle Slack cards with a color-bar attachment grammar - #62
Merged
Merged
Conversation
Every bridge card (Run, collection, Gate decision, decision record, PR root and thread events, terminal prompt, fatal alert) now uses one shell from src/slack/card.ts: a top-level header plus action blocks, and a colored legacy attachment holding fields, an optional cause -> action note, lists, a dashboard and a KST footer. - Buttons stay top-level: attachment clicks arrive as message_attachment containers, which the Gate and direct-input handlers reject. Action blocks and their IDs are unchanged. - Transport passes attachments on post, reply and update. chat.update always sends attachments (an empty array when absent) so an old body cannot survive an update. - Cards no longer show internal IDs, hashes, paths, snake_case codes, mentions (except the fatal alert's owner) or links (except the PR button). The runs report keeps the IDs and now also prints Gate degraded reasons. - Living cards (Run, collection, PR root) show a refresh time stamped at publish; their fingerprint is computed with the stamp blanked, so time alone never updates a card. Gate, resolution and terminal renderers read no clock. - esc/cut/capSectionText/kst are shared instead of copied into five renderers; the terminal observer uses renderFingerprint. - Docs: UX section 1, 3.1-3.3, 3.5, 5, 6; spec 5.4, 6.1, 6.3; OD-067 and OD-080 follow-ups; DL-074, with DL-054's observation-time rule marked SUPERSEDED. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VCzVZL5JSTTKjcoJyhYpzR
Brings in #61; no conflicts. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VCzVZL5JSTTKjcoJyhYpzR
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.
Why
The user asked for the Slack cards to look like the trading-room project. The cards showed internal IDs, hashes and diagnostic codes, for example a Run card listing
[repository_route_blocked]and twelve-character hashes.What
Every Bridge surface now uses one card grammar (DL-074): Run, collection, Gate decision, Gate resolution, PR digest, terminal prompt and fatal-exit alert.
{emoji} {kind} · {head}.runs --dry-runandstatus.message_attachment, which the parsers reject, sorenderCardShellthrows if an action block would end up in the attachment.chat.updatealways sendsattachments(an empty list when there are none), so old attachments never linger.textare unchanged, and작업 재개still appears only after resume evidence.src/channel/**,src/store/**andplugins/**are untouched.Tests
card-surface-scan.test.tschecks every surface for leaked IDs and codes.Deployment note
Every card fingerprint changes, so observed Run, collection and PR cards update once, and open Gate cards update under the write fence. Deploy with no Gate open.
🤖 Generated with Claude Code
https://claude.ai/code/session_01VCzVZL5JSTTKjcoJyhYpzR