Skip to content

Commit 81b44e4

Browse files
committed
fix(hosted-web): refresh ReviewAPI recovery census
1 parent 6dac70a commit 81b44e4

4 files changed

Lines changed: 189 additions & 11 deletions

File tree

docs/research/hosted-web/phase-0/recovery-events/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ Pinned phase start: `a32f509e6d9bd31ba2135940e336729bf90c3d93`. Packet: `phase-0
77
- The current generic HTTP SSE route and renderer EventSource have no durable cursor, event ID, replay, scope, or gap detection. File-watcher team changes are lossy hints.
88
- Existing OpenCode delivery/bridge journals provide valuable conflict and ambiguity evidence. They are JSON-store/provider-specific, hash raw or partially normalized payloads without retained ADR-34 descriptor/key versions, and cannot serve as the hosted event journal.
99
- The deterministic snapshot scheduler explored 288 mutation schedules, including actual before/after commit transitions. All converged; lower-C0 schedules deliberately admitted duplicates. Both negative controls reproduced a lost committed event.
10-
- The independent pinned-source census classifies 114 extracted interface members and maps 53 required mutations exactly once to 50 normalized command kinds and 101 owned effects. Bidirectional missing/extra and omitted-descriptor fixtures fail closed.
10+
- The independent pinned-source census classifies 123 extracted interface members and maps 53 required mutations exactly once to 50 normalized command kinds and 101 owned effects. Bidirectional missing/extra and omitted-descriptor fixtures fail closed.
1111
- The external ownership gate compares 49 required W1/W5 API members against the W1 API parity ledger and fails generation on a missing row or primary command-owner drift. Coordinator effects remain owned by the primary command feature; published secondary effects retain their distinct effect owner.
1212
- The recovery scheduler executed 52 real two-process crash/restart schedules. Every attempt exited at its scheduled boundary, a different PID reloaded only durable command/provider files, and exact post-restart state/effect/compensation/publication counts passed. Stale, coincidentally equal, mismatched-operation and lost-response negative controls all fail closed.
1313
- Current task/inbox/provider lookup and active-writer coordination remain unproved by W3, so those external effects are `non_reconcilable`/`operator_required`; a future operation-ID class remains only a candidate until independently exercised. Same-key changed intent resolves to `idempotency_mismatch`.

docs/research/hosted-web/phase-0/recovery-events/command-catalog.json

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -127,23 +127,32 @@
127127
"ReviewAPI.unwatchFiles",
128128
"ReviewAPI.onExternalFileChange",
129129
"ReviewAPI.loadDecisions",
130+
"ReviewAPI.loadDraftHistory",
130131
"ReviewAPI.onCmdN",
131132
"ReviewAPI.getGitFileLog"
132133
],
133134
"deferredOutsideHostedV1": [
135+
"ReviewAPI.executeMutation",
136+
"ReviewAPI.retryMutationRecovery",
137+
"ReviewAPI.restoreHistory",
138+
"ReviewAPI.deleteEditedFile",
139+
"ReviewAPI.restoreRejectedRename",
140+
"ReviewAPI.reapplyRejectedRename",
141+
"ReviewAPI.saveDraftHistoryEntry",
142+
"ReviewAPI.clearDraftHistory",
134143
"OpenCodeRuntimeControlApi.answerOpenCodeRuntimePermission",
135144
"ScheduleAPI mutations",
136145
"terminal input/tab/split commands"
137146
],
138-
"observedSurfaceCount": 114,
147+
"observedSurfaceCount": 123,
139148
"observedMethodCount": 53,
140149
"dispositionCounts": {
141-
"extracted": 114,
142-
"dispositions": 114,
150+
"extracted": 123,
151+
"dispositions": 123,
143152
"required": 53,
144-
"query": 45,
153+
"query": 46,
145154
"ephemeral": 15,
146-
"deferred": 1
155+
"deferred": 9
147156
},
148157
"sourceFiles": [
149158
"src/shared/types/api.ts",

docs/research/hosted-web/phase-0/recovery-events/mutation-census.json

Lines changed: 94 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,14 @@
77
"src/shared/types/api.ts",
88
"src/main/services/team/runtime-control/application/OpenCodeRuntimeControlApi.ts"
99
],
10-
"rowCount": 114,
10+
"rowCount": 123,
1111
"dispositionCounts": {
12-
"extracted": 114,
13-
"dispositions": 114,
12+
"extracted": 123,
13+
"dispositions": 123,
1414
"required": 53,
15-
"query": 45,
15+
"query": 46,
1616
"ephemeral": 15,
17-
"deferred": 1
17+
"deferred": 9
1818
},
1919
"rows": [
2020
{
@@ -925,6 +925,36 @@
925925
"commandKind": "review.apply_decisions",
926926
"sourceObserved": true
927927
},
928+
{
929+
"id": "ReviewAPI.executeMutation",
930+
"interfaceName": "ReviewAPI",
931+
"sourceMethod": "executeMutation",
932+
"sourceFile": "src/shared/types/api.ts",
933+
"disposition": "deferred",
934+
"owner": "team-review",
935+
"reason": "hosted HTTP explicitly rejects this mutation and no admitted command descriptor exists",
936+
"sourceObserved": true
937+
},
938+
{
939+
"id": "ReviewAPI.retryMutationRecovery",
940+
"interfaceName": "ReviewAPI",
941+
"sourceMethod": "retryMutationRecovery",
942+
"sourceFile": "src/shared/types/api.ts",
943+
"disposition": "deferred",
944+
"owner": "team-review",
945+
"reason": "hosted HTTP explicitly rejects this mutation and no admitted command descriptor exists",
946+
"sourceObserved": true
947+
},
948+
{
949+
"id": "ReviewAPI.restoreHistory",
950+
"interfaceName": "ReviewAPI",
951+
"sourceMethod": "restoreHistory",
952+
"sourceFile": "src/shared/types/api.ts",
953+
"disposition": "deferred",
954+
"owner": "team-review",
955+
"reason": "hosted HTTP explicitly rejects this mutation and no admitted command descriptor exists",
956+
"sourceObserved": true
957+
},
928958
{
929959
"id": "ReviewAPI.checkConflict",
930960
"interfaceName": "ReviewAPI",
@@ -973,6 +1003,36 @@
9731003
"commandKind": "review.save_edited_file",
9741004
"sourceObserved": true
9751005
},
1006+
{
1007+
"id": "ReviewAPI.deleteEditedFile",
1008+
"interfaceName": "ReviewAPI",
1009+
"sourceMethod": "deleteEditedFile",
1010+
"sourceFile": "src/shared/types/api.ts",
1011+
"disposition": "deferred",
1012+
"owner": "team-review",
1013+
"reason": "hosted HTTP explicitly rejects this mutation and no admitted command descriptor exists",
1014+
"sourceObserved": true
1015+
},
1016+
{
1017+
"id": "ReviewAPI.restoreRejectedRename",
1018+
"interfaceName": "ReviewAPI",
1019+
"sourceMethod": "restoreRejectedRename",
1020+
"sourceFile": "src/shared/types/api.ts",
1021+
"disposition": "deferred",
1022+
"owner": "team-review",
1023+
"reason": "hosted HTTP explicitly rejects this mutation and no admitted command descriptor exists",
1024+
"sourceObserved": true
1025+
},
1026+
{
1027+
"id": "ReviewAPI.reapplyRejectedRename",
1028+
"interfaceName": "ReviewAPI",
1029+
"sourceMethod": "reapplyRejectedRename",
1030+
"sourceFile": "src/shared/types/api.ts",
1031+
"disposition": "deferred",
1032+
"owner": "team-review",
1033+
"reason": "hosted HTTP explicitly rejects this mutation and no admitted command descriptor exists",
1034+
"sourceObserved": true
1035+
},
9761036
{
9771037
"id": "ReviewAPI.watchFiles",
9781038
"interfaceName": "ReviewAPI",
@@ -1029,6 +1089,35 @@
10291089
"commandKind": "review.clear_decisions",
10301090
"sourceObserved": true
10311091
},
1092+
{
1093+
"id": "ReviewAPI.loadDraftHistory",
1094+
"interfaceName": "ReviewAPI",
1095+
"sourceMethod": "loadDraftHistory",
1096+
"sourceFile": "src/shared/types/api.ts",
1097+
"disposition": "query",
1098+
"owner": "team-review",
1099+
"sourceObserved": true
1100+
},
1101+
{
1102+
"id": "ReviewAPI.saveDraftHistoryEntry",
1103+
"interfaceName": "ReviewAPI",
1104+
"sourceMethod": "saveDraftHistoryEntry",
1105+
"sourceFile": "src/shared/types/api.ts",
1106+
"disposition": "deferred",
1107+
"owner": "team-review",
1108+
"reason": "hosted HTTP explicitly rejects this mutation and no admitted command descriptor exists",
1109+
"sourceObserved": true
1110+
},
1111+
{
1112+
"id": "ReviewAPI.clearDraftHistory",
1113+
"interfaceName": "ReviewAPI",
1114+
"sourceMethod": "clearDraftHistory",
1115+
"sourceFile": "src/shared/types/api.ts",
1116+
"disposition": "deferred",
1117+
"owner": "team-review",
1118+
"reason": "hosted HTTP explicitly rejects this mutation and no admitted command descriptor exists",
1119+
"sourceObserved": true
1120+
},
10321121
{
10331122
"id": "ReviewAPI.onCmdN",
10341123
"interfaceName": "ReviewAPI",

docs/research/hosted-web/phase-0/recovery-events/mutation-surface-manifest.json

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -837,6 +837,33 @@
837837
"owner": "team-review",
838838
"commandKind": "review.apply_decisions"
839839
},
840+
{
841+
"id": "ReviewAPI.executeMutation",
842+
"interfaceName": "ReviewAPI",
843+
"sourceMethod": "executeMutation",
844+
"sourceFile": "src/shared/types/api.ts",
845+
"disposition": "deferred",
846+
"owner": "team-review",
847+
"reason": "hosted HTTP explicitly rejects this mutation and no admitted command descriptor exists"
848+
},
849+
{
850+
"id": "ReviewAPI.retryMutationRecovery",
851+
"interfaceName": "ReviewAPI",
852+
"sourceMethod": "retryMutationRecovery",
853+
"sourceFile": "src/shared/types/api.ts",
854+
"disposition": "deferred",
855+
"owner": "team-review",
856+
"reason": "hosted HTTP explicitly rejects this mutation and no admitted command descriptor exists"
857+
},
858+
{
859+
"id": "ReviewAPI.restoreHistory",
860+
"interfaceName": "ReviewAPI",
861+
"sourceMethod": "restoreHistory",
862+
"sourceFile": "src/shared/types/api.ts",
863+
"disposition": "deferred",
864+
"owner": "team-review",
865+
"reason": "hosted HTTP explicitly rejects this mutation and no admitted command descriptor exists"
866+
},
840867
{
841868
"id": "ReviewAPI.checkConflict",
842869
"interfaceName": "ReviewAPI",
@@ -880,6 +907,33 @@
880907
"owner": "team-review",
881908
"commandKind": "review.save_edited_file"
882909
},
910+
{
911+
"id": "ReviewAPI.deleteEditedFile",
912+
"interfaceName": "ReviewAPI",
913+
"sourceMethod": "deleteEditedFile",
914+
"sourceFile": "src/shared/types/api.ts",
915+
"disposition": "deferred",
916+
"owner": "team-review",
917+
"reason": "hosted HTTP explicitly rejects this mutation and no admitted command descriptor exists"
918+
},
919+
{
920+
"id": "ReviewAPI.restoreRejectedRename",
921+
"interfaceName": "ReviewAPI",
922+
"sourceMethod": "restoreRejectedRename",
923+
"sourceFile": "src/shared/types/api.ts",
924+
"disposition": "deferred",
925+
"owner": "team-review",
926+
"reason": "hosted HTTP explicitly rejects this mutation and no admitted command descriptor exists"
927+
},
928+
{
929+
"id": "ReviewAPI.reapplyRejectedRename",
930+
"interfaceName": "ReviewAPI",
931+
"sourceMethod": "reapplyRejectedRename",
932+
"sourceFile": "src/shared/types/api.ts",
933+
"disposition": "deferred",
934+
"owner": "team-review",
935+
"reason": "hosted HTTP explicitly rejects this mutation and no admitted command descriptor exists"
936+
},
883937
{
884938
"id": "ReviewAPI.watchFiles",
885939
"interfaceName": "ReviewAPI",
@@ -930,6 +984,32 @@
930984
"owner": "team-review",
931985
"commandKind": "review.clear_decisions"
932986
},
987+
{
988+
"id": "ReviewAPI.loadDraftHistory",
989+
"interfaceName": "ReviewAPI",
990+
"sourceMethod": "loadDraftHistory",
991+
"sourceFile": "src/shared/types/api.ts",
992+
"disposition": "query",
993+
"owner": "team-review"
994+
},
995+
{
996+
"id": "ReviewAPI.saveDraftHistoryEntry",
997+
"interfaceName": "ReviewAPI",
998+
"sourceMethod": "saveDraftHistoryEntry",
999+
"sourceFile": "src/shared/types/api.ts",
1000+
"disposition": "deferred",
1001+
"owner": "team-review",
1002+
"reason": "hosted HTTP explicitly rejects this mutation and no admitted command descriptor exists"
1003+
},
1004+
{
1005+
"id": "ReviewAPI.clearDraftHistory",
1006+
"interfaceName": "ReviewAPI",
1007+
"sourceMethod": "clearDraftHistory",
1008+
"sourceFile": "src/shared/types/api.ts",
1009+
"disposition": "deferred",
1010+
"owner": "team-review",
1011+
"reason": "hosted HTTP explicitly rejects this mutation and no admitted command descriptor exists"
1012+
},
9331013
{
9341014
"id": "ReviewAPI.onCmdN",
9351015
"interfaceName": "ReviewAPI",

0 commit comments

Comments
 (0)