diff --git a/CHANGELOG.md b/CHANGELOG.md index da9598a23..47fa92dd0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,80 @@ New entries are written as one fragment file per change in [changelog.d/](change ## [Unreleased] +## [0.2.8] - 2026-10-26 + +### Added + +- Each Bot keeps a task list it updates from the conversation, and a board shows Not started, In progress and Done for that Bot, a child Bot, and — for a group admin — the tasks member Bots are tracking in the group ([#1058](https://github.com/ThinkFlowLab/FlyBot/issues/1058)). +- Settings → Bot Social now lists friends and links each of your Bots to People with access, so sharing and revoke are findable without opening each Bot first. Add friend stays on the + menu, and the same panel is also on that page ([#1074](https://github.com/ThinkFlowLab/FlyBot/issues/1074)). +- A group's Tasks board shows one overall task and the per-Bot subtasks under it. Bots record that plan with track_tasks, continue the highest-priority unfinished task, and ask the user or the group when a task is waiting on an answer ([#1099](https://github.com/ThinkFlowLab/FlyBot/issues/1099)). +- A Bot with unfinished conversation tasks keeps working without a new message. The host starts a continue turn for the next task, in that Bot's own chat or in the group session that owns the subtask, and stops when the work is done or waiting on an answer. In a group, members with their own subtasks are woken in the same pass ([#1109](https://github.com/ThinkFlowLab/FlyBot/issues/1109)). +- A task that names the issue or PR it came from now says where your answer goes, and the Bot writes it there itself ([#1154](https://github.com/ThinkFlowLab/FlyBot/issues/1154)): the result card shows a *Comment goes to …* link, accepting or sending back leaves one comment for the Bot to post with its own GitHub connector, and a comment that could not be posted says so once on the card instead of failing silently. +- The team can set quiet hours — a window (off by default) that a new or edited scheduled task's time must fall outside, checked when it is saved rather than at delivery: a task inside the window is refused with a sentence naming when it ends, and nothing is created or moved. Repeat and cron tasks are still allowed and the page says they may run inside the window, because DSH decides when they fire (#1166). +- The task board dialog gains a **Delivery** view (#1173): one read-only snapshot of the repository's GitHub issues, pull requests and CI runs, in five columns — original issue, ready to start, in progress, in review, and done today — with a verdict/CI badge per pull request and a header that reports today against the last 7 days. It is repository-wide, so the per-Bot rail does not appear, and it never writes to GitHub: the host serves a cached snapshot built only from `GET` requests, and the token stays host-side. The view replaces the board with one honest line when no GitHub connection is set up. +- A CI scan (`.github/scripts/check-mojibake.mjs`) now fails a pull request whose tracked text files contain U+FFFD — the three bytes `EF BF BD` a lossy decode writes in place of every character it could not read — and names each file with its occurrence and line counts, so the fix reads as "regenerate", not "retype the text". Binary assets are skipped by content (a NUL byte in the first 8 KiB), which is the rule that makes the gate usable at all: decoding the tree instead reports 22 binary files and ~2,065,422 replacement characters on a clean `main`. `AGENTS.md` now says why a file rewritten from an outside source, or regenerated, is re-read as bytes and re-encoded by its generator. See [#1188](https://github.com/ThinkFlowLab/FlyBot/issues/1188). +- A Bot can be spoken for by a supervised external process in rooms (#198): `create_bot` takes an `external` block (`driver: subprocess`, an argv array, optional `cwd` and `env`), and `room-participant.js` routes that member to a new driver while every other member keeps its DSH Session. The process is started per room and Bot, answers one JSON line per turn, and its start, clean exit, crash and timeout are explicit states — a crash is posted as the Bot's own line in the room, and a turn that reaches a dead process ends with a failure instead of silence. +- A finished task can now be accepted or sent back right in the inbox ([#401](https://github.com/ThinkFlowLab/FlyBot/issues/401)): the result card shows the Bot's evidence links and model, **Accept** closes the task as done, and **Send back** asks for one line about what should change and returns the same task to the Bot. + +### Changed + +- Removing one of a friend's Bots now says which link keeps the friend in the list: the question names the Bots of theirs that are still shared ("Bob stays a friend: still shared through Writer."), instead of only saying the owner is not unfriended and leaving the row unexplained ([#1001](https://github.com/ThinkFlowLab/FlyBot/issues/1001)). +- The new-chat menu offers joining and starting as two rows, so one label no longer names both: **Join by number or link** carries the number and the invite link, and **Start a face-to-face room** opens the same screen under its own name without the link and scan fields, because those are ways into a group that already exists ([#1021](https://github.com/ThinkFlowLab/FlyBot/issues/1021)). +- A fresh 6-digit code no longer answers with an empty-result line. When nobody is waiting, the dialog's primary line is **Start a new room with …** and **Start a new room** is the first button; the note under it still says to ask for an invite link if that room already opened ([#1053](https://github.com/ThinkFlowLab/FlyBot/issues/1053)). +- A face-room line the server sends without an `event_id` is still keyed by the line itself, but the key now carries a bounded digest of the text instead of the whole sentence: `seen` lives in the owner's settings, so on a server that stamps no ids it would otherwise fill up with a copy of the conversation (#1062). The key stays stable across polls, so the duplicate `#1045` fixed does not come back. +- A `Verdict:` now counts only when the workstation that claims to have written it signed it: each reviewing workstation holds one Ed25519 private key, its public key sits in `.github/agent/signers.json`, and the gates verify `Signed-by:` / `Nonce:` / `Signature:` offline over the pull request, the full tip SHA, the verdict and the workstation — so a PASS written in a Reviewer's name on the shared account is no longer a conclusion, it is listed as unverified ([#1110](https://github.com/ThinkFlowLab/FlyBot/issues/1110)). +- The social panel's group and dock surfaces are usable at phone width: below 640 px its buttons and inputs (including the invite-preview and waiting-room footers) are 40 px tall, its row controls at least 32 px, a long unbroken run in a held reply wraps inside its card, the dock clears the home indicator, and the phone block now closes the stylesheet so no later rule of equal specificity can override it (#1147, #1149). +- A group picks one task lead to divide the board. That Bot, or the admin when none is picked, assigns each part; the card is claimed and the assignee starts it in the group without waiting for a confirmation. A question stays in the group ([#1182](https://github.com/ThinkFlowLab/FlyBot/issues/1182)). +- The merge gate now refuses a tip whose only review is a comment from the pull request author's own GitHub account. A PASS from that login counts when the comment header carries `Attestation: role=` for this tip, the role matches `Written-by`, and the role is not an Owner of the pull request. A review posted by a different GitHub account is unchanged ([#644](https://github.com/ThinkFlowLab/FlyBot/issues/644)). + +### Fixed + +- Accepting a friend's invite again now shares your Bot back with them ([#1000](https://github.com/ThinkFlowLab/FlyBot/issues/1000)): the two of you can message each other right away instead of one direction staying silently absent until they share again. +- Coming back to a group nobody has spoken in yet shows the invite link the room already has, instead of minting another one on every visit — the strip now reads the room's links first, as the Members card does, counts a dated link live until its deadline passes, and never keeps the previous room's link when the dock moves to another group ([#1019](https://github.com/ThinkFlowLab/FlyBot/issues/1019)). +- Re-accepting an invite from a Bot Social server whose invite info names no `bot_id` now grants to the peer id `list_friends` lists instead of a `friend_home` the server never receives ([#1024](https://github.com/ThinkFlowLab/FlyBot/issues/1024)): the pair becomes two-way again, and when no listed friend names that home the accept no longer claims a share that did not happen. +- A window that showed the Bot team read-only because another dsh held `state.lock` now takes the lock on its next write once that window closes, instead of staying read-only until a `state` read happened to refresh it (#1027). New work that changes the state outside a request belongs in `rt.mutate(fn)`, which follows what the other host left before applying the change, so neither side's work is lost. +- The Add friend result no longer stacks a second "Your" on a Bot whose owner already named it that way — a Bot called `Your Bot` reads as "Your Bot is shared back, so they can reach you too." instead of "Your Your Bot …" ([#1037](https://github.com/ThinkFlowLab/FlyBot/issues/1037)). +- The group strip no longer offers **Invite by link** before it has read the room's own links, so a fast click cannot mint a second ticket the panel was about to discover, and a chat that draws no strip (a face room, a Bot chat, a chat with turns) no longer issues that read at all ([#1038](https://github.com/ThinkFlowLab/FlyBot/issues/1038)). +- A turn that dies before writing anything is no longer invisible: when a model call is refused (a provider budget cap, a 429), the chat shows one line naming the provider's own error above the composer, and a run of them says how many turns in a row died, so a quota outage reads as an outage instead of a Bot that chose to stay silent. A turn that already wrote text adds no line, and a completed turn clears the count ([#1044](https://github.com/ThinkFlowLab/FlyBot/issues/1044)). +- A face-room line the server sends without an `event_id` is posted into the room once: the poll keys it by the line itself (type, sender, server time, text), instead of appending a second copy on the next poll — the duplicate the room drew as the same sentence twice, often seconds after both people had left ([#1045](https://github.com/ThinkFlowLab/FlyBot/issues/1045)). +- A window that was read-only only because the other dsh had the team open now takes the free lock for the writes that were still inline, instead of dropping them or refusing with the read-only error: a friend's first line and the unread mark, a team exchange, and every DSH Agent change (add, adopt, archive, remove). The change the other host left survives, because the write adopts and re-resolves its records before it applies ([#1048](https://github.com/ThinkFlowLab/FlyBot/issues/1048)). +- Typing a room number that is not exactly six digits keeps Join disabled and shows "Enter 6 digits" under the field (Chinese: 请输入 6 位数字). An empty field stays quiet, and six digits still join ([#1052](https://github.com/ThinkFlowLab/FlyBot/issues/1052)). +- When someone accepts your invite, the sidebar says who joined and People with access lists them even if the grant list is still empty, with one step to ask them to share a Bot back ([#1054](https://github.com/ThinkFlowLab/FlyBot/issues/1054)). +- Two identical lines from one person inside the same second in a face room now both appear: a line the server stamps in whole seconds is told apart by its own cursor (or, without one, by its place in the snapshot) instead of being read as the same line twice, so the second one is no longer dropped ([#1063](https://github.com/ThinkFlowLab/FlyBot/issues/1063)). +- A group invite link seats the guest's Bots when they claim it, even if the accepting knock never arrives, and the group opens in the guest's sidebar. A claim the host cannot finish is named on the group's Members card ([#1064](https://github.com/ThinkFlowLab/FlyBot/issues/1064)). +- A friend DM shows when the other home's Bot could not reply (for example it has no API key) instead of staying on "Weighing the options…" ([#1068](https://github.com/ThinkFlowLab/FlyBot/issues/1068)). +- A friend's Bot that shares a local Bot's display name no longer wears that local Bot's picture: two default Chiefs both store the blue whale, and the friend's row now steps to a different shape while the local Chief keeps its own look ([#1069](https://github.com/ThinkFlowLab/FlyBot/issues/1069)). +- A face room that Bot Social no longer lists is marked Closed on the hosted room, so it leaves the active sidebar list and stays as one Past rooms row. When Bot Social sends `closed_at`, that time is the row's time on every home ([#1070](https://github.com/ThinkFlowLab/FlyBot/issues/1070)). +- **People with access** asks before **Revoke** (`Revoke ?` with **Revoke** and **Keep**, naming the rooms that share is used in), and the row separates the handle from "In use in N rooms" with a middle dot (`@handle · In use in 3 rooms`) instead of running the two together ([#1073](https://github.com/ThinkFlowLab/FlyBot/issues/1073)). +- Enter chat in a face-to-face room no longer shows "internal error" after the other person has joined. The start request sends an empty JSON body, which Bot Social accepts ([#1085](https://github.com/ThinkFlowLab/FlyBot/issues/1085)). +- Dismissing an Enter-chat error and typing in the room composer no longer shifts the window sideways. The page and the app frame cannot scroll horizontally, and the error toast stays inside the viewport ([#1086](https://github.com/ThinkFlowLab/FlyBot/issues/1086)). +- A friend's direct chat says "Waiting for their approval" (等对方批准) while you wait for their reply, instead of a generic thinking line such as "Sorting out the details…", so a reply their home is holding for approval is not presented as this side still working it out (#1087). +- A friend's Bot in the @ menu and in a mention chip uses the same picture as its sidebar row. A face-room Chief no longer shows a handle-seeded green moon there while the sidebar shows the stored blue whale ([#1088](https://github.com/ThinkFlowLab/FlyBot/issues/1088)). +- A face room you start alone shows your Chief's own avatar in the room header, instead of a blank grey circle, until someone else joins ([#1089](https://github.com/ThinkFlowLab/FlyBot/issues/1089)). +- A message no longer disappears when the team's next write fails. The friend-line mark and the exchange record are written before the message is handed to the Bot, so a failed write (another window took the team over, or the disk refused) used to drop the whole line; now it is logged once and the message still arrives (#1096). +- Face lobby names and face-room titles stay readable. Labels under the avatars wrap, and the sidebar, header, and session title show both names instead of cutting the second one to an ellipsis ([#1102](https://github.com/ThinkFlowLab/FlyBot/issues/1102)). +- When the other side leaves a face room and that leave closes the room, the room says so once: the "left the room. Room closed." banner is the only line, so the short platform leave no longer appears next to it. A leave that leaves the room open still posts its short line ([#1103](https://github.com/ThinkFlowLab/FlyBot/issues/1103)). +- Ordinary group lines to a friend's Bot no longer keep stopping on "Waiting for approval" after Auto-send is on for that pair (the card's Auto-send from now on, or Sharing → People with access). A line Bot Social held only because the text looked like an instruction (a word such as "token", with no secret, file, or instruction-override) goes out; a real finding still waits for approval (#1113). +- An ordinary @ or reply in a shared group no longer stops on "Waiting for the owner's approval" when the other home has not turned Auto-send on. Seating both Bots in the room is the consent for that text. A file, a DLP finding, a risk flag, or an instruction-override still waits for approval. A face-room line held as policy still waits for the owner (#1118). +- Starting FlyBot on DSH no longer stops before the Main Bot is ready: the task drive registers its handle with Cordis `provide` instead of a property write the host rejects ([#1120](https://github.com/ThinkFlowLab/FlyBot/issues/1120)). +- A Bot that already shares a live local group, including a group a link seated, can @ the other home's seated Bot with the `@…home` mention, and each successive line is delivered in the group, without a separate Sharing grant. A direct message to a Bot outside every shared room is still refused, and leaving the group restores that refusal (#1126). +- A Bot's existing group sessions follow a model change, including when the record already says that model is applied, so a turn no longer asks a provider the Bot was moved off (#1127). +- **Share with a friend** used to report success for a Bot the other home no longer runs. A row whose Bot is gone from the roster that home is still listed in now says so — ` was removed from that home. Sharing with it cannot reach anyone.` — and its **Share** is disabled; a click that still reaches the host is refused with `bot/removed-bot` and sends no grant, so the list stops claiming a share that would reach nobody. The row is judged on both the peer id and the handle (`list_remote_bots` entries carry both), and a home missing from the cached roster, or a roster read that failed or came back empty, decides nothing — it shares as before rather than guessing (#1128). +- Needs you rows in the Inbox can be answered there. An ask_user card shows its options and a short answer — one option sends at once, a multi-select toggles until Submit — a task that is waiting on input takes a short answer, and a listed tool approval still clears with Allow once or Reject, so Open is not the only way through a group that has no card (#1140). +- A group @ inserts the seated Bot's name, and Bots that share a live group can message each other without a separate friendship. A deleted friend home is dropped from the room and its chat is hidden ([#1141](https://github.com/ThinkFlowLab/FlyBot/issues/1141)). +- Two controls in the social panel that stayed at their desk size on a phone are now touch-sized: the face-to-face room header's small buttons are 40 px instead of 22 px, and the account menu's links keep a 40 px hit area instead of collapsing to a 12 px text run (#1156). +- A group invite link seats the joiner even when the host's FlyBot has been open, and the joiner's sidebar shows the group. The host was re-reading every open link on each inbox poll and, once Bot Social answered "Too many attempts. Try again in 10 minutes.", previewing again before that cool-down elapsed, so a new claim was never seen; a room share whose text was outside 1–4000 characters was refused, and a join that stayed on an approval card was treated as already sent. ([#1161](https://github.com/ThinkFlowLab/FlyBot/issues/1161)) +- The external room driver now ends a stop it is ignored: after `{ type: 'stop' }` and a `SIGTERM` grace it escalates to `SIGKILL`, and a seat whose stop is still in flight is never handed the next turn, so a child cannot outlive its membership. A crash line carries the last ~200 characters of the child's `stderr` (flattened and capped) instead of only `exit N`, and the room-turn timeout reads as "timed out" rather than "process timeout" (#1164). +- Removing someone's Bot from a shared group now drops that room on their home. The other home was still listing the room and could keep receiving and sending in it, because the leave was sent only after the seat had already gone and a later line could open the room again. ([#1167](https://github.com/ThinkFlowLab/FlyBot/issues/1167)) +- A decision comment that never went out now stops asking for it ([#1172](https://github.com/ThinkFlowLab/FlyBot/issues/1172)): after two wakes the reminder ends, and a day later the card says the comment could not be confirmed instead of the Bot being woken about it for ever. A task that is still real work keeps waking the same way. +- Pasting a group invite link for a room this home already holds no longer ends on "Asked to join": the preview now says the group is already in the sidebar and draws no Join card, when the link seated the room and when the host added one of these Bots to it by add-member (#1176). +- Needs you cards in the Inbox show the whole ask. The title and the reason wrap, including on a phone, so a sentence is not cut off before the in-place answer (#1177). +- The delivery board links an issue to a pull request only when the pull request closes it, and a verdict past the first hundred comments still decides the badge ([#1189](https://github.com/ThinkFlowLab/FlyBot/issues/1189)). +- The quiet-hours warning on the Scheduled tasks page now renders the host's `quietUnchecked` flag instead of scanning the task list a second time (#1199), so the line and the check cannot drift apart, and it still appears at once after the window is switched on. The subsystem page no longer calls the window one team-wide clock: a task's due time is read in that task's own zone. +- A group turn shows a character-budgeted room history, with long CI and merge essays collapsed, and a compact task-board snapshot. Assigning, claiming, and progress go through that board (overall task, subtask, assignee, column, and progress); @ only wakes a member ([#1203](https://github.com/ThinkFlowLab/FlyBot/issues/1203)). +- A group card wakes its assignee in that Bot's own chat. Assigning, progress, and handoff are board writes; the group stays quiet, and a Bot @ whose open card already shows the line passes ([#1205](https://github.com/ThinkFlowLab/FlyBot/issues/1205)). +- **An `@` that could not reach the other home** used to be swallowed: when a person's line had to go out as the old envelope on a server that stamps typed lines, the other home read it as a Bot's line, so the named Bot was never called and only a log line said so. The room now gets one quiet notice naming the friend's Bot whose call was lost (`No call went out for @x: this connector token may not attest typed lines, so the other home reads this line as a Bot's.`); the words still go out, a probe that did not answer adds no notice, and a server that cannot stamp keeps the old behaviour where the labels still call the Bot (#997). + ## [0.2.7] - 2026-10-25 ### Added diff --git a/changelog.d/1000-accept-reinvite-both-directions.fixed.md b/changelog.d/1000-accept-reinvite-both-directions.fixed.md deleted file mode 100644 index dd2c69bc4..000000000 --- a/changelog.d/1000-accept-reinvite-both-directions.fixed.md +++ /dev/null @@ -1 +0,0 @@ -Accepting a friend's invite again now shares your Bot back with them ([#1000](https://github.com/ThinkFlowLab/FlyBot/issues/1000)): the two of you can message each other right away instead of one direction staying silently absent until they share again. diff --git a/changelog.d/1001-friend-row-names-the-link.changed.md b/changelog.d/1001-friend-row-names-the-link.changed.md deleted file mode 100644 index 68f0fceeb..000000000 --- a/changelog.d/1001-friend-row-names-the-link.changed.md +++ /dev/null @@ -1 +0,0 @@ -Removing one of a friend's Bots now says which link keeps the friend in the list: the question names the Bots of theirs that are still shared ("Bob stays a friend: still shared through Writer."), instead of only saying the owner is not unfriended and leaving the row unexplained ([#1001](https://github.com/ThinkFlowLab/FlyBot/issues/1001)). diff --git a/changelog.d/1019-group-strip-reuses-live-link.fixed.md b/changelog.d/1019-group-strip-reuses-live-link.fixed.md deleted file mode 100644 index 324158c36..000000000 --- a/changelog.d/1019-group-strip-reuses-live-link.fixed.md +++ /dev/null @@ -1 +0,0 @@ -Coming back to a group nobody has spoken in yet shows the invite link the room already has, instead of minting another one on every visit — the strip now reads the room's links first, as the Members card does, counts a dated link live until its deadline passes, and never keeps the previous room's link when the dock moves to another group ([#1019](https://github.com/ThinkFlowLab/FlyBot/issues/1019)). diff --git a/changelog.d/1021-join-and-start-are-two-entries.changed.md b/changelog.d/1021-join-and-start-are-two-entries.changed.md deleted file mode 100644 index c52dff145..000000000 --- a/changelog.d/1021-join-and-start-are-two-entries.changed.md +++ /dev/null @@ -1 +0,0 @@ -The new-chat menu offers joining and starting as two rows, so one label no longer names both: **Join by number or link** carries the number and the invite link, and **Start a face-to-face room** opens the same screen under its own name without the link and scan fields, because those are ways into a group that already exists ([#1021](https://github.com/ThinkFlowLab/FlyBot/issues/1021)). diff --git a/changelog.d/1024-reaccept-grant-names-the-peer.fixed.md b/changelog.d/1024-reaccept-grant-names-the-peer.fixed.md deleted file mode 100644 index b618b9a5e..000000000 --- a/changelog.d/1024-reaccept-grant-names-the-peer.fixed.md +++ /dev/null @@ -1 +0,0 @@ -Re-accepting an invite from a Bot Social server whose invite info names no `bot_id` now grants to the peer id `list_friends` lists instead of a `friend_home` the server never receives ([#1024](https://github.com/ThinkFlowLab/FlyBot/issues/1024)): the pair becomes two-way again, and when no listed friend names that home the accept no longer claims a share that did not happen. diff --git a/changelog.d/1027-takeover-on-next-write.fixed.md b/changelog.d/1027-takeover-on-next-write.fixed.md deleted file mode 100644 index 79fa32e1a..000000000 --- a/changelog.d/1027-takeover-on-next-write.fixed.md +++ /dev/null @@ -1 +0,0 @@ -A window that showed the Bot team read-only because another dsh held `state.lock` now takes the lock on its next write once that window closes, instead of staying read-only until a `state` read happened to refresh it (#1027). New work that changes the state outside a request belongs in `rt.mutate(fn)`, which follows what the other host left before applying the change, so neither side's work is lost. diff --git a/changelog.d/1037-your-your-bot.fixed.md b/changelog.d/1037-your-your-bot.fixed.md deleted file mode 100644 index f2fb8561f..000000000 --- a/changelog.d/1037-your-your-bot.fixed.md +++ /dev/null @@ -1 +0,0 @@ -The Add friend result no longer stacks a second "Your" on a Bot whose owner already named it that way — a Bot called `Your Bot` reads as "Your Bot is shared back, so they can reach you too." instead of "Your Your Bot …" ([#1037](https://github.com/ThinkFlowLab/FlyBot/issues/1037)). diff --git a/changelog.d/1038-group-strip-waits-for-its-read.fixed.md b/changelog.d/1038-group-strip-waits-for-its-read.fixed.md deleted file mode 100644 index a040814ee..000000000 --- a/changelog.d/1038-group-strip-waits-for-its-read.fixed.md +++ /dev/null @@ -1 +0,0 @@ -The group strip no longer offers **Invite by link** before it has read the room's own links, so a fast click cannot mint a second ticket the panel was about to discover, and a chat that draws no strip (a face room, a Bot chat, a chat with turns) no longer issues that read at all ([#1038](https://github.com/ThinkFlowLab/FlyBot/issues/1038)). diff --git a/changelog.d/1044-dead-turn-visible.fixed.md b/changelog.d/1044-dead-turn-visible.fixed.md deleted file mode 100644 index 839ef7b89..000000000 --- a/changelog.d/1044-dead-turn-visible.fixed.md +++ /dev/null @@ -1 +0,0 @@ -A turn that dies before writing anything is no longer invisible: when a model call is refused (a provider budget cap, a 429), the chat shows one line naming the provider's own error above the composer, and a run of them says how many turns in a row died, so a quota outage reads as an outage instead of a Bot that chose to stay silent. A turn that already wrote text adds no line, and a completed turn clears the count ([#1044](https://github.com/ThinkFlowLab/FlyBot/issues/1044)). diff --git a/changelog.d/1045-a-face-room-line-is-posted-once.fixed.md b/changelog.d/1045-a-face-room-line-is-posted-once.fixed.md deleted file mode 100644 index 47bbdd265..000000000 --- a/changelog.d/1045-a-face-room-line-is-posted-once.fixed.md +++ /dev/null @@ -1 +0,0 @@ -A face-room line the server sends without an `event_id` is posted into the room once: the poll keys it by the line itself (type, sender, server time, text), instead of appending a second copy on the next poll — the duplicate the room drew as the same sentence twice, often seconds after both people had left ([#1045](https://github.com/ThinkFlowLab/FlyBot/issues/1045)). diff --git a/changelog.d/1048-mutate-writers.fixed.md b/changelog.d/1048-mutate-writers.fixed.md deleted file mode 100644 index 9017f6ebc..000000000 --- a/changelog.d/1048-mutate-writers.fixed.md +++ /dev/null @@ -1 +0,0 @@ -A window that was read-only only because the other dsh had the team open now takes the free lock for the writes that were still inline, instead of dropping them or refusing with the read-only error: a friend's first line and the unread mark, a team exchange, and every DSH Agent change (add, adopt, archive, remove). The change the other host left survives, because the write adopts and re-resolves its records before it applies ([#1048](https://github.com/ThinkFlowLab/FlyBot/issues/1048)). diff --git a/changelog.d/1052-enter-6-digits.fixed.md b/changelog.d/1052-enter-6-digits.fixed.md deleted file mode 100644 index cd0f6f48b..000000000 --- a/changelog.d/1052-enter-6-digits.fixed.md +++ /dev/null @@ -1 +0,0 @@ -Typing a room number that is not exactly six digits keeps Join disabled and shows "Enter 6 digits" under the field (Chinese: 请输入 6 位数字). An empty field stays quiet, and six digits still join ([#1052](https://github.com/ThinkFlowLab/FlyBot/issues/1052)). diff --git a/changelog.d/1053-face-first-create.changed.md b/changelog.d/1053-face-first-create.changed.md deleted file mode 100644 index f660ac059..000000000 --- a/changelog.d/1053-face-first-create.changed.md +++ /dev/null @@ -1 +0,0 @@ -A fresh 6-digit code no longer answers with an empty-result line. When nobody is waiting, the dialog's primary line is **Start a new room with …** and **Start a new room** is the first button; the note under it still says to ask for an invite link if that room already opened ([#1053](https://github.com/ThinkFlowLab/FlyBot/issues/1053)). diff --git a/changelog.d/1054-inviter-accept.fixed.md b/changelog.d/1054-inviter-accept.fixed.md deleted file mode 100644 index 2e53eb354..000000000 --- a/changelog.d/1054-inviter-accept.fixed.md +++ /dev/null @@ -1 +0,0 @@ -When someone accepts your invite, the sidebar says who joined and People with access lists them even if the grant list is still empty, with one step to ask them to share a Bot back ([#1054](https://github.com/ThinkFlowLab/FlyBot/issues/1054)). diff --git a/changelog.d/1058-bot-task-kanban.added.md b/changelog.d/1058-bot-task-kanban.added.md deleted file mode 100644 index bc88b25b4..000000000 --- a/changelog.d/1058-bot-task-kanban.added.md +++ /dev/null @@ -1 +0,0 @@ -Each Bot keeps a task list it updates from the conversation, and a board shows Not started, In progress and Done for that Bot, a child Bot, and — for a group admin — the tasks member Bots are tracking in the group ([#1058](https://github.com/ThinkFlowLab/FlyBot/issues/1058)). diff --git a/changelog.d/1062-a-face-event-key-carries-a-digest.changed.md b/changelog.d/1062-a-face-event-key-carries-a-digest.changed.md deleted file mode 100644 index 76c6faf75..000000000 --- a/changelog.d/1062-a-face-event-key-carries-a-digest.changed.md +++ /dev/null @@ -1 +0,0 @@ -A face-room line the server sends without an `event_id` is still keyed by the line itself, but the key now carries a bounded digest of the text instead of the whole sentence: `seen` lives in the owner's settings, so on a server that stamps no ids it would otherwise fill up with a copy of the conversation (#1062). The key stays stable across polls, so the duplicate `#1045` fixed does not come back. diff --git a/changelog.d/1063-same-second-line-kept.fixed.md b/changelog.d/1063-same-second-line-kept.fixed.md deleted file mode 100644 index 0e3a0808e..000000000 --- a/changelog.d/1063-same-second-line-kept.fixed.md +++ /dev/null @@ -1 +0,0 @@ -Two identical lines from one person inside the same second in a face room now both appear: a line the server stamps in whole seconds is told apart by its own cursor (or, without one, by its place in the snapshot) instead of being read as the same line twice, so the second one is no longer dropped ([#1063](https://github.com/ThinkFlowLab/FlyBot/issues/1063)). diff --git a/changelog.d/1064-invite-claim-seat.fixed.md b/changelog.d/1064-invite-claim-seat.fixed.md deleted file mode 100644 index efb9c58a5..000000000 --- a/changelog.d/1064-invite-claim-seat.fixed.md +++ /dev/null @@ -1 +0,0 @@ -A group invite link seats the guest's Bots when they claim it, even if the accepting knock never arrives, and the group opens in the guest's sidebar. A claim the host cannot finish is named on the group's Members card ([#1064](https://github.com/ThinkFlowLab/FlyBot/issues/1064)). diff --git a/changelog.d/1068-remote-dm-failure.fixed.md b/changelog.d/1068-remote-dm-failure.fixed.md deleted file mode 100644 index c8a200001..000000000 --- a/changelog.d/1068-remote-dm-failure.fixed.md +++ /dev/null @@ -1 +0,0 @@ -A friend DM shows when the other home's Bot could not reply (for example it has no API key) instead of staying on "Weighing the options…" ([#1068](https://github.com/ThinkFlowLab/FlyBot/issues/1068)). diff --git a/changelog.d/1069-friend-chief-avatar.fixed.md b/changelog.d/1069-friend-chief-avatar.fixed.md deleted file mode 100644 index 861488628..000000000 --- a/changelog.d/1069-friend-chief-avatar.fixed.md +++ /dev/null @@ -1 +0,0 @@ -A friend's Bot that shares a local Bot's display name no longer wears that local Bot's picture: two default Chiefs both store the blue whale, and the friend's row now steps to a different shape while the local Chief keeps its own look ([#1069](https://github.com/ThinkFlowLab/FlyBot/issues/1069)). diff --git a/changelog.d/1070-closed-face-room-leaves-active-list.fixed.md b/changelog.d/1070-closed-face-room-leaves-active-list.fixed.md deleted file mode 100644 index e09d8c053..000000000 --- a/changelog.d/1070-closed-face-room-leaves-active-list.fixed.md +++ /dev/null @@ -1 +0,0 @@ -A face room that Bot Social no longer lists is marked Closed on the hosted room, so it leaves the active sidebar list and stays as one Past rooms row. When Bot Social sends `closed_at`, that time is the row's time on every home ([#1070](https://github.com/ThinkFlowLab/FlyBot/issues/1070)). diff --git a/changelog.d/1073-revoke-confirm-access-separator.fixed.md b/changelog.d/1073-revoke-confirm-access-separator.fixed.md deleted file mode 100644 index 476484eb0..000000000 --- a/changelog.d/1073-revoke-confirm-access-separator.fixed.md +++ /dev/null @@ -1 +0,0 @@ -**People with access** asks before **Revoke** (`Revoke ?` with **Revoke** and **Keep**, naming the rooms that share is used in), and the row separates the handle from "In use in N rooms" with a middle dot (`@handle · In use in 3 rooms`) instead of running the two together ([#1073](https://github.com/ThinkFlowLab/FlyBot/issues/1073)). diff --git a/changelog.d/1074-settings-friends.added.md b/changelog.d/1074-settings-friends.added.md deleted file mode 100644 index a8d55a888..000000000 --- a/changelog.d/1074-settings-friends.added.md +++ /dev/null @@ -1 +0,0 @@ -Settings → Bot Social now lists friends and links each of your Bots to People with access, so sharing and revoke are findable without opening each Bot first. Add friend stays on the + menu, and the same panel is also on that page ([#1074](https://github.com/ThinkFlowLab/FlyBot/issues/1074)). diff --git a/changelog.d/1085-face-enter-internal-error.fixed.md b/changelog.d/1085-face-enter-internal-error.fixed.md deleted file mode 100644 index acb6da523..000000000 --- a/changelog.d/1085-face-enter-internal-error.fixed.md +++ /dev/null @@ -1 +0,0 @@ -Enter chat in a face-to-face room no longer shows "internal error" after the other person has joined. The start request sends an empty JSON body, which Bot Social accepts ([#1085](https://github.com/ThinkFlowLab/FlyBot/issues/1085)). diff --git a/changelog.d/1086-face-room-layout-clip.fixed.md b/changelog.d/1086-face-room-layout-clip.fixed.md deleted file mode 100644 index 6ef43b957..000000000 --- a/changelog.d/1086-face-room-layout-clip.fixed.md +++ /dev/null @@ -1 +0,0 @@ -Dismissing an Enter-chat error and typing in the room composer no longer shifts the window sideways. The page and the app frame cannot scroll horizontally, and the error toast stays inside the viewport ([#1086](https://github.com/ThinkFlowLab/FlyBot/issues/1086)). diff --git a/changelog.d/1087-remote-approval-wait.fixed.md b/changelog.d/1087-remote-approval-wait.fixed.md deleted file mode 100644 index a212c2fde..000000000 --- a/changelog.d/1087-remote-approval-wait.fixed.md +++ /dev/null @@ -1 +0,0 @@ -A friend's direct chat says "Waiting for their approval" (等对方批准) while you wait for their reply, instead of a generic thinking line such as "Sorting out the details…", so a reply their home is holding for approval is not presented as this side still working it out (#1087). diff --git a/changelog.d/1088-friend-mention-look.fixed.md b/changelog.d/1088-friend-mention-look.fixed.md deleted file mode 100644 index 6598e088f..000000000 --- a/changelog.d/1088-friend-mention-look.fixed.md +++ /dev/null @@ -1 +0,0 @@ -A friend's Bot in the @ menu and in a mention chip uses the same picture as its sidebar row. A face-room Chief no longer shows a handle-seeded green moon there while the sidebar shows the stored blue whale ([#1088](https://github.com/ThinkFlowLab/FlyBot/issues/1088)). diff --git a/changelog.d/1089-face-room-sole-avatar.fixed.md b/changelog.d/1089-face-room-sole-avatar.fixed.md deleted file mode 100644 index 36043235d..000000000 --- a/changelog.d/1089-face-room-sole-avatar.fixed.md +++ /dev/null @@ -1 +0,0 @@ -A face room you start alone shows your Chief's own avatar in the room header, instead of a blank grey circle, until someone else joins ([#1089](https://github.com/ThinkFlowLab/FlyBot/issues/1089)). diff --git a/changelog.d/1096-delivery-write-failure.fixed.md b/changelog.d/1096-delivery-write-failure.fixed.md deleted file mode 100644 index 31e92c960..000000000 --- a/changelog.d/1096-delivery-write-failure.fixed.md +++ /dev/null @@ -1 +0,0 @@ -A message no longer disappears when the team's next write fails. The friend-line mark and the exchange record are written before the message is handed to the Bot, so a failed write (another window took the team over, or the disk refused) used to drop the whole line; now it is logged once and the message still arrives (#1096). diff --git a/changelog.d/1099-group-task-subtasks.added.md b/changelog.d/1099-group-task-subtasks.added.md deleted file mode 100644 index f95a9da8b..000000000 --- a/changelog.d/1099-group-task-subtasks.added.md +++ /dev/null @@ -1 +0,0 @@ -A group's Tasks board shows one overall task and the per-Bot subtasks under it. Bots record that plan with track_tasks, continue the highest-priority unfinished task, and ask the user or the group when a task is waiting on an answer ([#1099](https://github.com/ThinkFlowLab/FlyBot/issues/1099)). diff --git a/changelog.d/1102-face-title-ellipsis.fixed.md b/changelog.d/1102-face-title-ellipsis.fixed.md deleted file mode 100644 index 11d1c6a2d..000000000 --- a/changelog.d/1102-face-title-ellipsis.fixed.md +++ /dev/null @@ -1 +0,0 @@ -Face lobby names and face-room titles stay readable. Labels under the avatars wrap, and the sidebar, header, and session title show both names instead of cutting the second one to an ellipsis ([#1102](https://github.com/ThinkFlowLab/FlyBot/issues/1102)). diff --git a/changelog.d/1103-face-leave-single-line.fixed.md b/changelog.d/1103-face-leave-single-line.fixed.md deleted file mode 100644 index b20db8a09..000000000 --- a/changelog.d/1103-face-leave-single-line.fixed.md +++ /dev/null @@ -1 +0,0 @@ -When the other side leaves a face room and that leave closes the room, the room says so once: the "left the room. Room closed." banner is the only line, so the short platform leave no longer appears next to it. A leave that leaves the room open still posts its short line ([#1103](https://github.com/ThinkFlowLab/FlyBot/issues/1103)). diff --git a/changelog.d/1109-task-driven-turns.added.md b/changelog.d/1109-task-driven-turns.added.md deleted file mode 100644 index 7a467f722..000000000 --- a/changelog.d/1109-task-driven-turns.added.md +++ /dev/null @@ -1 +0,0 @@ -A Bot with unfinished conversation tasks keeps working without a new message. The host starts a continue turn for the next task, in that Bot's own chat or in the group session that owns the subtask, and stops when the work is done or waiting on an answer. In a group, members with their own subtasks are woken in the same pass ([#1109](https://github.com/ThinkFlowLab/FlyBot/issues/1109)). diff --git a/changelog.d/1110-signed-verdicts.changed.md b/changelog.d/1110-signed-verdicts.changed.md deleted file mode 100644 index 2104a7b33..000000000 --- a/changelog.d/1110-signed-verdicts.changed.md +++ /dev/null @@ -1 +0,0 @@ -A `Verdict:` now counts only when the workstation that claims to have written it signed it: each reviewing workstation holds one Ed25519 private key, its public key sits in `.github/agent/signers.json`, and the gates verify `Signed-by:` / `Nonce:` / `Signature:` offline over the pull request, the full tip SHA, the verdict and the workstation — so a PASS written in a Reviewer's name on the shared account is no longer a conclusion, it is listed as unverified ([#1110](https://github.com/ThinkFlowLab/FlyBot/issues/1110)). diff --git a/changelog.d/1113.fixed.md b/changelog.d/1113.fixed.md deleted file mode 100644 index d3f49f80f..000000000 --- a/changelog.d/1113.fixed.md +++ /dev/null @@ -1 +0,0 @@ -Ordinary group lines to a friend's Bot no longer keep stopping on "Waiting for approval" after Auto-send is on for that pair (the card's Auto-send from now on, or Sharing → People with access). A line Bot Social held only because the text looked like an instruction (a word such as "token", with no secret, file, or instruction-override) goes out; a real finding still waits for approval (#1113). diff --git a/changelog.d/1118.fixed.md b/changelog.d/1118.fixed.md deleted file mode 100644 index e2a47263c..000000000 --- a/changelog.d/1118.fixed.md +++ /dev/null @@ -1 +0,0 @@ -An ordinary @ or reply in a shared group no longer stops on "Waiting for the owner's approval" when the other home has not turned Auto-send on. Seating both Bots in the room is the consent for that text. A file, a DLP finding, a risk flag, or an instruction-override still waits for approval. A face-room line held as policy still waits for the owner (#1118). diff --git a/changelog.d/1120.fixed.md b/changelog.d/1120.fixed.md deleted file mode 100644 index 64d14765b..000000000 --- a/changelog.d/1120.fixed.md +++ /dev/null @@ -1 +0,0 @@ -Starting FlyBot on DSH no longer stops before the Main Bot is ready: the task drive registers its handle with Cordis `provide` instead of a property write the host rejects ([#1120](https://github.com/ThinkFlowLab/FlyBot/issues/1120)). diff --git a/changelog.d/1126.fixed.md b/changelog.d/1126.fixed.md deleted file mode 100644 index fdff0027e..000000000 --- a/changelog.d/1126.fixed.md +++ /dev/null @@ -1 +0,0 @@ -A Bot that already shares a live local group, including a group a link seated, can @ the other home's seated Bot with the `@…home` mention, and each successive line is delivered in the group, without a separate Sharing grant. A direct message to a Bot outside every shared room is still refused, and leaving the group restores that refusal (#1126). diff --git a/changelog.d/1127-group-session-model.fixed.md b/changelog.d/1127-group-session-model.fixed.md deleted file mode 100644 index 06b60104a..000000000 --- a/changelog.d/1127-group-session-model.fixed.md +++ /dev/null @@ -1 +0,0 @@ -A Bot's existing group sessions follow a model change, including when the record already says that model is applied, so a turn no longer asks a provider the Bot was moved off (#1127). diff --git a/changelog.d/1128-share-removed-bot.fixed.md b/changelog.d/1128-share-removed-bot.fixed.md deleted file mode 100644 index 1ce8ad77e..000000000 --- a/changelog.d/1128-share-removed-bot.fixed.md +++ /dev/null @@ -1 +0,0 @@ -**Share with a friend** used to report success for a Bot the other home no longer runs. A row whose Bot is gone from the roster that home is still listed in now says so — ` was removed from that home. Sharing with it cannot reach anyone.` — and its **Share** is disabled; a click that still reaches the host is refused with `bot/removed-bot` and sends no grant, so the list stops claiming a share that would reach nobody. The row is judged on both the peer id and the handle (`list_remote_bots` entries carry both), and a home missing from the cached roster, or a roster read that failed or came back empty, decides nothing — it shares as before rather than guessing (#1128). diff --git a/changelog.d/1140-inbox-answer.fixed.md b/changelog.d/1140-inbox-answer.fixed.md deleted file mode 100644 index 16d84cd4a..000000000 --- a/changelog.d/1140-inbox-answer.fixed.md +++ /dev/null @@ -1 +0,0 @@ -Needs you rows in the Inbox can be answered there. An ask_user card shows its options and a short answer — one option sends at once, a multi-select toggles until Submit — a task that is waiting on input takes a short answer, and a listed tool approval still clears with Allow once or Reject, so Open is not the only way through a group that has no card (#1140). diff --git a/changelog.d/1141.fixed.md b/changelog.d/1141.fixed.md deleted file mode 100644 index af65f229e..000000000 --- a/changelog.d/1141.fixed.md +++ /dev/null @@ -1 +0,0 @@ -A group @ inserts the seated Bot's name, and Bots that share a live group can message each other without a separate friendship. A deleted friend home is dropped from the room and its chat is hidden ([#1141](https://github.com/ThinkFlowLab/FlyBot/issues/1141)). diff --git a/changelog.d/1147-group-phone-tap-targets.changed.md b/changelog.d/1147-group-phone-tap-targets.changed.md deleted file mode 100644 index 314291a0c..000000000 --- a/changelog.d/1147-group-phone-tap-targets.changed.md +++ /dev/null @@ -1 +0,0 @@ -The social panel's group and dock surfaces are usable at phone width: below 640 px its buttons and inputs (including the invite-preview and waiting-room footers) are 40 px tall, its row controls at least 32 px, a long unbroken run in a held reply wraps inside its card, the dock clears the home indicator, and the phone block now closes the stylesheet so no later rule of equal specificity can override it (#1147, #1149). diff --git a/changelog.d/1154-write-the-decision-back.added.md b/changelog.d/1154-write-the-decision-back.added.md deleted file mode 100644 index 3c5351907..000000000 --- a/changelog.d/1154-write-the-decision-back.added.md +++ /dev/null @@ -1 +0,0 @@ -A task that names the issue or PR it came from now says where your answer goes, and the Bot writes it there itself ([#1154](https://github.com/ThinkFlowLab/FlyBot/issues/1154)): the result card shows a *Comment goes to …* link, accepting or sending back leaves one comment for the Bot to post with its own GitHub connector, and a comment that could not be posted says so once on the card instead of failing silently. diff --git a/changelog.d/1156-phone-overrides.fixed.md b/changelog.d/1156-phone-overrides.fixed.md deleted file mode 100644 index e10d7e0a0..000000000 --- a/changelog.d/1156-phone-overrides.fixed.md +++ /dev/null @@ -1 +0,0 @@ -Two controls in the social panel that stayed at their desk size on a phone are now touch-sized: the face-to-face room header's small buttons are 40 px instead of 22 px, and the account menu's links keep a 40 px hit area instead of collapsing to a 12 px text run (#1156). diff --git a/changelog.d/1161.fixed.md b/changelog.d/1161.fixed.md deleted file mode 100644 index fd89f1281..000000000 --- a/changelog.d/1161.fixed.md +++ /dev/null @@ -1 +0,0 @@ -A group invite link seats the joiner even when the host's FlyBot has been open, and the joiner's sidebar shows the group. The host was re-reading every open link on each inbox poll and, once Bot Social answered "Too many attempts. Try again in 10 minutes.", previewing again before that cool-down elapsed, so a new claim was never seen; a room share whose text was outside 1–4000 characters was refused, and a join that stayed on an approval card was treated as already sent. ([#1161](https://github.com/ThinkFlowLab/FlyBot/issues/1161)) diff --git a/changelog.d/1164-external-driver-hardening.fixed.md b/changelog.d/1164-external-driver-hardening.fixed.md deleted file mode 100644 index 704ad504e..000000000 --- a/changelog.d/1164-external-driver-hardening.fixed.md +++ /dev/null @@ -1 +0,0 @@ -The external room driver now ends a stop it is ignored: after `{ type: 'stop' }` and a `SIGTERM` grace it escalates to `SIGKILL`, and a seat whose stop is still in flight is never handed the next turn, so a child cannot outlive its membership. A crash line carries the last ~200 characters of the child's `stderr` (flattened and capped) instead of only `exit N`, and the room-turn timeout reads as "timed out" rather than "process timeout" (#1164). diff --git a/changelog.d/1166-team-quiet-hours.added.md b/changelog.d/1166-team-quiet-hours.added.md deleted file mode 100644 index 07370f878..000000000 --- a/changelog.d/1166-team-quiet-hours.added.md +++ /dev/null @@ -1 +0,0 @@ -The team can set quiet hours — a window (off by default) that a new or edited scheduled task's time must fall outside, checked when it is saved rather than at delivery: a task inside the window is refused with a sentence naming when it ends, and nothing is created or moved. Repeat and cron tasks are still allowed and the page says they may run inside the window, because DSH decides when they fire (#1166). diff --git a/changelog.d/1167.fixed.md b/changelog.d/1167.fixed.md deleted file mode 100644 index ef8204184..000000000 --- a/changelog.d/1167.fixed.md +++ /dev/null @@ -1 +0,0 @@ -Removing someone's Bot from a shared group now drops that room on their home. The other home was still listing the room and could keep receiving and sending in it, because the leave was sent only after the seat had already gone and a later line could open the room again. ([#1167](https://github.com/ThinkFlowLab/FlyBot/issues/1167)) diff --git a/changelog.d/1172-pending-comment-stops-reminding.fixed.md b/changelog.d/1172-pending-comment-stops-reminding.fixed.md deleted file mode 100644 index d434b9c1d..000000000 --- a/changelog.d/1172-pending-comment-stops-reminding.fixed.md +++ /dev/null @@ -1 +0,0 @@ -A decision comment that never went out now stops asking for it ([#1172](https://github.com/ThinkFlowLab/FlyBot/issues/1172)): after two wakes the reminder ends, and a day later the card says the comment could not be confirmed instead of the Bot being woken about it for ever. A task that is still real work keeps waking the same way. diff --git a/changelog.d/1173-delivery-board.added.md b/changelog.d/1173-delivery-board.added.md deleted file mode 100644 index cf80ed85d..000000000 --- a/changelog.d/1173-delivery-board.added.md +++ /dev/null @@ -1 +0,0 @@ -The task board dialog gains a **Delivery** view (#1173): one read-only snapshot of the repository's GitHub issues, pull requests and CI runs, in five columns — original issue, ready to start, in progress, in review, and done today — with a verdict/CI badge per pull request and a header that reports today against the last 7 days. It is repository-wide, so the per-Bot rail does not appear, and it never writes to GitHub: the host serves a cached snapshot built only from `GET` requests, and the token stays host-side. The view replaces the board with one honest line when no GitHub connection is set up. diff --git a/changelog.d/1176-invite-link-already-seated.fixed.md b/changelog.d/1176-invite-link-already-seated.fixed.md deleted file mode 100644 index fe4c3a9dc..000000000 --- a/changelog.d/1176-invite-link-already-seated.fixed.md +++ /dev/null @@ -1 +0,0 @@ -Pasting a group invite link for a room this home already holds no longer ends on "Asked to join": the preview now says the group is already in the sidebar and draws no Join card, when the link seated the room and when the host added one of these Bots to it by add-member (#1176). diff --git a/changelog.d/1177-inbox-ask.fixed.md b/changelog.d/1177-inbox-ask.fixed.md deleted file mode 100644 index 0dc51e5c9..000000000 --- a/changelog.d/1177-inbox-ask.fixed.md +++ /dev/null @@ -1 +0,0 @@ -Needs you cards in the Inbox show the whole ask. The title and the reason wrap, including on a phone, so a sentence is not cut off before the in-place answer (#1177). diff --git a/changelog.d/1182-task-lead.changed.md b/changelog.d/1182-task-lead.changed.md deleted file mode 100644 index 3e5957199..000000000 --- a/changelog.d/1182-task-lead.changed.md +++ /dev/null @@ -1 +0,0 @@ -A group picks one task lead to divide the board. That Bot, or the admin when none is picked, assigns each part; the card is claimed and the assignee starts it in the group without waiting for a confirmation. A question stays in the group ([#1182](https://github.com/ThinkFlowLab/FlyBot/issues/1182)). diff --git a/changelog.d/1188-mojibake-gate.added.md b/changelog.d/1188-mojibake-gate.added.md deleted file mode 100644 index 43c5a9861..000000000 --- a/changelog.d/1188-mojibake-gate.added.md +++ /dev/null @@ -1 +0,0 @@ -A CI scan (`.github/scripts/check-mojibake.mjs`) now fails a pull request whose tracked text files contain U+FFFD — the three bytes `EF BF BD` a lossy decode writes in place of every character it could not read — and names each file with its occurrence and line counts, so the fix reads as "regenerate", not "retype the text". Binary assets are skipped by content (a NUL byte in the first 8 KiB), which is the rule that makes the gate usable at all: decoding the tree instead reports 22 binary files and ~2,065,422 replacement characters on a clean `main`. `AGENTS.md` now says why a file rewritten from an outside source, or regenerated, is re-read as bytes and re-encoded by its generator. See [#1188](https://github.com/ThinkFlowLab/FlyBot/issues/1188). diff --git a/changelog.d/1189-delivery-board-links.fixed.md b/changelog.d/1189-delivery-board-links.fixed.md deleted file mode 100644 index d531be5bc..000000000 --- a/changelog.d/1189-delivery-board-links.fixed.md +++ /dev/null @@ -1 +0,0 @@ -The delivery board links an issue to a pull request only when the pull request closes it, and a verdict past the first hundred comments still decides the badge ([#1189](https://github.com/ThinkFlowLab/FlyBot/issues/1189)). diff --git a/changelog.d/1199-quiet-unchecked-flag.fixed.md b/changelog.d/1199-quiet-unchecked-flag.fixed.md deleted file mode 100644 index 4c9becba2..000000000 --- a/changelog.d/1199-quiet-unchecked-flag.fixed.md +++ /dev/null @@ -1 +0,0 @@ -The quiet-hours warning on the Scheduled tasks page now renders the host's `quietUnchecked` flag instead of scanning the task list a second time (#1199), so the line and the check cannot drift apart, and it still appears at once after the window is switched on. The subsystem page no longer calls the window one team-wide clock: a task's due time is read in that task's own zone. diff --git a/changelog.d/1203-room-context.fixed.md b/changelog.d/1203-room-context.fixed.md deleted file mode 100644 index 287f6c4a1..000000000 --- a/changelog.d/1203-room-context.fixed.md +++ /dev/null @@ -1 +0,0 @@ -A group turn shows a character-budgeted room history, with long CI and merge essays collapsed, and a compact task-board snapshot. Assigning, claiming, and progress go through that board (overall task, subtask, assignee, column, and progress); @ only wakes a member ([#1203](https://github.com/ThinkFlowLab/FlyBot/issues/1203)). diff --git a/changelog.d/1205-board-drive.fixed.md b/changelog.d/1205-board-drive.fixed.md deleted file mode 100644 index 85d7de46c..000000000 --- a/changelog.d/1205-board-drive.fixed.md +++ /dev/null @@ -1 +0,0 @@ -A group card wakes its assignee in that Bot's own chat. Assigning, progress, and handoff are board writes; the group stays quiet, and a Bot @ whose open card already shows the line passes ([#1205](https://github.com/ThinkFlowLab/FlyBot/issues/1205)). diff --git a/changelog.d/198-external-participant.added.md b/changelog.d/198-external-participant.added.md deleted file mode 100644 index 33f248f22..000000000 --- a/changelog.d/198-external-participant.added.md +++ /dev/null @@ -1 +0,0 @@ -A Bot can be spoken for by a supervised external process in rooms (#198): `create_bot` takes an `external` block (`driver: subprocess`, an argv array, optional `cwd` and `env`), and `room-participant.js` routes that member to a new driver while every other member keeps its DSH Session. The process is started per room and Bot, answers one JSON line per turn, and its start, clean exit, crash and timeout are explicit states — a crash is posted as the Bot's own line in the room, and a turn that reaches a dead process ends with a failure instead of silence. diff --git a/changelog.d/401-accept-or-send-back-a-result.added.md b/changelog.d/401-accept-or-send-back-a-result.added.md deleted file mode 100644 index e03b6ea56..000000000 --- a/changelog.d/401-accept-or-send-back-a-result.added.md +++ /dev/null @@ -1 +0,0 @@ -A finished task can now be accepted or sent back right in the inbox ([#401](https://github.com/ThinkFlowLab/FlyBot/issues/401)): the result card shows the Bot's evidence links and model, **Accept** closes the task as done, and **Send back** asks for one line about what should change and returns the same task to the Bot. diff --git a/changelog.d/644-tip-attestation.changed.md b/changelog.d/644-tip-attestation.changed.md deleted file mode 100644 index 079d14a2c..000000000 --- a/changelog.d/644-tip-attestation.changed.md +++ /dev/null @@ -1 +0,0 @@ -The merge gate now refuses a tip whose only review is a comment from the pull request author's own GitHub account. A PASS from that login counts when the comment header carries `Attestation: role=` for this tip, the role matches `Written-by`, and the role is not an Owner of the pull request. A review posted by a different GitHub account is unchanged ([#644](https://github.com/ThinkFlowLab/FlyBot/issues/644)). diff --git a/changelog.d/997-legacy-mention-notice.fixed.md b/changelog.d/997-legacy-mention-notice.fixed.md deleted file mode 100644 index 1459d6b58..000000000 --- a/changelog.d/997-legacy-mention-notice.fixed.md +++ /dev/null @@ -1 +0,0 @@ -**An `@` that could not reach the other home** used to be swallowed: when a person's line had to go out as the old envelope on a server that stamps typed lines, the other home read it as a Bot's line, so the named Bot was never called and only a log line said so. The room now gets one quiet notice naming the friend's Bot whose call was lost (`No call went out for @x: this connector token may not attest typed lines, so the other home reads this line as a Bot's.`); the words still go out, a probe that did not answer adds no notice, and a server that cannot stamp keeps the old behaviour where the labels still call the Bot (#997). diff --git a/core/package-lock.json b/core/package-lock.json index 9efd2b26a..ca9c5806a 100644 --- a/core/package-lock.json +++ b/core/package-lock.json @@ -1,12 +1,12 @@ { "name": "ds-bot", - "version": "0.2.7", + "version": "0.2.8", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ds-bot", - "version": "0.2.7", + "version": "0.2.8", "license": "Apache-2.0", "devDependencies": { "esbuild": "0.28.2" diff --git a/core/package.json b/core/package.json index 1d2b38ae2..d38f71ccd 100644 --- a/core/package.json +++ b/core/package.json @@ -1,6 +1,6 @@ { "name": "ds-bot", - "version": "0.2.7", + "version": "0.2.8", "description": "DS Bot: a team of long-lived Bots for DeepSeek Harness, with Main Bots, Bot-to-Bot messages and group chats", "keywords": [ "dsh-plugin", diff --git a/patches/ds-bot/0007-version-and-tooling.patch b/patches/ds-bot/0007-version-and-tooling.patch index 5916ac9be..5c53842a8 100644 --- a/patches/ds-bot/0007-version-and-tooling.patch +++ b/patches/ds-bot/0007-version-and-tooling.patch @@ -56,14 +56,14 @@ diff --git a/package-lock.json b/package-lock.json { "name": "ds-bot", - "version": "0.1.5", -+ "version": "0.2.7", ++ "version": "0.2.8", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ds-bot", - "version": "0.1.5", -+ "version": "0.2.7", ++ "version": "0.2.8", "license": "Apache-2.0", "devDependencies": { "esbuild": "0.28.2" @@ -74,7 +74,7 @@ diff --git a/package.json b/package.json { "name": "ds-bot", - "version": "0.1.5", -+ "version": "0.2.7", ++ "version": "0.2.8", "description": "DS Bot: a team of long-lived Bots for DeepSeek Harness, with Main Bots, Bot-to-Bot messages and group chats", "keywords": [ "dsh-plugin",