-
- 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)