carthagent 1.0.7 → 1.1.0-beta.2

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.
Files changed (303) hide show
  1. package/README.md +140 -83
  2. package/bin/ctg.mjs +14 -732
  3. package/docs/beta-rewards-e2e-plan.md +48 -0
  4. package/docs/beta-rewards-e2e-results.md +84 -0
  5. package/docs/cloud-onboarding-acceptance.md +65 -0
  6. package/docs/glyph-review/host-chrome-glyph-compatibility-v4.md +83 -0
  7. package/docs/glyph-review/test-isolation-v1.md +26 -0
  8. package/docs/glyph-review/typecheck-base.log +1 -0
  9. package/docs/glyph-review/typecheck-v4.log +1 -0
  10. package/docs/glyph-review/unicode-inventory-v4.csv +402 -0
  11. package/docs/help-dispatch-review.md +69 -0
  12. package/docs/launch-readiness-live-results.md +65 -0
  13. package/docs/legacy-cli.md +150 -0
  14. package/docs/live-theme-plugin-api.md +18 -0
  15. package/docs/native-cli.md +102 -0
  16. package/docs/native-compatibility.md +16 -0
  17. package/docs/native-daily-quests.md +132 -0
  18. package/docs/native-glyph-pty.md +59 -0
  19. package/docs/native-manual-testing.md +336 -0
  20. package/docs/native-slash-acceptance-handoff.md +49 -0
  21. package/docs/native-terminal-paired-failure-2026-10-17.md +40 -0
  22. package/docs/native-terminal-performance.md +310 -0
  23. package/docs/native-terminal-semantics-evidence/README.md +25 -0
  24. package/docs/native-terminal-semantics-evidence/controlled-host-model-selftest.json +16 -0
  25. package/docs/native-terminal-semantics-evidence/current-acceptance-status.json +59 -0
  26. package/docs/native-terminal-semantics-evidence/final-binary-focused-85bb44a.json +154 -0
  27. package/docs/native-terminal-semantics-evidence/final-binary-full-incomplete-85bb44a.json +160 -0
  28. package/docs/native-terminal-semantics-evidence/final-binary-layout-85bb44a.json +149 -0
  29. package/docs/native-terminal-semantics-evidence/final-binary-layout-interactive-85bb44a.json +159 -0
  30. package/docs/native-terminal-semantics-evidence/final-binary-model-picker-escape-unchanged-85bb44a.json +44 -0
  31. package/docs/native-terminal-semantics-evidence/final-binary-model-picker-exact-identity-85bb44a.json +47 -0
  32. package/docs/native-terminal-semantics-evidence/final-binary-model-picker-unchanged-model-incomplete-85bb44a.json +58 -0
  33. package/docs/native-terminal-semantics-evidence/final-binary-model-selftest.json +16 -0
  34. package/docs/native-terminal-semantics-evidence/final-binary-picker-cancel-incomplete-85bb44a.json +62 -0
  35. package/docs/native-terminal-semantics-evidence/focused-clipboard-title-stale-binary.json +161 -0
  36. package/docs/native-terminal-semantics-evidence/layout-stale-binary-observation-not-accepted.json +153 -0
  37. package/docs/native-terminal-semantics-evidence/picker-latest-incomplete-attempt.json +62 -0
  38. package/docs/native-terminal-semantics-evidence/picker-previous-probe-pass.json +61 -0
  39. package/docs/native-terminal-semantics.md +89 -0
  40. package/docs/native-upgrade.md +175 -0
  41. package/docs/opencode-composed-source-review.md +89 -0
  42. package/docs/opencode-migration.md +225 -9
  43. package/docs/opencode-owned-runtime.md +241 -0
  44. package/docs/opencode-runtime.md +12 -0
  45. package/docs/opencode-theme-provider-proof/README.md +55 -0
  46. package/docs/opencode-theme-provider-proof/live-theme-api-base.patch +122 -0
  47. package/docs/opencode-theme-provider-proof/plugin-theme-provider.patch +107 -0
  48. package/docs/opencode-theme-provider-proof/session-ui-base.patch +1217 -0
  49. package/docs/owned-host-controls-proof.md +39 -0
  50. package/docs/owned-runtime-release-manifest.md +42 -0
  51. package/docs/owned-visual-clear-proof.md +40 -0
  52. package/docs/patches/opencode-v2.0.32-glyph-spinner-test-isolation-v1.patch +50 -0
  53. package/docs/patches/opencode-v2.0.32-glyphs.patch +3670 -0
  54. package/docs/patches/opencode-v2.0.32-help-dispatch.patch +156 -0
  55. package/docs/patches/opencode-v2.0.32-live-theme-api.patch +122 -0
  56. package/docs/patches/opencode-v2.0.32-session-ui-combined-v1.patch +5272 -0
  57. package/docs/patches/opencode-v2.0.32-session-ui-combined-v2.patch +6052 -0
  58. package/docs/patches/opencode-v2.0.32-session-ui-combined-v3.patch +8657 -0
  59. package/docs/patches/opencode-v2.0.32-session-ui-combined-v4.patch +9928 -0
  60. package/docs/patches/opencode-v2.0.32-session-ui-combined-v5.patch +13965 -0
  61. package/docs/patches/opencode-v2.0.32-session-ui.patch +5137 -0
  62. package/docs/release-notes-beta.1.md +60 -0
  63. package/docs/release-notes-beta.2.md +60 -0
  64. package/docs/release-notes-native-draft.md +73 -0
  65. package/docs/release-notes-preview.10.md +121 -0
  66. package/docs/release-notes-preview.11.md +76 -0
  67. package/docs/release-notes-preview.12.md +55 -0
  68. package/docs/release-notes-preview.13.md +68 -0
  69. package/docs/release-notes-preview.9.md +130 -0
  70. package/docs/source-preview.md +120 -0
  71. package/evaluate.mjs +28 -1
  72. package/lib/budget.mjs +1 -1
  73. package/lib/cloud/client.mjs +13 -7
  74. package/lib/codegraph.mjs +1 -1
  75. package/lib/delivery-review.mjs +19 -6
  76. package/lib/delivery.mjs +3 -2
  77. package/lib/environment.mjs +8 -0
  78. package/lib/guidance.mjs +1 -1
  79. package/lib/opencode/cli-runtime.mjs +1188 -0
  80. package/lib/opencode/cli.mjs +253 -0
  81. package/lib/opencode/credentials.mjs +63 -8
  82. package/lib/opencode/demo.mjs +53 -0
  83. package/lib/opencode/evaluation-budget-plugin/index.ts +3 -0
  84. package/lib/opencode/evaluation.mjs +32 -12
  85. package/lib/opencode/headless.mjs +22 -5
  86. package/lib/opencode/provider-policy.mjs +23 -0
  87. package/lib/opencode/review.mjs +37 -16
  88. package/lib/opencode/runtime-artifact.mjs +335 -0
  89. package/lib/opencode/runtime-github-transport.mjs +121 -0
  90. package/lib/opencode/runtime-release.json +36 -0
  91. package/lib/opencode/runtime.mjs +299 -20
  92. package/lib/opencode/service.mjs +77 -35
  93. package/lib/opencode/session-options.mjs +6 -2
  94. package/lib/opencode/update.mjs +222 -0
  95. package/lib/opencode/workspace.mjs +1 -1
  96. package/lib/planning-advice.mjs +2 -2
  97. package/lib/providers/experiential.mjs +2 -2
  98. package/lib/providers/names.mjs +1 -1
  99. package/lib/tui/framing.mjs +1 -80
  100. package/lib/tui/models.mjs +1 -1
  101. package/lib/update.mjs +10 -1
  102. package/package.json +33 -7
  103. package/plugins/carthagent/README.md +23 -0
  104. package/plugins/carthagent/src/bootstrap.ts +1 -1
  105. package/plugins/carthagent/src/daily-evidence.mjs +57 -0
  106. package/plugins/carthagent/src/daily-quests-rpc.ts +50 -0
  107. package/plugins/carthagent/src/daily-source-rpc.ts +52 -0
  108. package/plugins/carthagent/src/index.ts +71 -24
  109. package/plugins/carthagent/src/rpc.ts +51 -6
  110. package/plugins/carthagent/src/server/codegraph.ts +12 -5
  111. package/plugins/carthagent/src/server/daily-quests-rpc.ts +277 -0
  112. package/plugins/carthagent/src/server/daily-source-rpc.ts +243 -0
  113. package/plugins/carthagent/src/server/delivery.ts +227 -112
  114. package/plugins/carthagent/src/server/framing.mjs +80 -0
  115. package/plugins/carthagent/src/server/policy.ts +1 -1
  116. package/plugins/carthagent/src/server/providers.ts +65 -36
  117. package/plugins/carthagent/src/server/session-controls.ts +3 -1
  118. package/plugins/carthagent/src/server/ship-agents.ts +77 -0
  119. package/plugins/carthagent/src/server/ship-context.mjs +60 -0
  120. package/plugins/carthagent/src/server/ship-guidance.ts +41 -0
  121. package/plugins/carthagent/src/server/ship-rpc.ts +71 -0
  122. package/plugins/carthagent/src/server/voyages-rpc.ts +280 -0
  123. package/plugins/carthagent/src/testing.ts +5 -0
  124. package/plugins/carthagent/src/tui.tsx +506 -0
  125. package/plugins/carthagent/src/ui/client.ts +127 -0
  126. package/plugins/carthagent/src/ui/commands.ts +70 -0
  127. package/plugins/carthagent/src/ui/daily-editor-focus.mjs +52 -0
  128. package/plugins/carthagent/src/ui/daily-editor.mjs +4 -0
  129. package/plugins/carthagent/src/ui/daily-quests-events.mjs +18 -0
  130. package/plugins/carthagent/src/ui/daily-quests-state.mjs +218 -0
  131. package/plugins/carthagent/src/ui/daily-quests.tsx +235 -0
  132. package/plugins/carthagent/src/ui/host-state.ts +42 -0
  133. package/plugins/carthagent/src/ui/model-command.ts +32 -0
  134. package/plugins/carthagent/src/ui/native-navigation.ts +23 -0
  135. package/plugins/carthagent/src/ui/native-review.d.mts +33 -0
  136. package/plugins/carthagent/src/ui/native-review.mjs +159 -0
  137. package/plugins/carthagent/src/ui/resume-session.mjs +34 -0
  138. package/plugins/carthagent/src/ui/select-mouse.ts +17 -0
  139. package/plugins/carthagent/src/ui/session-preferences.d.mts +7 -0
  140. package/plugins/carthagent/src/ui/session-preferences.mjs +14 -0
  141. package/plugins/carthagent/src/ui/theme-provision.d.mts +3 -0
  142. package/plugins/carthagent/src/ui/theme-provision.mjs +134 -0
  143. package/plugins/carthagent/src/ui/voyages-navigation-state.mjs +56 -0
  144. package/plugins/carthagent/src/ui/voyages-navigation.tsx +131 -0
  145. package/plugins/carthagent/src/ui/voyages-state.mjs +165 -0
  146. package/plugins/carthagent/src/ui/voyages.tsx +131 -0
  147. package/plugins/carthagent/src/ui/workspace-live.ts +61 -0
  148. package/plugins/carthagent/src/ui/workspace.tsx +379 -0
  149. package/plugins/carthagent/src/voyages-rpc.ts +64 -0
  150. package/plugins/carthagent/src/workspace-rpc.ts +36 -0
  151. package/plugins/carthagent/tests/commands.test.ts +107 -0
  152. package/plugins/carthagent/tests/session-preferences.test.mjs +41 -0
  153. package/plugins/carthagent/tests/voyages-navigation.test.tsx +269 -0
  154. package/plugins/carthagent/themes/carthage.json +67 -0
  155. package/plugins/carthagent/tui.ts +26 -1
  156. package/script/ctg/build-owned-runtime.sh +166 -0
  157. package/tests/budget-engine.test.mjs +4 -3
  158. package/tests/cli.test.mjs +52 -96
  159. package/tests/cloud-client.test.mjs +2 -2
  160. package/tests/daily-evidence.test.mjs +62 -0
  161. package/tests/delivery-review.test.mjs +57 -2
  162. package/tests/delivery.test.mjs +22 -1
  163. package/tests/experiential-extension.test.mjs +2 -2
  164. package/tests/experiential.test.mjs +1 -1
  165. package/tests/fixtures/native-discovery-plugin/server.ts +15 -0
  166. package/tests/generate-owned-runtime-release.test.mjs +354 -0
  167. package/tests/installed-runtime-contract.test.mjs +43 -0
  168. package/tests/native-cli-host-smoke.mjs +457 -0
  169. package/tests/native-daily-editor-focus.test.mjs +213 -0
  170. package/tests/native-daily-editor.test.mjs +43 -0
  171. package/tests/native-daily-quests-layout.test.mjs +55 -0
  172. package/tests/native-daily-quests-rpc.test.mjs +456 -0
  173. package/tests/native-daily-quests-ui.test.mjs +778 -0
  174. package/tests/native-daily-source.test.mjs +525 -0
  175. package/tests/native-demo-ui.test.mjs +48 -0
  176. package/tests/native-evaluation-admission.test.mjs +24 -0
  177. package/tests/native-fixture-browser-cleanup.test.mjs +65 -0
  178. package/tests/native-fixture-runtime.test.mjs +111 -0
  179. package/tests/native-fixture-stop-diagnostics.test.mjs +67 -0
  180. package/tests/native-glyph-pty.test.mjs +107 -0
  181. package/tests/native-manual-projects.test.mjs +170 -0
  182. package/tests/native-model-command.test.mjs +67 -0
  183. package/tests/native-owned-runtime-env.test.mjs +140 -0
  184. package/tests/native-paired-guards.test.mjs +464 -0
  185. package/tests/native-provider-policy.test.mjs +33 -0
  186. package/tests/native-pty-invocation.test.mjs +114 -0
  187. package/tests/native-pty-runtime.test.mjs +45 -0
  188. package/tests/native-resume-session.test.mjs +46 -0
  189. package/tests/native-review-consumer.test.mjs +286 -0
  190. package/tests/native-runtime-identity.test.mjs +214 -0
  191. package/tests/native-select-mouse.test.mjs +23 -0
  192. package/tests/native-ship-guidance.test.mjs +16 -0
  193. package/tests/native-ship-parity.test.mjs +526 -0
  194. package/tests/native-ship-plan.test.mjs +85 -0
  195. package/tests/native-ship-rpc.test.mjs +83 -0
  196. package/tests/native-ui-commands.test.mjs +6 -0
  197. package/tests/native-voyages-layout.test.mjs +28 -0
  198. package/tests/native-voyages-navigation.test.mjs +169 -0
  199. package/tests/native-voyages-rpc.test.mjs +397 -0
  200. package/tests/native-voyages-ui.test.mjs +307 -0
  201. package/tests/opencode-atomic-write.test.mjs +55 -0
  202. package/tests/opencode-cli.test.mjs +1312 -0
  203. package/tests/opencode-codegraph-plugin.test.mjs +47 -0
  204. package/tests/opencode-delivery.test.mjs +16 -0
  205. package/tests/opencode-providers.test.mjs +248 -20
  206. package/tests/opencode-runtime.test.mjs +597 -8
  207. package/tests/opencode-session-controls.test.mjs +15 -0
  208. package/tests/opencode-ship-rpc.test.mjs +71 -0
  209. package/tests/opencode-update.test.mjs +475 -0
  210. package/tests/opencode-workspace.test.mjs +51 -2
  211. package/tests/owned-runtime-publish-workflow.test.mjs +477 -0
  212. package/tests/release-workflow.test.mjs +46 -0
  213. package/tests/runtime-artifact.test.mjs +269 -0
  214. package/tests/runtime-development-trust.test.mjs +231 -0
  215. package/tests/runtime-github-transport.test.mjs +132 -0
  216. package/tests/runtime-token-env.test.mjs +23 -0
  217. package/tests/server.test.mjs +3 -1
  218. package/tests/ship-telemetry.test.mjs +1 -1
  219. package/tests/source-preview.test.mjs +253 -0
  220. package/tests/test_native_terminal_probe.py +76 -0
  221. package/tests/test_native_terminal_semantics.py +232 -0
  222. package/tests/tui.test.mjs +2 -2
  223. package/tests/update.test.mjs +42 -5
  224. package/tests/verify-draft-runtime-gate.test.mjs +280 -0
  225. package/tests/verify-owned-runtime-release.test.mjs +371 -0
  226. package/tests/workspace-live.test.mjs +127 -0
  227. package/tools/benchmark/diagnose-request.mjs +59 -36
  228. package/tools/benchmark/eval-common.mjs +3 -3
  229. package/tools/benchmark/evaluators.test.mjs +4 -4
  230. package/tools/benchmark/guard.test.mjs +35 -2
  231. package/tools/benchmark/guard.ts +20 -7
  232. package/tools/benchmark/planning-startup.test.mjs +30 -34
  233. package/tools/benchmark/runner.mjs +12 -7
  234. package/tools/benchmark/runner.test.mjs +23 -7
  235. package/tools/benchmark/upstream-error.test.mjs +16 -2
  236. package/tools/generate-owned-runtime-release.mjs +217 -0
  237. package/tools/installed-runtime-contract.mjs +16 -0
  238. package/tools/manual-runtime-manifest.mjs +39 -0
  239. package/tools/native-fixture-browser-cleanup.mjs +59 -0
  240. package/tools/native-fixture-stop-diagnostics.mjs +45 -0
  241. package/tools/native-fixture.mjs +199 -40
  242. package/tools/native-glyph-helpers.py +127 -0
  243. package/tools/native-glyph-pty.py +144 -0
  244. package/tools/native-manual-projects.mjs +259 -0
  245. package/tools/native-manual.mjs +338 -0
  246. package/tools/native-model-picker-acceptance.py +306 -0
  247. package/tools/native-owned-runtime-env.sh +47 -0
  248. package/tools/native-paired-guards.mjs +282 -0
  249. package/tools/native-paired-manifest.mjs +72 -0
  250. package/tools/native-paired-orchestration.sh +51 -0
  251. package/tools/native-plugin-readiness.mjs +33 -0
  252. package/tools/native-plugin-readiness.test.mjs +53 -0
  253. package/tools/native-pty-invocation.mjs +26 -0
  254. package/tools/native-pty-runtime.mjs +83 -0
  255. package/tools/native-pty-smoke.py +147 -24
  256. package/tools/native-public-repo-shell-result.mjs +13 -0
  257. package/tools/native-public-repo-shell-result.test.mjs +28 -0
  258. package/tools/native-runtime-identity.mjs +201 -0
  259. package/tools/native-slash-acceptance-env.py +38 -0
  260. package/tools/native-terminal-semantics.py +882 -0
  261. package/tools/owned-shell-observer/index.ts +16 -0
  262. package/tools/owned-shell-observer/package.json +1 -0
  263. package/tools/owned-visual-clear-env.py +48 -0
  264. package/tools/owned-visual-clear-model.py +21 -0
  265. package/tools/pinned-owned-runtime-inputs.mjs +46 -0
  266. package/tools/prepare-native-manual.mjs +122 -0
  267. package/tools/run-native-terminal-paired.sh +403 -0
  268. package/tools/runtime-token-env.mjs +8 -0
  269. package/tools/seed-native-switch-fixture.mjs +79 -0
  270. package/tools/test-native-controls.mjs +3 -1
  271. package/tools/test-native-daily-quests.mjs +65 -0
  272. package/tools/test-native-default-cli.mjs +106 -0
  273. package/tools/test-native-delivery-host.mjs +102 -20
  274. package/tools/test-native-evaluation.mjs +7 -3
  275. package/tools/test-native-glyph-pty.mjs +94 -0
  276. package/tools/test-native-host.mjs +91 -65
  277. package/tools/test-native-outcomes.mjs +3 -1
  278. package/tools/test-native-package.mjs +206 -38
  279. package/tools/test-native-performance.mjs +26 -0
  280. package/tools/test-native-product.mjs +90 -0
  281. package/tools/test-native-pty.mjs +34 -9
  282. package/tools/test-native-public-repo.mjs +224 -0
  283. package/tools/test-native-refresh-reentry.mjs +106 -0
  284. package/tools/test-native-report.mjs +27 -20
  285. package/tools/test-native-review.mjs +75 -0
  286. package/tools/test-native-runtime.mjs +120 -0
  287. package/tools/test-native-ship-models.mjs +176 -0
  288. package/tools/test-native-ship-walkthrough.mjs +96 -0
  289. package/tools/test-native-slash-commands.mjs +125 -0
  290. package/tools/test-native-slash-commands.py +242 -0
  291. package/tools/test-native-swe-host.mjs +224 -55
  292. package/tools/test-native-tasks.mjs +77 -0
  293. package/tools/test-native-terminal-performance.py +887 -0
  294. package/tools/test-native-terminal-readiness.sh +85 -0
  295. package/tools/test-native-terminal-semantics-installed.mjs +38 -0
  296. package/tools/test-native-visual-clear-installed.mjs +48 -0
  297. package/tools/test-owned-host-controls.mjs +238 -0
  298. package/tools/test-owned-opencode-runtime.mjs +35 -0
  299. package/tools/test-owned-visual-clear-env.py +120 -0
  300. package/tools/test-owned-visual-clear.py +373 -0
  301. package/tools/verify-draft-runtime-gate.mjs +138 -0
  302. package/tools/verify-owned-runtime-release.mjs +114 -0
  303. package/tools/verify-release-version.mjs +21 -1
