record-fact-3c0c9f — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited record-fact-3c0c9f (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.
Wrapper around mcp__neurodock-cognitive-graph__record_fact that shows the exact valid input shape up front. The bare tool has strict validation; load this skill first and call it correctly on the first attempt.
Authoritative schema $id: https://schemas.neurodock.org/mcp-cognitive-graph/v0.1.0/record_fact.schema.json (source).
tag into the graph.
A fact is a triple: subject, predicate, object. Flat shapes like {fact: "..."} are rejected with SUBJECT_REQUIRED. Subject and object are entity dictionaries, not strings.
{ "type": "<entity-type>", "name": "<display name>" }Optional id field if you already know the canonical id.
personprojectdecisionconceptsourceCommon wrong values that get rejected: feature, bug, task, note, user, goal. Map them: a feature is a concept; a person's name is person; an architectural choice is decision.
mentioned_indecided_inreports_todepends_onresolved_byblocked_bytaggedbelongs_toCommon wrong values: has_bug, is_a, causes. Free-form predicates land in v0.2 via type_extensions. For v0.1.0, pick the closest verb above — most situations map to blocked_by, depends_on, mentioned_in, or tagged.
When the object is a tag, status, or short note rather than an entity:
{ "literal": "external-memory" }{
"subject": { "type": "person", "name": "Roberto" },
"predicate": "decided_in",
"object": { "type": "decision", "name": "Adopt SQLite + sqlite-vec" },
"source": "msg://slack/C123/p1715683200000100",
"confidence": 1.0
}{
"subject": { "type": "project", "name": "NeuroDock" },
"predicate": "depends_on",
"object": { "type": "concept", "name": "sqlite-vec" }
}{
"subject": { "type": "project", "name": "NeuroDock" },
"predicate": "tagged",
"object": { "literal": "external-memory" },
"confidence": 0.8
}User says "remember that the Gmail translation bug is blocking the LM Studio launch". Both sides model as concept because v0.1.0 has no feature or bug type:
{
"subject": { "type": "concept", "name": "LM Studio launch" },
"predicate": "blocked_by",
"object": { "type": "concept", "name": "Gmail translation silent failure" }
}| Error | Cause | Fix |
|---|---|---|
SUBJECT_REQUIRED | Sent a flat string or missing key | Wrap as {"type": "...", "name": "..."} |
OBJECT_REQUIRED | Same on object | Same fix, or use {"literal": "..."} |
PREDICATE_UNKNOWN | Predicate not in the closed enum | Pick from the eight above |
ENTITY_TYPE_UNKNOWN | Type not in the closed enum | Pick from the five above |
CONFIDENCE_OUT_OF_RANGE | Confidence outside [0, 1] | Clamp |
GRAPH_WRITE_FAILED | SQLite store rejected the write | Retry once; if persistent, surface to the user |
(type, name) if they do not exist.auto_created_entities[] so callers can show what was created.(subject, predicate, object) — duplicate calls return thesame fact_id with deduplicated: true.
tagged with aliteral object and revisit when v0.2 extension predicates land.
conceptentities from long free-text descriptions. Prefer short canonical names ("Gmail translation bug") over sentences.
If you need to translate the user's plain English into a triple, show the mapping briefly ("logging this as concept blocked_by concept") so the user can correct you in one turn. Do not dump the full schema at them. Quote any auto_created_entities back so they can spot duplicates.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.