brain-conflict — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited brain-conflict (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Brain settles every record_fact in two steps, and neither one uses a score. At write time it applies only rules that need no judgement: the same value restated corroborates, a strictly later validFrom supersedes the earlier value of the slot, and a strictly earlier one is filed as history. Two different values of one slot at the same valid time are both kept, and fact resolution (a judge that names the relation) decides what they are. When the judge says the two cannot both be true, both stay alive in COMPETING status. This skill is how you handle those.
status='competing' marks a real disagreement: the same attribute of the same subject, at the same time, with two values that cannot both be true and nothing saying one replaced the other. It comes from fact resolution, not from a threshold:
active with reason: 'for_resolution'.same (a paraphrase: corroborates), replaces (successive values: valid time decides which closes), contradicts (both go competing), unrelated (nothing changes).single_active predicates close every overlapping value at write time, so they never reach the judge by overlap.bitemporal_event predicates decide by calendar day at write time, as before.source.kind = 'source_record', a CRM door) never has its status changed by resolution. A claim that disputes it is marked competing beside it; the record keeps its slot.There are no weights, no supersede margin and no reject floor: confidence and source trust are recorded on the fact (trustSnapshot) as provenance, never as a vote. Both competing rows stay searchable and are surfaced as a known disagreement. The dreams resolver pass (/v1/dreams/run) later asks an LLM judge to break 2-fact pairs older than the min-age gate; 3+ groups stay for human adjudication.
get_competing_facts({
entityId: "knowledge_entity:01HXYZ...",
predicate: undefined, // optional — filter to one predicate
asOf: undefined, // optional — what was competing at this moment
})Returns groups keyed by (entityId, predicate):
{
"entityId": "knowledge_entity:01HXYZ...",
"groups": [
{
"key": "knowledge_entity:01HXYZ...::status",
"predicate": "status",
"facts": [
{ "factId": "...", "object": "active", "recordedAt": "...", "source": ... },
{ "factId": "...", "object": "churned", "recordedAt": "...", "source": ... }
]
}
]
}asOf filters to what was competing at that moment — useful for postmortems ("what was this customer's status disagreement on April 1?").
Before you record_fact on a contentious predicate, ask brain what would happen:
detect_contradiction({
entityRef: { vertical: "rent", id: "cust_42" },
predicate: "status",
object: "active",
validFrom: "2026-05-01T00:00:00Z",
confidence: 0.9,
sourceVertical: "rent",
})Returns:
{
"wouldOutcome": "INSERTED",
"reasoning": "Another value of this slot holds from the same moment; the fact would be inserted and fact resolution would judge the pair (a paraphrase corroborates, a replacement supersedes, a disagreement competes).",
"opposingFacts": [
{ "factId": "...", "object": "churned", ... }
],
"predicatePolicy": { "semantics": "bitemporal", "decayHalfLifeDays": 60, "piiClass": "none" }
}The reasoning string names the valid-time rule that fired (CORROBORATED, SUPERSEDED, INSERTED_HISTORICAL, or INSERTED for resolution) and opposingFacts lists the values it would meet. Read it before deciding what to do.
For low-stakes pairs aged past the min-age window, the dreams loop's resolver does this:
status='competing' AND age ≥ DREAMS_RESOLVE_MIN_AGE_DAYS)a_wins | b_wins | unsureunsure, leaves the pairThis is fully automated and writes through retract_fact with reason: "dreams_resolver:a_wins" style. The audit row stays — operators can always see "this was resolved by automated judgement".
For high-stakes pairs or 3+ multi-way groups:
get_competing_facts to find the disagreement.retract_fact({ factId: <loser>, reason: "operator verdict: <text>" })validFrom. Valid time, not source weight, is what closes the old value at write time.When the user wants to record something new on a predicate that's already in COMPETING, run detect_contradiction first. If the dry-run says the new fact would be inserted for resolution beside the disputed values, surface that to the user before you write — "this would create a 3-way disagreement; would you rather pick one of the existing values first?"
competing holds from the same moment. A later recordedAt doesn't make one side right, and your agent shouldn't override silently.human_declared and the other is inbox_extraction is almost always resolvable by the user; the disagreement is between a person and an LLM. Surface that.human_declared fact via record_fact.get_competing_facts({ asOf: "2026-04-01..." }) to see the historical state, not the current one.single_active predicate means the judge found a contradiction between values that start at the same moment — check predicatePolicy from detect_contradiction to confirm the semantics.supersedeChain (retractionReason === 'superseded'). An explicit operator retract is treated as independent; the predecessor stays superseded.record_fact / retract_fact — the write side of adjudication (see brain-write)detect_contradiction — preflight before write. It mirrors the write-time valid-time rules exactly; it cannot predict what fact resolution's judge will say about a same-moment pairget_source_reputation — the learned trust profile of each side's source vertical; context for the human deciding, not something the resolver weighsget_fact / get_fact_provenance — audit one competing fact's trust record (incl. groundingStatus) and the verbatim turns behind it before retracting (FACTS_API_ENABLED servers)get_entity_timeline — full history including superseded chain (see brain-recall)search_knowledge — its answer already includes competing values, marked [competing], so a dispute is never hidden behind one side (see brain-search)~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.