DUNIN7 · LOOMWORKS · RECORD
record.dunin7.com
Status Current
Path investigations/loomworks-stele-principal-nature-neutrality-investigation-v0_1.md

Stele core — principal-nature neutrality — investigation — v0.1

Version. 0.1 Date. 2026-06-20 Author. Claude Code (CC) on DUNIN7-M4, read-only inspection; for Marvin Percival (DUNIN7 Operator). Status. Findings document. Pre-scoping for a possible Stele core question; no CR. Markdown primary (technical / pre-scoping consumer). Read-only inspection of DUNIN7/stele (src/stele/) and loomworks-engine; nothing changed. Reports and characterises; recommends nothing; designs nothing. Against. DUNIN7/stele main 8246729; loomworks-engine main 32c1a68.


Plain-language summary

The question: does Stele's identity core model a neutral, host-agnostic "human vs autonomous" distinction about a principal — something a second consumer (OVA, FORAY, an external adopter) could read without inheriting Loomworks' role vocabulary — or is that distinction only inferable through the consumer-flavoured ActorRef.kind enum?

Finding: World (c) — the core has no neutral notion of principal nature at all. ActorRef and its kind enum live entirely in the engine (the first consumer), not in Stele core. Stele core has no human/autonomous column, no is_agent/principal_type/nature flag, and no second authentication path for autonomous principals (no RFC 7523/8693 agent-auth) — every principal is one uniform identity row authenticated by the same human-shaped path (passkey + TOTP + recovery). Stele core does not branch on any of the four kind values. The human-vs-autonomous distinction is wholly a consumer-side construct; the substrate holds no neutral property today. Surfacing one would be a genuine net-new core addition, not the exposure of something latent.


1. ActorRef / kind — definition site and allowed values

kind: Literal["contributor", "agent", "person", "companion"] (line 66). Its docstring binds each value to an authentication path:

2. Does Stele core model principal-nature independent of kind?

No. What exists, and what does not:

So Stele core carries no representation — column, enum, flag, or derived property — of whether a principal is human or autonomous.

3. Which kind values are core identity-concepts vs first-consumer vocabulary?

All four are first-consumer vocabulary; none is referenced as a discriminating value inside Stele core logic.

| Value | Hits in src/stele/ | What they are | |---|---|---| | person | 43 | All generic substrate naming — person_id, person_totp, the _PersonRow stub, "the person's only passkey". The substrate's ordinary word for a principal; never used as a discriminating kind value. | | companion | 1 | The English word in webauthn.py:245 ("its companion pending store") — unrelated to the Companion identity. | | agent | 1 | A docstring aside in api.py:19 ("Bearer for an agent"). | | contributor | 2 | Docstring prose in person_totp.py ("the two-step contributor TOTP flow"). |

Zero Stele-core logic branches on any of the four values. By contrast, the engine branches on kind == "agent" at many sites — e.g. engagement/assertions.py:168, engagement/creation.py:802, engagement/manifestation.py:280, engagement/shaping.py:267, delegation/service.py:73, and the data-layer commit_assertion agent-reject described at memory/base.py:30. Every human-vs-autonomous decision lives consumer-side.

4. If the distinction is enum-only: the seams a neutral core property would touch (report only)

(The distinction is enum-only and enum-is-engine-side, so this is the relevant case. Reported as seams; no design, no recommendation.)

5. The RFC 7523 / 8693 agent-auth surface vs the human passkey/TOTP path

Which of the three worlds


DUNIN7 — Done In Seven LLC — Miami, Florida Stele core — principal-nature neutrality — investigation — v0.1 — 2026-06-20