carthagent 1.0.7 → 1.1.0-beta.1

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 (294) 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/glyph-review/host-chrome-glyph-compatibility-v4.md +83 -0
  6. package/docs/glyph-review/test-isolation-v1.md +26 -0
  7. package/docs/glyph-review/typecheck-base.log +1 -0
  8. package/docs/glyph-review/typecheck-v4.log +1 -0
  9. package/docs/glyph-review/unicode-inventory-v4.csv +402 -0
  10. package/docs/help-dispatch-review.md +69 -0
  11. package/docs/launch-readiness-live-results.md +65 -0
  12. package/docs/legacy-cli.md +150 -0
  13. package/docs/live-theme-plugin-api.md +18 -0
  14. package/docs/native-cli.md +102 -0
  15. package/docs/native-compatibility.md +16 -0
  16. package/docs/native-daily-quests.md +132 -0
  17. package/docs/native-glyph-pty.md +59 -0
  18. package/docs/native-manual-testing.md +336 -0
  19. package/docs/native-slash-acceptance-handoff.md +49 -0
  20. package/docs/native-terminal-paired-failure-2026-10-17.md +40 -0
  21. package/docs/native-terminal-performance.md +310 -0
  22. package/docs/native-terminal-semantics-evidence/README.md +25 -0
  23. package/docs/native-terminal-semantics-evidence/controlled-host-model-selftest.json +16 -0
  24. package/docs/native-terminal-semantics-evidence/current-acceptance-status.json +59 -0
  25. package/docs/native-terminal-semantics-evidence/final-binary-focused-85bb44a.json +154 -0
  26. package/docs/native-terminal-semantics-evidence/final-binary-full-incomplete-85bb44a.json +160 -0
  27. package/docs/native-terminal-semantics-evidence/final-binary-layout-85bb44a.json +149 -0
  28. package/docs/native-terminal-semantics-evidence/final-binary-layout-interactive-85bb44a.json +159 -0
  29. package/docs/native-terminal-semantics-evidence/final-binary-model-picker-escape-unchanged-85bb44a.json +44 -0
  30. package/docs/native-terminal-semantics-evidence/final-binary-model-picker-exact-identity-85bb44a.json +47 -0
  31. package/docs/native-terminal-semantics-evidence/final-binary-model-picker-unchanged-model-incomplete-85bb44a.json +58 -0
  32. package/docs/native-terminal-semantics-evidence/final-binary-model-selftest.json +16 -0
  33. package/docs/native-terminal-semantics-evidence/final-binary-picker-cancel-incomplete-85bb44a.json +62 -0
  34. package/docs/native-terminal-semantics-evidence/focused-clipboard-title-stale-binary.json +161 -0
  35. package/docs/native-terminal-semantics-evidence/layout-stale-binary-observation-not-accepted.json +153 -0
  36. package/docs/native-terminal-semantics-evidence/picker-latest-incomplete-attempt.json +62 -0
  37. package/docs/native-terminal-semantics-evidence/picker-previous-probe-pass.json +61 -0
  38. package/docs/native-terminal-semantics.md +89 -0
  39. package/docs/native-upgrade.md +175 -0
  40. package/docs/opencode-composed-source-review.md +89 -0
  41. package/docs/opencode-migration.md +225 -9
  42. package/docs/opencode-owned-runtime.md +241 -0
  43. package/docs/opencode-runtime.md +12 -0
  44. package/docs/opencode-theme-provider-proof/README.md +55 -0
  45. package/docs/opencode-theme-provider-proof/live-theme-api-base.patch +122 -0
  46. package/docs/opencode-theme-provider-proof/plugin-theme-provider.patch +107 -0
  47. package/docs/opencode-theme-provider-proof/session-ui-base.patch +1217 -0
  48. package/docs/owned-host-controls-proof.md +39 -0
  49. package/docs/owned-runtime-release-manifest.md +42 -0
  50. package/docs/owned-visual-clear-proof.md +40 -0
  51. package/docs/patches/opencode-v2.0.32-glyph-spinner-test-isolation-v1.patch +50 -0
  52. package/docs/patches/opencode-v2.0.32-glyphs.patch +3670 -0
  53. package/docs/patches/opencode-v2.0.32-help-dispatch.patch +156 -0
  54. package/docs/patches/opencode-v2.0.32-live-theme-api.patch +122 -0
  55. package/docs/patches/opencode-v2.0.32-session-ui-combined-v1.patch +5272 -0
  56. package/docs/patches/opencode-v2.0.32-session-ui-combined-v2.patch +6052 -0
  57. package/docs/patches/opencode-v2.0.32-session-ui-combined-v3.patch +8657 -0
  58. package/docs/patches/opencode-v2.0.32-session-ui-combined-v4.patch +9928 -0
  59. package/docs/patches/opencode-v2.0.32-session-ui-combined-v5.patch +13965 -0
  60. package/docs/patches/opencode-v2.0.32-session-ui.patch +5137 -0
  61. package/docs/release-notes-beta.1.md +60 -0
  62. package/docs/release-notes-native-draft.md +73 -0
  63. package/docs/release-notes-preview.10.md +121 -0
  64. package/docs/release-notes-preview.11.md +76 -0
  65. package/docs/release-notes-preview.12.md +55 -0
  66. package/docs/release-notes-preview.13.md +68 -0
  67. package/docs/release-notes-preview.9.md +130 -0
  68. package/docs/source-preview.md +120 -0
  69. package/evaluate.mjs +28 -1
  70. package/lib/budget.mjs +1 -1
  71. package/lib/codegraph.mjs +1 -1
  72. package/lib/delivery-review.mjs +19 -6
  73. package/lib/delivery.mjs +3 -2
  74. package/lib/environment.mjs +8 -0
  75. package/lib/guidance.mjs +1 -1
  76. package/lib/opencode/cli-runtime.mjs +1171 -0
  77. package/lib/opencode/cli.mjs +252 -0
  78. package/lib/opencode/credentials.mjs +63 -8
  79. package/lib/opencode/demo.mjs +53 -0
  80. package/lib/opencode/evaluation-budget-plugin/index.ts +3 -0
  81. package/lib/opencode/evaluation.mjs +32 -12
  82. package/lib/opencode/headless.mjs +22 -5
  83. package/lib/opencode/provider-policy.mjs +23 -0
  84. package/lib/opencode/review.mjs +37 -16
  85. package/lib/opencode/runtime-artifact.mjs +335 -0
  86. package/lib/opencode/runtime-github-transport.mjs +121 -0
  87. package/lib/opencode/runtime-release.json +36 -0
  88. package/lib/opencode/runtime.mjs +299 -20
  89. package/lib/opencode/service.mjs +77 -35
  90. package/lib/opencode/session-options.mjs +6 -2
  91. package/lib/opencode/update.mjs +222 -0
  92. package/lib/opencode/workspace.mjs +1 -1
  93. package/lib/planning-advice.mjs +2 -2
  94. package/lib/providers/experiential.mjs +2 -2
  95. package/lib/tui/framing.mjs +1 -80
  96. package/lib/update.mjs +10 -1
  97. package/package.json +33 -7
  98. package/plugins/carthagent/README.md +23 -0
  99. package/plugins/carthagent/src/bootstrap.ts +1 -1
  100. package/plugins/carthagent/src/daily-evidence.mjs +57 -0
  101. package/plugins/carthagent/src/daily-quests-rpc.ts +50 -0
  102. package/plugins/carthagent/src/daily-source-rpc.ts +52 -0
  103. package/plugins/carthagent/src/index.ts +71 -24
  104. package/plugins/carthagent/src/rpc.ts +51 -6
  105. package/plugins/carthagent/src/server/codegraph.ts +12 -5
  106. package/plugins/carthagent/src/server/daily-quests-rpc.ts +277 -0
  107. package/plugins/carthagent/src/server/daily-source-rpc.ts +243 -0
  108. package/plugins/carthagent/src/server/delivery.ts +227 -112
  109. package/plugins/carthagent/src/server/framing.mjs +80 -0
  110. package/plugins/carthagent/src/server/policy.ts +1 -1
  111. package/plugins/carthagent/src/server/providers.ts +59 -31
  112. package/plugins/carthagent/src/server/session-controls.ts +3 -1
  113. package/plugins/carthagent/src/server/ship-agents.ts +77 -0
  114. package/plugins/carthagent/src/server/ship-context.mjs +60 -0
  115. package/plugins/carthagent/src/server/ship-guidance.ts +41 -0
  116. package/plugins/carthagent/src/server/ship-rpc.ts +69 -0
  117. package/plugins/carthagent/src/server/voyages-rpc.ts +280 -0
  118. package/plugins/carthagent/src/testing.ts +5 -0
  119. package/plugins/carthagent/src/tui.tsx +496 -0
  120. package/plugins/carthagent/src/ui/client.ts +127 -0
  121. package/plugins/carthagent/src/ui/commands.ts +70 -0
  122. package/plugins/carthagent/src/ui/daily-editor-focus.mjs +52 -0
  123. package/plugins/carthagent/src/ui/daily-editor.mjs +4 -0
  124. package/plugins/carthagent/src/ui/daily-quests-events.mjs +18 -0
  125. package/plugins/carthagent/src/ui/daily-quests-state.mjs +218 -0
  126. package/plugins/carthagent/src/ui/daily-quests.tsx +235 -0
  127. package/plugins/carthagent/src/ui/host-state.ts +42 -0
  128. package/plugins/carthagent/src/ui/model-command.ts +32 -0
  129. package/plugins/carthagent/src/ui/native-navigation.ts +23 -0
  130. package/plugins/carthagent/src/ui/native-review.d.mts +33 -0
  131. package/plugins/carthagent/src/ui/native-review.mjs +159 -0
  132. package/plugins/carthagent/src/ui/resume-session.mjs +34 -0
  133. package/plugins/carthagent/src/ui/select-mouse.ts +17 -0
  134. package/plugins/carthagent/src/ui/session-preferences.d.mts +7 -0
  135. package/plugins/carthagent/src/ui/session-preferences.mjs +14 -0
  136. package/plugins/carthagent/src/ui/theme-provision.d.mts +3 -0
  137. package/plugins/carthagent/src/ui/theme-provision.mjs +134 -0
  138. package/plugins/carthagent/src/ui/voyages-navigation-state.mjs +56 -0
  139. package/plugins/carthagent/src/ui/voyages-navigation.tsx +131 -0
  140. package/plugins/carthagent/src/ui/voyages-state.mjs +165 -0
  141. package/plugins/carthagent/src/ui/voyages.tsx +131 -0
  142. package/plugins/carthagent/src/ui/workspace-live.ts +61 -0
  143. package/plugins/carthagent/src/ui/workspace.tsx +379 -0
  144. package/plugins/carthagent/src/voyages-rpc.ts +64 -0
  145. package/plugins/carthagent/src/workspace-rpc.ts +36 -0
  146. package/plugins/carthagent/tests/commands.test.ts +107 -0
  147. package/plugins/carthagent/tests/session-preferences.test.mjs +41 -0
  148. package/plugins/carthagent/tests/voyages-navigation.test.tsx +269 -0
  149. package/plugins/carthagent/themes/carthage.json +67 -0
  150. package/plugins/carthagent/tui.ts +26 -1
  151. package/script/ctg/build-owned-runtime.sh +166 -0
  152. package/tests/budget-engine.test.mjs +4 -3
  153. package/tests/cli.test.mjs +52 -96
  154. package/tests/daily-evidence.test.mjs +62 -0
  155. package/tests/delivery-review.test.mjs +57 -2
  156. package/tests/delivery.test.mjs +22 -1
  157. package/tests/fixtures/native-discovery-plugin/server.ts +15 -0
  158. package/tests/generate-owned-runtime-release.test.mjs +354 -0
  159. package/tests/installed-runtime-contract.test.mjs +43 -0
  160. package/tests/native-cli-host-smoke.mjs +457 -0
  161. package/tests/native-daily-editor-focus.test.mjs +213 -0
  162. package/tests/native-daily-editor.test.mjs +43 -0
  163. package/tests/native-daily-quests-layout.test.mjs +55 -0
  164. package/tests/native-daily-quests-rpc.test.mjs +456 -0
  165. package/tests/native-daily-quests-ui.test.mjs +778 -0
  166. package/tests/native-daily-source.test.mjs +525 -0
  167. package/tests/native-demo-ui.test.mjs +48 -0
  168. package/tests/native-evaluation-admission.test.mjs +24 -0
  169. package/tests/native-fixture-browser-cleanup.test.mjs +65 -0
  170. package/tests/native-fixture-runtime.test.mjs +111 -0
  171. package/tests/native-fixture-stop-diagnostics.test.mjs +67 -0
  172. package/tests/native-glyph-pty.test.mjs +107 -0
  173. package/tests/native-manual-projects.test.mjs +170 -0
  174. package/tests/native-model-command.test.mjs +67 -0
  175. package/tests/native-owned-runtime-env.test.mjs +140 -0
  176. package/tests/native-paired-guards.test.mjs +464 -0
  177. package/tests/native-provider-policy.test.mjs +31 -0
  178. package/tests/native-pty-invocation.test.mjs +114 -0
  179. package/tests/native-pty-runtime.test.mjs +45 -0
  180. package/tests/native-resume-session.test.mjs +46 -0
  181. package/tests/native-review-consumer.test.mjs +286 -0
  182. package/tests/native-runtime-identity.test.mjs +214 -0
  183. package/tests/native-select-mouse.test.mjs +23 -0
  184. package/tests/native-ship-guidance.test.mjs +16 -0
  185. package/tests/native-ship-parity.test.mjs +526 -0
  186. package/tests/native-ship-plan.test.mjs +85 -0
  187. package/tests/native-ship-rpc.test.mjs +71 -0
  188. package/tests/native-ui-commands.test.mjs +6 -0
  189. package/tests/native-voyages-layout.test.mjs +28 -0
  190. package/tests/native-voyages-navigation.test.mjs +169 -0
  191. package/tests/native-voyages-rpc.test.mjs +397 -0
  192. package/tests/native-voyages-ui.test.mjs +307 -0
  193. package/tests/opencode-atomic-write.test.mjs +55 -0
  194. package/tests/opencode-cli.test.mjs +1312 -0
  195. package/tests/opencode-codegraph-plugin.test.mjs +47 -0
  196. package/tests/opencode-delivery.test.mjs +16 -0
  197. package/tests/opencode-providers.test.mjs +245 -18
  198. package/tests/opencode-runtime.test.mjs +597 -8
  199. package/tests/opencode-session-controls.test.mjs +15 -0
  200. package/tests/opencode-ship-rpc.test.mjs +71 -0
  201. package/tests/opencode-update.test.mjs +475 -0
  202. package/tests/opencode-workspace.test.mjs +51 -2
  203. package/tests/owned-runtime-publish-workflow.test.mjs +477 -0
  204. package/tests/release-workflow.test.mjs +46 -0
  205. package/tests/runtime-artifact.test.mjs +269 -0
  206. package/tests/runtime-development-trust.test.mjs +231 -0
  207. package/tests/runtime-github-transport.test.mjs +132 -0
  208. package/tests/runtime-token-env.test.mjs +23 -0
  209. package/tests/server.test.mjs +3 -1
  210. package/tests/ship-telemetry.test.mjs +1 -1
  211. package/tests/source-preview.test.mjs +253 -0
  212. package/tests/test_native_terminal_probe.py +76 -0
  213. package/tests/test_native_terminal_semantics.py +232 -0
  214. package/tests/update.test.mjs +42 -5
  215. package/tests/verify-draft-runtime-gate.test.mjs +280 -0
  216. package/tests/verify-owned-runtime-release.test.mjs +371 -0
  217. package/tests/workspace-live.test.mjs +127 -0
  218. package/tools/benchmark/diagnose-request.mjs +59 -36
  219. package/tools/benchmark/eval-common.mjs +3 -3
  220. package/tools/benchmark/evaluators.test.mjs +4 -4
  221. package/tools/benchmark/guard.test.mjs +35 -2
  222. package/tools/benchmark/guard.ts +20 -7
  223. package/tools/benchmark/planning-startup.test.mjs +30 -34
  224. package/tools/benchmark/runner.mjs +12 -7
  225. package/tools/benchmark/runner.test.mjs +23 -7
  226. package/tools/benchmark/upstream-error.test.mjs +16 -2
  227. package/tools/generate-owned-runtime-release.mjs +217 -0
  228. package/tools/installed-runtime-contract.mjs +16 -0
  229. package/tools/manual-runtime-manifest.mjs +39 -0
  230. package/tools/native-fixture-browser-cleanup.mjs +59 -0
  231. package/tools/native-fixture-stop-diagnostics.mjs +43 -0
  232. package/tools/native-fixture.mjs +199 -40
  233. package/tools/native-glyph-helpers.py +127 -0
  234. package/tools/native-glyph-pty.py +144 -0
  235. package/tools/native-manual-projects.mjs +259 -0
  236. package/tools/native-manual.mjs +338 -0
  237. package/tools/native-model-picker-acceptance.py +306 -0
  238. package/tools/native-owned-runtime-env.sh +47 -0
  239. package/tools/native-paired-guards.mjs +282 -0
  240. package/tools/native-paired-manifest.mjs +72 -0
  241. package/tools/native-paired-orchestration.sh +51 -0
  242. package/tools/native-plugin-readiness.mjs +33 -0
  243. package/tools/native-plugin-readiness.test.mjs +53 -0
  244. package/tools/native-pty-invocation.mjs +26 -0
  245. package/tools/native-pty-runtime.mjs +83 -0
  246. package/tools/native-pty-smoke.py +147 -24
  247. package/tools/native-public-repo-shell-result.mjs +13 -0
  248. package/tools/native-public-repo-shell-result.test.mjs +28 -0
  249. package/tools/native-runtime-identity.mjs +201 -0
  250. package/tools/native-slash-acceptance-env.py +38 -0
  251. package/tools/native-terminal-semantics.py +876 -0
  252. package/tools/owned-shell-observer/index.ts +16 -0
  253. package/tools/owned-shell-observer/package.json +1 -0
  254. package/tools/owned-visual-clear-env.py +48 -0
  255. package/tools/owned-visual-clear-model.py +21 -0
  256. package/tools/pinned-owned-runtime-inputs.mjs +46 -0
  257. package/tools/prepare-native-manual.mjs +122 -0
  258. package/tools/run-native-terminal-paired.sh +403 -0
  259. package/tools/runtime-token-env.mjs +8 -0
  260. package/tools/seed-native-switch-fixture.mjs +79 -0
  261. package/tools/test-native-controls.mjs +3 -1
  262. package/tools/test-native-daily-quests.mjs +65 -0
  263. package/tools/test-native-default-cli.mjs +106 -0
  264. package/tools/test-native-delivery-host.mjs +102 -20
  265. package/tools/test-native-evaluation.mjs +7 -3
  266. package/tools/test-native-glyph-pty.mjs +94 -0
  267. package/tools/test-native-host.mjs +87 -63
  268. package/tools/test-native-outcomes.mjs +3 -1
  269. package/tools/test-native-package.mjs +206 -38
  270. package/tools/test-native-performance.mjs +26 -0
  271. package/tools/test-native-product.mjs +90 -0
  272. package/tools/test-native-pty.mjs +34 -9
  273. package/tools/test-native-public-repo.mjs +224 -0
  274. package/tools/test-native-refresh-reentry.mjs +106 -0
  275. package/tools/test-native-report.mjs +27 -20
  276. package/tools/test-native-review.mjs +75 -0
  277. package/tools/test-native-runtime.mjs +120 -0
  278. package/tools/test-native-ship-models.mjs +176 -0
  279. package/tools/test-native-ship-walkthrough.mjs +96 -0
  280. package/tools/test-native-slash-commands.mjs +125 -0
  281. package/tools/test-native-slash-commands.py +242 -0
  282. package/tools/test-native-swe-host.mjs +224 -55
  283. package/tools/test-native-tasks.mjs +77 -0
  284. package/tools/test-native-terminal-performance.py +887 -0
  285. package/tools/test-native-terminal-readiness.sh +85 -0
  286. package/tools/test-native-terminal-semantics-installed.mjs +38 -0
  287. package/tools/test-native-visual-clear-installed.mjs +48 -0
  288. package/tools/test-owned-host-controls.mjs +238 -0
  289. package/tools/test-owned-opencode-runtime.mjs +35 -0
  290. package/tools/test-owned-visual-clear-env.py +120 -0
  291. package/tools/test-owned-visual-clear.py +373 -0
  292. package/tools/verify-draft-runtime-gate.mjs +138 -0
  293. package/tools/verify-owned-runtime-release.mjs +114 -0
  294. package/tools/verify-release-version.mjs +21 -1
