diff --git a/changelog.d/2811-tree-jobtimeout-ceiling.fixed.md b/changelog.d/2811-tree-jobtimeout-ceiling.fixed.md new file mode 100644 index 000000000..a0db3f87b --- /dev/null +++ b/changelog.d/2811-tree-jobtimeout-ceiling.fixed.md @@ -0,0 +1 @@ +The tree plugin's `jobTimeoutMs` is capped at 2147483647 ms (about 24.8 days): a larger value — 30 days is the natural way to ask for "effectively no deadline" — was handed to Node's `setTimeout`, which silently replaced it with 1 ms, so every queued reorganization job was reported abandoned on a healthy host while the host call it was waiting for kept running and writing. The value is now clamped to the ceiling with one warning that names the deadline actually used, so a job whose host call answers inside it resolves normally. See [#2811](https://github.com/ThinkFlowLab/FlyBot/issues/2811). diff --git a/docs/subsystems/tree.md b/docs/subsystems/tree.md index b5cd6a883..1d0140271 100644 --- a/docs/subsystems/tree.md +++ b/docs/subsystems/tree.md @@ -76,7 +76,7 @@ The tree organizes itself by role instead of leaving Bots outside it or a parent - **Placement** of a Bot outside the tree: its namesake, else the tree Bot that leads a group it belongs to (most specific key first, then the shallower lead; an area only through a lead made for it, e.g. "Work Lead"), else the root. At the first of those with room it is placed. A full level is **regrouped**: the most specific group of two or more children (the newcomer counted) moves under a suitable existing member, or under a new lead. Inside a full lead of its own group with no finer group, the member closest to its role takes it (all members share the group). There is **no "least-loaded child" fallback**: a Bot that fits no group while every level it matches is full stays outside, a warning names it and the sidebar tags it "outside the tree"; the next attempt (any `bot.created`, startup) tries again. - **Leads.** A suitable existing lead is a member already marked as that group's lead, already coordinating that group (it has children and the key, project and domain only), or named for it ("Life", "FlyBot Lead") or as a lead ("Kitchen Manager", 负责人). It gets `lead { key, label }`. Only when none fits a new lead is created with a clear role (`