Repository navigation
Ask a group's question in that group, not in the Bot's own chat - #551
Conversation
Work a group member hands a Bot with message_bot runs in a hidden turn of the Bot's own chat, so ask_user put the card in the Bot's private chat and the answer never went back to the group. Such a card now sits in the group it came from and its answer reaches the Bot as a hidden request from that member, so the reply returns to the group as the work did. Fixes ThinkFlowLab#550
Verifier report (review-pr), PR #551Verdict: PASS at Findings: nothing that needs fixing.
Security, fences and display names: no fence code changed. The model-visible text that is new is the request header ( This is not merge authority. T3 also needs the maintainer's approval through GitHub. |
The merge queue run for ThinkFlowLab#551 failed "warnings are kept, cleaned, written to the log, and read back after a restart" with ENOENT on diagnostics.jsonl: the log is written in the background, and on a busy runner the write had not landed after the test's fixed 50 ms sleep. Neither ThinkFlowLab#551 nor ThinkFlowLab#544 touches diagnostics; a slowed mkdir reproduces the same ENOENT locally. Poll for both lines (up to 5 s) instead. Docs-not-needed: test-only timing fix, no behavior change.
Verifier report (review-pr), PR #551Verdict: PASS at Why the tip moved: the merge-queue run 39432996183 (group on 17af764) failed one test,
Merge review (#551 × #544 in authz.js/channel.js): #544's "always" branch in the approval authz and #551's question gate are separate endpoints; no shared state changed. No actionable findings. This report is not merge authority. |
|
Owner re-approved in chat 2026-10-20 21:53 Asia/Shanghai (originally owner-queued). |
Generated client.js and patches regenerated from the merged core/; this branch adds no topics.json entries, so main's topics.json is kept as is.
A Bot that works on something handed out in a group (a member there sends it the work with
message_bot) runs it in a hidden turn of its own chat. Itsask_usercard therefore landed in the Bot's private chat, and an answer there never went back to the group. Now the card sits in that group's composer dock, named for the Bot that asks. The answer reaches the Bot as a hidden request from the member that handed the work over, so the Bot's reply goes back to the group the same way the work does. The group shows a quiet notice of the answer, and the Bot's private chat gets no card and no visible turn.Fixes #550
tools.js:ask_userin a turn that answers a group member's request (senderRoomId, notaudience: 'user', not a friend's) writesstate.questions[<room>](header,botId,replyTo, the turn'sorigin,allowCustom). Only one card per group: while one is open, a second Bot is told to ask in its reply.rt.answerGroupQuestiondelivers the answer and posts the notice.channel.jsanswer-question: routes a room card to it.delivery.js: a header for it (answeredIn).turns.js: a typed group line no longer clears the group's card.authz.js: only the asking Bot's owner or the room's owner sees or answers such a card. A non-owner's answer carriesorigin: other.roster.js: deleting the room or the Bot drops the card. Face-to-face rooms use the same path on the local home.core-host.md. Changelog fragment550-group-questions.fixed.md.Not changed:
ask_userinside a group Session is still refused (the Bot asks in its reply, which already shows in the group). Secret cards stay private.reply_to: "user"hand-offs are still answered in the Bot's own chat by design.Verification (tip 6dfe7ba)
cleanNamebefore it goes into the group notice.test/group-work.test.jsandtest/authz.test.jscopied in gives 4 fail / 27 pass. The 4 new Questions from work handed out in a group show in the Bot's private chat instead of the group #550 tests fail and the own-chat guard test passes. At the tip they all pass.ARCH_DOCS_BASE=origin/main TZ=UTC npm run verifypasses: core 1121/1121, social 313, tree 83, timeline 93, scripts 93, interop 37, live-e2e 16; arch-docs OK; patches check ok. oxlint warnings are 53 at both base and tip.tasks.test.js"an untagged hold stamps the latest working task…" failed once under full-suite load. It passed 3 of 3 alone and the rerun was fully green. That test uses millisecond timestamps, and this PR does not touch that code.dev/bench.sh+dev/smoke.mjs, DSH 0.2.0-rc.2, mock model) passes all 42 steps at 6dfe7ba.Not run: Desktop app, a real model, a live two-home face-to-face run, and a browser check of the group dock rendering. The client is unchanged:
QuestionDockalready readsquestions[sessionId]for the open conversation and showsheader.File overlap with open PRs: #544 touches
authz.js,channel.js,topics.json,core-host.mdand the 0001/0005 patches; #547 touches0001-core-fixes.patch,topics.jsonandcore-host.md. The source hunks are in different places.topics.jsonaddstest/group-work.test.jsto topic 0001.