Skip to content

Conversation

@rekhoff
Copy link
Contributor

@rekhoff rekhoff commented Jan 22, 2026

Description of Changes

Removes 1.5.0 DLLs from repo

API and ABI breaking changes

Unity will complain locally until you regenerate the DLLs

Expected complexity level and risk

1 - Trivial

Testing

  • Confirm CI pass
  • Local tests are passing

@rekhoff rekhoff self-assigned this Jan 22, 2026
@rekhoff rekhoff changed the base branch from master to rekhoff/cargo-ci-dlls January 22, 2026 18:36
@rekhoff rekhoff changed the base branch from rekhoff/cargo-ci-dlls to master January 22, 2026 19:21
@rekhoff rekhoff marked this pull request as ready for review January 22, 2026 20:40
@rekhoff rekhoff requested review from bfops and jdetter January 22, 2026 20:40
@rekhoff
Copy link
Contributor Author

rekhoff commented Jan 23, 2026

/update-llm-benchmark

@clockwork-labs-bot
Copy link
Collaborator

LLM Benchmark Results (ci-quickfix)

Language Mode Category Tests Passed Task Pass %
Rust rustdoc_json basics 23/27 78.5% ⬇️ -4.9%
Rust rustdoc_json schema 21/34 65.3%
Rust rustdoc_json total 44/61 72.5% ⬇️ -2.7%
Rust docs basics 4/24 9.0% ⬇️ -2.1%
Rust docs schema 8/34 20.5% ⬆️ +5.0%
Rust docs total 12/58 14.2% ⬆️ +1.1%
C# docs basics 23/27 91.7% ⬇️ -8.3%
C# docs schema 25/34 73.7% ⬆️ +10.0%
C# docs total 48/61 83.5%

Compared against master branch baseline

Generated at: 2026-01-23T06:31:32.356Z

Failure Analysis (click to expand)

Benchmark Failure Analysis

Generated from: /__w/SpacetimeDB/SpacetimeDB/tools/xtask-llm-benchmark/../../docs/llms/docs-benchmark-details.json

Summary

  • Total failures analyzed: 35

Analysis of SpacetimeDB Benchmark Failures

Rust / rustdoc_json Failures

Compile/Publish Errors

General Summary

Most compile errors stem from mismatches in API usage and missing expected types or attributes. The errors are largely due to differences in function signatures, missing pub modifiers, and incorrect initialization of scheduled timers.


1. t_002_scheduled_table and t_017_scheduled_columns

  • The generated code:

    use spacetimedb::{table, reducer, ReducerContext, Table, ScheduleAt};
    
    #[table(name = tick_timer, scheduled(reducer = tick, column = scheduled_at))]
    pub struct TickTimer {
        #[primary_key]
        #[auto_inc]
        scheduled_id: u64,
        scheduled_at: ScheduleAt,
    }
    
    #[reducer(init)]
    pub fn init(ctx: &ReducerContext) {
        if ctx.db.tick_timer().count() == 0 {
            ctx.db.tick_timer().insert(TickTimer {
                scheduled_id: 0,
                scheduled_at: ScheduleAt::repeat(core::time::Duration::from_micros(50_000)),
            });
        }
    }
    
    #[reducer]
    pub fn tick(_ctx: &ReducerContext, _timer: TickTimer) {
    }
  • The golden example:

    use spacetimedb::{reducer, table, ReducerContext, ScheduleAt, Table};
    use std::time::Duration;
    
    #[table(name = tick_timer, scheduled(tick))]
    pub struct TickTimer {
        #[primary_key]
        #[auto_inc]
        pub scheduled_id: u64,
        pub scheduled_at: ScheduleAt,
    }
    
    #[reducer]
    pub fn tick(_ctx: &ReducerContext, _schedule: TickTimer) {
    }
    
    #[reducer(init)]
    pub fn init(ctx: &ReducerContext) {
        let every_50ms: ScheduleAt = Duration::from_millis(50).into();
        ctx.db.tick_timer().insert(TickTimer {
            scheduled_id: 0,
            scheduled_at: every_50ms,
        });
    }
  • The error: publish_error: spacetime publish failed (exit=1)

  • Explain the difference:

    1. Timing Initialization: The usage of ScheduleAt::repeat is incorrect. The expected implementation uses Duration.
    2. Access Modifiers: Missing pub in struct fields.
  • Root cause: The documentation for the scheduling feature might not clearly articulate the expected initialization of ScheduleAt.

  • Recommendation:

    • Update the documentation to specify how to handle scheduling in structs.
    • Ensure examples include required access modifiers (e.g., pub) for struct fields.

