@vibecodr/cli 0.2.11 → 1.0.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (256) hide show
  1. package/CHANGELOG.md +53 -23
  2. package/MIGRATION.md +73 -0
  3. package/README.md +89 -72
  4. package/dist/auth/official-client.d.ts +6 -0
  5. package/dist/auth/official-client.d.ts.map +1 -0
  6. package/dist/auth/official-client.js +1 -0
  7. package/dist/auth/official-client.js.map +1 -0
  8. package/dist/auth/token-manager.d.ts +40 -0
  9. package/dist/auth/token-manager.d.ts.map +1 -0
  10. package/dist/auth/token-manager.js +1 -2
  11. package/dist/auth/token-manager.js.map +1 -0
  12. package/dist/bin/vc-tools.d.ts +3 -0
  13. package/dist/bin/vc-tools.d.ts.map +1 -0
  14. package/dist/bin/vc-tools.js +7 -0
  15. package/dist/bin/vc-tools.js.map +1 -0
  16. package/dist/bin/vibecodr-mcp.d.ts +3 -0
  17. package/dist/bin/vibecodr-mcp.d.ts.map +1 -0
  18. package/dist/bin/vibecodr-mcp.js +37 -0
  19. package/dist/bin/vibecodr-mcp.js.map +1 -0
  20. package/dist/cli/errors.d.ts +28 -0
  21. package/dist/cli/errors.d.ts.map +1 -0
  22. package/dist/cli/errors.js +1 -0
  23. package/dist/cli/errors.js.map +1 -0
  24. package/dist/cli/output.d.ts +16 -0
  25. package/dist/cli/output.d.ts.map +1 -0
  26. package/dist/cli/output.js +1 -0
  27. package/dist/cli/output.js.map +1 -0
  28. package/dist/cli/parse.d.ts +18 -0
  29. package/dist/cli/parse.d.ts.map +1 -0
  30. package/dist/cli/parse.js +1 -0
  31. package/dist/cli/parse.js.map +1 -0
  32. package/dist/clients/base.d.ts +20 -0
  33. package/dist/clients/base.d.ts.map +1 -0
  34. package/dist/clients/base.js +1 -0
  35. package/dist/clients/base.js.map +1 -0
  36. package/dist/clients/claude-code.d.ts +5 -0
  37. package/dist/clients/claude-code.d.ts.map +1 -0
  38. package/dist/clients/claude-code.js +88 -0
  39. package/dist/clients/claude-code.js.map +1 -0
  40. package/dist/clients/claude-desktop.d.ts +5 -0
  41. package/dist/clients/claude-desktop.d.ts.map +1 -0
  42. package/dist/clients/claude-desktop.js +97 -0
  43. package/dist/clients/claude-desktop.js.map +1 -0
  44. package/dist/clients/codex.d.ts +5 -0
  45. package/dist/clients/codex.d.ts.map +1 -0
  46. package/dist/clients/codex.js +1 -0
  47. package/dist/clients/codex.js.map +1 -0
  48. package/dist/clients/cursor.d.ts +5 -0
  49. package/dist/clients/cursor.d.ts.map +1 -0
  50. package/dist/clients/cursor.js +1 -1
  51. package/dist/clients/cursor.js.map +1 -0
  52. package/dist/clients/vscode.d.ts +5 -0
  53. package/dist/clients/vscode.d.ts.map +1 -0
  54. package/dist/clients/vscode.js +5 -1
  55. package/dist/clients/vscode.js.map +1 -0
  56. package/dist/clients/windsurf.d.ts +5 -0
  57. package/dist/clients/windsurf.d.ts.map +1 -0
  58. package/dist/clients/windsurf.js +1 -0
  59. package/dist/clients/windsurf.js.map +1 -0
  60. package/dist/commands/call.d.ts +9 -0
  61. package/dist/commands/call.d.ts.map +1 -0
  62. package/dist/commands/call.js +1 -0
  63. package/dist/commands/call.js.map +1 -0
  64. package/dist/commands/config.d.ts +3 -0
  65. package/dist/commands/config.d.ts.map +1 -0
  66. package/dist/commands/config.js +1 -0
  67. package/dist/commands/config.js.map +1 -0
  68. package/dist/commands/context.d.ts +15 -0
  69. package/dist/commands/context.d.ts.map +1 -0
  70. package/dist/commands/context.js +2 -5
  71. package/dist/commands/context.js.map +1 -0
  72. package/dist/commands/doctor.d.ts +3 -0
  73. package/dist/commands/doctor.d.ts.map +1 -0
  74. package/dist/commands/doctor.js +2 -1
  75. package/dist/commands/doctor.js.map +1 -0
  76. package/dist/commands/help.d.ts +3 -0
  77. package/dist/commands/help.d.ts.map +1 -0
  78. package/dist/commands/help.js +1 -0
  79. package/dist/commands/help.js.map +1 -0
  80. package/dist/commands/install.d.ts +3 -0
  81. package/dist/commands/install.d.ts.map +1 -0
  82. package/dist/commands/install.js +23 -5
  83. package/dist/commands/install.js.map +1 -0
  84. package/dist/commands/login.d.ts +3 -0
  85. package/dist/commands/login.d.ts.map +1 -0
  86. package/dist/commands/login.js +1 -0
  87. package/dist/commands/login.js.map +1 -0
  88. package/dist/commands/logout.d.ts +3 -0
  89. package/dist/commands/logout.d.ts.map +1 -0
  90. package/dist/commands/logout.js +1 -0
  91. package/dist/commands/logout.js.map +1 -0
  92. package/dist/commands/pulse-publish.d.ts +3 -0
  93. package/dist/commands/pulse-publish.d.ts.map +1 -0
  94. package/dist/commands/pulse-publish.js +1 -0
  95. package/dist/commands/pulse-publish.js.map +1 -0
  96. package/dist/commands/pulse-setup.d.ts +3 -0
  97. package/dist/commands/pulse-setup.d.ts.map +1 -0
  98. package/dist/commands/pulse-setup.js +5 -3
  99. package/dist/commands/pulse-setup.js.map +1 -0
  100. package/dist/commands/pulse.d.ts +3 -0
  101. package/dist/commands/pulse.d.ts.map +1 -0
  102. package/dist/commands/pulse.js +1 -0
  103. package/dist/commands/pulse.js.map +1 -0
  104. package/dist/commands/status.d.ts +3 -0
  105. package/dist/commands/status.d.ts.map +1 -0
  106. package/dist/commands/status.js +1 -0
  107. package/dist/commands/status.js.map +1 -0
  108. package/dist/commands/tools.d.ts +3 -0
  109. package/dist/commands/tools.d.ts.map +1 -0
  110. package/dist/commands/tools.js +1 -0
  111. package/dist/commands/tools.js.map +1 -0
  112. package/dist/commands/uninstall.d.ts +3 -0
  113. package/dist/commands/uninstall.d.ts.map +1 -0
  114. package/dist/commands/uninstall.js +12 -4
  115. package/dist/commands/uninstall.js.map +1 -0
  116. package/dist/commands/upload.d.ts +3 -0
  117. package/dist/commands/upload.d.ts.map +1 -0
  118. package/dist/commands/upload.js +1 -0
  119. package/dist/commands/upload.js.map +1 -0
  120. package/dist/commands/whoami.d.ts +3 -0
  121. package/dist/commands/whoami.d.ts.map +1 -0
  122. package/dist/commands/whoami.js +82 -0
  123. package/dist/commands/whoami.js.map +1 -0
  124. package/dist/core/interactive-input.d.ts +7 -0
  125. package/dist/core/interactive-input.d.ts.map +1 -0
  126. package/dist/core/interactive-input.js +1 -0
  127. package/dist/core/interactive-input.js.map +1 -0
  128. package/dist/core/mcp-client.d.ts +17 -0
  129. package/dist/core/mcp-client.d.ts.map +1 -0
  130. package/dist/core/mcp-client.js +1 -0
  131. package/dist/core/mcp-client.js.map +1 -0
  132. package/dist/core/redaction.d.ts +2 -0
  133. package/dist/core/redaction.d.ts.map +1 -0
  134. package/dist/core/redaction.js +36 -2
  135. package/dist/core/redaction.js.map +1 -0
  136. package/dist/core/renderers.d.ts +8 -0
  137. package/dist/core/renderers.d.ts.map +1 -0
  138. package/dist/core/renderers.js +1 -0
  139. package/dist/core/renderers.js.map +1 -0
  140. package/dist/doctor/run.d.ts +10 -0
  141. package/dist/doctor/run.d.ts.map +1 -0
  142. package/dist/doctor/run.js +12 -3
  143. package/dist/doctor/run.js.map +1 -0
  144. package/dist/legacy/cli/errors.d.ts +9 -0
  145. package/dist/legacy/cli/errors.d.ts.map +1 -0
  146. package/dist/legacy/cli/errors.js +23 -0
  147. package/dist/legacy/cli/errors.js.map +1 -0
  148. package/dist/legacy/cli/install.d.ts +24 -0
  149. package/dist/legacy/cli/install.d.ts.map +1 -0
  150. package/dist/legacy/cli/install.js +307 -0
  151. package/dist/legacy/cli/install.js.map +1 -0
  152. package/dist/legacy/cli/output.d.ts +17 -0
  153. package/dist/legacy/cli/output.d.ts.map +1 -0
  154. package/dist/legacy/cli/output.js +36 -0
  155. package/dist/legacy/cli/output.js.map +1 -0
  156. package/dist/legacy/cli/parser.d.ts +33 -0
  157. package/dist/legacy/cli/parser.d.ts.map +1 -0
  158. package/dist/legacy/cli/parser.js +177 -0
  159. package/dist/legacy/cli/parser.js.map +1 -0
  160. package/dist/legacy/cli/run.d.ts +11 -0
  161. package/dist/legacy/cli/run.d.ts.map +1 -0
  162. package/dist/legacy/cli/run.js +2947 -0
  163. package/dist/legacy/cli/run.js.map +1 -0
  164. package/dist/legacy/config/credential-store.d.ts +8 -0
  165. package/dist/legacy/config/credential-store.d.ts.map +1 -0
  166. package/dist/legacy/config/credential-store.js +52 -0
  167. package/dist/legacy/config/credential-store.js.map +1 -0
  168. package/dist/legacy/config/store.d.ts +63 -0
  169. package/dist/legacy/config/store.d.ts.map +1 -0
  170. package/dist/legacy/config/store.js +311 -0
  171. package/dist/legacy/config/store.js.map +1 -0
  172. package/dist/legacy/core/api-client.d.ts +45 -0
  173. package/dist/legacy/core/api-client.d.ts.map +1 -0
  174. package/dist/legacy/core/api-client.js +204 -0
  175. package/dist/legacy/core/api-client.js.map +1 -0
  176. package/dist/legacy/core/contracts.d.ts +488 -0
  177. package/dist/legacy/core/contracts.d.ts.map +1 -0
  178. package/dist/legacy/core/contracts.js +386 -0
  179. package/dist/legacy/core/contracts.js.map +1 -0
  180. package/dist/legacy/core/goal-coverage.d.ts +15 -0
  181. package/dist/legacy/core/goal-coverage.d.ts.map +1 -0
  182. package/dist/legacy/core/goal-coverage.js +169 -0
  183. package/dist/legacy/core/goal-coverage.js.map +1 -0
  184. package/dist/legacy/core/redaction.d.ts +4 -0
  185. package/dist/legacy/core/redaction.d.ts.map +1 -0
  186. package/dist/legacy/core/redaction.js +121 -0
  187. package/dist/legacy/core/redaction.js.map +1 -0
  188. package/dist/legacy/core/validators.d.ts +8 -0
  189. package/dist/legacy/core/validators.d.ts.map +1 -0
  190. package/dist/legacy/core/validators.js +102 -0
  191. package/dist/legacy/core/validators.js.map +1 -0
  192. package/dist/legacy/core/version.d.ts +3 -0
  193. package/dist/legacy/core/version.d.ts.map +1 -0
  194. package/dist/legacy/core/version.js +3 -0
  195. package/dist/legacy/core/version.js.map +1 -0
  196. package/dist/legacy/index.d.ts +8 -0
  197. package/dist/legacy/index.d.ts.map +1 -0
  198. package/dist/legacy/index.js +8 -0
  199. package/dist/legacy/index.js.map +1 -0
  200. package/dist/platform/browser.d.ts +7 -0
  201. package/dist/platform/browser.d.ts.map +1 -0
  202. package/dist/platform/browser.js +1 -0
  203. package/dist/platform/browser.js.map +1 -0
  204. package/dist/platform/exec.d.ts +3 -0
  205. package/dist/platform/exec.d.ts.map +1 -0
  206. package/dist/platform/exec.js +10 -1
  207. package/dist/platform/exec.js.map +1 -0
  208. package/dist/platform/paths.d.ts +9 -0
  209. package/dist/platform/paths.d.ts.map +1 -0
  210. package/dist/platform/paths.js +13 -0
  211. package/dist/platform/paths.js.map +1 -0
  212. package/dist/platform/prompt.d.ts +5 -0
  213. package/dist/platform/prompt.d.ts.map +1 -0
  214. package/dist/platform/prompt.js +1 -0
  215. package/dist/platform/prompt.js.map +1 -0
  216. package/dist/storage/config-store.d.ts +15 -0
  217. package/dist/storage/config-store.d.ts.map +1 -0
  218. package/dist/storage/config-store.js +1 -0
  219. package/dist/storage/config-store.js.map +1 -0
  220. package/dist/storage/file-lock.d.ts +7 -0
  221. package/dist/storage/file-lock.d.ts.map +1 -0
  222. package/dist/storage/file-lock.js +1 -0
  223. package/dist/storage/file-lock.js.map +1 -0
  224. package/dist/storage/install-manifest.d.ts +12 -0
  225. package/dist/storage/install-manifest.d.ts.map +1 -0
  226. package/dist/storage/install-manifest.js +1 -0
  227. package/dist/storage/install-manifest.js.map +1 -0
  228. package/dist/storage/secret-store.d.ts +36 -0
  229. package/dist/storage/secret-store.d.ts.map +1 -0
  230. package/dist/storage/secret-store.js +1 -0
  231. package/dist/storage/secret-store.js.map +1 -0
  232. package/dist/types/auth.d.ts +55 -0
  233. package/dist/types/auth.d.ts.map +1 -0
  234. package/dist/types/auth.js +1 -0
  235. package/dist/types/auth.js.map +1 -0
  236. package/dist/types/config.d.ts +29 -0
  237. package/dist/types/config.d.ts.map +1 -0
  238. package/dist/types/config.js +1 -0
  239. package/dist/types/config.js.map +1 -0
  240. package/dist/types/install.d.ts +26 -0
  241. package/dist/types/install.d.ts.map +1 -0
  242. package/dist/types/install.js +1 -0
  243. package/dist/types/install.js.map +1 -0
  244. package/docs/API-CONTRACT.md +606 -0
  245. package/docs/CLOUDFLARE-PRIMITIVE-FIT.md +212 -0
  246. package/docs/RELEASE-CHECKLIST.md +297 -0
  247. package/docs/SECURITY.md +227 -0
  248. package/docs/VALIDATION-MATRIX.md +58 -0
  249. package/docs/commands.md +49 -29
  250. package/docs/legacy/AGENT-TOOLKIT-RFC.md +1395 -0
  251. package/docs/legacy/CLI-GUIDELINES-AUDIT.md +95 -0
  252. package/docs/legacy/COMPLETION-AUDIT.md +542 -0
  253. package/docs/legacy/vc-tools-finetune.md +982 -0
  254. package/docs/legacy/vc-tools-goal-browser-run-containers.md +465 -0
  255. package/docs/legacy/vc-tools-goal-original.md +249 -0
  256. package/package.json +37 -8
