feat(jsonl): add omitempty to reduce JSONL bloat (beads-399)
Add omitempty JSON tags to Issue struct fields (Description, Status, Priority, IssueType) and SetDefaults method to apply proper defaults when importing JSONL with omitted fields. This reduces JSONL file size for minimal issues like notifications by not exporting empty/default values. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -165,6 +165,7 @@ func autoImportIfNewer() {
|
||||
fmt.Fprintf(os.Stderr, "Auto-import skipped: parse error at line %d: %v\nSnippet: %s\n", lineNo, err, snippet)
|
||||
return
|
||||
}
|
||||
issue.SetDefaults() // Apply defaults for omitted fields (beads-399)
|
||||
|
||||
// Fix closed_at invariant: closed issues must have closed_at timestamp
|
||||
if issue.Status == types.StatusClosed && issue.ClosedAt == nil {
|
||||
@@ -662,6 +663,7 @@ func flushToJSONLWithState(state flushState) {
|
||||
}
|
||||
var issue types.Issue
|
||||
if err := json.Unmarshal([]byte(line), &issue); err == nil {
|
||||
issue.SetDefaults() // Apply defaults for omitted fields (beads-399)
|
||||
issueMap[issue.ID] = &issue
|
||||
} else {
|
||||
// Warn about malformed JSONL lines
|
||||
|
||||
@@ -294,6 +294,7 @@ func importFromGit(ctx context.Context, dbFilePath string, store storage.Storage
|
||||
if err := json.Unmarshal([]byte(line), &issue); err != nil {
|
||||
return fmt.Errorf("failed to parse issue: %w", err)
|
||||
}
|
||||
issue.SetDefaults() // Apply defaults for omitted fields (beads-399)
|
||||
issues = append(issues, &issue)
|
||||
}
|
||||
|
||||
|
||||
@@ -953,6 +953,7 @@ func pruneExpiredTombstones(customTTL time.Duration) (*TombstonePruneResult, err
|
||||
// Skip corrupt lines
|
||||
continue
|
||||
}
|
||||
issue.SetDefaults() // Apply defaults for omitted fields (beads-399)
|
||||
allIssues = append(allIssues, &issue)
|
||||
}
|
||||
if err := file.Close(); err != nil {
|
||||
@@ -1049,6 +1050,7 @@ func previewPruneTombstones(customTTL time.Duration) (*TombstonePruneResult, err
|
||||
// Skip corrupt lines
|
||||
continue
|
||||
}
|
||||
issue.SetDefaults() // Apply defaults for omitted fields (beads-399)
|
||||
allIssues = append(allIssues, &issue)
|
||||
}
|
||||
|
||||
|
||||
@@ -183,6 +183,7 @@ func importToJSONLWithStore(ctx context.Context, store storage.Storage, jsonlPat
|
||||
fmt.Fprintf(os.Stderr, "Warning: failed to parse JSONL line %d: %v\n", lineNum, err)
|
||||
continue
|
||||
}
|
||||
issue.SetDefaults() // Apply defaults for omitted fields (beads-399)
|
||||
|
||||
issues = append(issues, &issue)
|
||||
}
|
||||
|
||||
@@ -205,6 +205,7 @@ NOTE: Import requires direct database access and does not work with daemon mode.
|
||||
fmt.Fprintf(os.Stderr, "Error parsing line %d: %v\n", lineNum, err)
|
||||
os.Exit(1)
|
||||
}
|
||||
issue.SetDefaults() // Apply defaults for omitted fields (beads-399)
|
||||
|
||||
allIssues = append(allIssues, &issue)
|
||||
}
|
||||
|
||||
@@ -103,6 +103,7 @@ func loadIssuesFromJSONL(path string) ([]*types.Issue, error) {
|
||||
if err := json.Unmarshal([]byte(line), &issue); err != nil {
|
||||
return nil, fmt.Errorf("line %d: %w", lineNum, err)
|
||||
}
|
||||
issue.SetDefaults() // Apply defaults for omitted fields (beads-399)
|
||||
|
||||
issues = append(issues, &issue)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user