2. t_019_many_to_many

  • The generated code:

    use spacetimedb::{table, reducer, ReducerContext, Table};
    
    #[table(name = user)]
    pub struct User {
        #[primary_key]
        pub user_id: i32,
        pub name: String,
    }
    
    #[table(
        name = group,
        index(name = by_user, btree(columns = [user_id])),
        index(name = by_group, btree(columns = [group_id]))
    )]
    pub struct Membership {
        #[primary_key]
        pub id: i32,
        pub user_id: i32,
        pub group_id: i32,
    }
  • The golden example:

    use spacetimedb::{reducer, table, ReducerContext, Table};
    
    #[table(name = user)]
    pub struct User {
        #[primary_key]
        pub user_id: i32,
        pub name: String,
    }
    
    #[table(
        name = group,
        index(name = by_user, btree(columns = [user_id])),
        index(name = by_group, btree(columns = [group_id]))
    )]
    pub struct Membership {
        #[primary_key]
        pub id: i32,
        pub user_id: i32,
        pub group_id: i32,
    }
    
    #[reducer]
    pub fn seed(ctx: &ReducerContext) {
        // Insert Users and Memberships code
    }
  • The error: publish_error: spacetime publish failed (exit=1)

  • Explain the difference:

    • The implementation lacks the seed reducer function which is crucial for populating the database.
  • Root cause: The documentation needs to clarify the importance and requirements of reducer functions in the context of relational tables.

  • Recommendation:

    • Add a section to the documentation about required reducer functions for establishing relationships in tables.

Other Failures

3. t_003_struct_in_table

  • The generated code:

    use spacetimedb::{table, reducer, ReducerContext, Table, SpacetimeType};
    
    #[derive(SpacetimeType)]
    pub struct Position {
        x: i32,
        y: i32,
    }
    
    #[table(name = entity)]
    pub struct Entity {
        #[primary_key]
        id: i32,
        pos: Position,
    }
  • The golden example:

    use spacetimedb::{table, SpacetimeType};
    
    #[derive(SpacetimeType, Clone, Debug)]
    pub struct Position {
        pub x: i32,
        pub y: i32,
    }
    
    #[table(name = entity)]
    pub struct Entity {
        #[primary_key]
        pub id: i32,
        pub pos: Position,
    }
  • The error: schema_parity: reducers differ - expected [], got ["add_entity()"]

  • Explain the difference:

    • pub modifiers are missing in the Position struct and field accessing in Entity.
  • Root cause: The documentation does not emphasize that all fields in database structures should be public.

  • Recommendation:

    • Update the documentation to include a section about field visibility in structs used in SpacetimeDB.

4. t_007_crud

  • The generated code:

    use spacetimedb::{table, reducer, ReducerContext, Table};
    
    #[table(name = user)]
    pub struct User {
        #[primary_key]
        id: i32,
        name: String,
        age: i32,
        active: bool,
    }
    
    #[reducer]
    pub fn crud(ctx: &ReducerContext) {
        let user = ctx.db.user();
    
        let _ = user.insert(User { id: 1, name: "Alice".to_string(), age: 30, active: true });
        let _ = user.insert(User { id: 2, name: "Bob".to_string(), age: 22, active: false });
        
        user.id().delete(&2);
    }
  • The golden example:

    use spacetimedb::{reducer, table, ReducerContext, Table};
    
    #[table(name = user)]
    pub struct User {
        #[primary_key]
        pub id: i32,
        pub name: String,
        pub age: i32,
        pub active: bool,
    }
    
    #[reducer]
    pub fn crud(ctx: &ReducerContext) {
        ctx.db.user().insert(User { id: 1, name: "Alice".into(), age: 30, active: true });
        ctx.db.user().insert(User { id: 2, name: "Bob".into(), age: 22, active: false });
        ctx.db.user().id().delete(2);
    }
  • The error: Error: no such table: user...

  • Explain the difference:

    • Missing pub keywords for struct fields and not using into() for String conversions.
  • Root cause: The failure to document the importance of making fields public in tables could lead to these issues.

  • Recommendation:

    • Add clear guidelines on the necessity for fields to be publicly accessible in table struct definitions.

