@topline-build/harness-mcp 0.5.2 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,7 +2,7 @@
2
2
 
3
3
  > Generated from `src/index.ts#BUILD_MCP_TOOLS`. Do not edit this file by hand.
4
4
 
5
- Package: `@topline-build/harness-mcp@0.5.2`
5
+ Package: `@topline-build/harness-mcp@0.6.0`
6
6
  Transport: `stdio`
7
7
  Default protocol: `2025-11-25`
8
8
  Canonical guide: https://topline.build/docs/build-mcp-guide
@@ -359,6 +359,31 @@ Input schema:
359
359
  "minLength": 1,
360
360
  "maxLength": 128,
361
361
  "description": "Optional stable retry key; generated deterministically when omitted."
362
+ },
363
+ "sessionId": {
364
+ "type": "string",
365
+ "format": "uuid"
366
+ },
367
+ "artifactVersionId": {
368
+ "type": "string",
369
+ "format": "uuid",
370
+ "description": "Exact current version from the session or checkout; required with sessionId."
371
+ },
372
+ "idempotencyKey": {
373
+ "type": "string",
374
+ "minLength": 1,
375
+ "maxLength": 128,
376
+ "pattern": "^[A-Za-z0-9._:-]+$"
377
+ },
378
+ "inspectedSourceHash": {
379
+ "type": "string",
380
+ "pattern": "^[0-9a-fA-F]{64}$",
381
+ "description": "Echo the session/source checkout hash; required with sessionId. expectedBundleSha256 separately pins the newly inspected local upload."
382
+ },
383
+ "platformAppDir": {
384
+ "type": "string",
385
+ "minLength": 1,
386
+ "description": "Saved remote app root from an existing-app checkout. Session mode only; preserve this when the local checkout directory has a different name."
362
387
  }
363
388
  },
364
389
  "required": [
@@ -495,6 +520,11 @@ Input schema:
495
520
  "appDir": {
496
521
  "type": "string",
497
522
  "minLength": 1
523
+ },
524
+ "platformAppDir": {
525
+ "type": "string",
526
+ "minLength": 1,
527
+ "description": "Preserve the saved remote source root returned by checkout when inspecting an existing app."
498
528
  }
499
529
  },
500
530
  "required": [
@@ -1605,17 +1635,95 @@ Output schema:
1605
1635
  }
1606
1636
  ```
1607
1637
 
1608
- ### `platform_validate_artifact`
1638
+ ### `platform_get_design_system_state`
1609
1639
 
1610
- Read trusted smoke and health evidence for a private artifact draft without requiring a browser session.
1640
+ Get the tenant Storyboard's published and draft commits, run status, and preview URL before editing or publishing. May reconcile a completed managed draft.
1611
1641
 
1612
- Safety: read-only=true, destructive=false, idempotent=false, open-world=false.
1642
+ Safety: read-only=false, destructive=false, idempotent=false, open-world=false.
1613
1643
 
1614
1644
  Example request:
1615
1645
 
1646
+ ```json
1647
+ {}
1648
+ ```
1649
+
1650
+ Example success:
1651
+
1652
+ ```json
1653
+ {}
1654
+ ```
1655
+
1656
+ Input schema:
1657
+
1616
1658
  ```json
1617
1659
  {
1618
- "artifactId": "00000000-0000-4000-8000-000000000001"
1660
+ "type": "object",
1661
+ "properties": {},
1662
+ "additionalProperties": false
1663
+ }
1664
+ ```
1665
+
1666
+ Output schema:
1667
+
1668
+ ```json
1669
+ {
1670
+ "type": "object",
1671
+ "oneOf": [
1672
+ {
1673
+ "type": "object"
1674
+ },
1675
+ {
1676
+ "type": "object",
1677
+ "properties": {
1678
+ "ok": {
1679
+ "const": false
1680
+ },
1681
+ "error": {
1682
+ "type": "object",
1683
+ "properties": {
1684
+ "code": {
1685
+ "type": "string"
1686
+ },
1687
+ "message": {
1688
+ "type": "string"
1689
+ },
1690
+ "retryable": {
1691
+ "type": "boolean"
1692
+ },
1693
+ "recoveryAction": {
1694
+ "type": "string"
1695
+ }
1696
+ },
1697
+ "required": [
1698
+ "code",
1699
+ "message",
1700
+ "retryable",
1701
+ "recoveryAction"
1702
+ ],
1703
+ "additionalProperties": false
1704
+ }
1705
+ },
1706
+ "required": [
1707
+ "ok",
1708
+ "error"
1709
+ ],
1710
+ "additionalProperties": false
1711
+ }
1712
+ ]
1713
+ }
1714
+ ```
1715
+
1716
+ ### `platform_checkout_design_system`
1717
+
1718
+ Download the exact published tenant Storyboard source into a new local directory for Codex or Claude Code to edit and run with npm ci and npm run storybook. Never overwrites an existing directory.
1719
+
1720
+ Safety: read-only=false, destructive=false, idempotent=false, open-world=true.
1721
+
1722
+ Example request:
1723
+
1724
+ ```json
1725
+ {
1726
+ "targetDir": "<targetDir>"
1619
1727
  }
1620
1728
  ```
1621
1729
 
@@ -1624,14 +1732,9 @@ Example success:
1624
1732
  ```json
1625
1733
  {
1626
1734
  "ok": true,
1627
- "phase": "<phase>",
1628
- "artifactId": "00000000-0000-4000-8000-000000000001",
1629
- "deploymentRecordId": "00000000-0000-4000-8000-000000000003",
1630
- "deploymentState": "<deploymentState>",
1631
- "healthy": true,
1632
- "checkedAt": "<checkedAt>",
1633
- "draftUrl": "<draftUrl>",
1634
- "smoke": {}
1735
+ "directory": "<directory>",
1736
+ "currentCommit": "<currentCommit>",
1737
+ "localCommands": []
1635
1738
  }
1636
1739
  ```
1637
1740
 
@@ -1641,17 +1744,13 @@ Input schema:
1641
1744
  {
1642
1745
  "type": "object",
1643
1746
  "properties": {
1644
- "artifactId": {
1645
- "type": "string",
1646
- "format": "uuid"
1647
- },
1648
- "deploymentRecordId": {
1747
+ "targetDir": {
1649
1748
  "type": "string",
1650
- "format": "uuid"
1749
+ "minLength": 1
1651
1750
  }
1652
1751
  },
1653
1752
  "required": [
1654
- "artifactId"
1753
+ "targetDir"
1655
1754
  ],
1656
1755
  "additionalProperties": false
1657
1756
  }
@@ -1669,50 +1768,24 @@ Output schema:
1669
1768
  "ok": {
1670
1769
  "type": "boolean"
1671
1770
  },
1672
- "phase": {
1673
- "type": "string"
1674
- },
1675
- "artifactId": {
1676
- "type": "string"
1677
- },
1678
- "deploymentRecordId": {
1771
+ "directory": {
1679
1772
  "type": "string"
1680
1773
  },
1681
- "deploymentState": {
1774
+ "currentCommit": {
1682
1775
  "type": "string"
1683
1776
  },
1684
- "healthy": {
1685
- "type": "boolean"
1686
- },
1687
- "checkedAt": {
1688
- "type": [
1689
- "string",
1690
- "null"
1691
- ]
1692
- },
1693
- "draftUrl": {
1694
- "type": [
1695
- "string",
1696
- "null"
1697
- ]
1698
- },
1699
- "smoke": {
1700
- "type": [
1701
- "object",
1702
- "null"
1703
- ]
1777
+ "localCommands": {
1778
+ "type": "array",
1779
+ "items": {
1780
+ "type": "string"
1781
+ }
1704
1782
  }
1705
1783
  },
1706
1784
  "required": [
1707
1785
  "ok",
1708
- "phase",
1709
- "artifactId",
1710
- "deploymentRecordId",
1711
- "deploymentState",
1712
- "healthy",
1713
- "checkedAt",
1714
- "draftUrl",
1715
- "smoke"
1786
+ "directory",
1787
+ "currentCommit",
1788
+ "localCommands"
1716
1789
  ]
1717
1790
  },
1718
1791
  {
@@ -1756,9 +1829,9 @@ Output schema:
1756
1829
  }
1757
1830
  ```
1758
1831
 
1759
- ### `platform_run_artifact_smoke`
1832
+ ### `platform_submit_design_system_draft`
1760
1833
 
1761
- Rerun the trusted draft smoke check and return fresh rendered-page evidence.
1834
+ Package a locally edited Storyboard source directory and submit it as a private draft against exact published and draft revisions. The server validates and builds it before it can be published.
1762
1835
 
1763
1836
  Safety: read-only=false, destructive=false, idempotent=false, open-world=true.
1764
1837
 
@@ -1766,7 +1839,9 @@ Example request:
1766
1839
 
1767
1840
  ```json
1768
1841
  {
1769
- "artifactId": "00000000-0000-4000-8000-000000000001"
1842
+ "localDir": "<localDir>",
1843
+ "expectedCurrentCommit": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
1844
+ "expectedDraftRunId": "00000000-0000-4000-8000-000000000001"
1770
1845
  }
1771
1846
  ```
1772
1847
 
@@ -1775,11 +1850,12 @@ Example success:
1775
1850
  ```json
1776
1851
  {
1777
1852
  "ok": true,
1778
- "phase": "<phase>",
1779
- "artifactId": "00000000-0000-4000-8000-000000000001",
1780
- "deploymentRecordId": "00000000-0000-4000-8000-000000000003",
1781
- "smoke": {},
1782
- "validation": {}
1853
+ "runId": "<runId>",
1854
+ "draftCommit": "<draftCommit>",
1855
+ "draftState": "<draftState>",
1856
+ "previewUrl": "<previewUrl>",
1857
+ "requestId": "<requestId>",
1858
+ "bundleSha256": "<bundleSha256>"
1783
1859
  }
1784
1860
  ```
1785
1861
 
