editor-undo-acceptance.json
docs/evidence/editor-undo-acceptance.json
1{
2 "sourceBase": "8aac9e6d9455bb34ab4c2dfc43a4f67814cc5ba8",
3 "sourceSha256": {
4 "apps/editor/main.ts": "442d5a3581b596188be4392be0b70ce47b937ec30db9edd3ba8c582d13b70a01",
5 "package.json": "16770798cbf5a38f07ce7a113df4d569d36df5ea1b06b37693e2ebee4ab959a8",
6 "packages/authoring/undo.ts": "f8474e514dec8cd60d39e03cf1cd68bf2c3f2ff186c5c50e4735ec022c4f28db",
7 "services/authoring/history.ts": "ec91aebd3457ceb9d94966a2c010838623e8e69750134d5206919425d0e2e08d",
8 "services/authoring/http.ts": "8866be60d33e57012434e5f8dbc5eaedf3d4bc608d6623c91c47f94e80403f09",
9 "services/authoring/store.ts": "9e568f32df1570254dc2b06f7a395ef900c9acf5f8b570e8878bf583f109d5f5",
10 "services/relay/server.ts": "bd611f889f85f4e861c92cc4bd59e2de7efca0aa51ebadaaf4f75ed75ba592d4",
11 "tests/authoring-undo-http.test.ts": "993cfaf2e5945909d346152efd5e985d1d5a04b5bfb9f3e943be917740020848",
12 "tests/authoring-undo.test.ts": "0c5e5a25b2b0d80b48bee3e7f49aa9032b2e57f4f3acf6d9f6bd0047b1618431",
13 "tests/browser/editor-merge.spec.ts": "d4743e6f1031479047d20d63fc1d4585e48e3a4861e9fb90b35f1de1e15e176e",
14 "tests/browser/editor-undo.spec.ts": "1f7e84e5ac8f709228b2b829a866342587ca11c3115f5aadaeebf76ccc70d890"
15 },
16 "headless": {
17 "fullSuite": {
18 "tests": 459,
19 "pass": 459,
20 "fail": 0,
21 "skipped": 0
22 },
23 "initialFocused": {
24 "tests": 20,
25 "pass": 20,
26 "fail": 0,
27 "skipped": 0
28 },
29 "finalRetentionAndHttp": {
30 "tests": 9,
31 "pass": 9,
32 "fail": 0,
33 "skipped": 0
34 }
35 },
36 "browser": {
37 "regressionMatrix": [
38 {
39 "title": "two editors merge independent fields and undo keeps newer work even across a later local save",
40 "status": "expected",
41 "results": [
42 "passed"
43 ]
44 },
45 {
46 "title": "saved revision notices preserve drafts and heal after missed checks without replacing the open scene",
47 "status": "expected",
48 "results": [
49 "passed"
50 ]
51 },
52 {
53 "title": "mixed primitive and imported selection transforms together with pointer cancellation and atomic save undo redo",
54 "status": "expected",
55 "results": [
56 "passed"
57 ]
58 },
59 {
60 "title": "a linked member or shearing scale rejects the entire selection and discard restores the saved scene",
61 "status": "expected",
62 "results": [
63 "passed"
64 ]
65 },
66 {
67 "title": "group saves merge unrelated properties and reject an overlapping member without partial writes",
68 "status": "expected",
69 "results": [
70 "passed"
71 ]
72 },
73 {
74 "title": "viewport picking toggles primitive and imported bounds in the same selection",
75 "status": "expected",
76 "results": [
77 "passed"
78 ]
79 },
80 {
81 "title": "group undo and redo survive reload and a new browser session with the same history identity",
82 "status": "expected",
83 "results": [
84 "passed"
85 ]
86 },
87 {
88 "title": "reload keeps independent collaborator edits and permanently protects an overlapping older undo",
89 "status": "expected",
90 "results": [
91 "passed"
92 ]
93 },
94 {
95 "title": "lost save and undo responses recover through one persisted request receipt each",
96 "status": "unexpected",
97 "results": [
98 "failed"
99 ]
100 },
101 {
102 "title": "tabs sharing a history identity cannot accidentally undo a newer top entry",
103 "status": "expected",
104 "results": [
105 "passed"
106 ]
107 },
108 {
109 "title": "browser editor previews, saves, undoes and exports durable transforms without changing identity",
110 "status": "expected",
111 "results": [
112 "passed"
113 ]
114 },
115 {
116 "title": "two editors reject a stale save and preserve the unsaved local transform",
117 "status": "expected",
118 "results": [
119 "passed"
120 ]
121 },
122 {
123 "title": "atelier creates and duplicates solid shapes, stages deletion and restores exact identities through undo and reload",
124 "status": "expected",
125 "results": [
126 "passed"
127 ]
128 }
129 ],
130 "finalDurableHistory": [
131 {
132 "title": "group undo and redo survive reload and a new browser session with the same history identity",
133 "status": "expected",
134 "results": [
135 "passed"
136 ]
137 },
138 {
139 "title": "reload keeps independent collaborator edits and permanently protects an overlapping older undo",
140 "status": "expected",
141 "results": [
142 "passed"
143 ]
144 },
145 {
146 "title": "lost save and undo responses recover through one persisted request receipt each",
147 "status": "expected",
148 "results": [
149 "passed"
150 ]
151 },
152 {
153 "title": "tabs sharing a history identity cannot accidentally undo a newer top entry",
154 "status": "expected",
155 "results": [
156 "passed"
157 ]
158 }
159 ],
160 "distinctPassingScenarios": 13,
161 "finalReportErrors": [],
162 "runnerNote": "The final report has four expected/passed results and no global errors; the log reports 4 passed (49.7s). The outer command handle returned 143 after that report during teardown; no test is marked interrupted or failed."
163 },
164 "validation": {
165 "typecheck": true,
166 "packageBoundaries": 89,
167 "productionRelayBuild": "/tmp/dw-undo-server-final",
168 "productionClientBuild": "The final Playwright server builds an isolated production client before the four journeys."
169 },
170 "ordering": "The full 459-test run contains the final durable metadata marker and retention logic. Final client changes tightened stored-identity validation and show an in-progress status before a history action; the final four browser scenarios, typecheck and client build follow those changes.",
171 "verified": [
172 "Server-owned inverse construction restores exact object properties, omitted rotations, identities and source-array order.",
173 "One document-keyed commit includes world content, merge lineage, undo/redo stacks and operation receipts.",
174 "Reopening the server retains undo/redo and acknowledged receipt replay.",
175 "A failed world write leaves the old document and matching history authoritative after restart.",
176 "Current metadata corruption or missing initialized JSON records fails closed.",
177 "Undo survives beyond the 64-revision merge window, while every intervening write protects overlapping retained entries.",
178 "Foreign independent properties survive undo; edit-then-revert of an overlapping property permanently fences older entries.",
179 "Shared browser tabs require the expected history version and top entry.",
180 "Page reload and a new browser session using retained local storage recover group history and selection.",
181 "Lost save and undo responses retry the identical operation and each advance the revision only once.",
182 "History HTTP requires editor authorization, same-origin admission and bounded validated requests; clients receive summaries rather than inverse command authority."
183 ],
184 "initialFindings": [
185 "A browser receipt assertion matched the prior success text while undo was still in flight and read the preceding revision. The UI now shows explicit Saving/Undoing/Redoing status, and the assertion also waits for redo to become enabled. The final four-scenario run passes.",
186 "The initialization marker prevents an initialized metadata directory with missing JSON records from silently taking the legacy-migration path."
187 ],
188 "limits": {
189 "stepsPerIdentity": 30,
190 "receiptsPerIdentity": 64,
191 "identities": 32,
192 "metadataBytes": 8388608,
193 "scope": "Object property/create/delete edits. Full-world and model-catalog operations remain on the ordinary authoring API and invalidate affected retained history.",
194 "identity": "Browser local-storage UUID, shared by same-origin tabs. Clearing storage loses the addressing key; this is not an authenticated creator account.",
195 "budget": "Old identities/entries may be evicted within the documented limits; an individual undo record that cannot fit rejects before saving."
196 },
197 "localPreview": {
198 "url": "http://localhost:5181/editor.html",
199 "historyReadStatus": 200,
200 "draftBeforeAndAfter": "f076388ad340c7b1e1aa84e72368aa6a9d3a3f6546187a2fed1d0fba66c36977",
201 "draftRevision": "0",
202 "updatedVerifiedIdleEditor": true,
203 "keyPreserved": true,
204 "originalBetaReady": true,
205 "note": "Only the verified idle editor launcher was restarted. The live authoring history read succeeded with the exact prior draft hash. Tests used isolated temporary data/builds."
206 },
207 "remaining": [
208 "Published release-history browsing and engine executable pinning.",
209 "Persistent hierarchy/grouping, marquee selection and wider reversible command coverage.",
210 "Long-session capacity/device/fault certification and remaining milestones 0\u201318.",
211 "Deferred character art redesign."
212 ],
213 "fullPlanEstimatePercent": 45,
214 "wholeRoadmapMilestonesClosed": []
215}
216