Skip to content

Include spec version in tauri charts settings#2177

Closed
findolor wants to merge 1 commit intomainfrom
codex/update-spec-version-logic-for-multiple-yaml-documents-myn2ud
Closed

Include spec version in tauri charts settings#2177
findolor wants to merge 1 commit intomainfrom
codex/update-spec-version-logic-for-multiple-yaml-documents-myn2ud

Conversation

@findolor
Copy link
Copy Markdown
Collaborator

@findolor findolor commented Oct 7, 2025

Summary

  • add the current spec version header to the tauri charts command settings helper so supplemental configuration passes multi-document validation

Testing

  • cargo fmt
  • cargo test -p tauri-app commands::charts::tests::test_make_charts -- --nocapture (fails: network 403 fetching git dependency)

https://chatgpt.com/codex/tasks/task_e_68ca61891f988333aadbb97ff221e424

Summary by CodeRabbit

  • New Features
    • YAML outputs (settings, charts, dotrain) now include a top-level spec version.
    • Multi-document YAML is supported for extracting the spec version across configs.
  • Bug Fixes
    • Improved validation: detects missing or mismatched versions across documents with clearer errors.
  • Tests
    • Updated fixtures to include version fields and added scenarios for multi-document parsing, consistency, and missing/mismatched versions.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Oct 7, 2025

Walkthrough

Introduces a spec version field into generated YAML across CLI, Tauri, and common code; updates tests accordingly. Refactors YAML parsing to accept multiple documents and enforces consistent version across them. Adjusts trait and impl signatures to use multi-document inputs and propagates spec_version where needed.

Changes

Cohort / File(s) Summary
Multi-document YAML parsing API
crates/settings/src/yaml/mod.rs, crates/settings/src/spec_version.rs, crates/settings/src/sentry.rs
Changes YamlParsableString::parse_from_yaml to accept Vec<Arc<RwLock<StrictYaml>>>. Updates SpecVersion parsing to iterate documents, require consistent version, handle missing/mismatch errors, and improve locking error paths. Adjusts Sentry impl signature (behavior unchanged).
Orderbook YAML spec version retrieval
crates/settings/src/yaml/orderbook.rs
get_spec_version now delegates to SpecVersion::parse_from_yaml(self.documents.clone()), removing single-document access.
YAML version field injection
crates/common/src/dotrain_order.rs, tauri-app/src-tauri/src/commands/charts.rs
Prepends version: {spec_version} to generated YAML, passing SpecVersion::current() into format calls to embed current spec version.
CLI adjustments
crates/cli/src/commands/words.rs
Adds top-level version: {spec_version} to settings output in tests and passes SpecVersion::current() into server.url("/rpc", ...) calls. Formatting updates only.
Test fixture update
packages/orderbook/test/common/test.test.ts
Adds version: 3 line to YAML config string used in tests.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  participant Caller
  participant SpecVersion
  participant Docs as YAML Documents[*]

  Caller->>SpecVersion: parse_from_yaml(documents: Vec<Doc>)
  alt documents empty
    SpecVersion-->>Caller: Err(Field Missing "version" at root)
  else documents provided
    loop For each document i
      SpecVersion->>Docs: read & lock document[i]
      alt lock/read error
        SpecVersion-->>Caller: Err(ReadLockError)
      else has version field?
        alt first found
          Note right of SpecVersion: store parsed_version and location
        else subsequent found
          alt matches stored version
            Note right of SpecVersion: continue
          else mismatch
            SpecVersion-->>Caller: Err(Field InvalidValue "version" at doc i)
          end
        end
      end
    end
    alt parsed_version set
      SpecVersion-->>Caller: Ok(version)
    else no version found
      SpecVersion-->>Caller: Err(Field Missing "version" at root)
    end
  end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

Suggested labels

Tauri, rust, test

Suggested reviewers

  • 0xgleb
  • hardyjosh

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 53.33% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title Check ✅ Passed The title is concise and clearly describes the addition of the spec version header to the Tauri charts settings helper as stated in the PR objectives, accurately reflecting the primary change without including extraneous details.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch codex/update-spec-version-logic-for-multiple-yaml-documents-myn2ud

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between b1cef0d and 467fb5e.

📒 Files selected for processing (8)
  • crates/cli/src/commands/words.rs (4 hunks)
  • crates/common/src/dotrain_order.rs (2 hunks)
  • crates/settings/src/sentry.rs (1 hunks)
  • crates/settings/src/spec_version.rs (4 hunks)
  • crates/settings/src/yaml/mod.rs (1 hunks)
  • crates/settings/src/yaml/orderbook.rs (1 hunks)
  • packages/orderbook/test/common/test.test.ts (1 hunks)
  • tauri-app/src-tauri/src/commands/charts.rs (2 hunks)
🧰 Additional context used
📓 Path-based instructions (8)
crates/*/{src,tests,benches,examples}/**/*.rs

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

Rust code must pass clippy with all warnings denied (cargo clippy --workspace --all-targets --all-features -D warnings)

Files:

  • crates/settings/src/yaml/mod.rs
  • crates/settings/src/sentry.rs
  • crates/cli/src/commands/words.rs
  • crates/settings/src/spec_version.rs
  • crates/common/src/dotrain_order.rs
  • crates/settings/src/yaml/orderbook.rs
