forgecode
Identity
-
Names:
dev.forgecode; short aliasforgecode. -
Native format:
forgecode-sqlite, conversationcontext.messagessnapshots. -
Session ID:
conversations.conversation_id. The supplied source evidence does not establish a namespace; uniqueness across independent stores needs qualification before colliding records are merged. - Notes: Native reasoning types establish full/summary/encrypted visibility and signatures. Text/AI/Image/Empty outputs retain their native values; URL/data-URL images are not fetched. Attached assistant usage is per response and supports a derived inference. Actual counters normalize; Approx counts stay metadata. USD is recorded, but cost source/billing remain unknown. Current tools, metrics and workspace ID are tail state, not causal file events.
Position basis
Use only positions established by the stated format and mapping evidence. Current-state rows without transcript positions go at the end, as the snapshot tail. A protocol commit boundary takes precedence over physical EOF; uncommitted bytes are not a gap.
Destinations
forgecode: native facts without a standard field
Links
-
Entity keys and links: MessageEntry has no stable message ID, so use capture-scoped array positions. Native
call_idstays verbatim and joins results only when unique. Both legacy wrappedmessageand flattened text/tool/image entries follow native array order. -
Lineage: ToolOutput
AI.conversation_idis retained evidence, not a spawning claim. No qualified parent, child, copy or root rule.
Usage
Select one report per native accounting identity only when this entry establishes that identity. Keep unjoinable or overlapping reports as native evidence. Declare incomplete semantic coverage. 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["dev.forgecode/unassigned"] with the common shape. Selection may retain these facts with any session subset, including an empty subset, but must not imply session ownership. 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: source-verified at ForgeCode commit6ed5d37b6b45a2b6220877fd9aec5ba4c4b7f3c0 (forge_domain context/message/reasoning/tool-result types). Existing SQLite fixture has no producer receipt; current/legacy semantic tests are authored. No release version is qualified.
Evidence applies only to the named formats and explicit mappings above. A real capture covers only exercised behavior. A no-model writer probe covers persistence, 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.14.0: ForgeCode 2.14.0 retained edit, review and child sessions. Its compact command succeeded and resume worked, but the mutable store retained no projectable compaction boundary. Preserve the snapshot and declare the applicable loss. A successful command does not justify a compaction record.
The ctx conversion produced 3 streams and 74 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), not in a provider metadata destination. These runs add no evidence for unexercised approvals, lineage links, compaction boundaries or exact request context.