forked from 1b-agent/opencadstudio-upstream
fix(plugin): join plugin-opened undo scopes in XRecord writes
The internal per-call push_undo fractured plugin-composed operations: history has no nested scopes, so each push finished the plugin's still-pending scope and opened its own — an operation of several writes became several undo steps and the plugin's label was lost (measured: 3 creates + update + delete in one scope = 5 steps). Follow the entity-write contract instead: a mutation inside a plugin-opened push_undo scope joins it, so the whole operation is a single undo step under the plugin's label; a scope-less mutation opens and finishes its own scope, keeping one undo step per call; refusals record no undo step in either regime. Document the contract on the trait methods and the host docs; the composition experiment becomes the permanent xrecord_writes_join_a_plugin_initiated_undo_scope test.
This commit is contained in:
1 parent
ca2f0c9857
commit
297a4d3074
4 files changed
+166
-17
No files matched your search
@@ -95,10 +95,13 @@ dictionaries are created on create only, so the first call seeds a plugin's
|
||||
namespace. The payload is the codec's typed `XRecordEntry` pairs — the host puts
|
||||
no opinion on the content. Names and path fragments are symbol-validated, and
|
||||
dictionary addressing follows the codec's case-insensitive lookup. Create never
|
||||
overwrites and update never creates; each refusal is decided before the undo step
|
||||
is recorded, so a failure changes nothing, and each change is one undo step whose
|
||||
undo restores the objects map byte-exactly, the auto-created dictionaries
|
||||
included. `list_xrecords` reports only the keys that address XRecords, in the
|
||||
overwrites and update never creates; each refusal is decided before the undo
|
||||
scope is touched, so a failure changes nothing, and each change joins a
|
||||
plugin-opened `push_undo` scope — the entity-write contract — so an operation
|
||||
composed of several writes (entities and XRecords) is a single undo step; with
|
||||
no scope open a change is one undo step of its own, whose undo restores the
|
||||
objects map byte-exactly, the auto-created dictionaries included.
|
||||
`list_xrecords` reports only the keys that address XRecords, in the
|
||||
dictionary's own order, so audits need no prior knowledge. Not yet mapped to
|
||||
Python.
|
||||
|
||||
|
||||
Reference in new issue
Block a user