crates/**/*.rs

📄 CodeRabbit inference engine (AGENTS.md)

Rust code lives in the workspace under crates/* (e.g., cli, common, bindings, js_api, quote, subgraph, settings, math, integration_tests)

Files:

  • crates/settings/src/yaml/mod.rs
  • crates/settings/src/sentry.rs
  • crates/cli/src/commands/words.rs
  • crates/settings/src/spec_version.rs
  • crates/common/src/dotrain_order.rs
  • crates/settings/src/yaml/orderbook.rs
**/*.rs

📄 CodeRabbit inference engine (AGENTS.md)

**/*.rs: Format Rust with nix develop -c cargo fmt --all
Lint Rust with nix develop -c rainix-rs-static (preconfigured flags)
Use snake_case for Rust crates/modules and PascalCase for types

Files:

  • crates/settings/src/yaml/mod.rs
  • crates/settings/src/sentry.rs
  • tauri-app/src-tauri/src/commands/charts.rs
  • crates/cli/src/commands/words.rs
  • crates/settings/src/spec_version.rs
  • crates/common/src/dotrain_order.rs
  • crates/settings/src/yaml/orderbook.rs
tauri-app/**

📄 CodeRabbit inference engine (AGENTS.md)

Desktop app code is in tauri-app (Rust + Svelte); src-tauri is not part of the Cargo workspace

Files:

  • tauri-app/src-tauri/src/commands/charts.rs
packages/orderbook/**/*.{ts,tsx}

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

Orderbook TypeScript package must pass type/lint checks (npm run check -w @rainlanguage/orderbook)

Files:

  • packages/orderbook/test/common/test.test.ts
packages/orderbook/**/*.{test,spec}.{ts,tsx}

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

Orderbook tests must pass (npm run test -w @rainlanguage/orderbook)

Files:

  • packages/orderbook/test/common/test.test.ts
packages/**

📄 CodeRabbit inference engine (AGENTS.md)

JavaScript/Svelte projects live under packages/* (webapp, ui-components, orderbook)

Files:

  • packages/orderbook/test/common/test.test.ts
packages/**/*.{test,spec}.ts

📄 CodeRabbit inference engine (AGENTS.md)

Name TypeScript test files as *.test.ts or *.spec.ts (Vitest)

Files:

  • packages/orderbook/test/common/test.test.ts
🧠 Learnings (1)
📚 Learning: 2025-03-31T14:36:11.049Z
Learnt from: findolor
PR: rainlanguage/rain.orderbook#1474
File: crates/js_api/src/yaml/mod.rs:37-44
Timestamp: 2025-03-31T14:36:11.049Z
Learning: The OrderbookYaml implementation in crates/js_api/src/yaml/mod.rs intentionally parses YAML on demand without caching results. This is a deliberate design choice by the author to process YAML only when needed rather than optimizing for repeated calls.

Applied to files:

  • crates/settings/src/yaml/orderbook.rs
🧬 Code graph analysis (7)
crates/settings/src/yaml/mod.rs (2)
crates/settings/src/sentry.rs (1)
  • parse_from_yaml (9-11)
crates/settings/src/spec_version.rs (1)
  • parse_from_yaml (21-62)
crates/settings/src/sentry.rs (2)
crates/settings/src/spec_version.rs (1)
  • parse_from_yaml (21-62)
crates/settings/src/yaml/mod.rs (3)
  • parse_from_yaml (69-78)
  • parse_from_yaml (86-86)
  • parse_from_yaml (94-97)
tauri-app/src-tauri/src/commands/charts.rs (1)
crates/settings/src/spec_version.rs (1)
  • current (11-13)
crates/cli/src/commands/words.rs (1)
crates/settings/src/spec_version.rs (1)
  • current (11-13)
crates/settings/src/spec_version.rs (2)
crates/settings/src/yaml/mod.rs (5)
  • require_string (369-404)
  • parse_from_yaml (69-78)
  • parse_from_yaml (86-86)
  • parse_from_yaml (94-97)
  • get_document (490-493)
crates/settings/src/sentry.rs (1)
  • parse_from_yaml (9-11)
crates/common/src/dotrain_order.rs (1)
crates/settings/src/spec_version.rs (1)
  • current (11-13)
crates/settings/src/yaml/orderbook.rs (2)
crates/settings/src/spec_version.rs (1)
  • parse_from_yaml (21-62)
crates/settings/src/yaml/mod.rs (3)
  • parse_from_yaml (69-78)
  • parse_from_yaml (86-86)
  • parse_from_yaml (94-97)
🔇 Additional comments (1)
crates/settings/src/spec_version.rs (1)

21-56: Great cross-document validation enforcement.
The loop surfaces missing or mismatched versions with precise locations, which keeps multi-document configs easy to diagnose.


Comment @coderabbitai help to get the list of available commands and usage tips.

@findolor findolor closed this Oct 7, 2025
@findolor findolor deleted the codex/update-spec-version-logic-for-multiple-yaml-documents-myn2ud branch October 7, 2025 10:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant