Skip to content

feat: prepare release 1.1.0#6

Open
marc-romu wants to merge 13 commits into
devfrom
feat/1.1.0-prepare-release
Open

feat: prepare release 1.1.0#6
marc-romu wants to merge 13 commits into
devfrom
feat/1.1.0-prepare-release

Conversation

@marc-romu
Copy link
Copy Markdown
Member

@marc-romu marc-romu commented May 18, 2026

Prepare for release 1.1.0

This branch includes:

  • Component alias fixes for Rhino 8 canonical names
  • Schema synchronization improvements with automated drift detection
  • Comprehensive test coverage for edge cases and semantic validation
  • DataMapping enum normalization to lowercase
  • GraphBuilder GUID collision fixes
  • Enhanced CHANGELOG documentation

See commit history for detailed changes.

Review & Testing Checklist

  • Sanity-check DocumentDiffer.DiffComponents and PatchApplier.Apply (especially apply order and conflict recording).
  • Confirm the default ignore set (IgnoreRuntimeMessages, IgnoreMetadataCounters, IgnoreMetadataTimestamps, pivots NOT ignored) matches your intent.
  • Confirm the strict "refuse to apply" behaviour on base checksum mismatch is what you want as the default (VerifyBase = true).
  • Try a hand-written .ghpatch against a real .ghjson document via GhJson.ApplyPatch and check that conflict messages are useful.

marc-romu and others added 9 commits April 18, 2026 23:45
….ps1 tool with automated PR creation on drift detection, add comprehensive CHANGELOG.md entry documenting layout engine/fuzzy resolution/delete operations/schema validation features, fix GraphBuilder GUID collision by synthesizing stable keys from component IDs when InstanceGuid is absent, add MaxIterations cap to CrossingMinimizer to prevent theoretical oscillation, rewrite LayerAssignment as iterative post-order DFS to handle
…n/tests, update IOModifiersHandler/ScriptIOHandler to serialize with ToLowerInvariant() and deserialize with ignoreCase:true, change ARCHITECTURE.md documentation from PascalCase to lowercase enum values
…hs, dangling references, duplicate IDs, fix idempotence, fuzzy matcher boundaries, and component state serialization/deserialization with JSON round-trip validation
- GhJSON.Core.PatchModels: strongly-typed model classes for .ghpatch documents
- GhJSON.Core.DiffOperations: DocumentDiffer, PatchApplier, PatchSerializer,
  PatchValidator, DocumentNormalizer, ComponentIdentityIndex, ConnectionKey
- GhJson facade endpoints: Diff, DiffToPatch, PatchFromJson/ToJson,
  PatchFromFile/ToFile, ApplyPatch, ValidatePatch
- Identity precedence for matching: instanceGuid > id > structural fingerprint
- Connection identity: paramName preferred, paramIndex fallback
- DiffOptions defaults: ignore runtime messages, metadata counters and
  timestamps; pivots are diffed by default
- ApplyPatchOptions defaults: VerifyBase = true (refuse on checksum mismatch),
  ContinueOnConflict = true, RenumberCollidingAddedIds = true
- 20 unit tests covering roundtrip, identity precedence, base checksum
  verification, conflict scenarios, idempotence, serialization roundtrip and
  patch validation
- Update CHANGELOG, ARCHITECTURE and Usage docs
- Fix Python aliases to resolve to 'Python 3 Script' (Rhino 8 canonical)
  instead of legacy 'Python Script'
- Add missing aliases from SmartHopper PR #474:
  - Script: 'python3', 'ghpython', 'python script', 'csharp script',
    'c# component'
  - Parameters: 'number slider' (with space), 'str', 'string' (-> Text)
  - Stream: 'streamfilter', 'filter' (-> Stream Filter)
- Add test coverage for new aliases (Python 3 Script, C# Script, Text,
  Stream Filter)
- Update CHANGELOG.md
…nComponent

When component names are rewritten by alias resolution (e.g. 'Python' -> 'Python 3 Script'),
the name-based check in CanHandle fails. Adding an extension key check
(e.g. 'gh.python') ensures the handler still matches and applies script code.
…omponent-aliases

