static new ThreadLocal ai_postTriple_verified; static new ThreadLocal ai_postTriple_recursion; static S ai_postTriple(T3 triple) { // check, clean ping(); if (triple_anyPartNull(triple)) null; triple = trimTriple(triple); if (!ai_tripleAllowedToPost(triple)) null; // fail("No"); // existing? if (has(triple)) null; // invalid? if (has(ai_tripleToInvalid(triple))) null; // post verified? bool ver = !isFalse(ai_postTriple_verified!); // post handler? AI_PostHandler handler = ai_postHandler(); T3 striple = toSymbolTriple(triple); if (handler != null && !isTrue(ai_postTriple_recursion!)) { ai_postTriple_recursion.set(true); try { ret strOrNull(handler.postTriple(striple, ver)); } finally { ai_postTriple_recursion.set(null); } } else { // post web the normal way Web web = webFromTriple(striple); web.unverified = !ver; postSoftwareMadeWeb(web); ret web.globalID(); } } static S ai_postTriple(S a, S b, S c) { ret ai_postTriple(t3(a, b, c)); }