@@ -0,0 +1,336 @@
1
+ # Native OpenCode manual-test candidate
2
+
3
+ This is the **unpublished 1.1.0-preview.9 release candidate**, not a stable 1.1.0
4
+ release or an available GitHub prerelease. The experimental updater selects
5
+ published releases only; it cannot install this candidate yet. Use the explicit
6
+ reviewed-artifact path below. The regular OpenCode installation is never replaced.
7
+ Native remains the default, inherited from preview.8 (`ctg native` remains an alias). The fixture runner
8
+ below uses a separately verified owned binary and isolated profiles. Agent/tool execution is **not an OS
9
+ sandbox**. Start with these disposable projects.
10
+
11
+ ## 1. Get the candidate source
12
+
13
+ For current candidate work, use the reviewed `release/preview-9-candidate`
14
+ checkout and record its exact commit and dirty state. The prebuild source is
15
+ `c51c5ae11293e63b658df297abc732db88d9109a`; final package/manifest and documentation
16
+ changes are separate from that prebuild source. See the
17
+ [candidate notes](release-notes-preview.9.md).
18
+
19
+ The following exact-tag clone is **for future use only, after publication**.
20
+ After publication, `ctg update --channel experimental` can select the published
21
+ preview; it does not select a branch or prebuild. Launch with `ctg`.
22
+
23
+ ```sh
24
+ git -c core.autocrlf=false clone -c core.autocrlf=false --branch v1.1.0-preview.9 https://github.com/B-icy/Carthagent.git ctg-native-manual
25
+ cd ctg-native-manual
26
+ npm ci
27
+ ```
28
+
29
+ The clone-local line-ending setting preserves hash-pinned patch bytes on Windows;
30
+ it does not change global Git configuration. Node 24.21 and Git were used here;
31
+ the package minimum is Node 22.19.0. Node 24 may print an engine warning for
32
+ `@opentui/core`'s Node >=26.4 declaration. This candidate's renderer runs in the
33
+ bundled Bun-based executable, not Node; local Node 24 results are recorded
34
+ separately from that warning. Python 3 is needed only for automated POSIX PTY
35
+ probes, not for the interactive manual runner. No Bun installation is required.
36
+
37
+ ## 2. Prepare your machine's runtime and projects
38
+
39
+ Run this helper from the source checkout, which includes `package-lock.json`, not
40
+ from the global npm installation. By default it acquires the current platform's
41
+ archive from the exact published release in the packaged trust manifest. GitHub
42
+ CLI authentication is not required for published assets. Setup fails rather than
43
+ silently selecting an upstream/system binary.
44
+
45
+ ```sh
46
+ node tools/prepare-native-manual.mjs ../ctg-manual-kit
47
+ ```
48
+
49
+ That default command requires published assets. For preview.9 before publication,
50
+ use the explicit candidate manifest and archive command below instead.
51
+
52
+ Supported targets: Linux x64/arm64, macOS x64/arm64, Windows x64. Use matching Node
53
+ architecture; native Windows arm64 is not in the reviewed candidate. WSL is Linux,
54
+ not proof of Windows terminal behavior. The commands also work in PowerShell.
55
+
56
+ For offline archive acquisition, obtain the matching release archive first, then use:
57
+
58
+ ```sh
59
+ node tools/prepare-native-manual.mjs ../ctg-manual-kit --assets /path/to/unzipped-artifact
60
+ ```
61
+
62
+ For an unpublished prebuild, obtain the matching artifact and its complete candidate
63
+ manifest from the reviewed build. Supply an independently checked manifest digest:
64
+
65
+ ```sh
66
+ node tools/prepare-native-manual.mjs ../ctg-candidate-kit --assets /path/to/archives --manifest /path/to/runtime-release.json.candidate --manifest-sha256 aa5de65b633219423d21b1cc645945028a2d5565714b71760cbcc18badc5f4e5
67
+ node tools/native-manual.mjs ../ctg-candidate-kit tiny --manifest /path/to/runtime-release.json.candidate --manifest-sha256 aa5de65b633219423d21b1cc645945028a2d5565714b71760cbcc18badc5f4e5
68
+ ```
69
+
70
+ These pins identify prebuild run `40151970983` for preview.9. Its original
71
+ 13-file bundle was independently verified through the production acquirer, and
72
+ manifest regeneration was byte-identical. The new Linux ARM64 bytes passed
73
+ isolated staged native-host and Ship-model probes; other platforms' execution
74
+ remains unverified here. Setup above executes a verified `--version`;
75
+ neither that nor archive verification substitutes for full installed acceptance.
76
+ Use the same `--manifest` and `--manifest-sha256` on **every** candidate-kit
77
+ invocation below (including `--smoke`, `--live`, and `--stop`), and replace
78
+ `../ctg-manual-kit` with `../ctg-candidate-kit`. Retain `--assets` and both manifest
79
+ arguments when preparing a larger unpublished kit too.
80
+
81
+ Do not derive the expected digest from an untrusted download without reviewing it.
82
+ The helper prints the same manifest arguments to use with `native-manual.mjs`.
83
+ Existing published manifests and per-platform archive hashes are never rewritten
84
+ to make a different candidate pass.
85
+
86
+ The directory must contain `opencode-<target>.tar.gz`, **not** an arbitrary
87
+ executable. Setup uses the production archive verifier, checks the packaged trust
88
+ root, source/patch/lock and archive/executable SHA-256 pins, and executes a checked
89
+ `--version`. It refuses an existing destination. No global install, normal
90
+ OpenCode profile, shell startup file, or system configuration is modified.
91
+
92
+ The kit contains three independent Git repositories and a file/hash inventory:
93
+
94
+ | Project | Purpose | Before implementation |
95
+ | --- | --- | --- |
96
+ | `tiny` | Invoice discount in integer cents; validation and immutable input | 2 baseline tests pass; feature acceptance intentionally fails |
97
+ | `product` | Forgeboard: real HTTP server, board UI, filtering, optimistic-concurrency update task | HTTP/UI baseline passes; PATCH acceptance intentionally fails |
98
+ | `scale` | 128 domains, over 1,400 files, shared rounding bug, cross-package imports | 128 integration tests pass; rounding acceptance intentionally fails |
99
+
100
+ For a larger navigation/coverage stress project, prepare a **different** kit:
101
+
102
+ ```sh
103
+ node tools/prepare-native-manual.mjs ../ctg-large-kit --packages 1024
104
+ ```
105
+
106
+ This generates over 11,200 tracked files and 1,024 domain tests. It is synthetic,
107
+ not a claim about performance on a large commercial application. It deliberately
108
+ exceeds the usual 8,000-file navigation cap: coverage must report limits honestly.
109
+ No fixture needs `npm install`, a database, browser driver, cloud account, or secret.
110
+
111
+ ## 3. Start with the provider-free UI
112
+
113
+ Run from the candidate source directory:
114
+
115
+ ```sh
116
+ node tools/native-manual.mjs ../ctg-manual-kit tiny
117
+ node tools/native-manual.mjs ../ctg-manual-kit product
118
+ node tools/native-manual.mjs ../ctg-manual-kit scale
119
+ ```
120
+
121
+ Each launch creates a disposable project copy and profile, starts the real owned
122
+ server/plugin plus a loopback-only **scripted** provider, and attaches the real TUI.
123
+ Provider/API/GitHub keys are not forwarded. Responses are fixtures, not reasoning;
124
+ do not use this mode to evaluate model quality or automatic implementation.
125
+ The copy/profile is removed on normal exit. The original kit projects stay clean.
126
+
127
+ Type `CTG_MANUAL_INSPECT` to exercise a real native tool call: the fixture authors
128
+ a baseline delivery plan, runs the project's actual Node tests through the native
129
+ shell, and returns `CTG_MANUAL_INSPECTION_COMPLETE` plus
130
+ `CTG_MANUAL_BASELINE_EXIT=0`. The plan unlocks the tool through production policy;
131
+ it does not disable the delivery gates or claim verified delivery/review.
132
+
133
+ The same path can be checked without an interactive terminal:
134
+
135
+ ```sh
136
+ node tools/native-manual.mjs ../ctg-manual-kit tiny --smoke
137
+ node tools/native-manual.mjs ../ctg-manual-kit product --smoke
138
+ node tools/native-manual.mjs ../ctg-manual-kit scale --smoke
139
+ ```
140
+
141
+ Smoke reports are under `<kit>/reports/`. A failed baseline, changed runtime,
142
+ wrong platform, or rejected delivery plan fails the command.
143
+
144
+ ## 4. Manual terminal checklist
145
+
146
+ Use your real terminal and font, recording OS, terminal/version, Node architecture,
147
+ kit manifest hash, and executable SHA-256 from `manual-kit.json`.
148
+
149
+ - [ ] Normal startup; no Pi fallback; `ctg-fixture/fixture` selected offline.
150
+ - [ ] Type, paste multiline text, edit, cancel, and send exactly once. Include
151
+ `café Ελληνικά 日本語 🧪` and literal `<script>alert("x")</script>`.
152
+ - [ ] Resize wide/narrow while typing and while a dialog is open. No lost text,
153
+ stale screen, duplicate prompt, or terminal-title leak after exit.
154
+ - [ ] `/help` and `/ctg-help` show CTG commands, not a provider prompt.
155
+ - [ ] `/theme carthage` and another theme; reopen and verify colors/settings.
156
+ - [ ] `/model` cancellation leaves the selected model unchanged. Do not select
157
+ external providers in offline mode. Test live model variants only when supported.
158
+ - [ ] `/autocompact off`, repeated `off`, `on`, and bare toggle; another session
159
+ remains independent. `/compact` remains a separate manual operation.
160
+ - [ ] Send a marker, `/clear`, then ask another question. Visible transcript is
161
+ cleared, not deleted. Reopen the same session and check durable history.
162
+ - [ ] `/copy`, drag selection, and paste into a local editor: exact text, no
163
+ truncated Unicode or escape sequences. Physical clipboard is a manual gate.
164
+ - [ ] `/export manual-session.html` produces escaped HTML in the disposable
165
+ project. Copy it out yourself before exit if you want to retain it; never
166
+ export a real credential-bearing conversation into a shared directory.
167
+ - [ ] `/workflow`, `/architecture`, `/evidence`, `/ctg-workspace`; actual unknown,
168
+ incomplete, or empty evidence must remain honest, not invented green receipts.
169
+ - [ ] Use native back/session navigation to leave custom workspace routes; they
170
+ are not a replacement composer. Test independent sessions and worktree tasks.
171
+ - [ ] Close with the normal native quit action, then verify title/input restoration.
172
+ Abruptly killing the wrapper is not a cleanup test.
173
+
174
+ ### Known issues to observe, not waive
175
+
176
+ - Actual-slash acceptance is **partial**: `/stats` may select native host stats
177
+ instead of CTG's handler; bare `/guide` does not reliably toggle framing on the
178
+ tested completion path. `/guide <task>` and `/raw <prompt>` work in the recorded
179
+ test. Use explicit `--no-guide` for live launch when you need framing disabled.
180
+ - Full physical clipboard, terminal-title readback, long-duration memory, and
181
+ controlled paired performance acceptance remain manual/release gates.
182
+ - Linux automated success does not establish macOS/Windows native UI acceptance.
183
+ - GitHub draft/public release installation is not tested by this development
184
+ override. Use the reviewed preview.9 prebuild assets and manifest together;
185
+ do not substitute preview.8 assets or the unshipped v1.1.0 stable tag. Final-tag
186
+ draft and anonymous-public default-resolver acceptance are still pending.
187
+ - Actual 60x12 terminal navigation was functional in development-runtime tests;
188
+ that is not model-based visual approval or full cross-OS UI acceptance.
189
+
190
+ ## 5. Explicit live-provider testing
191
+
192
+ Only this mode can use real provider credentials and incur charges. It operates
193
+ on the kit's persistent project, so inspect diffs afterward. The profile is
194
+ `<kit>/profiles/live`, not your existing CTG/OpenCode profile. Supported environment
195
+ keys forwarded intentionally are OPENAI_API_KEY, ANTHROPIC_API_KEY,
196
+ OPENROUTER_API_KEY, and GEMINI_API_KEY. Otherwise log in explicitly in this profile:
197
+
198
+ ```sh
199
+ node tools/native-manual.mjs ../ctg-manual-kit tiny --live -- login
200
+ node tools/native-manual.mjs ../ctg-manual-kit tiny --live -- --max-tools 40 --max-seconds 300 --review no "Read TASK.md, implement the task, run both test suites, and report limitations. Do not push or create a PR."
201
+ ```
202
+
203
+ Choose a provider/model explicitly if needed by appending `--provider` and `--model`.
204
+ These are tool/time limits, **not a monetary cap**. Set a provider-side spending
205
+ limit before running. The scripted fixture is not paid-provider evidence. The
206
+ live Voyages development-runtime observations in the candidate notes are account
207
+ and equipment tests, not a paid-model benchmark or proof of paid purchases.
208
+
209
+ Repeat on `product`, then `scale`, increasing limits only deliberately. For strict
210
+ workflow use `--workflow strict`. Do not treat a deterministic offline fixture's
211
+ review verdict as independent model review. PR review/push/merge and billing
212
+ operations are not needed for these tests.
213
+
214
+ In another terminal, verify the actual workspace independently:
215
+
216
+ ```sh
217
+ cd ../ctg-manual-kit/projects/product
218
+ npm test
219
+ npm run test:acceptance
220
+ npm start
221
+ # Open http://127.0.0.1:3017; test keyboard controls, validation, and competing updates.
222
+ git diff --check
223
+ git diff
224
+ ```
225
+
226
+ Use a second checkout/copy for an independent task rather than editing your own
227
+ production repo. Reopen persistent live sessions to test restart/history. Stop
228
+ only this kit's service when finished:
229
+
230
+ ```sh
231
+ node tools/native-manual.mjs ../ctg-manual-kit tiny --live --stop
232
+ ```
233
+
234
+ Keep the live profile private: it may now contain credentials and personal
235
+ conversation data. **Do not upload, bundle, serve, or commit the kit directory.**
236
+ For a fresh fixture create a new kit rather than resetting a directory containing
237
+ work you might want. Uninstall is simply stopping its service and removing the
238
+ candidate checkout and test kit after saving wanted work; no global binary changed.
239
+
240
+ ## 6. Reproduce automated diagnostics
241
+
242
+ POSIX example (adjust paths; do not export these persistently):
243
+
244
+ ```sh
245
+ export CTG_OWNED_OPENCODE_RUNTIME="$(pwd)/../ctg-candidate-kit/runtimes/1.1.0-preview.9/linux-x64"
246
+ export CTG_TEST_RUNTIME_RELEASE_MANIFEST="/path/to/runtime-release.json.candidate"
247
+ node tools/test-native-swe-host.mjs
248
+ node tools/test-native-public-repo.mjs
249
+ node tools/test-native-delivery-host.mjs
250
+ node tools/test-native-slash-commands.mjs
251
+ ```
252
+
253
+ The public-repo diagnostic downloads a pinned `is-number` checkout and dev
254
+ packages, but uses an offline provider. Slash acceptance currently returns 2 for
255
+ its known partial result; keep the JSON proof instead of marking it passed.
256
+ For `test-native-pty.mjs`, use `CTG_TEST_RUNTIME_ARTIFACT_ROOT` instead of
257
+ `CTG_OWNED_OPENCODE_RUNTIME` (unset the latter); this is the stricter PTY trust
258
+ contract. Test default release acquisition separately only after publication.
259
+
260
+ Share sanitized observations: exact command, expected/actual result, terminal and
261
+ platform, source commit, runtime hash, and minimal reproduction. Do not attach
262
+ profiles, auth files, raw environments, or private-session exports.
263
+
264
+ ## 7. Checked-in development runtime provenance
265
+
266
+ An explicitly selected owned root (`CTG_OWNED_OPENCODE_RUNTIME` or the internal
267
+ `ownedRuntime` option) may use either the published runtime patch provenance or
268
+ the checked-in development patch provenance. Both paths still require the
269
+ pinned Carthagent owner, upstream source repository/revision, lock digest,
270
+ compatibility/runtime versions, channel, host platform, disabled web UI, exact
271
+ `cli-<platform>/bin/opencode[.exe]` layout, matching executable `SHA256SUMS`
272
+ entry and actual bytes, and exact owned `--version` output. An adjacent
273
+ `runtime-release.json` cannot authorize a different source, lock, or patch.
274
+ The explicit root is a development selector: its local checksum detects byte
275
+ changes but does not independently establish a published binary's provenance.
276
+
277
+ The update point for a reviewed local patch is
278
+ `CTG_DEVELOPMENT_RUNTIME_PATCH_SHA256` in `lib/opencode/runtime.mjs`. It pins
279
+ the development patch `docs/patches/opencode-v2.0.32-session-ui-combined-v5.patch`
280
+ (SHA-256 `ec4bb182308ed8b311513aad5c9c7d57dcd0db103f0882f3dc3517d535b4c975`),
281
+ a replacement patch containing the published combined-v4 changes plus the
282
+ folder-browser controller, the Browse folders dialog with its sidebar, compact
283
+ rail and command-palette entry points, the directory-first Projects rail (current
284
+ folder card with Browse, New session and model controls, distinct folder and
285
+ group headings, and an active-session marker), the folder and model setup for
286
+ new sessions (global and folder "New session here" entries; the session is
287
+ created only on the first send, with the chosen folder, agent, model and
288
+ variant), and their tests. It applies directly to a clean
289
+ checkout of upstream `843a6c514e606b436a7fe713422ace0a93ad3d61`; do not apply
290
+ it on top of v4:
291
+
292
+ ```sh
293
+ git clone https://github.com/anomalyco/opencode.git opencode-dev
294
+ git -C opencode-dev checkout 843a6c514e606b436a7fe713422ace0a93ad3d61
295
+ script/ctg/prepare-development-runtime.sh opencode-dev
296
+ ```
297
+
298
+ The preparation recipe checks the source revision, a clean checkout, and the
299
+ patch hash, then applies the patch. It does not install, compile, or publish.
300
+ After generating and reviewing new patch bytes, update **only this development
301
+ constant** and the preparation recipe's `EXPECTED_PATCH`. The regression test
302
+ in `tests/native-ship-plan.test.mjs` requires both to match the checked-in
303
+ development patch, and that the shared release recipe
304
+ `script/ctg/build-owned-runtime.sh` still pins the published v4 patch.
305
+ Do not change `CTG_RUNTIME_PATCH_SHA256`, the published
306
+ `lib/opencode/runtime-release.json`, its archive/executable pins, or historical
307
+ release documentation to make a development build pass. Promotion to a public
308
+ release requires its separate release-verification process.
309
+
310
+ The default manual-kit manifest is validated against the same immutable
311
+ published pins, not the advancing development recipe. Explicit manual-kit
312
+ candidate manifests must match the current recipe as well as their independently
313
+ supplied manifest digest. This keeps existing published kits usable without
314
+ allowing candidate provenance through the published path.
315
+
316
+ The normal public resolver continues to acquire and verify the published
317
+ release pins only. It will not accept development patch provenance or changed
318
+ executable bytes, even when the cache's adjacent manifest/checksums agree.
319
+ `CTG_OPENCODE_BIN` / the `binary` option retain their separate
320
+ upstream-compatible behavior and are not owned development provenance selectors.
321
+
322
+ Native development tests need an **independently reviewed test manifest** via
323
+ `CTG_TEST_RUNTIME_RELEASE_MANIFEST`. Its source/lock/patch/version/platform and
324
+ asset executable digest must describe the selected development artifact, not
325
+ the unchanged published artifact. `preflightNativeTestRuntimeArtifact` checks
326
+ that test record against provenance and actual bytes before executing
327
+ `--version`. `CTG_TEST_RUNTIME_SHA256` can explicitly override only the expected
328
+ test executable digest; it cannot override patch/source/lock/version checks.
329
+ Keep the test manifest separate from the released manifest; do not derive trust
330
+ solely from an artifact's self-declared `ctg-runtime.json`.
331
+
332
+ For PTY tests, keep using `CTG_TEST_RUNTIME_ARTIFACT_ROOT` plus the trusted test
333
+ manifest as described above, not the developer selector. A passing explicit
334
+ development-root test is **not** installed-default/public-release acceptance;
335
+ run that acceptance separately with all developer/test selectors unset against
336
+ the immutable released artifacts.
@@ -0,0 +1,49 @@
1
+ # Native slash-command acceptance handoff
2
+
3
+ Status: **incomplete / not ready to publish**. This is retained handoff evidence,
4
+ not a passing product acceptance claim.
5
+
6
+ ## Scope and candidate
7
+
8
+ - Source base: `00d4a173f24b038067244386667e6648dd06c679`.
9
+ - Candidate runtime: `/home/baissi/.local/share/opencode/ctg-runtime-prebuild-39097969783/verified-cache/1.1.0/linux-x64/cli-linux-x64/bin/opencode`.
10
+ - Trusted manifest: `/home/baissi/.local/share/opencode/ctg-runtime-prebuild-39097969783/ctg-runtime-candidate-1.1.0/runtime-release.json.candidate`.
11
+ - The manifest's `linux-x64.executableSha256` and the selected executable both
12
+ matched `e9af36982c82a38666450376ebc80026348269bce1663163f3043a99bc70303c`
13
+ before the native test runner invoked the runtime.
14
+ - Fixture: real native OpenCode host, exact `carthagent` plugin inventory
15
+ activation, loopback-only OpenAI-compatible provider, disposable profile and
16
+ project, strict child environment. No browser or real provider was used.
17
+ - PTY interactions submitted slash text and did not count autocomplete display
18
+ as successful dispatch.
19
+
20
+ ## Retained evidence
21
+
22
+ Latest proof: `/tmp/opencode/ctg-slash-acceptance-proof.json`
23
+ Latest runner log: `/tmp/opencode/ctg-slash-acceptance-logs.json`
24
+
25
+ Observed outcomes in the recorded partial run:
26
+
27
+ - `/export [file]`: handler wrote a complete HTML document; hostile session
28
+ content was escaped and not executable.
29
+ - `/guide <task>`: provider received the delivery-framed prompt.
30
+ - `/raw <prompt>`: provider received the exact unframed text.
31
+ - `/workflow`, `/architecture`, `/evidence`: each actual slash submission
32
+ rendered its corresponding Carthagent route, including observed empty/unknown
33
+ receipt state rather than invented success.
34
+ - `/stats`: **failed**. The runtime selected the native host stats command rather
35
+ than CTG's plugin stats handler; the session token/cost unknown-value labels
36
+ were therefore not verified.
37
+ - `/guide` toggle: **failed**. The subsequent provider request remained framed;
38
+ the no-argument plugin handler was not dispatched by the tested input path.
39
+
40
+ ## Follow-up needed
41
+
42
+ Investigate slash dispatch against the exact candidate's native TUI behavior,
43
+ especially duplicate host/plugin command names and no-argument commands. Add
44
+ focused runtime-native dispatch coverage if the current registration API cannot
45
+ express those handlers reliably. Then rerun a fresh exact-session, plugin-active
46
+ offline PTY test and update this document with the exact resulting proof/log paths.
47
+ Do not represent the current partial proof as acceptance.
48
+
49
+ No product source change is retained for the unverified `/stats` experiment.
@@ -0,0 +1,40 @@
1
+ # Native terminal paired attempt failure record — 2026-10-17
2
+
3
+ This is a sanitized failure summary, not performance acceptance evidence.
4
+
5
+ - Harness head: `198e66b47a00e2d8938b0e44be698cb6c0ffed26`.
6
+ - Frozen product source: `38ad06f7d439bc7c15b901f7b2c741b31486e93a`.
7
+ - Owned executable: OpenCode `2.0.32`, SHA-256
8
+ `489b51816a77809e841310e80c88e834c28c19ad1639e12ba8a19f08b47ab607`.
9
+ - Dependency tree SHA-256:
10
+ `a25d9aed67019a73dcf6e8a77746a043f4b76c633bbb02184350aaaa5d22c24d`.
11
+ - Window: 2026-10-17 18:15:41–18:16:54 UTC; requested order was baseline,
12
+ CTG, CTG, baseline; 30 samples per condition.
13
+ - Aggregate runner exit: `1`.
14
+ - Retained artifact directory:
15
+ `/tmp/opencode/ctg-native-terminal-paired-approved-20261017T181325Z`.
16
+
17
+ Both baseline fixture seeders failed during dependency identity validation
18
+ because the baseline's intentionally null plugin path was passed to `resolve`.
19
+ Both CTG fixtures reported native Carthagent active and passed its health probe,
20
+ but their PTY runs failed before samples because the readiness detector looked
21
+ for `Ask anything` instead of the product's native `Message carthagent…`
22
+ placeholder. Reports have `runStatus: failed`; no valid input or switch
23
+ percentiles/samples were produced. Preserve the raw private artifact directory
24
+ for audit, but do not copy fixture credentials or raw seeder logs into source
25
+ control.
26
+
27
+ These are two distinct harness defects. The current fix resolves baseline
28
+ provenance from the immutable execution root and uses the actual native editor
29
+ placeholder while retaining an exact changed-cell-at-origin assertion. A new
30
+ bounded readiness mode is diagnostic only and does not create latency samples.
31
+ It requires independent review and must not be run while authors/material work
32
+ is active without fresh operator permission. No ABBA rerun is authorized by
33
+ this failure record.
34
+
35
+ The acceptance record still has 50 ms input p95 and 150 ms warm-switch p95
36
+ targets. It defines no sustained-memory ceiling, reconnect/streaming reliability
37
+ target, or long-window duration. The existing short idle RSS/output observation
38
+ is descriptive only. A separate long-window design is documented in
39
+ `native-terminal-performance.md`; it needs a defined workload/acceptance policy
40
+ and an independently authorized quiet host window before execution.