fix: update ComponentNameResolver aliases for Rhino 8 canonical names
Copilot AI review requested due to automatic review settings May 18, 2026 20:44
@marc-romu marc-romu added this to the 1.1.0 milestone May 18, 2026
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR prepares release 1.1.0 by consolidating a large set of feature, fix, and infrastructure changes: embedded JSON Schema bundle + offline schema validator, automated schema-drift sync tooling, Rhino 8 component-alias updates, lowercase DataMapping normalization, GraphBuilder GUID-collision fix, iterative (stack-safe) Sugiyama layer assignment, and an extensive new test suite covering spec compliance, semantics, and edge cases.

Changes:

  • New offline JSON Schema validation pipeline (SchemaLoader + raw-JSON evaluation in GhJsonValidator) backed by an embedded v1.0 schema bundle and a cross-platform-intended Sync-Schemas.ps1 + workflow.
  • DataMapping values normalized to lowercase in the main schema, model docs, serializer output, and tests; component-name resolver updated for Rhino 8 canonical names (Python 3 Script, IronPython 2 Script, etc.).
  • Robustness fixes: iterative layer assignment with cycle reporting, deterministic synthetic GUIDs in GraphBuilder, blocking UI-thread deletion in CanvasDeleter, headless-safe layout refinements, deterministic FuzzyMatcher tie-breaking.

Reviewed changes

Copilot reviewed 61 out of 61 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
tools/Sync-Schemas.ps1 New schema-sync script (uses Windows-style backslash paths — problematic on Linux CI).
.github/workflows/sync-schema.yml Rewritten workflow that runs the sync script on ubuntu-latest and opens a PR on drift.
src/GhJSON.Core/Validation/Schemas/v1.0/*.json Embedded snapshot of main + extension schemas; dataMapping casing differs between main and extensions.
src/GhJSON.Core/Validation/SchemaLoader.cs New embedded-resource schema loader registering all $ids globally.
src/GhJSON.Core/Validation/GhJsonValidator.cs Adds JSON Schema evaluation for both document and raw JSON paths.
src/GhJSON.Core/DependencyGraph/Internal/Sugiyama/LayerAssignment.cs Iterative DFS with cycle detection.
src/GhJSON.Core/DependencyGraph/Internal/Sugiyama/CrossingMinimizer.cs Adds 24-iteration cap.
src/GhJSON.Core/DependencyGraph/Internal/GraphBuilder.cs Synthesizes stable GUIDs from Id to fix collisions.
src/GhJSON.Core/DependencyGraph/LayoutEngine.cs Surfaces cycle diagnostics.
src/GhJSON.Core/GhJson.Layout.cs Uses GraphBuilder.GetStableKey so id-only components get pivots applied.
src/GhJSON.Core/NameResolution/{ComponentNameResolver,FuzzyMatcher}.cs Rhino 8 alias updates and deterministic tie-breaking.
src/GhJSON.Core/SchemaModels/GhJsonParameterSettings.cs Docstring updated to lowercase DataMapping.
src/GhJSON.Core/GhJSON.Core.csproj Comment update for embedded schema resources.
src/GhJSON.Grasshopper/DeleteOperations/CanvasDeleter.cs UI-thread invocation now blocks and reports actual outcome.
src/GhJSON.Grasshopper/LayoutRefinements/{CollisionResolver,PortAlignment}.cs Headless-safe degradation; cumulative-drift fix in PortAlignment.
src/GhJSON.Grasshopper/Serialization/ObjectHandlers/{BaseScriptHandler,IOModifiersHandler,ScriptIOHandler}.cs DataMapping written lowercase; parsing now case-insensitive; CanHandle checks extension key.
tests/**/*.cs Extensive new test coverage (spec compliance, semantics, edge cases, deterministic serialization, Unicode, malformed JSON, cyclic graphs, fix idempotence, schema validation).
docs/ARCHITECTURE.md, CHANGELOG.md Docs updated for the release.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread tools/Sync-Schemas.ps1 Outdated
Comment thread src/GhJSON.Core/Validation/Schemas/v1.0/extensions/gh.python.schema.json Outdated
Comment thread src/GhJSON.Core/Validation/Schemas/v1.0/extensions/gh.panel.schema.json Outdated
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants