What's Changed
🔐 Security
🧪 Tests and Contracts
- Require a line to start with else before the colon rule fires by @saworbit in #375
- Check the filesystem before the editor writers report a result by @saworbit in #376
- Free the engine output logger instead of only dropping its reference by @saworbit in #377
- Let a field trial be run by a client other than Claude by @saworbit in #378
- Stop script_check_syntax reporting autoloads as errors by @saworbit in #386
- Let Didi enable its own addon by @saworbit in #385
- Teach the engine the uid a written scene carries by @saworbit in #390
- Scope session attach and the dashboard to this server's project by @saworbit in #391
- Let resource_create point at another resource by @saworbit in #392
- Let a capture select the editor main screen it needs by @saworbit in #393
- Stop the slow trickle IPC test racing the deadline it measures by @saworbit in #394
- Let an agent call a project's own methods by @saworbit in #395
- Enforce the input schema tools/call publishes by @saworbit in #409
- Spend a confirmation token only on the mutation it authorises by @saworbit in #410
- Name the canonical tool in the test lab message by @saworbit in #412
- Publish the engine version so reflection can compare against it by @saworbit in #414
- Answer offline reads honestly instead of substituting or failing by @saworbit in #411
- Keep Unicode identifiers whole in every symbol scanner by @saworbit in #429
- Enforce the schemas the tools publish by @saworbit in #430
- Arm the overwrite gate on the target, not the flag by @saworbit in #431
- Read every project text file, and say what was not read by @saworbit in #432
- Give every semantic failure a code by @saworbit in #433
- Stop calling third-party addon files orphans by @saworbit in #434
- Stop calling local work a fallback by @saworbit in #435
- Read the target before describing a mutation by @saworbit in #436
- Answer the request edges below tools/call the way the spec says by @saworbit in #453
- Enforce the input schemas the server publishes by @saworbit in #456
- Name the repository the sandbox uses, and refuse one that only encloses the project by @saworbit in #457
- Check resource_create property names against the type by @saworbit in #454
- Read the replacement before patching a method, and keep it where it was by @saworbit in #452
- Refuse a number no float property can hold by @saworbit in #455
- Say the semantic failures in the bridge, and tell a wrong type from a missing path by @saworbit in #458
- Name the scene every live scene answer is about by @saworbit in #459
- Answer a path-validation failure with the error envelope by @saworbit in #474
- Refuse a resource type Godot cannot load, and say which engine was checked by @saworbit in #475
- Keep didi's own state out of the project inventory by @saworbit in #476
- Require a target before instantiating a node by @saworbit in #477
- Check a project setting name against the engine before persisting it by @saworbit in #478
- Say which subtree, which group names, and whose connection by @saworbit in #479
- Make the call-method dry run answer about the call by @saworbit in #480
- Give every tool parameter a description by @saworbit in #481
- Make scene_get_hierarchy answer the question it was asked by @saworbit in #495
- Give every error a data floor and fill it in one place by @saworbit in #496
- Check the value before writing it to the project by @saworbit in #497
- Resolve a oneOf branch before saying what it needs by @saworbit in #498
- Run the repository check in the apply preview by @saworbit in #499
- Say in tools/list which names are legacy by @saworbit in #500
- Name the read that works when the sandbox refuses one by @saworbit in #501
- Decide each tool annotation on its own by @saworbit in #517
- Advertise the mode a tool answers with by @saworbit in #518
- Publish the argument closure and the fields handlers return by @saworbit in #519
- Say no to a prompt argument that goes nowhere by @saworbit in #520
- Make a board findable, and say which part of a bad URI was wrong by @saworbit in #521
- Name the scene root the scene tools accept by @saworbit in #522
- Publish an output schema wherever something checks it by @saworbit in #523
- Stop the harness failing for reasons that are not the test by @saworbit in #524
- Give the schema-enforcement test its own project by @saworbit in #540
- Answer a bad path with a code, and check it by resolving by @saworbit in #539
- Answer a task state conflict with a conflict by @saworbit in #541
- Say which kind of detached this is by @saworbit in #542
- Make the protocol edge say what is true by @saworbit in #543
📚 Documentation
🏗️ Build, CI and Tooling
- Add the vibe-testing harness that found #396-#408 by @saworbit in #413
- Record what the first vibe session's probes now show by @saworbit in #415
- Keep the second vibe session's censuses and repros by @saworbit in #428
- Carry the vibe session that found #437-#450 by @saworbit in #451
- Carry the 2026-09-12 vibe session's harness by @saworbit in #473
- Open the error envelope in a census of its own by @saworbit in #494
- Sweep the discovery surface, not only the answers by @saworbit in #516
- Capture the seventh vibe session's probes by @saworbit in #538
- Send a valid handshake from the packaging smoke by @saworbit in #545
Full Changelog: v1.8.0...v2.0.0