- single ReAct entry for all free text: 7 fixed tools (useSkill + 6);
flow knowledge lives in 5 skill files (resources/skills/*.md, first
line = brief for prompt index; xly.skills.dir overrides for hot reload)
- useSkill returns skill body and logs skill_active; projection pins the
active skill full text on the flow card until confirm/cancel/new skill
- system prompt from template prompts/system.txt (domain map + skill
index); bench reads the same files to avoid replica drift
- delete IntentService/Intent/SlotFillService/LlmJsonClient/StateService/
OkHttpUtil and route()/handleCreate/handleWrite/deriveWriteAction/
ground/withState; dimension-split regex migrated into FormCollectTool
prefill assist (model provably fails dimension splitting)
- anti-fabrication guards now unconditional (zero-tools+digits retry,
WRITE_CLAIM check); invariant layer and button endpoints untouched
- bench_ext: --arch new (same-source prompt/skills) and --fifty
(bench50 cases judged on full trajectory for both arches)