@@ -1789,17 +1865,30 @@ Input schema:
1789
1865
  {
1790
1866
  "type": "object",
1791
1867
  "properties": {
1792
- "artifactId": {
1868
+ "localDir": {
1793
1869
  "type": "string",
1794
- "format": "uuid"
1870
+ "minLength": 1
1795
1871
  },
1796
- "deploymentRecordId": {
1872
+ "expectedCurrentCommit": {
1797
1873
  "type": "string",
1798
- "format": "uuid"
1874
+ "pattern": "^[a-f0-9]{40}$"
1875
+ },
1876
+ "expectedDraftRunId": {
1877
+ "anyOf": [
1878
+ {
1879
+ "type": "string",
1880
+ "format": "uuid"
1881
+ },
1882
+ {
1883
+ "type": "null"
1884
+ }
1885
+ ]
1799
1886
  }
1800
1887
  },
1801
1888
  "required": [
1802
- "artifactId"
1889
+ "localDir",
1890
+ "expectedCurrentCommit",
1891
+ "expectedDraftRunId"
1803
1892
  ],
1804
1893
  "additionalProperties": false
1805
1894
  }
@@ -1817,29 +1906,33 @@ Output schema:
1817
1906
  "ok": {
1818
1907
  "type": "boolean"
1819
1908
  },
1820
- "phase": {
1909
+ "runId": {
1821
1910
  "type": "string"
1822
1911
  },
1823
- "artifactId": {
1912
+ "draftCommit": {
1824
1913
  "type": "string"
1825
1914
  },
1826
- "deploymentRecordId": {
1915
+ "draftState": {
1827
1916
  "type": "string"
1828
1917
  },
1829
- "smoke": {
1830
- "type": "object"
1918
+ "previewUrl": {
1919
+ "type": "string"
1831
1920
  },
1832
- "validation": {
1833
- "type": "object"
1921
+ "requestId": {
1922
+ "type": "string"
1923
+ },
1924
+ "bundleSha256": {
1925
+ "type": "string"
1834
1926
  }
1835
1927
  },
1836
1928
  "required": [
1837
1929
  "ok",
1838
- "phase",
1839
- "artifactId",
1840
- "deploymentRecordId",
1841
- "smoke",
1842
- "validation"
1930
+ "runId",
1931
+ "draftCommit",
1932
+ "draftState",
1933
+ "previewUrl",
1934
+ "requestId",
1935
+ "bundleSha256"
1843
1936
  ]
1844
1937
  },
1845
1938
  {
@@ -1883,17 +1976,19 @@ Output schema:
1883
1976
  }
1884
1977
  ```
1885
1978
 
1886
- ### `platform_plan_artifact_draft_delete`
1979
+ ### `platform_edit_design_system`
1887
1980
 
1888
- Preview cleanup effects and receive the state-bound plan token required for deletion.
1981
+ Start an asynchronous Storyboard draft edit in an existing writable Topline Storyboard conversation. Pass expectedDraftRunId from the last state read (null for no draft); stale or concurrent retries are rejected.
1889
1982
 
1890
- Safety: read-only=true, destructive=false, idempotent=false, open-world=true.
1983
+ Safety: read-only=false, destructive=false, idempotent=false, open-world=true.
1891
1984
 
1892
1985
  Example request:
1893
1986
 
1894
1987
  ```json
1895
1988
  {
1896
- "artifactId": "00000000-0000-4000-8000-000000000001"
1989
+ "conversationId": "00000000-0000-4000-8000-000000000001",
1990
+ "instruction": "<instruction>",
1991
+ "expectedDraftRunId": "00000000-0000-4000-8000-000000000001"
1897
1992
  }
1898
1993
  ```
1899
1994
 
@@ -1901,12 +1996,8 @@ Example success:
1901
1996
 
1902
1997
  ```json
1903
1998
  {
1904
- "ok": true,
1905
- "phase": "<phase>",
1906
- "artifactId": "00000000-0000-4000-8000-000000000001",
1907
- "eligible": true,
1908
- "effects": {},
1909
- "planToken": "example-plan-token"
1999
+ "runId": "<runId>",
2000
+ "previewUrl": "<previewUrl>"
1910
2001
  }
1911
2002
  ```
1912
2003
 
@@ -1916,13 +2007,31 @@ Input schema:
1916
2007
  {
1917
2008
  "type": "object",
1918
2009
  "properties": {
1919
- "artifactId": {
2010
+ "conversationId": {
1920
2011
  "type": "string",
1921
2012
  "format": "uuid"
2013
+ },
2014
+ "instruction": {
2015
+ "type": "string",
2016
+ "minLength": 1,
2017
+ "maxLength": 10000
2018
+ },
2019
+ "expectedDraftRunId": {
2020
+ "anyOf": [
2021
+ {
2022
+ "type": "string",
2023
+ "format": "uuid"
2024
+ },
2025
+ {
2026
+ "type": "null"
2027
+ }
2028
+ ]
1922
2029
  }
1923
2030
  },
1924
2031
  "required": [
1925
- "artifactId"
2032
+ "conversationId",
2033
+ "instruction",
2034
+ "expectedDraftRunId"
1926
2035
  ],
1927
2036
  "additionalProperties": false
1928
2037
  }
@@ -1937,32 +2046,16 @@ Output schema:
1937
2046
  {
1938
2047
  "type": "object",
1939
2048
  "properties": {
1940
- "ok": {
1941
- "type": "boolean"
1942
- },
1943
- "phase": {
1944
- "type": "string"
1945
- },
1946
- "artifactId": {
2049
+ "runId": {
1947
2050
  "type": "string"
1948
2051
  },
1949
- "eligible": {
1950
- "type": "boolean"
1951
- },
1952
- "effects": {
1953
- "type": "object"
1954
- },
1955
- "planToken": {
2052
+ "previewUrl": {
1956
2053
  "type": "string"
1957
2054
  }
1958
2055
  },
1959
2056
  "required": [
1960
- "ok",
1961
- "phase",
1962
- "artifactId",
1963
- "eligible",
1964
- "effects",
1965
- "planToken"
2057
+ "runId",
2058
+ "previewUrl"
1966
2059
  ]
1967
2060
  },
1968
2061
  {
@@ -2006,9 +2099,9 @@ Output schema:
2006
2099
  }
2007
2100
  ```
2008
2101
 
2009
- ### `platform_delete_artifact_draft`
2102
+ ### `platform_publish_design_system`
2010
2103
 
2011
- Permanently remove an unpromoted private draft created by this MCP connection after exact-id confirmation.
2104
+ Publish the exact reviewed Storyboard draft after its build passes. Managed edits require their writable Storyboard conversation; local submissions require the submitting actor. Always pass state-bound run, draft, and current commits.
2012
2105
 
2013
2106
  Safety: read-only=false, destructive=true, idempotent=false, open-world=true.
2014
2107
 
@@ -2016,9 +2109,9 @@ Example request:
2016
2109
 
2017
2110
  ```json
2018
2111
  {
2019
- "artifactId": "00000000-0000-4000-8000-000000000001",
2020
- "confirmArtifactId": "00000000-0000-4000-8000-000000000001",
2021
- "planToken": "example-plan-token"
2112
+ "expectedDraftRunId": "00000000-0000-4000-8000-000000000001",
2113
+ "expectedDraftCommit": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
2114
+ "expectedCurrentCommit": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
2022
2115
  }
2023
2116
  ```
2024
2117
 
@@ -2026,9 +2119,7 @@ Example success:
2026
2119
 
2027
2120
  ```json
2028
2121
  {
2029
- "ok": true,
2030
- "deleted": true,
2031
- "artifactId": "00000000-0000-4000-8000-000000000001"
2122
+ "publishedCommit": "<publishedCommit>"
2032
2123
  }
2033
2124
  ```
2034
2125
 
@@ -2038,23 +2129,34 @@ Input schema:
2038
2129
  {
2039
2130
  "type": "object",
2040
2131
  "properties": {
2041
- "artifactId": {
2132
+ "conversationId": {
2042
2133
  "type": "string",
2043
2134
  "format": "uuid"
2044
2135
  },
2045
- "confirmArtifactId": {
2136
+ "expectedDraftRunId": {
2046
2137
  "type": "string",
2047
2138
  "format": "uuid"
2048
2139
  },
2049
- "planToken": {
2140
+ "expectedDraftCommit": {
2050
2141
  "type": "string",
2051
- "minLength": 1
2142
+ "pattern": "^[a-f0-9]{40}$"
2143
+ },
2144
+ "expectedCurrentCommit": {
2145
+ "anyOf": [
2146
+ {
2147
+ "type": "string",
2148
+ "pattern": "^[a-f0-9]{40}$"
2149
+ },
2150
+ {
2151
+ "type": "null"
2152
+ }
2153
+ ]
2052
2154
  }
2053
2155
  },
2054
2156
  "required": [
2055
- "artifactId",
2056
- "confirmArtifactId",
2057
- "planToken"
2157
+ "expectedDraftRunId",
2158
+ "expectedDraftCommit",
2159
+ "expectedCurrentCommit"
2058
2160
  ],
2059
2161
  "additionalProperties": false
2060
2162
  }
@@ -2069,20 +2171,163 @@ Output schema:
2069
2171
  {
2070
2172
  "type": "object",
2071
2173
  "properties": {
2072
- "ok": {
2073
- "type": "boolean"
2074
- },
2075
- "deleted": {
2076
- "type": "boolean"
2077
- },
2174
+ "publishedCommit": {
2175
+ "type": "string"
2176
+ }
2177
+ },
2178
+ "required": [
2179
+ "publishedCommit"
2180
+ ]
2181
+ },
2182
+ {
2183
+ "type": "object",
2184
+ "properties": {
2185
+ "ok": {
2186
+ "const": false
2187
+ },
2188
+ "error": {
2189
+ "type": "object",
2190
+ "properties": {
2191
+ "code": {
2192
+ "type": "string"
2193
+ },
2194
+ "message": {
2195
+ "type": "string"
2196
+ },
2197
+ "retryable": {
2198
+ "type": "boolean"
2199
+ },
2200
+ "recoveryAction": {
2201
+ "type": "string"
2202
+ }
2203
+ },
2204
+ "required": [
2205
+ "code",
2206
+ "message",
2207
+ "retryable",
2208
+ "recoveryAction"
2209
+ ],
2210
+ "additionalProperties": false
2211
+ }
2212
+ },
2213
+ "required": [
2214
+ "ok",
2215
+ "error"
2216
+ ],
2217
+ "additionalProperties": false
2218
+ }
2219
+ ]
2220
+ }
2221
+ ```
2222
+
2223
+ ### `platform_validate_artifact`
2224
+
2225
+ Read trusted smoke and health evidence for a private artifact draft without requiring a browser session.
2226
+
2227
+ Safety: read-only=true, destructive=false, idempotent=false, open-world=false.
2228
+
2229
+ Example request:
2230
+
2231
+ ```json
2232
+ {
2233
+ "artifactId": "00000000-0000-4000-8000-000000000001"
2234
+ }
2235
+ ```
2236
+
2237
+ Example success:
2238
+
2239
+ ```json
2240
+ {
2241
+ "ok": true,
2242
+ "phase": "<phase>",
2243
+ "artifactId": "00000000-0000-4000-8000-000000000001",
2244
+ "deploymentRecordId": "00000000-0000-4000-8000-000000000003",
2245
+ "deploymentState": "<deploymentState>",
2246
+ "healthy": true,
2247
+ "checkedAt": "<checkedAt>",
2248
+ "draftUrl": "<draftUrl>",
2249
+ "smoke": {}
2250
+ }
2251
+ ```
2252
+
2253
+ Input schema:
2254
+
2255
+ ```json
2256
+ {
2257
+ "type": "object",
2258
+ "properties": {
2259
+ "artifactId": {
2260
+ "type": "string",
2261
+ "format": "uuid"
2262
+ },
2263
+ "deploymentRecordId": {
2264
+ "type": "string",
2265
+ "format": "uuid"
2266
+ }
2267
+ },
2268
+ "required": [
2269
+ "artifactId"
2270
+ ],
2271
+ "additionalProperties": false
2272
+ }
2273
+ ```
2274
+
2275
+ Output schema:
2276
+
2277
+ ```json
2278
+ {
2279
+ "type": "object",
2280
+ "oneOf": [
2281
+ {
2282
+ "type": "object",
2283
+ "properties": {
2284
+ "ok": {
2285
+ "type": "boolean"
2286
+ },
2287
+ "phase": {
2288
+ "type": "string"
2289
+ },
2078
2290
  "artifactId": {
2079
2291
  "type": "string"
2292
+ },
2293
+ "deploymentRecordId": {
2294
+ "type": "string"
2295
+ },
2296
+ "deploymentState": {
2297
+ "type": "string"
2298
+ },
2299
+ "healthy": {
2300
+ "type": "boolean"
2301
+ },
2302
+ "checkedAt": {
2303
+ "type": [
2304
+ "string",
2305
+ "null"
2306
+ ]
2307
+ },
2308
+ "draftUrl": {
2309
+ "type": [
2310
+ "string",
2311
+ "null"
2312
+ ]
2313
+ },
2314
+ "smoke": {
2315
+ "type": [
2316
+ "object",
2317
+ "null"
2318
+ ]
2080
2319
  }
2081
2320
  },
2082
2321
  "required": [
2083
2322
  "ok",
2084
- "deleted",
2085
- "artifactId"
2323
+ "phase",
2324
+ "artifactId",
2325
+ "deploymentRecordId",
2326
+ "deploymentState",
2327
+ "healthy",
2328
+ "checkedAt",
2329
+ "draftUrl",
2330
+ "smoke"
2086
2331
  ]
2087
2332
  },
2088
2333
  {
@@ -2125,3 +2370,2246 @@ Output schema:
2125
2370
  ]
2126
2371
  }
2127
2372
  ```
2373
+
2374
+ ### `platform_run_artifact_smoke`
2375
+
2376
+ Rerun the trusted draft smoke check and return fresh rendered-page evidence.
2377
+
2378
+ Safety: read-only=false, destructive=false, idempotent=false, open-world=true.
2379
+
2380
+ Example request:
2381
+
2382
+ ```json
2383
+ {
2384
+ "artifactId": "00000000-0000-4000-8000-000000000001"
2385
+ }
2386
+ ```
2387
+
2388
+ Example success:
2389
+
2390
+ ```json
2391
+ {
2392
+ "ok": true,
2393
+ "phase": "<phase>",
2394
+ "artifactId": "00000000-0000-4000-8000-000000000001",
2395
+ "deploymentRecordId": "00000000-0000-4000-8000-000000000003",
2396
+ "smoke": {},
2397
+ "validation": {}
2398
+ }
2399
+ ```
2400
+
2401
+ Input schema:
2402
+
2403
+ ```json
2404
+ {
2405
+ "type": "object",
2406
+ "properties": {
2407
+ "artifactId": {
2408
+ "type": "string",
2409
+ "format": "uuid"
2410
+ },
2411
+ "deploymentRecordId": {
2412
+ "type": "string",
2413
+ "format": "uuid"
2414
+ }
2415
+ },
2416
+ "required": [
2417
+ "artifactId"
2418
+ ],
2419
+ "additionalProperties": false
2420
+ }
2421
+ ```
2422
+
2423
+ Output schema:
2424
+
2425
+ ```json
2426
+ {
2427
+ "type": "object",
2428
+ "oneOf": [
2429
+ {
2430
+ "type": "object",
2431
+ "properties": {
2432
+ "ok": {
2433
+ "type": "boolean"
2434
+ },
2435
+ "phase": {
2436
+ "type": "string"
2437
+ },
2438
+ "artifactId": {
2439
+ "type": "string"
2440
+ },
2441
+ "deploymentRecordId": {
2442
+ "type": "string"
2443
+ },
2444
+ "smoke": {
2445
+ "type": "object"
2446
+ },
2447
+ "validation": {
2448
+ "type": "object"
2449
+ }
2450
+ },
2451
+ "required": [
2452
+ "ok",
2453
+ "phase",
2454
+ "artifactId",
2455
+ "deploymentRecordId",
2456
+ "smoke",
2457
+ "validation"
2458
+ ]
2459
+ },
2460
+ {
2461
+ "type": "object",
2462
+ "properties": {
2463
+ "ok": {
2464
+ "const": false
2465
+ },
2466
+ "error": {
2467
+ "type": "object",
2468
+ "properties": {
2469
+ "code": {
2470
+ "type": "string"
2471
+ },
2472
+ "message": {
2473
+ "type": "string"
2474
+ },
2475
+ "retryable": {
2476
+ "type": "boolean"
2477
+ },
2478
+ "recoveryAction": {
2479
+ "type": "string"
2480
+ }
2481
+ },
2482
+ "required": [
2483
+ "code",
2484
+ "message",
2485
+ "retryable",
2486
+ "recoveryAction"
2487
+ ],
2488
+ "additionalProperties": false
2489
+ }
2490
+ },
2491
+ "required": [
2492
+ "ok",
2493
+ "error"
2494
+ ],
2495
+ "additionalProperties": false
2496
+ }
2497
+ ]
2498
+ }
2499
+ ```
2500
+
2501
+ ### `platform_plan_artifact_draft_delete`
2502
+
2503
+ Preview cleanup effects and receive the state-bound plan token required for deletion.
2504
+
2505
+ Safety: read-only=true, destructive=false, idempotent=false, open-world=true.
2506
+
2507
+ Example request:
2508
+
2509
+ ```json
2510
+ {
2511
+ "artifactId": "00000000-0000-4000-8000-000000000001"
2512
+ }
2513
+ ```
2514
+
2515
+ Example success:
2516
+
2517
+ ```json
2518
+ {
2519
+ "ok": true,
2520
+ "phase": "<phase>",
2521
+ "artifactId": "00000000-0000-4000-8000-000000000001",
2522
+ "eligible": true,
2523
+ "effects": {},
2524
+ "planToken": "example-plan-token"
2525
+ }
2526
+ ```
2527
+
2528
+ Input schema:
2529
+
2530
+ ```json
2531
+ {
2532
+ "type": "object",
2533
+ "properties": {
2534
+ "artifactId": {
2535
+ "type": "string",
2536
+ "format": "uuid"
2537
+ }
2538
+ },
2539
+ "required": [
2540
+ "artifactId"
2541
+ ],
2542
+ "additionalProperties": false
2543
+ }
2544
+ ```
2545
+
2546
+ Output schema:
2547
+
2548
+ ```json
2549
+ {
2550
+ "type": "object",
2551
+ "oneOf": [
2552
+ {
2553
+ "type": "object",
2554
+ "properties": {
2555
+ "ok": {
2556
+ "type": "boolean"
2557
+ },
2558
+ "phase": {
2559
+ "type": "string"
2560
+ },
2561
+ "artifactId": {
2562
+ "type": "string"
2563
+ },
2564
+ "eligible": {
2565
+ "type": "boolean"
2566
+ },
2567
+ "effects": {
2568
+ "type": "object"
2569
+ },
2570
+ "planToken": {
2571
+ "type": "string"
2572
+ }
2573
+ },
2574
+ "required": [
2575
+ "ok",
2576
+ "phase",
2577
+ "artifactId",
2578
+ "eligible",
2579
+ "effects",
2580
+ "planToken"
2581
+ ]
2582
+ },
2583
+ {
2584
+ "type": "object",
2585
+ "properties": {
2586
+ "ok": {
2587
+ "const": false
2588
+ },
2589
+ "error": {
2590
+ "type": "object",
2591
+ "properties": {
2592
+ "code": {
2593
+ "type": "string"
2594
+ },
2595
+ "message": {
2596
+ "type": "string"
2597
+ },
2598
+ "retryable": {
2599
+ "type": "boolean"
2600
+ },
2601
+ "recoveryAction": {
2602
+ "type": "string"
2603
+ }
2604
+ },
2605
+ "required": [
2606
+ "code",
2607
+ "message",
2608
+ "retryable",
2609
+ "recoveryAction"
2610
+ ],
2611
+ "additionalProperties": false
2612
+ }
2613
+ },
2614
+ "required": [
2615
+ "ok",
2616
+ "error"
2617
+ ],
2618
+ "additionalProperties": false
2619
+ }
2620
+ ]
2621
+ }
2622
+ ```
2623
+
2624
+ ### `platform_delete_artifact_draft`
2625
+
2626
+ Permanently remove an unpromoted private draft created by this MCP connection after exact-id confirmation.
2627
+
2628
+ Safety: read-only=false, destructive=true, idempotent=false, open-world=true.
2629
+
2630
+ Example request:
2631
+
2632
+ ```json
2633
+ {
2634
+ "artifactId": "00000000-0000-4000-8000-000000000001",
2635
+ "confirmArtifactId": "00000000-0000-4000-8000-000000000001",
2636
+ "planToken": "example-plan-token"
2637
+ }
2638
+ ```
2639
+
2640
+ Example success:
2641
+
2642
+ ```json
2643
+ {
2644
+ "ok": true,
2645
+ "deleted": true,
2646
+ "artifactId": "00000000-0000-4000-8000-000000000001"
2647
+ }
2648
+ ```
2649
+
2650
+ Input schema:
2651
+
2652
+ ```json
2653
+ {
2654
+ "type": "object",
2655
+ "properties": {
2656
+ "artifactId": {
2657
+ "type": "string",
2658
+ "format": "uuid"
2659
+ },
2660
+ "confirmArtifactId": {
2661
+ "type": "string",
2662
+ "format": "uuid"
2663
+ },
2664
+ "planToken": {
2665
+ "type": "string",
2666
+ "minLength": 1
2667
+ }
2668
+ },
2669
+ "required": [
2670
+ "artifactId",
2671
+ "confirmArtifactId",
2672
+ "planToken"
2673
+ ],
2674
+ "additionalProperties": false
2675
+ }
2676
+ ```
2677
+
2678
+ Output schema:
2679
+
2680
+ ```json
2681
+ {
2682
+ "type": "object",
2683
+ "oneOf": [
2684
+ {
2685
+ "type": "object",
2686
+ "properties": {
2687
+ "ok": {
2688
+ "type": "boolean"
2689
+ },
2690
+ "deleted": {
2691
+ "type": "boolean"
2692
+ },
2693
+ "artifactId": {
2694
+ "type": "string"
2695
+ }
2696
+ },
2697
+ "required": [
2698
+ "ok",
2699
+ "deleted",
2700
+ "artifactId"
2701
+ ]
2702
+ },
2703
+ {
2704
+ "type": "object",
2705
+ "properties": {
2706
+ "ok": {
2707
+ "const": false
2708
+ },
2709
+ "error": {
2710
+ "type": "object",
2711
+ "properties": {
2712
+ "code": {
2713
+ "type": "string"
2714
+ },
2715
+ "message": {
2716
+ "type": "string"
2717
+ },
2718
+ "retryable": {
2719
+ "type": "boolean"
2720
+ },
2721
+ "recoveryAction": {
2722
+ "type": "string"
2723
+ }
2724
+ },
2725
+ "required": [
2726
+ "code",
2727
+ "message",
2728
+ "retryable",
2729
+ "recoveryAction"
2730
+ ],
2731
+ "additionalProperties": false
2732
+ }
2733
+ },
2734
+ "required": [
2735
+ "ok",
2736
+ "error"
2737
+ ],
2738
+ "additionalProperties": false
2739
+ }
2740
+ ]
2741
+ }
2742
+ ```
2743
+
2744
+ ### `platform_capability_status`
2745
+
2746
+ Read the connected Build product's current available, denied, unsupported and unconfigured tool families, contract version and helper requirement. Reconnect explicitly for newly consented scopes.
2747
+
2748
+ Safety: read-only=true, destructive=false, idempotent=true, open-world=true.
2749
+
2750
+ Example request:
2751
+
2752
+ ```json
2753
+ {}
2754
+ ```
2755
+
2756
+ Example success:
2757
+
2758
+ ```json
2759
+ {}
2760
+ ```
2761
+
2762
+ Input schema:
2763
+
2764
+ ```json
2765
+ {
2766
+ "type": "object",
2767
+ "additionalProperties": false,
2768
+ "properties": {},
2769
+ "required": []
2770
+ }
2771
+ ```
2772
+
2773
+ Output schema:
2774
+
2775
+ ```json
2776
+ {
2777
+ "type": "object",
2778
+ "oneOf": [
2779
+ {
2780
+ "type": "object",
2781
+ "properties": {
2782
+ "ok": {
2783
+ "const": true
2784
+ }
2785
+ }
2786
+ },
2787
+ {
2788
+ "type": "object",
2789
+ "properties": {
2790
+ "ok": {
2791
+ "const": false
2792
+ },
2793
+ "error": {
2794
+ "type": "object",
2795
+ "properties": {
2796
+ "code": {
2797
+ "type": "string"
2798
+ },
2799
+ "message": {
2800
+ "type": "string"
2801
+ },
2802
+ "retryable": {
2803
+ "type": "boolean"
2804
+ },
2805
+ "recoveryAction": {
2806
+ "type": "string"
2807
+ }
2808
+ },
2809
+ "required": [
2810
+ "code",
2811
+ "message",
2812
+ "retryable",
2813
+ "recoveryAction"
2814
+ ],
2815
+ "additionalProperties": false
2816
+ }
2817
+ },
2818
+ "required": [
2819
+ "ok",
2820
+ "error"
2821
+ ],
2822
+ "additionalProperties": false
2823
+ }
2824
+ ]
2825
+ }
2826
+ ```
2827
+
2828
+ ### `platform_start_build_session`
2829
+
2830
+ Start external authoring with a private artifact identity, current version and platform-operation budget. Launches no internal coder. Existing artifact starts require its current version; new app starts require a manifest. Optional own conversation selects exact operator-approved secret references.
2831
+
2832
+ Safety: read-only=false, destructive=false, idempotent=true, open-world=true.
2833
+
2834
+ Example request:
2835
+
2836
+ ```json
2837
+ {
2838
+ "idempotencyKey": "example-request",
2839
+ "budgetCents": 0,
2840
+ "brief": "<brief>"
2841
+ }
2842
+ ```
2843
+
2844
+ Example success:
2845
+
2846
+ ```json
2847
+ {}
2848
+ ```
2849
+
2850
+ Input schema:
2851
+
2852
+ ```json
2853
+ {
2854
+ "type": "object",
2855
+ "additionalProperties": false,
2856
+ "properties": {
2857
+ "idempotencyKey": {
2858
+ "type": "string",
2859
+ "minLength": 1,
2860
+ "maxLength": 128,
2861
+ "pattern": "^[A-Za-z0-9._:-]+$"
2862
+ },
2863
+ "artifactId": {
2864
+ "type": "string",
2865
+ "format": "uuid"
2866
+ },
2867
+ "artifactVersionId": {
2868
+ "type": "string",
2869
+ "format": "uuid"
2870
+ },
2871
+ "manifest": {
2872
+ "type": "object"
2873
+ },
2874
+ "projectId": {
2875
+ "type": "string",
2876
+ "format": "uuid"
2877
+ },
2878
+ "owningConversationId": {
2879
+ "type": "string",
2880
+ "format": "uuid"
2881
+ },
2882
+ "budgetCents": {
2883
+ "type": "integer",
2884
+ "minimum": 0,
2885
+ "maximum": 100000
2886
+ },
2887
+ "brief": {
2888
+ "type": "string",
2889
+ "minLength": 3,
2890
+ "maxLength": 4000
2891
+ }
2892
+ },
2893
+ "required": [
2894
+ "idempotencyKey",
2895
+ "budgetCents",
2896
+ "brief"
2897
+ ]
2898
+ }
2899
+ ```
2900
+
2901
+ Output schema:
2902
+
2903
+ ```json
2904
+ {
2905
+ "type": "object",
2906
+ "oneOf": [
2907
+ {
2908
+ "type": "object",
2909
+ "properties": {
2910
+ "ok": {
2911
+ "const": true
2912
+ }
2913
+ }
2914
+ },
2915
+ {
2916
+ "type": "object",
2917
+ "properties": {
2918
+ "ok": {
2919
+ "const": false
2920
+ },
2921
+ "error": {
2922
+ "type": "object",
2923
+ "properties": {
2924
+ "code": {
2925
+ "type": "string"
2926
+ },
2927
+ "message": {
2928
+ "type": "string"
2929
+ },
2930
+ "retryable": {
2931
+ "type": "boolean"
2932
+ },
2933
+ "recoveryAction": {
2934
+ "type": "string"
2935
+ }
2936
+ },
2937
+ "required": [
2938
+ "code",
2939
+ "message",
2940
+ "retryable",
2941
+ "recoveryAction"
2942
+ ],
2943
+ "additionalProperties": false
2944
+ }
2945
+ },
2946
+ "required": [
2947
+ "ok",
2948
+ "error"
2949
+ ],
2950
+ "additionalProperties": false
2951
+ }
2952
+ ]
2953
+ }
2954
+ ```
2955
+
2956
+ ### `platform_read_build_session`
2957
+
2958
+ Read the owned build session and original pending operations. Does not start another coder or deployment.
2959
+
2960
+ Safety: read-only=true, destructive=false, idempotent=true, open-world=true.
2961
+
2962
+ Example request:
2963
+
2964
+ ```json
2965
+ {
2966
+ "sessionId": "00000000-0000-4000-8000-000000000001"
2967
+ }
2968
+ ```
2969
+
2970
+ Example success:
2971
+
2972
+ ```json
2973
+ {}
2974
+ ```
2975
+
2976
+ Input schema:
2977
+
2978
+ ```json
2979
+ {
2980
+ "type": "object",
2981
+ "additionalProperties": false,
2982
+ "properties": {
2983
+ "sessionId": {
2984
+ "type": "string",
2985
+ "format": "uuid"
2986
+ }
2987
+ },
2988
+ "required": [
2989
+ "sessionId"
2990
+ ]
2991
+ }
2992
+ ```
2993
+
2994
+ Output schema:
2995
+
2996
+ ```json
2997
+ {
2998
+ "type": "object",
2999
+ "oneOf": [
3000
+ {
3001
+ "type": "object",
3002
+ "properties": {
3003
+ "ok": {
3004
+ "const": true
3005
+ }
3006
+ }
3007
+ },
3008
+ {
3009
+ "type": "object",
3010
+ "properties": {
3011
+ "ok": {
3012
+ "const": false
3013
+ },
3014
+ "error": {
3015
+ "type": "object",
3016
+ "properties": {
3017
+ "code": {
3018
+ "type": "string"
3019
+ },
3020
+ "message": {
3021
+ "type": "string"
3022
+ },
3023
+ "retryable": {
3024
+ "type": "boolean"
3025
+ },
3026
+ "recoveryAction": {
3027
+ "type": "string"
3028
+ }
3029
+ },
3030
+ "required": [
3031
+ "code",
3032
+ "message",
3033
+ "retryable",
3034
+ "recoveryAction"
3035
+ ],
3036
+ "additionalProperties": false
3037
+ }
3038
+ },
3039
+ "required": [
3040
+ "ok",
3041
+ "error"
3042
+ ],
3043
+ "additionalProperties": false
3044
+ }
3045
+ ]
3046
+ }
3047
+ ```
3048
+
3049
+ ### `platform_close_build_session`
3050
+
3051
+ Stop new authoring and request pending-operation cancellation. Unknown effects retain their reservation; cancellation does not undo committed writes.
3052
+
3053
+ Safety: read-only=false, destructive=false, idempotent=true, open-world=true.
3054
+
3055
+ Example request:
3056
+
3057
+ ```json
3058
+ {
3059
+ "sessionId": "00000000-0000-4000-8000-000000000001"
3060
+ }
3061
+ ```
3062
+
3063
+ Example success:
3064
+
3065
+ ```json
3066
+ {}
3067
+ ```
3068
+
3069
+ Input schema:
3070
+
3071
+ ```json
3072
+ {
3073
+ "type": "object",
3074
+ "additionalProperties": false,
3075
+ "properties": {
3076
+ "sessionId": {
3077
+ "type": "string",
3078
+ "format": "uuid"
3079
+ }
3080
+ },
3081
+ "required": [
3082
+ "sessionId"
3083
+ ]
3084
+ }
3085
+ ```
3086
+
3087
+ Output schema:
3088
+
3089
+ ```json
3090
+ {
3091
+ "type": "object",
3092
+ "oneOf": [
3093
+ {
3094
+ "type": "object",
3095
+ "properties": {
3096
+ "ok": {
3097
+ "const": true
3098
+ }
3099
+ }
3100
+ },
3101
+ {
3102
+ "type": "object",
3103
+ "properties": {
3104
+ "ok": {
3105
+ "const": false
3106
+ },
3107
+ "error": {
3108
+ "type": "object",
3109
+ "properties": {
3110
+ "code": {
3111
+ "type": "string"
3112
+ },
3113
+ "message": {
3114
+ "type": "string"
3115
+ },
3116
+ "retryable": {
3117
+ "type": "boolean"
3118
+ },
3119
+ "recoveryAction": {
3120
+ "type": "string"
3121
+ }
3122
+ },
3123
+ "required": [
3124
+ "code",
3125
+ "message",
3126
+ "retryable",
3127
+ "recoveryAction"
3128
+ ],
3129
+ "additionalProperties": false
3130
+ }
3131
+ },
3132
+ "required": [
3133
+ "ok",
3134
+ "error"
3135
+ ],
3136
+ "additionalProperties": false
3137
+ }
3138
+ ]
3139
+ }
3140
+ ```
3141
+
3142
+ ### `platform_run_artifact_workspace_sql`
3143
+
3144
+ Run guarded private artifact SQL using the exact session namespace, version and retry key. CREATE TABLE/ADD COLUMN require documentation. Enforced non-admin writes remain denied; unknown writes are never replayed.
3145
+
3146
+ Safety: read-only=false, destructive=false, idempotent=true, open-world=true.
3147
+
3148
+ Example request:
3149
+
3150
+ ```json
3151
+ {
3152
+ "sessionId": "00000000-0000-4000-8000-000000000001",
3153
+ "artifactVersionId": "00000000-0000-4000-8000-000000000001",
3154
+ "idempotencyKey": "example-request",
3155
+ "sql": "<sql>",
3156
+ "purpose": "<purpose>"
3157
+ }
3158
+ ```
3159
+
3160
+ Example success:
3161
+
3162
+ ```json
3163
+ {}
3164
+ ```
3165
+
3166
+ Input schema:
3167
+
3168
+ ```json
3169
+ {
3170
+ "type": "object",
3171
+ "additionalProperties": false,
3172
+ "properties": {
3173
+ "sessionId": {
3174
+ "type": "string",
3175
+ "format": "uuid"
3176
+ },
3177
+ "artifactVersionId": {
3178
+ "type": "string",
3179
+ "format": "uuid"
3180
+ },
3181
+ "idempotencyKey": {
3182
+ "type": "string",
3183
+ "minLength": 1,
3184
+ "maxLength": 128,
3185
+ "pattern": "^[A-Za-z0-9._:-]+$"
3186
+ },
3187
+ "sql": {
3188
+ "type": "string",
3189
+ "minLength": 1,
3190
+ "maxLength": 20000
3191
+ },
3192
+ "purpose": {
3193
+ "type": "string",
3194
+ "minLength": 3,
3195
+ "maxLength": 500
3196
+ },
3197
+ "params": {
3198
+ "type": "object",
3199
+ "additionalProperties": true
3200
+ },
3201
+ "maxRows": {
3202
+ "type": "integer",
3203
+ "minimum": 1,
3204
+ "maximum": 5000
3205
+ },
3206
+ "documentation": {
3207
+ "type": "object"
3208
+ },
3209
+ "columnDocumentation": {
3210
+ "type": "object"
3211
+ }
3212
+ },
3213
+ "required": [
3214
+ "sessionId",
3215
+ "artifactVersionId",
3216
+ "idempotencyKey",
3217
+ "sql",
3218
+ "purpose"
3219
+ ]
3220
+ }
3221
+ ```
3222
+
3223
+ Output schema:
3224
+
3225
+ ```json
3226
+ {
3227
+ "type": "object",
3228
+ "oneOf": [
3229
+ {
3230
+ "type": "object",
3231
+ "properties": {
3232
+ "ok": {
3233
+ "const": true
3234
+ }
3235
+ }
3236
+ },
3237
+ {
3238
+ "type": "object",
3239
+ "properties": {
3240
+ "ok": {
3241
+ "const": false
3242
+ },
3243
+ "error": {
3244
+ "type": "object",
3245
+ "properties": {
3246
+ "code": {
3247
+ "type": "string"
3248
+ },
3249
+ "message": {
3250
+ "type": "string"
3251
+ },
3252
+ "retryable": {
3253
+ "type": "boolean"
3254
+ },
3255
+ "recoveryAction": {
3256
+ "type": "string"
3257
+ }
3258
+ },
3259
+ "required": [
3260
+ "code",
3261
+ "message",
3262
+ "retryable",
3263
+ "recoveryAction"
3264
+ ],
3265
+ "additionalProperties": false
3266
+ }
3267
+ },
3268
+ "required": [
3269
+ "ok",
3270
+ "error"
3271
+ ],
3272
+ "additionalProperties": false
3273
+ }
3274
+ ]
3275
+ }
3276
+ ```
3277
+
3278
+ ### `platform_checkout_artifact_app`
3279
+
3280
+ Download exact saved app source through the owned session, verify archive hash/version/commit and extract regular source files into a new local directory. Missing source is never reconstructed.
3281
+
3282
+ Safety: read-only=false, destructive=false, idempotent=true, open-world=true.
3283
+
3284
+ Example request:
3285
+
3286
+ ```json
3287
+ {
3288
+ "sessionId": "00000000-0000-4000-8000-000000000001",
3289
+ "targetDir": "<targetDir>"
3290
+ }
3291
+ ```
3292
+
3293
+ Example success:
3294
+
3295
+ ```json
3296
+ {}
3297
+ ```
3298
+
3299
+ Input schema:
3300
+
3301
+ ```json
3302
+ {
3303
+ "type": "object",
3304
+ "additionalProperties": false,
3305
+ "properties": {
3306
+ "sessionId": {
3307
+ "type": "string",
3308
+ "format": "uuid"
3309
+ },
3310
+ "targetDir": {
3311
+ "type": "string",
3312
+ "minLength": 1
3313
+ }
3314
+ },
3315
+ "required": [
3316
+ "sessionId",
3317
+ "targetDir"
3318
+ ]
3319
+ }
3320
+ ```
3321
+
3322
+ Output schema:
3323
+
3324
+ ```json
3325
+ {
3326
+ "type": "object",
3327
+ "oneOf": [
3328
+ {
3329
+ "type": "object",
3330
+ "properties": {
3331
+ "ok": {
3332
+ "const": true
3333
+ }
3334
+ }
3335
+ },
3336
+ {
3337
+ "type": "object",
3338
+ "properties": {
3339
+ "ok": {
3340
+ "const": false
3341
+ },
3342
+ "error": {
3343
+ "type": "object",
3344
+ "properties": {
3345
+ "code": {
3346
+ "type": "string"
3347
+ },
3348
+ "message": {
3349
+ "type": "string"
3350
+ },
3351
+ "retryable": {
3352
+ "type": "boolean"
3353
+ },
3354
+ "recoveryAction": {
3355
+ "type": "string"
3356
+ }
3357
+ },
3358
+ "required": [
3359
+ "code",
3360
+ "message",
3361
+ "retryable",
3362
+ "recoveryAction"
3363
+ ],
3364
+ "additionalProperties": false
3365
+ }
3366
+ },
3367
+ "required": [
3368
+ "ok",
3369
+ "error"
3370
+ ],
3371
+ "additionalProperties": false
3372
+ }
3373
+ ]
3374
+ }
3375
+ ```
3376
+
3377
+ ### `platform_list_asset_folders`
3378
+
3379
+ List the session's permitted reusable asset folders.
3380
+
3381
+ Safety: read-only=true, destructive=false, idempotent=true, open-world=true.
3382
+
3383
+ Example request:
3384
+
3385
+ ```json
3386
+ {
3387
+ "sessionId": "00000000-0000-4000-8000-000000000001"
3388
+ }
3389
+ ```
3390
+
3391
+ Example success:
3392
+
3393
+ ```json
3394
+ {}
3395
+ ```
3396
+
3397
+ Input schema:
3398
+
3399
+ ```json
3400
+ {
3401
+ "type": "object",
3402
+ "additionalProperties": false,
3403
+ "properties": {
3404
+ "sessionId": {
3405
+ "type": "string",
3406
+ "format": "uuid"
3407
+ }
3408
+ },
3409
+ "required": [
3410
+ "sessionId"
3411
+ ]
3412
+ }
3413
+ ```
3414
+
3415
+ Output schema:
3416
+
3417
+ ```json
3418
+ {
3419
+ "type": "object",
3420
+ "oneOf": [
3421
+ {
3422
+ "type": "object",
3423
+ "properties": {
3424
+ "ok": {
3425
+ "const": true
3426
+ }
3427
+ }
3428
+ },
3429
+ {
3430
+ "type": "object",
3431
+ "properties": {
3432
+ "ok": {
3433
+ "const": false
3434
+ },
3435
+ "error": {
3436
+ "type": "object",
3437
+ "properties": {
3438
+ "code": {
3439
+ "type": "string"
3440
+ },
3441
+ "message": {
3442
+ "type": "string"
3443
+ },
3444
+ "retryable": {
3445
+ "type": "boolean"
3446
+ },
3447
+ "recoveryAction": {
3448
+ "type": "string"
3449
+ }
3450
+ },
3451
+ "required": [
3452
+ "code",
3453
+ "message",
3454
+ "retryable",
3455
+ "recoveryAction"
3456
+ ],
3457
+ "additionalProperties": false
3458
+ }
3459
+ },
3460
+ "required": [
3461
+ "ok",
3462
+ "error"
3463
+ ],
3464
+ "additionalProperties": false
3465
+ }
3466
+ ]
3467
+ }
3468
+ ```
3469
+
3470
+ ### `platform_list_assets`
3471
+
3472
+ List permitted reusable asset metadata with bounded pagination; excluded/deleted attachments are omitted.
3473
+
3474
+ Safety: read-only=true, destructive=false, idempotent=true, open-world=true.
3475
+
3476
+ Example request:
3477
+
3478
+ ```json
3479
+ {
3480
+ "sessionId": "00000000-0000-4000-8000-000000000001"
3481
+ }
3482
+ ```
3483
+
3484
+ Example success:
3485
+
3486
+ ```json
3487
+ {}
3488
+ ```
3489
+
3490
+ Input schema:
3491
+
3492
+ ```json
3493
+ {
3494
+ "type": "object",
3495
+ "additionalProperties": false,
3496
+ "properties": {
3497
+ "sessionId": {
3498
+ "type": "string",
3499
+ "format": "uuid"
3500
+ },
3501
+ "query": {
3502
+ "type": "string",
3503
+ "maxLength": 200
3504
+ },
3505
+ "folderId": {
3506
+ "type": "string",
3507
+ "format": "uuid"
3508
+ },
3509
+ "limit": {
3510
+ "type": "integer",
3511
+ "minimum": 1,
3512
+ "maximum": 500
3513
+ },
3514
+ "offset": {
3515
+ "type": "integer",
3516
+ "minimum": 0
3517
+ }
3518
+ },
3519
+ "required": [
3520
+ "sessionId"
3521
+ ]
3522
+ }
3523
+ ```
3524
+
3525
+ Output schema:
3526
+
3527
+ ```json
3528
+ {
3529
+ "type": "object",
3530
+ "oneOf": [
3531
+ {
3532
+ "type": "object",
3533
+ "properties": {
3534
+ "ok": {
3535
+ "const": true
3536
+ }
3537
+ }
3538
+ },
3539
+ {
3540
+ "type": "object",
3541
+ "properties": {
3542
+ "ok": {
3543
+ "const": false
3544
+ },
3545
+ "error": {
3546
+ "type": "object",
3547
+ "properties": {
3548
+ "code": {
3549
+ "type": "string"
3550
+ },
3551
+ "message": {
3552
+ "type": "string"
3553
+ },
3554
+ "retryable": {
3555
+ "type": "boolean"
3556
+ },
3557
+ "recoveryAction": {
3558
+ "type": "string"
3559
+ }
3560
+ },
3561
+ "required": [
3562
+ "code",
3563
+ "message",
3564
+ "retryable",
3565
+ "recoveryAction"
3566
+ ],
3567
+ "additionalProperties": false
3568
+ }
3569
+ },
3570
+ "required": [
3571
+ "ok",
3572
+ "error"
3573
+ ],
3574
+ "additionalProperties": false
3575
+ }
3576
+ ]
3577
+ }
3578
+ ```
3579
+
3580
+ ### `platform_materialize_assets`
3581
+
3582
+ Download exactly selected approved files into a new local directory. Verify each authenticated transfer's hash and size; source and attachment budgets remain separate.
3583
+
3584
+ Safety: read-only=false, destructive=false, idempotent=true, open-world=true.
3585
+
3586
+ Example request:
3587
+
3588
+ ```json
3589
+ {
3590
+ "sessionId": "00000000-0000-4000-8000-000000000001",
3591
+ "assetIds": [
3592
+ "00000000-0000-4000-8000-000000000001"
3593
+ ],
3594
+ "targetDir": "<targetDir>"
3595
+ }
3596
+ ```
3597
+
3598
+ Example success:
3599
+
3600
+ ```json
3601
+ {}
3602
+ ```
3603
+
3604
+ Input schema:
3605
+
3606
+ ```json
3607
+ {
3608
+ "type": "object",
3609
+ "additionalProperties": false,
3610
+ "properties": {
3611
+ "sessionId": {
3612
+ "type": "string",
3613
+ "format": "uuid"
3614
+ },
3615
+ "assetIds": {
3616
+ "type": "array",
3617
+ "minItems": 1,
3618
+ "maxItems": 50,
3619
+ "uniqueItems": true,
3620
+ "items": {
3621
+ "type": "string",
3622
+ "format": "uuid"
3623
+ }
3624
+ },
3625
+ "targetDir": {
3626
+ "type": "string",
3627
+ "minLength": 1
3628
+ }
3629
+ },
3630
+ "required": [
3631
+ "sessionId",
3632
+ "assetIds",
3633
+ "targetDir"
3634
+ ]
3635
+ }
3636
+ ```
3637
+
3638
+ Output schema:
3639
+
3640
+ ```json
3641
+ {
3642
+ "type": "object",
3643
+ "oneOf": [
3644
+ {
3645
+ "type": "object",
3646
+ "properties": {
3647
+ "ok": {
3648
+ "const": true
3649
+ }
3650
+ }
3651
+ },
3652
+ {
3653
+ "type": "object",
3654
+ "properties": {
3655
+ "ok": {
3656
+ "const": false
3657
+ },
3658
+ "error": {
3659
+ "type": "object",
3660
+ "properties": {
3661
+ "code": {
3662
+ "type": "string"
3663
+ },
3664
+ "message": {
3665
+ "type": "string"
3666
+ },
3667
+ "retryable": {
3668
+ "type": "boolean"
3669
+ },
3670
+ "recoveryAction": {
3671
+ "type": "string"
3672
+ }
3673
+ },
3674
+ "required": [
3675
+ "code",
3676
+ "message",
3677
+ "retryable",
3678
+ "recoveryAction"
3679
+ ],
3680
+ "additionalProperties": false
3681
+ }
3682
+ },
3683
+ "required": [
3684
+ "ok",
3685
+ "error"
3686
+ ],
3687
+ "additionalProperties": false
3688
+ }
3689
+ ]
3690
+ }
3691
+ ```
3692
+
3693
+ ### `platform_list_build_secrets`
3694
+
3695
+ Read only exact operator-approved binding references for this session. Values are never retrieved. Authoring detach does not prove deployed runtime revocation.
3696
+
3697
+ Safety: read-only=true, destructive=false, idempotent=true, open-world=true.
3698
+
3699
+ Example request:
3700
+
3701
+ ```json
3702
+ {
3703
+ "sessionId": "00000000-0000-4000-8000-000000000001"
3704
+ }
3705
+ ```
3706
+
3707
+ Example success:
3708
+
3709
+ ```json
3710
+ {}
3711
+ ```
3712
+
3713
+ Input schema:
3714
+
3715
+ ```json
3716
+ {
3717
+ "type": "object",
3718
+ "additionalProperties": false,
3719
+ "properties": {
3720
+ "sessionId": {
3721
+ "type": "string",
3722
+ "format": "uuid"
3723
+ }
3724
+ },
3725
+ "required": [
3726
+ "sessionId"
3727
+ ]
3728
+ }
3729
+ ```
3730
+
3731
+ Output schema:
3732
+
3733
+ ```json
3734
+ {
3735
+ "type": "object",
3736
+ "oneOf": [
3737
+ {
3738
+ "type": "object",
3739
+ "properties": {
3740
+ "ok": {
3741
+ "const": true
3742
+ }
3743
+ }
3744
+ },
3745
+ {
3746
+ "type": "object",
3747
+ "properties": {
3748
+ "ok": {
3749
+ "const": false
3750
+ },
3751
+ "error": {
3752
+ "type": "object",
3753
+ "properties": {
3754
+ "code": {
3755
+ "type": "string"
3756
+ },
3757
+ "message": {
3758
+ "type": "string"
3759
+ },
3760
+ "retryable": {
3761
+ "type": "boolean"
3762
+ },
3763
+ "recoveryAction": {
3764
+ "type": "string"
3765
+ }
3766
+ },
3767
+ "required": [
3768
+ "code",
3769
+ "message",
3770
+ "retryable",
3771
+ "recoveryAction"
3772
+ ],
3773
+ "additionalProperties": false
3774
+ }
3775
+ },
3776
+ "required": [
3777
+ "ok",
3778
+ "error"
3779
+ ],
3780
+ "additionalProperties": false
3781
+ }
3782
+ ]
3783
+ }
3784
+ ```
3785
+
3786
+ ### `platform_add_acceptance_check`
3787
+
3788
+ Add a required acceptance check bound to this build session and deployed revision. A semantic control query requires separate Build data-verification consent.
3789
+
3790
+ Safety: read-only=false, destructive=false, idempotent=true, open-world=true.
3791
+
3792
+ Example request:
3793
+
3794
+ ```json
3795
+ {
3796
+ "sessionId": "00000000-0000-4000-8000-000000000001",
3797
+ "artifactVersionId": "00000000-0000-4000-8000-000000000001",
3798
+ "idempotencyKey": "example-request",
3799
+ "description": "<description>"
3800
+ }
3801
+ ```
3802
+
3803
+ Example success:
3804
+
3805
+ ```json
3806
+ {}
3807
+ ```
3808
+
3809
+ Input schema:
3810
+
3811
+ ```json
3812
+ {
3813
+ "type": "object",
3814
+ "additionalProperties": false,
3815
+ "properties": {
3816
+ "sessionId": {
3817
+ "type": "string",
3818
+ "format": "uuid"
3819
+ },
3820
+ "artifactVersionId": {
3821
+ "type": "string",
3822
+ "format": "uuid"
3823
+ },
3824
+ "idempotencyKey": {
3825
+ "type": "string",
3826
+ "minLength": 1,
3827
+ "maxLength": 128,
3828
+ "pattern": "^[A-Za-z0-9._:-]+$"
3829
+ },
3830
+ "description": {
3831
+ "type": "string",
3832
+ "minLength": 3,
3833
+ "maxLength": 1000
3834
+ }
3835
+ },
3836
+ "required": [
3837
+ "sessionId",
3838
+ "artifactVersionId",
3839
+ "idempotencyKey",
3840
+ "description"
3841
+ ]
3842
+ }
3843
+ ```
3844
+
3845
+ Output schema:
3846
+
3847
+ ```json
3848
+ {
3849
+ "type": "object",
3850
+ "oneOf": [
3851
+ {
3852
+ "type": "object",
3853
+ "properties": {
3854
+ "ok": {
3855
+ "const": true
3856
+ }
3857
+ }
3858
+ },
3859
+ {
3860
+ "type": "object",
3861
+ "properties": {
3862
+ "ok": {
3863
+ "const": false
3864
+ },
3865
+ "error": {
3866
+ "type": "object",
3867
+ "properties": {
3868
+ "code": {
3869
+ "type": "string"
3870
+ },
3871
+ "message": {
3872
+ "type": "string"
3873
+ },
3874
+ "retryable": {
3875
+ "type": "boolean"
3876
+ },
3877
+ "recoveryAction": {
3878
+ "type": "string"
3879
+ }
3880
+ },
3881
+ "required": [
3882
+ "code",
3883
+ "message",
3884
+ "retryable",
3885
+ "recoveryAction"
3886
+ ],
3887
+ "additionalProperties": false
3888
+ }
3889
+ },
3890
+ "required": [
3891
+ "ok",
3892
+ "error"
3893
+ ],
3894
+ "additionalProperties": false
3895
+ }
3896
+ ]
3897
+ }
3898
+ ```
3899
+
3900
+ ### `platform_run_acceptance_checks`
3901
+
3902
+ Run required acceptance checks for the exact current draft revision through the shared service.
3903
+
3904
+ Safety: read-only=false, destructive=false, idempotent=true, open-world=true.
3905
+
3906
+ Example request:
3907
+
3908
+ ```json
3909
+ {
3910
+ "sessionId": "00000000-0000-4000-8000-000000000001",
3911
+ "artifactVersionId": "00000000-0000-4000-8000-000000000001",
3912
+ "idempotencyKey": "example-request"
3913
+ }
3914
+ ```
3915
+
3916
+ Example success:
3917
+
3918
+ ```json
3919
+ {}
3920
+ ```
3921
+
3922
+ Input schema:
3923
+
3924
+ ```json
3925
+ {
3926
+ "type": "object",
3927
+ "additionalProperties": false,
3928
+ "properties": {
3929
+ "sessionId": {
3930
+ "type": "string",
3931
+ "format": "uuid"
3932
+ },
3933
+ "artifactVersionId": {
3934
+ "type": "string",
3935
+ "format": "uuid"
3936
+ },
3937
+ "idempotencyKey": {
3938
+ "type": "string",
3939
+ "minLength": 1,
3940
+ "maxLength": 128,
3941
+ "pattern": "^[A-Za-z0-9._:-]+$"
3942
+ }
3943
+ },
3944
+ "required": [
3945
+ "sessionId",
3946
+ "artifactVersionId",
3947
+ "idempotencyKey"
3948
+ ]
3949
+ }
3950
+ ```
3951
+
3952
+ Output schema:
3953
+
3954
+ ```json
3955
+ {
3956
+ "type": "object",
3957
+ "oneOf": [
3958
+ {
3959
+ "type": "object",
3960
+ "properties": {
3961
+ "ok": {
3962
+ "const": true
3963
+ }
3964
+ }
3965
+ },
3966
+ {
3967
+ "type": "object",
3968
+ "properties": {
3969
+ "ok": {
3970
+ "const": false
3971
+ },
3972
+ "error": {
3973
+ "type": "object",
3974
+ "properties": {
3975
+ "code": {
3976
+ "type": "string"
3977
+ },
3978
+ "message": {
3979
+ "type": "string"
3980
+ },
3981
+ "retryable": {
3982
+ "type": "boolean"
3983
+ },
3984
+ "recoveryAction": {
3985
+ "type": "string"
3986
+ }
3987
+ },
3988
+ "required": [
3989
+ "code",
3990
+ "message",
3991
+ "retryable",
3992
+ "recoveryAction"
3993
+ ],
3994
+ "additionalProperties": false
3995
+ }
3996
+ },
3997
+ "required": [
3998
+ "ok",
3999
+ "error"
4000
+ ],
4001
+ "additionalProperties": false
4002
+ }
4003
+ ]
4004
+ }
4005
+ ```
4006
+
4007
+ ### `platform_record_acceptance_review`
4008
+
4009
+ Record the builder's acceptance review without impersonating the independent validator or removing required checks.
4010
+
4011
+ Safety: read-only=false, destructive=false, idempotent=true, open-world=true.
4012
+
4013
+ Example request:
4014
+
4015
+ ```json
4016
+ {
4017
+ "sessionId": "00000000-0000-4000-8000-000000000001",
4018
+ "artifactVersionId": "00000000-0000-4000-8000-000000000001",
4019
+ "idempotencyKey": "example-request",
4020
+ "checkId": "00000000-0000-4000-8000-000000000001",
4021
+ "status": "passed",
4022
+ "summary": "<summary>"
4023
+ }
4024
+ ```
4025
+
4026
+ Example success:
4027
+
4028
+ ```json
4029
+ {}
4030
+ ```
4031
+
4032
+ Input schema:
4033
+
4034
+ ```json
4035
+ {
4036
+ "type": "object",
4037
+ "additionalProperties": false,
4038
+ "properties": {
4039
+ "sessionId": {
4040
+ "type": "string",
4041
+ "format": "uuid"
4042
+ },
4043
+ "artifactVersionId": {
4044
+ "type": "string",
4045
+ "format": "uuid"
4046
+ },
4047
+ "idempotencyKey": {
4048
+ "type": "string",
4049
+ "minLength": 1,
4050
+ "maxLength": 128,
4051
+ "pattern": "^[A-Za-z0-9._:-]+$"
4052
+ },
4053
+ "checkId": {
4054
+ "type": "string",
4055
+ "format": "uuid"
4056
+ },
4057
+ "status": {
4058
+ "type": "string",
4059
+ "enum": [
4060
+ "passed",
4061
+ "failed"
4062
+ ]
4063
+ },
4064
+ "summary": {
4065
+ "type": "string",
4066
+ "minLength": 3,
4067
+ "maxLength": 2000
4068
+ }
4069
+ },
4070
+ "required": [
4071
+ "sessionId",
4072
+ "artifactVersionId",
4073
+ "idempotencyKey",
4074
+ "checkId",
4075
+ "status",
4076
+ "summary"
4077
+ ]
4078
+ }
4079
+ ```
4080
+
4081
+ Output schema:
4082
+
4083
+ ```json
4084
+ {
4085
+ "type": "object",
4086
+ "oneOf": [
4087
+ {
4088
+ "type": "object",
4089
+ "properties": {
4090
+ "ok": {
4091
+ "const": true
4092
+ }
4093
+ }
4094
+ },
4095
+ {
4096
+ "type": "object",
4097
+ "properties": {
4098
+ "ok": {
4099
+ "const": false
4100
+ },
4101
+ "error": {
4102
+ "type": "object",
4103
+ "properties": {
4104
+ "code": {
4105
+ "type": "string"
4106
+ },
4107
+ "message": {
4108
+ "type": "string"
4109
+ },
4110
+ "retryable": {
4111
+ "type": "boolean"
4112
+ },
4113
+ "recoveryAction": {
4114
+ "type": "string"
4115
+ }
4116
+ },
4117
+ "required": [
4118
+ "code",
4119
+ "message",
4120
+ "retryable",
4121
+ "recoveryAction"
4122
+ ],
4123
+ "additionalProperties": false
4124
+ }
4125
+ },
4126
+ "required": [
4127
+ "ok",
4128
+ "error"
4129
+ ],
4130
+ "additionalProperties": false
4131
+ }
4132
+ ]
4133
+ }
4134
+ ```
4135
+
4136
+ ### `platform_prepare_artifact_validation`
4137
+
4138
+ Prepare validation evidence for the exact private draft revision; missing required checks block readiness.
4139
+
4140
+ Safety: read-only=true, destructive=false, idempotent=true, open-world=true.
4141
+
4142
+ Example request:
4143
+
4144
+ ```json
4145
+ {
4146
+ "sessionId": "00000000-0000-4000-8000-000000000001",
4147
+ "artifactVersionId": "00000000-0000-4000-8000-000000000001",
4148
+ "deploymentRecordId": "00000000-0000-4000-8000-000000000001"
4149
+ }
4150
+ ```
4151
+
4152
+ Example success:
4153
+
4154
+ ```json
4155
+ {}
4156
+ ```
4157
+
4158
+ Input schema:
4159
+
4160
+ ```json
4161
+ {
4162
+ "type": "object",
4163
+ "additionalProperties": false,
4164
+ "properties": {
4165
+ "sessionId": {
4166
+ "type": "string",
4167
+ "format": "uuid"
4168
+ },
4169
+ "artifactVersionId": {
4170
+ "type": "string",
4171
+ "format": "uuid"
4172
+ },
4173
+ "deploymentRecordId": {
4174
+ "type": "string",
4175
+ "format": "uuid"
4176
+ }
4177
+ },
4178
+ "required": [
4179
+ "sessionId",
4180
+ "artifactVersionId",
4181
+ "deploymentRecordId"
4182
+ ]
4183
+ }
4184
+ ```
4185
+
4186
+ Output schema:
4187
+
4188
+ ```json
4189
+ {
4190
+ "type": "object",
4191
+ "oneOf": [
4192
+ {
4193
+ "type": "object",
4194
+ "properties": {
4195
+ "ok": {
4196
+ "const": true
4197
+ }
4198
+ }
4199
+ },
4200
+ {
4201
+ "type": "object",
4202
+ "properties": {
4203
+ "ok": {
4204
+ "const": false
4205
+ },
4206
+ "error": {
4207
+ "type": "object",
4208
+ "properties": {
4209
+ "code": {
4210
+ "type": "string"
4211
+ },
4212
+ "message": {
4213
+ "type": "string"
4214
+ },
4215
+ "retryable": {
4216
+ "type": "boolean"
4217
+ },
4218
+ "recoveryAction": {
4219
+ "type": "string"
4220
+ }
4221
+ },
4222
+ "required": [
4223
+ "code",
4224
+ "message",
4225
+ "retryable",
4226
+ "recoveryAction"
4227
+ ],
4228
+ "additionalProperties": false
4229
+ }
4230
+ },
4231
+ "required": [
4232
+ "ok",
4233
+ "error"
4234
+ ],
4235
+ "additionalProperties": false
4236
+ }
4237
+ ]
4238
+ }
4239
+ ```
4240
+
4241
+ ### `platform_request_artifact_validation`
4242
+
4243
+ Request the independent reviewer for the exact deployment and bounded evidence. Returns durable operation status; unavailable infrastructure leaves operator review required, never approval.
4244
+
4245
+ Safety: read-only=false, destructive=false, idempotent=true, open-world=true.
4246
+
4247
+ Example request:
4248
+
4249
+ ```json
4250
+ {
4251
+ "sessionId": "00000000-0000-4000-8000-000000000001",
4252
+ "artifactVersionId": "00000000-0000-4000-8000-000000000001",
4253
+ "idempotencyKey": "example-request",
4254
+ "deploymentRecordId": "00000000-0000-4000-8000-000000000001",
4255
+ "summary": "<summary>",
4256
+ "docImpact": "material",
4257
+ "docImpactNotes": "<docImpactNotes>",
4258
+ "visualReview": {}
4259
+ }
4260
+ ```
4261
+
4262
+ Example success:
4263
+
4264
+ ```json
4265
+ {}
4266
+ ```
4267
+
4268
+ Input schema:
4269
+
4270
+ ```json
4271
+ {
4272
+ "type": "object",
4273
+ "additionalProperties": false,
4274
+ "properties": {
4275
+ "sessionId": {
4276
+ "type": "string",
4277
+ "format": "uuid"
4278
+ },
4279
+ "artifactVersionId": {
4280
+ "type": "string",
4281
+ "format": "uuid"
4282
+ },
4283
+ "idempotencyKey": {
4284
+ "type": "string",
4285
+ "minLength": 1,
4286
+ "maxLength": 128,
4287
+ "pattern": "^[A-Za-z0-9._:-]+$"
4288
+ },
4289
+ "deploymentRecordId": {
4290
+ "type": "string",
4291
+ "format": "uuid"
4292
+ },
4293
+ "summary": {
4294
+ "type": "string",
4295
+ "minLength": 3,
4296
+ "maxLength": 4000
4297
+ },
4298
+ "waitMs": {
4299
+ "type": "integer",
4300
+ "minimum": 0,
4301
+ "maximum": 1000
4302
+ },
4303
+ "buildOk": {
4304
+ "type": "boolean"
4305
+ },
4306
+ "typecheckOk": {
4307
+ "type": "boolean"
4308
+ },
4309
+ "docImpact": {
4310
+ "type": "string",
4311
+ "enum": [
4312
+ "material",
4313
+ "none"
4314
+ ]
4315
+ },
4316
+ "docImpactNotes": {
4317
+ "type": "string",
4318
+ "minLength": 12,
4319
+ "maxLength": 2000
4320
+ },
4321
+ "visualReview": {
4322
+ "type": "object",
4323
+ "additionalProperties": true
4324
+ },
4325
+ "dataValidation": {
4326
+ "type": "object",
4327
+ "additionalProperties": true
4328
+ }
4329
+ },
4330
+ "required": [
4331
+ "sessionId",
4332
+ "artifactVersionId",
4333
+ "idempotencyKey",
4334
+ "deploymentRecordId",
4335
+ "summary",
4336
+ "docImpact",
4337
+ "docImpactNotes",
4338
+ "visualReview"
4339
+ ]
4340
+ }
4341
+ ```
4342
+
4343
+ Output schema:
4344
+
4345
+ ```json
4346
+ {
4347
+ "type": "object",
4348
+ "oneOf": [
4349
+ {
4350
+ "type": "object",
4351
+ "properties": {
4352
+ "ok": {
4353
+ "const": true
4354
+ }
4355
+ }
4356
+ },
4357
+ {
4358
+ "type": "object",
4359
+ "properties": {
4360
+ "ok": {
4361
+ "const": false
4362
+ },
4363
+ "error": {
4364
+ "type": "object",
4365
+ "properties": {
4366
+ "code": {
4367
+ "type": "string"
4368
+ },
4369
+ "message": {
4370
+ "type": "string"
4371
+ },
4372
+ "retryable": {
4373
+ "type": "boolean"
4374
+ },
4375
+ "recoveryAction": {
4376
+ "type": "string"
4377
+ }
4378
+ },
4379
+ "required": [
4380
+ "code",
4381
+ "message",
4382
+ "retryable",
4383
+ "recoveryAction"
4384
+ ],
4385
+ "additionalProperties": false
4386
+ }
4387
+ },
4388
+ "required": [
4389
+ "ok",
4390
+ "error"
4391
+ ],
4392
+ "additionalProperties": false
4393
+ }
4394
+ ]
4395
+ }
4396
+ ```
4397
+
4398
+ ### `platform_artifact_validation_status`
4399
+
4400
+ Read the original validation result and pending prompts without starting another reviewer or deploy. Current authorization is rechecked before evidence delivery.
4401
+
4402
+ Safety: read-only=true, destructive=false, idempotent=true, open-world=true.
4403
+
4404
+ Example request:
4405
+
4406
+ ```json
4407
+ {
4408
+ "sessionId": "00000000-0000-4000-8000-000000000001",
4409
+ "operationId": "00000000-0000-4000-8000-000000000001"
4410
+ }
4411
+ ```
4412
+
4413
+ Example success:
4414
+
4415
+ ```json
4416
+ {}
4417
+ ```
4418
+
4419
+ Input schema:
4420
+
4421
+ ```json
4422
+ {
4423
+ "type": "object",
4424
+ "additionalProperties": false,
4425
+ "properties": {
4426
+ "sessionId": {
4427
+ "type": "string",
4428
+ "format": "uuid"
4429
+ },
4430
+ "operationId": {
4431
+ "type": "string",
4432
+ "format": "uuid"
4433
+ }
4434
+ },
4435
+ "required": [
4436
+ "sessionId",
4437
+ "operationId"
4438
+ ]
4439
+ }
4440
+ ```
4441
+
4442
+ Output schema:
4443
+
4444
+ ```json
4445
+ {
4446
+ "type": "object",
4447
+ "oneOf": [
4448
+ {
4449
+ "type": "object",
4450
+ "properties": {
4451
+ "ok": {
4452
+ "const": true
4453
+ }
4454
+ }
4455
+ },
4456
+ {
4457
+ "type": "object",
4458
+ "properties": {
4459
+ "ok": {
4460
+ "const": false
4461
+ },
4462
+ "error": {
4463
+ "type": "object",
4464
+ "properties": {
4465
+ "code": {
4466
+ "type": "string"
4467
+ },
4468
+ "message": {
4469
+ "type": "string"
4470
+ },
4471
+ "retryable": {
4472
+ "type": "boolean"
4473
+ },
4474
+ "recoveryAction": {
4475
+ "type": "string"
4476
+ }
4477
+ },
4478
+ "required": [
4479
+ "code",
4480
+ "message",
4481
+ "retryable",
4482
+ "recoveryAction"
4483
+ ],
4484
+ "additionalProperties": false
4485
+ }
4486
+ },
4487
+ "required": [
4488
+ "ok",
4489
+ "error"
4490
+ ],
4491
+ "additionalProperties": false
4492
+ }
4493
+ ]
4494
+ }
4495
+ ```
4496
+
4497
+ ### `platform_answer_operator_prompt`
4498
+
4499
+ Answer the exact saved operator prompt on the original review operation. Appends guidance and reopens the same eligible session; cannot approve validation or widen the saved grant.
4500
+
4501
+ Safety: read-only=false, destructive=false, idempotent=true, open-world=true.
4502
+
4503
+ Example request:
4504
+
4505
+ ```json
4506
+ {
4507
+ "sessionId": "00000000-0000-4000-8000-000000000001",
4508
+ "operationId": "00000000-0000-4000-8000-000000000001",
4509
+ "promptId": "00000000-0000-4000-8000-000000000001",
4510
+ "idempotencyKey": "example-request",
4511
+ "message": "<message>"
4512
+ }
4513
+ ```
4514
+
4515
+ Example success:
4516
+
4517
+ ```json
4518
+ {}
4519
+ ```
4520
+
4521
+ Input schema:
4522
+
4523
+ ```json
4524
+ {
4525
+ "type": "object",
4526
+ "additionalProperties": false,
4527
+ "properties": {
4528
+ "sessionId": {
4529
+ "type": "string",
4530
+ "format": "uuid"
4531
+ },
4532
+ "operationId": {
4533
+ "type": "string",
4534
+ "format": "uuid"
4535
+ },
4536
+ "promptId": {
4537
+ "type": "string",
4538
+ "format": "uuid"
4539
+ },
4540
+ "idempotencyKey": {
4541
+ "type": "string",
4542
+ "minLength": 1,
4543
+ "maxLength": 128,
4544
+ "pattern": "^[A-Za-z0-9._:-]+$"
4545
+ },
4546
+ "message": {
4547
+ "type": "string",
4548
+ "minLength": 3,
4549
+ "maxLength": 4000
4550
+ }
4551
+ },
4552
+ "required": [
4553
+ "sessionId",
4554
+ "operationId",
4555
+ "promptId",
4556
+ "idempotencyKey",
4557
+ "message"
4558
+ ]
4559
+ }
4560
+ ```
4561
+
4562
+ Output schema:
4563
+
4564
+ ```json
4565
+ {
4566
+ "type": "object",
4567
+ "oneOf": [
4568
+ {
4569
+ "type": "object",
4570
+ "properties": {
4571
+ "ok": {
4572
+ "const": true
4573
+ }
4574
+ }
4575
+ },
4576
+ {
4577
+ "type": "object",
4578
+ "properties": {
4579
+ "ok": {
4580
+ "const": false
4581
+ },
4582
+ "error": {
4583
+ "type": "object",
4584
+ "properties": {
4585
+ "code": {
4586
+ "type": "string"
4587
+ },
4588
+ "message": {
4589
+ "type": "string"
4590
+ },
4591
+ "retryable": {
4592
+ "type": "boolean"
4593
+ },
4594
+ "recoveryAction": {
4595
+ "type": "string"
4596
+ }
4597
+ },
4598
+ "required": [
4599
+ "code",
4600
+ "message",
4601
+ "retryable",
4602
+ "recoveryAction"
4603
+ ],
4604
+ "additionalProperties": false
4605
+ }
4606
+ },
4607
+ "required": [
4608
+ "ok",
4609
+ "error"
4610
+ ],
4611
+ "additionalProperties": false
4612
+ }
4613
+ ]
4614
+ }
4615
+ ```