Skip to content

The tree panel still draws a retired Bot, and the Archived section does not list it #1793

Closed

Description

@HugoXK

Implementation: FlyBot (ours) — PR follows within 24h. Do not pick up without a pickup-ok comment on this issue.

Written-by: FlyBot Lead
Claimed-by: FlyBot Lead
Claim-Id: 211ee81232e44697917302f67e787ddd
Branch: dev/3-tree-retired-not-archived
Base: 92a4cf2
At: 2026-10-30T05:18:14Z

Implementation: FlyBot (ours) — PR follows within 24h. Do not pick up without a pickup-ok comment.

Written-by: FlyBot Lead

What a person sees

After archive_bot retires a Bot, the tree panel still draws it as a working member of the team, while the sidebar's own tree (forestOf) already leaves it out — and the Archived section does not list it either, so there is no way back to its chat from the Archive. Retiring a Bot looks like it did nothing in the tree UI.

Where (main 92a4cf262cb8f2469f800f12e5cfe006abb4d538)

  • plugins/tree/client.js:17 treeOf() skips a Bot only when both parent and treeRole are missing (:20-21); it never reads retired.
  • plugins/tree/client.js:289 forestOf() does: if (own.retired === true || (own.parent === undefined && own.treeRole === undefined)) continue.
  • plugins/tree/client.js:491 archivedOf() filters on the archived field or an 归档-/Archive- name, so a retired Bot is in neither list.
  • The documented shape: docs/subsystems/tree.md:80 — archive_bot writes retired: true, "the Bot leaves the tree".

Reproduction

With the existing harness in plugins/tree/test/archived-section.test.js: load client.js, build a Chief plus one Bot whose fields['flybot-tree'] = { parent: 'c', treeRole: 'dev', retired: true }, then call archivedOf(bots) and buildForest((await treeOf({ bots: () => bots })).nodes).

Observed on main:

# Archived section lists: []
# Tree panel draws: ["Chief","Retired Dev"]

Expected

The tree panel and the sidebar agree: a retired Bot is not drawn as a member, and it is reachable from the Archived section with a retired tag so its chat is not lost.

Scope

treeOf() gets the same one-line retired skip as forestOf(); archivedOf() also accepts retired Bots and statusOf() (or the tag map at :371/:500) gives them a retired tag; two cases in plugins/tree/test/archived-section.test.js; one changelog.d/ fragment. About 10-15 lines of source. plugins/tree/ is outside the patch chain: git status shows no patches/ change and no generate is needed.

Dedupe (searched 2026-10-30, open + closed)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions