Fault
- a specific diagnosable faultFault group
- a group of related faultsEliminator
- a test that can eliminate or scope a fault groupQuery test
- a test that typically asks the user a questionSynthetic test
- a test that combines the results of other testsFault
nodes model diagnosable problems. They are shown in blue in the fault containment hierarchy and cannot contain sub-faults. The flight_mode_enabled fault is a networking problem caused by flight mode being inadvertently enabled on a mobile device. It is contained within the network, internet, wireless and flight_mode fault groups. If any of these ancestor fault groups have already been eliminated then inference will never reach this node (it will not be evaluated)._class
- uniquely identifies the fault.comment
- developer-added comment (appears as a comment in generated code).conditions
- evaluates the settings flight_mode test (which asks the user if flight mode is enabled and shows them how to find out) and assigns its result to the variable ?enabled.result
- logic expression, if it evaluates to TRUE (in this case if ?enabled is TRUE) then this fault has been diagnosed and inference completes.resources
- the found resource is displayed if the fault result evaluates to TRUE.Fault groups
are groups of related faults, organised into a containment hierarchy. The wireless fault group is a subset of the internet fault group, meaning it includes all internet-related faults encountered while using a wireless network. The other internet sub-fault (and peer of wireless) is usb_tether, which includes all internet-related faults encountered using a wired USB network._class
- uniquely identifies the fault group.comment
- a developer-added comment (appears as a comment in generated code).subclasses
- ordered list of the _class
names of sub-faults (can be fault groups or faults).subclasses
list.eliminator
is - a test that can ELIMINATE or SCOPE a given fault group. It's configured using the JSON editor on the right, under the Eliminator tab:_class
- identifies the fault group to which the eliminator belongs.label
- all tests require a label to identify them (along with their _class
and variant
fields). Eliminators are a special kind of test and always have the label "eliminator".variant
- a fault group can have multiple eliminators (variants), each of which must have a different variant name. The example eliminator has a single variant called "default" (by convention). Its full name is therefore _class
label
variant
or "wireless eliminator default".comment
- developer-added comment (appears as a comment in generated code).conditions
- the example eliminator evaluates two tests and assigns their results to variables. The first test is the eliminator from internet, the parent fault group of wireless. The second test is called "internet network" and returns the type of network being used to access the Internet, e.g. "wifi". When there are multiple test conditions all of them are evaluated. If a test has already been evaluated (somewhere else in the hierarchy) it returns its existing result.result
- logic expression that uses the variables assigned by conditions
to calculate whether the eliminator is UNKNOWN, ELIMINATED or SCOPED. The example expression means "ELIMINATE wireless faults if the Internet is being accessed over USB; otherwise if the fault is SCOPED as an Internet fault (and we're not using USB, so we must be using a wireless network) it must also be SCOPED to wireless faults; otherwise set eliminator to UNKNOWN".Query tests
are questions a chatbot asks its users in order to troubleshoot a problem. They typically involve asking the user to inspect product settings or perform diagnostic tests. Query tests at first glance may look a little more complicated (in the screenshot above) but are easy to configure:_class
- identifies the fault (or fault group) to which the test is assigned. This is somewhat arbitrary (a test can be assigned to any fault) but assigning it to a logically related fault helps legibility.label
- all tests require a label to identify them (along with their _class
and variant
fields).comment
- developer-added comment (appears as a comment in generated code)._values
- the example query test asks the user "Which network are you using to connect to the Internet?". The _values
field shows that this is a multiple choice question and the string array containing "wifi", "mobile", "bluetooth" and "usb" are the logical options used internally. The visible descriptions for each option (which are presented to the user) are entered in the corresponding "wifi", "mobile", "bluetooth", "usb" fields of the resources
object.resources
- there are three types of string resources in this example test. The "prompt" resource is the question presented to the user, the "help" resource tells the user how to answer the question and the remaining resources are the visible multiple choice answers. Most string resources can use templates to refer to previously evaluated test results and Markdown for formatting.Synthetic tests
are tests that logically combine the results of other tests, to deduce intermediate facts or conclusions useful to the diagnostic process. Synthetic tests execute 'in the background' and do not ask the user questions, but they can output explanations and deductions. They are configured using the JSON editor on the right, under the Tests tab:_class
- identifies the fault (or fault group) to which the test is assigned. This is somewhat arbitrary (a test can be assigned to any fault) but assigning it to a logically related fault helps legibility.label
- all tests require a label to identify them (along with their _class
and variant
fields).comment
- developer-added comment (appears as a comment in generated code).conditions
- the example synthetic test network symptom evaluates two tests and assigns their results to variables. The first device symptom test is a query test that asks the user to select high-level problem symptoms from a multiple choice list. The second triage subsymptom test asks the user for subsymptoms (it's actually composed from multiple test variants, one for each possible device symptom, but it is used as a single test).result
- logic expression that in the network symptom example uses the conditions
variables to calculate whether the reported symptoms and subsymptons could be network-related. The logic expression uses a slightly odd looking syntax (from LISP - now you're doing AI :) but with practice it's easy to understand. The example expression means "return TRUE if the symptom is not any of the listed values or the subsymptom is not any of the other listed values, otherwise return FALSE".