carthagent 1.0.7 → 1.1.0-preview.13

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 (289) hide show
  1. package/README.md +140 -83
  2. package/bin/ctg.mjs +14 -732
  3. package/docs/glyph-review/host-chrome-glyph-compatibility-v4.md +83 -0
  4. package/docs/glyph-review/test-isolation-v1.md +26 -0
  5. package/docs/glyph-review/typecheck-base.log +1 -0
  6. package/docs/glyph-review/typecheck-v4.log +1 -0
  7. package/docs/glyph-review/unicode-inventory-v4.csv +402 -0
  8. package/docs/help-dispatch-review.md +69 -0
  9. package/docs/legacy-cli.md +150 -0
  10. package/docs/live-theme-plugin-api.md +18 -0
  11. package/docs/native-cli.md +102 -0
  12. package/docs/native-compatibility.md +16 -0
  13. package/docs/native-daily-quests.md +132 -0
  14. package/docs/native-glyph-pty.md +59 -0
  15. package/docs/native-manual-testing.md +336 -0
  16. package/docs/native-slash-acceptance-handoff.md +49 -0
  17. package/docs/native-terminal-paired-failure-2026-10-17.md +40 -0
  18. package/docs/native-terminal-performance.md +310 -0
  19. package/docs/native-terminal-semantics-evidence/README.md +25 -0
  20. package/docs/native-terminal-semantics-evidence/controlled-host-model-selftest.json +16 -0
  21. package/docs/native-terminal-semantics-evidence/current-acceptance-status.json +59 -0
  22. package/docs/native-terminal-semantics-evidence/final-binary-focused-85bb44a.json +154 -0
  23. package/docs/native-terminal-semantics-evidence/final-binary-full-incomplete-85bb44a.json +160 -0
  24. package/docs/native-terminal-semantics-evidence/final-binary-layout-85bb44a.json +149 -0
  25. package/docs/native-terminal-semantics-evidence/final-binary-layout-interactive-85bb44a.json +159 -0
  26. package/docs/native-terminal-semantics-evidence/final-binary-model-picker-escape-unchanged-85bb44a.json +44 -0
  27. package/docs/native-terminal-semantics-evidence/final-binary-model-picker-exact-identity-85bb44a.json +47 -0
  28. package/docs/native-terminal-semantics-evidence/final-binary-model-picker-unchanged-model-incomplete-85bb44a.json +58 -0
  29. package/docs/native-terminal-semantics-evidence/final-binary-model-selftest.json +16 -0
  30. package/docs/native-terminal-semantics-evidence/final-binary-picker-cancel-incomplete-85bb44a.json +62 -0
  31. package/docs/native-terminal-semantics-evidence/focused-clipboard-title-stale-binary.json +161 -0
  32. package/docs/native-terminal-semantics-evidence/layout-stale-binary-observation-not-accepted.json +153 -0
  33. package/docs/native-terminal-semantics-evidence/picker-latest-incomplete-attempt.json +62 -0
  34. package/docs/native-terminal-semantics-evidence/picker-previous-probe-pass.json +61 -0
  35. package/docs/native-terminal-semantics.md +89 -0
  36. package/docs/native-upgrade.md +177 -0
  37. package/docs/opencode-composed-source-review.md +89 -0
  38. package/docs/opencode-migration.md +225 -9
  39. package/docs/opencode-owned-runtime.md +241 -0
  40. package/docs/opencode-runtime.md +12 -0
  41. package/docs/opencode-theme-provider-proof/README.md +55 -0
  42. package/docs/opencode-theme-provider-proof/live-theme-api-base.patch +122 -0
  43. package/docs/opencode-theme-provider-proof/plugin-theme-provider.patch +107 -0
  44. package/docs/opencode-theme-provider-proof/session-ui-base.patch +1217 -0
  45. package/docs/owned-host-controls-proof.md +39 -0
  46. package/docs/owned-runtime-release-manifest.md +42 -0
  47. package/docs/owned-visual-clear-proof.md +40 -0
  48. package/docs/patches/opencode-v2.0.32-glyph-spinner-test-isolation-v1.patch +50 -0
  49. package/docs/patches/opencode-v2.0.32-glyphs.patch +3670 -0
  50. package/docs/patches/opencode-v2.0.32-help-dispatch.patch +156 -0
  51. package/docs/patches/opencode-v2.0.32-live-theme-api.patch +122 -0
  52. package/docs/patches/opencode-v2.0.32-session-ui-combined-v1.patch +5272 -0
  53. package/docs/patches/opencode-v2.0.32-session-ui-combined-v2.patch +6052 -0
  54. package/docs/patches/opencode-v2.0.32-session-ui-combined-v3.patch +8657 -0
  55. package/docs/patches/opencode-v2.0.32-session-ui-combined-v4.patch +9928 -0
  56. package/docs/patches/opencode-v2.0.32-session-ui-combined-v5.patch +13965 -0
  57. package/docs/patches/opencode-v2.0.32-session-ui.patch +5137 -0
  58. package/docs/release-notes-native-draft.md +73 -0
  59. package/docs/release-notes-preview.10.md +121 -0
  60. package/docs/release-notes-preview.11.md +76 -0
  61. package/docs/release-notes-preview.12.md +55 -0
  62. package/docs/release-notes-preview.13.md +68 -0
  63. package/docs/release-notes-preview.9.md +130 -0
  64. package/docs/source-preview.md +120 -0
  65. package/evaluate.mjs +28 -1
  66. package/lib/budget.mjs +1 -1
  67. package/lib/codegraph.mjs +1 -1
  68. package/lib/delivery-review.mjs +11 -1
  69. package/lib/delivery.mjs +3 -2
  70. package/lib/environment.mjs +8 -0
  71. package/lib/guidance.mjs +1 -1
  72. package/lib/opencode/cli-runtime.mjs +1171 -0
  73. package/lib/opencode/cli.mjs +252 -0
  74. package/lib/opencode/credentials.mjs +63 -8
  75. package/lib/opencode/demo.mjs +53 -0
  76. package/lib/opencode/evaluation-budget-plugin/index.ts +3 -0
  77. package/lib/opencode/evaluation.mjs +32 -12
  78. package/lib/opencode/headless.mjs +8 -4
  79. package/lib/opencode/provider-policy.mjs +23 -0
  80. package/lib/opencode/review.mjs +37 -16
  81. package/lib/opencode/runtime-artifact.mjs +335 -0
  82. package/lib/opencode/runtime-github-transport.mjs +121 -0
  83. package/lib/opencode/runtime-release.json +36 -0
  84. package/lib/opencode/runtime.mjs +299 -20
  85. package/lib/opencode/service.mjs +77 -35
  86. package/lib/opencode/session-options.mjs +6 -2
  87. package/lib/opencode/update.mjs +222 -0
  88. package/lib/opencode/workspace.mjs +1 -1
  89. package/lib/planning-advice.mjs +2 -2
  90. package/lib/providers/experiential.mjs +2 -2
  91. package/lib/tui/framing.mjs +1 -80
  92. package/lib/update.mjs +10 -1
  93. package/package.json +33 -7
  94. package/plugins/carthagent/README.md +23 -0
  95. package/plugins/carthagent/src/bootstrap.ts +1 -1
  96. package/plugins/carthagent/src/daily-evidence.mjs +57 -0
  97. package/plugins/carthagent/src/daily-quests-rpc.ts +50 -0
  98. package/plugins/carthagent/src/daily-source-rpc.ts +52 -0
  99. package/plugins/carthagent/src/index.ts +71 -24
  100. package/plugins/carthagent/src/rpc.ts +51 -6
  101. package/plugins/carthagent/src/server/codegraph.ts +12 -5
  102. package/plugins/carthagent/src/server/daily-quests-rpc.ts +277 -0
  103. package/plugins/carthagent/src/server/daily-source-rpc.ts +211 -0
  104. package/plugins/carthagent/src/server/delivery.ts +227 -112
  105. package/plugins/carthagent/src/server/framing.mjs +80 -0
  106. package/plugins/carthagent/src/server/policy.ts +1 -1
  107. package/plugins/carthagent/src/server/providers.ts +59 -31
  108. package/plugins/carthagent/src/server/session-controls.ts +3 -1
  109. package/plugins/carthagent/src/server/ship-agents.ts +77 -0
  110. package/plugins/carthagent/src/server/ship-context.mjs +60 -0
  111. package/plugins/carthagent/src/server/ship-guidance.ts +41 -0
  112. package/plugins/carthagent/src/server/ship-rpc.ts +69 -0
  113. package/plugins/carthagent/src/server/voyages-rpc.ts +223 -0
  114. package/plugins/carthagent/src/testing.ts +5 -0
  115. package/plugins/carthagent/src/tui.tsx +496 -0
  116. package/plugins/carthagent/src/ui/client.ts +125 -0
  117. package/plugins/carthagent/src/ui/commands.ts +70 -0
  118. package/plugins/carthagent/src/ui/daily-editor-focus.mjs +52 -0
  119. package/plugins/carthagent/src/ui/daily-editor.mjs +4 -0
  120. package/plugins/carthagent/src/ui/daily-quests-events.mjs +18 -0
  121. package/plugins/carthagent/src/ui/daily-quests-state.mjs +218 -0
  122. package/plugins/carthagent/src/ui/daily-quests.tsx +235 -0
  123. package/plugins/carthagent/src/ui/host-state.ts +42 -0
  124. package/plugins/carthagent/src/ui/model-command.ts +32 -0
  125. package/plugins/carthagent/src/ui/native-navigation.ts +23 -0
  126. package/plugins/carthagent/src/ui/native-review.d.mts +33 -0
  127. package/plugins/carthagent/src/ui/native-review.mjs +159 -0
  128. package/plugins/carthagent/src/ui/resume-session.mjs +34 -0
  129. package/plugins/carthagent/src/ui/select-mouse.ts +17 -0
  130. package/plugins/carthagent/src/ui/session-preferences.d.mts +7 -0
  131. package/plugins/carthagent/src/ui/session-preferences.mjs +14 -0
  132. package/plugins/carthagent/src/ui/theme-provision.d.mts +3 -0
  133. package/plugins/carthagent/src/ui/theme-provision.mjs +134 -0
  134. package/plugins/carthagent/src/ui/voyages-navigation-state.mjs +56 -0
  135. package/plugins/carthagent/src/ui/voyages-navigation.tsx +131 -0
  136. package/plugins/carthagent/src/ui/voyages-state.mjs +142 -0
  137. package/plugins/carthagent/src/ui/voyages.tsx +129 -0
  138. package/plugins/carthagent/src/ui/workspace-live.ts +61 -0
  139. package/plugins/carthagent/src/ui/workspace.tsx +379 -0
  140. package/plugins/carthagent/src/voyages-rpc.ts +60 -0
  141. package/plugins/carthagent/src/workspace-rpc.ts +36 -0
  142. package/plugins/carthagent/tests/commands.test.ts +107 -0
  143. package/plugins/carthagent/tests/session-preferences.test.mjs +41 -0
  144. package/plugins/carthagent/tests/voyages-navigation.test.tsx +269 -0
  145. package/plugins/carthagent/themes/carthage.json +67 -0
  146. package/plugins/carthagent/tui.ts +26 -1
  147. package/script/ctg/build-owned-runtime.sh +166 -0
  148. package/tests/budget-engine.test.mjs +4 -3
  149. package/tests/cli.test.mjs +52 -96
  150. package/tests/daily-evidence.test.mjs +62 -0
  151. package/tests/delivery-review.test.mjs +11 -0
  152. package/tests/delivery.test.mjs +22 -1
  153. package/tests/fixtures/native-discovery-plugin/server.ts +15 -0
  154. package/tests/generate-owned-runtime-release.test.mjs +354 -0
  155. package/tests/installed-runtime-contract.test.mjs +43 -0
  156. package/tests/native-cli-host-smoke.mjs +457 -0
  157. package/tests/native-daily-editor-focus.test.mjs +213 -0
  158. package/tests/native-daily-editor.test.mjs +43 -0
  159. package/tests/native-daily-quests-layout.test.mjs +53 -0
  160. package/tests/native-daily-quests-rpc.test.mjs +456 -0
  161. package/tests/native-daily-quests-ui.test.mjs +778 -0
  162. package/tests/native-daily-source.test.mjs +451 -0
  163. package/tests/native-demo-ui.test.mjs +48 -0
  164. package/tests/native-evaluation-admission.test.mjs +24 -0
  165. package/tests/native-fixture-browser-cleanup.test.mjs +65 -0
  166. package/tests/native-fixture-runtime.test.mjs +111 -0
  167. package/tests/native-fixture-stop-diagnostics.test.mjs +67 -0
  168. package/tests/native-glyph-pty.test.mjs +107 -0
  169. package/tests/native-manual-projects.test.mjs +170 -0
  170. package/tests/native-model-command.test.mjs +67 -0
  171. package/tests/native-owned-runtime-env.test.mjs +140 -0
  172. package/tests/native-paired-guards.test.mjs +464 -0
  173. package/tests/native-provider-policy.test.mjs +31 -0
  174. package/tests/native-pty-invocation.test.mjs +114 -0
  175. package/tests/native-pty-runtime.test.mjs +45 -0
  176. package/tests/native-resume-session.test.mjs +46 -0
  177. package/tests/native-review-consumer.test.mjs +286 -0
  178. package/tests/native-runtime-identity.test.mjs +214 -0
  179. package/tests/native-select-mouse.test.mjs +23 -0
  180. package/tests/native-ship-parity.test.mjs +526 -0
  181. package/tests/native-ship-plan.test.mjs +85 -0
  182. package/tests/native-ship-rpc.test.mjs +71 -0
  183. package/tests/native-ui-commands.test.mjs +6 -0
  184. package/tests/native-voyages-layout.test.mjs +28 -0
  185. package/tests/native-voyages-navigation.test.mjs +169 -0
  186. package/tests/native-voyages-rpc.test.mjs +395 -0
  187. package/tests/native-voyages-ui.test.mjs +277 -0
  188. package/tests/opencode-atomic-write.test.mjs +55 -0
  189. package/tests/opencode-cli.test.mjs +1312 -0
  190. package/tests/opencode-codegraph-plugin.test.mjs +47 -0
  191. package/tests/opencode-delivery.test.mjs +16 -0
  192. package/tests/opencode-providers.test.mjs +245 -18
  193. package/tests/opencode-runtime.test.mjs +546 -8
  194. package/tests/opencode-session-controls.test.mjs +15 -0
  195. package/tests/opencode-ship-rpc.test.mjs +71 -0
  196. package/tests/opencode-update.test.mjs +475 -0
  197. package/tests/opencode-workspace.test.mjs +51 -2
  198. package/tests/owned-runtime-publish-workflow.test.mjs +477 -0
  199. package/tests/release-workflow.test.mjs +46 -0
  200. package/tests/runtime-artifact.test.mjs +269 -0
  201. package/tests/runtime-development-trust.test.mjs +230 -0
  202. package/tests/runtime-github-transport.test.mjs +132 -0
  203. package/tests/runtime-token-env.test.mjs +23 -0
  204. package/tests/server.test.mjs +3 -1
  205. package/tests/ship-telemetry.test.mjs +1 -1
  206. package/tests/source-preview.test.mjs +253 -0
  207. package/tests/test_native_terminal_probe.py +76 -0
  208. package/tests/test_native_terminal_semantics.py +232 -0
  209. package/tests/update.test.mjs +42 -5
  210. package/tests/verify-draft-runtime-gate.test.mjs +280 -0
  211. package/tests/verify-owned-runtime-release.test.mjs +371 -0
  212. package/tests/workspace-live.test.mjs +127 -0
  213. package/tools/benchmark/diagnose-request.mjs +59 -36
  214. package/tools/benchmark/eval-common.mjs +3 -3
  215. package/tools/benchmark/evaluators.test.mjs +4 -4
  216. package/tools/benchmark/guard.test.mjs +35 -2
  217. package/tools/benchmark/guard.ts +20 -7
  218. package/tools/benchmark/planning-startup.test.mjs +30 -34
  219. package/tools/benchmark/runner.mjs +12 -7
  220. package/tools/benchmark/runner.test.mjs +23 -7
  221. package/tools/benchmark/upstream-error.test.mjs +16 -2
  222. package/tools/generate-owned-runtime-release.mjs +217 -0
  223. package/tools/installed-runtime-contract.mjs +16 -0
  224. package/tools/manual-runtime-manifest.mjs +39 -0
  225. package/tools/native-fixture-browser-cleanup.mjs +59 -0
  226. package/tools/native-fixture-stop-diagnostics.mjs +43 -0
  227. package/tools/native-fixture.mjs +199 -40
  228. package/tools/native-glyph-helpers.py +127 -0
  229. package/tools/native-glyph-pty.py +144 -0
  230. package/tools/native-manual-projects.mjs +259 -0
  231. package/tools/native-manual.mjs +338 -0
  232. package/tools/native-model-picker-acceptance.py +306 -0
  233. package/tools/native-owned-runtime-env.sh +47 -0
  234. package/tools/native-paired-guards.mjs +282 -0
  235. package/tools/native-paired-manifest.mjs +72 -0
  236. package/tools/native-paired-orchestration.sh +51 -0
  237. package/tools/native-plugin-readiness.mjs +33 -0
  238. package/tools/native-plugin-readiness.test.mjs +53 -0
  239. package/tools/native-pty-invocation.mjs +26 -0
  240. package/tools/native-pty-runtime.mjs +83 -0
  241. package/tools/native-pty-smoke.py +147 -24
  242. package/tools/native-public-repo-shell-result.mjs +13 -0
  243. package/tools/native-public-repo-shell-result.test.mjs +28 -0
  244. package/tools/native-runtime-identity.mjs +201 -0
  245. package/tools/native-slash-acceptance-env.py +38 -0
  246. package/tools/native-terminal-semantics.py +876 -0
  247. package/tools/owned-shell-observer/index.ts +16 -0
  248. package/tools/owned-shell-observer/package.json +1 -0
  249. package/tools/owned-visual-clear-env.py +48 -0
  250. package/tools/owned-visual-clear-model.py +21 -0
  251. package/tools/pinned-owned-runtime-inputs.mjs +46 -0
  252. package/tools/prepare-native-manual.mjs +122 -0
  253. package/tools/run-native-terminal-paired.sh +403 -0
  254. package/tools/runtime-token-env.mjs +8 -0
  255. package/tools/seed-native-switch-fixture.mjs +79 -0
  256. package/tools/test-native-controls.mjs +3 -1
  257. package/tools/test-native-daily-quests.mjs +65 -0
  258. package/tools/test-native-default-cli.mjs +106 -0
  259. package/tools/test-native-delivery-host.mjs +102 -20
  260. package/tools/test-native-evaluation.mjs +7 -3
  261. package/tools/test-native-glyph-pty.mjs +94 -0
  262. package/tools/test-native-host.mjs +87 -63
  263. package/tools/test-native-outcomes.mjs +3 -1
  264. package/tools/test-native-package.mjs +206 -38
  265. package/tools/test-native-performance.mjs +26 -0
  266. package/tools/test-native-product.mjs +90 -0
  267. package/tools/test-native-pty.mjs +34 -9
  268. package/tools/test-native-public-repo.mjs +224 -0
  269. package/tools/test-native-refresh-reentry.mjs +106 -0
  270. package/tools/test-native-report.mjs +27 -20
  271. package/tools/test-native-review.mjs +75 -0
  272. package/tools/test-native-runtime.mjs +120 -0
  273. package/tools/test-native-ship-models.mjs +176 -0
  274. package/tools/test-native-ship-walkthrough.mjs +96 -0
  275. package/tools/test-native-slash-commands.mjs +125 -0
  276. package/tools/test-native-slash-commands.py +242 -0
  277. package/tools/test-native-swe-host.mjs +224 -55
  278. package/tools/test-native-tasks.mjs +77 -0
  279. package/tools/test-native-terminal-performance.py +887 -0
  280. package/tools/test-native-terminal-readiness.sh +85 -0
  281. package/tools/test-native-terminal-semantics-installed.mjs +38 -0
  282. package/tools/test-native-visual-clear-installed.mjs +48 -0
  283. package/tools/test-owned-host-controls.mjs +238 -0
  284. package/tools/test-owned-opencode-runtime.mjs +35 -0
  285. package/tools/test-owned-visual-clear-env.py +120 -0
  286. package/tools/test-owned-visual-clear.py +373 -0
  287. package/tools/verify-draft-runtime-gate.mjs +138 -0
  288. package/tools/verify-owned-runtime-release.mjs +114 -0
  289. package/tools/verify-release-version.mjs +21 -1
