Skip to content

Answer group edits with the membership they left - #1065

Merged
saworbit merged 2 commits into
mainfrom
fix/group-membership-read-back
Sep 29, 2026
Merged

saworbit merged 2 commits into
mainfrom
fix/group-membership-read-back

Conversation

@saworbit

Copy link
Copy Markdown
Owner

Description

Part of #1019: the two group edits.

scene_add_to_group and scene_remove_from_group answered added and removed as constants. Membership was read before the write, to refuse a duplicate or a missing one, and never after it, so a commit the node did not take would still have read as done.

Both now read Node.is_in_group again after the undo action commits and answer in_group from that read. A change the node does not reflect is refused with a 500 rather than reported as success. added and removed are unchanged for callers that read them.

Related Issues

Part of #1019. Stacked on #1064, which merges first.

Type of Change

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds new MCP tools or capabilities)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Documentation update

Checklist

  • My code adheres to the project's coding style guidelines (C++20, 4 spaces).
  • I have added automated tests in tests/ covering new functionality. Two observed-state cases.
  • All native unit tests pass (946/946 locally).
  • Live bridge changes pass tests/run_godot_integration.ps1 on Godot 4.5.1, 4.6.2 and 4.7.2.
  • Runtime-session changes cover editor and game descriptors, authentication, attach rollback, pause/step/stop, cursor polling, cleanup, and token redaction. Not touched.
  • Expression changes cover the strict read-only grammar, receiver allowlist, output/depth bounds, and cooperative-timeout wording. Not touched.
  • The exact MCP smoke starts with an explicit Godot project, matches the manifest emitted by didi --dump-tool-manifest from the same build, preserves the Phase 4/5/6 contracts, and keeps reserved runtime debugger tools marked unimplemented.
  • Any new tool name has an accepted record in docs/SURFACE_AMENDMENTS.md. No new tool.
  • Capability metadata, reference docs, roadmap, and changelog are current. Published tool counts are derived from the manifest, never hand-edited.
  • If this starts or finishes a Build Queue item, its row in docs/BUILD_QUEUE.md says IN PROGRESS, or COMPLETE (#<this pull request>). Not a queue item.
  • Tests added or removed: test_inventory.py agrees.
  • I have updated relevant documentation in docs/ and README.md.

Tests

  • tests/observed_post_state.json: both move from exempt to observed on in_group. tests/observed_post_state.ps1 adds a case for each, in the observed scene, comparing in_group with the node's own is_in_group through a new in_group function on observed_witness.gd. On 4.5.1, 4.6.2 and 4.7.2: 36 cases over 34 tools agreed.
  • I made the bridge report the opposite of what it read. The harness failed with scene_add_to_group.in_group answered false but the engine reports true, and the reverse for remove.

Local: native 946/946, Python OK, docs validator clean, inventory 1486.

The lane used Ubuntu 24.04's default clang and libc++ 18. libc++ 18 has
no floating-point std::from_chars, so argument_normalization.cpp did not
compile there, while the macOS runner's libc++ built it. Ubuntu 24.04
ships clang-20 and libc++-20-dev in its own archive, and a three-line
probe in the lane image parses a double through from_chars with them.

The image installs those, and the lane configures with clang-20. A build
volume whose cached compiler the image no longer has is reconfigured on
its own, because CMake does not read CC and CXX again over an existing
cache. run.sh also passes DIDI_LOCALCI_RECONFIGURE, which lane.sh
documented and never received.

Fixes #1026
scene_add_to_group and scene_remove_from_group answered added and
removed as constants. Membership was read only before the write, so a
commit the node did not take would still have read as done.

Both now read is_in_group again after the undo action commits and
answer in_group from it. A change the node does not reflect is refused
rather than reported. They move from exempt to observed, and a case for
each compares in_group with the node's own is_in_group through the
witness. Reporting the opposite of what was read fails the harness on
both tools.

Part of #1019.
@github-actions github-actions Bot added documentation Improvements or additions to documentation tests Test suites and the contracts they assert addon The Godot addon and the in-engine GDExtension tooling Generators, harnesses, and developer tooling labels Sep 29, 2026
@saworbit
saworbit merged commit 4e3fd45 into main Sep 29, 2026
28 checks passed
@saworbit
saworbit deleted the fix/group-membership-read-back branch September 29, 2026 14:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

addon The Godot addon and the in-engine GDExtension documentation Improvements or additions to documentation tests Test suites and the contracts they assert tooling Generators, harnesses, and developer tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant