Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,40 @@ New entries are written as one fragment file per change in [changelog.d/](change

## [Unreleased]

## [0.2.18] - 2026-10-31

### Added

- We worked a workflow (a workflow now belongs to a Project: its definition carries projectId, the run is bound when it starts, and Settings shows the Project) — [#1856](https://github.com/ThinkFlowLab/FlyBot/issues/1856).
- Every Project now gets its own Chief, created with the Project: the record carries `chief: { botId, sessionId, createdAt }`, the Chief Bot carries the Project binding, and `project-delete` retires it with the Project. It speaks for that one Project only, never for the user's main Chief (#1859).
- A Project's page now opens with its **Project team**: the Project's own Chief, the assistant that speaks for you there, and the role pool (Owner, Maintainers, Members) together with the rank you hold and the ranks you may switch to. Each of the two Bots opens that chat straight from the board, and a Project that has no Chief yet keeps the row and reads **Not set** instead of hiding it ([#1860](https://github.com/ThinkFlowLab/FlyBot/issues/1860)).
- A meeting can now record who a Project Chief or an owner's agent speaks for: positions carry `speaksFor`, the archived decision file names the proxy beside that position, and a `severe` decision is refused when one side rests only on a proxy whose person has neither taken a position nor been recorded silent ([#1861](https://github.com/ThinkFlowLab/FlyBot/issues/1861)).
- Workflows can now record a shadow verdict for a handoff before anything depends on it: the pool contract of #1853 runs on the handoff a caller passes to `assign`, and the answer lands on the run record as `shadow: { verdict, code?, reason? }` and as one `shadow: <verdict>` line in the run's own stage log. Nothing reads it — the run, the card and the pull request fast lane behave exactly as they did, which is the point of the shadow step ([#1862](https://github.com/ThinkFlowLab/FlyBot/issues/1862)).
- The Project board shows each Project Bot's dossier — persona, memory head and topic names, and attached skills — from one read-only `project-team` read, with a `Dossier` control on the Chief, my-agent and role-pool rows; the owner's own Bot chat header now has an entry that opens the Project assistant's chat, without un-hiding it in the global Bot list ([#1864](https://github.com/ThinkFlowLab/FlyBot/issues/1864)).

### Fixed

- Settings → Workflows follows a live run instead of freezing at the moment the page opened: while any workflow has work running the page re-reads `workflow/state` every 2 seconds — the room drawer's own beat — so a step that goes running → done changes its chip without reopening the page, an edit in progress suspends the refresh, and the page stops asking when the last run finishes or it is closed ([#1810](https://github.com/ThinkFlowLab/FlyBot/issues/1810)).
- The Project board's queue rows beside the columns now read **运行中** for a live claim and **已停滞** for a stalled one in the Chinese interface, instead of printing the host's lowercase `running`/`stalled` ids ([#1813](https://github.com/ThinkFlowLab/FlyBot/issues/1813)).
- The Project role switch answered `bot/not-found: Unknown endpoint project-role` on a host with a
member session: `channel.js` dispatched it and `store.js` implemented it, but authz's explicit
`TASK_ENDPOINTS` list never named it, so the gate refused before the handler ran. It is listed
there now, with a guard test that holds every endpoint the channel dispatches to a gate answer
that is not "unknown endpoint".
- A Project role name is now matched against the rank table's own keys instead of the prototype chain: `toString`, `__proto__` and `constructor` answer `unknown-role` and leave the record untouched, where they used to demote a Maintainer to Member and report success ([#1838](https://github.com/ThinkFlowLab/FlyBot/issues/1838)).
- A Main Bot can no longer rewrite, retire or stop another owner's Bot. On a deployment where the owner rule is enforced, `update_bot`, `archive_bot` and `stop_bot` now accept a target only when it belongs to the Bot's own owner or is granted to that owner — the same rule `list_bots` and the HTTP side already kept — so the instructions, retirement and running turns of another owner's Bot stay untouched ([#1844](https://github.com/ThinkFlowLab/FlyBot/issues/1844)). The three refusals also read one sentence, `No Bot named <name>.`, whether the Bot is missing or foreign, and no longer name the rest of the team. Single-owner installs behave exactly as before, and the refusal text is aligned with no other behaviour change.
- Project settings now shows the caller's own **Pause the daily digest** switch: the panel read a field the Project record never carried, so a digest its owner had paused always opened unticked, and pressing **Save** on that row sent `off: false` and quietly resumed it the next morning. `project-read` now answers the caller's own assistant record (`assistantMine`) beside the Project, the panel reads the box from it, other owners never see each other's switch, and a Save that changes nothing no longer writes or sends `schedule-resume` ([#1845](https://github.com/ThinkFlowLab/FlyBot/issues/1845)).
- Project Assistant: the 09:00 digest now reads the Project's own board instead of an actor-less one, so a signed-in install no longer gets "no change since the previous digest" every day and the archived watermark stops hiding finished cards ([#1846](https://github.com/ThinkFlowLab/FlyBot/issues/1846)).
- The Project memory box now refuses what the Project Assistant's own writer always refused: an empty entry is answered with *A Project memory entry needs text* and one over 600 characters with *A Project memory entry is at most 600 characters*, in the interface language in the panel, and neither writes a row or touches the Project. Before this the endpoint stored a blank entry, or cut a long one to 600 characters, and still reported success ([#1847](https://github.com/ThinkFlowLab/FlyBot/issues/1847)).
- The Project board's running table now reads the cards of the board it belongs to instead of the whole deployment's task store, so another Project's claimed card no longer hands out its title and holder; the same list is carried by every branch of the metrics read, so the table stays populated when the GitHub source is unavailable or fails, and the done-task median is this board's cards too ([#1848](https://github.com/ThinkFlowLab/FlyBot/issues/1848)); a five-minute cache entry shared by two Projects on the same repository no longer hands one Project's done-task median to the other ([#1880](https://github.com/ThinkFlowLab/FlyBot/pull/1880)).
- An unknown `timeZone` in a Project board read no longer takes the whole board down: the zone is resolved once in `project-metrics.js`, an unknown name falls back to the named `UTC`, and the answer says which zone it used (`timeZone`), while rows, queues and decisions keep answering and a valid zone reads exactly as before ([#1849](https://github.com/ThinkFlowLab/FlyBot/issues/1849)).
- Expanding **Projects** in the left sidebar now lists the Projects you can see, each with the role you hold there, and a right-click can switch that role: the sidebar had been asking the host for an endpoint that does not exist, so the list was empty on every deployment. The duplicate **Project board** button is gone from the Tasks dialog, so a Project opens from the sidebar only ([#1854](https://github.com/ThinkFlowLab/FlyBot/issues/1854)).
- The Project board no longer opens on a wall of finished work: a Project with months of history shows the cards still in flight, and every finished card lives in one **Done cards** group that starts collapsed, with the header still counting them (`Done: 191`). Only the finished column left the rows — a rework, blocked or waiting card is still a row, and the queue groups, the row shape and the metrics are unchanged ([#1855](https://github.com/ThinkFlowLab/FlyBot/issues/1855)).
- A workflow no longer ends early because an output value merely contains `open-pr`: a declared OUTPUT now counts `open-pr` (and `tip-unchanged`) only as a whole word, so a triage brief that names `data-open-project` lets the run continue to Claim instead of finishing with every successor still queued ([#1866](https://github.com/ThinkFlowLab/FlyBot/issues/1866)).
- A Workflow step that runs past its lane's `stepTimeoutMinutes` is now reported as having reached its deadline (`step deadline reached (45 min)`) instead of `no reply for 45 minutes`, so a step that was still working no longer reads as a Bot that went silent; the stage line and `run.failure` carry that wording, and the `define_workflow` tool accepts `stepTimeoutMinutes` (1–120) so a new lane does not silently inherit the 45-minute default ([#1868](https://github.com/ThinkFlowLab/FlyBot/issues/1868)).
- `workflow/assign` now delivers the brief it is given. The brief is stored on the task, kept on a parked card (so `workflows.json` and `workflow/state` show what the node was actually told) and handed to the node as its instruction, with the title used only when no brief is given; `run_workflow` treats a brief the same way and takes its title from the brief's first line, and a field `assign` does not read is now named back in `ignored` instead of being dropped in silence ([#1869](https://github.com/ThinkFlowLab/FlyBot/issues/1869)).
- The Project board's task-completion median now counts a card the way the task store finishes it — `status: 'accepted'`, timed from the last terminal `actors[]` entry — instead of the `completedAt` field the store never writes, so the number stops reading `—` on a real deployment ([#1884](https://github.com/ThinkFlowLab/FlyBot/issues/1884)).

## [0.2.17] - 2026-10-31

### Added
Expand Down
1 change: 0 additions & 1 deletion changelog.d/1810-settings-workflows-poll.fixed.md

This file was deleted.

1 change: 0 additions & 1 deletion changelog.d/1813-board-state-i18n.fixed.md

This file was deleted.

5 changes: 0 additions & 5 deletions changelog.d/1836-project-role-authz.fixed.md

This file was deleted.

1 change: 0 additions & 1 deletion changelog.d/1838.fixed.md

This file was deleted.

1 change: 0 additions & 1 deletion changelog.d/1844-bot-write-owner.fixed.md

This file was deleted.

1 change: 0 additions & 1 deletion changelog.d/1845-assistant-off-readback.fixed.md

This file was deleted.

1 change: 0 additions & 1 deletion changelog.d/1846-digest-empty.fixed.md

This file was deleted.

1 change: 0 additions & 1 deletion changelog.d/1847-memory-write-bounds.fixed.md

This file was deleted.

1 change: 0 additions & 1 deletion changelog.d/1848-running-table-scope.fixed.md

This file was deleted.

1 change: 0 additions & 1 deletion changelog.d/1849-timezone-fallback.fixed.md

This file was deleted.

1 change: 0 additions & 1 deletion changelog.d/1854-projects-sidebar.fixed.md

This file was deleted.

1 change: 0 additions & 1 deletion changelog.d/1855-project-board-done-group.fixed.md

This file was deleted.

1 change: 0 additions & 1 deletion changelog.d/1856-workflow-project.added.md

This file was deleted.

1 change: 0 additions & 1 deletion changelog.d/1859-project-chief.added.md

This file was deleted.

1 change: 0 additions & 1 deletion changelog.d/1860-project-team.added.md

This file was deleted.

1 change: 0 additions & 1 deletion changelog.d/1861-meeting-speaks-for.added.md

This file was deleted.

1 change: 0 additions & 1 deletion changelog.d/1862-pool-shadow.added.md

This file was deleted.

1 change: 0 additions & 1 deletion changelog.d/1864-project-dossier.added.md

This file was deleted.

1 change: 0 additions & 1 deletion changelog.d/1866-early-end-word.fixed.md

This file was deleted.

1 change: 0 additions & 1 deletion changelog.d/1868-expire-reason.fixed.md

This file was deleted.

1 change: 0 additions & 1 deletion changelog.d/1869-assign-brief.fixed.md

This file was deleted.

1 change: 0 additions & 1 deletion changelog.d/1884-p255-task-done-median.fixed.md

This file was deleted.

4 changes: 2 additions & 2 deletions core/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading