| 1 | package agent |
| 2 | |
| 3 | import ( |
| 4 | "testing" |
| 5 | |
| 6 | "reasonix/internal/provider" |
| 7 | ) |
| 8 | |
| 9 | func TestLegacyProjectionCannotCoverPinnedContextRevision(t *testing.T) { |
| 10 | canonical := []provider.Message{ |
| 11 | {Role: provider.RoleSystem, Content: "system"}, |
| 12 | {Role: provider.RoleUser, Origin: provider.MessageOriginHost, Content: "<pinned_context_revision>private pinned body</pinned_context_revision>"}, |
| 13 | {Role: provider.RoleUser, Content: "visible question"}, |
| 14 | } |
| 15 | legacy := CompactionState{ |
| 16 | SchemaVersion: compactionStateSchemaV3, |
| 17 | Projection: ContextProjection{ |
| 18 | Messages: []provider.Message{{Role: provider.RoleUser, Content: "legacy summary"}}, |
| 19 | CoveredCount: len(canonical), |
| 20 | CoveredPrefixHash: coveredPrefixHash(canonical, len(canonical)), |
| 21 | }, |
| 22 | } |
| 23 | if projectionContentValid(legacy, canonical) { |
| 24 | t.Fatal("legacy projection covering a pinned revision must be rebuilt") |
| 25 | } |
| 26 | |
| 27 | withoutRevision := []provider.Message{ |
| 28 | {Role: provider.RoleSystem, Content: "system"}, |
| 29 | {Role: provider.RoleUser, Content: "visible question"}, |
| 30 | } |
| 31 | legacy.Projection.CoveredCount = len(withoutRevision) |
| 32 | legacy.Projection.CoveredPrefixHash = coveredPrefixHash(withoutRevision, len(withoutRevision)) |
| 33 | if !projectionContentValid(legacy, withoutRevision) { |
| 34 | t.Fatal("legacy projection without pinned revisions should remain compatible") |
| 35 | } |
| 36 | } |
| 37 |