@@ -47,7 +47,10 @@ func TestBuild(t *testing.T) {
4747 CommitSHA : "abc123" ,
4848 }
4949
50- data , err := Build (rootDir , []string {"CLAUDE.md" , ".claude/settings.json" }, "claude" , gitCtx )
50+ data , err := Build (rootDir , []DiscoveredFile {
51+ {Path : "CLAUDE.md" , Kind : ConfigFileKindInstruction },
52+ {Path : ".claude/settings.json" , Kind : ConfigFileKindConfiguration },
53+ }, "claude" , gitCtx )
5154 require .NoError (t , err )
5255
5356 assert .Equal (t , "0.1" , data .SchemaVersion )
@@ -65,13 +68,15 @@ func TestBuild(t *testing.T) {
6568
6669 cf1 := data .ConfigFiles [0 ]
6770 assert .Equal (t , "CLAUDE.md" , cf1 .Path )
71+ assert .Equal (t , ConfigFileKindInstruction , cf1 .Kind )
6872 assert .Equal (t , int64 (len (file1Content )), cf1 .Size )
6973 hash1 := sha256 .Sum256 (file1Content )
7074 assert .Equal (t , hex .EncodeToString (hash1 [:]), cf1 .SHA256 )
7175 assert .Equal (t , base64 .StdEncoding .EncodeToString (file1Content ), cf1 .Content )
7276
7377 cf2 := data .ConfigFiles [1 ]
7478 assert .Equal (t , ".claude/settings.json" , cf2 .Path )
79+ assert .Equal (t , ConfigFileKindConfiguration , cf2 .Kind )
7580 hash2 := sha256 .Sum256 (file2Content )
7681 assert .Equal (t , hex .EncodeToString (hash2 [:]), cf2 .SHA256 )
7782
@@ -91,19 +96,24 @@ func TestBuildWithCursorAgent(t *testing.T) {
9196 require .NoError (t , os .MkdirAll (filepath .Join (rootDir , ".cursor" , "rules" ), 0o755 ))
9297 require .NoError (t , os .WriteFile (filepath .Join (rootDir , ".cursor" , "rules" , "coding.md" ), []byte ("rules" ), 0o600 ))
9398
94- data , err := Build (rootDir , []string {".cursor/rules/coding.md" }, "cursor" , nil )
99+ data , err := Build (rootDir , []DiscoveredFile {
100+ {Path : ".cursor/rules/coding.md" , Kind : ConfigFileKindInstruction },
101+ }, "cursor" , nil )
95102 require .NoError (t , err )
96103
97104 assert .Equal (t , "cursor" , data .Agent .Name )
98105 require .Len (t , data .ConfigFiles , 1 )
99106 assert .Equal (t , ".cursor/rules/coding.md" , data .ConfigFiles [0 ].Path )
107+ assert .Equal (t , ConfigFileKindInstruction , data .ConfigFiles [0 ].Kind )
100108}
101109
102110func TestBuildWithoutGitContext (t * testing.T ) {
103111 rootDir := t .TempDir ()
104112 require .NoError (t , os .WriteFile (filepath .Join (rootDir , "CLAUDE.md" ), []byte ("content" ), 0o600 ))
105113
106- data , err := Build (rootDir , []string {"CLAUDE.md" }, "claude" , nil )
114+ data , err := Build (rootDir , []DiscoveredFile {
115+ {Path : "CLAUDE.md" , Kind : ConfigFileKindInstruction },
116+ }, "claude" , nil )
107117 require .NoError (t , err )
108118
109119 assert .Nil (t , data .GitContext )
@@ -114,7 +124,9 @@ func TestBuildJSONFormat(t *testing.T) {
114124 rootDir := t .TempDir ()
115125 require .NoError (t , os .WriteFile (filepath .Join (rootDir , "CLAUDE.md" ), []byte ("content" ), 0o600 ))
116126
117- data , err := Build (rootDir , []string {"CLAUDE.md" }, "claude" , nil )
127+ data , err := Build (rootDir , []DiscoveredFile {
128+ {Path : "CLAUDE.md" , Kind : ConfigFileKindInstruction },
129+ }, "claude" , nil )
118130 require .NoError (t , err )
119131
120132 // Verify it marshals to valid JSON with top-level fields (no envelope)
@@ -132,6 +144,12 @@ func TestBuildJSONFormat(t *testing.T) {
132144 // Ensure no envelope fields
133145 assert .Nil (t , raw ["chainloop.material.evidence.id" ])
134146 assert .Nil (t , raw ["data" ])
147+
148+ // Verify kind is present in config_files
149+ files := raw ["config_files" ].([]any )
150+ require .Len (t , files , 1 )
151+ file := files [0 ].(map [string ]any )
152+ assert .Equal (t , "instruction" , file ["kind" ])
135153}
136154
137155func TestBuildRejectsSymlinksEscapingRoot (t * testing.T ) {
@@ -142,7 +160,9 @@ func TestBuildRejectsSymlinksEscapingRoot(t *testing.T) {
142160 require .NoError (t , os .WriteFile (filepath .Join (outsideDir , "secret.txt" ), []byte ("secret" ), 0o600 ))
143161 require .NoError (t , os .Symlink (filepath .Join (outsideDir , "secret.txt" ), filepath .Join (rootDir , "CLAUDE.md" )))
144162
145- _ , err := Build (rootDir , []string {"CLAUDE.md" }, "claude" , nil )
163+ _ , err := Build (rootDir , []DiscoveredFile {
164+ {Path : "CLAUDE.md" , Kind : ConfigFileKindInstruction },
165+ }, "claude" , nil )
146166 require .Error (t , err )
147167 assert .Contains (t , err .Error (), "path escapes root directory via symlink" )
148168}
@@ -159,15 +179,17 @@ func TestBuildRejectsSymlinkedParentDir(t *testing.T) {
159179 // Symlink .claude -> outside directory
160180 require .NoError (t , os .Symlink (outsideClaude , filepath .Join (rootDir , ".claude" )))
161181
162- _ , err := Build (rootDir , []string {".claude/settings.json" }, "claude" , nil )
182+ _ , err := Build (rootDir , []DiscoveredFile {
183+ {Path : ".claude/settings.json" , Kind : ConfigFileKindConfiguration },
184+ }, "claude" , nil )
163185 require .Error (t , err )
164186 assert .Contains (t , err .Error (), "path escapes root directory via symlink" )
165187}
166188
167189func TestBuildEmptyFileList (t * testing.T ) {
168190 rootDir := t .TempDir ()
169191
170- data , err := Build (rootDir , []string {}, "claude" , nil )
192+ data , err := Build (rootDir , []DiscoveredFile {}, "claude" , nil )
171193 require .NoError (t , err )
172194 assert .Empty (t , data .ConfigFiles )
173195 assert .NotEmpty (t , data .ConfigHash )
@@ -186,7 +208,9 @@ func TestBuildAllowsRegularFilesInRoot(t *testing.T) {
186208 rootDir := t .TempDir ()
187209 require .NoError (t , os .WriteFile (filepath .Join (rootDir , "CLAUDE.md" ), []byte ("content" ), 0o600 ))
188210
189- data , err := Build (rootDir , []string {"CLAUDE.md" }, "claude" , nil )
211+ data , err := Build (rootDir , []DiscoveredFile {
212+ {Path : "CLAUDE.md" , Kind : ConfigFileKindInstruction },
213+ }, "claude" , nil )
190214 require .NoError (t , err )
191215 assert .Len (t , data .ConfigFiles , 1 )
192216}
0 commit comments