feat: prepare release 1.1.0#6
Open
marc-romu wants to merge 13 commits into
Open
Conversation
….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
There was a problem hiding this comment.
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 inGhJsonValidator) backed by an embedded v1.0 schema bundle and a cross-platform-intendedSync-Schemas.ps1+ workflow. DataMappingvalues 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 inCanvasDeleter, headless-safe layout refinements, deterministicFuzzyMatchertie-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.
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Agent-Logs-Url: https://github.com/architects-toolkit/ghjson-dotnet/sessions/584c6bd5-a613-44dc-9353-59be881b6bc4 Co-authored-by: marc-romu <49920661+marc-romu@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Prepare for release 1.1.0
This branch includes:
See commit history for detailed changes.
Review & Testing Checklist
DocumentDiffer.DiffComponentsandPatchApplier.Apply(especially apply order and conflict recording).IgnoreRuntimeMessages,IgnoreMetadataCounters,IgnoreMetadataTimestamps, pivots NOT ignored) matches your intent.VerifyBase = true)..ghpatchagainst a real.ghjsondocument viaGhJson.ApplyPatchand check that conflict messages are useful.