@@ -0,0 +1,48 @@
1
+ # Beta rewards and new-user acceptance
2
+
3
+ Owner-approved policy: one eligible `ctg` verified delivery earns **25 coins,
4
+ 100 XP and 1 km**, at most three grants per player per UTC day. Daily classifier
5
+ assessment and personal work-log completion do not earn these rewards.
6
+
7
+ ## Execution plan
8
+
9
+ 1. Preserve the current live account and capture its starting profile. Confirm
10
+ account identity through normal authentication; never select an account by
11
+ a display name supplied to a public endpoint.
12
+ 2. Implement a versioned backend reward receipt and atomic coin/XP/km posting.
13
+ Derive owner from authentication and amounts from server policy. Retain
14
+ delivery identity across retries and enforce daily caps under a player lock.
15
+ 3. Integrate an explicit native claim action. Require a current required-check
16
+ verified handoff, fresh source fingerprint, passing check/requirement/review
17
+ gates and stable project/run identity. Do not reward advisory or blocked work.
18
+ 4. Run a disposable real-PostgreSQL lifecycle through normal HTTP/auth routes:
19
+ new user, one welcome grant, isolation, eligible reward, exact replay,
20
+ conflicting/parallel claims, daily cap, rollback, level/week boundaries,
21
+ purchase/equip and application/database reconnect persistence. Exercise
22
+ rejection paths and reconcile wallet postings against balances.
23
+ 5. Run backend checks and native eligibility/RPC/UI checks. Deploy the backend
24
+ only via reviewed PR, merge and its existing deployment workflow.
25
+ 6. On the owner's Beshir Aissi account, claim the existing accepted Ship delivery
26
+ once; replay it; confirm exactly +25 coins/+100 XP/+1 km, then compare native
27
+ and web persisted state. Keep test fixtures separate from earned live records.
28
+ 7. Record actual results, limitations and exact revisions, then resume beta
29
+ publication with installed-package and public-runtime acceptance gates.
30
+
31
+ ## Trust boundary
32
+
33
+ The coding harness verifies local execution and source freshness. An authenticated
34
+ client transmits a bounded receipt; the backend does not independently execute
35
+ the repository. Client attestation is not remote execution attestation or proof
36
+ of authorship. Server amounts, owner isolation, durable deduplication and caps
37
+ must hold even for malformed or replayed clients. Tests must not equate a private
38
+ debug coin grant with an earned coding reward.
39
+
40
+ ## Original baseline
41
+
42
+ Live profile previously verified: 20 coins, 0 XP, sandals owned/equipped. Current
43
+ backend has no coding-reward path. Quest policy explicitly returns `rewards:false`.
44
+ Beta publication is held until this additional acceptance scope is resolved.
45
+
46
+ Execution results are recorded in [beta-rewards-e2e-results.md](beta-rewards-e2e-results.md).
47
+ Production earned claim/replay/restart acceptance now passes at 45 coins,
48
+ 100 XP and 1 km; live browser and release-package acceptance remain pending.
@@ -0,0 +1,84 @@
1
+ # Beta reward acceptance results
2
+
3
+ ## Production earned reward — passed
4
+
5
+ Tested November 2, 2026 UTC through the normal installed profile, authenticated
6
+ as the owner's Beshir Aissi account. The installation is still preview.13 with
7
+ labelled local launch/reward patches; these results are not installed-beta
8
+ release acceptance.
9
+
10
+ - Backend PR [#176](https://github.com/B-icy/Carthagent-Backend/pull/176), merged
11
+ revision `ec40fdb9b053e64b820adb18e7d35da927468149`.
12
+ - [Production deployment](https://github.com/B-icy/Carthagent-Backend/actions/runs/41401836218)
13
+ passed migration/readiness, public-site and service checks.
14
+ - Native preview accepted the real required-check Ship delivery
15
+ `903d3ed5-88db-41ca-b72d-f5699fa5ae7f`, source snapshot
16
+ `cea9b1d71e113d0b876cec4d3a2eef38f16e14decb519d033fb7d9325508b8bb`.
17
+ - Claim receipt `9d44cf4b-0a70-40e5-90ce-d68a7718fe21`, awarded
18
+ `2026-11-02T06:49:23.538Z`, policy `verified-delivery-beta-v1`.
19
+
20
+ | Check | Before | After |
21
+ | --- | --- | --- |
22
+ | Coins | 20 | 45 |
23
+ | Total XP | 0 | 100 |
24
+ | Total / weekly km | 0 / 0 | 1 / 1 |
25
+ | Profile version | 14 | 15 |
26
+ | Equipment / inventory | Sandals equipped | Identical, sandals retained |
27
+
28
+ Immediate replay returned the identical receipt with `replayed:true` and no
29
+ additional grant. After stopping and restarting the registered native service,
30
+ preview, replay and profile all matched the saved post-claim result exactly.
31
+ Sessions and credentials persisted. No debug issuance was used.
32
+
33
+ The live TUI displayed 45 coins / 100 XP / 1 km, rendered the digest-only claim
34
+ confirmation, accepted cancellation, and then confirmed the existing receipt
35
+ with “This delivery was already rewarded. No duplicate grant.” The wallet and
36
+ version stayed unchanged. Captures: `/tmp/opencode/rewards-ui-preview.txt` and
37
+ `/tmp/opencode/rewards-ui-replayed.txt`.
38
+
39
+ ## Repeatable new-user acceptance — passed locally
40
+
41
+ Disposable PostgreSQL 17.11: 117 tests passed before the additional bearer
42
+ scenario; the complete six-test bearer group also passed. Backend CI ran the
43
+ updated suite successfully. Backend unit tests: 521 passed, one skipped.
44
+ Syntax, assets and navigation checks passed.
45
+
46
+ Coverage includes one welcome grant, cookie and device-approved bearer access,
47
+ reward claims and browser/CLI agreement, token refresh/new CLI session, owner
48
+ isolation, concurrent daily caps, run/snapshot deduplication, changed-evidence
49
+ rejection, transaction and wallet-overflow rollback, level/week progression,
50
+ milestone shop/quote/equip agreement, purchase replay, database reconnect and
51
+ restricted deployment/application-role permissions.
52
+
53
+ Native build/lint and 76 focused tests passed, including explicit confirmation,
54
+ account/session binding, current source gates, privacy of digest-only uploads,
55
+ lost-response recovery, restart and receipt recovery after source changes.
56
+
57
+ ## Remaining acceptance gates
58
+
59
+ - Live browser comparison awaits normal user sign-in in `voyages-rewards-e2e`.
60
+ - Live terminal rendering, cancellation and confirmed replay passed.
61
+ - Five-platform runtime prebuild 41398315323 succeeded on attempt 2. Exact
62
+ provenance, all archive checksums, embedded metadata and executable hashes
63
+ passed the production acquisition parser; regenerating the manifest produced
64
+ the identical candidate. The packaged beta manifest now matches those bytes.
65
+ Installed beta acceptance remains pending.
66
+
67
+ Pre-manifest full native quality run: lint/build passed; 1,124 tests passed, five
68
+ skipped, six failed solely because the package version is beta.1 while the
69
+ runtime manifest still pins preview.13. These remain release-blocking failures
70
+ until the verified beta candidate was integrated. The post-integration quality
71
+ run passed: **1,130 tests passed, five skipped, zero failures**, plus lint,
72
+ typecheck and build. Exact candidate/packaged manifest equality and
73
+ `verify-release-version.mjs v1.1.0-beta.1` also passed. No trust assertion was relaxed.
74
+
75
+ Native PR CI passed all jobs after retrying one Windows Node 24 process-query
76
+ timeout. Native navigation also passed locally: 12 tests / 65 assertions.
77
+
78
+ The reward backend relies on authenticated local-harness attestation. It does
79
+ not independently execute repositories or prove authorship. Daily classifier
80
+ assessment and personal quest checkmarks remain unrewarded.
81
+
82
+ Local evidence: `/tmp/opencode/rewards-live-claimed.json`,
83
+ `/tmp/opencode/rewards-live-restarted.json`, and
84
+ `/tmp/opencode/rewards-installed-backup/provenance.json`.
@@ -0,0 +1,83 @@
1
+ # Host TUI glyph compatibility review (v4)
2
+
3
+ ## Decision
4
+
5
+ The standalone owned-host glyph compatibility patch was independently approved
6
+ at SHA-256
7
+ `37d93c0dfd5c52bd4536136fb53618580a29d682644848433f3b2ee4726d98a4`.
8
+ The parent also reports that its full 11-test focused run passed with 146
9
+ assertions. This record publishes the reviewed patch and its Unicode source
10
+ inventory for later composition; it does not claim that the patch is already
11
+ included in the current upstream runtime or in a final binary.
12
+
13
+ ## Artifacts
14
+
15
+ - Patch: [`../patches/opencode-v2.0.32-glyphs.patch`](../patches/opencode-v2.0.32-glyphs.patch)
16
+ - SHA-256: `37d93c0dfd5c52bd4536136fb53618580a29d682644848433f3b2ee4726d98a4`
17
+ - Source base: upstream commit
18
+ `843a6c514e606b436a7fe713422ace0a93ad3d61`.
19
+ - Inventory: [`unicode-inventory-v4.csv`](unicode-inventory-v4.csv)
20
+ - SHA-256: `8727e2cc18f47a3cfe986adc9f721ccaf4bef8f4f39046a7667bc9d6c5bf2fb3`.
21
+
22
+ The patch changes 74 paths: 72 modified source/test files and two added files
23
+ (`packages/tui/src/ui/glyphs.ts` and `packages/tui/test/glyphs.test.ts`). The
24
+ independent review described its source-file audit as 72 changed files; the
25
+ author's 74-file count includes those two additions. Both figures refer to the
26
+ same v4 patch, not different revisions.
27
+
28
+ ## Scope and inventory
29
+
30
+ The inventory scanned all 245 non-mini `packages/tui/src` TypeScript and TSX
31
+ files. It records 401 Unicode-bearing source lines in 77 files, with zero
32
+ unclassified rows. The classifications distinguish known host chrome from
33
+ dynamic/user/model/code content, examples, and comments. Mini remains out of
34
+ scope except where shared with the full TUI. Unicode remains the default;
35
+ `auto` stays Unicode until a launcher resolves it. Only known static chrome is
36
+ mapped, preserving dynamic text, paths, shell output, and diffs.
37
+
38
+ ## Review and validation evidence
39
+
40
+ - Independent review approved the exact v4 patch hash above. Its blocking v3
41
+ findings (missing `chromeEllipsis` imports) are fixed in the three affected
42
+ consumers: `dialog-session-list.tsx`, `prompt/autocomplete.tsx`, and
43
+ `prompt/index.tsx`.
44
+ - Focused tests: 11 passed, 0 failed, 146 assertions. The session-list test
45
+ executes the relative-path truncation helper in ASCII and Unicode modes and
46
+ checks that dynamic path characters remain intact.
47
+ - Glyph-helper binding audit: zero missing bindings across the patch's 74
48
+ changed paths (including the two additions).
49
+ - TypeScript transpilation: 74 changed TS/TSX files, zero transpilation errors.
50
+ - `git diff --check`: passed.
51
+ - Typecheck was compared against the pinned upstream base, not treated as a
52
+ clean pass. Both base and v4 emitted exactly the same single diagnostic:
53
+ `src/plugin/api.tsx(152,3): error TS2741: Property 'transcript' is missing in
54
+ type ... but required in type 'Context'.` No changed-file diagnostic
55
+ remained. Captured outputs:
56
+ [`typecheck-base.log`](typecheck-base.log) and
57
+ [`typecheck-v4.log`](typecheck-v4.log).
58
+
59
+ Commands used for the focused checks (from `packages/tui` in the isolated
60
+ upstream worktree):
61
+
62
+ ```sh
63
+ /tmp/opencode/ctg-parity-prototype/bun-dist/bun-linux-x64/bun test --timeout 30000 test/glyphs.test.ts
64
+ /tmp/opencode/ctg-parity-prototype/bun-dist/bun-linux-x64/bun /tmp/opencode/audit-glyph-bindings.ts
65
+ /tmp/opencode/ctg-parity-prototype/bun-dist/bun /tmp/opencode/transpile-changed.ts
66
+ git diff --check
67
+ ```
68
+
69
+ The test result above is the owner's run. The binding and transpilation audits
70
+ were run from the isolated source worktree. The workspace typecheck command
71
+ was `tsgo --noEmit --pretty false -p tsconfig.json` on both base and v4; the
72
+ captured logs preserve the complete (single-line) diagnostic. These checks are
73
+ source-level evidence only and are not a final composed-runtime or release
74
+ binary validation.
75
+
76
+ ## Composition boundary
77
+
78
+ The migration product branch may separately own composition into its runtime.
79
+ This documentation-only review change intentionally does not alter build or
80
+ release recipes, CLI resolution, CTG integration code, or the source patch
81
+ payload. The immutable patch and inventory should be the inputs to that
82
+ composition; do not edit this published v4 revision in place. Any source
83
+ revision requires a new patch filename and digest.
@@ -0,0 +1,26 @@
1
+ # Spinner test import-order follow-up (v1)
2
+
3
+ The composed 81e test run exposed an import-order assumption in the spinner
4
+ assertion: `SPINNER_FRAMES` is initialized when its module is first imported,
5
+ so setting `CTG_TUI_GLYPHS` later in a test does not change that constant. The
6
+ production startup-time behavior is intentional and unchanged. The follow-up
7
+ patch, [`../patches/opencode-v2.0.32-glyph-spinner-test-isolation-v1.patch`](../patches/opencode-v2.0.32-glyph-spinner-test-isolation-v1.patch),
8
+ checks ASCII and Unicode startup values in separate Bun subprocesses with the
9
+ mode set in each child's environment before import.
10
+
11
+ Patch SHA-256:
12
+ `651f4d08959ed657c94fc77fb6af48992b928f2b63eb922719f34dcb38cd8f26`.
13
+
14
+ ## Validation on Bun 1.4.2
15
+
16
+ - Glyph tests: 11 passed, 0 failed, 147 assertions.
17
+ - Combined glyph, plugin-keymap, and plugin-theme tests with a 60-second
18
+ per-test timeout: 18 passed, 0 failed, 168 assertions.
19
+ - The same combined invocation with the suite's 30-second default had one
20
+ plugin-keymap timeout; rerunning at 60 seconds passed. No production code or
21
+ spinner initialization was changed.
22
+
23
+ The subprocess assertions set the selected mode before importing
24
+ `spinner-frames.ts`; this preserves and verifies the startup-time constant
25
+ contract in both ASCII and Unicode modes despite other test modules being able
26
+ to import the module earlier in the parent process.
@@ -0,0 +1 @@
1
+ src/plugin/api.tsx(152,3): error TS2741: Property 'transcript' is missing in type '{ options: Readonly<Record<string, any>>; readonly location: LocationPublicInfo | undefined; app: { version: string; channel: string; }; renderer: CliRenderer; ... 8 more ...; ui: { ...; }; }' but required in type 'Context'.
@@ -0,0 +1 @@
1
+ src/plugin/api.tsx(152,3): error TS2741: Property 'transcript' is missing in type '{ options: Readonly<Record<string, any>>; readonly location: LocationPublicInfo | undefined; app: { version: string; channel: string; }; renderer: CliRenderer; ... 8 more ...; ui: { ...; }; }' but required in type 'Context'.