@@ -12,6 +12,7 @@ import (
1212
1313 "go.kenn.io/agentsview/internal/db"
1414 duckdbsync "go.kenn.io/agentsview/internal/duckdb"
15+ "go.kenn.io/agentsview/internal/export"
1516)
1617
1718type sessionSpec struct {
@@ -118,6 +119,12 @@ func main() {
118119 log .Fatalf ("creating recent-edits fixture: %v" , err )
119120 }
120121
122+ if err := createProjectReclassificationFixture (
123+ database , base .Add (120 * time .Hour ),
124+ ); err != nil {
125+ log .Fatalf ("creating project-reclassification fixture: %v" , err )
126+ }
127+
121128 fmt .Printf ("Fixture DB written to %s\n " , * out )
122129 if * duckDBOut != "" {
123130 if err := writeDuckDBMirror (database , * duckDBOut ); err != nil {
@@ -127,6 +134,80 @@ func main() {
127134 }
128135}
129136
137+ func createProjectReclassificationFixture (
138+ database * db.DB , start time.Time ,
139+ ) error {
140+ const (
141+ machine = "remote-example-host"
142+ project = "wrong_branch_label"
143+ worktreeRoot = "/srv/worktrees/github.com/example-org/sample-service/example-worktree"
144+ model = "claude-sonnet-4-20250514"
145+ )
146+ cwds := []struct {
147+ suffix string
148+ cwd string
149+ }{
150+ {suffix : "root" , cwd : worktreeRoot },
151+ {suffix : "nested" , cwd : worktreeRoot + "/cmd/server" },
152+ }
153+ ctx := context .Background ()
154+ for index , item := range cwds {
155+ sessionID := "test-session-project-reclassification-" + item .suffix
156+ startedAt := start .Add (time .Duration (index ) * time .Hour )
157+ endedAt := startedAt .Add (12 * time .Minute )
158+ firstMessage := "Inspect the sample service worktree."
159+ session := db.Session {
160+ ID : sessionID ,
161+ Project : project ,
162+ Machine : machine ,
163+ Agent : "claude" ,
164+ StartedAt : new (startedAt.Format (time.RFC3339Nano )),
165+ EndedAt : new (endedAt.Format (time.RFC3339Nano )),
166+ MessageCount : 2 ,
167+ UserMessageCount : 1 ,
168+ FirstMessage : new (firstMessage ),
169+ Cwd : item .cwd ,
170+ }
171+ if err := database .UpsertSession (session ); err != nil {
172+ return fmt .Errorf (
173+ "upserting project-reclassification session: %w" , err ,
174+ )
175+ }
176+ if err := database .InsertMessages (generateMessages (
177+ sessionID , session .MessageCount , startedAt , model ,
178+ )); err != nil {
179+ return fmt .Errorf (
180+ "inserting project-reclassification messages: %w" , err ,
181+ )
182+ }
183+ if err := database .UpsertProjectIdentityObservation (
184+ ctx ,
185+ export.ProjectIdentityObservation {
186+ SessionID : sessionID ,
187+ Project : project ,
188+ Machine : machine ,
189+ RootPath : worktreeRoot ,
190+ RepositoryPath : "/srv/worktrees/github.com/example-org/sample-service" ,
191+ WorktreeName : "example-worktree" ,
192+ WorktreeRootPath : worktreeRoot ,
193+ WorktreeRelationship : export .WorktreeLinked ,
194+ CheckoutState : export .CheckoutBranch ,
195+ GitBranch : "example-worktree" ,
196+ ObservedAt : startedAt ,
197+ },
198+ ); err != nil {
199+ return fmt .Errorf (
200+ "upserting project-reclassification identity: %w" , err ,
201+ )
202+ }
203+ fmt .Printf (
204+ " %s: %d messages (project reclassification)\n " ,
205+ sessionID , session .MessageCount ,
206+ )
207+ }
208+ return nil
209+ }
210+
130211func writeDuckDBMirror (database * db.DB , path string ) error {
131212 if err := os .Remove (path ); err != nil &&
132213 ! errors .Is (err , os .ErrNotExist ) {
0 commit comments