Skip to content

feat(face-rooms): a plain line is answered by the Bots it is for, not by every Bot (#299) - #300

Merged
Birfy merged 1 commit into
mainfrom
feat/face-plain-route
Oct 18, 2026
Merged

Birfy merged 1 commit into
mainfrom
feat/face-plain-route

Conversation

@Birfy

@Birfy Birfy commented Oct 18, 2026

Copy link
Copy Markdown
Collaborator

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 attests typed_by_owner:

  • @Name / label / handle still targets exactly that one Bot (unchanged). @all is unchanged (everyone) and is not routed (everyone flag now carried from the friend's @all).
  • Same single sequential round as feat(face-rooms): a plain line lets every Bot in the room answer, one pass, capped (#295) #296 (admin first, then room order, cap 6; replies' own @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).
  • A line to everyone (你们/大家/各位/everyone/introduce yourselves/…, ROOM_EVERYONE) says each Bot may give its own short answer unless it would just repeat.
  • Follow-up: the Bot that spoke last before the line (recentSpeaker) is asked first and named in the note.
  • Fallback: if every Bot passes on the owner's own line, the first Bot that passed answers (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.
  • A pass is the existing [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.
  • Approval / Auto-send unchanged. A line the user adds mid-round is handled by the old rule (the round stops routing).

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 @all unrouted; 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 verify green locally. Docs: core-host, social, plugin-runtime. Patches regenerated.

…s by intent, last speaker first, first Bot as fallback (#299)
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 18, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-18T08:32:11.419655Z 8ad9531 PR opened
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@Birfy
Birfy added this pull request to the merge queue Oct 18, 2026

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 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".

Comment thread core/src/host/groups.js
// 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

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge 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 👍 / 👎.

Merged via the queue into main with commit a4ffe8a Oct 18, 2026
8 checks passed
@Birfy
Birfy deleted the feat/face-plain-route branch October 18, 2026 08:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Face rooms: a plain line should be answered by the Bot(s) it is for, not by every Bot (follow-up to #295)

1 participant