@@ -0,0 +1,177 @@
1
+ # Native OpenCode preview: upgrade and migration guide
2
+
3
+ The unpublished **1.1.0-preview.9 candidate** inherits native by default from
4
+ preview.8. This is not an installable-release announcement. `ctg native` is a compatibility
5
+ alias; `CTG_NATIVE` no longer selects a different console. Stable 1.0.7 remains
6
+ the legacy release. Install previews only through an explicit experimental
7
+ channel switch or an exact published tag.
8
+
9
+ See the [preview.9 candidate notes](release-notes-preview.9.md) for current
10
+ evidence. Until publication, use the explicit reviewed-artifact procedure in
11
+ the [manual testing guide](native-manual-testing.md), not the public resolver.
12
+
13
+ ## Before you try it
14
+
15
+ - The native route uses a checksum-pinned CTG-owned runtime compatible with OpenCode **2.0.32**. It
16
+ does not use, install over, update, or borrow authentication from a regular
17
+ OpenCode installation. Selecting the experimental release is explicit; no shell-wide routing toggle is needed.
18
+ - Native OpenCode settings, auth, database/sessions, state, and cache belong to
19
+ the CTG profile under `~/.carthagent/opencode/`. `CTG_OPENCODE_HOME` can
20
+ override that profile root. The old CLI's Carthagent data is separate too.
21
+ Project/worktree delivery reports and native task metadata live in their
22
+ respective workspaces; task state is recorded in `.harness/`.
23
+ - Existing Pi sessions are **read-only archives**, not native sessions. There
24
+ is no transcript continuation, conversion, or import. Keep the old
25
+ installation and source data until you have independently confirmed the
26
+ archive contains what you need.
27
+ - Read the exact release notes for installed-package acceptance and platform
28
+ limitations. Earlier migration findings remain in the
29
+ [migration ledger](opencode-migration.md) and
30
+ [terminal evidence](native-terminal-semantics.md); they are historical evidence,
31
+ not a claim that every command or platform has been verified by a live model.
32
+
33
+ ## Try the native route from a checkout
34
+
35
+ The default resolver acquires only the platform archive pinned by the packaged
36
+ release manifest, validates source/patch/lock and archive/executable checksums,
37
+ and caches it in the private Carthagent profile. It never falls back to a system
38
+ or upstream binary after selecting the owned runtime. An explicit developer
39
+ artifact is a separate, validated staging path—not an end-user update mechanism.
40
+
41
+ After installing dependencies in a checkout of a published source tag:
42
+
43
+ ```sh
44
+ node bin/ctg.mjs --help
45
+ node bin/ctg.mjs
46
+ node bin/ctg.mjs "Investigate the failing tests"
47
+ ```
48
+
49
+ The native service refreshes after a verified owned runtime or launcher update.
50
+ Sessions and credentials remain in the profile; an unauthenticated or foreign
51
+ process is never stopped just because its registration looks stale.
52
+
53
+ The native launcher preserves familiar commands and aliases: `tui`/`ui`/
54
+ `interactive`, `resume`/`sessions`, `continue`, `status`/`s`, `check`/`c`,
55
+ `hash`/`fingerprint`, `login`/`auth`, `account`/`cloud`, `serve`/`web`/`start`,
56
+ and `update`/`upgrade`. See [native CLI](native-cli.md) for implemented flags,
57
+ failure behavior, and unsupported options. In particular, do not assume an old
58
+ flag is enforced merely because its name is accepted: unsupported `--bash-cap`
59
+ and `--isolate` fail closed, and policy/budget flags require enforcement
60
+ capabilities advertised by the active plugin.
61
+
62
+ ## Projects, tasks, worktrees, and sessions
63
+
64
+ The native UI is based on OpenCode's project and session model. A CTG task
65
+ creates an OpenCode worktree and a separate root session located in that
66
+ worktree; CTG stores the task/parent relationship in workspace metadata. It
67
+ does not create a nested OpenCode child session. Worktree separation provides
68
+ independent checkout directories, but do not infer that every host, credential,
69
+ or external process behavior is isolated by a worktree.
70
+
71
+ Resume and continue operate on native sessions associated with the current
72
+ workspace. A project workspace view may present known task, worktree, and
73
+ session records together. These do not turn legacy transcripts into sessions.
74
+ Normal project discovery, host UI behavior, and complete cross-platform
75
+ interaction remain acceptance items; consult the ledger rather than assuming a
76
+ preview feature is fully supported.
77
+
78
+ ## Legacy archive (read-only)
79
+
80
+ The archive CLI supports list/search/read/export. Configure or retain the
81
+ legacy session archive at its existing location; the native adapter exposes it
82
+ for reading and does not mutate those transcripts:
83
+
84
+ ```sh
85
+ node bin/ctg.mjs archive list
86
+ node bin/ctg.mjs archive search "query"
87
+ node bin/ctg.mjs archive read <archive-id>
88
+ node bin/ctg.mjs archive export <archive-id> --format jsonl
89
+ ```
90
+
91
+ Archive output is not an import format. Start a new native session and provide
92
+ any context you need yourself; no session identity or execution history is
93
+ carried forward.
94
+
95
+ ## Headless commands and JSONL
96
+
97
+ `-p`/`--print` runs a headless task and prints assistant text. `--json` emits
98
+ JSONL lifecycle records for the selected native session, including tool starts,
99
+ tool results, completed assistant messages, and a terminal outcome. `ctg status
100
+ --json` is a separate versioned delivery status snapshot, not execution JSONL.
101
+ Headless invocations need a prompt; when stdout is not a TTY the CLI selects
102
+ headless mode automatically. A resume-picker request in headless mode becomes
103
+ continuation of the latest native session for that workspace.
104
+
105
+ ```sh
106
+ node bin/ctg.mjs -p "Summarize this project"
107
+ node bin/ctg.mjs --json -p "Run the declared checks"
108
+ node bin/ctg.mjs status --json
109
+ ```
110
+
111
+ JSONL consumers should use the terminal outcome and exit status, not the
112
+ presence of assistant text alone: successful completion requires the completed
113
+ assistant turn and a successful native terminal outcome. Failed, interrupted,
114
+ and unresolved turns are not success. `-p` text is not a live tool-event stream.
115
+
116
+ ## Release installation and update
117
+
118
+ Only published releases are installable; a draft is not an update. From an
119
+ installation with channel support:
120
+
121
+ ```sh
122
+ ctg update --channel experimental --check
123
+ ctg update --channel experimental
124
+ ctg
125
+ ```
126
+
127
+ Only after `v1.1.0-preview.9` and its reviewed assets are published, its exact-tag
128
+ installation form will be:
129
+
130
+ ```sh
131
+ npm install -g carthagent@1.1.0-preview.9
132
+ ```
133
+
134
+ Do not run this for the unpublished candidate. `ctg update --check` checks for
135
+ an available release. `lib/opencode/update.mjs` contains the shared,
136
+ release-validated update operation: for npm-installed Carthagent it installs
137
+ the validated exact release spec; for a source clone it requires a clean
138
+ working tree, fetches the selected origin tag into a private ref, resolves that
139
+ fetched tag to a commit, checks out the commit detached, then reinstalls
140
+ dependencies and the global package. It does not overwrite existing local tags
141
+ or proceed with dirty files. The native CLI's current `update` command path is
142
+ separate: it installs the validated release spec for npm installs and refuses
143
+ to check out into its active source tree, including a clean clone. Use the
144
+ non-forced manual procedure below for that source-tree path; do not assume
145
+ uncomposed CLI/UI wiring changes this behavior. Preserve and review local work
146
+ first:
147
+
148
+ ```sh
149
+ git status --short
150
+ git diff # review and preserve any edits before proceeding
151
+ git fetch origin --tags
152
+ git checkout --detach v1.1.0-preview.9 # only after publication; no force option
153
+ npm ci
154
+ ```
155
+
156
+ Do not discard or overwrite local changes to make this procedure succeed. If
157
+ the checkout has work you need, commit it or preserve it outside the checkout
158
+ before changing revisions; resolve conflicts or recovery deliberately rather
159
+ than using a destructive reset. The updater is Carthagent's updater, not a
160
+ regular OpenCode updater. Preview.9 inherits the native-default CLI from preview.8.
161
+ Use `ctg update --channel stable` to return to the legacy stable release; neither
162
+ channel switching nor service refresh deletes profiles or legacy transcripts.
163
+ Do not install a moving branch or guess an unpublished version.
164
+
165
+ ## Acceptance status and help
166
+
167
+ The current acceptance contract and evidence are maintained in:
168
+
169
+ - [Preview.9 candidate notes and remaining release gates](release-notes-preview.9.md)
170
+ - [Historical migration delivery ledger](opencode-migration.md#delivery-ledger)
171
+ - [Native runtime acceptance matrix](native-compatibility.md)
172
+ - [Terminal probe and evidence caveats](native-terminal-semantics.md)
173
+ - [Historical native migration draft (not current routing/install guidance)](release-notes-native-draft.md)
174
+
175
+ These documents intentionally distinguish component/test results from complete
176
+ installed-product acceptance. A command's presence, successful unit test, or
177
+ documentation entry does not by itself mark an acceptance gate complete.
@@ -0,0 +1,89 @@
1
+ # Final OpenCode source composition review checkpoint
2
+
3
+ This review checkpoint composes patches on clean upstream OpenCode `v2.0.32`
4
+ source `843a6c514e606b436a7fe713422ace0a93ad3d61`, in this order:
5
+
6
+ 1. Session/runtime patch (pre-composition SHA-256
7
+ `36379e0bf4ec0f63929c12b5ac96dfc73df60b124cef9f4adeb36d86287bc92f`).
8
+ 2. Approved natural `/help` patch (SHA-256
9
+ `c1ce7d983be8ecdd3481b16da103fb32d144b0ec01f894915a110b46acdc6fe5`).
10
+ 3. Approved live-theme API patch (SHA-256
11
+ `0bcb1462688c00a09564e9874c3e01429baf92fe004bfc6400704fb24133c123`).
12
+ 4. Approved glyph-v4 patch (SHA-256
13
+ `37d93c0dfd5c52bd4536136fb53618580a29d682644848433f3b2ee4726d98a4`).
14
+
15
+ The approved base combined source patch is
16
+ `docs/patches/opencode-v2.0.32-session-ui.patch`; its SHA-256 is
17
+ `81e86a4c139e02ebd077e1b635a62ea804ec60b6ae20100893cb6d9f73b06d62`. A
18
+ separate combined candidate is recorded at
19
+ `docs/patches/opencode-v2.0.32-session-ui-combined-v3.patch` with SHA-256
20
+ `75d6484112881481b178bde583f9ff4e5d36cbac2fdf19d000339795b9485ce2`; it adds
21
+ the approved spinner test-isolation and real-provider theme proof patches. The
22
+ candidate recipe and packaged runtime identity both pin this digest; the
23
+ historical base recipe/runtime identity remain recorded in Git, and the base
24
+ patch remains unchanged. Frozen
25
+ lockfile installation, TUI typecheck, and the exact combined glyph/keymap/theme/
26
+ provider run passed (19 tests / 188 assertions in one Bun process with
27
+ `--timeout 60000`). The workflow fixture passed all 6 tests with Node 26 after
28
+ updating its patch-path assertion. Independent review approved corrected head
29
+ `0e38142bff30ca2a8b2a66394e5055d541fce489`, including an isolated Windows-style
30
+ checkout-to-recipe handoff reaching Bun installation and dirty-input rejection.
31
+ These source checks do not establish final-artifact acceptance. The three
32
+ standalone review patches remain
33
+ separately published and unchanged. The base composition was
34
+ applied to a clean detached upstream checkout and its reverse-application check
35
+ and `git diff --check` pass. The glyph patch’s two `/help`-overlapping files
36
+ were integrated by applying `/help` first and glyph v4 afterward; the resulting
37
+ autocomplete/prompt imports and keymap test changes are present once in the
38
+ combined patch.
39
+
40
+ Source approvals and author test reports are recorded separately: glyph v4
41
+ source approval (11 tests / 146 assertions), `/help` keymap suite (5/5), and
42
+ live-theme focused tests/typecheck. These do not approve the combined patch and
43
+ do not substitute for an independent composition review. This is a source-review
44
+ checkpoint only: do not build until the exact combined patch is independently
45
+ approved. The previous v1 patch was built on Linux x64 before the Linux runner
46
+ marquee assertion was corrected; that binary is historical and is not an
47
+ artifact for this v2 digest. Final v2 binaries and cross-platform prebuilds,
48
+ theme PTY, glyph matrix, `/help`, and title restoration proofs remain outstanding.
49
+
50
+ The unrelated draft-release asset transport design is intentionally not
51
+ implemented by this composition. A separate review must decide whether a
52
+ repo-scoped, ephemeral CI credential may be used only for authenticated draft
53
+ asset retrieval through the production resolver, preserving the packaged
54
+ manifest/digests and default no-override selection. No credential values or
55
+ transport code were used here.
56
+
57
+ Reproducible workflow fixture coverage lives in
58
+ `tests/owned-runtime-publish-workflow.test.mjs`. It extracts the literal
59
+ validate, verify, and upload Bash blocks from this workflow YAML and executes
60
+ them with bounded temporary fixtures. It verifies review-branch prebuild SHA
61
+ binding and rejects publish validation from a non-default branch; the positive
62
+ publish path verifies five tiny USTAR archives and the packaged trust root,
63
+ then a fake `gh` captures exactly seven assets for byte comparison. Tampered
64
+ archive and stale annotated-tag cases both assert zero captured uploads. This is
65
+ automated mocked workflow coverage, not a real dispatch or release. Although
66
+ the fixture accepts a reviewed-branch prebuild SHA, GitHub only registers
67
+ `workflow_dispatch` for a workflow file present on the default branch. This
68
+ workflow was subsequently registered by reviewed bootstrap #197, merged as
69
+ `bd1292c8c4` after green CI. Parent dispatched real prebuild run `39089640210`
70
+ against exact source `70882269e25ebcb62c843f9265345342b9e6844d` for planned
71
+ version `1.1.0`. Its build results remain pending.
72
+
73
+ This focused TUI candidate verification is not the parent repository's full
74
+ quality run and does not include the separate native CLI test-browser isolation
75
+ change `d4983b57328a187e8be6bc0e2c6bd2dda7518920`; apply or merge that change in
76
+ its applicable parent integration lineage before running or claiming parent
77
+ full quality. It is not part of this upstream OpenCode patch.
78
+
79
+ The release workflow permits a non-publishing prebuild from a reviewed branch
80
+ to avoid requiring product merge before native candidate generation. It binds
81
+ the requested source SHA to that dispatch's exact workflow commit. The publish
82
+ phase remains default-branch-only and compares the candidate with the final
83
+ tagged package trust root; prebuild is not merge or release approval.
84
+
85
+ The pinned external release generator still reads the legacy patch pathname.
86
+ Both candidate-generation calls therefore copy the candidate patch bytes to
87
+ that pathname only inside the disposable CTG checkout used by the workflow;
88
+ the checked-in base patch remains unchanged. Fixture assertions cover both
89
+ adaptation points.