docs: make the README's channel list and capability claims match the code - #7845
docs: make the README's channel list and capability claims match the code#7845JiaDe-Wu wants to merge 1 commit into
Conversation
GPT 5.6 Review (fork) — ✅ no blocking findingsReviewed Review detailsNo findings. |
Design Review (Fable 5, fork) — ✅ PASSDesign-level review of Every factual claim in the diff checks out against the base tree: the ten channels match the Design-Verdict: PASS Docs-only accuracy fix, every claim verified against the transports' declared capabilities; per-channel wording is grounded rather than copied, and scope matches the description exactly. [DESIGN-REVIEWED] 4eb1262 |
Opus 4.8 Review (fork) — ✅ no blocking findingsReviewed |
1bc2846 to
51298de
Compare
|
Thanks — the Design Review side-observation was a real find, and it is now fixed in the same change (force-pushed as I verified it independently before acting on it, and the verification is why the two rows are corrected differently rather than by replacing the phrase in both: WeChat has no streaming at all.
So the row now names the typing indicator and says the reply arrives as complete messages. Webex does show progress — just not a token stream. I also checked the row the observation did not name: WeCom keeps "streaming replies", because One thing worth recording for whoever maintains this table: |
|
Request: a re-run of the fork AI review lane for head The red is
|
| event | when |
|---|---|
this PR's GPT 5.6 Review check completed |
2026-09-03T18:27:02Z |
| #8342 — same-repo lane guard | merged 2026-09-04T10:04:46Z |
| #8450 — fork lane guard, closing #8344 | merged 2026-09-06T06:11:21Z |
#8344 described exactly this shape for fork-gpt-review.yml ("a fork PR whose later review run fails to produce a completed verdict replaces a posted verdict with a 'review incomplete' body"), and its guard landed about two hours ago.
The lane produces real verdicts now
Fork GPT 5.6 Review(workflow325798095) today: 21 success, 0 failure, 75 skipped, 4 still in flight.- The ten most recently updated merged fork PRs all show
GPT 5.6 Review = pass(fix(dashboard): end pointer drags when capture is lost (#8271) #8904, fix(dashboard): name the offender when the slots flush fails to serialize #8888, fix(dashboard): retire stale questions after consumed steers #8820, fix(aws-control): gate drive bootstrap on app-enabled inside the lock #8456, fix(design-tweak): stop the preview HTML scan enumerating a junctioned tree #8767, fix(sandbox): retry a spawn whose launcher interpreter is mid-rebuild #7670, fix(ci): parse indented adjudication verdicts #8408, fix(security): a destructive literal handed to a search verb is not an action #8805, fix(papyrus): refuse a junctioned path in the Compile link scan #8766, fix(sandbox): unmask an app backend's own state leaves for its spawn #8794) — the newest at2026-09-06T06:17:13Z.
Why I am asking rather than pushing
A new head commit would re-trigger the lane, but it also discards the 57 check-runs that are currently green here and sends a +15/-9 docs diff back through the full backend matrix. That matrix has an open flake class — #4227's crashed-worker path on the POSIX shard, which reddened Coverage Gate on my #8228 with a diff that could not account for it, and which #8691 addresses. Trading a stale non-verdict for a fresh unrelated red seemed like the wrong direction on a docs-only change.
If pushing a rebase is the preferred route here, say so and I will do it — I just did not want to burn the green run on a guess.
…code Two related drifts in the same tables, both verified against the transports rather than against another prose list. **Missing channels.** `src/kiro_crew/docs/index.md` -- the packaged, user-facing feature index -- lists ten chat channels. The README and CONTRIBUTING listed seven or eight, and the two absent from every list were Feishu and iMessage. Both ship a config section, a TransportCapabilities declaration, a transport, tests, and a packaged setup guide; README mentioned neither string once. Four lists were behind by different amounts: the "Add a messaging channel" paragraph (missing Feishu, iMessage), the architecture diagram (also missing WhatsApp), the Surfaces table (no row for any of the three), and CONTRIBUTING's "Connect ... later" sentence. **Two rows claimed a capability their transport does not have.** The Webex and WeChat rows both said "streaming replies" while `webex/transport.py:71` and `weixin/transport.py:67` declare `streaming=False`. Found by the Design Review bot applying this change's own accuracy standard to the rows it had not touched. The corrected wording differs per channel because the two cases are not the same failure: - WeChat has no streaming at all. `weixin/turn_renderer.py`: "iLink has no message-edit / streaming primitive ... this renderer BUFFERS the whole turn and emits it once on on_done", with the native typing indicator "the only progress affordance iLink offers". - Webex does show progress, just not as a token stream. `webex/renderer.py` posts a placeholder and edits it, bounded by a 10-edit budget the module docstring calls "the whole design", so the answer arrives as a completed edit. WeCom keeps its "streaming replies" wording: it declares `streaming=True` and its renderer really does emit throttled replace-in-place stream frames. The three new Surfaces rows are written the same way. Feishu and iMessage both declare `streaming=False`, so they say replies arrive as complete messages -- the phrasing the Teams row already uses -- rather than inheriting a neighbour's claim. The outbound-connection sentence gained a second exception. It read "apart from Teams (which needs a public HTTPS webhook), these channels connect outbound"; iMessage talks to Messages.app on the same Mac, so listing it without amending that clause would have made the sentence false for one of its own members.
51298de to
4eb1262
Compare
|
Rebased onto main Clean rebase, no conflicts. The diff is unchanged: 2 files, +15/-9, docs only. Gates: no Python or frontend files changed, so the lint/test gates do not apply. I did verify the two new doc links resolve on current main ( Please review the rebased branch. A maintainer push makes the maintainer the last pusher, so under this repo's last-push rule a second approver is needed. Reply here if anything looks wrong. |
Problem / Motivation
Two related drifts in the README's channel tables, both found by checking the transports rather than another prose list.
Channels that ship but are not listed.
src/kiro_crew/docs/index.md— the packaged, user-facing feature index — lists ten chat channels. The README andCONTRIBUTING.mdlisted seven or eight, and the two absent from every one of those lists were Feishu (Lark) and iMessage. Both are fully shipped: a config section inconfig/loader.py, aTransportCapabilitiesdeclaration, aMessagingTransport, tests, and a packaged setup guide.README.mddid not contain either string once.Two rows claimed a capability their transport does not have. The Webex and WeChat rows both said "streaming replies", while
webex/transport.py:71andweixin/transport.py:67declarestreaming=False.Why it matters
The README is the front door. A reader deciding whether Kiro Crew fits their setup cannot discover a channel that already exists and needs no work — they conclude it is unsupported and stop. That is the expensive kind of doc gap: it costs a user who would have succeeded.
A wrong capability claim costs differently. Someone picks Webex or WeChat because the table promised streaming, and finds out after setup that the answer arrives in one bubble.
AGENTS.mdnames the general case: "a doc nobody updated is worse than no doc, because readers still trust it."What changed (motivation → approach → change)
Four lists were behind, by different amounts:
CONTRIBUTING.md"Connect … later"Three details are deliberate rather than mechanical.
The two corrected rows are corrected differently, because the two cases are not the same failure. A find-and-replace of "streaming replies" would have been wrong for one of them:
weixin/turn_renderer.py: "iLink has no message-edit / streaming primitive: everysendmessagecreates a NEW chat bubble … this renderer BUFFERS the whole turn and emits it once onon_done", with the native typing indicator "the only progress affordance iLink offers". So its row now names the typing indicator and says the reply arrives as complete messages.webex/renderer.pyposts a placeholder and edits it into the answer, bounded by a 10-edit budget its docstring calls "the whole design" ("a typewriter edit-stream is structurally impossible"). So its row says progress shows as edits to one message, which the finished answer replaces.WeCom keeps its "streaming replies" wording, because it earns it:
streaming=True, and its renderer emits throttled replace-in-place stream frames over WS.The three new Surfaces rows describe each channel rather than copying a neighbour. Feishu and iMessage both declare
streaming=False, so they say replies arrive as complete messages — the phrasing the Teams row already uses — instead of inheriting the "streaming replies" every DM row around them carries.The outbound-connection sentence gained a second exception. It read "Apart from Teams (which needs a public HTTPS webhook), these channels connect outbound, so you do not need to expose the dashboard port publicly." iMessage talks to Messages.app on the same Mac; adding it to the list above that sentence without amending the clause would have made the sentence false for one of its own members.
Tests
N/A — documentation only, no code path changes. The two gates that own this content pass:
Manual verification
Every claim was checked against code, not inferred:
*Configfields insrc/kiro_crew/config/loader.py— slack, wecom, telegram, weixin, whatsapp, feishu, discord, webex, teams, imessagesrc/kiro_crew/docs/and is reachable from that directory's index (docs-lint enforces the second half)streamingwas read off all ten*_CAPABILITIESdeclarations: True for slack, wecom, telegram, discord, whatsapp; False for feishu, weixin, teams, webex, imessage. The table's claims now match that splitweixin/turn_renderer.pyandwebex/renderer.py's own docstrings, quoted aboveimessage-integration.md; the Feishu long-connection claim fromfeishu-integration.mdNo new markdown file, no second doc on the subject, no index changes needed — every target was already indexed.
Related Issues
None open for this.
The capability half of the change is a follow-up to the Design Review bot's side-observation on the first revision of this PR, which applied the change's own accuracy standard to the rows it had not touched and found Webex and WeChat. I verified both independently before acting on it, and the verification is what produced the two different corrections above — the bot's finding was directionally right but treating them alike would have understated Webex.