RESO Tools – Release Notes


v0.10 – “Ten Ichi”

XSD and Semantic Metadata Validation

Added OData CSDL metadata validation to all certification pipelines (DD, Core, Add/Edit, EntityEvent). Metadata is validated after fetch, before any endorsement-specific testing.

XSD Structural Validation

Semantic CSDL Validation

Dependency: libxml2-wasm replaces libxmljs2

  libxmljs2 (old) libxml2-wasm (new)
License MIT MIT
Dependencies 25+ (native build chain) 0
Vulnerabilities 0 0
Package size ~15MB (with native build) 1.4MB
Native binary Yes (requires ABI match) No (WASM, cross-platform)
Electron compatible Requires electron-rebuild Works out of the box

Why: libxmljs2’s native binary must match the Node.js ABI version. Electron uses a different ABI than system Node, causing version mismatch errors. libxml2-wasm uses the same libxml2 engine compiled to WebAssembly, which runs identically in any JavaScript runtime.

Reference Server

Desktop Client (v0.10.0)

DD Documentation Site

MCP Server Guide

Transport Site

Policy

Real-Time Replication Progress (#126)

RESO Analytics information during DD replication testing, including real-time progress and industry comparison data.

Login and Notifications

Certification Pipeline

UI

Tickets

Package Versions

Package Previous New Reason
reso-desktop-client 0.9.0 0.10.0 Cancel job, release name, worker progress
reso-certification 0.8.0 0.9.0 onProgress callback, Welford’s stats, sub-function pipeline
reso-web-client 0.3.0 0.4.0 Progress bar chart, industry baseline, dashboard loading

Unchanged: reso-client (0.1.0), reso-data-generator (0.2.0), reso-reference-server (0.8.0), reso-mcp-server (0.8.0), reso-validation (0.1.0), odata-expression-parser (0.1.0), reso-web-api-proxy (0.1.0)

Tests

1,237 tests across 8 packages (up from 1,197 in v0.9)


v0.9 – 2026-04-14

To the Nines

End-to-end certification testing from the RESO Desktop Client, plus a cloud MCP server for AI agents.

Download desktop binaries — macOS, Windows and Linux.

Certification Testing

Run Data Dictionary, Web API Core, Add/Edit, and EntityEvent tests directly from the desktop app — no CLI, no Docker required for basic testing.

Cloud MCP Server

RESO now hosts a cloud MCP server at services.reso.org/mcp. Any MCP-capable AI agent can query RESO-compliant servers through it with an API key. Contact dev@reso.org to request access.

Available tools: authenticate, query, metadata, create, update, delete, parse-filter.

SDK and Infrastructure


v0.8 – 2026-04-12

Eight Days a Week

The cert UI ships in the desktop client with three detail views for every Data Dictionary endorsement, a full Org Summary page with live analytics, and a performance report with industry comparison.

Download desktop binaries — macOS, Windows and Linux.

Cert Detail Report

Three views for DD endorsements, accessible via a toggle with icons:

Web API Core and generic renderers for all other endorsement types.

Org Summary Page

Coverage tiles (RESO Fields with Data, RESO Lookups with Data, Field Standardization, Lookup Standardization, Local Fields) with industry comparison. IDX Payload section with per-resource bars. Performance section with headline replication speed, payload, response and throughput metrics with delta callouts. Provider switcher with View Details navigation. Expiring Soon badges with dashed-underline tooltips.

Data Generator

City-specific street names from 75 real U.S. locations. Field-name-aware numeric bounds (~40 rules). Geo-consistent addresses across Property, Member and Office. Co-agents from the same office as primary agent. 20 real MLS system names. Reset button with two-step confirmation.

MCP Guide

Section 4 is now a standalone Add/Edit walkthrough with real server data. Section 5 builds on it with EntityEvent change tracking. All cross-references updated.

Shared Components

Badge, FieldRow, FilterPill, SearchInput, ResourceButton, AvailabilityThresholdPills extracted to a shared module so the live metadata browser and cert Server Explorer stay visually consistent.

Quality


v0.7 – 2026-04-06

Return of the MCP

The MCP server picks up where v0.6 left off. v0.6 shipped seven read tools and proved AI agents could drive RESO end to end; v0.7 fills in the gaps that real-world Add/Edit work needs and gives AI integrators a real walkthrough to learn from.

Write tools – create, update, delete

Three new tools wrap the OData POST / PATCH / DELETE paths against any RESO resource. Each carries the standard MCP ToolAnnotations (destructiveHint, idempotentHint, openWorldHint), so compliant hosts like Claude Code, Claude Desktop, and IDE extensions can prompt the user before invoking destructive operations. delete is the only one tagged destructiveHint: true; create and update rely on the assistant-side confirmation dance instead.

The handlers reuse the same odataRequest + buildResourceUrl(serverUrl, resource, key) plumbing the certification runner uses, so behavior is consistent with the rest of the toolchain.

MCP Server User Guide

reso-mcp-server/doc/GUIDE.md is a dialogue-format walkthrough of working with a RESO OData server through an AI assistant. Every tool call and every response in the guide was captured live against the seeded reference server with ENTITY_EVENT=true. Sections cover:

The guide is intentionally written as user-and-assistant dialogue rather than API reference – every section starts with a real question and ends with the assistant’s interpretation of the live response.

EntityEvent end-to-end through MCP

The reference server’s ENTITY_EVENT=true mode is now confirmed working through the MCP layer with no additional code in the MCP server itself. The generic OData passthrough in the query and metadata tools surfaces the EntityEvent resource (DD 2.1 schema: EntityEventSequence, ResourceName, ResourceRecordKey, ResourceRecordUrl, FeedTypes) automatically once the flag is enabled. Section 5 of the user guide demonstrates the full pull-based replication loop end to end.

Harness coercion fix

The MCP server’s JSON-Schema-to-Zod converter now uses z.coerce.number(), z.coerce.boolean(), and z.preprocess(JSON.parse, ...) for objects and arrays. This means MCP harnesses that serialize all tool arguments as strings (e.g. XML-text parameter forms) no longer trip strict validation on top, skip, count, or structured record payloads. Single-point fix in jsonPropToZod, applies to all 10 tools.

Desktop About panel

The release name in the About panel is now read from a single RELEASE_NAME constant in reso-desktop-client/src/main.ts, and the version is read automatically via app.getVersion() so it can never drift from package.json again. The release checklist in CLAUDE.md documents the new pattern.

The Pagefind search index is now built and deployed for tools.reso.org via the GitHub Pages workflow. The site layout already had the search modal wired up; the workflow was missing the npx pagefind --site step that DD and Transport already have. Search now works on both desktop and mobile.

Tests and quality


v0.6 – 2026-04-06

The MCP Strikes Back

The Java-based web-api-commander has been retired. All certification testing now runs natively in TypeScript on Node.js 22+. The MCP server is now built and smoke-tested in CI against the reference server, so AI agents can drive RESO end to end with confidence.

Note on versioning: v0.5 was published briefly with a tag protection issue that prevented re-releasing it after a workflow fix. Rather than fight the protection, we skipped to v0.6 with the same scope plus the release-workflow improvement. v0.5 should be considered superseded.

Certification CLI (reso-cert)

MCP Server (reso-mcp-server)

New package – 7 tools: authenticate, query, metadata, validate, parse-filter, run-compliance, metadata-report. Works with Claude, Cursor, VS Code, Windsurf, JetBrains, Zed, and any MCP client.

Metadata Tooling

Desktop Client

Data Generator

Docker and CI

Package Naming

Documentation

Data Quality

Performance

Numbers


v0.4 – 2026-04-05

Package Restructuring and Desktop Client Improvements

Fourth milestone release restructuring packages for the upcoming RESO compliance testing integration, fixing desktop client startup issues, and adding update checking and theme persistence.

Package Restructuring

Desktop Client

Security

Release Workflow

Site

Testing


v0.3 – 2026-04-03

The “Cache Me If You Can” Release

Third milestone release adding OAuth2 Client Credentials authentication, lazy lookup loading, IndexedDB metadata caching, a standalone CORS proxy package, and improved error handling across the application.

OAuth2 Client Credentials

Performance

Standalone CORS Proxy (New Package)

Error Handling

Search and UI

Testing

Desktop Client Downloads

Pre-built binaries are available on the GitHub Releases page. These binaries are unsigned and your operating system may warn you before running them.

The app checks for updates on launch and from the Help > Check for Updates menu. When a new version is available, you will be prompted to download it.

Other


v0.2 – 2026-03-10

RESO Desktop Client and Other Improvements

Second milestone release introducing a native desktop application, multi-server connectivity, a full-featured metadata explorer, and comprehensive compliance testing across all four RESO certification suites.

Desktop Client (New)

Server Switcher & External Server Support

UI Enhancements

Data Dictionary Documentation Site

Monorepo Restructuring

OData Client Improvements

Compliance Testing

All four RESO certification suites pass against the reference server with PostgreSQL backend and string enumerations:

Suite Result
Data Dictionary 2.0 1034 passed, 0 failed (10,390 Property records)
Web API Core 2.0 42 passed, 0 failed
Add/Edit (RCP-010) All passed
EntityEvent (RCP-027) All passed, 1000 events validated

CI/CD

Housekeeping

Security

Bug Fixes

SHA Description
0f4715b Add HTTP keep-alive and gzip compression to OData client
fa06efa Add server switcher, external OData server support, and MongoDB Add/Edit compliance
3039ada Add generic media display, navigation guard, and resource-aware data generation
de0c1e7 Add granular server permissions, static DD field groups, and external server UI improvements
d90f81f Add unified lookup resolver, loading spinner, and permission-aware nav
a2de8e2 Add Metadata Explorer, dynamic key discovery, and human-friendly lookups
65cfa3c Fix detail page summary fields, expansion card layout, and search lookups
982d98d Add key field fallback for non-entity-set expansion cards
a9e8620 Fix security findings: token expiry, timing-safe auth, LIKE escaping, key interpolation, security headers
fb4a383 Update SECURITY_AUDIT.md: mark 5 findings as fixed
fbd0b3c Add landing page, mobile responsive layout, and password field masking
d2b5bca Improve UI: advanced search overlay, landing page fixes, error messages, and dev proxy
9344ebd Add Electron desktop client with native menus, navigation, and app icons

v0.1 – 2026-03-06

UI Polish, Developer Experience, and Compliance Fixes

First milestone release focusing on UI improvements, developer workflow enhancements, GitHub Pages documentation, and compliance test fixes.

UI Improvements

Developer Experience

Documentation & Infrastructure

Compliance Fixes

SHA Description
38dfa81 Pin action buttons to bottom of Add/Edit pages (#20)
295fcd0 Fix detail page layout: side-by-side summary + media, two-column field groups
970359c Add zebra striping to Related Records expanded panels
9c31c5b Add Docker hot-reload dev mode and fix Vite SPA proxy routing
408d3d6 Add RESO-branded GitHub Pages site with auto-synced package docs
1904b71 Fix DD 2.0 schema validation errors and SQLite readonly issue

v0.0.28 – 2026-03-06

EntityEvent Compliance Testing Tool (#44)

Native TypeScript compliance testing tool for the RESO EntityEvent Resource (RCP-027). Validates that servers correctly implement change tracking via monotonically increasing sequence numbers.

Two testing modes:

Scenarios (11 total):

Data validation:

Lightweight Edm type checker (edm-validator.ts):

Compliance report generation:

CLI:

Mock server:

New files (10):

Tests:


v0.0.27 – 2026-03-06

EntityEvent Resource – RCP-27 (#43)

Adds the RESO EntityEvent Resource for change tracking via monotonically increasing sequence numbers. Every Create, Update, or Delete operation on the server automatically writes an EntityEvent record with the affected ResourceName, ResourceRecordKey, and a database-managed auto-increment EntityEventSequence.

Core implementation:

Compaction:

Configuration:

Docker Compose:

Schema:

Tests:

Security audit: No issues found. All SQL uses parameterized queries, MongoDB uses structured document operations, auth inherited from existing middleware, no new attack surface. npm audit: 5 moderate (dev-only: vitest/vite/esbuild).


v0.0.26 – 2026-03-06

Add/Edit Compliance Report + PATCH Validation Fix (#41)

Structured compliance report generation for the Add/Edit (RCP-010) endorsement, and a fix for PATCH (partial update) validation that was incorrectly enforcing required fields.

Add/Edit compliance report (#41):

PATCH validation fix:

Docker Add/Edit compliance:

All three compliance suites verified:


v0.0.25 – 2026-03-05

UI: Human-Friendly Field Names, Detail Page Improvements (#40)

Display human-friendly field names throughout the UI using RESO.OData.Metadata.StandardName annotations, with fallback to raw field names.

Human-friendly display names (#40):

Detail page layout improvements:

Data generator fix:


v0.0.24 – 2026-03-05

DD 2.0 Compliance: Collection Nulls + Lookup/Data Generator Sync (#32)

Fixed all 2,012 DD 2.0 schema validation errors discovered during compliance testing with human-friendly string enumerations and the Lookup Resource.

Collection field null → empty array (1,869 errors):

Data generator / Lookup Resource value sync (143 errors):

DD 2.0 compliance result: 1,034 passed, 0 failed, 0 schema validation errors, 0 variations. Full compliance achieved on PostgreSQL with string enumerations.

Test counts: 198 server tests, 104 data generator tests – all passing.


v0.0.23 – 2026-03-05

EnumType Mode – OData Edm.EnumType Support (#30, #27)

Added ENUM_MODE=enum-type as an alternative to string enumerations. When enabled, the server uses OData Edm.EnumType definitions in EDMX metadata instead of Edm.String with LookupName annotations.

EDMX metadata ($metadata):

Compliance testing:

Configuration:

Tests: 9 new enum-type EDMX tests (198 total).


v0.0.22 – 2026-03-05

SQLite Data Access Layer Backend (#3)

Added SQLite as a third database backend alongside PostgreSQL and MongoDB. Lightweight option requiring no external database – ideal for local development and testing.

New files:

Configuration:

Docker Compose:

Compliance: Web API Core 2.0.0 – 42/42 passed, 3 skipped (identical to PostgreSQL and MongoDB).


v0.0.21 – 2026-03-04

Lookup Resource + Human-Friendly String Enumerations (#29)

The server now exposes a Lookup Resource per DD 2.0 Section 2.2 and uses human-friendly StandardName display values for string enumerations. This is required for DD 2.0 compliance when using Edm.String enumeration mode.

Lookup Resource:

Enumeration mode (ENUM_MODE):

Data generator:

MongoDB filter fixes:

RESOScript generator improvements:

UI:

Compliance results (both PostgreSQL and MongoDB):


v0.0.20 – 2026-03-04

Web API Core 2.0.0 Compliance – All Tests Passing (#19)

The reference server now passes all applicable Web API Core 2.0.0 compliance tests: 42 passed, 0 failed, 3 skipped (the 3 skipped are has operator tests, not applicable when using string enumerations).

Server fixes:

RESOScript generator improvements:

Filter parser:


v0.0.19 – 2026-03-04

UI: Expansion Cards for Navigation Properties (#25)

The detail page now displays expanded navigation property data in a collapsible “Related Records” section. Each expansion renders as an inset card with a two-column, vertically scrollable field list (max 4 visible rows).

Bug Fix: nginx proxy missing Teams, TeamMembers, OUID

The nginx reverse proxy allowlist in nginx.conf.template was missing three resources added in v0.0.18 (Teams, TeamMembers, OUID). API requests for these resources were served the SPA HTML instead of being proxied to the backend, causing “not valid JSON” errors.


v0.0.18 – 2026-03-04

Data Generator: Referentially Correct Multi-Resource Seed Data (#24)

The data generator now produces records with valid cross-resource FK linkages so $expand works for all to-one navigation properties (e.g., Property→ListAgent, Member→Office, Office→OfficeBroker).

FK resolver (fk-resolver.ts):

Multi-resource orchestrator (index.ts):

PATCH support (client.ts):

CLI improvements:

Server endpoint:

Docker seed:

Bug fixes during testing:

Files changed: 20 files, ~760 insertions, ~130 deletions


v0.0.17 – 2026-03-04

UI: Pinned Search Toolbar and Detail Header (#23)

On search pages, the resource title, action buttons, search bar, advanced search panel, sort buttons, and result count now stay pinned at the top – only the result cards scroll. On detail pages, the back link, title, and Edit/Delete buttons stay pinned while summary, media, and field groups scroll beneath.

Layout change: <main> is now overflow-hidden and each page manages its own scroll container. This enables per-page pinning without position: sticky hacks.

Affected files:


v0.0.16 – 2026-03-04

Validation Improvements, Tax/Expense Data, and UI Fixes

Validation: Pattern-based field rules and negative coordinate fix (#22):

Data generator: Realistic tax and expense fields:

UI: Auto-expand field groups with validation errors (#22):

UI: Dark mode persistence fix:

Affected files:

Test Summary

Package Tests
@reso-standards/validation 103
@reso-standards/odata-expression-parser 152
@reso-standards/reso-client 101
@reso-standards/data-generator 76
@reso-standards/reference-server 137
@reso-standards/certification-add-edit 49
Total 618

v0.0.15 – 2026-03-05

DD 2.0 Compliance and Expansion Field Fixes

Achieved full RESO Data Dictionary 2.0 compliance (928 passed, 676 skipped, 0 variations, 0 schema validation errors) and fixed several OData spec issues.

Metadata source:

Expansion field lazy loading:

Data generator DD 2.0 compliance:

OData filter parser:

Other fixes:

Compliance infrastructure (new compliance/ directory):

Test Summary

Package Tests
@reso-standards/validation 91
@reso-standards/odata-expression-parser 152
@reso-standards/reso-client 101
@reso-standards/data-generator 73
@reso-standards/reference-server 137
@reso-standards/certification-add-edit 49
Total 603

v0.0.14 – 2026-03-04

EDMX Metadata: EntityContainer and Nullable Fixes

Fixed two OData spec compliance issues in the generated EDMX XML metadata (/$metadata endpoint).

EntityContainer with EntitySets:

Nullable attribute corrections:

Modified files:

Test Summary

Package Tests
@reso-standards/validation 91
@reso-standards/odata-expression-parser 151
@reso-standards/reso-client 101
@reso-standards/data-generator 71
@reso-standards/reference-server 130
@reso-standards/certification-add-edit 49
Total 593

v0.0.13 – 2026-03-04

OData $filter Two-Way Sync and Validation

Added two-way synchronization between the search bar and advanced search form, client and server-side filter validation, and an AST serializer for the filter parser.

AST serializer (astToFilterString):

Filter sync utility (filter-sync.ts):

Search page state management:

Advanced search two-way sync:

Server-side validation:

Modified files:

Test Summary

Package Tests
@reso-standards/validation 91
@reso-standards/odata-expression-parser 151
@reso-standards/reso-client 101
@reso-standards/data-generator 71
@reso-standards/reference-server 126
@reso-standards/certification-add-edit 49
Total 589

v0.0.12 – 2026-03-04

$expand: Property Child Resources and Three FK Strategies

Extended $expand support from 3 resources (Media, OpenHouse, Showing) to all 7 Property child resources, and refactored navigation property discovery to support three distinct foreign key strategies.

New child resources: PropertyRooms, PropertyGreenVerification, PropertyPowerProduction, PropertyUnitTypes – all linked to Property via ListingKey (direct FK strategy).

Three FK strategies in buildNavigationBindings:

OpenAPI and EDMX metadata:

Modified files:

Data Generator: Property Child Resources

Added generators for 4 new child resources and made the seed plan dynamic.

UI: Data Generator Improvements

Modified files:

nginx SPA Routing Fix

Fixed “Cannot GET /admin/data-generator” error on browser refresh. The nginx config previously proxied all /admin/* paths to the backend. Split into a dedicated /admin/ location block that proxies POST and /status to the API while serving the SPA for page routes. Also added the 4 new child resources to the OData entity and collection regex patterns.

Test Summary

17 new tests (navigation property discovery + EDMX generation).

Package Tests
@reso-standards/validation 91
@reso-standards/odata-expression-parser 97
@reso-standards/reso-client 101
@reso-standards/data-generator 71
@reso-standards/reference-server 126
@reso-standards/certification-add-edit 49
Total 535

v0.0.11 – 2026-03-03

UI: Detail Page Layout and Field Grouping Improvements

Redesigned the detail page layout and improved field grouping behavior across all UI views.

Detail page layout (#15):

Remove “Other” group for ungrouped resources (#14):

Fixed header/sidebar and request URI fix (#16):

Modified files:


v0.0.10 – 2026-03-03

MongoDB Document Store Backend

Added MongoDB as a fully functional alternative database backend, selectable via the DB_BACKEND environment variable.

New files:

Modified files:

Deleted: mongo-dal.example.ts – superseded by production mongo-dal.ts

Docker usage:

Documentation


v0.0.9 – 2026-03-03

Fixed $expand + pagination bug and added OData @odata.nextLink support for server-driven infinite scroll.

Bug fix: When $expand=Media was used with $top/$skip, the PostgreSQL adapter applied LIMIT/OFFSET to the flat LEFT JOIN result rows instead of parent entities. With 50 Properties × 5 Media each, LIMIT 25 returned only 5 unique Properties after grouping, and COUNT(*) OVER() reported 250 instead of 50.

Fix: The PostgreSQL adapter now uses a CTE (WITH parent_page AS (...)) to paginate parent rows first, then LEFT JOINs expanded navigation properties in the outer query. COUNT and LIMIT/OFFSET apply to parent entities only.

@odata.nextLink: The collection handler now generates @odata.nextLink URLs when more pages exist (i.e., result.value.length === $top). The nextLink encodes $top/$skip along with all other query parameters ($filter, $select, $orderby, $count, $expand).

UI: The useCollection hook now follows @odata.nextLink for infinite scroll instead of manually computing $skip offsets. The fetchCollectionByUrl client function fetches raw nextLink URLs.

DAL abstraction: The DataAccessLayer interface (data-access.ts) is unchanged – the CTE logic is PostgreSQL-specific. The MongoDB adapter sketch already handles this correctly (cursor pagination + batch expand). The nextLink generation is OData protocol logic in the handler layer.


v0.0.8 – 2026-03-03

Required Address Fields

Enforced required address fields across all address-bearing resources. City, StateOrProvince, PostalCode, and Country (with resource-specific prefixes for Member and Office) must always be present.

Cross-Field Validation Rules

Added relationship constraints between fields in the Property resource:

Data Generator Consistency

Address Formatting Fix

Fixed USPS-format address separators in the UI:

Summary Display

Test Summary

Package Tests
@reso-standards/validation 91
@reso-standards/odata-expression-parser 97
@reso-standards/reso-client 101
@reso-standards/data-generator 71
@reso-standards/reference-server 76
@reso-standards/certification-add-edit 49
Total 485

v0.0.7 – 2026-03-03

Business Rules Validation

Added field-specific business rules to the @reso-standards/validation package in a new business-rules/ subfolder. Rules are enforced on both the server API (POST/PATCH) and the UI input forms.

Locale-Aware Formatting

Added formatFieldValue utility in the UI for locale-aware display formatting:

Address Display

Nginx SPA Routing Fix

Fixed browser refresh on SPA routes (e.g., /Property) returning raw JSON instead of the React app. The nginx config now uses the Accept header to distinguish API requests (application/json) from browser navigation (text/html), using the error_page 418

PostgreSQL Schema: TEXT instead of VARCHAR

Changed the schema generator to use TEXT for all Edm.String columns instead of VARCHAR(n). PostgreSQL stores TEXT and VARCHAR identically, but TEXT columns benefit from TOAST for large values.

Test Summary

Package Tests
@reso-standards/validation 65
@reso-standards/odata-expression-parser 97
@reso-standards/reso-client 101
@reso-standards/data-generator 71
@reso-standards/reference-server 76
@reso-standards/certification-add-edit 49
Total 459

v0.0.6 – 2026-03-03

PostgreSQL Schema: TEXT instead of VARCHAR

Changed the PostgreSQL schema generator to use TEXT for all Edm.String columns instead of VARCHAR(n). PostgreSQL stores TEXT and VARCHAR identically, but TEXT columns benefit from TOAST (Transparent Oversized-Attribute Storage), which moves large values out-of-line and reduces the fixed-width row portion. This resolves “row is too big” errors when populating resources with many fields (e.g., DD 2.0 Property has 652 fields).

Data Dictionary 2.0 Metadata

Updated server metadata from DD 1.7 to DD 2.0 (1,727 fields, 3,256 lookups, 41 resources vs 1,316 fields, 2,951 lookups in 1.7).

Data Generator Fixes

Test Summary

Package Tests
@reso-standards/validation 41
@reso-standards/odata-expression-parser 97
@reso-standards/reso-client 101
@reso-standards/data-generator 71
@reso-standards/reference-server 76
@reso-standards/certification-add-edit 49
Total 435

v0.0.5 – 2026-03-03

Data Generator: @reso-standards/data-generator

New standalone package at tools/data-generator/ that generates realistic RESO Data Dictionary records for seeding OData servers with test data.

Three Output Modes

Resource Generators

Six resource-specific generators produce realistic field values:

A generic field generator handles all Edm types (String, Boolean, Int16/32/64, Decimal, Date, DateTimeOffset, TimeOfDay, Guid) and enum/collection lookups from metadata.

CLI

Interactive mode with @inquirer/prompts:

npx reso-data-generator

Non-interactive mode with flags:

npx reso-data-generator -r Property -n 50 -f json -o ./seed-data \
  --related Media:5,OpenHouse:2,Showing:2 -t admin-token

69 tests across 4 test files

Auth System for Reference Server

Added role-based authentication to @reso-standards/reference-server.

Admin API and UI

Server: Admin Data Generator Endpoint

UI: Data Generator Page

Seed Script and Docker

Root Tooling

Test Summary

Package Tests
@reso-standards/validation 41
@reso-standards/odata-expression-parser 97
@reso-standards/reso-client 101
@reso-standards/data-generator 69
@reso-standards/reference-server 76
@reso-standards/certification-add-edit 49
Total 433

v0.0.4 – 2026-03-03

Certification Test Runner: @reso-standards/certification-test-runner

Extracted generic OData certification test infrastructure from certification/add-edit into a reusable package at tools/certification/test-runner/. Future certification modules (e.g., read-only, search) can import the shared framework instead of duplicating test logic.

Validation Integration in Certification

certification/add-edit now uses @reso-standards/validation for metadata-driven field validation. The validatePayloadAgainstMetadata() function performs full type checking (unknown fields, Edm type mismatches, negative numerics, MaxLength, integer enforcement, collection/enum checks) via the shared validation package.

The certification scenario pre-flight check (makeSchemaAssertion) validates field existence only – value validation is the server’s responsibility and is exercised by the failure test scenarios.

Package Restructure

Test Summary

Package Tests
@reso-standards/validation 41
@reso-standards/odata-expression-parser 97
@reso-standards/reso-client 101
@reso-standards/reference-server 67
@reso-standards/certification-add-edit 49
Total 355

v0.0.3 – 2026-03-03

Shared Validation Package: @reso-standards/validation

Extracted field validation logic into a standalone isomorphic package at tools/validation/. Both the reference server API and the React UI now import from this single source of truth.

Reference Server UI

Added a React UI for the reference server at tools/reso-reference-server/ui/.

Improved Error Messages

Test Summary

Package Tests
@reso-standards/validation 41
@reso-standards/odata-expression-parser 97
@reso-standards/reso-client 101
@reso-standards/reference-server 67
@reso-standards/certification-add-edit 49
Total 355

v0.0.2 – 2026-03-02

Developer Tooling: Biome + Lefthook

Added pre-commit hooks and a shared linter/formatter to enforce code quality across all packages.

Pre-commit Hook Flow

  1. Lint + auto-fix – Biome checks staged .ts files, auto-fixes formatting and lint issues, and re-stages the fixed files
  2. Type checktsc --noEmit in all 4 packages, respecting the build dependency order (filter-parser first, then client/server/test-tool)
  3. Testsvitest run in all 4 packages (314 tests)

Codebase Reformatted

All 79 TypeScript source files were reformatted to the RESO standard style. All 314 tests pass after reformatting.

Setup

npm install           # installs biome + lefthook
npx lefthook install  # activates git hooks

v0.0.1 – 2026-03-02

Initial release of the RESO Transport tooling suite. Introduces four interconnected packages for building, testing, and validating OData 4.01 services that conform to the RESO Data Dictionary and Web API specifications.

New Packages

@reso-standards/odata-expression-parserodata-expression-parser/

Standalone, zero-dependency library for parsing OData $filter expressions into a typed AST. Shared by both the client SDK (query validation) and the reference server (SQL translation).

@reso-standards/reso-clientreso-client/

OData 4.01 client SDK for TypeScript, inspired by Apache Olingo. Provides URI building, CRUD helpers, CSDL metadata parsing/validation, query option validation, and response parsing.

@reso-standards/reference-serverreso-reference-server/

Metadata-driven OData 4.01 reference server for the RESO Data Dictionary. Reads RESO JSON metadata and dynamically generates PostgreSQL tables, OData CRUD endpoints, EDMX metadata, and OpenAPI documentation.

@reso-standards/certification-add-editcertification/add-edit/

RESO Web API Add/Edit Endorsement (RCP-010) compliance testing tool. Sends known-good and known-bad JSON payloads to OData servers and validates responses against 8 Gherkin BDD certification scenarios.

Cross-Package Architecture

validation (zero deps)
    ├──> reso-reference-server (depends on validation + filter-parser)
    └──> reso-reference-server/ui (depends on validation)

odata-expression-parser (zero deps)
    ├──> reso-client (depends on filter-parser)
    │       └──> certification/add-edit (depends on reso-client)
    └──> reso-reference-server (depends on filter-parser)

OData 4.01 Spec Compliance

Implementation was audited against three OData 4.01 specification documents:

All high and medium priority gaps were addressed. Remaining lower-priority items are tracked in TODO.md.

Test Summary

Package Tests
@reso-standards/odata-expression-parser 97
@reso-standards/reso-client 101
@reso-standards/reference-server 67
@reso-standards/certification-add-edit 49
Total 314
Link copied