droid

Identity

  • Names: droid / ai.factory.droid.
  • Native format: factory-droid-jsonl, one session journal.
  • Session ID: session_start.sessionId, with session_start.id in the legacy fixture dialect. If both are present they must agree. No namespace is specified by this evidence.
  • Entity keys: Message row id or uuid. Retry results can reuse an ID with parentId == id; preserve each observation rather than deduplicating it. Positional records are capture-scoped. tool_use.id joins tool_result.tool_use_id only when unique.
  • Notes: Accept top-level or nested message.role/content only in the fixture dialect. is_error controls result status when present. An assistant message ID does not identify inference; keep model and usage metadata without inventing calls. compaction_state has unknown replacement extent. todo_state.items supports an items plan; retain unmapped statuses instead of prefixing them with _. No file cause or branch is inferred from physical order.
  • Tool kinds: exact names Execute map to execute; Read to read; Edit, Create and ApplyPatch to edit; Grep, Glob and LS to search; FetchUrl and WebSearch to fetch. Other names need recorded kind evidence.

Position basis

Use only positions established by the stated format and mapping evidence. Current-state rows without transcript positions form the snapshot tail. A protocol commit boundary takes precedence over physical EOF; uncommitted bytes are not a gap.

Destinations

droid: native facts without a standard field

  • Lineage: callingSessionId and parent are candidate parent fields. Their delegation meaning lacks a pinned native contract, so retain them and leave spawnedBy absent. The fixture’s decompSessionType: worker records worker scope, but does not qualify every release. Mission and role facts remain metadata. No copy or root mapping is qualified.

Usage

Select one report per native accounting identity only when this entry establishes that identity. Keep unjoinable or overlapping reports as native evidence. Declare when semantic coverage is incomplete. Schema defaults and placeholder zeros are not reported usage. Backend inclusion rules require evidence; do not infer them from a model name.

Lane and unassigned facts

Facts without established session ownership use manifest _meta["ai.factory.droid/unassigned"] with the common shape. A selection may keep these facts with any subset of sessions, including an empty subset, but must not imply that a session owns them. State the selection policy in the export report.

Losses

Declare every applicable loss under ASR-157. Missing model rendering, accounting joins, lineage or exact context boundaries remain losses when this entry does not qualify them. Unknown ownership is not itself lost data. Omitted unassigned facts use a documented vendor loss or report, not a new core category.

Evidence

Basis: fixture-verified: Factory JSONL parser and authored fixtures in ctxrs/ctx at 74f63227f1c7416607d704668f38b9c7c9de6a16. No pinned Factory writer version or version-level conformance claim. Evidence applies only to the named formats and explicit mappings above. A real capture covers only the behavior that was exercised. A writer probe run without a model covers persistence only, not model or tool execution. Authored tests do not qualify an agent version. Unlisted formats and link mappings remain unqualified.