5. t_020_ecs

  • The generated code:

    use spacetimedb::{table, reducer, ReducerContext, Table};
    
    #[table(name = entity)]
    pub struct Entity {
        #[primary_key]
        id: i32,
    }
    
    #[table(name = position)]
    pub struct Position {
        #[primary_key]
        entity_id: i32,
        x: i32,
        y: i32,
    }
  • The golden example:

    use spacetimedb::{reducer, table, ReducerContext, Table};
    
    #[table(name = entity)]
    pub struct Entity {
        #[primary_key]
        pub id: i32,
    }
    
    #[table(name = position)]
    pub struct Position {
        #[primary_key]
        pub entity_id: i32,
        pub x: i32,
        pub y: i32,
    }
    
    #[reducer]
    pub fn seed(ctx: &ReducerContext) {
        // Insert logic
    }
  • The error: Error: no such table: positions...

  • Explain the difference:

    • Missing the pub keyword for visibility in struct fields.
  • Root cause: Lack of clear documentation on struct field visibility causing issues with database access.

  • Recommendation:

    • Ensure documentation emphasizes the need for all table struct fields to use pub.

Rust / docs Failures

Timeout Issues

General Recommendation

Timeout issues are typically indicative of unhandled conditions or long-running operations. Documentation should provide insights or examples about optimizing queries and timing-related operations.


C# / docs Failures

1. t_007_crud

  • The generated code:

    using SpacetimeDB;
    
    public static partial class Module
    {
        [SpacetimeDB.Table(Name = "User", Public = true)]
        public partial struct User
        {
            [SpacetimeDB.PrimaryKey]
            public int Id;
            public string Name;
            public int Age;
            public bool Active;
        }
    
        [SpacetimeDB.Reducer]
        public static void Crud(ReducerContext ctx)
        {
            ctx.Db.User.Insert(new User { Id = 1, Name = "Alice", Age = 30, Active = true });
            ctx.Db.User.Insert(new User { Id = 2, Name = "Bob", Age = 22, Active = false });
            
            var u = ctx.Db.User.Id.Find(1);
            if (u is not null)
            {
                u.Name = "Alice2";
                u.Age = 31;
                u.Active = false;
                ctx.Db.User.Id.Update(u);
            }
            
            ctx.Db.User.Id.Delete(2);
        }
    }
  • The golden example:

    using SpacetimeDB;
    
    public static partial class Module
    {
        [Table(Name = "User")]
        public partial struct User
        {
            [PrimaryKey] public int Id;
            public string Name;
            public int Age;
            public bool Active;
        }
    
        [Reducer]
        public static void Crud(ReducerContext ctx)
        {
            ctx.Db.User.Insert(new User { Id = 1, Name = "Alice", Age = 30, Active = true });
            ctx.Db.User.Insert(new User { Id = 2, Name = "Bob", Age = 22, Active = false });
            ctx.Db.User.Id.Update(new User { Id = 1, Name = "Alice2", Age = 31, Active = false });
            ctx.Db.User.Id.Delete(2);
        }
    }
  • The error: publish_error: spacetime build (csharp) failed (exit=1)

  • Explain the difference:

    • The struct User is initialized incorrectly with Public.
  • Root cause: The documentation might not clarify proper usage of access modifiers when defining partial structs.

  • Recommendation:

    • Ensure examples and documentation illustrate the correct usage of access modifiers in partial structs.

This structured analysis provides actionable insights to correct the issues highlighted in the SpacetimeDB benchmark failures. Addressing these recommendations can facilitate smoother integration and development using SpacetimeDB.

Co-authored-by: Zeke Foppa <196249+bfops@users.noreply.github.com>
Signed-off-by: Ryan <r.ekhoff@clockworklabs.io>
Copy link
Collaborator

@bfops bfops left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM if it's passing tests!

@bfops bfops added this pull request to the merge queue Jan 23, 2026
Merged via the queue into master with commit 0f0a867 Jan 23, 2026
44 of 45 checks passed
@rekhoff rekhoff deleted the rekhoff/remove-1.5.0-dlls branch January 23, 2026 22:03
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.

4 participants