Skip to content

Commit 1b0c31b

Browse files
committed
refactor: remove schema_version from AI agent config data
The schema version is now conveyed by the evidence envelope's schema URL field, making the redundant schema_version field in the data payload unnecessary. Signed-off-by: Jose I. Paris <jiparis@chainloop.dev>
1 parent 0e1c114 commit 1b0c31b

7 files changed

Lines changed: 26 additions & 45 deletions

File tree

internal/aiagentconfig/aiagentconfig.go

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -60,12 +60,11 @@ type ConfigFile struct {
6060

6161
// Data is the AI agent configuration payload
6262
type Data struct {
63-
SchemaVersion string `json:"schema_version"`
64-
Agent Agent `json:"agent"`
65-
ConfigHash string `json:"config_hash"`
66-
CapturedAt string `json:"captured_at"`
67-
GitContext *GitContext `json:"git_context,omitempty"`
68-
ConfigFiles []ConfigFile `json:"config_files"`
63+
Agent Agent `json:"agent"`
64+
ConfigHash string `json:"config_hash"`
65+
CapturedAt string `json:"captured_at"`
66+
GitContext *GitContext `json:"git_context,omitempty"`
67+
ConfigFiles []ConfigFile `json:"config_files"`
6968
// Future fields for richer analysis
7069
Permissions any `json:"permissions,omitempty"`
7170
MCPServers any `json:"mcp_servers,omitempty"`

internal/aiagentconfig/builder.go

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,6 @@ import (
2525
"sort"
2626
"strings"
2727
"time"
28-
29-
"github.com/chainloop-dev/chainloop/internal/schemavalidators"
3028
)
3129

3230
// Build reads discovered files and constructs the AI agent config payload.
@@ -82,12 +80,11 @@ func Build(basePath string, discovered []DiscoveredFile, agentName string, gitCt
8280
}
8381

8482
data := Data{
85-
SchemaVersion: string(schemavalidators.AIAgentConfigVersion0_1),
86-
Agent: Agent{Name: agentName},
87-
ConfigHash: computeCombinedHash(hashes),
88-
CapturedAt: time.Now().UTC().Format(time.RFC3339),
89-
GitContext: gitCtx,
90-
ConfigFiles: configFiles,
83+
Agent: Agent{Name: agentName},
84+
ConfigHash: computeCombinedHash(hashes),
85+
CapturedAt: time.Now().UTC().Format(time.RFC3339),
86+
GitContext: gitCtx,
87+
ConfigFiles: configFiles,
9188
}
9289

9390
return &data, nil

internal/aiagentconfig/builder_test.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@ func TestBuild(t *testing.T) {
5353
}, "claude", gitCtx)
5454
require.NoError(t, err)
5555

56-
assert.Equal(t, "0.1", data.SchemaVersion)
5756
assert.Equal(t, "claude", data.Agent.Name)
5857
assert.NotEmpty(t, data.CapturedAt)
5958
assert.NotEmpty(t, data.ConfigHash)
@@ -136,7 +135,6 @@ func TestBuildJSONFormat(t *testing.T) {
136135
var raw map[string]any
137136
require.NoError(t, json.Unmarshal(jsonData, &raw))
138137

139-
assert.NotNil(t, raw["schema_version"])
140138
assert.NotNil(t, raw["agent"])
141139
assert.NotNil(t, raw["config_hash"])
142140
assert.NotNil(t, raw["captured_at"])

internal/schemavalidators/internal_schemas/aiagentconfig/ai-agent-config-0.1.schema.json

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,12 @@
55
"title": "AI Agent Configuration",
66
"description": "Schema for AI agent configuration data collected during attestation",
77
"required": [
8-
"schema_version",
98
"agent",
109
"config_hash",
1110
"captured_at",
1211
"config_files"
1312
],
1413
"properties": {
15-
"schema_version": {
16-
"type": "string",
17-
"description": "Schema version identifier"
18-
},
1914
"agent": {
2015
"type": "object",
2116
"description": "AI agent provider information",

pkg/attestation/crafter/materials/chainloop_ai_agent_config_test.go

Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,9 @@ func TestChainloopAIAgentConfigCrafter_Validation(t *testing.T) {
6565
{
6666
name: "valid full config",
6767
data: &aiagentconfig.Data{
68-
SchemaVersion: string(schemavalidators.AIAgentConfigVersion0_1),
69-
Agent: aiagentconfig.Agent{Name: "claude", Version: "4.0"},
70-
ConfigHash: "abc123",
71-
CapturedAt: "2026-03-13T10:00:00Z",
68+
Agent: aiagentconfig.Agent{Name: "claude", Version: "4.0"},
69+
ConfigHash: "abc123",
70+
CapturedAt: "2026-03-13T10:00:00Z",
7271
GitContext: &aiagentconfig.GitContext{
7372
Repository: "https://github.com/org/repo",
7473
Branch: "main",
@@ -89,10 +88,9 @@ func TestChainloopAIAgentConfigCrafter_Validation(t *testing.T) {
8988
{
9089
name: "valid minimal config",
9190
data: &aiagentconfig.Data{
92-
SchemaVersion: string(schemavalidators.AIAgentConfigVersion0_1),
93-
Agent: aiagentconfig.Agent{Name: "claude"},
94-
ConfigHash: "abc123",
95-
CapturedAt: "2026-03-13T10:00:00Z",
91+
Agent: aiagentconfig.Agent{Name: "claude"},
92+
ConfigHash: "abc123",
93+
CapturedAt: "2026-03-13T10:00:00Z",
9694
ConfigFiles: []aiagentconfig.ConfigFile{
9795
{
9896
Path: "CLAUDE.md",
@@ -108,10 +106,9 @@ func TestChainloopAIAgentConfigCrafter_Validation(t *testing.T) {
108106
{
109107
name: "valid cursor config",
110108
data: &aiagentconfig.Data{
111-
SchemaVersion: string(schemavalidators.AIAgentConfigVersion0_1),
112-
Agent: aiagentconfig.Agent{Name: "cursor"},
113-
ConfigHash: "def456",
114-
CapturedAt: "2026-03-13T10:00:00Z",
109+
Agent: aiagentconfig.Agent{Name: "cursor"},
110+
ConfigHash: "def456",
111+
CapturedAt: "2026-03-13T10:00:00Z",
115112
ConfigFiles: []aiagentconfig.ConfigFile{
116113
{
117114
Path: ".cursor/rules/coding.md",
@@ -127,10 +124,9 @@ func TestChainloopAIAgentConfigCrafter_Validation(t *testing.T) {
127124
{
128125
name: "valid cursor with multiple file types",
129126
data: &aiagentconfig.Data{
130-
SchemaVersion: string(schemavalidators.AIAgentConfigVersion0_1),
131-
Agent: aiagentconfig.Agent{Name: "cursor"},
132-
ConfigHash: "ghi789",
133-
CapturedAt: "2026-03-13T10:00:00Z",
127+
Agent: aiagentconfig.Agent{Name: "cursor"},
128+
ConfigHash: "ghi789",
129+
CapturedAt: "2026-03-13T10:00:00Z",
134130
ConfigFiles: []aiagentconfig.ConfigFile{
135131
{
136132
Path: ".cursor/rules/react.mdc",
@@ -165,11 +161,10 @@ func TestChainloopAIAgentConfigCrafter_Validation(t *testing.T) {
165161
{
166162
name: "empty config files",
167163
data: &aiagentconfig.Data{
168-
SchemaVersion: string(schemavalidators.AIAgentConfigVersion0_1),
169-
Agent: aiagentconfig.Agent{Name: "claude"},
170-
ConfigHash: "abc123",
171-
CapturedAt: "2026-03-13T10:00:00Z",
172-
ConfigFiles: []aiagentconfig.ConfigFile{},
164+
Agent: aiagentconfig.Agent{Name: "claude"},
165+
ConfigHash: "abc123",
166+
CapturedAt: "2026-03-13T10:00:00Z",
167+
ConfigFiles: []aiagentconfig.ConfigFile{},
173168
},
174169
wantErr: false,
175170
},
@@ -256,7 +251,6 @@ func TestChainloopAIAgentConfigCrafter_RejectsExtraFields(t *testing.T) {
256251
"chainloop.material.evidence.id": "CHAINLOOP_AI_AGENT_CONFIG",
257252
"schema": "https://schemas.chainloop.dev/aiagentconfig/0.1/ai-agent-config.schema.json",
258253
"data": {
259-
"schema_version": "0.1",
260254
"agent": {"name": "claude"},
261255
"config_hash": "abc",
262256
"captured_at": "2026-03-13T10:00:00Z",

pkg/attestation/crafter/materials/testdata/ai-agent-config-claude.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
"chainloop.material.evidence.id": "CHAINLOOP_AI_AGENT_CONFIG",
33
"schema": "https://schemas.chainloop.dev/aiagentconfig/0.1/ai-agent-config.schema.json",
44
"data": {
5-
"schema_version": "0.1",
65
"agent": {"name": "claude"},
76
"config_hash": "abc123",
87
"captured_at": "2026-03-13T10:00:00Z",

pkg/attestation/crafter/materials/testdata/ai-agent-config-cursor.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
"chainloop.material.evidence.id": "CHAINLOOP_AI_AGENT_CONFIG",
33
"schema": "https://schemas.chainloop.dev/aiagentconfig/0.1/ai-agent-config.schema.json",
44
"data": {
5-
"schema_version": "0.1",
65
"agent": {"name": "cursor"},
76
"config_hash": "def456",
87
"captured_at": "2026-03-13T10:00:00Z",

0 commit comments

Comments
 (0)