@@ -0,0 +1,542 @@
1
+ # vc-tools Completion Audit
2
+
3
+ This audit maps `vc-tools-goal.md` to concrete repo evidence. It is intentionally
4
+ stricter than a green test suite: a verifier only counts when it covers the
5
+ actual requirement.
6
+
7
+ ## Objective
8
+
9
+ Build `tools/vc-tools` as a standalone production-grade CLI and hosted live
10
+ surface for Vibecodr Tools Cloud, separate from the existing Vibecodr CLI,
11
+ covering the goal file's remote MCP, browser, sandbox, artifact, activity status,
12
+ usage, grants, retention, dashboard, plan, quota, audit, and safety posture.
13
+
14
+ ## Current Gate
15
+
16
+ The CLI-contract surface is locally verified. `live-hosted-production` is
17
+ intentionally marked `hosted-required` after the human-use security hardening
18
+ work because the hosted service must be fully smoked before advertising it as
19
+ live. D1 migrations through `0006_scheduled_qa.sql` were applied and
20
+ read back on 2026-05-14, Browser Run/grant secrets were applied and read back
21
+ by secret name on 2026-05-14, and `vc-tools-api` was deployed on 2026-05-14 as
22
+ version `9846c9ad-641d-43f4-be5e-7a2ce574eb82`, then redeployed as
23
+ `fb83e4dc-8142-414f-94ba-66ec14821a68` after redirect-preflight hardening. Live
24
+ render, screenshot, markdown, PDF, Sandbox command, Sandbox tests, artifact
25
+ metadata, artifact list/readback, artifact bytes, usage,
26
+ retention, dashboard COGS URL, Scheduled QA create/list/run-now/job/artifact,
27
+ Scheduled QA monthly cap denial, `status`, `connect`, `tools list`, and direct
28
+ MCP JSON-RPC `initialize`, `tools/list`, and `tools/call` smokes
29
+ passed. Operator alert delivery is configured, but the historical production
30
+ delivery proof covered a retired per-user usage notification lane. Current
31
+ release proof must use the supported account-wide hosted, Browser Run, or
32
+ Sandbox capacity alert path. This is still not live release clearance because
33
+ short Creator Workflow-owned Browser Session agent tasks, Creator Sandbox command execution,
34
+ real Clerk OAuth, real user-scoped API-key exchange, and revoked-key denial have
35
+ been production-proven, while real paid-user Pro provider breadth,
36
+ Pro/long-duration Browser Session proof, natural Scheduled QA cron readback, and
37
+ account-wide operator alert fanout proof remain open. Monthly and daily credit
38
+ exhaustion have synthetic production proof: 429 `quota.exceeded` and 429
39
+ `quota.daily_exceeded` returned before job insertion, with D1 readback showing
40
+ zero accepted jobs for the probe actors. Unsafe-target denial now has live
41
+ shape-level, DNS-preflight including private-AAAA, and unsafe-redirect proof.
42
+ Synthetic CLI-grant smokes proved the Free paid-sandbox denial, Pro
43
+ `standard-2` sandbox lane, and cross-actor artifact denial; those do not replace
44
+ real paid-account provider-path proof. Historical
45
+ `production-smoked` bullets below are not current release clearance unless
46
+ explicitly refreshed by the 2026-05-14 notes.
47
+ Scheduled QA is live-smoked for manual run-now behavior and monthly cap denial;
48
+ natural cron-tick readback at a real deployed trigger time remains open.
49
+
50
+ ## Prompt-to-Artifact Checklist
51
+
52
+ | Goal requirement | Evidence | Verification | Status |
53
+ | --- | --- | --- | --- |
54
+ | Separate tool from Vibecodr CLI | `package.json` uses `@vibecodr/vc-tools`, bin `vc-tools`; `AGENTS.md` defines separate namespace; `vc-tools-goal.md` examples use `vc-tools` | `test/cli.behavior.test.ts` help/version test; `git rev-parse --show-toplevel` in child repo | Locally verified |
55
+ | CLI as setup/debug/artifact helper | `src/cli/run.ts` implements login, status, connect, tools, jobs, artifacts, usage/limits, grants, retention, plans, dashboard, inspect, doctor | `test/cli.behavior.test.ts`; `npm run verify` | Locally verified |
56
+ | Remote MCP is primary agent surface | `src/hosted/worker.ts` exposes `/mcp`; `docs/API-CONTRACT.md` documents Streamable HTTP and JSON-RPC methods | `test/hosted-worker.test.ts` verifies `initialize`, `tools/list`, and `tools/call`; direct production JSON-RPC smoke on 2026-05-14 verified `initialize`, `tools/list`, and `tools/call` for `usage.read` | Locally verified; live-smoked 2026-05-14 |
57
+ | Browser render/screenshot/markdown/PDF/crawl/agent tools | `CAPABILITIES` and CLI aliases cover `browser.render_url`, `browser.screenshot_url`, `browser.extract_markdown`, `browser.render_pdf`, `browser.crawl_site`, and paid `browser.agent_task`; live Worker uses Browser Run Quick Actions for stateless browser jobs and the Browser Session binding for Creator/Pro agent tasks; direct cookie/header/storage-state auth material is denied before provider execution | CLI payload tests, crawl payload tests, paid agent-task payload test, unsafe URL validation tests, hosted authenticated-browser material denial test, hosted DNS preflight, Quick Action routing test, paid agent-task contract test, Browser Session closure metadata tests, metered-time usage test, crawl artifact and crawl-page metering test | Locally verified |
58
+ | Scheduled QA | `src/hosted/worker.ts` implements `/v1/scheduled-qa` create/list/update/delete plus the Worker `scheduled()` cron enqueuer; `migrations/0006_scheduled_qa.sql` stores actor-scoped configs and run rows; CLI exposes `vc-tools scheduled-qa`; public and docs surfaces classify Scheduled QA as gated beta | hosted Worker scheduled-QA create/list/cron-enqueue tests, CLI scheduled-QA route tests, plan/classification tests, shared plan presentation tests; live run-now/job/artifact and monthly cap-denial smokes on 2026-05-14 | Locally verified; live-smoked 2026-05-14 |
59
+ | Sandbox run/tests tools | `CAPABILITIES` and CLI aliases cover `sandbox.run_command`, `sandbox.run_tests`; sandbox command validation prevents local execution; live Worker exports Creator `Sandbox` and Pro `ProSandbox` SDK classes with public HTTP(S) egress enabled for package/docs work; Cloudflare host policy plus the hosted outbound handler block private, local, link-local, metadata, and internal destinations | CLI sandbox tests, validator tests, hosted public-network-default and outbound-denial tests, Wrangler config split test; fresh production smoke required after redeploy | Locally verified |
60
+ | Artifact store/read/pull/delete | CLI implements artifact list/get/pull/create/delete; live Worker stores generated/uploaded artifacts in R2 with D1 metadata, active-storage quota predicates, R2 cleanup on D1 reservation failure, explicit actor-scoped deletion, and expiry | CLI artifact tests; hosted upload cap tests; hosted artifact storage race cleanup test; hosted explicit artifact delete test; hosted queue artifact completion test; expired artifact download denial test; scheduled cleanup path | Locally verified |
61
+ | Hosted work status/cancel/list | CLI implements job list/status/cancel; live Worker stores hosted work records in D1, dispatches stateless/sandbox/scheduled jobs through Queue/DLQ, dispatches paid Browser Agent jobs through `BROWSER_AGENT_WORKFLOW`, reports queued-ahead metadata without delaying interactive tools, lets failed Queue job messages reach the configured DLQ retry boundary without re-running cost-bearing provider work, and returns cleanly for exhausted failed-job deliveries | CLI job tests; hosted queue completion test; hosted queued-ahead metadata test; hosted Browser Agent Workflow dispatch/rejection tests; pre-execution and during-execution cancellation tests; failed-job DLQ retry-boundary and exhausted-loop tests; Wrangler queue/workflow config assertion | Locally verified |
62
+ | Usage and limits | `DASHBOARD_SECTIONS`, CLI dashboard URL generation including internal COGS, hosted `/dashboard/*` HTML, live `/v1/usage` from D1 usage events, `usage.read` MCP tool, and `vc-tools limits` alias | CLI usage/limits tests, CLI dashboard tests, hosted MCP usage test, hosted dashboard contract test, shared API URL validation test | Locally verified |
63
+ | Open-source client authority boundary | `vc-tools plans` local fallback and `/v1/plans` are marked non-authoritative for actor entitlement; `/v1/usage`/`usage.read` are read-only and marked not client-mutable; docs state forks cannot change official hosted entitlement or provider access | CLI plans fallback test, CLI usage/limits test, hosted plan contract test, hosted MCP usage test, docs/security review | Locally verified |
64
+ | Plan usage, recent activity, artifacts, tool grants, retention, billing, internal COGS dashboard sections | `DASHBOARD_SECTIONS` and `dashboardData()` cover overview, usage, activity, artifacts, grants, retention, billing, and COGS; live COGS uses D1 usage plus env-configured per-surface assumptions | `hosted worker exposes dashboard, plan, offering classification, grant, and policy launch contract`; CLI dashboard tests cover the COGS URL; live plan/quota gate uses `DEFAULT_PLANS` | Locally verified |
65
+ | Creator and Pro subscription plan packaging | `DEFAULT_PLANS` includes Free, Creator, and Pro and omits the retired standalone Starter package; Creator is the `$19/mo` baseline | CLI plans test and hosted plan contract test | Locally verified |
66
+ | Free vc-tools floor | `DEFAULT_PLANS` includes limited Free Quick Actions only: 30 VC Tool credits/month, 10/day, 1 concurrent run, 30s browser-run cap, no Sandbox, no Browser Sessions, no scheduled QA | CLI plans test and hosted plan contract test | Locally verified |
67
+ | Separate build and VC Tools ledgers | Parent `PLAN_LIMITS[*].builds` owns build seconds/jobs/concurrency/output caps; parent and child `vcTools` owns VC Tool credits/browser seconds/crawl/scheduled QA; hosted `enforceQuota` counts browser and sandbox jobs against one VC Tools ledger and enforces Free/Creator/Pro active-run caps before Queue/Workflow dispatch | parent shared-plan tests, parent build reserve tests, hosted plan/quota and browser-concurrency tests | Locally verified |
68
+ | Overage meters | `OVERAGE_METERS` covers browser time, sandbox time, storage, retention, concurrency, crawl, and scheduled QA while customer-facing pricing leads with VC Tool credits and outcomes | CLI plans test and hosted plan contract test | Locally verified |
69
+ | Account-wide hosted capacity and operator alerting | `wrangler.jsonc` caps queue consumer concurrency and both paid Sandbox container lanes at 30, and binds `BROWSER_AGENT_WORKFLOW` for durable paid Browser Agent execution; Creator routes to Cloudflare `standard-1` with 10-minute task caps, Pro routes to Cloudflare `standard-2` with 30-minute task caps, and both paid plans cap per-user active sandbox tasks at 2; the Worker enforces hosted, Browser Run, and Sandbox account hard caps before cost-bearing execution, reports queued-ahead metadata without adding interactive Queue delay, emits metadata-only 70/85/95 account-wide capacity plus Queue/DLQ backlog, artifact-storage, retention-cleanup-failure, Browser/Sandbox execution-health, unexpected hosted Worker 500, auth-failure-anomaly, and Cloudflare spend-anomaly operator alerts through internal-api/email/ntfy/webhook fanout, suppresses every user-scoped vc-tools payload before operator fanout, and dedupes alerts through `operator_alert_dedupe` reset windows | parent shared-plan tests, parent outbound-alert vc-tools filtering tests, hosted Browser/Sandbox account-cap tests, hosted queued-ahead metadata test, hosted Browser Agent Workflow dispatch/rejection tests, hosted soft-cap alert fanout/dedupe/missing-notifier tests, scheduled Queue/DLQ/artifact-storage/retention-cleanup/execution-health/auth-failure/Cloudflare-spend alert tests, hosted Worker 5xx sanitized-alert test, auth-failure metric redaction test, Browser Session user-cap no-alert test, Wrangler config split test, `wrangler types --check`; production deploy/readback on 2026-05-14 shows only `E-VIBECODR-VC-TOOLS-SOFT-CAP` configured, so the new cleanup-failure, execution-health, hosted Worker 5xx, auth-failure-anomaly, Cloudflare spend-anomaly, and Browser Agent Workflow lanes still need deploy/readback | Deployed/read back 2026-05-14 for soft-cap code; Queue/DLQ/artifact-storage/retention-cleanup/execution-health/hosted-5xx/auth-failure/Cloudflare-spend alerts and Browser Agent Workflow dispatch locally verified |
70
+ | Workspace/project/user scoped grants | `LAUNCH_TOOL_GRANTS` records grant, capability, default scope, phase, and allowed plans | Hosted grant contract test checks workspace-scoped sandbox network metadata | Locally verified |
71
+ | Policy: no raw provider credential exposure | Plain `vc-tools login` stores the durable scoped local credential returned to the polling CLI plus a cached short-lived grant; file/stdin OAuth/API-key paths store the durable local credential so grants can refresh; private device codes, browser approval responses, and Cloudflare/provider credentials stay behind hosted/API boundaries | redaction tests; browser/device login tests; OAuth/API-key exchange tests; expired-grant refresh test; secret scan; docs | Locally verified |
72
+ | Policy: quota checked before cost | live Worker checks D1 monthly/daily VC Tool credits, browser seconds, sandbox seconds, and concurrent active runs against the active plan before Queue/Workflow dispatch; D1 job insertion is atomic with the quota reservation and sandbox reservations reconcile on terminal/cancelled jobs; quota denials write analytics-only `tools.denied_quota` audit metrics for COGS/ops review without operator notification fanout | hosted live audit/job-before-dispatch test; hosted quota denial metric assertions; sandbox reservation test; sandbox reservation reconciliation test; atomic reservation conflict test; parallel atomic reservation race test | Locally verified |
73
+ | Policy: audit logged before cost | live Worker inserts a D1 audit event before inserting the job and sending a Queue message or creating a Workflow instance | hosted live audit/job-before-dispatch test; hosted Browser Agent Workflow dispatch test | Locally verified |
74
+ | Policy: no authenticated browsing by default | `LAUNCH_POLICIES` and plan posture disable or gate authenticated browsing | goal verifier markers and hosted policy contract test | Locally verified |
75
+ | Policy: sandbox public egress with private denial | CLI sandbox payloads normalize to public HTTP(S) network available for paid Agent Computer jobs; `LAUNCH_POLICIES` records private/internal denial; hosted outbound policy rejects URL credentials, private/local/internal destinations, and private-resolving hostnames before forwarding HTTP(S) requests | CLI sandbox test; hosted policy contract test; hosted public-network-default and outbound-denial tests | Locally verified |
76
+ | Policy: no browser recording by default | `LAUNCH_POLICIES` and plan posture disable recording by default | hosted policy contract test | Locally verified |
77
+ | Policy: no unlimited crawl | `LAUNCH_POLICIES` and plan posture gate crawl through `browser.crawl_site`, plan page/depth caps, and crawl-page metering | hosted policy contract test; hosted crawl artifact and crawl-page metering test | Locally verified |
78
+ | Human-use security hardening | CLI denies stored-token forwarding to insecure local API URLs unless explicitly allowed; OAuth/API-key login exchanges through Vibecodr Auth, stores the durable local account credential, and refreshes expired grants; artifact uploads/downloads are workspace-bounded including symlink/junction denial; artifact deletion requires explicit confirmation; hosted artifact writes hard-enforce active storage caps and clean up R2 after D1 reservation failure; hosted artifact delete removes actor-scoped D1 shelf rows plus R2 bytes; hosted auth supports scoped Vibecodr CLI grants with per-tool capability scopes; hosted auth failures write anonymous, token/query-free `auth.failed` metrics before any aggregate account-level anomaly alert; live rows are actor-scoped; Browser Run has DNS preflight plus Quick Action routing, Scheduled QA uses only public-HTTPS Browser Quick Actions, paid Browser Agent Workflow routing, crawl routing, timeout shaping, 10-minute idle closure metadata/audit, unsafe URL denial metrics, and provider 429 retry/defer handling; sandbox public HTTP(S) egress is allowed for normal package/docs work while private/local/internal destinations stay denied; sandbox seconds are reserved and reconciled; artifacts inherit and enforce retention; operator alerts remain metadata-only and D1-deduped | CLI behavior tests, validators tests, parent `cliAuth` tests, hosted Worker tests, `migrations/0002_actor_scope.sql`, `migrations/0003_quota_reservations.sql`, `migrations/0004_sandbox_quota_reservations.sql`, `migrations/0005_operator_alert_dedupe.sql`, `migrations/0006_scheduled_qa.sql` | Locally verified |
79
+ | Stable JSON output and exit codes | `src/cli/output.ts`, `src/cli/errors.ts` | CLI behavior tests | Locally verified |
80
+ | Native credential storage by default | `src/config/credential-store.ts` uses native keyring unless file mode is explicitly selected | login tests use explicit file store; docs warn file mode is for tests/automation | Locally verified |
81
+ | Package is publishable | `package.json`, `scripts/check-pack-artifact.mjs`, `.github/workflows/ci.yml` | `npm run verify:artifact`; `npm pack` metadata checked by script | Locally verified |
82
+ | Cloudflare Worker production shape | `wrangler.jsonc`, generated `worker-configuration.d.ts`, `src/hosted/worker.ts`, `Dockerfile`, `migrations/0001_live_schema.sql`, `migrations/0002_actor_scope.sql`, `migrations/0003_quota_reservations.sql`, `migrations/0004_sandbox_quota_reservations.sql`, `migrations/0005_operator_alert_dedupe.sql`, `migrations/0006_scheduled_qa.sql`; Durable Object classes `Sandbox` and `ProSandbox` back Creator/Pro container lanes | `npm run check:worker`; dry-run deploy; remote migrations; live smoke | Hosted-required after hardening |
83
+ | Current Cloudflare guidance used | `docs/API-CONTRACT.md` records Browser Run on Containers, Quick Action timeout, crawl, Sandbox, Workers, and MCP assumptions | Cloudflare docs fetched during implementation; Worker uses current compatibility date and generated types | Verified for this build date |
84
+ | Release channel cannot hide live gaps | `scripts/check-release-readiness.mjs` imports built goal coverage and validates release channel semantics | `npm run verify:release`; `VC_TOOLS_RELEASE_CHANNEL=live npm run verify:release`; included in `npm run verify` | Verified |
85
+
86
+ ## Hosted Production Evidence
87
+
88
+ `live-hosted-production` was previously provisioned and production-smoked before
89
+ the latest security hardening. The entries below distinguish older historical
90
+ evidence from the 2026-05-14 refreshed production smokes that still do not add
91
+ up to live release clearance:
92
+
93
+ - `scripts/wrangler-wincred.ps1 d1 migrations apply vc-tools-db --remote`
94
+ applied `0004_sandbox_quota_reservations.sql` and
95
+ `0005_operator_alert_dedupe.sql` on 2026-05-14 after remote readback showed
96
+ them pending. Follow-up readback reported no pending migrations, returned
97
+ both names from `d1_migrations`, returned `reserved_sandbox_seconds` from
98
+ `PRAGMA table_info(jobs)`, and returned `operator_alert_dedupe` plus expected
99
+ indexes from `sqlite_master`.
100
+ - `scripts/wrangler-wincred.ps1 -CredentialTarget
101
+ vibecodr:cloudflare:wrangler-deploy-token-prod deploy` deployed
102
+ `vc-tools-api` version `9846c9ad-641d-43f4-be5e-7a2ce574eb82` to
103
+ `https://tools.vibecodr.space` on 2026-05-14. The first deploy attempt with
104
+ the admin token uploaded version `88334d51-e255-4051-aae8-68f48434b0e7` but
105
+ failed during route update because that token lacked zone-route permission;
106
+ the deploy-token retry completed.
107
+ - Redirect-preflight hardening was verified with `npm run verify`, then
108
+ redeployed with the same deploy-token path as version
109
+ `fb83e4dc-8142-414f-94ba-66ec14821a68`; Cloudflare deployments readback showed
110
+ that version at 100%.
111
+ - Historical live health returned `providerMode=live`, `version=0.1.3`, no missing
112
+ bindings, and after the alert-secret bootstrap returned
113
+ `operatorAlerts.configured=true`, `operatorAlerts.internalApiBinding=true`,
114
+ and `operatorAlerts.internalAlertToken=true`. Current public health/readiness
115
+ hides operator alert readiness from user-facing payloads.
116
+ - `scripts/vc-tools-secrets.ps1` now owns the hosted alert signer:
117
+ `vibecodr:vc-tools:internal-alert-secret:prod` is uploaded to `vc-tools-api`
118
+ as `VC_TOOLS_INTERNAL_ALERT_TOKEN` and to `vibecodr-internal-api` as
119
+ `INTERNAL_BINDING_TOKEN_NEXT`, leaving the current production
120
+ `INTERNAL_BINDING_TOKEN` untouched. Secret-name readback listed both
121
+ `VC_TOOLS_INTERNAL_ALERT_TOKEN` and `INTERNAL_BINDING_TOKEN_NEXT`.
122
+ - `workers/internal-api/wrangler.toml` previously included
123
+ `E-VIBECODR-VC-TOOLS-USAGE-THRESHOLD` in `ALERT_CODES` for a now-retired
124
+ user-usage operator email lane. The current local contract allows
125
+ `E-VIBECODR-VC-TOOLS-SOFT-CAP` for account-wide capacity pressure and
126
+ `E-VIBECODR-VC-TOOLS-RETENTION-CLEANUP-FAILED` for account-wide
127
+ expired-artifact cleanup failure, and
128
+ `E-VIBECODR-VC-TOOLS-EXECUTION-HEALTH-DEGRADED` for account-wide
129
+ Browser/Sandbox failure or timeout rate pressure, and
130
+ `E-VIBECODR-VC-TOOLS-HOSTED-WORKER-5XX` for unexpected account-wide hosted
131
+ Worker HTTP 500s, and
132
+ `E-VIBECODR-VC-TOOLS-AUTH-FAILURE-ANOMALY` for account-wide hosted auth
133
+ failure bursts, and
134
+ `E-VIBECODR-VC-TOOLS-CLOUDFLARE-SPEND-ANOMALY` for account-wide estimated
135
+ Cloudflare usage spend pressure; all user-scoped vc-tools payloads are
136
+ filtered before delivery or outbound-alert dedupe.
137
+ The earlier dry-run deploy passed and production deploy published internal-api version
138
+ `51a7fdce-ac37-4c55-ba9a-eb5420d38cfd`; Cloudflare deployments readback showed
139
+ that version at 100% on 2026-05-14.
140
+ - The per-user notification fanout retirement was deployed on 2026-05-14:
141
+ parent `vibecodr-api` version
142
+ `2ece601a-7c72-4e53-b496-9478eb9e16ee`, `vibecodr-internal-api` version
143
+ `5d6dc724-c92b-478f-b0fc-aa4e2b966c79`, and `vc-tools-api` version
144
+ `520f70b6-ec3e-4a4d-859c-e77161b00f11` all read back at 100%. Production
145
+ `GET https://tools.vibecodr.space/v1/health` returned
146
+ `operatorAlerts.codes=["E-VIBECODR-VC-TOOLS-SOFT-CAP"]`,
147
+ `operatorAlerts.configured=true`, `operatorAlerts.internalApiBinding=true`,
148
+ and `operatorAlerts.internalAlertToken=true`, proving the then-current
149
+ operator-readiness payload no longer exposed retired user-usage alert codes.
150
+ Current public health/readiness hides operator alert readiness from
151
+ user-facing payloads. A fresh deploy/readback is still needed for the new
152
+ `E-VIBECODR-VC-TOOLS-RETENTION-CLEANUP-FAILED`,
153
+ `E-VIBECODR-VC-TOOLS-EXECUTION-HEALTH-DEGRADED`,
154
+ `E-VIBECODR-VC-TOOLS-HOSTED-WORKER-5XX`, and
155
+ `E-VIBECODR-VC-TOOLS-AUTH-FAILURE-ANOMALY`, and
156
+ `E-VIBECODR-VC-TOOLS-CLOUDFLARE-SPEND-ANOMALY` codes.
157
+ - Parent API Worker secret-name readback for `workers/api/wrangler.toml` listed
158
+ both `CLERK_SECRET_KEY` and `CLI_GRANT_SECRET` on 2026-05-14. That proves
159
+ configuration presence by name, not a real Clerk OAuth/API-key exchange.
160
+ - Parent API Worker deployment/readback closed a stale-route blocker on
161
+ 2026-05-14: `vibecodr-api` version
162
+ `e0307c63-4df5-4b07-b491-0a739ac185fe` is at 100%, and the previously
163
+ 404ing `POST https://api.vibecodr.space/auth/vc-tools/device/start` now
164
+ returned HTTP 200 with the then-current `vibecodr.space/settings/api-keys`
165
+ verification URI. Current CLI approval uses `/settings/vc-tools/approve`.
166
+ - The canonical parent Worker deployment pass later on 2026-05-14 read back all
167
+ deployed versions at 100%: `vibecodr-outbound-alerts`
168
+ `c9f60791-38e4-494f-9990-6deab45e9875`, `vibecodr-clerk-proxy`
169
+ `29d21b3c-89a3-42fd-97fa-3a98661530a8`, `vibecodr-outreach-email`
170
+ `2d165f68-ff57-46a1-b381-b44aa61c7bc6`, `vibecodr-internal-api`
171
+ `e506348f-fdef-4171-9abe-5716d2977083`, `vibecodr-outbound`
172
+ `349746cf-958d-4d67-b478-3b4161adad89`, `vibecodr-dispatch`
173
+ `9da1465c-7c1c-42bd-a1ba-90a409268e5e`, `vibecodr-vibe-edge`
174
+ `8fbbc418-5af2-4a82-82fb-1fd2cb97a9a7`, `vibecodr-pulse-state-gateway`
175
+ `b80edff8-7e5b-450f-b70d-8fd4fcc7b7ba`, and `vibecodr-api`
176
+ `b19e2ddf-8b33-4ea7-948f-3bcb0d7d3121`.
177
+ - A post-deploy device-start smoke returned HTTP 200 with the expected
178
+ verification URI, then remote parent D1 marked smoke session
179
+ `vctda_5cbe90cf-09ee-4543-acd6-89cbd6cf30c7` `expired`.
180
+ - Post-deploy `https://tools.vibecodr.space/v1/health` returned
181
+ `providerMode=live`, `dnsPreflight=true`, and all operator-alert secret and
182
+ binding booleans true. `vc-tools status --json` returned authenticated health
183
+ OK against `https://tools.vibecodr.space`.
184
+ - A fresh read-only hosted smoke on 2026-05-15 returned `/v1/health`
185
+ `ok=true`, `providerMode=live`, version `0.1.3`, no missing bindings,
186
+ `dnsPreflight=true`, `sandboxInternetDefault=off`, account-wide
187
+ hosted/Browser/Sandbox caps `24/30`, and operator-alert config containing only
188
+ `E-VIBECODR-VC-TOOLS-SOFT-CAP` at `70/85/95` thresholds with internal alert
189
+ binding/token present. `vc-tools status --json` used the native credential
190
+ store and returned authenticated live health; `whoami --json` returned plan
191
+ `Creator`; `usage --json`, `tools list --json`, `grants list --json`,
192
+ `retention show --json`, and `inspect --json` also succeeded. `inspect --json`
193
+ still reports `live-hosted-production` as the single hosted-required
194
+ inspection; this smoke refreshes deployed-service evidence, not release
195
+ clearance.
196
+ - Earlier production smoke returned plan `Pro` and workspace `wrk_tools` under the
197
+ then-current static worker config; current local source defaults the contract
198
+ baseline to Creator and should be redeployed/smoked before broad paid rollout.
199
+ - Earlier direct-grant smoke verified the CLI credential path without printing
200
+ the token. `vc-tools status` succeeded through the native credential store on
201
+ 2026-05-14.
202
+ - Real user-scoped API-key login passed on 2026-05-14: a signed-in production
203
+ API Keys page created a temporary scoped `vc-tools` key, `vc-tools login
204
+ --credential-stdin` exchanged it through the parent API as an isolated smoke
205
+ approval, and `status --json` plus `whoami --json` read back authenticated
206
+ production health and plan `Pro`. The temporary local approval was removed
207
+ after proof.
208
+ - Revoked API-key denial passed on 2026-05-14: temporary smoke keys were removed
209
+ from a fresh signed-in API Keys page, and a follow-up `vc-tools login
210
+ --credential-stdin` against a revoked smoke secret exited 3 with
211
+ `E-VIBECODR-0001` / parent Auth API HTTP 401.
212
+ - Plain browser/device `vc-tools login` passed after the production Pages
213
+ release. Real Clerk OAuth token login is also production-proven as of
214
+ 2026-05-15.
215
+ - An isolated `vc-tools login` attempt with profile `smoke-real-device` reached
216
+ the production browser approval loop for code `4YBH-EBFH`; no signed-in
217
+ browser approval occurred during the run, so it remains an interactive
218
+ blocker. The two smoke device sessions were marked `expired` by exact D1 IDs.
219
+ - A later Chrome-backed browser/device attempt reached code `CSYS-TC3J`, but
220
+ the production API Keys page did not render the expected approval panel for
221
+ `vc_tools_code`; parent D1 session
222
+ `vctda_d867c439-e318-4ef4-a689-06adeed384ab` was marked `expired` after the
223
+ blocked attempt. This keeps browser/device login blocked on frontend/Pages
224
+ deployment rather than on the parent API route.
225
+ - The frontend/Pages blocker was closed on 2026-05-14: commit
226
+ `097870a2a` was pushed to `origin/master`, and Cloudflare Pages deployment
227
+ list read back active production deployment
228
+ `bbba8b07-0f83-4bc9-90be-7faf1340373c` for source `097870a`.
229
+ `vc-tools login --no-browser` with profile
230
+ `smoke-real-device-prod-097870a` produced code `E2FW-3R8R`; the signed-in
231
+ production API Keys page rendered `Approve vc-tools login`, approved the
232
+ matching code, and the CLI exited 0 with `authMode=browser_device`,
233
+ `grantProfile=vc_tools`, `grantScopes=["vc-tools:use","vc-tools:*"]`,
234
+ `verified=true`, and plan `Pro`. Follow-up `status --json` and
235
+ `whoami --json` read back authenticated production health, `tokenKind=cli_grant`,
236
+ `providerMode=live`, and plan `Pro`; the temporary local profile was removed.
237
+ - Invalid API-key-shaped and OAuth-token-shaped production exchange requests to
238
+ `/auth/cli/exchange` both failed closed with HTTP 401
239
+ `auth.verificationFailed`.
240
+ - Real Clerk OAuth token login passed on 2026-05-15 through the live Clerk PKCE
241
+ path advertised by `GET https://api.vibecodr.space/agent/vibe`: issuer
242
+ `https://vibecodr.space/__clerk`, client id `g3NwTqUg7nRzHeHo`, redirect
243
+ `http://localhost:3000/oauth_callback`, and scopes `openid profile email`.
244
+ The in-app browser completed sign-in/consent, the local callback listener
245
+ exchanged the authorization code for a Clerk access token, and
246
+ `scripts/smoke-vc-tools-oauth-token.mjs` consumed that token over stdin
247
+ without printing or persisting it. Smoke run
248
+ `codex-oauth-20260515230549-tgn17r` passed `login-oauth-token`,
249
+ `whoami-oauth-token`, and `usage-oauth-token`: `authMode=oauth`,
250
+ `grantProfile=vc_tools`, `grantScopes=["vc-tools:use","vc-tools:*"]`,
251
+ `verified=true`, plan `Pro`, `providerMode=live`,
252
+ `vcToolCreditsIncluded=3000`, `browserSecondsIncluded=180000`,
253
+ `sandboxMinutesIncluded=3000`, `secretPrinted=false`, and
254
+ `configDirRemoved=true`.
255
+ - Direct MCP JSON-RPC POSTs to `https://tools.vibecodr.space/mcp` passed on
256
+ 2026-05-14: `initialize` returned status 200 and protocol version
257
+ `2025-11-25`, `tools/list` returned status 200 with 13 tools and
258
+ `usage.read`, and `tools/call` for `usage.read` returned status 200,
259
+ `isError=false`, alias `limits.read`, and `providerMode=live`.
260
+ - A live `browser.extract_markdown` job completed on 2026-05-14 as
261
+ `job_e1d68ee7-7dd2-4583-9a65-41fd1127e1dc`, producing R2 artifact
262
+ `art_590d9c04-8dda-4b0c-a1e4-b9c6892776bd`; metadata readback and byte pull
263
+ succeeded.
264
+ - Live `browser.render_url`, `browser.screenshot_url`, and `browser.render_pdf`
265
+ jobs completed on 2026-05-14 as
266
+ `job_4182910d-41bd-49cb-972b-84544647ce88`,
267
+ `job_0db62b80-48b5-4824-b35b-ad360a3bb427`, and
268
+ `job_820ced20-4e8b-42d1-97f1-fa14cc3df076`.
269
+ - Queued cancellation passed on 2026-05-14:
270
+ `job_c73d936e-a736-4f19-b6da-104f7887adfe` was accepted as `queued`,
271
+ canceled immediately, finalized as `cancelled`, and D1 readback showed
272
+ `started_at=null`, `reserved_sandbox_seconds=0`, and audit rows
273
+ `jobs.cancel` plus `tools.skipped_cancelled`.
274
+ - `npm run verify` passed after the latest production-proof updates: `check`,
275
+ `test` (88 passing tests), `build`, `verify:artifact`, `verify:goal`, and
276
+ default-channel `verify:release` all completed. Live hosted production
277
+ release remains separately gated until the remaining real-user/provider proof
278
+ blockers close.
279
+ - Workflow migration smoke passed on 2026-05-17 after deploying
280
+ `vc-tools-api` version `aeeaab85-93ab-4219-acf7-fffbe2be834e` at 100%.
281
+ A short-lived synthetic Creator grant submitted `browser.agent_task` against
282
+ `https://example.com`; the hosted API accepted
283
+ `job_0e8b0cc2-9a3c-4791-8e77-ce0da1191a3c` with `providerMode=live`,
284
+ `capability=browser.agent_task`, `queue.fairDelaySeconds=0`, and no queued
285
+ actor/global backlog. The job completed through the Workflow-owned Browser
286
+ Session lane and produced R2 artifact
287
+ `art_466de507-1432-41eb-9253-c9f79aac8148` as
288
+ `browser-agent-task-json`, 834 bytes,
289
+ `application/json; charset=utf-8`, expiring on 2026-05-24. CLI proof
290
+ metadata readback and byte download both succeeded; post-run usage for the
291
+ smoke actor showed one browser job and eight browser seconds. Remote D1
292
+ readback showed `queue_delay_seconds=0`, `reserved_credits=1`,
293
+ `reserved_browser_seconds=120`, `status=completed`, and audit events
294
+ `tools.accept_requested`, `tools.accepted`, `tools.workflow_started`,
295
+ `tools.browser_agent.completed`, and `tools.completed` for the same job.
296
+ The smoke wrapper reported `secretPrinted=false` and removed its temporary
297
+ config/workspace directory.
298
+ - Root `pnpm run check` passed after regenerating the system map and fixing the
299
+ docs contract guardrail command wording, so the parent repo gate is fresh as
300
+ of the 2026-05-14 Worker deployment/readback pass.
301
+ - A short live Creator `browser.agent_task` job has been smoked through the
302
+ `BROWSER` binding with closure metadata and artifact readback. New real
303
+ paid-user Creator/Pro Browser Session breadth and Creator 20-minute / Pro
304
+ 1-hour cap validation still need production proof.
305
+ - A live `browser.crawl_site` job completed on 2026-05-14 with `--max-pages 1
306
+ --max-depth 1` as `job_bf15485f-d0be-4bd8-820d-e89cdaa3509d`, producing R2
307
+ artifact `art_171deebb-8e41-43e4-add7-01fc80c10565`. An earlier
308
+ `--max-depth 0` attempt was accepted but failed with Browser Run HTTP 400, so
309
+ keep the production-safe crawl smoke at depth 1 unless provider docs prove a
310
+ different minimum.
311
+ - Scheduled QA was deployed live on 2026-05-14 after applying
312
+ `0006_scheduled_qa.sql` to remote `vc-tools-db`. `scheduled-qa create
313
+ --run-now` now immediately enqueues the first Browser Quick Action instead of
314
+ merely waiting for the next six-hour cron tick. Live config
315
+ `sqa_5309a4d4-b2b2-4063-aacc-82d5bacbd972` created job
316
+ `job_5695beee-edba-4caa-8beb-15169e06a78a`, which completed as
317
+ `browser.extract_markdown` and produced artifact
318
+ `art_9ae9d043-9bb1-46a5-8b4b-b79666fa74eb`. The smoke config was paused,
319
+ listed disabled, deleted, and the disposable artifact was deleted.
320
+ - Scheduled QA monthly cap denial was production-proven on 2026-05-14. The
321
+ static Creator smoke actor had zero May queued Scheduled QA rows before the
322
+ test. A marked seed config `sqa_monthcap_static_20260514_2130` plus 300 marked
323
+ queued rows filled the Creator `maxRunsPerMonth=300` cap. Live
324
+ `scheduled-qa create --run-now` for config
325
+ `sqa_dd9dd9f9-4903-442b-9872-b2752c295d5c` returned `providerMode=live`,
326
+ `lastJobId=null`, and
327
+ `lastError.code=quota.scheduled_qa_monthly_runs_exceeded`; D1 readback showed
328
+ one `status=skipped` run with the same error code. The cap-test config was
329
+ deleted through the CLI, the seed config was deleted from D1, and final
330
+ readback returned `leftover_configs=0`, `leftover_runs=0`, and
331
+ `queued_count_after=0`.
332
+ - A live Creator `sandbox.run_command` job completed on 2026-05-14 as
333
+ `job_a8c9827a-a6f4-4c4e-abbf-9e38557f9cb5`, producing R2 artifact
334
+ `art_50e5f37e-f28d-4db8-afe6-27c1f4b3f99f` through the deployed
335
+ `standard-1` lane. Real paid-user Pro sandbox smoke remains open; the
336
+ synthetic Pro grant smoke below only proves hosted lane routing and execution.
337
+ - A live `sandbox.run_tests` job completed on 2026-05-14 as
338
+ `job_bdf491df-ad11-4e15-a07b-c236a8aa691c`, producing R2 artifact
339
+ `art_614ffaf3-d64e-449a-bb02-b271400ea853` through the deployed
340
+ `standard-1` lane.
341
+ - A synthetic short-lived Pro CLI grant for actor `smoke_pro_1778761722370`
342
+ read back plan `Pro`, `sandbox.containerInstanceType=standard-2`, and
343
+ `maxSandboxTaskSeconds=1800`, then completed `sandbox.run_command` as
344
+ `job_928afe9c-1760-4f6b-9d87-380524425f10`, producing R2 artifact
345
+ `art_8abce620-b8c1-40cd-bf51-27cf74828aed`. Post-run usage for that actor
346
+ reported `vcToolCredits=1`, `dailyVcToolCredits=1`, `sandboxJobs=1`, and
347
+ `sandboxMinutes=0.04`.
348
+ - A synthetic short-lived Free CLI grant for actor `smoke_free_1778761722370`
349
+ read back plan `Free`, `sandbox.containerInstanceType=none`, and
350
+ `maxSandboxTaskSeconds=0`; `sandbox.run_command` returned HTTP 403
351
+ `quota.plan_denied`, with usage and jobs unchanged at zero.
352
+ - The synthetic Free actor could not read or download the synthetic Pro actor's
353
+ artifact `art_8abce620-b8c1-40cd-bf51-27cf74828aed`; metadata returned
354
+ `not_found` and download returned HTTP 404.
355
+ - Production D1 `vc-tools-db` `audit_events` readback returned
356
+ `tools.accept_requested`, `tools.accepted`, and `tools.completed` rows for
357
+ `job_bdf491df-ad11-4e15-a07b-c236a8aa691c` (`sandbox.run_tests`) and
358
+ `job_928afe9c-1760-4f6b-9d87-380524425f10` (`sandbox.run_command`, synthetic
359
+ Pro actor).
360
+ - `/v1/tools/test` for `browser.render_url` with `https://127.0.0.1/` returned
361
+ HTTP 400 `input.blocked_url`; MCP `tools/call` for the same input returned
362
+ HTTP 200 with JSON-RPC error `-32602` and hosted code `input.blocked_url`.
363
+ Immediate before/after readback showed usage unchanged
364
+ (`vcToolCredits=14`, `dailyVcToolCredits=12`, `browserJobs=11`,
365
+ `browserSeconds=37`, `sandboxJobs=3`, `sandboxMinutes=0.21`) and the jobs
366
+ list unchanged at 14 rows.
367
+ - A broader live unsafe-target matrix through `/v1/tools/test` rejected
368
+ `https://localhost/`, `https://127.0.0.1/`, `https://10.0.0.1/`,
369
+ `https://192.168.1.10/`, `https://[::1]/`, `https://[fe80::1]/`, and
370
+ `https://service.internal/` as `input.blocked_url`, and rejected
371
+ `https://user:pass@example.com/` plus `http://example.com/` as
372
+ `input.invalid_url`; usage and jobs were unchanged before/after.
373
+ - DNS preflight denial happened before cost-bearing dispatch: Cloudflare DNS resolved
374
+ `127.0.0.1.nip.io` to `127.0.0.1`, and the hosted API rejected
375
+ `https://127.0.0.1.nip.io/` as `input.blocked_url`; an unresolvable
376
+ `example.com` subdomain returned `input.unresolvable_url`. Both synthetic
377
+ actors kept usage and jobs at zero.
378
+ - Redirect preflight denial happened before cost-bearing dispatch on the redeployed
379
+ Worker: synthetic Creator actor `smoke_redirect_1778762601247` submitted
380
+ `https://httpbin.org/redirect-to?url=https%3A%2F%2F127.0.0.1%2F`, which
381
+ returned HTTP 400 `input.blocked_url` with usage and jobs still zero.
382
+ - `/v1/usage` after the `sandbox.run_tests` smoke reported `vcToolCredits=15`,
383
+ `dailyVcToolCredits=13`, `browserJobs=11`, `sandboxJobs=4`,
384
+ `browserMinutes=0.62`, and `sandboxMinutes=0.25`.
385
+ - `/v1/artifacts` listed 12 generated artifacts after the `sandbox.run_tests`
386
+ smoke, with newest artifact
387
+ `art_614ffaf3-d64e-449a-bb02-b271400ea853`.
388
+ - `browser.agent_task` was accepted as
389
+ `job_408d648f-5985-43df-9ce1-2a48a2a7e213` on 2026-05-14 but failed with
390
+ `provider.execution_failed` / `No browser available`.
391
+ - Browser Session capacity was retried on 2026-05-14: live
392
+ `browser.agent_task` job `job_b6aa6cde-b46d-4e5f-b402-85a34c3b431f` was
393
+ accepted, started, then failed with `provider.execution_failed` and
394
+ `Unable to create new browser: code: 503: message: No browser available`.
395
+ - A later short Creator Browser Session retry succeeded on 2026-05-14:
396
+ static Creator actor `static_a7baba1d3429c27b` submitted
397
+ `browser.agent_task` against `https://example.com` with
398
+ `--timeout-ms 120000`; the hosted API accepted
399
+ `job_9c9fe3fb-a9dc-46cd-b0a7-6370018636bb` with `quotaChecked=true`,
400
+ `auditLogged=true`, and no fair delay. `jobs status` read back
401
+ `status=completed`, plan `Creator`, artifact
402
+ `art_acd11f82-58af-475e-a83a-d102332c64c4`, `closureReason=completed`,
403
+ `idleTimeoutMs=600000`, `maxDurationMs=120000`, and `durationMs=6238`.
404
+ Artifact metadata readback returned kind `browser-agent-task-json`,
405
+ 767 bytes, and a one-week expiration. Usage readback showed
406
+ `allowBrowserSessions=true`, `maxBrowserSessionSeconds=1200`,
407
+ `maxConcurrentBrowserSessionsPerUser=1`, `browserSeconds=43`, and
408
+ `concurrentRuns=0`. This clears the stale provider-capacity blocker for a
409
+ short Creator task, but not real paid-user Free/Creator/Pro breadth,
410
+ Pro Browser Session, or long-duration boundary proof.
411
+ - A fresh short Creator Browser Session retry succeeded on 2026-05-15 after the
412
+ temporary-completion handoff. Static Creator actor
413
+ `static_a7baba1d3429c27b` submitted `browser.agent_task` against
414
+ `https://example.com` with `--timeout-ms 60000` and
415
+ `--idle-timeout-ms 30000`; hosted accepted
416
+ `job_1860e308-7702-4d03-9b00-a2657d8dac51` with `quotaChecked=true`,
417
+ `auditLogged=true`, and no queue backlog. `jobs status` read back
418
+ `status=completed`, plan `Creator`, artifact
419
+ `art_0b580e26-7b76-4edf-8811-1d2c5b68a61b`,
420
+ `closureReason=completed`, `idleTimeoutMs=30000`, `maxDurationMs=60000`,
421
+ and `durationMs=7675`.
422
+ - A fresh Creator Sandbox command smoke succeeded on 2026-05-15. The same
423
+ static Creator actor submitted `sandbox.run_command` for `node --version`;
424
+ hosted accepted `job_395a5f17-a3ad-43c0-b694-c87fc303bc7d` with
425
+ `quotaChecked=true` and `auditLogged=true`, then completed with artifact
426
+ `art_9438a0e0-ad65-4893-97c7-bcb0fd7b684c` through the deployed
427
+ `standard-1` lane. Usage readback moved from 22 to 24 monthly VC Tool
428
+ credits, from 1 to 3 daily credits, from 16 to 17 browser jobs, from 6 to 7
429
+ sandbox jobs, from 63 to 70 browser seconds, and from 0.25 to 0.29 sandbox
430
+ minutes, with zero active concurrency afterward.
431
+ - The 2026-05-15 artifact readback exposed a hosted-list bug: the CLI sent
432
+ `--limit`, but the deployed Worker ignored the query and returned up to 50
433
+ artifacts/jobs. The fix now validates `--limit` as `1..100` in the CLI,
434
+ applies the same bound in the hosted Worker, and binds `LIMIT ?` for both
435
+ `/v1/jobs` and `/v1/artifacts`. Verification passed with
436
+ `node --import tsx --test test/cli.behavior.test.ts`,
437
+ `node --import tsx --test test/hosted-worker.test.ts`, `npm run check`,
438
+ `npm test`, `npm run verify:goal`, `npm run verify:release`,
439
+ `git diff --check`, `npx wrangler deploy --dry-run --outdir
440
+ tmp\wrangler-dry-run` through the WinCred wrapper, and full `npm run verify`.
441
+ Production deploy published `vc-tools-api` version
442
+ `cde73e4b-16f3-4faa-a122-63171a3ea3b4`; `wrangler deployments list` read it
443
+ back at 100%. Live readback then returned exactly two artifacts for
444
+ `artifacts list --limit 2`, exactly one artifact for
445
+ `artifacts list --limit 1`, and exactly two completed jobs for
446
+ `jobs list --limit 2`.
447
+ - Historical operator alert delivery smoke passed on 2026-05-14 for the retired
448
+ user-usage alert lane: synthetic Creator actor
449
+ `smoke_alert_creator_1778763846` completed live `browser.extract_markdown`
450
+ job `job_3bacc8b9-022b-41ba-a655-9721b8c34104`, moving monthly credits from
451
+ 419/600 to 420/600 and crossing the 70% threshold. That proof row remains in
452
+ D1 history, but the current product decision supersedes it: per-user
453
+ quota/usage pressure is still metered and COGS-visible, but no longer enters
454
+ operator notification fanout. Current production release proof must use an
455
+ account-wide hosted, Browser Run, or Sandbox capacity soft-cap crossing.
456
+ - Monthly and daily quota exhaustion smokes passed on 2026-05-14. Synthetic
457
+ Creator actor `smoke_quota_month_1778764445` was seeded at 600/600 monthly
458
+ credits and a live `browser.extract_markdown` request returned HTTP 429
459
+ `quota.exceeded`. Synthetic Creator actor `smoke_quota_day_1778764445` was
460
+ seeded at 90/90 daily credits and the same request shape returned HTTP 429
461
+ `quota.daily_exceeded`. `vc-tools-db` readback showed `accepted_jobs=0` for
462
+ both actors, then cleanup removed 690 synthetic seed rows.
463
+ - Private-AAAA unsafe URL smoke passed on 2026-05-14. DNS readback showed
464
+ `fd00--1.sslip.io` resolves to `fd00::1`; synthetic Creator actor
465
+ `smoke_private_aaaa_1778764692` submitted live `browser.extract_markdown`
466
+ against `https://fd00--1.sslip.io/`; the hosted API returned HTTP 400
467
+ `input.blocked_url`, usage stayed at zero, and `vc-tools-db` readback showed
468
+ zero jobs for that actor.
469
+
470
+ Commercial packaging is locally wired to the existing Vibecodr Creator and Pro
471
+ subscription model. The live Stripe production path was operator-validated on
472
+ 2026-05-15, and real Clerk OAuth is now production-proven. The remaining
473
+ pre-rollout production work is the paid-account provider breadth smoke before
474
+ charging customers for vc-tools quota: Pro Browser Session, Pro Sandbox,
475
+ natural scheduled cron-tick readback, account-wide operator alert fanout proof,
476
+ and any not-yet-refreshed internal COGS readback. Browser Run owned-surface
477
+ allowlisting is pinned until Cloudflare enablement confirms the bot-detection
478
+ signals and should not block temporary completion.
479
+ `CLI_GRANT_SECRET`, `VC_TOOLS_CLI_GRANT_SECRET`,
480
+ `VC_TOOLS_BROWSER_RUN_ACCOUNT_ID`, and `VC_TOOLS_BROWSER_RUN_API_TOKEN` were
481
+ applied and read back by secret name on 2026-05-14; synthetic CLI-grant smokes
482
+ prove the deployed Worker can use them. Parent API auth routes are now deployed
483
+ invalid exchange requests fail closed, and real user-scoped Clerk API-key
484
+ exchange plus revoked-key denial are production-proven. Successful real
485
+ browser/device login is also production-proven after the Pages deployment.
486
+ Successful real Clerk OAuth is production-proven by
487
+ `codex-oauth-20260515230549-tgn17r`.
488
+
489
+ Asymmetric grant hardening is locally implemented after this live-smoke batch:
490
+ the parent API can sign ES256 vc-tools grants from `CLI_GRANT_PRIVATE_JWK`, the
491
+ hosted Worker verifies ES256 grants from `VC_TOOLS_CLI_GRANT_PUBLIC_JWKS`, grant
492
+ claims now include `kid`, `grant_profile`, `nbf`, and `jti`, and revoked `jti`
493
+ denial is locally enforced. Local proof on 2026-05-14:
494
+ `pnpm exec vitest run workers/api/src/auth.cliGrant.test.ts
495
+ workers/api/src/handlers/cliAuth.test.ts
496
+ workers/api/src/handlers/vcToolsDeviceAuth.test.ts` passed 3 files / 40 tests
497
+ in the parent repo, and `node --import tsx --test test/hosted-worker.test.ts`
498
+ passed 40 hosted Worker tests in this repo. This is not live clearance until
499
+ production ES256 key material is uploaded as Worker secrets, Workers are
500
+ redeployed/read back, and a live ES256 exchange plus revoked-`jti` denial smoke
501
+ is captured.
502
+
503
+ ## 2026-05-17 Product-Surface Finetune
504
+
505
+ - `vc-tools-finetune.md` now captures the combined founder/agent critique for
506
+ the v1 surface: split human/agent/operator contracts, remove default
507
+ operator/roadmap metadata, make proof saving automatic, make `browser ask`
508
+ honest as a snapshot lane, improve safety denials, and add a first-success
509
+ `try` command.
510
+ - The default hosted/user surfaces now filter internal and operator metadata:
511
+ `start`, `usage`, `plans`, `health`, and `mcp/connection` no longer expose
512
+ launch classifications, overage meters, provider mode, sandbox internet
513
+ defaults, auth scopes/token kind, operator alerts, COGS, webhook/ntfy, or
514
+ account-pressure internals unless details/operator mode is explicitly used
515
+ and the hosted actor is authorized.
516
+ - Browser/computer aliases now submit hosted work, poll until terminal by
517
+ default, summarize the outcome, and save proof with `--out` without making
518
+ the caller copy `job_...` or `art_...` IDs. `work follow` now actually polls
519
+ until terminal and can save terminal proof. `vc-tools try` verifies auth,
520
+ hosted API, public Browser work, hosted computer work, proof saving, and
521
+ usage readback. `browser snapshot` is the honest name for the
522
+ `browser.agent_task` snapshot lane; `browser ask` remains a compatibility
523
+ alias with explicit copy that it is not a separate chat answerer.
524
+ - Local verification passed on 2026-05-17 with `npm run verify`, including CLI
525
+ and Worker type checks, full tests, build, package artifact verification,
526
+ goal coverage, and release-readiness gate. Focused checks also passed for
527
+ `test/cli.behavior.test.ts`, `test/hosted-worker.test.ts`, and
528
+ `test/limits.test.ts`.
529
+ - No D1 migrations changed in this product-surface pass. Dry-run deploy with
530
+ `npx wrangler deploy --dry-run --outdir tmp\wrangler-dry-run` succeeded. The
531
+ final production deploy published `vc-tools-api` version
532
+ `ada2ce72-7493-4b5e-98c7-e788729c30bc` to `tools.vibecodr.space`;
533
+ `wrangler deployments list` read it back at 100%.
534
+ - Post-deploy smoke with the built CLI passed: `plans --json` and
535
+ `usage --json`, and `agent connect --client codex --json` were checked for
536
+ forbidden default keys, `agent connect` exposed `browser.snapshot` rather
537
+ than `browser.ask`, dashboard section order read back
538
+ `overview,jobs,artifacts,usage,agents`,
539
+ `vc-tools try --json --out tmp/live-vc-tools-proof-final2` returned
540
+ `ready=true` while saving `browser-read.md` and `computer-run.json`, and
541
+ `computer run ... --network off --out tmp/live-vc-tools-proof-final2`
542
+ completed while saving `offline-computer.json`.