Description
What
Part of #450 (item 2, model-based clustering). Today the tree places a Bot by the words in its name, role label and description (src/roles.js). A role the small vocabulary does not hold — a job title, a brief in another language — finds no group and the Bot stays outside the tree.
Expected behavior
modelClassify: truein the tree config, together with the host allowingflybot-treeinflybot.modelPlugins, asks the sanctioned plugin model call (Add a sanctioned, capped model call for plugins #518) for a single category when the rules find none.- The answer is stored on the Bot (
modelDomain) and read byroles.jsonly where the vocabulary placed nothing, so the rules stay primary. - One call per role change (fingerprinted); a refused or unparsable answer stores nothing and never clears a good label; the host's own caps bound every call.
- Off by default; without the host seam nothing is asked.
Change scope
New plugins/tree/src/classify-model.js; plugins/tree/src/roles.js (reads a stored modelDomain), plugins/tree/src/organize.js (feeds it), plugins/tree/src/adapter.js (askModel, feature-detected), plugins/tree/index.js (opt-in wiring), tests plugins/tree/test/classify-model.test.js + the mock's model.ask, docs/subsystems/tree.md, README. Plugin only; the plugin degrades to the current rules when the model seam is absent.
Why
The tree's differentiator is "the team organizes itself"; a model category lets it group by meaning, not only keywords — the missing half of #450 item 2.
Activity
Birfy commentedon Oct 20, 2026
Triage (2026-10-20 16:05 Asia/Shanghai): HugoXK's PR #520 implements this (#450 item 2) — opt-in
modelClassify, storesmodelDomain, rules stay primary, depends on the sanctioned plugin model seam in #518.Labeled
enhancement+area:automation. Not applyingagent-ready: HugoXK owns the PR, and the owner has not confirmed accepting #520 as the model-clustering slice.Confirmation item for the owner: accept HugoXK #520 (with #518) as the #450 model-clustering slice?
Birfy commentedon Oct 20, 2026
Triage: an implementation PR is already open — #520 ("Tree: model-based clustering for roles the rules cannot place"), so this issue is
agent-workingwhile that PR waits.The PR builds on #518 (the sanctioned, capped model call), so it can only be re-checked after #518 is merged; its head has not moved since 2026-10-20 15:06 and it needs
mainmerged in before it can be reviewed again.Birfy commentedon Oct 21, 2026
Implemented by PR #520 (merged as
f8931346, 2026-10-21 01:55Z): opt-in model-based clustering through the sanctioned plugin model call (#518) —modelClassify+ host allow-list, one ask per role-text fingerprint, rules still primary, category stored on the Bot.The PR body did not carry
Fixes #N, so GitHub did not auto-close this issue. Closing by hand with that evidence.