Proto commits in synnaxlabs/synnax

These commits are when the Protocol Buffers files have changed: (only the last 100 relevant commits are shown)

Commit:266469d
Author:Patrick Dotson

Merge branch 'rc' into sy-4331-move-most-channel-functionality-to-service-layer # Conflicts: # core/pkg/service/arc/arc_suite_test.go

Commit:1fc2437
Author:Emiliano Bonilla
Committer:GitHub

SY-4391: Migrate Arc Graph-Mode Editing to the Action-Based Collaborative Model (#2506)

Commit:5ccb217
Author:Emiliano Bonilla
Committer:GitHub

SY-4392: Implement the Arc Collaborative Text CRDT Core and Edit Transport (#2503)

Commit:cc7313e
Author:Emiliano Bonilla

checkpoint

Commit:d5f4391
Author:Emiliano Bonilla

improvements

Commit:7ada6ec
Author:Patrick Dotson

Merge branch 'rc' into sy-4331-move-most-channel-functionality-to-service-layer

Commit:656186f
Author:Emiliano Bonilla
Committer:GitHub

SY-4379: Migrate Schemas to Defaults and Single Optionality (#2505)

Commit:cfb26e4
Author:Emiliano Bonilla

checkpoint

Commit:40ee82a
Author:Emiliano Bonilla

cleanup

Commit:157b2d0
Author:Emiliano Bonilla

Merge branch 'sy-4391-migrate-arc-graph-mode-editing-to-the-action-based' into sy-4393-enable-live-collaborative-arc-text-editing-with-presence-and-durable # Conflicts: # x/cpp/crdt/json.gen.h # x/cpp/crdt/types.gen.h # x/go/crdt/codec.gen.go # x/go/crdt/pb/crdt.pb.go # x/go/crdt/pb/crdt.proto # x/py/x/crdt/types_gen.py

Commit:0bb1723
Author:Emiliano Bonilla

Merge branch 'sy-4392-implement-the-arc-collaborative-text-crdt-core-and-per-arc' into sy-4391-migrate-arc-graph-mode-editing-to-the-action-based

Commit:d651881
Author:Emiliano Bonilla

SY-4392: Make CRDT counter uint32 and emit py/cpp/pb crdt outputs The replicated-text character counter was uint64, which serializes to a JSON string in TypeScript (bigint) and fails to decode into a Go uint64 field on the collaborative-edit dispatch path. A per-replica, per-session character counter never approaches 2^32, so narrow it to uint32: it now serializes as a JSON number and round-trips cleanly across the wire. Also generate the crdt types for Python, C++, and protobuf (adding the @py output to spatial, which crdt imports, plus hand-written __init__.py for the new x.crdt and x.spatial packages), and carry over the Fugue snapshot/load core and its non-interleaving + round-trip property tests.

Commit:3461227
Author:Emiliano Bonilla

Merge remote-tracking branch 'origin/sy-4391-migrate-arc-graph-mode-editing-to-the-action-based' into sy-4393-enable-live-collaborative-arc-text-editing-with-presence-and-durable

Commit:37644f5
Author:Emiliano Bonilla

SY-4393: Durable server-authoritative collaborative Arc text editing - Fix the Fugue CRDT Snapshot bug (derive anchor side from child-list membership) in Go and TS; add non-interleaving and snapshot round-trip property tests, make the TS snapshot iterative. - Persist the CRDT document as the single source of truth: add text.Document, mark raw `@go marshal omit` (on the wire, derived from doc, not stored), emit crdt for C++ and protobuf, default doc to empty. - Materialize edits server-side through the existing Reduce/Dispatch path: fill the InsertChar/DeleteChar handlers, seed the document from raw on create, materialize raw at the compile sites and in the API retrieve, migrate existing arcs. - Remove the in-memory collab sidecar and the bespoke doc-snapshot bootstrap; clients bootstrap from arc.text.doc on a normal retrieve. - Drive the editor from precise Monaco change events (multi-region and surrogate-pair safe) instead of whole-value diffing, behind an echo guard.

Commit:0663c2d
Author:Emiliano Bonilla

Merge branch 'sy-4392-implement-the-arc-collaborative-text-crdt-core-and-per-arc' of https://github.com/synnaxlabs/synnax into sy-4391-migrate-arc-graph-mode-editing-to-the-action-based

Commit:bbdc87c
Author:Emiliano Bonilla

checkpoint

Commit:9acc951
Author:Emiliano Bonilla

checkpoint

Commit:ef85c61
Author:Emiliano Bonilla

refining

Commit:fb4efc1
Author:Emiliano Bonilla

checkpoint

Commit:5a32db6
Author:Emiliano Bonilla
Committer:Emiliano Bonilla

SY-4379: Resolve arc schema backmerge (align optionality with migration, regenerate)

Commit:329dc79
Author:Emiliano Bonilla
Committer:Emiliano Bonilla

SY-4379: Invert log/lineplot in console, fix hardware task payloads, purge project author

Commit:54bb05c
Author:Emiliano Bonilla
Committer:Emiliano Bonilla

SY-4379: Migrate all schemas to defaults and single-optionality syntax

Commit:088ceaf
Author:Emiliano Bonilla
Committer:Emiliano Bonilla

SY-4379: Regenerate after rc backmerge (ranger + status/label relocation)

Commit:93b1832
Author:Emiliano Bonilla

Merge remote-tracking branch 'origin/rc' into sy-4391-migrate-arc-graph-mode-editing-to-the-action-based # Conflicts: # arc/go/graph/analyze.go # arc/go/graph/codec_gen_test.go # core/pkg/service/arc/codec_gen_test.go

Commit:e3f5ec3
Author:Emiliano Bonilla

SY-4391: WIP — restructure arc graph to nodes+configs map (checkpoint) Schema moves node type/config into graph.configs map<string,record>; analyze.go reads configs[key].type, msgpack lifts legacy inline config, calc compiler builds configs. Does not build standalone (v54 migration).

Commit:7a73178
Author:Patrick Dotson

Merge branch 'rc' into sy-4331-move-most-channel-functionality-to-service-layer

Commit:548e394
Author:sy-nico
Committer:GitHub

SY-4297: Arc Params Refactor (#2420)

Commit:035ae36
Author:sy-nico
Committer:sy-nico

Merge remote-tracking branch 'origin/rc' into sy-4297-arc-flowfunc-refactor

Commit:09cce8e
Author:Patrick Dotson

Merge branch 'rc' into sy-4331-move-most-channel-functionality-to-service-layer

Commit:d46f559
Author:Patrick Dotson
Committer:GitHub

SY-4374: Move statuses and labels from X to Core/client (#2498)

Commit:6ac72ea
Author:Patrick Dotson

Merge branch 'rc' into sy-4331-move-most-channel-functionality-to-service-layer

Commit:78b886f
Author:Patrick Dotson
Committer:GitHub

SY-4352: Standardize API and service layer ranges (#2470)

Commit:77c5f6c
Author:sy-nico

Merge remote-tracking branch 'origin/rc' into sy-4297-arc-flowfunc-refactor

Commit:53b4189
Author:sy-nico

SY-3961: Add default_expr field to Arc Param

Commit:d620975
Author:Patrick Dotson

More dist layer refactors

Commit:b48efd8
Author:Patrick Dotson

Update dist/channel/pb

Commit:92c2669
Author:Patrick Dotson

SY-4331: Consolidate the distribution channel proto into one file - Merge services.proto into channel.proto so the cluster-internal channel allocation proto lives in a single file. - Rename ChannelCreateService/ChannelDeleteService/ChannelRenameService to CreateService/DeleteService/RenameService and update the grpc transport wiring accordingly. - Remove the unused CreateOptions message and the CreateMessage.opts field; the distribution-layer translator never set them. - Regenerate channel.pb.go and channel_grpc.pb.go.

Commit:6d4e103
Author:Patrick Dotson

SY-4331: Simplify the distribution channel proto and test its translator The cluster-internal channel proto is hand-maintained (the minimal distribution Channel is not in the Oracle schema), but it still carried the rich service-layer fields (operations, expression, internal) that the translator never populates. - Reduce channel.proto to the minimal storage/routing fields the distribution Channel actually carries, dropping Operation, OperationType, internal, operations, and expression; regenerate channel.pb.go. - Replace the misleading 'generated by oracle' header with a note that the proto is hand-maintained. - Add translator_test.go covering round-trip translation of CreateMessage, DeleteRequest, and RenameRequest (including the concurrency mapping).

Commit:bb570b1
Author:Patrick Dotson

SY-4331: Relocate channel schema and generated code to the service layer Move the rich Channel struct (and Operation/OperationType) Oracle output from the distribution layer to the service layer, keeping Key/LocalKey/Name in distribution. Regenerates the Go/C++/protobuf outputs and the retrieve, codec, and ontology machinery accordingly. The internal cluster-transport proto (distribution/channel/pb) is no longer Oracle-managed.

Commit:a714ab8
Author:Emiliano Bonilla

checkpoint

Commit:0457c54
Author:Emiliano Bonilla

SY-4384: Move Arc Task/Status Resolution to the API Layer Revert the arc service to a generated retrieve query and perform task/status resolution in the API Retrieve handler, following the api/device pattern. - Re-add @retrieve to the Arc schema; regenerate retrieve.gen.go and drop the hand-written retrieve.go/resolve.go. - Remove Status from the arc ServiceConfig; NewRetrieve is plain generated again. - Resolve the deployed task (and decode its status directly into arc.StatusDetails) inline in api/arc Retrieve, gated on IncludeTask/IncludeStatus. - Add include_task to the gRPC retrieve request for parity. - Move the resolution tests into a new core/pkg/api/arc suite.

Commit:4b7c4e8
Author:Emiliano Bonilla
Committer:Emiliano Bonilla

SY-4384: Move Arc Task Creation to the Core and Expose a Resolved Task Key on Arc

Commit:7e8b445
Author:Emiliano Bonilla

SY-4382: Allow Users to Upload Their Own Avatars

Commit:7f254af
Author:Emiliano Bonilla

SY-4370: Extract Panel View Struct and Nest SetTabView Payload Extracts a View struct (type, name, args) in schemas/panel.oracle and changes the SetTabView action to carry a nested view, mirroring how SetTabResource carries an ontology ID. The Tab union's view variant now references View; its wire shape is unchanged since variant fields flatten. The SetTabView action wire shape changes (flat type/name/args to nested view), which is safe to land on rc alone because nothing on rc emits or consumes SetTabView yet. Regenerates TS/Go/pb and updates the hand-written reducer handlers and tests on both sides. Landed independently of the console panel integration so that work consumes the final action shape.

Commit:e41f5a4
Author:sy-nico

Merge remote-tracking branch 'origin/rc' into sy-4297-arc-flowfunc-refactor

Commit:99ed0c1
Author:Emiliano Bonilla

Extract panel View struct, nest SetTabView payload, and resolve review findings Extracts a View struct (type, name, args) in schemas/panel.oracle and changes the SetTabView action to carry a nested view, matching the shape the console panel integration was written against and mirroring how SetTabResource carries an ontology ID. The Tab union's view variant now references View; its wire shape is unchanged since variant fields flatten. Regenerates TS/Go/pb and updates the hand-written reducer handlers and tests on both sides. Also: - Remove the orphaned useSyncLayout.spec.ts left behind when the PR deleted useSyncLayout. - Call onResolved for Arc creation inside afterSuccess so the panel tab only fills once the server confirms the resource, matching the other selectables. - Complete the afterSuccess dependency array in createUseCreate. - Add v8-v10 zero states to the layout migration test matrix. - Give the cross-writer action-channel spec a 5s waitFor timeout to cover real round-trip latency in CI.

Commit:26aa7f8
Author:Emiliano Bonilla

SY-4289: Strongly Typed Table Cell Configs

Commit:7b2ce4a
Author:Emiliano Bonilla

SY-4068: Merge RC, Hoisting Scale Into LabeledConfig to Match Drag-Resize

Commit:56d5628
Author:Emiliano Bonilla
Committer:GitHub

SY-4355: Rename Workspaces to Projects (#2473) * SY-4313: Array Default Values in Oracle * SY-4313: Apply array defaults to the wrapped array, not the element (TS) * SY-4313: Emit TS string literals safely (surrogate pairs for supplementary code points) * SY-3999: Oracle support for discriminated struct unions Internally-tagged discriminated unions in Oracle (`Scale union on type { ... }`) generated across TypeScript (z.discriminatedUnion), Go (sealed-interface variants + wrapper + two-pass codec), Python (Annotated discriminated unions), C++ (std::variant), and protobuf (oneof). Includes a representative NI example schema. Squashed from the original 15-commit branch; stacked on array defaults (#2432). * SY-3999: Fix Python enum-variant defaults to reference Literal values String-valued Oracle enums generate as a Python Literal alias with module-level constants, not an Enum class, so emitting an enum default as Units.volts is member access on a typing special form and fails mypy. Reference the variant's string value directly for string enums (mirroring the TypeScript plugin), while integer enums keep Enum.member access since they generate as IntEnum classes. * SY-3999: Improve union variant doc generation (TS spacing, Python Attributes) Union variants now render documentation consistently with regular structs: the TypeScript variant schema's JSDoc comment sits directly above the export (no stray blank line), and the Python variant model emits a full Google-style docstring with an Attributes section for its flattened fields instead of only a one-line summary. * SY-3999: Document the union type itself across TS, Python, and C++ The union-level doc was misplaced or dropped: TypeScript emitted it above the first variant schema (reading as that variant's doc) with a stray blank line, C++ emitted it above the std::variant alias with a stray blank line, and Python dropped it entirely. It now attaches directly above each language's union type -- the z.discriminatedUnion export, the std::variant using-alias, and (as a line comment, since aliases cannot carry a docstring) the Annotated alias. * SY-3999: Factor repeated union acronyms in variant type names Union variant type names doubled the union's category acronym (AIChannel's ai_voltage variant became AIChannelAiVoltage). Added casing.VariantTypeName, shared across the TS, Python, Go, and C++ plugins, which factors out the union's leading acronym when the variant repeats it -- AIChannelAiVoltage becomes AIVoltageChannel, CIChannel + ci_two_edge_sep becomes CITwoEdgeSepChannel. Unions without an acronym prefix keep the union-name prefix (Scale + linear stays ScaleLinear) so variant types never collide with a field struct that shares the variant's bare name. Known initialisms (AI, CI, AO, RTD, IEPE, RMS, ...) stay fully upper-cased via whole-segment matching. * SY-3999: Compose union variants via inheritance instead of flattening Union variants previously flattened the union's shared base and the variant payload into a standalone struct, duplicating every shared field across all variants and discarding the type relationships the schema expresses. Each variant now composes those structs through its language's existing struct-extends mechanism, declaring only the discriminator: - Python: class AIVoltageChannel(BaseAIChannel, AIVoltageFields) - TypeScript: baseAIChannelZ.extend(aiVoltageFieldsZ.shape).extend({ type }) - C++: struct AIVoltageChannel : BaseAIChannel, AIVoltageFields, with the codec routed through the existing HasExtends parse/to_json branch - Go already embedded the base and payload The serialized JSON is unchanged (all three flatten inherited fields on the wire), so this is wire-compatible; verified against real pydantic and zod that a composed variant round-trips through the discriminated union. Field docs now live once on the base/payload classes instead of being copied onto every variant. * SY-3999: Satisfy setlint and modernize linters Use set.Set for the acronym membership set instead of map[string]struct{}, and maps.Copy for the union domain copy loop. * SY-3999: Address review comments on union/enum/C++ codegen - validateUnion now rejects a variant value equal to the discriminator field name (would clash with the generated discriminator type) and a union base struct that declares a field named "variant" (reserved for the proto oneof). - The C++ JSON codec leaves the parse parameter unnamed for field-less structs so they no longer trip an unused-parameter warning. - The TypeScript enum values const no longer doubles a trailing S (UNITS stays UNITS instead of UNITSS). * SY-4354: Introduce Panel Data Structure Introduces the Panel resource: a project-or-user-owned tree of visualization tabs (leaves and splits) with a stable, content-independent tab identity and an action-based mutation protocol. Scope is the core service + client/ts package + schemas/tests only; console and pluto integration land separately. - schemas/panel.oracle: Panel tree (Node/Split/Leaf/Tab), the Tab content union (resource | inline view), and the action set (InsertTab, RemoveTab, MoveTab, SplitLeaf, ResizeSplit, SetTabResource, SetTabView, Rename). - schemas/ontology.oracle: adds the `panel` resource type (regenerated across go/ts/py/cpp). - core/pkg/service/panel: service, writer, tree reducer, action handlers, ontology integration, generated codec/pb, and tests. - core/pkg/api/panel + transport/service wiring: create / retrieve / delete / dispatch endpoints. Panels are parented by a generic ontology.ID (zero -> draft under the creating user); the project-key convenience arrives with the project resource. - Rename has no REST endpoint: like the other visualizations it is applied through a dispatched action so the change broadcasts to connected clients. - client/ts/src/panel: client, shared tree protocol, action helpers, and unit tests; registered on the Synnax client as `panels`. * SY-4354: Add comprehensive panel service tests Expands panel coverage beyond the action reducer and codec to the full service surface, mirroring the log/lineplot test layout. The suite now provisions a mock distribution cluster (DB, ontology, group, search, signals) and opens the panel service in its production configuration. - writer_test.go: Create (key assignment, default empty leaf, tree preservation, ontology resource + Panels-group parenting, explicit parent vs zero-parent draft, upsert), Delete (record + ontology cleanup, multi-key), Dispatch (per-action persistence, atomic batch, rejection rollback, OnAction broadcast, monotonic Seq, no-notify on reject). - retrieve_test.go: by key, multi-key Entries, not-found, Limit, Offset, Count, Exists. - ontology_test.go: ID helpers and round-trips, Type, RetrieveResource, OnChange Set emission, OpenNexter iteration. - service_test.go: ServiceConfig Validate/Override, OpenService guards. - signals_test.go: end-to-end frame publication on sy_panel_set (dispatch) and sy_panel_delete (delete) read through a real framer streamer. Panel suite: 44 -> 91 specs. * SY-3999: Remove NI demonstration schema and generated artifacts The union feature is fully exercised by the oracle plugin and analyzer tests. The NI schema and its generated output belong to SY-4299, which will introduce ni.oracle as the feature's first real consumer. The generated files were also stale, predating the later codegen changes on this branch. * SY-4354: Tighten panel docs and specs Review pass over the panel surface. - actions.go: drop the stale "writer promotes to project ownership" note from RenamePayload.Handle; that path does not exist in this PR. - api/panel/panel.go: document the Service type and Create's parent/draft behavior. - actions_test.go: add a tabKeys helper and collapse the repeated per-index tab assertions into ordered-equality checks; several specs now verify exact tab ordering where they previously only checked length. - client.ts: drop the unused parent field from the retrieve request (the server does not filter by it) and guard single retrieves with checkForMultipleOrNoResults so a missing key throws NotFound instead of silently returning undefined, matching the sibling clients. * SY-4354: Align panel New with the visualization convention The New panel payload diverged from every visualization: it used an optional, server-assigned key and dropped the root field entirely, relying on the writer to backfill both. This aligns it with the line plot / log / schematic / table convention. - key = create: the key is generated client-side (uuid.create()) so it is known before the create round-trips, as the flux/optimistic-create path requires. - root = { leaf = { tabs = [] } }: New carries a defaulted root instead of omitting it, so a caller can seed an initial tree in one create call and the created shape is known client-side. The writer keeps its empty-root normalization as a server-side invariant for the full-Panel API path. * SY-4354: Register a noop console ontology service for panels Adding the panel ontology resource type makes the console's exhaustive Record<ResourceType, Ontology.Service> require a panel entry. Register a noop service (the same pattern used by builtin/framer/view) so the console type-checks; the real panel ontology service lands with the console integration. * SY-3999: Camelize multi-word union discriminators in generated TS TS zod schemas are always camelCase; the JSON codec handles wire-case conversion. The union plugin passed the discriminator field name through verbatim, so a union on value_type produced z.discriminatedUnion ("value_type", ...) with snake_case literal keys that never match runtime data. * SY-3999: Generate pb translators for discriminated unions The go/pb plugin skipped union types entirely: no <Union>ToPB/FromPB functions were generated, and union-typed struct fields fell through to direct assignment between the Go sealed-interface form and the protobuf oneof wrapper pointer, which does not compile. Unions now get dedicated translators (nil variant maps to nil message, each variant converts its payload through the payload struct's translator and wraps it in the protoc oneof wrapper), and struct fields, optional fields, and array elements route through them. Unions with extends are rejected with an explicit error until base-field translation is implemented. * SY-3999: Handle protoc method-name collisions and record arrays in pb translators Oneof wrapper names now gain protoc's trailing underscore when a variant value camelizes to a generated message method (a "string" variant produces Sink_String_, not the nonexistent Sink_String). Record array fields convert through shared recordsToPB/recordsFromPB helpers instead of falling through to a direct assignment between []msgpack.EncodedJSON and []*structpb.Struct. * SY-4355: Rename workspace to project across core, client, and pluto Mechanical rename of the workspace domain to project, keeping semantics identical (layout field, SetLayout, author all retained). - schemas: workspace.oracle -> project.oracle; ontology resource type workspace -> project. Regenerated Go/TS/py/cpp. - core: service/workspace -> service/project, api/workspace -> api/project, plus all consumers (viz writers parent under a project, api/transport wiring, rbac builtin). - client/ts + pluto: workspace package -> project; the Synnax client's `workspaces` accessor -> `projects`. The workspace->project data migration (gorp records + ontology resource re-keying + relationship rewrite) and the console rename are separate follow-up commits. * SY-4355: Add workspace-to-project gorp + ontology migration Migrates persisted workspace state to project when the project service opens its table. Two migrations run in order in a single transaction: - msgpack_to_orc normalizes any legacy msgpack-encoded workspace records. - v56_migrate_workspace_to_project lifts every record from the legacy "Workspace" gorp prefix into the Project type (a field-identical copy, since the change was a pure rename) and deletes the legacy record, then repoints the ontology: it re-keys every workspace resource node to project and rewrites every relationship endpoint of type workspace to project so parent/child edges survive the rename. migrations/v56 holds the frozen Workspace snapshot (codec-identical to the current Project) so gorp can decode the old prefix. migrate_test covers the lift, record removal, resource re-keying, and relationship repointing, including an unrelated relationship left intact. * SY-3999: Support unions extending unions as variant-set composition A union may now extend other unions, mirroring enum extension: the extending union's variant set is the union of its parents' variants plus its own declared variants. The analyzer expands the membership before validation, so code generators see a plain, fully populated union and need no changes. Parents must share the extending union's discriminator, inherited variants with conflicting payload types are rejected, struct and union bases cannot be mixed in one declaration, and composition over a union that extends base structs is rejected until base-field flattening is needed. * SY-3999: Add preserve_keys field domain for typed maps with semantic keys preserve_case halts wire case conversion for an entire subtree, which is wrong once a map's values are typed payloads: the keys are semantic identifiers that must stay verbatim, but the values' field names must still convert between the camelCase TS schemas and the snake_case wire. caseconv.preserveKeys marks a record schema for exactly that split, and the @ts preserve_keys field domain emits it. * SY-3999: Encode unions as length-prefixed JSON in the orc codec The storage codec generator rejected unions wherever they appeared as a stored value. Unions now encode through their generated internally tagged MarshalJSON/UnmarshalJSON pair as length-prefixed JSON, keeping the stored bytes self-describing across variant additions, and the codec round-trip test generator builds a first-variant sample value for union-typed fields. * SY-4355: Rename workspace to project in the console Mechanical rename of the console workspace domain to project, plus the persisted-state migrations the rename requires. - console/src/workspace -> console/src/project, and every consumer (the Synnax client's projects accessor, pluto's Project icon/queries, the ontology service registered under the "project" resource type). - store.ts: the project Redux slice is now SLICE_NAME "project"; migrateState reads the legacy persisted "workspace" key so an upgrading user keeps their saved active project. - layout v11 migration: renames the "workspace" nav menu-item key (and any active drawer) to "project" across every drawer, preserving order and user customization, so persisted nav menus keep resolving after the toolbar moved to the "project" key. Left intact: frozen layout snapshots (v0-v10), the layout-level excludeFromWorkspace flag (a separate concept), and the VS Code extension API's workspace namespace in the Arc LSP client. * SY-3999: Convert union map values through union pb translators Map fields with union value types fell through buildMapValueConversion to a direct copy between the Go union wrapper and the protobuf message pointer, which does not compile. They now convert element-wise through the union's ToPB/FromPB pair like struct map values. * SY-3999: Marshal nil-variant unions as null and tolerate null on optional union fields A zero-valued union (nil variant) previously failed MarshalJSON, which made optional union-typed fields unserializable when absent. Nil variants now marshal as JSON null and null unmarshals back to a nil variant. Generated TS optional union fields wrap in zod.nullToUndefined so a null from the Go side parses as undefined, matching how optional records and maps are handled. * SY-4355: Migration audit fixes — rename the workspaces group, expand tests Audit of the workspace-to-project migrations surfaced one universal gap and some thin test coverage. - Rename the root "Workspaces" group to "Projects" in the migration. The service retrieves its group by name, so without this every upgraded cluster would keep migrated projects under a group still named "Workspaces" while the service created a second, empty "Projects" group. Renaming in place keeps the group key and all parent relationships stable. - Expand the gorp/ontology migration test to cover multiple workspaces, the group rename, and a no-op on a cluster that never created a workspace. - Console: extract Project.migrateLegacySlice (read the legacy persisted "workspace" slice key, else the project key) out of store.ts so the persisted-slice rename is unit-tested; store.ts is not testable directly because importing it pulls in the Arc monaco worker. * SY-4355: Migrate RBAC policy objects from workspace to project User-defined policies can grant access to specific workspaces, storing objects of the legacy "workspace" ontology type. The workspace-to-project rename left those objects dangling. Add a policy-table migration that retypes every "workspace" policy object to "project" in place (a policy's key is independent of its objects), so access grants survive the rename. The migration lives in the policy package, registered on the policy table after msgpack_to_orc, rather than in the project migration reaching across into the policy table — policies own their object references. * SY-4355: Address Greptile review on the project rename - v1 slice migration (P1): guard the projects map lookup. A persisted active key pointing at a project no longer in the map (deleted while active, state not flushed) threw a TypeError, which would have blocked the state migration and bricked startup. Drop the active project instead, and cover both paths with tests. - import.ts (P2): rename the leftover wsKey/ws locals to projectKey/proj to match the rest of the file after the rename. * SY-3999: Omit zero-valued soft-optional fields from Go JSON output Soft-optional (single ?) fields are Go values, so an absent field decodes to its zero value; on re-encode that zero was emitted as a concrete value, turning absence into zero-filled output that downstream optional schemas reject (an optional enum came back as ""). json omitzero and msgpack omitempty restore absence-in, absence-out round-tripping, which matches the documented absence-collapse semantics of single ?. * Revert "SY-3999: Omit zero-valued soft-optional fields from Go JSON output" This reverts commit b1405481c361815d2db73eea3ef582239cb5f2b1. * SY-4355: Simplify nav rename migration with record.map * SY-4355: Fix import/export sort and formatting after rename * SY-3999: Skip auto-copying migration fields whose union-ness changed Auto-copy matched old and new fields by name only, emitting a direct assignment for a field that changed from an opaque record map to a typed union map, which does not compile. Fields whose old and new types disagree on union-ness at any position are now left to the hand-written migration hook. * SY-4354: Fix data race in panel OnChange test * SY-3999: Emit self-narrowing union schema maps in generated TS The per-union schema map was typed Record<UnionType, z.ZodType<Union>>, widening every lookup to the whole union and forcing consumers that resolve a schema by variant to re-narrow with a cast. The map is now a mapped type keyed on the discriminator, so indexing by a variant yields the variant's own schema type. * SY-3999: Deref hard-optional typedef fields in pb translators Hard-optional fields whose type is a distinct typedef over a primitive (a nullable channel key) emitted a direct cast of the pointer instead of the nil-guarded dereference-convert-readdress that hard-optional primitives already receive. * SY-3999: Use min for type-arg count in union mismatch check * SY-3999: Drop unnecessary assertions in caseconv spec * SY-3999: Format caseconv spec * SY-3999: Cover preserveKeys schema traversal branches * SY-3999: Cut Struct Union RFC to Half Length Collapses the per-system prior-art deep dives into the serde tagging taxonomy, the design-space table, and the four takeaways that actually drove the design; condenses the language-design details, the Python/C++/Protobuf codegen listings, the alternatives, and the migration phases; and updates the implementation status with the union-extends-union composition and storage/wire integration that have since landed. * SY-3999: Self-Review Cleanup for Union Support Merges the duplicate union and enum diagnostic helpers, names both payload types in the inherited-variant conflict diagnostic, errors loudly when a union reaches the pb translator with an unexpected form, and adds ProtoReflect to the protoc oneof name-collision list. Adds the missing analyzer negative tests (unresolved and non-struct variant and extends targets, extending a union that extends structs), asserts the formatter's canonical union layout exactly, converts the union codec round-trip test to Ginkgo, and covers cross-namespace union-typed fields in the C++ and protobuf plugins. * SY-3999: Renumber Struct Union RFC to 0042 RFC 0032 was already taken by the telemetry bypass RFC; 0042 is the next free number after 0041. * SY-4354: Adapt panel API to the rc access enforcer refactor * SY-4355: Rename leftover workspace refs in project writer test * SY-4354: Add panel API tests and exercise the action dispatch path Add a panel API-layer suite covering Create, Retrieve, Dispatch, and Delete (access-control and delegation), taking api/panel from 0% to 86%. Add a Reduce suite that drives each action through its generated New*Action constructor and the Reduce dispatcher - the production Writer.Dispatch path - which the existing action specs bypassed by calling Handle directly. This takes the generated action constructors to 100% and Reduce from 32% to 97%. * SY-4354: Test the panel protobuf translators Add round-trip tests for the generated panel pb translators, covering a deeply nested panel (recursively exercising every Node/Split/Leaf/Tab/TabView translator), the slice variants, nil/empty handling, and error propagation when a view's opaque args are not structpb-encodable. Takes translator.gen.go from 0% to ~87%, establishing the first pb-translator unit test in the codebase. * SY-4355: Test the project ontology service, pb translators, and retrieval The project service (renamed from the older, lighter-tested workspace service) had no coverage of its ontology.Service implementation, pb translators, or most of its retrieval query builder - gaps the rename surfaced into the patch. Add an ontology suite (ID helpers, Schema, Type, RetrieveResource, OnChange, OpenNexter), a pb translator round-trip + error-path suite (0% -> ~94%), and retrieval specs for the api-used query methods (MatchKeys, Limit, Offset). Expose userSvc in the suite so committed-write specs use a dedicated author and stay isolated from the by-author retrieval spec. * SY-4355: Test the project slice reducers Add a slice spec covering setActive and maybeRename. maybeRename only renames when the active project's key matches the payload, so the spec asserts all three branches: a matching rename, a non-matching no-op, and a no-op when there is no active project. * SY-4354: Fix panel create authorization to check the type and parent Create enforced ActionCreate against the ontology IDs of the panels in the request, but those panels do not exist yet and their keys are supplied by the caller, so the check authorized against phantom, requester-controlled instances and only passed at all because a type-level policy expands to match any instance. It also never consulted the parent the panel is filed under, so any subject able to create a panel could target any project. Authorize against the panel type and, when a parent project is given, against that parent as well. Drafts (no parent) require only the type grant. * SY-4354: Isolate panel create-authz specs with per-spec users The create-authz specs share one subject, but the create check now grants the panel type (not a per-instance key), and RBAC state is committed and shared. So under --randomize-all a granting spec could leak a type-level create grant onto the shared subject and the no-policy spec would see its denial pass through. Give each create spec a fresh user so grants cannot cross specs. * SY-4354: Location-Aware InsertTab and MoveTab Panel Actions Edge-drop placement moves into the reducer: InsertTab and MoveTab accept an optional location that splits the target leaf and places the tab in the new sibling, so clients no longer compose SplitLeaf with a path-derived child key or duplicate the reducer's side convention. MoveTab treats moving a leaf's only tab to an edge of its own leaf as a no-op. * Export splitSide placement convention from the panel tree helpers * Return a draft-untouched no-op from resizeSplit on equal sizes * Treat a center location as direct leaf placement in InsertTab and MoveTab A center location is now equivalent to absent, so gesture handlers can forward drop locations verbatim instead of translating center to undefined. splitSide narrows to location.Outer, making a center misuse a type error. * Use set.Set in project ontology test to satisfy setlint * Rename leftover ws test vars to proj after workspace-to-project rename * Sweep remaining workspace-era references to project naming Renames leftover ws/workspace identifiers across console, pluto, and client TS sources, retitles the PROJECT API sections in core, and updates the integration suite (ProjectClient, selectors, test paths) to match the renamed Console UI. Migration code and legacy fixtures keep the workspace name intentionally. * Rename remaining workspace-era ws/w vars to p and projectKey * Rename excludeFromWorkspace layout flag to excludeFromProject * SY-3999: Fix TS Inference Cycle for Recursive Unions A union schema's inferred type depends on every variant schema, so annotating a self-referential getter as typeof nodeZ re-enters the inference cycle the getter exists to break. Union references in schema type positions now annotate as z.ZodType<Name>, and the union's TS alias is emitted as the literal variant union instead of z.infer so TypeScript can resolve it lazily. * SY-4354: Model Panel Tab and Node as Discriminated Unions Converts Tab (resource | view | empty) and Node (leaf | split) from optional-field-pair structs to oracle discriminated unions, addressing review feedback on PR #2469. Split children are now required, removing the Go-pointer-indirection double-optionals, and the Go tree reducers are rewritten functionally over the variant wrapper. Merges the sy-3999 union support branch to unlock union codegen. * SY-3999: Rename RFC Example Payload Structs to Disambiguate Variant Types * Fix staticcheck and unused-func lint findings in panel tree * SY-3999: Cover Union Codegen Plumbing With Tests * Route panel write handlers through fgorp.CreateWriteUnaryHandler Panel Create/Delete/Dispatch now take the binding-layer transaction like every sibling service, and access checks run on that transaction instead of outside it. * Wrap long doc strings in panel.oracle to the 88-char limit * SY-3999: Assert Unknown-Discriminator Fallback in C++ Union Dispatch Test * Bound split size ratios to [0, 1] Adds @validate min/max bounds to Split.size and the SplitLeaf/ResizeSplit action payloads, plus server-side ErrInvalidSize guards in the Go handlers since generated Go types do not enforce schema validation. * SY-3999: Encode Unions Fully Binary in the Orc Codec Replaces the length-prefixed JSON blob encoding for union-typed fields with a fully binary form: a length-prefixed discriminator string followed by the active variant's base and payload structs encoded positionally through their own generated codecs. The string tag keeps stored bytes stable under variant addition and reordering; variant field changes version through frozen codecs like any struct change. Union wrappers now implement EncodeOrc/DecodeOrc and union fields dispatch like struct fields; the dependency walk traverses union bases and variant payloads so they receive codecs. * SY-3999: Add Base Embed to Union Codec Round-Trip Fixture staticcheck (QF1008) flagged the fixture's explicit embedded selectors as removable since the variants had a single embed. The generator always emits explicit selectors because extends unions embed both a base and a payload, where promotion is ambiguous. Mirror that richer shape in the fixture: the selectors become required and the base-then-payload encode order is now locked at runtime. * Enforce panel tree invariants at runtime InsertTab now collapses empty leaves like MoveTab and RemoveTab, fixing an edge insert into an empty leaf persisting an empty sibling under the new split. validateTree rejects nil-variant nodes, out-of-range split sizes, and duplicate tab keys before any tree is persisted, covering both caller-provided trees on create and reduced trees on dispatch. * Move panel parent onto the entity, omitting it from storage Parent is now an optional field on Panel mirroring the device convention: the create request is a bare array of panels, each carrying its own parent, and the writer derives the ontology relationship from the field. @go marshal omit keeps it off the stored record; retrieves return it absent. * Add panel Writer.CreateMany and route the api create batch through it * Scope panel tree error identities to their actual consumers Sentinels matched at multiple return sites become unexported; ones returned from a single site are inlined. Tests match messages by substring, and validation failures still wrap validate.ErrValidation for wire classification. * Type tree child sides as spatial.Order * Drop panel isUndoable; the undoable substrate already defaults to always-true * Regenerate panel orc codec for binary union encoding * SY-3999: Use Declared Type Names in Go Codegen, Guard Recursive Orc Decode * SY-3999: Keep Recursive Struct-Extends Bases Extendable in TS Codegen * SY-3999: Satisfy slicescontains Linter in isExtendBase * SY-3999: Resolve Bare Snake_Case Enum Variant Names in Field Defaults * SY-4355: Finish Workspace-to-Project Variable Renames * SY-4355: Remove Redundant Workspace Policy Object Migration * SY-3999: Emit Go 1.26 New-Expression Pointers in Generated Codec Fixtures * SY-3999: Skip Proto Emission for Output Paths Whose Types Are All Omitted * SY-3999: Share Fully Populated Fixtures Across Generated Codec Test Entries * SY-4354: Add Shared spatial.Decimal Type for Unit-Interval Ratios * SY-3999: Support Inline Variant Bodies With Extends in Union Declarations * SY-4354: Dissolve Tab Payload Structs Into Inline Union Variants * SY-3999: Restore License Headers on Regenerated Parser Files * SY-3999: Respect Per-Type Output Overrides in C++ Namespace Type Collection * SY-3999: Reference String Enum Defaults via Generated C++ Constants * SY-4354: Use time.Duration Timeouts in Panel Signals Tests * SY-3999: Name Inline Payload Translators After the Variant Member * SY-3999: Qualify Free to_json Calls Emitted Inside Member to_json Bodies * SY-3999: Honor Scalar Field Defaults in C++ Members and JSON Parse * SY-3999: Render C++ Sentinel and Telem Defaults as Valid Initializers * SY-3999: Deduplicate Telem Default Wrapping in C++ Field Defaults * SY-4354: Merge SY-3999 Member-Named Inline Payload Translators

Commit:26b01ae
Author:Emiliano Bonilla
Committer:GitHub

SY-4354: Introduce Panel Data Structure (#2469) * SY-4313: Array Default Values in Oracle * SY-4313: Apply array defaults to the wrapped array, not the element (TS) * SY-4313: Emit TS string literals safely (surrogate pairs for supplementary code points) * SY-3999: Oracle support for discriminated struct unions Internally-tagged discriminated unions in Oracle (`Scale union on type { ... }`) generated across TypeScript (z.discriminatedUnion), Go (sealed-interface variants + wrapper + two-pass codec), Python (Annotated discriminated unions), C++ (std::variant), and protobuf (oneof). Includes a representative NI example schema. Squashed from the original 15-commit branch; stacked on array defaults (#2432). * SY-3999: Fix Python enum-variant defaults to reference Literal values String-valued Oracle enums generate as a Python Literal alias with module-level constants, not an Enum class, so emitting an enum default as Units.volts is member access on a typing special form and fails mypy. Reference the variant's string value directly for string enums (mirroring the TypeScript plugin), while integer enums keep Enum.member access since they generate as IntEnum classes. * SY-3999: Improve union variant doc generation (TS spacing, Python Attributes) Union variants now render documentation consistently with regular structs: the TypeScript variant schema's JSDoc comment sits directly above the export (no stray blank line), and the Python variant model emits a full Google-style docstring with an Attributes section for its flattened fields instead of only a one-line summary. * SY-3999: Document the union type itself across TS, Python, and C++ The union-level doc was misplaced or dropped: TypeScript emitted it above the first variant schema (reading as that variant's doc) with a stray blank line, C++ emitted it above the std::variant alias with a stray blank line, and Python dropped it entirely. It now attaches directly above each language's union type -- the z.discriminatedUnion export, the std::variant using-alias, and (as a line comment, since aliases cannot carry a docstring) the Annotated alias. * SY-3999: Factor repeated union acronyms in variant type names Union variant type names doubled the union's category acronym (AIChannel's ai_voltage variant became AIChannelAiVoltage). Added casing.VariantTypeName, shared across the TS, Python, Go, and C++ plugins, which factors out the union's leading acronym when the variant repeats it -- AIChannelAiVoltage becomes AIVoltageChannel, CIChannel + ci_two_edge_sep becomes CITwoEdgeSepChannel. Unions without an acronym prefix keep the union-name prefix (Scale + linear stays ScaleLinear) so variant types never collide with a field struct that shares the variant's bare name. Known initialisms (AI, CI, AO, RTD, IEPE, RMS, ...) stay fully upper-cased via whole-segment matching. * SY-3999: Compose union variants via inheritance instead of flattening Union variants previously flattened the union's shared base and the variant payload into a standalone struct, duplicating every shared field across all variants and discarding the type relationships the schema expresses. Each variant now composes those structs through its language's existing struct-extends mechanism, declaring only the discriminator: - Python: class AIVoltageChannel(BaseAIChannel, AIVoltageFields) - TypeScript: baseAIChannelZ.extend(aiVoltageFieldsZ.shape).extend({ type }) - C++: struct AIVoltageChannel : BaseAIChannel, AIVoltageFields, with the codec routed through the existing HasExtends parse/to_json branch - Go already embedded the base and payload The serialized JSON is unchanged (all three flatten inherited fields on the wire), so this is wire-compatible; verified against real pydantic and zod that a composed variant round-trips through the discriminated union. Field docs now live once on the base/payload classes instead of being copied onto every variant. * SY-3999: Satisfy setlint and modernize linters Use set.Set for the acronym membership set instead of map[string]struct{}, and maps.Copy for the union domain copy loop. * SY-3999: Address review comments on union/enum/C++ codegen - validateUnion now rejects a variant value equal to the discriminator field name (would clash with the generated discriminator type) and a union base struct that declares a field named "variant" (reserved for the proto oneof). - The C++ JSON codec leaves the parse parameter unnamed for field-less structs so they no longer trip an unused-parameter warning. - The TypeScript enum values const no longer doubles a trailing S (UNITS stays UNITS instead of UNITSS). * SY-4354: Introduce Panel Data Structure Introduces the Panel resource: a project-or-user-owned tree of visualization tabs (leaves and splits) with a stable, content-independent tab identity and an action-based mutation protocol. Scope is the core service + client/ts package + schemas/tests only; console and pluto integration land separately. - schemas/panel.oracle: Panel tree (Node/Split/Leaf/Tab), the Tab content union (resource | inline view), and the action set (InsertTab, RemoveTab, MoveTab, SplitLeaf, ResizeSplit, SetTabResource, SetTabView, Rename). - schemas/ontology.oracle: adds the `panel` resource type (regenerated across go/ts/py/cpp). - core/pkg/service/panel: service, writer, tree reducer, action handlers, ontology integration, generated codec/pb, and tests. - core/pkg/api/panel + transport/service wiring: create / retrieve / delete / dispatch endpoints. Panels are parented by a generic ontology.ID (zero -> draft under the creating user); the project-key convenience arrives with the project resource. - Rename has no REST endpoint: like the other visualizations it is applied through a dispatched action so the change broadcasts to connected clients. - client/ts/src/panel: client, shared tree protocol, action helpers, and unit tests; registered on the Synnax client as `panels`. * SY-4354: Add comprehensive panel service tests Expands panel coverage beyond the action reducer and codec to the full service surface, mirroring the log/lineplot test layout. The suite now provisions a mock distribution cluster (DB, ontology, group, search, signals) and opens the panel service in its production configuration. - writer_test.go: Create (key assignment, default empty leaf, tree preservation, ontology resource + Panels-group parenting, explicit parent vs zero-parent draft, upsert), Delete (record + ontology cleanup, multi-key), Dispatch (per-action persistence, atomic batch, rejection rollback, OnAction broadcast, monotonic Seq, no-notify on reject). - retrieve_test.go: by key, multi-key Entries, not-found, Limit, Offset, Count, Exists. - ontology_test.go: ID helpers and round-trips, Type, RetrieveResource, OnChange Set emission, OpenNexter iteration. - service_test.go: ServiceConfig Validate/Override, OpenService guards. - signals_test.go: end-to-end frame publication on sy_panel_set (dispatch) and sy_panel_delete (delete) read through a real framer streamer. Panel suite: 44 -> 91 specs. * SY-3999: Remove NI demonstration schema and generated artifacts The union feature is fully exercised by the oracle plugin and analyzer tests. The NI schema and its generated output belong to SY-4299, which will introduce ni.oracle as the feature's first real consumer. The generated files were also stale, predating the later codegen changes on this branch. * SY-4354: Tighten panel docs and specs Review pass over the panel surface. - actions.go: drop the stale "writer promotes to project ownership" note from RenamePayload.Handle; that path does not exist in this PR. - api/panel/panel.go: document the Service type and Create's parent/draft behavior. - actions_test.go: add a tabKeys helper and collapse the repeated per-index tab assertions into ordered-equality checks; several specs now verify exact tab ordering where they previously only checked length. - client.ts: drop the unused parent field from the retrieve request (the server does not filter by it) and guard single retrieves with checkForMultipleOrNoResults so a missing key throws NotFound instead of silently returning undefined, matching the sibling clients. * SY-4354: Align panel New with the visualization convention The New panel payload diverged from every visualization: it used an optional, server-assigned key and dropped the root field entirely, relying on the writer to backfill both. This aligns it with the line plot / log / schematic / table convention. - key = create: the key is generated client-side (uuid.create()) so it is known before the create round-trips, as the flux/optimistic-create path requires. - root = { leaf = { tabs = [] } }: New carries a defaulted root instead of omitting it, so a caller can seed an initial tree in one create call and the created shape is known client-side. The writer keeps its empty-root normalization as a server-side invariant for the full-Panel API path. * SY-4354: Register a noop console ontology service for panels Adding the panel ontology resource type makes the console's exhaustive Record<ResourceType, Ontology.Service> require a panel entry. Register a noop service (the same pattern used by builtin/framer/view) so the console type-checks; the real panel ontology service lands with the console integration. * SY-3999: Camelize multi-word union discriminators in generated TS TS zod schemas are always camelCase; the JSON codec handles wire-case conversion. The union plugin passed the discriminator field name through verbatim, so a union on value_type produced z.discriminatedUnion ("value_type", ...) with snake_case literal keys that never match runtime data. * SY-3999: Generate pb translators for discriminated unions The go/pb plugin skipped union types entirely: no <Union>ToPB/FromPB functions were generated, and union-typed struct fields fell through to direct assignment between the Go sealed-interface form and the protobuf oneof wrapper pointer, which does not compile. Unions now get dedicated translators (nil variant maps to nil message, each variant converts its payload through the payload struct's translator and wraps it in the protoc oneof wrapper), and struct fields, optional fields, and array elements route through them. Unions with extends are rejected with an explicit error until base-field translation is implemented. * SY-3999: Handle protoc method-name collisions and record arrays in pb translators Oneof wrapper names now gain protoc's trailing underscore when a variant value camelizes to a generated message method (a "string" variant produces Sink_String_, not the nonexistent Sink_String). Record array fields convert through shared recordsToPB/recordsFromPB helpers instead of falling through to a direct assignment between []msgpack.EncodedJSON and []*structpb.Struct. * SY-3999: Support unions extending unions as variant-set composition A union may now extend other unions, mirroring enum extension: the extending union's variant set is the union of its parents' variants plus its own declared variants. The analyzer expands the membership before validation, so code generators see a plain, fully populated union and need no changes. Parents must share the extending union's discriminator, inherited variants with conflicting payload types are rejected, struct and union bases cannot be mixed in one declaration, and composition over a union that extends base structs is rejected until base-field flattening is needed. * SY-3999: Add preserve_keys field domain for typed maps with semantic keys preserve_case halts wire case conversion for an entire subtree, which is wrong once a map's values are typed payloads: the keys are semantic identifiers that must stay verbatim, but the values' field names must still convert between the camelCase TS schemas and the snake_case wire. caseconv.preserveKeys marks a record schema for exactly that split, and the @ts preserve_keys field domain emits it. * SY-3999: Encode unions as length-prefixed JSON in the orc codec The storage codec generator rejected unions wherever they appeared as a stored value. Unions now encode through their generated internally tagged MarshalJSON/UnmarshalJSON pair as length-prefixed JSON, keeping the stored bytes self-describing across variant additions, and the codec round-trip test generator builds a first-variant sample value for union-typed fields. * SY-3999: Convert union map values through union pb translators Map fields with union value types fell through buildMapValueConversion to a direct copy between the Go union wrapper and the protobuf message pointer, which does not compile. They now convert element-wise through the union's ToPB/FromPB pair like struct map values. * SY-3999: Marshal nil-variant unions as null and tolerate null on optional union fields A zero-valued union (nil variant) previously failed MarshalJSON, which made optional union-typed fields unserializable when absent. Nil variants now marshal as JSON null and null unmarshals back to a nil variant. Generated TS optional union fields wrap in zod.nullToUndefined so a null from the Go side parses as undefined, matching how optional records and maps are handled. * SY-3999: Omit zero-valued soft-optional fields from Go JSON output Soft-optional (single ?) fields are Go values, so an absent field decodes to its zero value; on re-encode that zero was emitted as a concrete value, turning absence into zero-filled output that downstream optional schemas reject (an optional enum came back as ""). json omitzero and msgpack omitempty restore absence-in, absence-out round-tripping, which matches the documented absence-collapse semantics of single ?. * Revert "SY-3999: Omit zero-valued soft-optional fields from Go JSON output" This reverts commit b1405481c361815d2db73eea3ef582239cb5f2b1. * SY-3999: Skip auto-copying migration fields whose union-ness changed Auto-copy matched old and new fields by name only, emitting a direct assignment for a field that changed from an opaque record map to a typed union map, which does not compile. Fields whose old and new types disagree on union-ness at any position are now left to the hand-written migration hook. * SY-4354: Fix data race in panel OnChange test * SY-3999: Emit self-narrowing union schema maps in generated TS The per-union schema map was typed Record<UnionType, z.ZodType<Union>>, widening every lookup to the whole union and forcing consumers that resolve a schema by variant to re-narrow with a cast. The map is now a mapped type keyed on the discriminator, so indexing by a variant yields the variant's own schema type. * SY-3999: Deref hard-optional typedef fields in pb translators Hard-optional fields whose type is a distinct typedef over a primitive (a nullable channel key) emitted a direct cast of the pointer instead of the nil-guarded dereference-convert-readdress that hard-optional primitives already receive. * SY-3999: Use min for type-arg count in union mismatch check * SY-3999: Drop unnecessary assertions in caseconv spec * SY-3999: Format caseconv spec * SY-3999: Cover preserveKeys schema traversal branches * SY-3999: Cut Struct Union RFC to Half Length Collapses the per-system prior-art deep dives into the serde tagging taxonomy, the design-space table, and the four takeaways that actually drove the design; condenses the language-design details, the Python/C++/Protobuf codegen listings, the alternatives, and the migration phases; and updates the implementation status with the union-extends-union composition and storage/wire integration that have since landed. * SY-3999: Self-Review Cleanup for Union Support Merges the duplicate union and enum diagnostic helpers, names both payload types in the inherited-variant conflict diagnostic, errors loudly when a union reaches the pb translator with an unexpected form, and adds ProtoReflect to the protoc oneof name-collision list. Adds the missing analyzer negative tests (unresolved and non-struct variant and extends targets, extending a union that extends structs), asserts the formatter's canonical union layout exactly, converts the union codec round-trip test to Ginkgo, and covers cross-namespace union-typed fields in the C++ and protobuf plugins. * SY-3999: Renumber Struct Union RFC to 0042 RFC 0032 was already taken by the telemetry bypass RFC; 0042 is the next free number after 0041. * SY-4354: Adapt panel API to the rc access enforcer refactor * SY-4354: Add panel API tests and exercise the action dispatch path Add a panel API-layer suite covering Create, Retrieve, Dispatch, and Delete (access-control and delegation), taking api/panel from 0% to 86%. Add a Reduce suite that drives each action through its generated New*Action constructor and the Reduce dispatcher - the production Writer.Dispatch path - which the existing action specs bypassed by calling Handle directly. This takes the generated action constructors to 100% and Reduce from 32% to 97%. * SY-4354: Test the panel protobuf translators Add round-trip tests for the generated panel pb translators, covering a deeply nested panel (recursively exercising every Node/Split/Leaf/Tab/TabView translator), the slice variants, nil/empty handling, and error propagation when a view's opaque args are not structpb-encodable. Takes translator.gen.go from 0% to ~87%, establishing the first pb-translator unit test in the codebase. * SY-4354: Fix panel create authorization to check the type and parent Create enforced ActionCreate against the ontology IDs of the panels in the request, but those panels do not exist yet and their keys are supplied by the caller, so the check authorized against phantom, requester-controlled instances and only passed at all because a type-level policy expands to match any instance. It also never consulted the parent the panel is filed under, so any subject able to create a panel could target any project. Authorize against the panel type and, when a parent project is given, against that parent as well. Drafts (no parent) require only the type grant. * SY-4354: Isolate panel create-authz specs with per-spec users The create-authz specs share one subject, but the create check now grants the panel type (not a per-instance key), and RBAC state is committed and shared. So under --randomize-all a granting spec could leak a type-level create grant onto the shared subject and the no-policy spec would see its denial pass through. Give each create spec a fresh user so grants cannot cross specs. * SY-4354: Location-Aware InsertTab and MoveTab Panel Actions Edge-drop placement moves into the reducer: InsertTab and MoveTab accept an optional location that splits the target leaf and places the tab in the new sibling, so clients no longer compose SplitLeaf with a path-derived child key or duplicate the reducer's side convention. MoveTab treats moving a leaf's only tab to an edge of its own leaf as a no-op. * Export splitSide placement convention from the panel tree helpers * Return a draft-untouched no-op from resizeSplit on equal sizes * Treat a center location as direct leaf placement in InsertTab and MoveTab A center location is now equivalent to absent, so gesture handlers can forward drop locations verbatim instead of translating center to undefined. splitSide narrows to location.Outer, making a center misuse a type error. * SY-3999: Fix TS Inference Cycle for Recursive Unions A union schema's inferred type depends on every variant schema, so annotating a self-referential getter as typeof nodeZ re-enters the inference cycle the getter exists to break. Union references in schema type positions now annotate as z.ZodType<Name>, and the union's TS alias is emitted as the literal variant union instead of z.infer so TypeScript can resolve it lazily. * SY-4354: Model Panel Tab and Node as Discriminated Unions Converts Tab (resource | view | empty) and Node (leaf | split) from optional-field-pair structs to oracle discriminated unions, addressing review feedback on PR #2469. Split children are now required, removing the Go-pointer-indirection double-optionals, and the Go tree reducers are rewritten functionally over the variant wrapper. Merges the sy-3999 union support branch to unlock union codegen. * SY-3999: Rename RFC Example Payload Structs to Disambiguate Variant Types * Fix staticcheck and unused-func lint findings in panel tree * SY-3999: Cover Union Codegen Plumbing With Tests * Route panel write handlers through fgorp.CreateWriteUnaryHandler Panel Create/Delete/Dispatch now take the binding-layer transaction like every sibling service, and access checks run on that transaction instead of outside it. * Wrap long doc strings in panel.oracle to the 88-char limit * SY-3999: Assert Unknown-Discriminator Fallback in C++ Union Dispatch Test * Bound split size ratios to [0, 1] Adds @validate min/max bounds to Split.size and the SplitLeaf/ResizeSplit action payloads, plus server-side ErrInvalidSize guards in the Go handlers since generated Go types do not enforce schema validation. * SY-3999: Encode Unions Fully Binary in the Orc Codec Replaces the length-prefixed JSON blob encoding for union-typed fields with a fully binary form: a length-prefixed discriminator string followed by the active variant's base and payload structs encoded positionally through their own generated codecs. The string tag keeps stored bytes stable under variant addition and reordering; variant field changes version through frozen codecs like any struct change. Union wrappers now implement EncodeOrc/DecodeOrc and union fields dispatch like struct fields; the dependency walk traverses union bases and variant payloads so they receive codecs. * SY-3999: Add Base Embed to Union Codec Round-Trip Fixture staticcheck (QF1008) flagged the fixture's explicit embedded selectors as removable since the variants had a single embed. The generator always emits explicit selectors because extends unions embed both a base and a payload, where promotion is ambiguous. Mirror that richer shape in the fixture: the selectors become required and the base-then-payload encode order is now locked at runtime. * Enforce panel tree invariants at runtime InsertTab now collapses empty leaves like MoveTab and RemoveTab, fixing an edge insert into an empty leaf persisting an empty sibling under the new split. validateTree rejects nil-variant nodes, out-of-range split sizes, and duplicate tab keys before any tree is persisted, covering both caller-provided trees on create and reduced trees on dispatch. * Move panel parent onto the entity, omitting it from storage Parent is now an optional field on Panel mirroring the device convention: the create request is a bare array of panels, each carrying its own parent, and the writer derives the ontology relationship from the field. @go marshal omit keeps it off the stored record; retrieves return it absent. * Add panel Writer.CreateMany and route the api create batch through it * Scope panel tree error identities to their actual consumers Sentinels matched at multiple return sites become unexported; ones returned from a single site are inlined. Tests match messages by substring, and validation failures still wrap validate.ErrValidation for wire classification. * Type tree child sides as spatial.Order * Drop panel isUndoable; the undoable substrate already defaults to always-true * Regenerate panel orc codec for binary union encoding * SY-3999: Use Declared Type Names in Go Codegen, Guard Recursive Orc Decode * SY-3999: Keep Recursive Struct-Extends Bases Extendable in TS Codegen * SY-3999: Satisfy slicescontains Linter in isExtendBase * SY-3999: Resolve Bare Snake_Case Enum Variant Names in Field Defaults * SY-3999: Emit Go 1.26 New-Expression Pointers in Generated Codec Fixtures * SY-3999: Skip Proto Emission for Output Paths Whose Types Are All Omitted * SY-3999: Share Fully Populated Fixtures Across Generated Codec Test Entries * SY-4354: Add Shared spatial.Decimal Type for Unit-Interval Ratios * SY-3999: Support Inline Variant Bodies With Extends in Union Declarations * SY-4354: Dissolve Tab Payload Structs Into Inline Union Variants * SY-3999: Restore License Headers on Regenerated Parser Files * SY-3999: Respect Per-Type Output Overrides in C++ Namespace Type Collection * SY-3999: Reference String Enum Defaults via Generated C++ Constants * SY-4354: Use time.Duration Timeouts in Panel Signals Tests * SY-3999: Name Inline Payload Translators After the Variant Member * SY-3999: Qualify Free to_json Calls Emitted Inside Member to_json Bodies * SY-3999: Honor Scalar Field Defaults in C++ Members and JSON Parse * SY-3999: Render C++ Sentinel and Telem Defaults as Valid Initializers * SY-3999: Deduplicate Telem Default Wrapping in C++ Field Defaults * SY-4354: Merge SY-3999 Member-Named Inline Payload Translators

Commit:172c4b1
Author:Emiliano Bonilla

Merge branch 'sy-4354-introduce-panel-data-structure' into sy-4355-rename-workspaces-to-projects

Commit:c8c1f3c
Author:Emiliano Bonilla

SY-4068: Inline One-Off Node Config Variants in the Schematic Schema

Commit:54587c1
Author:Emiliano Bonilla

SY-4354: Dissolve Tab Payload Structs Into Inline Union Variants

Commit:4855ae4
Author:sy-nico

Merge remote-tracking branch 'origin/rc' into sy-4297-arc-flowfunc-refactor

Commit:6ae8da5
Author:Emiliano Bonilla

Merge branch 'sy-4354-introduce-panel-data-structure' into sy-4355-rename-workspaces-to-projects

Commit:7fa275c
Author:Emiliano Bonilla

Move panel parent onto the entity, omitting it from storage Parent is now an optional field on Panel mirroring the device convention: the create request is a bare array of panels, each carrying its own parent, and the writer derives the ontology relationship from the field. @go marshal omit keeps it off the stored record; retrieves return it absent.

Commit:3e38abd
Author:Emiliano Bonilla

Merge branch 'sy-4354-introduce-panel-data-structure' into sy-4355-rename-workspaces-to-projects

Commit:c74f14b
Author:Emiliano Bonilla

SY-4354: Model Panel Tab and Node as Discriminated Unions Converts Tab (resource | view | empty) and Node (leaf | split) from optional-field-pair structs to oracle discriminated unions, addressing review feedback on PR #2469. Split children are now required, removing the Go-pointer-indirection double-optionals, and the Go tree reducers are rewritten functionally over the variant wrapper. Merges the sy-3999 union support branch to unlock union codegen.

Commit:7baf378
Author:Emiliano Bonilla

SY-4068: Store Telem Args Instead of Pipelines in Schematic Configs (Core) Replaces stored telem pipeline specs with the semantic arguments each symbol declares: channel keys, rolling-average windows, light thresholds, and control authority become plain typed fields, and the TelemSpec payload with its opaque props record disappears from the schema entirely. The v56 migration extracts the args from the recognized pipeline shapes (channel from the valueStream and setter segments, window from rollingAverage, threshold from withinBounds, authority from the control chip's acquire sink) before decoding each entry, so existing stored pipelines collapse losslessly into args. Pluto-side translation of args back into runtime pipelines follows in the next commit.

Commit:a2d7762
Author:Emiliano Bonilla

SY-4068: Flip Schematic Configs to the Typed Element Union Changes the schematic configs map from map<string, record> to map<string, ElementConfig>, where ElementConfig composes the NodeConfig and EdgeConfig unions via union extends. Config values are validated on every write path: the Go reducer decodes merged payloads through the union (normalizing the camelCase keys the Console stores verbatim, with telem props and state overrides exempt since their keys are semantic), and the TS reducer parses through elementConfigZ for parity. The wire converts config value fields like any typed payload while map keys stay verbatim via the new preserve_keys domain; partial action payloads keep preserve_case end to end and are normalized server-side. Optional config fields whose absence is meaningful (enums, colors, dimensions, telem specs, nested configs) are hard-optional so absence round-trips faithfully instead of collapsing to zero values that downstream optional schemas reject; only fields where zero and absent coincide (booleans, click delays, empty strings) stay soft-optional. The legacy v55 migration decodes lifted props into typed configs, dropping entries that match no variant rather than failing the migration.

Commit:e1ece70
Author:Emiliano Bonilla

Merge branch 'sy-3999-oracle-support-for-struct-unions' into sy-4068-strongly-type-schematic-node-and-edge-props # Conflicts: # client/ts/src/schematic/types.gen.ts

Commit:8c40f08
Author:Emiliano Bonilla

SY-4068: Strongly Type Schematic Node Configs via Oracle Union Models all 100 schematic node symbol configurations in schemas/schematic.oracle as a NodeConfig discriminated union: 44 static labeled symbols, 31 telemetry-actuated toggles, and 7 local dummy toggles share three payload structs, while the remaining 18 symbols get bespoke structs. Telemetry source/sink references are modeled as single-variant unions on value_type with role-pinned variants and opaque, factory-validated props, preserving pluto's per-value-type compile-time narrowing. A new border module owns the per-corner radius canonical form: generated Go/pb types with a crude-accepting UnmarshalJSON, and a hand-written crude zod union in x/ts, mirroring how color handles crude inputs. Pluto's hand-written node schemas are replaced by re-exports of the generated ones: the symbol factories resolve their config schemas from NODE_CONFIG_SCHEMAS, every singleton config file re-exports its generated variant schema, and the node registry's variant enum and union come from the generated NodeConfigType with a satisfies guard against schema/registry drift. Custom symbols layer a TS-only refinement that narrows stateOverrides to the symbol service's typed states on top of the wire-opaque record. The per-category discriminated unions are removed; the generated union is the single aggregation point.

Commit:e09968f
Author:Emiliano Bonilla

SY-4355: Rename workspace to project across core, client, and pluto Mechanical rename of the workspace domain to project, keeping semantics identical (layout field, SetLayout, author all retained). - schemas: workspace.oracle -> project.oracle; ontology resource type workspace -> project. Regenerated Go/TS/py/cpp. - core: service/workspace -> service/project, api/workspace -> api/project, plus all consumers (viz writers parent under a project, api/transport wiring, rbac builtin). - client/ts + pluto: workspace package -> project; the Synnax client's `workspaces` accessor -> `projects`. The workspace->project data migration (gorp records + ontology resource re-keying + relationship rewrite) and the console rename are separate follow-up commits.

Commit:495c640
Author:Emiliano Bonilla

SY-4068: Strongly Type Schematic Edge Configs via Oracle Union Defines Segment, SegmentedEdgeConfig, and the EdgeConfig discriminated union (7 variants tagged on variant) in schemas/schematic.oracle and regenerates TS, Go, and protobuf output. Pluto's hand-written edge schemas now re-export the generated ones: segmentZ and the per-variant configZ schemas come from @synnaxlabs/client, the edge registry's variant enum comes from the generated EdgeConfigType, and a satisfies guard keeps the registry keys in lockstep with the schema. The wire configs field stays an opaque record until node configs are typed in the next step.

Commit:8b1e50c
Author:Emiliano Bonilla

SY-4354: Introduce Panel Data Structure Introduces the Panel resource: a project-or-user-owned tree of visualization tabs (leaves and splits) with a stable, content-independent tab identity and an action-based mutation protocol. Scope is the core service + client/ts package + schemas/tests only; console and pluto integration land separately. - schemas/panel.oracle: Panel tree (Node/Split/Leaf/Tab), the Tab content union (resource | inline view), and the action set (InsertTab, RemoveTab, MoveTab, SplitLeaf, ResizeSplit, SetTabResource, SetTabView, Rename). - schemas/ontology.oracle: adds the `panel` resource type (regenerated across go/ts/py/cpp). - core/pkg/service/panel: service, writer, tree reducer, action handlers, ontology integration, generated codec/pb, and tests. - core/pkg/api/panel + transport/service wiring: create / retrieve / delete / dispatch endpoints. Panels are parented by a generic ontology.ID (zero -> draft under the creating user); the project-key convenience arrives with the project resource. - Rename has no REST endpoint: like the other visualizations it is applied through a dispatched action so the change broadcasts to connected clients. - client/ts/src/panel: client, shared tree protocol, action helpers, and unit tests; registered on the Synnax client as `panels`.

Commit:79e824f
Author:Emiliano Bonilla

checkpoint

Commit:1f28ad8
Author:Emiliano Bonilla

Merge branch 'rc' of https://github.com/synnaxlabs/synnax into sy-4193-panels # Conflicts: # client/ts/src/log/access.spec.ts # client/ts/src/log/log.spec.ts # console/src/project/services/ontology.tsx # core/pkg/service/log/log_suite_test.go # core/pkg/service/log/writer_test.go # pluto/src/log/queries.spec.ts # pluto/src/workspace/queries.spec.ts

Commit:7ee4859
Author:Emiliano Bonilla

SY-4193: Panel tab content union, render seam, and Redux mosaic rip-out Phase 0 — data model: add the Tab content union (resource | view) and the SetTabView action to the panel schema. Reducers (Go + TS) clear the opposite arm on set. Phase 1 — render seam: panel tabs render real visualizations through the console renderer registry. Pluto stays domain-agnostic (content + tabName render-props over the union); the console resolves content and names, reusing existing renderers and a shared Layout.TabName. Phase 3 — rip out the legacy Redux mosaic entirely: delete state.mosaics and all its reducers/helpers/middleware-effects/selectors; relocate fullscreen focus to a session map via a v11 migration; collapse the mosaic component to the panel host; delete the multi-window drag-out hooks (rebuilt later); slim the context menu and triggers. The active-tab selectors now read windowPanels. Phase 2 — repoint placement: usePlacer routes document content into the active panel (insert a tab into the active leaf via the panel Flux store), keeping the window/modal arm on the layout slice. The active-resource resolver moves to the layout module as the successor to the active-mosaic-tab selectors. Task forms temporarily open in a window pending conversion to resource tabs. console check-types/lint/madge clean; panel Go suite and affected console unit specs pass.

Commit:165c1af
Author:Patrick Dotson
Committer:GitHub

SY-4067: Strongly type logs (#2325)

Commit:74a1378
Author:Emiliano Bonilla

Merge branch 'rc' of https://github.com/synnaxlabs/synnax into sy-4193-panels

Commit:754bc56
Author:Emiliano Bonilla

checkpoint

Commit:065180f
Author:Emiliano Bonilla
Committer:GitHub

SY-4065 (1/3): Strongly Type Line Plots on the Core (#2356)

Commit:0f77830
Author:sy-nico
Committer:sy-nico

[oracle sync]

Commit:205a418
Author:Emiliano Bonilla

Merge branch 'rc' of https://github.com/synnaxlabs/synnax into sy-4193-panels # Conflicts: # client/ts/src/schematic/client.ts # client/ts/src/table/client.ts # client/ts/src/table/table.spec.ts # console/src/import/dataTransferItem.ts # console/src/import/import.ts # console/src/import/ingester.ts # console/src/project/export.ts # console/src/project/services/import.ts # console/src/project/services/ontology.tsx # console/src/schematic/services/import.ts # console/src/schematic/slice.ts # console/src/table/Table.tsx # core/pkg/api/grpc/grpc.go # core/pkg/api/schematic/schematic.go # core/pkg/api/schematic/schematic_test.go # core/pkg/api/table/table.go # core/pkg/service/schematic/writer.go # core/pkg/service/table/writer.go # pluto/src/table/queries.spec.ts # pluto/src/table/queries.ts # pluto/src/workspace/queries.spec.ts

Commit:d811134
Author:Emiliano Bonilla
Committer:GitHub

SY-4066 (3/3): Migrate Table to Pluto-Owned State (#2357)

The documentation is generated from this commit.

Commit:858cdff
Author:sy-nico
Committer:GitHub

SY-4122: Arc Statuses (#2364) * SY-4122: Redefine status.set as a dual-mode (ExecBoth) function callable from both Arc func blocks and flow nodes, replacing the deprecated bare set_status symbol. Brings the C++ Arc runtime to parity with the Go runtime.

Commit:997afd0
Author:Patrick Dotson
Committer:GitHub

SY-4222: Add Transport Layer to Core (#2374)

Commit:15694f0
Author:Emiliano Bonilla
Committer:GitHub

SY-4066 (1/3): Strongly Type Tables on the Core (#2354)

Commit:e1a329a
Author:Emiliano Bonilla

Merge branch 'rc' of https://github.com/synnaxlabs/synnax into sy-4193-panels # Conflicts: # client/ts/src/project/client.ts # console/src/log/Log.tsx # pluto/src/tabs/Selector.tsx # pluto/src/tabs/types.ts

Commit:9eb7da5
Author:Emiliano Bonilla

Merge remote-tracking branch 'origin/rc' into sy-4066-strongly-type-tables

Commit:561bd9f
Author:Emiliano Bonilla
Committer:GitHub

SY-4221: Promote Typography Level to an Oracle-Owned Shared Schema (#2362)

Commit:14951c3
Author:Emiliano Bonilla
Committer:GitHub

SY-4065: Preserve Digit-Suffixed Snake Field Names in Oracle Generator (#2353)

Commit:7dcd266
Author:Emiliano Bonilla

SY-4066: Strongly Type Tables on the Core Moves the table resource from an opaque `data: record` blob into a fully typed shape on the server. table.oracle declares Cell, Row, Column, and Table with rows/columns/cells as direct typed fields; client TS, Go, and protobuf types regenerate from it. A v55 snapshot of the pre-typed shape is frozen under core/pkg/service/table/migrations/v55/, and MigrateTable lifts existing entries on first read after the upgrade. The migration decodes the console v0 blob (layout.rows / layout.columns / cells), flattens the row-cell layout from CellLayout[] to []string, drops per-cell UI state (selected), and projects into the typed Table. Cell.props remains an opaque record carrying @ts preserve_case so per-variant props (text vs value) round-trip arbitrary key casing intact. Console state shape stays at v0 internally: toWire / fromWire helpers project Redux ↔ typed wire at the four boundaries (Table.tsx useSyncComponent, services/link.ts, services/ontology.tsx, workspace/services/ontology.tsx, export.ts). The slice gut and the selectedCells UI-only array move with the Pluto-owned state PR. Writer.SetData and the API SetDataRequest both take a typed Table now; Key and Name are preserved from the existing entry on update. Client SDK exports ZERO_NEW and a typed SetDataBody. Test coverage: 14 server specs (Writer/Retrieve), 14 migration specs (canonical fixture pairs with UPDATE_MIGRATED escape hatch, v0 reshape semantics, storage integration via real gorp + memkv), 11 client TS integration specs, 40 pluto + 5 console specs.

Commit:bd07d2c
Author:sy-nico

SY-4122: Add SetByKeyOrName / DeleteByKeyOrName status methods and API endpoints

Commit:fcc13d2
Author:Patrick Dotson
Committer:GitHub

SY-4178: Add option for auto-generating timestamps for writers (#2316) This PR adds an AutoIndex option to Synnax writers across all client libraries and the Go server stack, allowing the server to automatically generate monotonic timestamps for index channels that are omitted from write frames. When enabled, index channels referenced by data channels are implicitly added to the writer at open time, Start is defaulted to telem.Now(), and each write call injects a timestamp series using a per-writer clock (autoStampClock) that advances only on auto-stamp events.

Commit:efc565e
Author:Emiliano Bonilla

SY-4193: Introduce Project and Panel resources (checkpoint) Renames the Workspace resource to Project in place across the schema, server services, TS client, Pluto Flux modules, and console. Adds a new Panel resource with a strongly-typed mosaic tree (recursive Node = Leaf | Split), six action reducers (Rename, InsertTab, RemoveTab, MoveTab, SplitLeaf, ResizeSplit), and the SY-3038 action dispatch substrate wired end-to-end: - Schema: project.oracle, panel.oracle, ontology.oracle additions - Go: panel service with action observer, sequence counter, gorp set channel emitting ScopedActions; dispatch endpoint; RBAC builtin policies updated for project + panel - TS client: panels.dispatch, scopedActionZ; rename routes through dispatch like schematic - Pluto: panel Flux module via createUndoableStore + createDispatch with a supplementary delete-channel listener; project Flux module ported from workspace - Console: workspace -> project rename complete; project services restored from workspace with layout-loading dispatches removed; Panel and PanelServices module stubs added Tests: 33 Go reducer specs, 9 Pluto Flux specs (against live core). TS-side action inverses are stubbed empty for now; undo/redo wiring follows once tree-collapse round-tripping is implemented. The useSyncLayout hook is gone (Project carries no layout); export of inactive projects is temporarily disabled pending a panel-aware rewrite.

Commit:324a56e
Author:Emiliano Bonilla

Merge branch 'rc' of https://github.com/synnaxlabs/synnax into sy-4057-generate-api-level-retrieve-logic

Commit:3cfdef9
Author:Patrick Dotson
Committer:GitHub

Remove gRPC integration server from freighter (#2334) The freighter integration test server no longer needs the gRPC fixture — all freighter implementations exercised in CI use the HTTP/WebSocket endpoints. Drop the grpc/ subpackage, the standalone README, and the gRPC listener wiring in main.go, and tidy the unused grpc/protobuf dependencies from go.mod.

Commit:f320e71
Author:Patrick Dotson

Merge remote-tracking branch 'origin/rc' into sy-4130-add-python-client-support-for-server-side-import-and-export

Commit:8ffcd1c
Author:Emiliano Bonilla

checkpoint

Commit:f57feff
Author:Emiliano Bonilla
Committer:GitHub

SY-3833-3: Migrate Schematic Component to Pluto-Owned State (#2291)

Commit:c7db1b9
Author:sy-nico

SY-4139: Oracle sync

Commit:0d3d577
Author:Patrick Dotson

Remove grpc Freighter integration code

Commit:6426e7a
Author:sy-nico

SY-4122: Add status.set/delete to the C++ driver Brings the C++ Arc runtime to parity with the Go runtime for both flow and func form. Adds SetByKeyOrName/DeleteByKeyOrName service methods + API endpoints, C++ client methods, and driver flow nodes + WASM host fns. Extracts identifier.IsKey as a shared helper.

Commit:544bb08
Author:Emiliano Bonilla

Merge branch 'rc' of https://github.com/synnaxlabs/synnax into sy-3833-3

Commit:c8ba0a7
Author:Patrick Dotson
Committer:GitHub

SY-3556: Use high performance codecs for iterators (#2272) Use high-performance codecs for iterators and remove the option for client libraries to disable the high-performance codec. Also fix a double-allocation issue in the gRPC writer and add tests and benchmarks to the gRPC and HTTP translators.

Commit:a9a6dce
Author:Emiliano Bonilla

Merge branch 'sy-4158-refactor-flux-to-support-suspense' into sy-3833-3

Commit:594b4cd
Author:Patrick Dotson
Committer:GitHub

SY-4128: Remove dead code in `freighter/integration/grpc` (#2296)

Commit:65d81ef
Author:Emiliano Bonilla

significant structural changes and simplifications

Commit:7b33bce
Author:Emiliano Bonilla
Committer:GitHub

SY-3833-2: Add Schematic Action Codec and Dispatch Endpoint (#2290)