static S ai_renderThingDescriptionWithParts(S s) { S what = ai_lookup(s); if (what == null) null; L parts = ai_partsOf(what); if (empty(parts)) ret what; new L l; for (S part : parts) { S value = ai_lookup(print(part + " of " + s)); S p = dropArticle(part); l.add(value != null ? p + "=" + value : "unknown " + p); } ret what + " with " + textOut_and(l); }