An observation is evidence, and an inference only proposes
See an observed interaction recorded with its evidence, and a model's inference recorded as a proposal that authorises nothing.
From observation to policy, the chapter’s claim is that the two steps must not be collapsed. An observation is evidence that an interaction happened; it is not a trait. An inference is a proposal about what the observation might mean; it cannot establish itself and it cannot authorise its own use.
Run it
git clone https://github.com/ernanhughes/project-language.git
cd project-language
git checkout 329660f679a5a87831f91fe1430c20ac9360dda8
npm ci
npm run example:personal -- ch22The model is a scripted stand-in. The two inferences in the run are supplied by the script, not produced by a real model.
Expected outcome
The observation is recorded as an observation, with the evidence it rests on:
...
observed obs-expand-derivations: expanded derivations in earlier architecture reviews (evidence ev_1b11457a5df247c1e5e242868f091566)
no proposals yet. The model may call personal_propose; nothing here is inferred by this command.And the model’s tool calls produce proposals that authorise nothing:
...
model tool result: Recorded inf-001 as a proposal from the model. It is visible to the person and authorises nothing.
model tool result: Recorded inf-002 as a proposal from the model. It is visible to the person and authorises nothing.The distinction is visible in the records themselves, where the belief carries its supported scope separately from the scope it is applied to:
...
inf-001: "expanded derivations may be useful in similar architecture reviews" | by model | supports architecture-review, applied to architecture-review | confidence moderate | valid true | authority granted | affects plan-003, plan-004
inf-002: "consensus foundations are already known" | by model | supports architecture-review:protocol-p1, applied to architecture-review:talk-q (EXPANDED) | confidence high | valid false | authority granted | affects nothingThe second one was applied outside the scope its evidence supports, and that is
why it is valid false and affects nothing.
A model’s tool call can only add a proposal
The adapter’s rule is in host-pi/personal.ts: a typed command is the person’s
own act, a model tool call is a proposal, and what a model says in a message
is not recorded at all.
// Who may do what:
// - A TYPED COMMAND (`/personal ...`) is the person's own act. It is how a declaration, a correction, an override, a boundary
// application or a revocation reaches the state.
// - A MODEL TOOL CALL (`personal_propose`) is never the person's act. It can add an inference that starts as a proposal and
// cannot authorise anything. What a model SAYS in a message is not recorded at all.
// - All state is rebuilt from the session's own entries (plus the durable store for standing records) on every call. Nothing
// is held in a closure. An entry that is malformed, or that does not carry this adapter's gate and checksum, is reported
// and has no influence. The checksum catches accidental damage and casual forgery; it is not a security boundary.
And the belief type keeps confidence strictly apart from authority:
export interface InferredBelief extends Base {
kind: "inferred_belief"; origin: "inferred";
belief_kind: BeliefKind;
proposition: string;
evidence_refs: string[];
/** What the evidence supports, and where it is being used. Using it beyond the first is a new inference. */
supported_scope: Scope;
applied_scope: Scope;
standing: BeliefStanding;
/** Qualifies the interpretation. It is not authority and nothing here lets it become authority. */
confidence: "low" | "moderate" | "high";
consequence: Consequence;
}Mechanism and limitations
Documented: the origin ordering, the belief’s supported and applied scopes,
and the separation of confidence from authority are in
core/personal/src/types.ts and core/personal/src/beliefs.ts.
Observed: the run above. The observation was recorded as an observation with
its evidence id. Both model inferences were recorded as proposals. inf-002,
applied outside its supported scope, was reported invalid and affected nothing.
Not shown. Nothing here shows that a real model proposes sensible inferences, or that it resists proposing person-types or inner states: the model is scripted. The chapter’s harder question — when an observation may become a policy — is a question for a person, and the run only shows that the machinery refuses to answer it for them. The checksum on a session entry is an integrity marker, not protection against a hostile writer.
Understand this example
Copy this prompt into your AI tool. No code runs here.
Apply this example
Copy this prompt into your AI tool. No code runs here.