ccf-core/ccf-agent v1.0.1: hard min-gate coupling, QAC trust updates, and runtime certificates. Gate C exercised the computed runtime on Seed-class ARM hardware with driver-fed input. Unless a post cites a specific run, do not read it as proof of live sensors, mBot2 behaviour, Cognitum store validation, or production deployment.The robot was not afraid of the dog. It had been turned down.
A real moment
The practice below is invented and so are the people in it. It is how the measured behaviour looks from the floor. The numbers further down come from a simulation and every one of them is real.
Ballinrobe, County Mayo. A Thursday afternoon in a small veterinary practice off the main street. There is a companion robot in the waiting area. It has been there since February. Its job is not clinical. It is there because a waiting room full of frightened animals and bored children is easier with something in it that moves gently and pays attention.
Marie Doherty comes in at ten past three with a collie called Bess and a torn pad on the back left foot. Marie and Bess have been in four times since the spring. The robot knows them in the only way it knows anything, which is that it has been in the same room as them before and nothing bad happened.
Every other visit the robot has rolled over, brightened, and said hello in the flat cheerful way it says hello. Today it comes about two metres and stops. It dims. It stays where it is for the whole twenty minutes they are waiting.
Bess is fine. Bess is asleep. Marie is not fine. She asks the nurse on the desk whether there is something wrong with the robot, and then, because it is the thing anybody would ask, whether the robot is frightened of her dog.
The nurse does not know. That is the ordinary situation. She can see what the robot did. Nothing in the practice tells her why it did it.
What actually happened is twenty feet away behind a closed door. A very distressed greyhound came in at half nine that morning. The vet put the whole building into a quieter mode, which is a normal thing to do. That mode is taking about a third off everything the robot does, everywhere in the practice, including the waiting room.
The robot has been turned down. Bess has nothing to do with it.
Why this matters
The gap in that story is a record problem.
Robots log. They log motor commands, sensor readings, timestamps, battery. Every one of those tells you what happened. None of them tells you which of the several things going on inside the robot was the one that decided the behaviour. So when a person asks why, somebody has to reconstruct it afterwards from evidence that was never collected for that purpose.
Most of the time the reconstruction is a guess dressed as an answer, and the guess picks the most visible cause. In Ballinrobe the most visible cause is Marie and Bess, because they are standing right there. The actual cause is a setting applied hours earlier for a different animal in a different room.
If the practice acts on the guess, it does the reasonable thing: give the robot more time with Marie, note that the waiting room needs work. That is the wrong repair. It costs weeks and it fixes nothing, because next Thursday the greyhound's replacement arrives and the same thing happens again.
This gets sharper, not softer, as the rules tighten. The EU AI Act's record-keeping requirement came into force for its high-risk categories on the second of August this year. It says a system has to automatically record events relevant to identifying risk. It does not say the record has to be able to name a cause. A practice can be fully compliant and still have no idea why its robot backed away.
What CCF does about it
The robot in that story runs on CCF, which builds behaviour out of a small number of named quantities rather than out of learned weights nobody can read.
Four things decide how much the robot does at any moment. How settled the room reads right now. How much familiarity it has earned in that specific context over months. Whether somebody it already trusts introduced it to the place. And whether anything is currently holding it back, like the practice-wide quieter mode.
The rule that combines the first two is a hard minimum. The robot acts on the smaller of the immediate reading and the earned familiarity, never on an average of them. That is the part of CCF that makes the record possible at all: because behaviour comes out of an explicit comparison of named numbers, the causal chain for one action is a short list, not an attribution heat map.
The fourth provisional patent describes what to do with that. It calls it a causation packet. Whenever something worth explaining happens, the same part of the robot that took the action writes down the state that produced it. The actual numbers, at the moment, from the same place the behaviour came from. A summary written later by a different system would not do.
The patent then makes a promise about what the packet is good for. It says a tool reading the packet should be able to answer three questions: why this behaviour, why not more or less, and what changed since last time.
That promise can be tested, so this run tested it.
The numbers
Six hundred moments in the veterinary practice, across six contexts, simulated in Rust. For each one, work out the real answer by re-running the moment with one factor switched off at a time and seeing which switch changes the behaviour most. That gives eighteen hundred questions with known answers. Then see what each kind of record can do with them.
An ordinary tick log gets 0.3 percent. It answers almost nothing, which is the expected result and the reason the packet exists.
The interesting row is the short version of the packet, the part the patent claim actually requires: context, current reading, earned familiarity, and what the robot did. It gets 94.8 percent.
Ninety-five percent sounds good until you look at the other five. The short record never shrugs. It produced a named cause for all eighteen hundred questions, and ninety-four of those names were wrong. Ninety-two of the ninety-four are the same mistake: something was actively holding the robot back, the short record has no field to write that in, so it blamed low familiarity instead. Exactly the Ballinrobe mistake, ninety-two times.
The long version of the packet, the one that also carries the holding-back setting and the introduction and the rest, gets 99.9 percent. Its two remaining errors both happen in the one room the robot was escorted into by a trusted person, which is the one part of the system the patent describes without giving a rule for.
One more number, and it is the one that surprised me. The same long packet, read with a simpler and more obvious rule for deciding which cause to name, gets 71.3 percent. Worse than the short packet. Identical fields, different rule, twenty-eight points apart. What you write down matters less than what you do with it.
Cost, for anyone who has to ship this: about 308 bytes per record, 191 nanoseconds to write it, and under three microseconds per event including the tamper-evident linking. That is on a low-power Intel desktop chip from 2020.
What this doesn't solve
The privacy result was a genuine relief and it is worth being clear about its limits. In consultation rooms the record is stripped down: no sensor fingerprint, no room identities, no note of what routine was running. Over thirty-five such moments, coverage stayed at 100 percent, and no record carried anything about the substance of the consultation. The fields that protect the person are not the fields that explain the behaviour. But that is a result on one workload, not a guarantee.
The records are hash-linked so a later reader can tell whether the sequence has been edited. That catches every mutation, deletion and reordering tested here, 599 out of 599 in each case. It does not catch somebody who rewrites the whole chain from scratch, unless the person checking already holds the last value from somewhere else. Linking is not signing, and this run does not claim otherwise.
The one room where the full record still fails is the escorted one. The patent says a trusted person's introduction gives a bounded, decaying boost, and it gives the size and the decay rate, but not the rule for how the boost turns into behaviour. That rule had to be fitted here to the single worked example in the filing. Anybody building this from the document would invent a different one.
And this is one simulated practice. Six contexts, six hundred moments, one quiet-mode window. The proportions belong to that stream. The direction does not: a record without a field for the quiet mode cannot name the quiet mode, in any building, ever.
For the curious, the math
Effective coherence is the hard minimum of the instantaneous reading and the accumulated context value, with an earned floor that rises with interaction count. The sponsor bridge is added after the minimum and capped so it can never lift the robot to the sponsor's own familiarity. Suppression multiplies. Privacy multiplies. The output envelope is that result times a per-channel coefficient.
The definition of a cause used throughout is counterfactual. The limiting factor at a moment is whichever candidate, when removed, buys the most expressiveness. That is why re-evaluating beats reading: reading a packet gives you a set of candidate causes, re-running the moment gives you their order.
The filing already contemplates this. It has a claim for answering a question by re-evaluating the event in a throwaway copy of the robot's state with one factor changed. This run's conclusion is that the claim is the part that makes the promise true.
The filed worked example reproduces exactly: effective coherence 0.14 from a minimum of 0.61 and 0.14, bridge-adjusted to 0.212, output channels at 0.21, 0.25, 0.18 and 0.15. That reproduction is asserted in a test, so if anybody ever changes the arithmetic the build stops.
Where this fits
This is the last of the eight architectural extensions in CCF's second and fourth provisionals to get a working proof of concept. The full research write-up, with every number and the failure cases, is in the repository along with the Rust crate and the decision record. Everything is reproducible from a fixed seed.
The provisional this exercises is US 64/039,655, filed 15 April 2026. Filing is not patentability and nothing here asserts novelty or freedom to operate.
Repository: github.com/Hulupeep/ccf, private, access on request. The gate discipline the project is built on: github.com/Hulupeep/Specflow. Licensing: floutlabs.com. The robot: theshyrobot.com.
One correction while you are here. Some pages on this site still describe Sinkhorn-Knopp and Birkhoff geometry as the causal trust dynamic. That framing is superseded. The causal update is the quotient-affine contraction with a hard min-gate and a per-step residual certificate. This post touches none of that.
License and contact
BSL 1.1, converting to Apache 2.0 in 2032. Contact through floutlabs.com.