Repository navigation
feat(face-rooms): a plain line is answered by the Bots it is for, not by every Bot (#299) - #300
Conversation
…s by intent, last speaker first, first Bot as fallback (#299)
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 8ad9531c56
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| // forced: the friend's own home answers it). A line that follows up a friend's Bot is theirs to answer. | ||
| function fallbackDue(round) { | ||
| const route = round.route | ||
| if (!route?.fallback || route.forced !== undefined || (route.last?.remote && !route.broadcast)) return false |
There was a problem hiding this comment.
Apply the fallback to unrelated questions after remote replies
When a friend's Bot supplied the most recent Bot message, route.last.remote is true for every subsequent non-broadcast plain line, even though recentSpeaker does not determine whether the new line is actually a follow-up. Thus, if the owner next asks an unrelated question and every local Bot returns [PASS], this condition suppresses the promised fallback and leaves the owner unanswered. The remote-speaker exception needs to depend on the line actually being a follow-up rather than merely on which Bot spoke last.
Useful? React with 👍 / 👎.
Closes #299. Refines #295/#296.
Rule as implemented
For a plain line (no
@name/ label / handle) in a face-to-face room — the owner's own, or a friend's line the server atteststyped_by_owner:@Name/ label / handle still targets exactly that one Bot (unchanged).@allis unchanged (everyone) and is not routed (everyoneflag now carried from the friend's@all).@s start nothing, so no loops; later Bots see earlier replies). Each Bot's prompt now has a routing note (routeNote): answer only if the line is for you (named/role), or nobody before you answered it and you add something genuinely new; reply[PASS]if a Bot before you answered, if it is for another Bot by name/role, or if it follows up on another Bot's answer. The note lists what each member does (role) and the friends' Bots (who answer for themselves in their own home).你们/大家/各位/everyone/introduce yourselves/…,ROOM_EVERYONE) says each Bot may give its own short answer unless it would just repeat.recentSpeaker) is asked first and named in the note.fallbackDue; no pass option), so the user is never ignored. Not forced for a friend's attested line (their home answers it) nor when the follow-up is to a friend's Bot.[PASS](isPass): nothing posted, logged, fanned out or shown, and no approval hold. No UI change; the only visible state is the existing "thinking" of a Bot whose turn is running.No Bot Social change needed.
Tests (
core/test/rounds.test.js)pass posts nothing and one Bot answers; everyone-line may get several;
@Name/ friend@allunrouted; all-pass fallback (owner) / not forced (friend); fallback reply's@starts no turns; follow-up asks the last speaker first; follow-up to a friend's Bot not forced locally.ARCH_DOCS_BASE=origin/main TZ=UTC npm run verifygreen locally. Docs: core-host, social, plugin-runtime. Patches regenerated.