codebuddy

Identity

  • Names: com.tencent.codebuddy; short alias codebuddy.
  • Native format: codebuddy-history: CLI JSONL, or IDE <project>/<session>/index.json with messages/<id>.json. Project catalogs are discovery metadata.
  • Session ID: CLI 2.177.0 writer session-meta sessionId takes precedence over copied message rows; older fixture dialects use their documented sessionId; a native transcript filename stem is a fallback only where the selected fixture contract establishes it as the ID. IDE uses the native session directory key. Global uniqueness is unproved; require a stable installation/profile namespace and reject conflicting session IDs within it.
  • Notes: Decode nested message JSON without stripping injected wrappers. Preserve arguments as text when exact structured decoding is unavailable. Roles, reasoning, content and recorded accounting map only when their meaning is established; do not invent inference from an assistant message. Current catalog/document metadata belongs at the snapshot tail.

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

codebuddy: native facts without a standard field

  • Entity keys and links: CLI id; IDE index messages[].id joins exactly messages/<id>.json. Use CLI line order or IDE catalog order. In the older fixture dialects, native tool IDs may be id, tool_call_id, toolCallId or tool_use_id; conflicting aliases stay unassigned. Matching unique IDs support only the fixture’s documented call/result correspondence.
  • Lineage: parent_session_id, parentSessionId and parentConversationId are unqualified parent leads. Preserve them without a normalized relation until their native schema and scope are established. No child, 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["com.tencent.codebuddy/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: CodeBuddy parser and sanitized IDE fixtures in ctxrs/ctx at 74f63227f1c7416607d704668f38b9c7c9de6a16; CLI semantic tests are authored. No provider executable or proprietary version is qualified. 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.

Observations from 2026-10-27

observed, version 2.177.0: In CLI 2.177.0, copied prefix rows retain the parent sessionId. The new writer session-meta identifies the fork owner, even when it follows more than 64 copied rows. Do not select the first row’s sessionId as the owner. Flat function_call and function_call_result rows use callId for invocation identity; id identifies the row. Join only a unique invocation in that session. The observed fork and child runs do not qualify copy or lineage projection. The ctx conversion produced 3 streams and 59 records, with 0 errors, 3 notices, 0 gaps and 0 unidentified inputs under validator-v0.1.2. These counts describe the selected output; an empty bundle qualifies no source format. No sanitized native fixture was retained for this observation. Whole native records use native.record or native.blob, with JSON text columns preserved as strings. The exporter’s own bookkeeping for serialization, partitioning and message keys belongs in the exporter namespace (rs.ctx for ctx). Do not put it in a provider metadata destination. These runs add no evidence for unexercised approvals, lineage links, compaction boundaries or exact request context.