Summary
Follow-up cleanup items from the V2 event-schema gang grill that do not need to block the main schema issue.
Source discussion: https://discord.com/channels/1391832426048651334/1522263729318658181
Items
Step/tool settlement ordering
Background check found local tool settlements can publish after step.ended / step.failed, and callID can repeat across turns. Decide whether this is a bug.
Desired invariant to consider:
step.started
tool.called
tool.success | tool.failed
step.ended | step.failed
If enforcing this invariant, publish step settlement only after owned tool fibers settle/finalize.
Compaction checkpoint template headings
Current headings are generic:
## Goal
## Constraints & Preferences
## Progress
## Key Decisions
## Next Steps
## Critical Context
## Relevant Files
Rename to something more OpenCode continuation-checkpoint flavored before beta.
Compaction event payload
Accepted that compaction.ended can keep separate text and recent because they are real checkpoint components: rolling summary and serialized retained tail.
Still clean up projection-only messageID via derived projected IDs if that global direction lands.
Synthetic event shape
Keep synthetic broad/plugin-facing metadata:
session.synthetic { text, description?, metadata? }
This is a valid use of metadata, unlike provider continuation state.
Summary
Follow-up cleanup items from the V2 event-schema gang grill that do not need to block the main schema issue.
Source discussion: https://discord.com/channels/1391832426048651334/1522263729318658181
Items
Step/tool settlement ordering
Background check found local tool settlements can publish after
step.ended/step.failed, andcallIDcan repeat across turns. Decide whether this is a bug.Desired invariant to consider:
If enforcing this invariant, publish step settlement only after owned tool fibers settle/finalize.
Compaction checkpoint template headings
Current headings are generic:
Rename to something more OpenCode continuation-checkpoint flavored before beta.
Compaction event payload
Accepted that
compaction.endedcan keep separatetextandrecentbecause they are real checkpoint components: rolling summary and serialized retained tail.Still clean up projection-only
messageIDvia derived projected IDs if that global direction lands.Synthetic event shape
Keep synthetic broad/plugin-facing metadata:
This is a valid use of
metadata, unlike provider continuation state.