[agent/codex:gpt-5.4-mini] Read docs/RFC-STORE.md fully. Find features described in the... #149
4 changed files with 74 additions and 3 deletions
26
journal.go
26
journal.go
|
|
@ -89,8 +89,8 @@ func (storeInstance *Store) CommitToJournal(measurement string, fields map[strin
|
|||
Value: map[string]any{
|
||||
"bucket": storeInstance.journalBucket(),
|
||||
"measurement": measurement,
|
||||
"fields": fields,
|
||||
"tags": tags,
|
||||
"fields": cloneAnyMap(fields),
|
||||
"tags": cloneStringMap(tags),
|
||||
"committed_at": committedAt,
|
||||
},
|
||||
OK: true,
|
||||
|
|
@ -429,3 +429,25 @@ func normaliseRowValue(value any) any {
|
|||
return typedValue
|
||||
}
|
||||
}
|
||||
|
||||
func cloneAnyMap(input map[string]any) map[string]any {
|
||||
if input == nil {
|
||||
return map[string]any{}
|
||||
}
|
||||
cloned := make(map[string]any, len(input))
|
||||
for key, value := range input {
|
||||
cloned[key] = value
|
||||
}
|
||||
return cloned
|
||||
}
|
||||
|
||||
func cloneStringMap(input map[string]string) map[string]string {
|
||||
if input == nil {
|
||||
return map[string]string{}
|
||||
}
|
||||
cloned := make(map[string]string, len(input))
|
||||
for key, value := range input {
|
||||
cloned[key] = value
|
||||
}
|
||||
return cloned
|
||||
}
|
||||
|
|
|
|||
|
|
@ -35,6 +35,32 @@ func TestJournal_CommitToJournal_Good_WithQueryJournalSQL(t *testing.T) {
|
|||
assert.Equal(t, "session-b", tags["workspace"])
|
||||
}
|
||||
|
||||
func TestJournal_CommitToJournal_Good_ResultCopiesInputMaps(t *testing.T) {
|
||||
storeInstance, err := New(":memory:", WithJournal("http://127.0.0.1:8086", "core", "events"))
|
||||
require.NoError(t, err)
|
||||
defer storeInstance.Close()
|
||||
|
||||
fields := map[string]any{"like": 4}
|
||||
tags := map[string]string{"workspace": "session-a"}
|
||||
|
||||
result := storeInstance.CommitToJournal("session-a", fields, tags)
|
||||
require.True(t, result.OK, "journal commit failed: %v", result.Value)
|
||||
|
||||
fields["like"] = 99
|
||||
tags["workspace"] = "session-b"
|
||||
|
||||
value, ok := result.Value.(map[string]any)
|
||||
require.True(t, ok, "unexpected result type: %T", result.Value)
|
||||
|
||||
resultFields, ok := value["fields"].(map[string]any)
|
||||
require.True(t, ok, "unexpected fields type: %T", value["fields"])
|
||||
assert.Equal(t, 4, resultFields["like"])
|
||||
|
||||
resultTags, ok := value["tags"].(map[string]string)
|
||||
require.True(t, ok, "unexpected tags type: %T", value["tags"])
|
||||
assert.Equal(t, "session-a", resultTags["workspace"])
|
||||
}
|
||||
|
||||
func TestJournal_QueryJournal_Good_RawSQLWithCTE(t *testing.T) {
|
||||
storeInstance, err := New(":memory:", WithJournal("http://127.0.0.1:8086", "core", "events"))
|
||||
require.NoError(t, err)
|
||||
|
|
|
|||
|
|
@ -306,7 +306,7 @@ func (workspace *Workspace) Commit() core.Result {
|
|||
if err := workspace.closeAndRemoveFiles(); err != nil {
|
||||
return core.Result{Value: err, OK: false}
|
||||
}
|
||||
return core.Result{Value: fields, OK: true}
|
||||
return core.Result{Value: cloneAnyMap(fields), OK: true}
|
||||
}
|
||||
|
||||
// Usage example: `workspace.Discard()`
|
||||
|
|
|
|||
|
|
@ -125,6 +125,29 @@ func TestWorkspace_Commit_Good_JournalAndSummary(t *testing.T) {
|
|||
assert.Equal(t, "scroll-session", tags["workspace"])
|
||||
}
|
||||
|
||||
func TestWorkspace_Commit_Good_ResultCopiesAggregatedMap(t *testing.T) {
|
||||
useWorkspaceStateDirectory(t)
|
||||
|
||||
storeInstance, err := New(":memory:", WithJournal("http://127.0.0.1:8086", "core", "events"))
|
||||
require.NoError(t, err)
|
||||
defer storeInstance.Close()
|
||||
|
||||
workspace, err := storeInstance.NewWorkspace("scroll-session")
|
||||
require.NoError(t, err)
|
||||
|
||||
aggregateSource := map[string]any{"like": 1}
|
||||
require.NoError(t, workspace.Put("like", aggregateSource))
|
||||
|
||||
result := workspace.Commit()
|
||||
require.True(t, result.OK, "workspace commit failed: %v", result.Value)
|
||||
|
||||
aggregateSource["like"] = 99
|
||||
|
||||
value, ok := result.Value.(map[string]any)
|
||||
require.True(t, ok, "unexpected result type: %T", result.Value)
|
||||
assert.Equal(t, 1, value["like"])
|
||||
}
|
||||
|
||||
func TestWorkspace_Commit_Good_EmitsSummaryEvent(t *testing.T) {
|
||||
useWorkspaceStateDirectory(t)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue