Skip to content

fix(compat): guard .meta.json parser against missing optional fields from older sessions#109

Merged
delexw merged 1 commit into
mainfrom
fix-issue-107
May 26, 2026
Merged

fix(compat): guard .meta.json parser against missing optional fields from older sessions#109
delexw merged 1 commit into
mainfrom
fix-issue-107

Conversation

@delexw
Copy link
Copy Markdown
Owner

@delexw delexw commented May 23, 2026

Summary

Fixes #107 — session-meta sidecar files (.meta.json) written by older Claude Code builds were missing the optional fields that newer builds add. Any strict typed parser would error on these older files.

Changes

src-tauri/src/parser/subagent.rs

  • Introduces SidecarMeta — a typed serde struct for .meta.json sidecar files. Every field carries #[serde(default)] or is Option<T>, so files written by older Claude Code builds (which omit new fields) continue to parse without error.
  • Replaces the ad-hoc serde_json::Value navigation in read_agent_type with a clean deserialisation into SidecarMeta.
  • Adds a doc-comment on SidecarMeta encoding the backwards-compatibility rule: new fields from meta files must always be optional to preserve backwards compatibility with sessions written by older Claude Code builds.

Regression tests (6 new)

Test What it verifies
sidecar_meta_minimal_json_parses_without_error Minimal file (only agentType) parses without error
sidecar_meta_empty_object_parses_without_error Empty {} does not panic
sidecar_meta_unknown_new_fields_are_ignored Future unknown fields are silently ignored
read_agent_type_returns_empty_for_missing_meta_file Missing file returns empty string gracefully
read_agent_type_returns_empty_for_empty_object Empty object returns empty string
read_agent_type_parses_known_field Known agentType field is read correctly
read_agent_type_tolerates_extra_fields_from_new_claude_code_version v2.1.149+ extra fields do not break parsing

Test results

  • Rust: 404 passed, 0 failed
  • Frontend: 349 passed, 0 failed
  • Clippy: 0 warnings
  • TypeScript: 0 errors

…ta.json parsing

Replaces the ad-hoc serde_json::Value navigation in read_agent_type with a
typed SidecarMeta struct where every field carries #[serde(default)] or is
Option<T>.  This ensures that sessions written before a field was introduced
continue to parse without error as Claude Code adds new optional fields to
the sidecar schema.

Adds a doc-comment on SidecarMeta that documents the backwards-compatibility
rule so future contributors cannot accidentally add a bare required field.

Adds 6 regression tests (minimal file, empty object, unknown future fields,
missing file, and round-trip for known and future-extra-field files).

Fixes #107
@delexw delexw merged commit 3fc65ba into main May 26, 2026
1 check passed
@delexw delexw deleted the fix-issue-107 branch May 26, 2026 06:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Compat] Claude Code v2.1.149: Session-meta sidecar files now have optional fields — strict parsers may panic on older sessions

1 participant