Skip to content

Commit 5afb5b7

Browse files
Sync Boatstack from Intelligence Flow Labs @ 64d586468baf (#118)
Co-authored-by: operator-stack-publisher[bot] <operator-stack-publisher[bot]@users.noreply.github.com>
1 parent 5a6c35f commit 5afb5b7

20 files changed

Lines changed: 848 additions & 94 deletions

CONTRIBUTING.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
# Contributing
44

5-
Boatstack is a generated content distribution. Propose changes to workflow semantics, templates, evidence rules, or generated presentation in [Intelligence Flow](https://github.com/operatorstack/intelligence-flow/tree/dbd5f6e24439cc9798b4b3c8645b5e34f3f3c0b4/labs/12-product-engineering-loop).
5+
Boatstack is a generated content distribution. Propose changes to workflow semantics, templates, evidence rules, or generated presentation in [Intelligence Flow](https://github.com/operatorstack/intelligence-flow/tree/64d586468baf5a7b45a2debbfc747b0d9ec9a233/labs/12-product-engineering-loop).
66

77
The Boatstack repository receives product/runtime changes through a generated pull request. Review the PR's `UPSTREAM.json`, tests, adapter diff, and context-size change; do not hand-edit generated output on `main`. `.github/workflows` is the exception: it is Boatstack's executable control plane, excluded from scheduled projection and changed only through a separate manually reviewed Boatstack PR.
88

UPSTREAM.json

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
},
1313
"files": {
1414
".gitignore": "a7079e923a776f14f1bb3a6aa0a11a133a8e1dfb35af020f327623357b7e3957",
15-
"CONTRIBUTING.md": "f4661ce261ab80742282fcfe23bc42a1f155dc0ea4a2484ff6333493e2d059d1",
15+
"CONTRIBUTING.md": "2c757dbb0038f032fe541d105efc60c0d34378aec0bf2dd87ac42c738495ce34",
1616
"README.md": "3ce3e95e511089b44e946a44b8d5f4f81d019ece5336db65b2cab1f9dc4d4dad",
1717
"assets/boatstack-journey.svg": "e465befc50c8ce30f3e07e8fd97012931beeb053392c8fbf38ad645023b3cc63",
1818
"assets/boatstack-mark.svg": "be1f984da1bfa69fa5d1f986d8343d21f7e20921b71db888c928b4d2e54b09b5",
@@ -40,14 +40,14 @@
4040
"boatstack/capture_test.go": "63fa1177738081f1e862364d7a4257f5e259f8e9c36276ba1775b8085b277105",
4141
"boatstack/changelog.go": "6b06be7cd9738de29ba6e87aa2569f3b027a2e618b04524f5abd7abaa17945bf",
4242
"boatstack/changelog_test.go": "ce792f23a7fe1e09fb3096cd1314130a6ab69321d4877b12a8e994027541baf7",
43-
"boatstack/cmd/boatstack-helper/coverage_conformance_test.go": "aff3bbada81820f9b77c0f4339c6e78e6489e1b82176b57129b5102664ada5a8",
43+
"boatstack/cmd/boatstack-helper/coverage_conformance_test.go": "d7802c45129b3a14921120a0806d598a26ef052442539d789579eb13da16b7d6",
4444
"boatstack/cmd/boatstack-helper/flow.go": "5ab24541d3f85c2f442730d3122d18eb6676600bc11fde4805e803a25a8300c7",
45-
"boatstack/cmd/boatstack-helper/main.go": "7575dfbf03fd1ca0f7f3f5d519750a5b1fa81ff02a89547c053d94769e580b1b",
45+
"boatstack/cmd/boatstack-helper/main.go": "b3983742991ed193b6e13d9a84192bf4bfdc7536a8bd6b022255ca5ba4124982",
4646
"boatstack/cmd/boatstack-helper/main_test.go": "b36c52d6d5c9dd2428730de10ff18194b7e32a98722e41341c301c6f7a04cad5",
4747
"boatstack/command.go": "4726ac515dedab4947be7eb48f88c6cb8b53d674124504b69f03e6396b080ee8",
4848
"boatstack/command_test.go": "9f707abba3640add81c3e97ba7e72fedbf98f3394b1c060a9ca4b4a28e919968",
4949
"boatstack/compiled_artifact_resolution_test.go": "0748d67643263e698211eb04d46464e1dd3db15d94537f5fd5092b5aa689745b",
50-
"boatstack/config_documentation_test.go": "0632366edc5e88145bb080083ea03c6515da07b0162ce404d63e51bb5bc0774e",
50+
"boatstack/config_documentation_test.go": "aaecea04ee178ecf7872fff23a64014a3968dce1e7624e61a9453567e99969a9",
5151
"boatstack/decision.go": "257ca328da6ae19ab252f10ee5d06bd7daf49dd8141d083ab1b32f106ea7a94c",
5252
"boatstack/decision_test.go": "1a92ff832610f9559bd47ccac7fc1755a8b4f8261c35bc72a092830dff05f7c0",
5353
"boatstack/delivery.go": "86150374b14982b1e589714d6ef6230348ef57b6824d4e1552b72289c044af4b",
@@ -57,11 +57,11 @@
5757
"boatstack/delivery_reactivation_test.go": "573a2dba0034bc4290478414e3bdd8670b06a326128eb0295d77e748ecc8689e",
5858
"boatstack/delivery_test.go": "45c48ff7581c911bcaf821c3e4241d4ae2a9bb4aa682485cc58b6ad8fe1c85bf",
5959
"boatstack/deliverycontrol_parity_test.go": "f8662cfc35043395a0e1eef8a87051c2120752f38b09c56b78f82896008f1b65",
60-
"boatstack/denial.go": "10ac51d100ae5d6cd167d63d7c1c7721c96e09c29e6290177a9bda13b61427f9",
60+
"boatstack/denial.go": "656dc5e71a11daba25e7a23599f2e1aafa7a7439589af943cdccc72154a45816",
6161
"boatstack/denial_test.go": "c480c0b2a489838b22b4d5ec20cc30ef1859cc0820a75974bc56a46c31f90041",
6262
"boatstack/docs/control-law-scoping.md": "0ae984821248eabda8c0eeaf201b367991e6742984e7c718df20ecc24caee475",
6363
"boatstack/evidence.go": "497a31e6ff632cb1d7c3adfc9f269af3f6aa84e948dd5d417c162767542a27df",
64-
"boatstack/export.go": "b3e28b571024b1b7a97b28f226f7c89734c95dcf1854c3d1a6dc672f34d4ded7",
64+
"boatstack/export.go": "1a01d19ac6e8418febf93f9ebf1a466a46da4b09eea7bafe6ccfb6cfb0f73a6d",
6565
"boatstack/export_test.go": "dce5aa3ab5499c82d05859cf86b46dfcee308482491366d83e10ca3fb8605bb6",
6666
"boatstack/flow_coding.go": "9fa53a0204f98a25f97775c3acf37392a591c14ce850b44aa587b5806e770bb9",
6767
"boatstack/flow_coding_test.go": "dddcd7a85892d4fa10af42739d4c1ff265721b0313e27b6e7a1bbb019d5c3b51",
@@ -115,7 +115,7 @@
115115
"boatstack/mutation_test.go": "68d5049c7f96c1ac558e4c781151f67e8deee2f8d6b9bf293b90d44e769ef7c6",
116116
"boatstack/mutation_undo.go": "697d11b600a276ddbcabe6a9f8040d4f7283e017a0e8fd689ef53a274638946c",
117117
"boatstack/mutation_undo_test.go": "39540e717e3f2136bf975594043a3db9072b28ebe61c6cb0b982cea5e8b1e14e",
118-
"boatstack/next.go": "39d813c96a6a5119efcabda0f59ce7c6faf91e5e76c77c7be999bf85f43de284",
118+
"boatstack/next.go": "f11e1b5c93a362438663a663e126ea75fd1042453c907fc335fee543bf76c43d",
119119
"boatstack/next_banner_test.go": "c431a6987ed1e479442fc9f5db4371632880b92aa790fa9dd0f5285293352c41",
120120
"boatstack/next_test.go": "d442d22023831ba39fcfbbf73f1a2da4170a83fc2aab5ce1b44f10cf9d88e173",
121121
"boatstack/operation.go": "35142d24e166bc400229d233757b6ab185f94b01a3c11be49da33b7f123189a2",
@@ -139,7 +139,7 @@
139139
"boatstack/reexec_unix.go": "ff86157a9aa20c82a56fcd859b70669b7eacf4e0a9f61a4546ef33808437939e",
140140
"boatstack/reexec_windows.go": "f5335c8c28cb4e89048b058b1c4d12f78644f99acb4f6167ff60e622dfb9e742",
141141
"boatstack/references/artifacts.md": "5fa888ac519085d65cee1d04df5902761651bcf2d7af81711fa0f8ecd1fc0f59",
142-
"boatstack/references/config-schema.md": "0170b90f1d0a592f58e255ffeff642fa037676042443f74a0f1b6e39be5dbbb8",
142+
"boatstack/references/config-schema.md": "fa5e09d008101957cf5577e9031de256ab682711c3fa21fa9494cd600ddbd2f0",
143143
"boatstack/references/failure-moves.md": "b65ef72035afa6ad0dce589a0b38f84bc40cde3864c9ecf973f08fc687f001c3",
144144
"boatstack/references/host-hook-contracts.md": "2a89d44d0e418a53f2e3b6300fed957cdf878f45ea97ce24b55b66065f0eaa1d",
145145
"boatstack/references/irreversible-operation-boundary.md": "e0076f0fea3bf729b2e9bdf353eaeaaf7cdafabfaf26b8d9b27287e5414c2441",
@@ -150,12 +150,12 @@
150150
"boatstack/repair_state_test.go": "f3779ac47c3db3927175a545728d3b2e020dbc85f41394d8235753b52afc3739",
151151
"boatstack/run.go": "74967ad5b3ed3847baffec1231aae69a81a70f9cce3a9412fa05bcfdc4eca6d1",
152152
"boatstack/run_test.go": "5b291510fa90cefdc26eb89e18a3443385456a6ebc73408325ac1945b7c084d6",
153-
"boatstack/runtime.go": "d1e95895002ea2b27199b6e05b33c4c6e20f63455a44f63ca3cfeedecfc23420",
153+
"boatstack/runtime.go": "11f741d45994c336e927121ede2481c94d5c33ed9c3beecf89f760450b304da3",
154154
"boatstack/runtime_cache.go": "89834409b426dce292fd810a091de1433fefbfba9249d8c1e31ccc40f0d5dbd6",
155155
"boatstack/runtime_cache_test.go": "b981467ddc9f0f562da6bff5de7a80a9fe5a433a0317541d1e48df268546ac85",
156156
"boatstack/runtime_provenance_test.go": "1d52f1e6b0691cf4667729cc9b9f3c55c128f0aa3321f3a2843a9aa6fd0e73dc",
157-
"boatstack/safety.go": "5ea64b051d5409b1a4a1731135f95afae31465ea328722fbb8b193260a663de3",
158-
"boatstack/safety_test.go": "01f28bc3bfcb6bdd47b307e309e36bbc1921b6426ad0b777d81fe4131200c37e",
157+
"boatstack/safety.go": "f8a6b5426893b021c8dd5079432e541150136c65584feb3404afa6f7ff4aa52f",
158+
"boatstack/safety_test.go": "2741610de4b8a47d66b1a5f18a028ab63417826789636587745b4e71dd2d59c3",
159159
"boatstack/safety_update_publisher_test.go": "ed3f8187036623694dfe7c395cdae00fdae14609bab6124d1fdfc6fe73fa2196",
160160
"boatstack/skill_frontmatter.go": "73364df463ce828c2d005aab55f72bb92f7a34d99cf3f53d4e0cd5a4da9dbd0e",
161161
"boatstack/skill_frontmatter_test.go": "a3ec52e7df357a72265c95dd66db15d9c0effc7e5f90f14ce69c27792ce394eb",
@@ -171,18 +171,19 @@
171171
"boatstack/visual_evidence_test.go": "0fe8f5154ef4398dfeba5e7f7b387b2d279ed75635ea35d93ff392269f2cc6d0",
172172
"boatstack/visual_publisher.go": "330511d000e712fa37c52af17d59c8ec9cb41f49c773a517f856651e66a60d25",
173173
"boatstack/visual_publisher_test.go": "979f600edae00c77569ae753b80530e8cbf2e3b342995efcd992d351ff382eaf",
174-
"boatstack/workspace.go": "91b343400b3506a6f516c28fabc3f1575f22024a5b19f934a020be660a20482e",
174+
"boatstack/workspace.go": "c21f312a8b631b5cf65de397e24e1b9c7197ebcb73e5c26804e36f136f84fdbb",
175+
"boatstack/workspace_reap_test.go": "a08f41ee1b2d158efe878082b5fcd65928e723afce4dd19e3a5a8a26b8f10874",
175176
"boatstack/workspace_sync.go": "0cc2f03fd1aa57c66b3d603d5ef30aa820f14ab60771a795cf10c46f3c9a71b8",
176177
"boatstack/workspace_sync_test.go": "a5fd532d23a6675c96fc5eb29a149c812717f21237a4050ae5f41afb34601273",
177-
"boatstack/workspace_test.go": "ea022ab13cf593c84cf053eca8dad345aae656d3e089b0ae68a4ba7e7cdc87c6",
178+
"boatstack/workspace_test.go": "e0e38c14b7e218053eb6e8b900412ed4c6da8a19ecdde26cb22b1a2af7a3695d",
178179
"docs/account-recovery-walkthrough.md": "676034974594a7d1a559b24dbed31d7ccc429eb81404b203ca07bbdaa19ec3d3",
179180
"docs/benchmark-corpus-audit.md": "f2d206fe8579a514f9da82b2c96c19b343ac004be67617e1bd34f0f8e0e5e6c6",
180181
"docs/benchmark-submission-audit.md": "9518abdd17690729c6423f87cab20418ed47b0915b5faa44b9ef975e9e9c3b79",
181-
"docs/configuration.md": "df054f49d532c8b1b7d94184810d1b3b5bf18cdc30eb985b4b6d0639162e341a",
182-
"docs/evidence-engineered-coding.md": "3c7c1ba355eb11306ed0990b4fbf7b139bd733dd356fd596c0a81bed15460ae3",
182+
"docs/configuration.md": "060775c73431f28bd16066bdf9e0f89034d2855c7ca0f5544f660d24b91211d0",
183+
"docs/evidence-engineered-coding.md": "b9851a7c40f39f4f799f8576292ae3c15cdfbf935ca1baa28ab24ea8e556665c",
183184
"docs/generated-files.md": "437791765b0a4015032ae21d1a6618563cad92b7402819e4f963bf5ae16284a3",
184185
"docs/getting-started.md": "1dd4f4e2e636cc5adfc2f79939629701e171087c3d5e558cf919548b9224adfd",
185-
"docs/public-claims.json": "388c9d265b989d94075ca0d3fbe237414d8cfc9bc3edf5746552d42049321f3b",
186+
"docs/public-claims.json": "9cee0f39f2389c4a1f6bda2fc4186f143ed8065e99a58623c185eed6326362a3",
186187
"docs/public-surface.md": "713f7a050b5f339cf948299103ef3800417dccfecf2cc1a4166397ea6f978907",
187188
"docs/research-and-design.md": "8d78678108f0a6c924e1ff9b32c0f81aae9d1f779e0082843b6f99ad993ae2b6",
188189
"docs/safety.md": "7b9b5c515d36e683767ec8d3d9d6d119ac93650b2f629d351deadd4c600ed6a6",
@@ -196,7 +197,7 @@
196197
"labs/diagram-json/compiled/evidence.md": "1ba1c989ade070a8ef9a508fbd788d100d7292f2dbacbb2bce895468019f619d",
197198
"labs/diagram-json/compiled/tasks.json": "88f60851abf79d851e9fccc754ff3040034ae595306bc87d64784c19eb403e71",
198199
"labs/diagram-json/compiled/test-matrix.json": "424657ff505768e50fa113801fd8363364a18269d5297480907a993d44063a39",
199-
"labs/diagram-json/plan.lock.json": "9a1c7fded38aaa2c498f9cfb18de9cc7ee2428f299052f266831bd1bee63b9f7",
200+
"labs/diagram-json/plan.lock.json": "db3338f91bb12226693d021033cd9228dc4747a917d5c00341fc4d48e3a77ae8",
200201
"labs/diagram-json/plan.md": "3cc4f533b8d69386deff16b3a594a3ba09d4c0c3db636cccd8c4380084ce6a51",
201202
"labs/diagram-json/questions.md": "74733b015002c8a6777c558e7e997fa48c94850b9bd39054fe9366c97ecf728d",
202203
"labs/diagram-json/request.md": "0808fc41c36779c404f4a3a121167da6e76cac56df526e70f9ed6d3e0d4c02ed",
@@ -303,12 +304,13 @@
303304
"release-notes/2026-07-26-calm-denials.md": "9e4a5fc23b02500cf2f124cb462a8d863ed953a899c9485a81e4971dd89c9576",
304305
"release-notes/2026-07-26-guard-etxtbsy-retry.md": "4238591804be62f8b9a76dd5cda18923af60ef67932d40d70cab0d815124bcaf",
305306
"release-notes/2026-07-26-guard-hydrate-double-check.md": "83a5591aba6bf30c9f4008ba8d26bf1994ef3fd61145f46fcdd1678912b9990b",
306-
"release-notes/2026-07-26-hidden-jflow-design-note.md": "f60ed9dbbfb46a172ac9d33dd758a3166f820007b1673029f29f0fbefa0e5c0a"
307+
"release-notes/2026-07-26-hidden-jflow-design-note.md": "f60ed9dbbfb46a172ac9d33dd758a3166f820007b1673029f29f0fbefa0e5c0a",
308+
"release-notes/2026-07-26-workspace-reap.md": "e691d6a1c232cf218157880655413005fcb2c4f3113ededffdb80899a5054bb8"
307309
},
308310
"generator": "operatorstack/intelligence-flow:boatstack-distribution",
309311
"schema_version": 1,
310312
"source": {
311-
"commit": "dbd5f6e24439cc9798b4b3c8645b5e34f3f3c0b4",
313+
"commit": "64d586468baf5a7b45a2debbfc747b0d9ec9a233",
312314
"path": "labs/12-product-engineering-loop",
313315
"repository": "operatorstack/intelligence-flow"
314316
}

boatstack/cmd/boatstack-helper/coverage_conformance_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ var nonDeliveryVerbs = map[string]bool{
7070
"bootstrap-safety-hook": true,
7171
"workspace-cut": true,
7272
"workspace-cleanup": true,
73+
"workspace-reap": true,
7374
"workspace-sync": true,
7475
// Flow layer itself is read-only navigation over the machine, not a transition.
7576
"flow": true,

boatstack/cmd/boatstack-helper/main.go

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1189,6 +1189,29 @@ func workspaceCleanupCommand(arguments []string) int {
11891189
return 0
11901190
}
11911191

1192+
func workspaceReapCommand(arguments []string) int {
1193+
flags := flag.NewFlagSet("workspace-reap", flag.ContinueOnError)
1194+
repo := flags.String("repo", ".", "repository whose terminal workspaces should be reclaimed")
1195+
confirm := flags.Bool("confirm", false, "operator confirmation to reclaim the merged or abandoned workspaces")
1196+
force := flags.Bool("force", false, "override the merge gate and discard uncommitted or unmerged work")
1197+
if err := flags.Parse(arguments); err != nil {
1198+
return 2
1199+
}
1200+
result, err := boatstack.ReapWorkspaces(boatstack.WorkspaceReapOptions{Repo: *repo, Confirm: *confirm, Force: *force})
1201+
if err != nil {
1202+
return fail(err)
1203+
}
1204+
value, err := boatstack.MarshalJSON(result)
1205+
if err != nil {
1206+
return fail(err)
1207+
}
1208+
fmt.Print(string(value))
1209+
if result.VerificationStatus == "BLOCKED" {
1210+
return 1
1211+
}
1212+
return 0
1213+
}
1214+
11921215
func workspaceStatusCommand(arguments []string) int {
11931216
flags := flag.NewFlagSet("workspace-status", flag.ContinueOnError)
11941217
repo := flags.String("repo", ".", "repository to inspect")
@@ -1236,7 +1259,7 @@ func workspaceSyncCommand(arguments []string) int {
12361259

12371260
func run() int {
12381261
if len(os.Args) < 2 {
1239-
fmt.Fprintln(os.Stderr, "usage: boatstack-helper <init|update|check-update|repair-status|operation-status|prepare-update-pr|publish-update-pr|release-classify|next-patch|export|check-source-plan|planning-write|check-plan|record-approval|activate-plan|delivery-status|next-status|recovery-status|repair-state|mutation-status|undo|run-preflight|record-change|ignore-delivery|record-delivery-gate|record-pr-visual-evidence|capture-evidence|provision-capability|capability-register|record-pr-visual-publication|check-safety|migrate-config|safety-hook|diagnose-hook|render-denial|pr-context|check-pr|publish-pr|workspace-cut|workspace-cleanup|workspace-status|workspace-sync|flow|doctor|version>")
1262+
fmt.Fprintln(os.Stderr, "usage: boatstack-helper <init|update|check-update|repair-status|operation-status|prepare-update-pr|publish-update-pr|release-classify|next-patch|export|check-source-plan|planning-write|check-plan|record-approval|activate-plan|delivery-status|next-status|recovery-status|repair-state|mutation-status|undo|run-preflight|record-change|ignore-delivery|record-delivery-gate|record-pr-visual-evidence|capture-evidence|provision-capability|capability-register|record-pr-visual-publication|check-safety|migrate-config|safety-hook|diagnose-hook|render-denial|pr-context|check-pr|publish-pr|workspace-cut|workspace-cleanup|workspace-reap|workspace-status|workspace-sync|flow|doctor|version>")
12401263
return 2
12411264
}
12421265
switch os.Args[1] {
@@ -1326,6 +1349,8 @@ func run() int {
13261349
return workspaceCutCommand(os.Args[2:])
13271350
case "workspace-cleanup":
13281351
return workspaceCleanupCommand(os.Args[2:])
1352+
case "workspace-reap":
1353+
return workspaceReapCommand(os.Args[2:])
13291354
case "workspace-status":
13301355
return workspaceStatusCommand(os.Args[2:])
13311356
case "workspace-sync":

boatstack/config_documentation_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ func TestPublicConfigurationGuideContainsOnlySupportedUserControls(t *testing.T)
131131
"workspace.cleanup_after",
132132
"workspace.enabled",
133133
"workspace.mode",
134+
"workspace.reap",
134135
}
135136
document := publicConfigurationDocument(t)
136137
got := documentedConfigSurface(t, document, userConfigFieldMarkerPrefix)

boatstack/denial.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -337,7 +337,7 @@ func denialFor(host string, finding SafetyFinding) Denial {
337337

338338
case "workflow-state-tamper":
339339
d.Qualifier = "managed runtime authority"
340-
d.Detail = "Change `.git/boatstack/` only through the command that owns it — a build, test, review, or ship transition for delivery state, or `publish-update-pr` for a version update."
340+
d.Detail = "Change `.git/boatstack/` only through the command that owns it — a build, test, review, or ship transition for delivery state, `publish-update-pr` for a version update, or `workspace-reap` to reclaim a finished worktree and its runtime state."
341341
d.Reassurance = "Nothing was written; your runtime state is unchanged."
342342
d.Hint = "boatstack-helper diagnose-hook"
343343
return d
@@ -417,6 +417,12 @@ func denialFor(host string, finding SafetyFinding) Denial {
417417
d.Detail = "Invoke only the exact project-local workspace-sync helper for the current repository."
418418
d.Reassurance = reassureUntouched
419419
return d
420+
421+
case "filesystem-destruction":
422+
d.Qualifier = "recursive deletion"
423+
d.Detail = "Recursive deletion of a broad or protected path is denied. To reclaim a finished managed worktree and its branch, use `workspace-reap` (or single-feature `workspace-cleanup`); Boatstack removes them through its own sanctioned actuator. For any other path, preserve current state and use fix-forward recovery — destructive deletion is operator-only outside the agent workflow."
424+
d.Reassurance = reassureUntouched
425+
return d
420426
}
421427

422428
// operation-* fallthrough (operation-state-invalid and any other operation-*)

0 commit comments

Comments
 (0)