b2c-app-builder 0.221.39

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 (2778) hide show
  1. package/ACKNOWLEDGMENTS.md +168 -0
  2. package/LICENSE +21 -0
  3. package/README.md +252 -0
  4. package/SKILL.md +59 -0
  5. package/THIRD_PARTY_NOTICES.md +1091 -0
  6. package/adapters/app-review/archive.ts +55 -0
  7. package/adapters/app-review/asc-boundary.ts +85 -0
  8. package/adapters/app-review/asc-provider.ts +499 -0
  9. package/adapters/app-review/auth.ts +75 -0
  10. package/adapters/app-review/capability.ts +240 -0
  11. package/adapters/app-review/classify.ts +116 -0
  12. package/adapters/app-review/consume.ts +108 -0
  13. package/adapters/app-review/envelope.ts +119 -0
  14. package/adapters/app-review/events.ts +451 -0
  15. package/adapters/app-review/hmac.ts +106 -0
  16. package/adapters/app-review/implement.ts +81 -0
  17. package/adapters/app-review/index.ts +172 -0
  18. package/adapters/app-review/ingest.ts +108 -0
  19. package/adapters/app-review/mandate.ts +102 -0
  20. package/adapters/app-review/normalize.ts +281 -0
  21. package/adapters/app-review/packet.ts +365 -0
  22. package/adapters/app-review/persist.ts +93 -0
  23. package/adapters/app-review/plan.ts +321 -0
  24. package/adapters/app-review/plist.ts +219 -0
  25. package/adapters/app-review/poll.ts +310 -0
  26. package/adapters/app-review/projection.ts +149 -0
  27. package/adapters/app-review/queue.ts +138 -0
  28. package/adapters/app-review/receiver.ts +111 -0
  29. package/adapters/app-review/registration.ts +95 -0
  30. package/adapters/app-review/remediate.ts +218 -0
  31. package/adapters/app-review/render.ts +180 -0
  32. package/adapters/app-review/resubmit.ts +357 -0
  33. package/adapters/app-review/types.ts +540 -0
  34. package/adapters/app-review/uncertain-execution.ts +205 -0
  35. package/adapters/app-review/verification.ts +42 -0
  36. package/adapters/appkittie-category-revenue.ts +106 -0
  37. package/adapters/claude.ts +69 -0
  38. package/adapters/codex.ts +65 -0
  39. package/adapters/cursor.ts +66 -0
  40. package/adapters/device-proof.ts +814 -0
  41. package/adapters/greenfield/boundary.ts +200 -0
  42. package/adapters/greenfield/fail-safe.ts +204 -0
  43. package/adapters/greenfield/index.ts +33 -0
  44. package/adapters/inline.ts +46 -0
  45. package/adapters/install-control-permissions.ts +331 -0
  46. package/adapters/install-entrypoints.ts +422 -0
  47. package/adapters/install-schedule.ts +700 -0
  48. package/adapters/ios-app-evidence.ts +136 -0
  49. package/adapters/mobile-operation-host.ts +209 -0
  50. package/adapters/mobile-operation.ts +131 -0
  51. package/adapters/operating.ts +8 -0
  52. package/adapters/probe.ts +48 -0
  53. package/adapters/profile.ts +272 -0
  54. package/adapters/providers/capability-delta.ts +84 -0
  55. package/adapters/providers/contract.ts +89 -0
  56. package/adapters/providers/evaluate.ts +125 -0
  57. package/adapters/providers/expo/argv.ts +228 -0
  58. package/adapters/providers/expo/decode.ts +702 -0
  59. package/adapters/providers/expo/discovery.ts +145 -0
  60. package/adapters/providers/expo/doctor.ts +217 -0
  61. package/adapters/providers/expo/effects.ts +185 -0
  62. package/adapters/providers/expo/execute.ts +389 -0
  63. package/adapters/providers/expo/expo-device-bind.ts +176 -0
  64. package/adapters/providers/expo/expo-mcp-route.ts +394 -0
  65. package/adapters/providers/expo/hosting-prepare.ts +195 -0
  66. package/adapters/providers/expo/identity.ts +117 -0
  67. package/adapters/providers/expo/index.ts +176 -0
  68. package/adapters/providers/expo/jobs.ts +490 -0
  69. package/adapters/providers/expo/preflight.ts +319 -0
  70. package/adapters/providers/expo/process.ts +156 -0
  71. package/adapters/providers/expo/project-config.ts +184 -0
  72. package/adapters/providers/expo/sanitize.ts +51 -0
  73. package/adapters/providers/expo/signing-readiness.ts +157 -0
  74. package/adapters/providers/expo/store-handoff.ts +74 -0
  75. package/adapters/providers/expo/update-identity.ts +121 -0
  76. package/adapters/providers/expo/update-policy.ts +130 -0
  77. package/adapters/providers/expo/update-prepare.ts +176 -0
  78. package/adapters/providers/expo/update-recovery.ts +152 -0
  79. package/adapters/providers/expo/update-rollout.ts +114 -0
  80. package/adapters/providers/expo/update-signing.ts +100 -0
  81. package/adapters/providers/expo/web-api-contract.ts +185 -0
  82. package/adapters/providers/growth-agent/boundary.ts +178 -0
  83. package/adapters/providers/growth-agent/fail-safe.ts +306 -0
  84. package/adapters/providers/growth-agent/index.ts +36 -0
  85. package/adapters/providers/layers/effects.ts +94 -0
  86. package/adapters/providers/layers/index.ts +91 -0
  87. package/adapters/providers/layers/jobs.ts +269 -0
  88. package/adapters/providers/layers/onboarding.ts +144 -0
  89. package/adapters/providers/layers/route.ts +308 -0
  90. package/adapters/providers/layers/transport.ts +251 -0
  91. package/adapters/providers/load.ts +293 -0
  92. package/adapters/providers/mobile-ops/boundary.ts +137 -0
  93. package/adapters/providers/mobile-ops/fail-safe.ts +273 -0
  94. package/adapters/providers/mobile-ops/index.ts +27 -0
  95. package/adapters/providers/monetization-validation.ts +80 -0
  96. package/adapters/providers/revenuecat/cli-catalog-observe.ts +254 -0
  97. package/adapters/providers/revenuecat/cli-catalog.ts +1146 -0
  98. package/adapters/providers/revenuecat/cli-command-schema.ts +369 -0
  99. package/adapters/providers/revenuecat/cli-decode.ts +908 -0
  100. package/adapters/providers/revenuecat/cli-discovery.ts +248 -0
  101. package/adapters/providers/revenuecat/cli-doctor.ts +279 -0
  102. package/adapters/providers/revenuecat/cli-execute.ts +456 -0
  103. package/adapters/providers/revenuecat/cli-ledger.ts +488 -0
  104. package/adapters/providers/revenuecat/cli-operations.ts +927 -0
  105. package/adapters/providers/revenuecat/cli-preflight.ts +245 -0
  106. package/adapters/providers/revenuecat/cli-process.ts +195 -0
  107. package/adapters/providers/revenuecat/cli-proof.ts +159 -0
  108. package/adapters/providers/revenuecat/cli-reconcile-plan.ts +1144 -0
  109. package/adapters/providers/revenuecat/provisioning.ts +54 -0
  110. package/adapters/providers/revenuecat/revenue-validation.ts +1224 -0
  111. package/adapters/providers/runtime-pin.ts +112 -0
  112. package/adapters/providers/superwall/boundary.ts +107 -0
  113. package/adapters/providers/superwall/fail-safe.ts +231 -0
  114. package/adapters/providers/superwall/measurement.ts +62 -0
  115. package/adapters/providers/typesafe/assess.ts +264 -0
  116. package/adapters/providers/typesafe/binding.ts +47 -0
  117. package/adapters/providers/typesafe/connection.ts +89 -0
  118. package/adapters/providers/typesafe/decode.ts +348 -0
  119. package/adapters/providers/typesafe/effects.ts +101 -0
  120. package/adapters/providers/typesafe/encode.ts +97 -0
  121. package/adapters/providers/typesafe/index.ts +71 -0
  122. package/adapters/providers/typesafe/support.ts +109 -0
  123. package/adapters/providers/typesafe/transport.ts +395 -0
  124. package/adapters/provisioning/capability-gaps.ts +110 -0
  125. package/adapters/provisioning/capability-readiness.ts +60 -0
  126. package/adapters/provisioning/cli.ts +274 -0
  127. package/adapters/provisioning/requirements.ts +525 -0
  128. package/adapters/provisioning/resolve.ts +356 -0
  129. package/adapters/registry.ts +225 -0
  130. package/agents/skills/b2c-app-builder/references/business-lifecycle.md +75 -0
  131. package/agents/skills/b2c-app-builder/references/composition.md +7 -0
  132. package/agents/skills/b2c-app-builder/references/mobile-operation.md +5 -0
  133. package/agents/skills/b2c-app-builder/references/setup.md +18 -0
  134. package/agents/skills/b2c-define-product/SKILL.md +49 -0
  135. package/agents/skills/b2c-define-product/references/task.md +42 -0
  136. package/agents/skills/b2c-design-onboarding/SKILL.md +51 -0
  137. package/agents/skills/b2c-design-onboarding/references/stages.md +31 -0
  138. package/agents/skills/b2c-design-onboarding/references/task.md +31 -0
  139. package/agents/skills/b2c-design-onboarding/references/workflow.experience.onboarding-conversion.md +43 -0
  140. package/agents/skills/b2c-design-onboarding/references/workflow.experience.onboarding-system.onb-01-current-state-trace.md +35 -0
  141. package/agents/skills/b2c-design-onboarding/references/workflow.experience.onboarding-system.onb-02-evidence-plan.md +35 -0
  142. package/agents/skills/b2c-design-onboarding/references/workflow.experience.onboarding-system.onb-03-current-guidance.md +35 -0
  143. package/agents/skills/b2c-design-onboarding/references/workflow.experience.onboarding-system.onb-04-competitor-reviews.md +35 -0
  144. package/agents/skills/b2c-design-onboarding/references/workflow.experience.onboarding-system.onb-05-onbo-hub-atlas.md +35 -0
  145. package/agents/skills/b2c-design-onboarding/references/workflow.experience.onboarding-system.onb-06-internal-guidance-audit.md +35 -0
  146. package/agents/skills/b2c-design-onboarding/references/workflow.experience.onboarding-system.onb-07-provider-policy-landscape.md +37 -0
  147. package/agents/skills/b2c-design-onboarding/references/workflow.experience.onboarding-system.onb-08-motion-research.md +35 -0
  148. package/agents/skills/b2c-design-onboarding/references/workflow.experience.onboarding-system.onb-09-evidence-join.md +37 -0
  149. package/agents/skills/b2c-design-onboarding/references/workflow.experience.onboarding-system.onb-10-first-value-activation.md +35 -0
  150. package/agents/skills/b2c-design-onboarding/references/workflow.experience.onboarding-system.onb-11-effort-question-audit.md +35 -0
  151. package/agents/skills/b2c-design-onboarding/references/workflow.experience.onboarding-system.onb-12-state-identity-contract.md +38 -0
  152. package/agents/skills/b2c-design-onboarding/references/workflow.experience.onboarding-system.onb-13-analytics-experiments.md +38 -0
  153. package/agents/skills/b2c-design-onboarding/references/workflow.experience.onboarding-system.onb-14-trust-lifecycle-policy.md +35 -0
  154. package/agents/skills/b2c-design-onboarding/references/workflow.experience.onboarding-system.onb-15-architecture-decision.md +35 -0
  155. package/agents/skills/b2c-design-onboarding/references/workflow.experience.onboarding-system.onb-16-journey-graph.md +37 -0
  156. package/agents/skills/b2c-design-onboarding/references/workflow.experience.onboarding-system.onb-17-screen-control-paywall-contract.md +40 -0
  157. package/agents/skills/b2c-design-onboarding/references/workflow.experience.onboarding-system.onb-18-visual-design-prototype.md +40 -0
  158. package/agents/skills/b2c-design-onboarding/references/workflow.experience.onboarding-system.onb-19-implementation-cutover-contract.md +37 -0
  159. package/agents/skills/b2c-design-onboarding/references/workflow.experience.onboarding-system.onb-20-adversarial-qa.md +38 -0
  160. package/agents/skills/b2c-design-onboarding/references/workflow.experience.onboarding-system.onb-21-compound-engineering-plan.md +35 -0
  161. package/agents/skills/b2c-plan-implementation/SKILL.md +66 -0
  162. package/agents/skills/b2c-plan-implementation/references/task.md +41 -0
  163. package/agents/skills/b2c-plan-launch/SKILL.md +50 -0
  164. package/agents/skills/b2c-plan-launch/references/task.md +37 -0
  165. package/agents/skills/b2c-research-opportunity/SKILL.md +63 -0
  166. package/agents/skills/b2c-research-opportunity/references/task.md +42 -0
  167. package/agents/skills/b2c-review-business-performance/SKILL.md +50 -0
  168. package/agents/skills/b2c-review-business-performance/references/task.md +37 -0
  169. package/agents/skills/b2c-review-experience/SKILL.md +48 -0
  170. package/agents/skills/b2c-review-experience/references/task.md +36 -0
  171. package/agents/skills/b2c-review-monetization/SKILL.md +50 -0
  172. package/agents/skills/b2c-review-monetization/references/task.md +40 -0
  173. package/agents/skills/b2c-verify-release-readiness/SKILL.md +47 -0
  174. package/agents/skills/b2c-verify-release-readiness/references/task.md +36 -0
  175. package/catalog/agent-graph/load.ts +110 -0
  176. package/catalog/agent-graph/types.ts +53 -0
  177. package/catalog/agent-graph/validate.ts +121 -0
  178. package/catalog/agent-graph/work.schema.json +65 -0
  179. package/catalog/agent-graph/work.yaml +173 -0
  180. package/catalog/areas.ts +95 -0
  181. package/catalog/artifacts.ts +40 -0
  182. package/catalog/authoring.ts +46 -0
  183. package/catalog/bridge.ts +220 -0
  184. package/catalog/business-primitives.ts +82 -0
  185. package/catalog/business-units.ts +18 -0
  186. package/catalog/capabilities/paid-generative-ai/capability.yaml +27 -0
  187. package/catalog/capabilities/paid-generative-ai/controls.md +37 -0
  188. package/catalog/capabilities/types.ts +25 -0
  189. package/catalog/capabilities/web-presence/capability.yaml +37 -0
  190. package/catalog/capabilities/web-presence/shared.md +5 -0
  191. package/catalog/context-packs.ts +78 -0
  192. package/catalog/domain-authority.ts +38 -0
  193. package/catalog/domains.ts +178 -0
  194. package/catalog/firstparty-declarations.ts +652 -0
  195. package/catalog/firstparty-recipes.ts +283 -0
  196. package/catalog/gates.ts +99 -0
  197. package/catalog/generated/catalog.json +18892 -0
  198. package/catalog/generated/contracts.md +1565 -0
  199. package/catalog/generated/firstparty/catalog/render-routing.ts +410 -0
  200. package/catalog/generated/firstparty/catalog/upstreams/notices/amir-brand-system.txt +395 -0
  201. package/catalog/generated/firstparty/catalog/upstreams/notices/amir-cinematic-scroll.txt +21 -0
  202. package/catalog/generated/firstparty/catalog/upstreams/notices/appllama-skills.txt +21 -0
  203. package/catalog/generated/firstparty/catalog/upstreams/notices/eronred-aso-skills.txt +21 -0
  204. package/catalog/generated/firstparty/catalog/upstreams/notices/evanbacon-serve-sim.txt +202 -0
  205. package/catalog/generated/firstparty/catalog/upstreams/notices/parth-app-store-screenshots.txt +21 -0
  206. package/catalog/generated/firstparty/catalog/upstreams/notices/posthog-wizard.txt +21 -0
  207. package/catalog/generated/firstparty/catalog/upstreams/notices/revenuecat-ai-toolkit.txt +21 -0
  208. package/catalog/generated/firstparty/catalog/upstreams/notices/revenuecat-cli.txt +21 -0
  209. package/catalog/generated/firstparty/catalog/upstreams/notices/rork-app-store-connect-cli-skills.txt +21 -0
  210. package/catalog/generated/firstparty/catalog/upstreams/notices/rork-app-store-connect-cli.txt +21 -0
  211. package/catalog/generated/firstparty/catalog/upstreams/notices/sentry-snapshotpreviews.txt +22 -0
  212. package/catalog/generated/firstparty/catalog/upstreams/notices/sentry-xcodebuildmcp.txt +21 -0
  213. package/catalog/generated/firstparty/catalog-pack.yaml +12960 -0
  214. package/catalog/generated/firstparty/checks/validation/business/data/check-analytics-catalog.ts +166 -0
  215. package/catalog/generated/firstparty/checks/validation/business/data/check-attribution-contract.ts +731 -0
  216. package/catalog/generated/firstparty/checks/validation/business/design/check-audience-identity.ts +260 -0
  217. package/catalog/generated/firstparty/checks/validation/business/design/check-browser-runtime-proof.ts +269 -0
  218. package/catalog/generated/firstparty/checks/validation/business/design/check-component-contracts.ts +365 -0
  219. package/catalog/generated/firstparty/checks/validation/business/design/check-content-assets.ts +600 -0
  220. package/catalog/generated/firstparty/checks/validation/business/design/check-design-acceptance.ts +6 -0
  221. package/catalog/generated/firstparty/checks/validation/business/design/check-design-md.ts +19 -0
  222. package/catalog/generated/firstparty/checks/validation/business/design/check-design-room-contract.ts +200 -0
  223. package/catalog/generated/firstparty/checks/validation/business/design/check-design-worthiness.ts +710 -0
  224. package/catalog/generated/firstparty/checks/validation/business/design/check-motion-contract.ts +1374 -0
  225. package/catalog/generated/firstparty/checks/validation/business/design/check-scrollytelling-contract.ts +1486 -0
  226. package/catalog/generated/firstparty/checks/validation/business/design/check-token-promotion.ts +75 -0
  227. package/catalog/generated/firstparty/checks/validation/business/design/check-vibecoded-tells.ts +396 -0
  228. package/catalog/generated/firstparty/checks/validation/business/design/validate-state.ts +15 -0
  229. package/catalog/generated/firstparty/checks/validation/business/engineering/check-archetype-starter.ts +457 -0
  230. package/catalog/generated/firstparty/checks/validation/business/engineering/check-backend-data-contract.ts +151 -0
  231. package/catalog/generated/firstparty/checks/validation/business/engineering/check-compound-engineering-routing.ts +153 -0
  232. package/catalog/generated/firstparty/checks/validation/business/engineering/check-mobai-proof.ts +486 -0
  233. package/catalog/generated/firstparty/checks/validation/business/engineering/check-native-android-proof.ts +486 -0
  234. package/catalog/generated/firstparty/checks/validation/business/engineering/check-native-ios-proof.ts +465 -0
  235. package/catalog/generated/firstparty/checks/validation/business/engineering/check-readiness-coverage.ts +242 -0
  236. package/catalog/generated/firstparty/checks/validation/business/engineering/check-roster-headless-safety.ts +70 -0
  237. package/catalog/generated/firstparty/checks/validation/business/engineering/check-roster-overlap.ts +159 -0
  238. package/catalog/generated/firstparty/checks/validation/business/engineering/check-source-checkpoint.ts +123 -0
  239. package/catalog/generated/firstparty/checks/validation/business/engineering/check-technical-docs-ste100.ts +319 -0
  240. package/catalog/generated/firstparty/checks/validation/business/engineering/check-template-safety.ts +75 -0
  241. package/catalog/generated/firstparty/checks/validation/business/experience/check-emotional-design.ts +1246 -0
  242. package/catalog/generated/firstparty/checks/validation/business/experience/check-onboarding-cutover-repository.ts +157 -0
  243. package/catalog/generated/firstparty/checks/validation/business/experience/check-onboarding-evidence-packet.ts +263 -0
  244. package/catalog/generated/firstparty/checks/validation/business/experience/check-onboarding-foundations.ts +16 -0
  245. package/catalog/generated/firstparty/checks/validation/business/experience/check-onboarding-graph.ts +795 -0
  246. package/catalog/generated/firstparty/checks/validation/business/growth/check-landing-funnel.ts +593 -0
  247. package/catalog/generated/firstparty/checks/validation/business/growth/check-paid-user-acquisition.ts +601 -0
  248. package/catalog/generated/firstparty/checks/validation/business/money/check-price-derivation.ts +127 -0
  249. package/catalog/generated/firstparty/checks/validation/business/money/check-revenue.ts +72 -0
  250. package/catalog/generated/firstparty/checks/validation/business/operations/check-agent-operations.ts +709 -0
  251. package/catalog/generated/firstparty/checks/validation/business/operations/check-email.ts +356 -0
  252. package/catalog/generated/firstparty/checks/validation/business/operations/check-founder-operator-bootstrap.ts +759 -0
  253. package/catalog/generated/firstparty/checks/validation/business/operations/check-paid-tool-intake.ts +71 -0
  254. package/catalog/generated/firstparty/checks/validation/business/operations/check-portfolio-registry.ts +99 -0
  255. package/catalog/generated/firstparty/checks/validation/business/operations/check-post-launch-ops.ts +834 -0
  256. package/catalog/generated/firstparty/checks/validation/business/orchestration/check-continuity-contract.ts +266 -0
  257. package/catalog/generated/firstparty/checks/validation/business/orchestration/check-parallel-orchestration.ts +218 -0
  258. package/catalog/generated/firstparty/checks/validation/business/orchestration/validate-project-state.ts +357 -0
  259. package/catalog/generated/firstparty/checks/validation/business/process/check-artifact-templates.ts +103 -0
  260. package/catalog/generated/firstparty/checks/validation/business/process/check-change-cascade.ts +318 -0
  261. package/catalog/generated/firstparty/checks/validation/business/process/check-generated-pages.ts +153 -0
  262. package/catalog/generated/firstparty/checks/validation/business/process/check-lane-coverage.ts +377 -0
  263. package/catalog/generated/firstparty/checks/validation/business/process/check-live-provider-proof.ts +284 -0
  264. package/catalog/generated/firstparty/checks/validation/business/process/check-repository-profile.ts +43 -0
  265. package/catalog/generated/firstparty/checks/validation/business/product/check-app-archetype.ts +266 -0
  266. package/catalog/generated/firstparty/checks/validation/business/product/check-product-md.ts +67 -0
  267. package/catalog/generated/firstparty/checks/validation/business/research/check-evidence-schema-drift.ts +50 -0
  268. package/catalog/generated/firstparty/checks/validation/business/research/check-localization-research.ts +144 -0
  269. package/catalog/generated/firstparty/checks/validation/business/research/check-research-evidence.ts +1324 -0
  270. package/catalog/generated/firstparty/checks/validation/business/store/check-app-review-contract.ts +433 -0
  271. package/catalog/generated/firstparty/checks/validation/business/store/check-app-store-portfolio.ts +279 -0
  272. package/catalog/generated/firstparty/checks/validation/business/store/check-apple-app-store-requirements.ts +735 -0
  273. package/catalog/generated/firstparty/checks/validation/business/store/check-asc-command-contract.ts +175 -0
  274. package/catalog/generated/firstparty/checks/validation/business/store/check-aso-evidence.ts +162 -0
  275. package/catalog/generated/firstparty/checks/validation/business/store/check-store-console-packet.ts +480 -0
  276. package/catalog/generated/firstparty/checks/validation/business/store/check-store-screenshots.ts +1113 -0
  277. package/catalog/generated/firstparty/checks/validation/business/trust/check-ai-provider-controls.ts +127 -0
  278. package/catalog/generated/firstparty/checks/validation/business/trust/check-privacy-terms.ts +238 -0
  279. package/catalog/generated/firstparty/checks/validation/business/trust/check-secret-routing.ts +233 -0
  280. package/catalog/generated/firstparty/checks/validation/business/trust/check-security-release.ts +199 -0
  281. package/catalog/generated/firstparty/checks/validation/business/words/check-app-copy.ts +1019 -0
  282. package/catalog/generated/firstparty/checks/validation/business/words/check-founder-copy.ts +471 -0
  283. package/catalog/generated/firstparty/checks/validation/business/words/check-no-slop.ts +148 -0
  284. package/catalog/generated/firstparty/checks/validation/repository/audit-skill-links.ts +176 -0
  285. package/catalog/generated/firstparty/checks/validation/repository/check-agent-entrypoints.ts +259 -0
  286. package/catalog/generated/firstparty/checks/validation/repository/check-architecture.ts +393 -0
  287. package/catalog/generated/firstparty/checks/validation/repository/check-autopilot-contract.ts +277 -0
  288. package/catalog/generated/firstparty/checks/validation/repository/check-capability-delta.ts +30 -0
  289. package/catalog/generated/firstparty/checks/validation/repository/check-catalog.ts +88 -0
  290. package/catalog/generated/firstparty/checks/validation/repository/check-engine-e2e.ts +609 -0
  291. package/catalog/generated/firstparty/checks/validation/repository/check-gates-layout.ts +109 -0
  292. package/catalog/generated/firstparty/checks/validation/repository/check-graph-foundations.ts +158 -0
  293. package/catalog/generated/firstparty/checks/validation/repository/check-hub-spoke.ts +144 -0
  294. package/catalog/generated/firstparty/checks/validation/repository/check-learning-grounding.ts +323 -0
  295. package/catalog/generated/firstparty/checks/validation/repository/check-operating-graph.ts +205 -0
  296. package/catalog/generated/firstparty/checks/validation/repository/check-pack-composition.ts +94 -0
  297. package/catalog/generated/firstparty/checks/validation/repository/check-package-parity.ts +632 -0
  298. package/catalog/generated/firstparty/checks/validation/repository/check-provider-contracts.ts +24 -0
  299. package/catalog/generated/firstparty/checks/validation/repository/check-reference-size.ts +354 -0
  300. package/catalog/generated/firstparty/checks/validation/repository/check-repository-boundary.ts +2385 -0
  301. package/catalog/generated/firstparty/checks/validation/repository/check-skill-supply-chain.ts +290 -0
  302. package/catalog/generated/firstparty/checks/validation/repository/check-skill-version.ts +363 -0
  303. package/catalog/generated/firstparty/checks/validation/repository/check-source-freshness.ts +627 -0
  304. package/catalog/generated/firstparty/checks/validation/repository/check-task-skills.ts +40 -0
  305. package/catalog/generated/firstparty/checks/validation/repository/check-upstreams.ts +189 -0
  306. package/catalog/generated/firstparty/checks/validation/repository/check-validator-docs.ts +84 -0
  307. package/catalog/generated/firstparty/checks/validation/repository/check-version-discipline.ts +314 -0
  308. package/catalog/generated/firstparty/checks/validation/repository/run-agent-evals.ts +117 -0
  309. package/catalog/generated/firstparty/checks/validation/repository/run-behavioral-evals.ts +612 -0
  310. package/catalog/generated/firstparty/checks/validation/repository/run-launchbench.ts +246 -0
  311. package/catalog/generated/firstparty/checks/validation/repository/run-validator-fixtures.ts +173 -0
  312. package/catalog/generated/firstparty/examples/workspace/business/analytics/ANALYTICS.md +186 -0
  313. package/catalog/generated/firstparty/examples/workspace/business/analytics/analytics-plan.html +14 -0
  314. package/catalog/generated/firstparty/examples/workspace/business/design/motion-catalog/README.md +74 -0
  315. package/catalog/generated/firstparty/examples/workspace/business/design/system/PremiumCraft.swift +352 -0
  316. package/catalog/generated/firstparty/examples/workspace/business/growth/LAUNCH_NARRATIVE.md +241 -0
  317. package/catalog/generated/firstparty/examples/workspace/business/growth/PAID_UA.md +142 -0
  318. package/catalog/generated/firstparty/examples/workspace/business/growth/VIRAL_GROWTH.md +130 -0
  319. package/catalog/generated/firstparty/examples/workspace/business/growth/content-assets/CONTENT_ASSETS.md +127 -0
  320. package/catalog/generated/firstparty/examples/workspace/business/growth/landing/scrollytelling.portable.example.html +156 -0
  321. package/catalog/generated/firstparty/examples/workspace/business/product/copy/COPY_BRIEF.md +64 -0
  322. package/catalog/generated/firstparty/examples/workspace/business/product/copy/COPY_DECK.md +84 -0
  323. package/catalog/generated/firstparty/examples/workspace/business/product/experience/11-star-experience/11_STAR_EXPERIENCE.md +93 -0
  324. package/catalog/generated/firstparty/examples/workspace/business/product/experience/emotional-design/EMOTIONAL_DESIGN.md +355 -0
  325. package/catalog/generated/firstparty/examples/workspace/business/product/experience/ux-patterns/UX_PATTERNS.md +144 -0
  326. package/catalog/generated/firstparty/examples/workspace/business/state/LAUNCH_TRACE.md +29 -0
  327. package/catalog/generated/firstparty/examples/workspace/business/store/app-store-listing/APP_STORE_LISTING.md +160 -0
  328. package/catalog/generated/firstparty/examples/workspace/business/store/app-store-listing/SCREENSHOT_RUBRIC.md +202 -0
  329. package/catalog/generated/firstparty/extension.yaml +12344 -0
  330. package/catalog/generated/firstparty/kernel/schema/evidence-schema-version.ts +82 -0
  331. package/catalog/generated/firstparty/knowledge/data/analytics-attribution.md +317 -0
  332. package/catalog/generated/firstparty/knowledge/data/posthog-agent-tooling.md +101 -0
  333. package/catalog/generated/firstparty/knowledge/design/audience-derived-identity.md +55 -0
  334. package/catalog/generated/firstparty/knowledge/design/consumer-craft-benchmarks.md +72 -0
  335. package/catalog/generated/firstparty/knowledge/design/design-acceptance.md +199 -0
  336. package/catalog/generated/firstparty/knowledge/design/design-evidence-stack.md +130 -0
  337. package/catalog/generated/firstparty/knowledge/design/design-room.md +83 -0
  338. package/catalog/generated/firstparty/knowledge/design/design-visual-system.md +247 -0
  339. package/catalog/generated/firstparty/knowledge/design/design-worthiness.md +188 -0
  340. package/catalog/generated/firstparty/knowledge/design/editorial-scrollytelling.md +239 -0
  341. package/catalog/generated/firstparty/knowledge/design/landing-motion-craft.md +67 -0
  342. package/catalog/generated/firstparty/knowledge/design/mobile-flow-craft.md +177 -0
  343. package/catalog/generated/firstparty/knowledge/design/motion-craft-benchmarks.md +340 -0
  344. package/catalog/generated/firstparty/knowledge/design/premium-mobile-craft.md +137 -0
  345. package/catalog/generated/firstparty/knowledge/design/quality-lens.md +100 -0
  346. package/catalog/generated/firstparty/knowledge/design/refero-ux-patterns.md +131 -0
  347. package/catalog/generated/firstparty/knowledge/design/remotion-content-assets.md +370 -0
  348. package/catalog/generated/firstparty/knowledge/design/surfaces-b2c.md +84 -0
  349. package/catalog/generated/firstparty/knowledge/design/vibecoded-tells.md +129 -0
  350. package/catalog/generated/firstparty/knowledge/engineering/accessibility-readiness.md +24 -0
  351. package/catalog/generated/firstparty/knowledge/engineering/app-agent-roster.md +120 -0
  352. package/catalog/generated/firstparty/knowledge/engineering/app-quality.md +19 -0
  353. package/catalog/generated/firstparty/knowledge/engineering/backend-data-contract.md +187 -0
  354. package/catalog/generated/firstparty/knowledge/engineering/engineering-orchestration.md +365 -0
  355. package/catalog/generated/firstparty/knowledge/engineering/expo-compatibility.md +74 -0
  356. package/catalog/generated/firstparty/knowledge/engineering/expo-operations-map.md +84 -0
  357. package/catalog/generated/firstparty/knowledge/engineering/expo-stack-selection.md +75 -0
  358. package/catalog/generated/firstparty/knowledge/engineering/external-skill-packs.md +47 -0
  359. package/catalog/generated/firstparty/knowledge/engineering/mobai-toolbelt.md +389 -0
  360. package/catalog/generated/firstparty/knowledge/engineering/recommended-agent-skills.md +109 -0
  361. package/catalog/generated/firstparty/knowledge/engineering/technical-documentation-ste100.md +89 -0
  362. package/catalog/generated/firstparty/knowledge/engineering/xcodebuildmcp-testing.md +502 -0
  363. package/catalog/generated/firstparty/knowledge/experience/commitment-funnel.md +90 -0
  364. package/catalog/generated/firstparty/knowledge/experience/consumer-product-design-agency.md +268 -0
  365. package/catalog/generated/firstparty/knowledge/experience/eleven-star-experience.md +194 -0
  366. package/catalog/generated/firstparty/knowledge/experience/emotional-design-system.md +412 -0
  367. package/catalog/generated/firstparty/knowledge/experience/emotional-experience-design.md +359 -0
  368. package/catalog/generated/firstparty/knowledge/experience/emotional-experience-measurement.md +433 -0
  369. package/catalog/generated/firstparty/knowledge/experience/ethics-guardrail.md +460 -0
  370. package/catalog/generated/firstparty/knowledge/experience/experience-cards/commitment-card.md +36 -0
  371. package/catalog/generated/firstparty/knowledge/experience/experience-cards/endowed-progress-card.md +34 -0
  372. package/catalog/generated/firstparty/knowledge/experience/experience-cards/fresh-start-card.md +34 -0
  373. package/catalog/generated/firstparty/knowledge/experience/experience-cards/identity-and-self-expression-card.md +35 -0
  374. package/catalog/generated/firstparty/knowledge/experience/experience-cards/intent-mirroring-card.md +36 -0
  375. package/catalog/generated/firstparty/knowledge/experience/experience-cards/mastery-and-status-card.md +43 -0
  376. package/catalog/generated/firstparty/knowledge/experience/experience-cards/peak-end-card.md +44 -0
  377. package/catalog/generated/firstparty/knowledge/experience/experience-cards/perceived-effort-delay-card.md +37 -0
  378. package/catalog/generated/firstparty/knowledge/experience/experience-cards/reciprocity-card.md +38 -0
  379. package/catalog/generated/firstparty/knowledge/experience/experience-cards/recovery-and-trust-repair-card.md +40 -0
  380. package/catalog/generated/firstparty/knowledge/experience/experience-cards/streak-and-loss-aversion-card.md +37 -0
  381. package/catalog/generated/firstparty/knowledge/experience/experience-cards/variable-reward-card.md +42 -0
  382. package/catalog/generated/firstparty/knowledge/experience/experience-cards.md +172 -0
  383. package/catalog/generated/firstparty/knowledge/experience/onboarding-conversion.md +422 -0
  384. package/catalog/generated/firstparty/knowledge/experience/onboarding-foundations.md +264 -0
  385. package/catalog/generated/firstparty/knowledge/experience/paywall-goal-headline.md +99 -0
  386. package/catalog/generated/firstparty/knowledge/experience/push-notification-lifecycle.md +79 -0
  387. package/catalog/generated/firstparty/knowledge/growth/appsflyer-mmp.md +99 -0
  388. package/catalog/generated/firstparty/knowledge/growth/cro-landing.md +86 -0
  389. package/catalog/generated/firstparty/knowledge/growth/fastlane-growth-ops.md +321 -0
  390. package/catalog/generated/firstparty/knowledge/growth/geo-seo.md +163 -0
  391. package/catalog/generated/firstparty/knowledge/growth/hdyhau-blended-roas.md +75 -0
  392. package/catalog/generated/firstparty/knowledge/growth/influencer-sponsorship-engine.md +224 -0
  393. package/catalog/generated/firstparty/knowledge/growth/ios-consumer-playbook-intake.md +65 -0
  394. package/catalog/generated/firstparty/knowledge/growth/launch-narrative-cadence.md +340 -0
  395. package/catalog/generated/firstparty/knowledge/growth/non-competitor-angle-discovery.md +80 -0
  396. package/catalog/generated/firstparty/knowledge/growth/paid-user-acquisition.md +283 -0
  397. package/catalog/generated/firstparty/knowledge/growth/ugc-creator-engine.md +259 -0
  398. package/catalog/generated/firstparty/knowledge/growth/viral-growth-loops.md +174 -0
  399. package/catalog/generated/firstparty/knowledge/money/billing-health-and-reactivation.md +54 -0
  400. package/catalog/generated/firstparty/knowledge/money/offer-and-pricing-decisions.md +33 -0
  401. package/catalog/generated/firstparty/knowledge/money/paywall-pricing-and-experiments.md +97 -0
  402. package/catalog/generated/firstparty/knowledge/money/revenue-monetization.md +107 -0
  403. package/catalog/generated/firstparty/knowledge/money/revenuecat-agent-tooling.md +174 -0
  404. package/catalog/generated/firstparty/knowledge/money/revenuecat-and-store-products.md +115 -0
  405. package/catalog/generated/firstparty/knowledge/money/stripe-and-web-billing.md +83 -0
  406. package/catalog/generated/firstparty/knowledge/money/subscription-price-derivation.md +105 -0
  407. package/catalog/generated/firstparty/knowledge/operations/autonomy-onboarding.md +269 -0
  408. package/catalog/generated/firstparty/knowledge/operations/doppler-organization.md +73 -0
  409. package/catalog/generated/firstparty/knowledge/operations/founder-zero-operator.md +184 -0
  410. package/catalog/generated/firstparty/knowledge/operations/frontier-agent-operations.md +189 -0
  411. package/catalog/generated/firstparty/knowledge/operations/paid-tool-routing.md +172 -0
  412. package/catalog/generated/firstparty/knowledge/operations/post-launch-operations.md +261 -0
  413. package/catalog/generated/firstparty/knowledge/operations/provider-state-recipes.md +80 -0
  414. package/catalog/generated/firstparty/knowledge/operations/resend-email-ops.md +339 -0
  415. package/catalog/generated/firstparty/knowledge/operations/secrets-management.md +215 -0
  416. package/catalog/generated/firstparty/knowledge/orchestration/compound-engineering-routing.md +101 -0
  417. package/catalog/generated/firstparty/knowledge/orchestration/dynamic-workflows.md +198 -0
  418. package/catalog/generated/firstparty/knowledge/orchestration/full-launch-program.md +179 -0
  419. package/catalog/generated/firstparty/knowledge/orchestration/isolated-review.md +144 -0
  420. package/catalog/generated/firstparty/knowledge/orchestration/parallel-agent-orchestration.md +335 -0
  421. package/catalog/generated/firstparty/knowledge/orchestration/project-state.md +96 -0
  422. package/catalog/generated/firstparty/knowledge/process/artifact-contracts.md +1527 -0
  423. package/catalog/generated/firstparty/knowledge/process/cascade-edges.yaml +217 -0
  424. package/catalog/generated/firstparty/knowledge/process/change-cascade.md +102 -0
  425. package/catalog/generated/firstparty/knowledge/process/current-truth.md +45 -0
  426. package/catalog/generated/firstparty/knowledge/process/failure-cards.md +114 -0
  427. package/catalog/generated/firstparty/knowledge/process/flow-traceability.md +189 -0
  428. package/catalog/generated/firstparty/knowledge/process/launch-coverage.md +298 -0
  429. package/catalog/generated/firstparty/knowledge/process/launch-phases.md +838 -0
  430. package/catalog/generated/firstparty/knowledge/process/learning-capture.md +77 -0
  431. package/catalog/generated/firstparty/knowledge/process/learnings/audit-runs-from-repo-root.md +22 -0
  432. package/catalog/generated/firstparty/knowledge/process/provider-contracts.md +49 -0
  433. package/catalog/generated/firstparty/knowledge/process/provider-proof.md +37 -0
  434. package/catalog/generated/firstparty/knowledge/process/repository-profiles.md +60 -0
  435. package/catalog/generated/firstparty/knowledge/process/tool-recipes/device-capture-and-proof.md +100 -0
  436. package/catalog/generated/firstparty/knowledge/process/tool-recipes/engineering-and-agent-orchestration.md +89 -0
  437. package/catalog/generated/firstparty/knowledge/process/tool-recipes/funnel-domain-and-privacy.md +142 -0
  438. package/catalog/generated/firstparty/knowledge/process/tool-recipes/growth-and-store-routing.md +192 -0
  439. package/catalog/generated/firstparty/knowledge/process/tool-recipes/research-intelligence.md +258 -0
  440. package/catalog/generated/firstparty/knowledge/process/tool-recipes/revenue-email-analytics.md +101 -0
  441. package/catalog/generated/firstparty/knowledge/process/tool-recipes/secrets-and-environment.md +35 -0
  442. package/catalog/generated/firstparty/knowledge/process/tool-recipes/visual-and-motion-production.md +457 -0
  443. package/catalog/generated/firstparty/knowledge/process/tool-recipes.md +67 -0
  444. package/catalog/generated/firstparty/knowledge/product/ai-chat-companion.md +96 -0
  445. package/catalog/generated/firstparty/knowledge/product/core-loop-and-complete-scope.md +82 -0
  446. package/catalog/generated/firstparty/knowledge/product/core-loop-and-v1-scope.md +137 -0
  447. package/catalog/generated/firstparty/knowledge/product/habit-tracker.md +89 -0
  448. package/catalog/generated/firstparty/knowledge/product/photo-ai-media.md +96 -0
  449. package/catalog/generated/firstparty/knowledge/product/product-moat.md +64 -0
  450. package/catalog/generated/firstparty/knowledge/product/social-network.md +117 -0
  451. package/catalog/generated/firstparty/knowledge/research/distribution-first-niche.md +70 -0
  452. package/catalog/generated/firstparty/knowledge/research/distribution-offer-signal.md +190 -0
  453. package/catalog/generated/firstparty/knowledge/research/go-pivot-or-kill.md +120 -0
  454. package/catalog/generated/firstparty/knowledge/research/localization-market-research.md +145 -0
  455. package/catalog/generated/firstparty/knowledge/research/transformation-demo.md +70 -0
  456. package/catalog/generated/firstparty/knowledge/store/age-rating-questionnaire.md +75 -0
  457. package/catalog/generated/firstparty/knowledge/store/app-review-observe.md +314 -0
  458. package/catalog/generated/firstparty/knowledge/store/app-review-remediate.md +125 -0
  459. package/catalog/generated/firstparty/knowledge/store/app-review-resubmit.md +128 -0
  460. package/catalog/generated/firstparty/knowledge/store/app-store-connect-cli.md +347 -0
  461. package/catalog/generated/firstparty/knowledge/store/app-store-listing-prep.md +277 -0
  462. package/catalog/generated/firstparty/knowledge/store/apple-signing-release.md +551 -0
  463. package/catalog/generated/firstparty/knowledge/store/aso-apple-keyword-evidence.md +112 -0
  464. package/catalog/generated/firstparty/knowledge/store/aso-store-ops.md +316 -0
  465. package/catalog/generated/firstparty/knowledge/store/google-play-release.md +200 -0
  466. package/catalog/generated/firstparty/knowledge/store/marketplace-regional-compliance.md +21 -0
  467. package/catalog/generated/firstparty/knowledge/store/screenshot-toolchain.md +130 -0
  468. package/catalog/generated/firstparty/knowledge/store/store-console-workflow.md +760 -0
  469. package/catalog/generated/firstparty/knowledge/trust/community-safety.md +18 -0
  470. package/catalog/generated/firstparty/knowledge/trust/generative-ai-safety.md +27 -0
  471. package/catalog/generated/firstparty/knowledge/trust/paid-generative-ai-controls.md +85 -0
  472. package/catalog/generated/firstparty/knowledge/trust/privacy-terms.md +192 -0
  473. package/catalog/generated/firstparty/knowledge/trust/security-release-hardening.md +169 -0
  474. package/catalog/generated/firstparty/knowledge/words/consumer-copy-benchmarks.md +111 -0
  475. package/catalog/generated/firstparty/knowledge/words/conversion-copy.md +181 -0
  476. package/catalog/generated/firstparty/knowledge/words/no-slop-writing.md +173 -0
  477. package/catalog/generated/firstparty/package.json +290 -0
  478. package/catalog/generated/firstparty/schemas/mobile-evidence.json +177 -0
  479. package/catalog/generated/firstparty/schemas/mobile-input.json +191 -0
  480. package/catalog/generated/firstparty/schemas/mobile-output.json +228 -0
  481. package/catalog/generated/firstparty/schemas/monetization-unavailable.json +4 -0
  482. package/catalog/generated/firstparty/schemas/worker-evidence.json +21 -0
  483. package/catalog/generated/firstparty/schemas/worker-input.json +29 -0
  484. package/catalog/generated/firstparty/schemas/worker-output.json +41 -0
  485. package/catalog/generated/firstparty/snapshot.json +16229 -0
  486. package/catalog/generated/firstparty/surfaces/starters/ai-chat-companion/README.md +41 -0
  487. package/catalog/generated/firstparty/surfaces/starters/ai-chat-companion/prompts/00-positioning-strategy.md +45 -0
  488. package/catalog/generated/firstparty/surfaces/starters/ai-chat-companion/prompts/01-database-schema.md +44 -0
  489. package/catalog/generated/firstparty/surfaces/starters/ai-chat-companion/prompts/02-auth-system.md +38 -0
  490. package/catalog/generated/firstparty/surfaces/starters/ai-chat-companion/prompts/03-chat-core-loop.md +42 -0
  491. package/catalog/generated/firstparty/surfaces/starters/ai-chat-companion/prompts/04-model-integration.md +45 -0
  492. package/catalog/generated/firstparty/surfaces/starters/ai-chat-companion/prompts/05-memory-personalization.md +38 -0
  493. package/catalog/generated/firstparty/surfaces/starters/ai-chat-companion/prompts/06-usage-limits-metering.md +36 -0
  494. package/catalog/generated/firstparty/surfaces/starters/ai-chat-companion/prompts/07-stripe-monetization.md +34 -0
  495. package/catalog/generated/firstparty/surfaces/starters/ai-chat-companion/prompts/08-safety-and-moderation.md +39 -0
  496. package/catalog/generated/firstparty/surfaces/starters/ai-chat-companion/prompts/variants/companion-character.md +40 -0
  497. package/catalog/generated/firstparty/surfaces/starters/ai-chat-companion/prompts/variants/voice-first.md +37 -0
  498. package/catalog/generated/firstparty/surfaces/starters/ai-chat-companion/starter/.env.example +18 -0
  499. package/catalog/generated/firstparty/surfaces/starters/ai-chat-companion/starter/.github/workflows/ci.yml +30 -0
  500. package/catalog/generated/firstparty/surfaces/starters/ai-chat-companion/starter/.gitignore.template +9 -0
  501. package/catalog/generated/firstparty/surfaces/starters/ai-chat-companion/starter/README.md +48 -0
  502. package/catalog/generated/firstparty/surfaces/starters/ai-chat-companion/starter/app/api/chat/route.ts +70 -0
  503. package/catalog/generated/firstparty/surfaces/starters/ai-chat-companion/starter/app/api/revenuecat/webhook/route.ts +21 -0
  504. package/catalog/generated/firstparty/surfaces/starters/ai-chat-companion/starter/app/api/stripe/checkout/route.ts +28 -0
  505. package/catalog/generated/firstparty/surfaces/starters/ai-chat-companion/starter/app/api/stripe/webhook/route.ts +34 -0
  506. package/catalog/generated/firstparty/surfaces/starters/ai-chat-companion/starter/app/auth/confirm/route.ts +22 -0
  507. package/catalog/generated/firstparty/surfaces/starters/ai-chat-companion/starter/app/chat/page.tsx +78 -0
  508. package/catalog/generated/firstparty/surfaces/starters/ai-chat-companion/starter/app/layout.tsx +20 -0
  509. package/catalog/generated/firstparty/surfaces/starters/ai-chat-companion/starter/app/login/page.tsx +47 -0
  510. package/catalog/generated/firstparty/surfaces/starters/ai-chat-companion/starter/app/page.tsx +17 -0
  511. package/catalog/generated/firstparty/surfaces/starters/ai-chat-companion/starter/components/analytics-provider.tsx +14 -0
  512. package/catalog/generated/firstparty/surfaces/starters/ai-chat-companion/starter/lib/analytics/events.ts +32 -0
  513. package/catalog/generated/firstparty/surfaces/starters/ai-chat-companion/starter/lib/analytics/posthog-client.ts +28 -0
  514. package/catalog/generated/firstparty/surfaces/starters/ai-chat-companion/starter/lib/billing/revenuecat.ts +27 -0
  515. package/catalog/generated/firstparty/surfaces/starters/ai-chat-companion/starter/lib/billing/stripe.ts +15 -0
  516. package/catalog/generated/firstparty/surfaces/starters/ai-chat-companion/starter/lib/strings.ts +32 -0
  517. package/catalog/generated/firstparty/surfaces/starters/ai-chat-companion/starter/lib/supabase/client.ts +7 -0
  518. package/catalog/generated/firstparty/surfaces/starters/ai-chat-companion/starter/lib/supabase/proxy.ts +29 -0
  519. package/catalog/generated/firstparty/surfaces/starters/ai-chat-companion/starter/lib/supabase/server.ts +23 -0
  520. package/catalog/generated/firstparty/surfaces/starters/ai-chat-companion/starter/next.config.ts +5 -0
  521. package/catalog/generated/firstparty/surfaces/starters/ai-chat-companion/starter/package-lock.json +1294 -0
  522. package/catalog/generated/firstparty/surfaces/starters/ai-chat-companion/starter/package.json +29 -0
  523. package/catalog/generated/firstparty/surfaces/starters/ai-chat-companion/starter/proxy.ts +12 -0
  524. package/catalog/generated/firstparty/surfaces/starters/ai-chat-companion/starter/supabase/migrations/0001_init.sql +78 -0
  525. package/catalog/generated/firstparty/surfaces/starters/ai-chat-companion/starter/supabase/tests/0001_rls.test.sql +75 -0
  526. package/catalog/generated/firstparty/surfaces/starters/ai-chat-companion/starter/tsconfig.json +41 -0
  527. package/catalog/generated/firstparty/surfaces/starters/habit-tracker/README.md +43 -0
  528. package/catalog/generated/firstparty/surfaces/starters/habit-tracker/prompts/00-positioning-strategy.md +47 -0
  529. package/catalog/generated/firstparty/surfaces/starters/habit-tracker/prompts/01-database-schema.md +54 -0
  530. package/catalog/generated/firstparty/surfaces/starters/habit-tracker/prompts/02-auth-system.md +42 -0
  531. package/catalog/generated/firstparty/surfaces/starters/habit-tracker/prompts/03-habit-core-loop.md +50 -0
  532. package/catalog/generated/firstparty/surfaces/starters/habit-tracker/prompts/04-reminders-and-streaks.md +58 -0
  533. package/catalog/generated/firstparty/surfaces/starters/habit-tracker/prompts/05-stats-and-insights.md +44 -0
  534. package/catalog/generated/firstparty/surfaces/starters/habit-tracker/prompts/06-paywall-and-monetization.md +50 -0
  535. package/catalog/generated/firstparty/surfaces/starters/habit-tracker/prompts/07-social-accountability.md +49 -0
  536. package/catalog/generated/firstparty/surfaces/starters/habit-tracker/prompts/variants/simple-counter-utility.md +43 -0
  537. package/catalog/generated/firstparty/surfaces/starters/habit-tracker/prompts/variants/wellness-coach.md +44 -0
  538. package/catalog/generated/firstparty/surfaces/starters/habit-tracker/starter/.env.example +14 -0
  539. package/catalog/generated/firstparty/surfaces/starters/habit-tracker/starter/.github/workflows/ci.yml +30 -0
  540. package/catalog/generated/firstparty/surfaces/starters/habit-tracker/starter/.gitignore.template +9 -0
  541. package/catalog/generated/firstparty/surfaces/starters/habit-tracker/starter/README.md +48 -0
  542. package/catalog/generated/firstparty/surfaces/starters/habit-tracker/starter/app/api/revenuecat/webhook/route.ts +21 -0
  543. package/catalog/generated/firstparty/surfaces/starters/habit-tracker/starter/app/api/stripe/checkout/route.ts +28 -0
  544. package/catalog/generated/firstparty/surfaces/starters/habit-tracker/starter/app/api/stripe/webhook/route.ts +34 -0
  545. package/catalog/generated/firstparty/surfaces/starters/habit-tracker/starter/app/auth/confirm/route.ts +22 -0
  546. package/catalog/generated/firstparty/surfaces/starters/habit-tracker/starter/app/layout.tsx +20 -0
  547. package/catalog/generated/firstparty/surfaces/starters/habit-tracker/starter/app/login/page.tsx +47 -0
  548. package/catalog/generated/firstparty/surfaces/starters/habit-tracker/starter/app/page.tsx +17 -0
  549. package/catalog/generated/firstparty/surfaces/starters/habit-tracker/starter/app/today/page.tsx +27 -0
  550. package/catalog/generated/firstparty/surfaces/starters/habit-tracker/starter/components/analytics-provider.tsx +14 -0
  551. package/catalog/generated/firstparty/surfaces/starters/habit-tracker/starter/lib/analytics/events.ts +29 -0
  552. package/catalog/generated/firstparty/surfaces/starters/habit-tracker/starter/lib/analytics/posthog-client.ts +28 -0
  553. package/catalog/generated/firstparty/surfaces/starters/habit-tracker/starter/lib/billing/revenuecat.ts +27 -0
  554. package/catalog/generated/firstparty/surfaces/starters/habit-tracker/starter/lib/billing/stripe.ts +15 -0
  555. package/catalog/generated/firstparty/surfaces/starters/habit-tracker/starter/lib/strings.ts +27 -0
  556. package/catalog/generated/firstparty/surfaces/starters/habit-tracker/starter/lib/supabase/client.ts +7 -0
  557. package/catalog/generated/firstparty/surfaces/starters/habit-tracker/starter/lib/supabase/proxy.ts +29 -0
  558. package/catalog/generated/firstparty/surfaces/starters/habit-tracker/starter/lib/supabase/server.ts +23 -0
  559. package/catalog/generated/firstparty/surfaces/starters/habit-tracker/starter/next.config.ts +5 -0
  560. package/catalog/generated/firstparty/surfaces/starters/habit-tracker/starter/package-lock.json +1222 -0
  561. package/catalog/generated/firstparty/surfaces/starters/habit-tracker/starter/package.json +28 -0
  562. package/catalog/generated/firstparty/surfaces/starters/habit-tracker/starter/proxy.ts +12 -0
  563. package/catalog/generated/firstparty/surfaces/starters/habit-tracker/starter/supabase/migrations/0001_init.sql +84 -0
  564. package/catalog/generated/firstparty/surfaces/starters/habit-tracker/starter/supabase/tests/0001_rls.test.sql +75 -0
  565. package/catalog/generated/firstparty/surfaces/starters/habit-tracker/starter/tsconfig.json +41 -0
  566. package/catalog/generated/firstparty/surfaces/starters/photo-ai-media/README.md +40 -0
  567. package/catalog/generated/firstparty/surfaces/starters/photo-ai-media/prompts/00-positioning-strategy.md +51 -0
  568. package/catalog/generated/firstparty/surfaces/starters/photo-ai-media/prompts/01-database-schema.md +55 -0
  569. package/catalog/generated/firstparty/surfaces/starters/photo-ai-media/prompts/02-auth-system.md +39 -0
  570. package/catalog/generated/firstparty/surfaces/starters/photo-ai-media/prompts/03-capture-and-library.md +42 -0
  571. package/catalog/generated/firstparty/surfaces/starters/photo-ai-media/prompts/04-ai-generation-pipeline.md +46 -0
  572. package/catalog/generated/firstparty/surfaces/starters/photo-ai-media/prompts/05-editing-and-presets.md +40 -0
  573. package/catalog/generated/firstparty/surfaces/starters/photo-ai-media/prompts/06-credits-and-monetization.md +47 -0
  574. package/catalog/generated/firstparty/surfaces/starters/photo-ai-media/prompts/07-sharing-and-virality.md +39 -0
  575. package/catalog/generated/firstparty/surfaces/starters/photo-ai-media/prompts/08-content-safety-and-rights.md +49 -0
  576. package/catalog/generated/firstparty/surfaces/starters/photo-ai-media/prompts/variants/avatar-headshot-studio.md +43 -0
  577. package/catalog/generated/firstparty/surfaces/starters/photo-ai-media/prompts/variants/photo-restoration.md +39 -0
  578. package/catalog/generated/firstparty/surfaces/starters/photo-ai-media/starter/.env.example +16 -0
  579. package/catalog/generated/firstparty/surfaces/starters/photo-ai-media/starter/.github/workflows/ci.yml +30 -0
  580. package/catalog/generated/firstparty/surfaces/starters/photo-ai-media/starter/.gitignore.template +9 -0
  581. package/catalog/generated/firstparty/surfaces/starters/photo-ai-media/starter/README.md +50 -0
  582. package/catalog/generated/firstparty/surfaces/starters/photo-ai-media/starter/app/api/generate/route.ts +47 -0
  583. package/catalog/generated/firstparty/surfaces/starters/photo-ai-media/starter/app/api/revenuecat/webhook/route.ts +21 -0
  584. package/catalog/generated/firstparty/surfaces/starters/photo-ai-media/starter/app/api/stripe/checkout/route.ts +28 -0
  585. package/catalog/generated/firstparty/surfaces/starters/photo-ai-media/starter/app/api/stripe/webhook/route.ts +34 -0
  586. package/catalog/generated/firstparty/surfaces/starters/photo-ai-media/starter/app/auth/confirm/route.ts +22 -0
  587. package/catalog/generated/firstparty/surfaces/starters/photo-ai-media/starter/app/layout.tsx +20 -0
  588. package/catalog/generated/firstparty/surfaces/starters/photo-ai-media/starter/app/library/page.tsx +29 -0
  589. package/catalog/generated/firstparty/surfaces/starters/photo-ai-media/starter/app/login/page.tsx +47 -0
  590. package/catalog/generated/firstparty/surfaces/starters/photo-ai-media/starter/app/page.tsx +17 -0
  591. package/catalog/generated/firstparty/surfaces/starters/photo-ai-media/starter/components/analytics-provider.tsx +14 -0
  592. package/catalog/generated/firstparty/surfaces/starters/photo-ai-media/starter/lib/analytics/events.ts +32 -0
  593. package/catalog/generated/firstparty/surfaces/starters/photo-ai-media/starter/lib/analytics/posthog-client.ts +28 -0
  594. package/catalog/generated/firstparty/surfaces/starters/photo-ai-media/starter/lib/billing/revenuecat.ts +27 -0
  595. package/catalog/generated/firstparty/surfaces/starters/photo-ai-media/starter/lib/billing/stripe.ts +15 -0
  596. package/catalog/generated/firstparty/surfaces/starters/photo-ai-media/starter/lib/strings.ts +27 -0
  597. package/catalog/generated/firstparty/surfaces/starters/photo-ai-media/starter/lib/supabase/client.ts +7 -0
  598. package/catalog/generated/firstparty/surfaces/starters/photo-ai-media/starter/lib/supabase/proxy.ts +29 -0
  599. package/catalog/generated/firstparty/surfaces/starters/photo-ai-media/starter/lib/supabase/server.ts +23 -0
  600. package/catalog/generated/firstparty/surfaces/starters/photo-ai-media/starter/next.config.ts +5 -0
  601. package/catalog/generated/firstparty/surfaces/starters/photo-ai-media/starter/package-lock.json +1222 -0
  602. package/catalog/generated/firstparty/surfaces/starters/photo-ai-media/starter/package.json +28 -0
  603. package/catalog/generated/firstparty/surfaces/starters/photo-ai-media/starter/proxy.ts +12 -0
  604. package/catalog/generated/firstparty/surfaces/starters/photo-ai-media/starter/supabase/migrations/0001_init.sql +74 -0
  605. package/catalog/generated/firstparty/surfaces/starters/photo-ai-media/starter/supabase/tests/0001_rls.test.sql +72 -0
  606. package/catalog/generated/firstparty/surfaces/starters/photo-ai-media/starter/tsconfig.json +41 -0
  607. package/catalog/generated/firstparty/surfaces/starters/social-network/README.md +41 -0
  608. package/catalog/generated/firstparty/surfaces/starters/social-network/prompts/00-niche-strategy.md +44 -0
  609. package/catalog/generated/firstparty/surfaces/starters/social-network/prompts/01-database-schema.md +37 -0
  610. package/catalog/generated/firstparty/surfaces/starters/social-network/prompts/02-auth-system.md +40 -0
  611. package/catalog/generated/firstparty/surfaces/starters/social-network/prompts/03-feed-and-posts.md +43 -0
  612. package/catalog/generated/firstparty/surfaces/starters/social-network/prompts/04-profiles-and-follow.md +41 -0
  613. package/catalog/generated/firstparty/surfaces/starters/social-network/prompts/05-search-and-discovery.md +36 -0
  614. package/catalog/generated/firstparty/surfaces/starters/social-network/prompts/06-direct-messages.md +32 -0
  615. package/catalog/generated/firstparty/surfaces/starters/social-network/prompts/07-stripe-monetization.md +41 -0
  616. package/catalog/generated/firstparty/surfaces/starters/social-network/prompts/08-invite-system.md +37 -0
  617. package/catalog/generated/firstparty/surfaces/starters/social-network/prompts/variants/image-first-instagram.md +34 -0
  618. package/catalog/generated/firstparty/surfaces/starters/social-network/prompts/variants/video-first-tiktok.md +40 -0
  619. package/catalog/generated/firstparty/surfaces/starters/social-network/starter/.env.example +14 -0
  620. package/catalog/generated/firstparty/surfaces/starters/social-network/starter/.github/workflows/ci.yml +30 -0
  621. package/catalog/generated/firstparty/surfaces/starters/social-network/starter/.gitignore.template +9 -0
  622. package/catalog/generated/firstparty/surfaces/starters/social-network/starter/README.md +47 -0
  623. package/catalog/generated/firstparty/surfaces/starters/social-network/starter/app/api/revenuecat/webhook/route.ts +21 -0
  624. package/catalog/generated/firstparty/surfaces/starters/social-network/starter/app/api/stripe/checkout/route.ts +28 -0
  625. package/catalog/generated/firstparty/surfaces/starters/social-network/starter/app/api/stripe/webhook/route.ts +34 -0
  626. package/catalog/generated/firstparty/surfaces/starters/social-network/starter/app/auth/confirm/route.ts +22 -0
  627. package/catalog/generated/firstparty/surfaces/starters/social-network/starter/app/feed/page.tsx +30 -0
  628. package/catalog/generated/firstparty/surfaces/starters/social-network/starter/app/layout.tsx +20 -0
  629. package/catalog/generated/firstparty/surfaces/starters/social-network/starter/app/login/page.tsx +47 -0
  630. package/catalog/generated/firstparty/surfaces/starters/social-network/starter/app/page.tsx +17 -0
  631. package/catalog/generated/firstparty/surfaces/starters/social-network/starter/components/analytics-provider.tsx +14 -0
  632. package/catalog/generated/firstparty/surfaces/starters/social-network/starter/lib/analytics/events.ts +31 -0
  633. package/catalog/generated/firstparty/surfaces/starters/social-network/starter/lib/analytics/posthog-client.ts +28 -0
  634. package/catalog/generated/firstparty/surfaces/starters/social-network/starter/lib/billing/revenuecat.ts +27 -0
  635. package/catalog/generated/firstparty/surfaces/starters/social-network/starter/lib/billing/stripe.ts +15 -0
  636. package/catalog/generated/firstparty/surfaces/starters/social-network/starter/lib/strings.ts +27 -0
  637. package/catalog/generated/firstparty/surfaces/starters/social-network/starter/lib/supabase/client.ts +7 -0
  638. package/catalog/generated/firstparty/surfaces/starters/social-network/starter/lib/supabase/proxy.ts +29 -0
  639. package/catalog/generated/firstparty/surfaces/starters/social-network/starter/lib/supabase/server.ts +23 -0
  640. package/catalog/generated/firstparty/surfaces/starters/social-network/starter/next.config.ts +5 -0
  641. package/catalog/generated/firstparty/surfaces/starters/social-network/starter/package-lock.json +1222 -0
  642. package/catalog/generated/firstparty/surfaces/starters/social-network/starter/package.json +28 -0
  643. package/catalog/generated/firstparty/surfaces/starters/social-network/starter/proxy.ts +12 -0
  644. package/catalog/generated/firstparty/surfaces/starters/social-network/starter/supabase/migrations/0001_init.sql +81 -0
  645. package/catalog/generated/firstparty/surfaces/starters/social-network/starter/supabase/tests/0001_rls.test.sql +70 -0
  646. package/catalog/generated/firstparty/surfaces/starters/social-network/starter/tsconfig.json +41 -0
  647. package/catalog/generated/firstparty/surfaces/ui-library/components/feedback.empty-state.md +22 -0
  648. package/catalog/generated/firstparty/surfaces/ui-library/components/feedback.haptics.md +21 -0
  649. package/catalog/generated/firstparty/surfaces/ui-library/components/feedback.skeleton.md +21 -0
  650. package/catalog/generated/firstparty/surfaces/ui-library/components/input.keyboard-behavior.md +22 -0
  651. package/catalog/generated/firstparty/surfaces/ui-library/components/interaction.press-feedback.md +22 -0
  652. package/catalog/generated/firstparty/tooling/catalog-scaffold.ts +181 -0
  653. package/catalog/generated/firstparty/tooling/render-artifact-pages.ts +93 -0
  654. package/catalog/generated/firstparty/tooling/render-credits.ts +301 -0
  655. package/catalog/generated/firstparty/tooling/render-design-room.ts +518 -0
  656. package/catalog/generated/firstparty/tooling/render-hosted-bundle.ts +201 -0
  657. package/catalog/generated/firstparty/tooling/render-product.ts +103 -0
  658. package/catalog/generated/firstparty/tooling/render-public-api.ts +91 -0
  659. package/catalog/generated/firstparty/tooling/render-task-skills.ts +69 -0
  660. package/catalog/generated/firstparty-pin.json +4 -0
  661. package/catalog/generated/hosted-knowledge.json +1 -0
  662. package/catalog/generated/knowledge-freshness.json +5 -0
  663. package/catalog/generated/packs.json +50 -0
  664. package/catalog/generated/repository-profiles.md +15 -0
  665. package/catalog/generated/routing.md +256 -0
  666. package/catalog/generated/spine.md +58 -0
  667. package/catalog/ids.ts +27 -0
  668. package/catalog/index.ts +40 -0
  669. package/catalog/knowledge/data/data-analytics-attribution.yaml +177 -0
  670. package/catalog/knowledge/data/data-posthog-agent-tooling.yaml +70 -0
  671. package/catalog/knowledge/design/design-audience-derived-identity.yaml +119 -0
  672. package/catalog/knowledge/design/design-consumer-craft-benchmarks.yaml +129 -0
  673. package/catalog/knowledge/design/design-design-acceptance.yaml +21 -0
  674. package/catalog/knowledge/design/design-design-evidence-stack.yaml +86 -0
  675. package/catalog/knowledge/design/design-design-room.yaml +18 -0
  676. package/catalog/knowledge/design/design-design-visual-system.yaml +215 -0
  677. package/catalog/knowledge/design/design-design-worthiness.yaml +40 -0
  678. package/catalog/knowledge/design/design-editorial-scrollytelling.yaml +56 -0
  679. package/catalog/knowledge/design/design-landing-motion-craft.yaml +34 -0
  680. package/catalog/knowledge/design/design-mobile-flow-craft.yaml +93 -0
  681. package/catalog/knowledge/design/design-motion-craft-benchmarks.yaml +84 -0
  682. package/catalog/knowledge/design/design-premium-mobile-craft.yaml +51 -0
  683. package/catalog/knowledge/design/design-quality-lens.yaml +29 -0
  684. package/catalog/knowledge/design/design-refero-ux-patterns.yaml +69 -0
  685. package/catalog/knowledge/design/design-remotion-content-assets.yaml +81 -0
  686. package/catalog/knowledge/design/design-surfaces-b2c.yaml +56 -0
  687. package/catalog/knowledge/design/design-vibecoded-tells.yaml +39 -0
  688. package/catalog/knowledge/engineering/engineering-accessibility-readiness.yaml +28 -0
  689. package/catalog/knowledge/engineering/engineering-app-agent-roster.yaml +14 -0
  690. package/catalog/knowledge/engineering/engineering-app-quality.yaml +20 -0
  691. package/catalog/knowledge/engineering/engineering-backend-data-contract.yaml +15 -0
  692. package/catalog/knowledge/engineering/engineering-engineering-orchestration.yaml +79 -0
  693. package/catalog/knowledge/engineering/engineering-expo-compatibility.yaml +44 -0
  694. package/catalog/knowledge/engineering/engineering-expo-operations-map.yaml +61 -0
  695. package/catalog/knowledge/engineering/engineering-expo-stack-selection.yaml +46 -0
  696. package/catalog/knowledge/engineering/engineering-external-skill-packs.yaml +112 -0
  697. package/catalog/knowledge/engineering/engineering-mobai-toolbelt.yaml +134 -0
  698. package/catalog/knowledge/engineering/engineering-recommended-agent-skills.yaml +66 -0
  699. package/catalog/knowledge/engineering/engineering-technical-documentation-ste100.yaml +16 -0
  700. package/catalog/knowledge/engineering/engineering-xcodebuildmcp-testing.yaml +344 -0
  701. package/catalog/knowledge/experience/experience-cards-commitment-card.yaml +14 -0
  702. package/catalog/knowledge/experience/experience-cards-endowed-progress-card.yaml +14 -0
  703. package/catalog/knowledge/experience/experience-cards-fresh-start-card.yaml +14 -0
  704. package/catalog/knowledge/experience/experience-cards-identity-and-self-expression-card.yaml +14 -0
  705. package/catalog/knowledge/experience/experience-cards-intent-mirroring-card.yaml +13 -0
  706. package/catalog/knowledge/experience/experience-cards-mastery-and-status-card.yaml +14 -0
  707. package/catalog/knowledge/experience/experience-cards-peak-end-card.yaml +14 -0
  708. package/catalog/knowledge/experience/experience-cards-perceived-effort-delay-card.yaml +13 -0
  709. package/catalog/knowledge/experience/experience-cards-reciprocity-card.yaml +13 -0
  710. package/catalog/knowledge/experience/experience-cards-recovery-and-trust-repair-card.yaml +13 -0
  711. package/catalog/knowledge/experience/experience-cards-streak-and-loss-aversion-card.yaml +14 -0
  712. package/catalog/knowledge/experience/experience-cards-variable-reward-card.yaml +14 -0
  713. package/catalog/knowledge/experience/experience-cards.yaml +26 -0
  714. package/catalog/knowledge/experience/experience-commitment-funnel.yaml +22 -0
  715. package/catalog/knowledge/experience/experience-consumer-product-design-agency.yaml +14 -0
  716. package/catalog/knowledge/experience/experience-eleven-star-experience.yaml +26 -0
  717. package/catalog/knowledge/experience/experience-emotional-design-system.yaml +27 -0
  718. package/catalog/knowledge/experience/experience-emotional-experience-design.yaml +15 -0
  719. package/catalog/knowledge/experience/experience-emotional-experience-measurement.yaml +15 -0
  720. package/catalog/knowledge/experience/experience-ethics-guardrail.yaml +20 -0
  721. package/catalog/knowledge/experience/experience-onboarding-conversion.yaml +87 -0
  722. package/catalog/knowledge/experience/experience-onboarding-foundations.yaml +32 -0
  723. package/catalog/knowledge/experience/experience-paywall-goal-headline.yaml +40 -0
  724. package/catalog/knowledge/experience/experience-push-notification-lifecycle.yaml +14 -0
  725. package/catalog/knowledge/growth/growth-appsflyer-mmp.yaml +33 -0
  726. package/catalog/knowledge/growth/growth-cro-landing.yaml +38 -0
  727. package/catalog/knowledge/growth/growth-fastlane-growth-ops.yaml +37 -0
  728. package/catalog/knowledge/growth/growth-geo-seo.yaml +26 -0
  729. package/catalog/knowledge/growth/growth-hdyhau-blended-roas.yaml +18 -0
  730. package/catalog/knowledge/growth/growth-influencer-sponsorship-engine.yaml +15 -0
  731. package/catalog/knowledge/growth/growth-ios-consumer-playbook-intake.yaml +19 -0
  732. package/catalog/knowledge/growth/growth-launch-narrative-cadence.yaml +77 -0
  733. package/catalog/knowledge/growth/growth-non-competitor-angle-discovery.yaml +18 -0
  734. package/catalog/knowledge/growth/growth-paid-user-acquisition.yaml +25 -0
  735. package/catalog/knowledge/growth/growth-ugc-creator-engine.yaml +17 -0
  736. package/catalog/knowledge/growth/growth-viral-growth-loops.yaml +17 -0
  737. package/catalog/knowledge/money/money-billing-health-and-reactivation.yaml +16 -0
  738. package/catalog/knowledge/money/money-offer-and-pricing-decisions.yaml +15 -0
  739. package/catalog/knowledge/money/money-paywall-pricing-and-experiments.yaml +27 -0
  740. package/catalog/knowledge/money/money-revenue-monetization.yaml +148 -0
  741. package/catalog/knowledge/money/money-revenuecat-agent-tooling.yaml +108 -0
  742. package/catalog/knowledge/money/money-revenuecat-and-store-products.yaml +16 -0
  743. package/catalog/knowledge/money/money-stripe-and-web-billing.yaml +15 -0
  744. package/catalog/knowledge/money/money-subscription-price-derivation.yaml +41 -0
  745. package/catalog/knowledge/operations/operations-autonomy-onboarding.yaml +16 -0
  746. package/catalog/knowledge/operations/operations-doppler-organization.yaml +16 -0
  747. package/catalog/knowledge/operations/operations-founder-zero-operator.yaml +64 -0
  748. package/catalog/knowledge/operations/operations-frontier-agent-operations.yaml +15 -0
  749. package/catalog/knowledge/operations/operations-paid-tool-routing.yaml +29 -0
  750. package/catalog/knowledge/operations/operations-post-launch-operations.yaml +19 -0
  751. package/catalog/knowledge/operations/operations-provider-state-recipes.yaml +15 -0
  752. package/catalog/knowledge/operations/operations-resend-email-ops.yaml +205 -0
  753. package/catalog/knowledge/operations/operations-secrets-management.yaml +70 -0
  754. package/catalog/knowledge/orchestration/orchestration-compound-engineering-routing.yaml +30 -0
  755. package/catalog/knowledge/orchestration/orchestration-dynamic-workflows.yaml +89 -0
  756. package/catalog/knowledge/orchestration/orchestration-full-launch-program.yaml +24 -0
  757. package/catalog/knowledge/orchestration/orchestration-isolated-review.yaml +54 -0
  758. package/catalog/knowledge/orchestration/orchestration-parallel-agent-orchestration.yaml +145 -0
  759. package/catalog/knowledge/orchestration/orchestration-project-state.yaml +25 -0
  760. package/catalog/knowledge/process/learning-audit-runs-from-repo-root.yaml +16 -0
  761. package/catalog/knowledge/process/process-artifact-contracts.yaml +33 -0
  762. package/catalog/knowledge/process/process-cascade-edges.yaml +15 -0
  763. package/catalog/knowledge/process/process-change-cascade.yaml +17 -0
  764. package/catalog/knowledge/process/process-current-truth.yaml +15 -0
  765. package/catalog/knowledge/process/process-failure-cards.yaml +34 -0
  766. package/catalog/knowledge/process/process-flow-traceability.yaml +18 -0
  767. package/catalog/knowledge/process/process-launch-coverage.yaml +18 -0
  768. package/catalog/knowledge/process/process-launch-phases.yaml +21 -0
  769. package/catalog/knowledge/process/process-learning-capture.yaml +34 -0
  770. package/catalog/knowledge/process/process-provider-contracts.yaml +16 -0
  771. package/catalog/knowledge/process/process-provider-proof.yaml +18 -0
  772. package/catalog/knowledge/process/process-repository-profiles.yaml +15 -0
  773. package/catalog/knowledge/process/process-tool-recipes-device-capture-and-proof.yaml +155 -0
  774. package/catalog/knowledge/process/process-tool-recipes-engineering-and-agent-orchestration.yaml +32 -0
  775. package/catalog/knowledge/process/process-tool-recipes-funnel-domain-and-privacy.yaml +23 -0
  776. package/catalog/knowledge/process/process-tool-recipes-growth-and-store-routing.yaml +57 -0
  777. package/catalog/knowledge/process/process-tool-recipes-research-intelligence.yaml +52 -0
  778. package/catalog/knowledge/process/process-tool-recipes-revenue-email-analytics.yaml +14 -0
  779. package/catalog/knowledge/process/process-tool-recipes-secrets-and-environment.yaml +30 -0
  780. package/catalog/knowledge/process/process-tool-recipes-visual-and-motion-production.yaml +15 -0
  781. package/catalog/knowledge/process/process-tool-recipes.yaml +16 -0
  782. package/catalog/knowledge/product/product-ai-chat-companion.yaml +22 -0
  783. package/catalog/knowledge/product/product-core-loop-and-complete-scope.yaml +18 -0
  784. package/catalog/knowledge/product/product-habit-tracker.yaml +14 -0
  785. package/catalog/knowledge/product/product-photo-ai-media.yaml +14 -0
  786. package/catalog/knowledge/product/product-product-moat.yaml +15 -0
  787. package/catalog/knowledge/product/product-social-network.yaml +14 -0
  788. package/catalog/knowledge/research/research-distribution-first-niche.yaml +20 -0
  789. package/catalog/knowledge/research/research-distribution-offer-signal.yaml +31 -0
  790. package/catalog/knowledge/research/research-go-pivot-or-kill.yaml +16 -0
  791. package/catalog/knowledge/research/research-localization-market-research.yaml +18 -0
  792. package/catalog/knowledge/research/research-transformation-demo.yaml +17 -0
  793. package/catalog/knowledge/store/store-age-rating-questionnaire.yaml +44 -0
  794. package/catalog/knowledge/store/store-app-review-observe.yaml +87 -0
  795. package/catalog/knowledge/store/store-app-review-remediate.yaml +59 -0
  796. package/catalog/knowledge/store/store-app-review-resubmit.yaml +42 -0
  797. package/catalog/knowledge/store/store-app-store-connect-cli.yaml +90 -0
  798. package/catalog/knowledge/store/store-app-store-listing-prep.yaml +309 -0
  799. package/catalog/knowledge/store/store-apple-signing-release.yaml +234 -0
  800. package/catalog/knowledge/store/store-aso-apple-keyword-evidence.yaml +44 -0
  801. package/catalog/knowledge/store/store-aso-store-ops.yaml +24 -0
  802. package/catalog/knowledge/store/store-google-play-release.yaml +45 -0
  803. package/catalog/knowledge/store/store-marketplace-regional-compliance.yaml +20 -0
  804. package/catalog/knowledge/store/store-screenshot-toolchain.yaml +100 -0
  805. package/catalog/knowledge/store/store-store-console-workflow.yaml +431 -0
  806. package/catalog/knowledge/trust/trust-community-safety.yaml +28 -0
  807. package/catalog/knowledge/trust/trust-generative-ai-safety.yaml +29 -0
  808. package/catalog/knowledge/trust/trust-paid-generative-ai-controls.yaml +34 -0
  809. package/catalog/knowledge/trust/trust-privacy-terms.yaml +26 -0
  810. package/catalog/knowledge/trust/trust-security-release-hardening.yaml +43 -0
  811. package/catalog/knowledge/words/words-consumer-copy-benchmarks.yaml +169 -0
  812. package/catalog/knowledge/words/words-conversion-copy.yaml +95 -0
  813. package/catalog/knowledge/words/words-no-slop-writing.yaml +35 -0
  814. package/catalog/knowledge-packages.ts +210 -0
  815. package/catalog/knowledge-validation.ts +168 -0
  816. package/catalog/lane-graph.ts +37 -0
  817. package/catalog/lanes.ts +61 -0
  818. package/catalog/ontology/design-surface-applicability.ts +447 -0
  819. package/catalog/ontology/instance-load.ts +96 -0
  820. package/catalog/ontology/instance-types.ts +66 -0
  821. package/catalog/ontology/instance-validate.ts +104 -0
  822. package/catalog/ontology/instance.schema.json +171 -0
  823. package/catalog/ontology/load.ts +191 -0
  824. package/catalog/ontology/onboarding-applicability.ts +191 -0
  825. package/catalog/ontology/product-workspace.ts +58 -0
  826. package/catalog/ontology/query.ts +64 -0
  827. package/catalog/ontology/render-product.ts +30 -0
  828. package/catalog/ontology/types.ts +116 -0
  829. package/catalog/ontology/validate.ts +205 -0
  830. package/catalog/ontology/world.schema.json +191 -0
  831. package/catalog/ontology/world.yaml +458 -0
  832. package/catalog/operators.ts +276 -0
  833. package/catalog/overlays.ts +28 -0
  834. package/catalog/packs/compose.ts +424 -0
  835. package/catalog/packs/consumer-app/acquisition.md +4 -0
  836. package/catalog/packs/consumer-app/activation.md +4 -0
  837. package/catalog/packs/consumer-app/pack.yaml +66 -0
  838. package/catalog/packs/consumer-app/referral.md +4 -0
  839. package/catalog/packs/consumer-app/retention.md +4 -0
  840. package/catalog/packs/consumer-app/revenue.md +4 -0
  841. package/catalog/packs/firstparty-assets.ts +62 -0
  842. package/catalog/packs/firstparty-notices.ts +61 -0
  843. package/catalog/packs/firstparty.ts +146 -0
  844. package/catalog/packs/food-product-contrast/conversion.md +4 -0
  845. package/catalog/packs/food-product-contrast/manufacturing.md +4 -0
  846. package/catalog/packs/food-product-contrast/pack.yaml +108 -0
  847. package/catalog/packs/food-product-contrast/promise.md +4 -0
  848. package/catalog/packs/food-product-contrast/regulatory.md +4 -0
  849. package/catalog/packs/food-product-contrast/retailer.md +4 -0
  850. package/catalog/packs/food-product-contrast/sku.md +4 -0
  851. package/catalog/packs/installed-firstparty.ts +17 -0
  852. package/catalog/packs/isolation.ts +99 -0
  853. package/catalog/packs/load.ts +547 -0
  854. package/catalog/packs/paid-generative-ai/pack.yaml +73 -0
  855. package/catalog/packs/snapshots.ts +115 -0
  856. package/catalog/packs/types.ts +71 -0
  857. package/catalog/packs/web-presence/pack.yaml +54 -0
  858. package/catalog/phases.ts +139 -0
  859. package/catalog/principles/guards.ts +113 -0
  860. package/catalog/principles/load.ts +202 -0
  861. package/catalog/principles/principles.yaml +796 -0
  862. package/catalog/principles/types.ts +87 -0
  863. package/catalog/principles/vocabulary.yaml +68 -0
  864. package/catalog/profiles.ts +47 -0
  865. package/catalog/providers/agent-runtime-claude.yaml +17 -0
  866. package/catalog/providers/apple-asc-canonical-map.ts +499 -0
  867. package/catalog/providers/apple-asc.yaml +30 -0
  868. package/catalog/providers/capability-delta.yaml +41 -0
  869. package/catalog/providers/conformance.ts +64 -0
  870. package/catalog/providers/greenfield-70-applicability-closeout-map.ts +243 -0
  871. package/catalog/providers/greenfield-71-handoff-closeout-map.ts +376 -0
  872. package/catalog/providers/greenfield-72-benchmark-closeout-map.ts +502 -0
  873. package/catalog/providers/greenfield-73-overhead-closeout-map.ts +318 -0
  874. package/catalog/providers/greenfield-75-retrieval-closeout-map.ts +328 -0
  875. package/catalog/providers/greenfield-76-change-impact-closeout-map.ts +336 -0
  876. package/catalog/providers/greenfield-delivery-audit-map.ts +382 -0
  877. package/catalog/providers/growth-agent-canonical-map.ts +669 -0
  878. package/catalog/providers/mobile-ops-canonical-map.ts +581 -0
  879. package/catalog/providers/revenuecat.yaml +25 -0
  880. package/catalog/providers/semantic-batch-map.ts +70 -0
  881. package/catalog/providers/semantic-eval-baselines-map.ts +897 -0
  882. package/catalog/providers/semantic-graph-views-map.ts +74 -0
  883. package/catalog/providers/semantic-plan-lower-map.ts +62 -0
  884. package/catalog/providers/semantic-source-projection-map.ts +96 -0
  885. package/catalog/providers/superwall-canonical-map.ts +379 -0
  886. package/catalog/providers/typesafe-qualify-map.ts +250 -0
  887. package/catalog/recipes/default-monetization.ts +9 -0
  888. package/catalog/render-routing.ts +410 -0
  889. package/catalog/repository-profiles/compile.ts +435 -0
  890. package/catalog/repository-profiles/index.ts +19 -0
  891. package/catalog/repository-profiles/paid-generation-applicability.ts +106 -0
  892. package/catalog/repository-profiles/registry.ts +83 -0
  893. package/catalog/repository-profiles/types.ts +98 -0
  894. package/catalog/repository-profiles/workspace.ts +127 -0
  895. package/catalog/roles.ts +435 -0
  896. package/catalog/stacks/expo-agent-privacy.ts +140 -0
  897. package/catalog/stacks/expo-agent-tools.ts +337 -0
  898. package/catalog/stacks/expo-capability-matrix.ts +260 -0
  899. package/catalog/stacks/expo-capability-protocol.ts +775 -0
  900. package/catalog/stacks/expo-custom-module.ts +465 -0
  901. package/catalog/stacks/expo-eas-commands.ts +779 -0
  902. package/catalog/stacks/expo-eas-hosting.ts +224 -0
  903. package/catalog/stacks/expo-eas-operation-matrix.ts +243 -0
  904. package/catalog/stacks/expo-local-boot.ts +354 -0
  905. package/catalog/stacks/expo-local-capabilities.ts +328 -0
  906. package/catalog/stacks/expo-native-ownership.ts +469 -0
  907. package/catalog/stacks/expo-observability.ts +142 -0
  908. package/catalog/stacks/expo-proof-collection.ts +286 -0
  909. package/catalog/stacks/expo-quality-evidence.ts +212 -0
  910. package/catalog/stacks/expo-revenuecat-wiring.ts +168 -0
  911. package/catalog/stacks/expo-router-contract.ts +399 -0
  912. package/catalog/stacks/expo-sdk-upgrade.ts +186 -0
  913. package/catalog/stacks/expo-selection.ts +736 -0
  914. package/catalog/stacks/expo-starter-fixture/README.md +13 -0
  915. package/catalog/stacks/expo-starter-fixture/app/(tabs)/_layout.tsx +11 -0
  916. package/catalog/stacks/expo-starter-fixture/app/(tabs)/index.tsx +1 -0
  917. package/catalog/stacks/expo-starter-fixture/app/(tabs)/settings.tsx +1 -0
  918. package/catalog/stacks/expo-starter-fixture/app/+not-found.tsx +1 -0
  919. package/catalog/stacks/expo-starter-fixture/app/README.md +1 -0
  920. package/catalog/stacks/expo-starter-fixture/app/_layout.tsx +16 -0
  921. package/catalog/stacks/expo-starter-fixture/app/detail/[id].tsx +7 -0
  922. package/catalog/stacks/expo-starter-fixture/app/modal.tsx +1 -0
  923. package/catalog/stacks/expo-starter-fixture/app/sign-in.tsx +1 -0
  924. package/catalog/stacks/expo-starter-fixture/app.json +26 -0
  925. package/catalog/stacks/expo-starter-fixture/babel.config.js +4 -0
  926. package/catalog/stacks/expo-starter-fixture/gitignore.template +14 -0
  927. package/catalog/stacks/expo-starter-fixture/metro.config.js +3 -0
  928. package/catalog/stacks/expo-starter-fixture/modules/b2c-native-capability/NOTICE +1 -0
  929. package/catalog/stacks/expo-starter-fixture/modules/b2c-native-capability/README.md +1 -0
  930. package/catalog/stacks/expo-starter-fixture/modules/b2c-native-capability/android/build.gradle +15 -0
  931. package/catalog/stacks/expo-starter-fixture/modules/b2c-native-capability/android/src/main/AndroidManifest.xml +1 -0
  932. package/catalog/stacks/expo-starter-fixture/modules/b2c-native-capability/android/src/main/java/app/example/b2cnativecapability/B2cNativeCapabilityModule.kt +19 -0
  933. package/catalog/stacks/expo-starter-fixture/modules/b2c-native-capability/expo-module.config.json +9 -0
  934. package/catalog/stacks/expo-starter-fixture/modules/b2c-native-capability/ios/B2cNativeCapability.podspec +22 -0
  935. package/catalog/stacks/expo-starter-fixture/modules/b2c-native-capability/ios/B2cNativeCapabilityModule.swift +16 -0
  936. package/catalog/stacks/expo-starter-fixture/modules/b2c-native-capability/package.json +15 -0
  937. package/catalog/stacks/expo-starter-fixture/modules/b2c-native-capability/src/capability.ts +48 -0
  938. package/catalog/stacks/expo-starter-fixture/modules/b2c-native-capability/src/index.ts +3 -0
  939. package/catalog/stacks/expo-starter-fixture/modules/b2c-native-capability/src/index.web.ts +9 -0
  940. package/catalog/stacks/expo-starter-fixture/modules/b2c-native-capability/src/invoke.ts +13 -0
  941. package/catalog/stacks/expo-starter-fixture/package.json +38 -0
  942. package/catalog/stacks/expo-starter-fixture/src/capabilities/reducers.ts +146 -0
  943. package/catalog/stacks/expo-starter-fixture/src/native/capability-status.tsx +37 -0
  944. package/catalog/stacks/expo-starter-fixture/src/native/capability-status.web.tsx +13 -0
  945. package/catalog/stacks/expo-starter-fixture/src/navigation/deep-link.ts +12 -0
  946. package/catalog/stacks/expo-starter-fixture/src/navigation/journeys.ts +115 -0
  947. package/catalog/stacks/expo-starter-fixture/src/navigation/route-graph.ts +45 -0
  948. package/catalog/stacks/expo-starter-fixture/src/notifications/handoff.ts +13 -0
  949. package/catalog/stacks/expo-starter-fixture/src/offline/local-cache.ts +72 -0
  950. package/catalog/stacks/expo-starter-fixture/src/permissions/safe-state.ts +11 -0
  951. package/catalog/stacks/expo-starter-fixture/src/persistence/seam.ts +28 -0
  952. package/catalog/stacks/expo-starter-fixture/src/screens/detail.tsx +20 -0
  953. package/catalog/stacks/expo-starter-fixture/src/screens/home.tsx +84 -0
  954. package/catalog/stacks/expo-starter-fixture/src/screens/modal.tsx +18 -0
  955. package/catalog/stacks/expo-starter-fixture/src/screens/not-found.tsx +18 -0
  956. package/catalog/stacks/expo-starter-fixture/src/screens/settings.tsx +40 -0
  957. package/catalog/stacks/expo-starter-fixture/src/screens/sign-in.tsx +34 -0
  958. package/catalog/stacks/expo-starter-fixture/src/session/local-session.ts +22 -0
  959. package/catalog/stacks/expo-starter-fixture/src/states/surface-state.ts +16 -0
  960. package/catalog/stacks/expo-starter-fixture/src/ui/contract-binding.ts +9 -0
  961. package/catalog/stacks/expo-starter-fixture/src/ui/empty-state.tsx +22 -0
  962. package/catalog/stacks/expo-starter-fixture/src/ui/haptics.tsx +33 -0
  963. package/catalog/stacks/expo-starter-fixture/src/ui/keyboard-behavior.tsx +18 -0
  964. package/catalog/stacks/expo-starter-fixture/src/ui/press-feedback.tsx +37 -0
  965. package/catalog/stacks/expo-starter-fixture/src/ui/skeleton.tsx +53 -0
  966. package/catalog/stacks/expo-starter-fixture/src/ui/tokens.ts +5 -0
  967. package/catalog/stacks/expo-starter-fixture/tsconfig.json +8 -0
  968. package/catalog/stacks/expo-starter.ts +400 -0
  969. package/catalog/stacks/expo-web-api-routes.ts +237 -0
  970. package/catalog/stacks/expo-web-static.ts +560 -0
  971. package/catalog/stacks/expo-web-surface-table.ts +228 -0
  972. package/catalog/task-skills.ts +369 -0
  973. package/catalog/taxonomy/concept-scheme.schema.json +92 -0
  974. package/catalog/taxonomy/concept-scheme.yaml +978 -0
  975. package/catalog/taxonomy/load.ts +115 -0
  976. package/catalog/taxonomy/types.ts +79 -0
  977. package/catalog/taxonomy/validate.ts +234 -0
  978. package/catalog/types.ts +452 -0
  979. package/catalog/upstreams/README.md +23 -0
  980. package/catalog/upstreams/amir-brand-system.yaml +78 -0
  981. package/catalog/upstreams/amir-cinematic-scroll.yaml +84 -0
  982. package/catalog/upstreams/appllama-skills.yaml +129 -0
  983. package/catalog/upstreams/eronred-aso-skills.yaml +107 -0
  984. package/catalog/upstreams/evanbacon-serve-sim.yaml +102 -0
  985. package/catalog/upstreams/last30days-skill.yaml +128 -0
  986. package/catalog/upstreams/layers-growth-mcp.yaml +128 -0
  987. package/catalog/upstreams/notices/amir-brand-system.txt +395 -0
  988. package/catalog/upstreams/notices/amir-cinematic-scroll.txt +21 -0
  989. package/catalog/upstreams/notices/appllama-skills.txt +21 -0
  990. package/catalog/upstreams/notices/eronred-aso-skills.txt +21 -0
  991. package/catalog/upstreams/notices/evanbacon-serve-sim.txt +202 -0
  992. package/catalog/upstreams/notices/last30days-skill.txt +21 -0
  993. package/catalog/upstreams/notices/layers-growth-mcp.txt +21 -0
  994. package/catalog/upstreams/notices/parth-app-store-screenshots.txt +21 -0
  995. package/catalog/upstreams/notices/posthog-wizard.txt +21 -0
  996. package/catalog/upstreams/notices/revenuecat-ai-toolkit.txt +21 -0
  997. package/catalog/upstreams/notices/revenuecat-cli.txt +21 -0
  998. package/catalog/upstreams/notices/rork-app-store-connect-cli-skills.txt +21 -0
  999. package/catalog/upstreams/notices/rork-app-store-connect-cli.txt +21 -0
  1000. package/catalog/upstreams/notices/sentry-snapshotpreviews.txt +22 -0
  1001. package/catalog/upstreams/notices/sentry-xcodebuildmcp.txt +21 -0
  1002. package/catalog/upstreams/notices/typesafe-ai.txt +21 -0
  1003. package/catalog/upstreams/observations/eronred-aso-skills.json +20 -0
  1004. package/catalog/upstreams/observations/evanbacon-serve-sim.json +20 -0
  1005. package/catalog/upstreams/observations/parth-app-store-screenshots.json +20 -0
  1006. package/catalog/upstreams/observations/posthog-context-mill.json +28 -0
  1007. package/catalog/upstreams/observations/posthog-wizard.json +27 -0
  1008. package/catalog/upstreams/observations/revenuecat-ai-toolkit.json +27 -0
  1009. package/catalog/upstreams/observations/revenuecat-cli.json +27 -0
  1010. package/catalog/upstreams/observations/rork-app-store-connect-cli.json +78 -0
  1011. package/catalog/upstreams/observations/sentry-snapshotpreviews.json +23 -0
  1012. package/catalog/upstreams/observations/sentry-xcodebuildmcp.json +23 -0
  1013. package/catalog/upstreams/observations/typesafe-ai.json +30 -0
  1014. package/catalog/upstreams/parth-app-store-screenshots.yaml +105 -0
  1015. package/catalog/upstreams/posthog-context-mill.yaml +62 -0
  1016. package/catalog/upstreams/posthog-wizard.yaml +74 -0
  1017. package/catalog/upstreams/revenuecat-ai-toolkit.yaml +98 -0
  1018. package/catalog/upstreams/revenuecat-cli.yaml +166 -0
  1019. package/catalog/upstreams/rork-app-store-connect-cli-skills.yaml +100 -0
  1020. package/catalog/upstreams/rork-app-store-connect-cli.yaml +211 -0
  1021. package/catalog/upstreams/sentry-snapshotpreviews.yaml +103 -0
  1022. package/catalog/upstreams/sentry-xcodebuildmcp.yaml +101 -0
  1023. package/catalog/upstreams/typesafe-ai.yaml +144 -0
  1024. package/catalog/validate.ts +898 -0
  1025. package/catalog/workflows/build-release.ts +735 -0
  1026. package/catalog/workflows/growth-revenue.ts +338 -0
  1027. package/catalog/workflows/helpers.ts +103 -0
  1028. package/catalog/workflows/index.ts +9 -0
  1029. package/catalog/workflows/maintenance.ts +283 -0
  1030. package/catalog/workflows/operating-system.ts +261 -0
  1031. package/catalog/workflows/operations-trust.ts +425 -0
  1032. package/catalog/workflows/product-experience.ts +1263 -0
  1033. package/checks/validation/README.md +6 -0
  1034. package/checks/validation/business/data/check-analytics-catalog.ts +166 -0
  1035. package/checks/validation/business/data/check-attribution-contract.ts +731 -0
  1036. package/checks/validation/business/design/check-audience-identity.ts +260 -0
  1037. package/checks/validation/business/design/check-browser-runtime-proof.ts +269 -0
  1038. package/checks/validation/business/design/check-component-contracts.ts +365 -0
  1039. package/checks/validation/business/design/check-content-assets.ts +600 -0
  1040. package/checks/validation/business/design/check-design-acceptance.ts +6 -0
  1041. package/checks/validation/business/design/check-design-md.ts +19 -0
  1042. package/checks/validation/business/design/check-design-room-contract.ts +200 -0
  1043. package/checks/validation/business/design/check-design-worthiness.ts +710 -0
  1044. package/checks/validation/business/design/check-motion-contract.ts +1374 -0
  1045. package/checks/validation/business/design/check-scrollytelling-contract.ts +1486 -0
  1046. package/checks/validation/business/design/check-token-promotion.ts +75 -0
  1047. package/checks/validation/business/design/check-vibecoded-tells.ts +396 -0
  1048. package/checks/validation/business/design/color-contrast.ts +45 -0
  1049. package/checks/validation/business/design/design-acceptance.ts +1861 -0
  1050. package/checks/validation/business/design/lib/legal-navigation.ts +1766 -0
  1051. package/checks/validation/business/design/lib/vibecode-tells.ts +112 -0
  1052. package/checks/validation/business/design/lib/worthiness-mechanical.ts +196 -0
  1053. package/checks/validation/business/design/runtime-reviewer-inputs.ts +59 -0
  1054. package/checks/validation/business/design/surface-page-gates.ts +191 -0
  1055. package/checks/validation/business/design/validate-state.ts +15 -0
  1056. package/checks/validation/business/engineering/check-archetype-starter.ts +457 -0
  1057. package/checks/validation/business/engineering/check-backend-data-contract.ts +151 -0
  1058. package/checks/validation/business/engineering/check-compound-engineering-routing.ts +153 -0
  1059. package/checks/validation/business/engineering/check-mobai-proof.ts +486 -0
  1060. package/checks/validation/business/engineering/check-native-android-proof.ts +486 -0
  1061. package/checks/validation/business/engineering/check-native-ios-proof.ts +465 -0
  1062. package/checks/validation/business/engineering/check-readiness-coverage.ts +242 -0
  1063. package/checks/validation/business/engineering/check-roster-headless-safety.ts +70 -0
  1064. package/checks/validation/business/engineering/check-roster-overlap.ts +159 -0
  1065. package/checks/validation/business/engineering/check-source-checkpoint.ts +123 -0
  1066. package/checks/validation/business/engineering/check-technical-docs-ste100.ts +319 -0
  1067. package/checks/validation/business/engineering/check-template-safety.ts +75 -0
  1068. package/checks/validation/business/engineering/native-ios-retained-proof.ts +128 -0
  1069. package/checks/validation/business/engineering/strict-ios-receipt.ts +387 -0
  1070. package/checks/validation/business/experience/check-emotional-design.ts +1246 -0
  1071. package/checks/validation/business/experience/check-onboarding-cutover-repository.ts +157 -0
  1072. package/checks/validation/business/experience/check-onboarding-evidence-packet.ts +263 -0
  1073. package/checks/validation/business/experience/check-onboarding-foundations.ts +16 -0
  1074. package/checks/validation/business/experience/check-onboarding-graph.ts +795 -0
  1075. package/checks/validation/business/experience/onboarding-foundations.ts +372 -0
  1076. package/checks/validation/business/growth/check-landing-funnel.ts +593 -0
  1077. package/checks/validation/business/growth/check-paid-user-acquisition.ts +601 -0
  1078. package/checks/validation/business/money/check-price-derivation.ts +127 -0
  1079. package/checks/validation/business/money/check-revenue.ts +72 -0
  1080. package/checks/validation/business/money/price-evidence.ts +37 -0
  1081. package/checks/validation/business/operations/check-agent-operations.ts +709 -0
  1082. package/checks/validation/business/operations/check-email.ts +356 -0
  1083. package/checks/validation/business/operations/check-founder-operator-bootstrap.ts +759 -0
  1084. package/checks/validation/business/operations/check-metric-contracts.ts +114 -0
  1085. package/checks/validation/business/operations/check-paid-tool-intake.ts +71 -0
  1086. package/checks/validation/business/operations/check-portfolio-registry.ts +99 -0
  1087. package/checks/validation/business/operations/check-post-launch-ops.ts +834 -0
  1088. package/checks/validation/business/orchestration/check-continuity-contract.ts +266 -0
  1089. package/checks/validation/business/orchestration/check-parallel-orchestration.ts +218 -0
  1090. package/checks/validation/business/orchestration/validate-project-state.ts +357 -0
  1091. package/checks/validation/business/process/check-artifact-templates.ts +103 -0
  1092. package/checks/validation/business/process/check-change-cascade.ts +318 -0
  1093. package/checks/validation/business/process/check-generated-pages.ts +153 -0
  1094. package/checks/validation/business/process/check-lane-coverage.ts +377 -0
  1095. package/checks/validation/business/process/check-live-provider-proof.ts +284 -0
  1096. package/checks/validation/business/process/check-repository-profile.ts +43 -0
  1097. package/checks/validation/business/product/check-app-archetype.ts +266 -0
  1098. package/checks/validation/business/product/check-product-md.ts +67 -0
  1099. package/checks/validation/business/research/check-evidence-schema-drift.ts +50 -0
  1100. package/checks/validation/business/research/check-localization-research.ts +144 -0
  1101. package/checks/validation/business/research/check-research-evidence.ts +1324 -0
  1102. package/checks/validation/business/research/offer-evidence.ts +360 -0
  1103. package/checks/validation/business/research/render-evidence-markdown.ts +378 -0
  1104. package/checks/validation/business/research/research-evidence-helpers.ts +21 -0
  1105. package/checks/validation/business/store/check-app-review-contract.ts +433 -0
  1106. package/checks/validation/business/store/check-app-store-portfolio.ts +279 -0
  1107. package/checks/validation/business/store/check-apple-app-store-requirements.ts +735 -0
  1108. package/checks/validation/business/store/check-asc-command-contract.ts +175 -0
  1109. package/checks/validation/business/store/check-aso-evidence.ts +162 -0
  1110. package/checks/validation/business/store/check-store-console-packet.ts +480 -0
  1111. package/checks/validation/business/store/check-store-screenshots.ts +1113 -0
  1112. package/checks/validation/business/trust/check-ai-provider-controls.ts +127 -0
  1113. package/checks/validation/business/trust/check-privacy-terms.ts +238 -0
  1114. package/checks/validation/business/trust/check-secret-routing.ts +233 -0
  1115. package/checks/validation/business/trust/check-security-release.ts +199 -0
  1116. package/checks/validation/business/words/check-app-copy.ts +1019 -0
  1117. package/checks/validation/business/words/check-founder-copy.ts +471 -0
  1118. package/checks/validation/business/words/check-no-slop.ts +148 -0
  1119. package/checks/validation/repository/README.md +31 -0
  1120. package/checks/validation/repository/agent-guidance-contract.ts +283 -0
  1121. package/checks/validation/repository/audit-skill-links.ts +176 -0
  1122. package/checks/validation/repository/check-agent-entrypoints.ts +259 -0
  1123. package/checks/validation/repository/check-architecture.ts +393 -0
  1124. package/checks/validation/repository/check-autopilot-contract.ts +277 -0
  1125. package/checks/validation/repository/check-capability-delta.ts +30 -0
  1126. package/checks/validation/repository/check-catalog.ts +88 -0
  1127. package/checks/validation/repository/check-engine-e2e.ts +609 -0
  1128. package/checks/validation/repository/check-gates-layout.ts +109 -0
  1129. package/checks/validation/repository/check-graph-foundations.ts +158 -0
  1130. package/checks/validation/repository/check-hub-spoke.ts +144 -0
  1131. package/checks/validation/repository/check-learning-grounding.ts +323 -0
  1132. package/checks/validation/repository/check-operating-graph.ts +205 -0
  1133. package/checks/validation/repository/check-pack-composition.ts +94 -0
  1134. package/checks/validation/repository/check-package-parity.ts +632 -0
  1135. package/checks/validation/repository/check-provider-boundary.ts +154 -0
  1136. package/checks/validation/repository/check-provider-contracts.ts +24 -0
  1137. package/checks/validation/repository/check-reference-size.ts +354 -0
  1138. package/checks/validation/repository/check-repository-boundary.ts +2385 -0
  1139. package/checks/validation/repository/check-skill-supply-chain.ts +290 -0
  1140. package/checks/validation/repository/check-skill-version.ts +363 -0
  1141. package/checks/validation/repository/check-source-freshness.ts +627 -0
  1142. package/checks/validation/repository/check-task-skills.ts +40 -0
  1143. package/checks/validation/repository/check-upstreams.ts +189 -0
  1144. package/checks/validation/repository/check-validator-docs.ts +84 -0
  1145. package/checks/validation/repository/check-version-discipline.ts +314 -0
  1146. package/checks/validation/repository/evals/agent-behavior/ai-chat-companion-archetype-prompt-pack.yaml +21 -0
  1147. package/checks/validation/repository/evals/agent-behavior/appllama-provider-boundary.yaml +18 -0
  1148. package/checks/validation/repository/evals/agent-behavior/compound-engineering-core-work.yaml +16 -0
  1149. package/checks/validation/repository/evals/agent-behavior/design-room-state-render.yaml +15 -0
  1150. package/checks/validation/repository/evals/agent-behavior/first-run-asc-command-contract.yaml +22 -0
  1151. package/checks/validation/repository/evals/agent-behavior/first-run-doctor-asc-winner.yaml +27 -0
  1152. package/checks/validation/repository/evals/agent-behavior/first-run-phase0-apple-honesty.yaml +28 -0
  1153. package/checks/validation/repository/evals/agent-behavior/first-run-portfolio-hold.yaml +29 -0
  1154. package/checks/validation/repository/evals/agent-behavior/first-run-tool-intake-fallback.yaml +32 -0
  1155. package/checks/validation/repository/evals/agent-behavior/founder-zero-business-operator.yaml +28 -0
  1156. package/checks/validation/repository/evals/agent-behavior/frontier-agent-operations.yaml +25 -0
  1157. package/checks/validation/repository/evals/agent-behavior/habit-tracker-archetype-prompt-pack.yaml +22 -0
  1158. package/checks/validation/repository/evals/agent-behavior/last30days-research-boundary.yaml +22 -0
  1159. package/checks/validation/repository/evals/agent-behavior/mobile-flow-craft.yaml +23 -0
  1160. package/checks/validation/repository/evals/agent-behavior/onboarding-review-after-engaged-normal-use.yaml +21 -0
  1161. package/checks/validation/repository/evals/agent-behavior/onboarding-system-graph-rebuild.yaml +26 -0
  1162. package/checks/validation/repository/evals/agent-behavior/photo-ai-media-archetype-prompt-pack.yaml +26 -0
  1163. package/checks/validation/repository/evals/agent-behavior/post-launch-ops-live-app.yaml +27 -0
  1164. package/checks/validation/repository/evals/agent-behavior/provider-proof-before-ready.yaml +15 -0
  1165. package/checks/validation/repository/evals/agent-behavior/session-continuity-resume.yaml +19 -0
  1166. package/checks/validation/repository/evals/agent-behavior/social-network-archetype-prompt-pack.yaml +21 -0
  1167. package/checks/validation/repository/evals/agent-behavior/stale-skill-upgrade.yaml +14 -0
  1168. package/checks/validation/repository/evals/agent-behavior/task-skill-alternate-provider.yaml +17 -0
  1169. package/checks/validation/repository/evals/agent-behavior/task-skill-focused-onboarding.yaml +17 -0
  1170. package/checks/validation/repository/evals/agent-behavior/task-skill-managed-continuation.yaml +17 -0
  1171. package/checks/validation/repository/evals/agent-behavior/task-skill-missing-runtime.yaml +17 -0
  1172. package/checks/validation/repository/evals/launchbench/age-rating-questionnaire-missing.yaml +21 -0
  1173. package/checks/validation/repository/evals/launchbench/agent-behavior-evals-missing.yaml +11 -0
  1174. package/checks/validation/repository/evals/launchbench/app-archetype-pack-incomplete.yaml +15 -0
  1175. package/checks/validation/repository/evals/launchbench/app-preview-video-hook-missing.yaml +14 -0
  1176. package/checks/validation/repository/evals/launchbench/app-price-vs-iap-confusion.yaml +29 -0
  1177. package/checks/validation/repository/evals/launchbench/app-review-accepted-webhook-not-consumed.yaml +16 -0
  1178. package/checks/validation/repository/evals/launchbench/app-review-agreements-status-blocks-poll.yaml +18 -0
  1179. package/checks/validation/repository/evals/launchbench/app-review-binary-old-archive.yaml +18 -0
  1180. package/checks/validation/repository/evals/launchbench/app-review-consume-fixture-as-truth.yaml +17 -0
  1181. package/checks/validation/repository/evals/launchbench/app-review-consumed-envelope-left-in-queue.yaml +21 -0
  1182. package/checks/validation/repository/evals/launchbench/app-review-invalid-state.yaml +16 -0
  1183. package/checks/validation/repository/evals/launchbench/app-review-live-poll-created-date.yaml +18 -0
  1184. package/checks/validation/repository/evals/launchbench/app-review-missing-49-capability.yaml +16 -0
  1185. package/checks/validation/repository/evals/launchbench/app-review-missing-state.yaml +16 -0
  1186. package/checks/validation/repository/evals/launchbench/app-review-pending-agreement.yaml +16 -0
  1187. package/checks/validation/repository/evals/launchbench/app-review-protected-policy.yaml +18 -0
  1188. package/checks/validation/repository/evals/launchbench/app-review-resubmit-cycle-cap.yaml +18 -0
  1189. package/checks/validation/repository/evals/launchbench/app-review-resubmit-timeout-readback.yaml +16 -0
  1190. package/checks/validation/repository/evals/launchbench/app-review-resubmit-unauthorized.yaml +18 -0
  1191. package/checks/validation/repository/evals/launchbench/app-review-reviewer-injection.yaml +18 -0
  1192. package/checks/validation/repository/evals/launchbench/app-review-unknown-state.yaml +17 -0
  1193. package/checks/validation/repository/evals/launchbench/app-review-unobserved-shape.yaml +17 -0
  1194. package/checks/validation/repository/evals/launchbench/app-review-unsigned-webhook.yaml +17 -0
  1195. package/checks/validation/repository/evals/launchbench/app-review-verifier-self.yaml +19 -0
  1196. package/checks/validation/repository/evals/launchbench/app-review-web-session-missing.yaml +19 -0
  1197. package/checks/validation/repository/evals/launchbench/app-review-webhook-payload-as-truth.yaml +19 -0
  1198. package/checks/validation/repository/evals/launchbench/app-review-webhooks-serve.yaml +17 -0
  1199. package/checks/validation/repository/evals/launchbench/app-store-screenshots-unvalidated.yaml +26 -0
  1200. package/checks/validation/repository/evals/launchbench/app-strings-hardcoded-not-localization-ready.yaml +16 -0
  1201. package/checks/validation/repository/evals/launchbench/app-ui-copy-reads-like-spec.yaml +15 -0
  1202. package/checks/validation/repository/evals/launchbench/apple-requirements-thin.yaml +15 -0
  1203. package/checks/validation/repository/evals/launchbench/apple-signing-pre-upload-checklist.yaml +57 -0
  1204. package/checks/validation/repository/evals/launchbench/apple-simulator-only.yaml +13 -0
  1205. package/checks/validation/repository/evals/launchbench/archetype-starter-ignored.yaml +17 -0
  1206. package/checks/validation/repository/evals/launchbench/artifact-template-coverage-gap.yaml +11 -0
  1207. package/checks/validation/repository/evals/launchbench/asc-auth-recovery-not-attempted.yaml +23 -0
  1208. package/checks/validation/repository/evals/launchbench/asc-auth-unverifiable-on-knowledge-surface.yaml +38 -0
  1209. package/checks/validation/repository/evals/launchbench/asc-cli-app-create-screenshot-orchestration-missed.yaml +29 -0
  1210. package/checks/validation/repository/evals/launchbench/asc-flag-drift-runtime.yaml +16 -0
  1211. package/checks/validation/repository/evals/launchbench/asc-listing-thin.yaml +21 -0
  1212. package/checks/validation/repository/evals/launchbench/asc-name-fallback.yaml +12 -0
  1213. package/checks/validation/repository/evals/launchbench/asc-promoted-iap-image-duplicate.yaml +16 -0
  1214. package/checks/validation/repository/evals/launchbench/asc-review-information-missing.yaml +16 -0
  1215. package/checks/validation/repository/evals/launchbench/asc-stale-command-guidance.yaml +20 -0
  1216. package/checks/validation/repository/evals/launchbench/aso-discover-without-ads.yaml +18 -0
  1217. package/checks/validation/repository/evals/launchbench/aso-metadata-appkittie-skipped.yaml +29 -0
  1218. package/checks/validation/repository/evals/launchbench/aso-metadata-stale-log-source.yaml +25 -0
  1219. package/checks/validation/repository/evals/launchbench/aso-unavailable-fabricated.yaml +18 -0
  1220. package/checks/validation/repository/evals/launchbench/attribution-event-only.yaml +15 -0
  1221. package/checks/validation/repository/evals/launchbench/authenticated-browser-mutation-unapproved.yaml +19 -0
  1222. package/checks/validation/repository/evals/launchbench/backend-data-contract-missing.yaml +35 -0
  1223. package/checks/validation/repository/evals/launchbench/behavioral-eval-split-misclaimed.yaml +15 -0
  1224. package/checks/validation/repository/evals/launchbench/broad-request-narrated-not-routed.yaml +32 -0
  1225. package/checks/validation/repository/evals/launchbench/browser-action-state-not-reconciled.yaml +17 -0
  1226. package/checks/validation/repository/evals/launchbench/browser-capability-skipped.yaml +21 -0
  1227. package/checks/validation/repository/evals/launchbench/browser-prompt-injection-followed.yaml +18 -0
  1228. package/checks/validation/repository/evals/launchbench/browser-research-untraceable.yaml +19 -0
  1229. package/checks/validation/repository/evals/launchbench/ce-unavailable-standalone-loop-missing.yaml +33 -0
  1230. package/checks/validation/repository/evals/launchbench/change-cascade-incomplete.yaml +18 -0
  1231. package/checks/validation/repository/evals/launchbench/commitment-funnel-missing.yaml +22 -0
  1232. package/checks/validation/repository/evals/launchbench/compound-freshness-not-checked.yaml +22 -0
  1233. package/checks/validation/repository/evals/launchbench/compound-routing-skipped.yaml +22 -0
  1234. package/checks/validation/repository/evals/launchbench/context-budget-exceeded.yaml +14 -0
  1235. package/checks/validation/repository/evals/launchbench/continuity-drift-between-sessions.yaml +23 -0
  1236. package/checks/validation/repository/evals/launchbench/copy-deck-skipped-during-build.yaml +15 -0
  1237. package/checks/validation/repository/evals/launchbench/copy-ip-sweep-altered-brand-vocabulary.yaml +15 -0
  1238. package/checks/validation/repository/evals/launchbench/design-evidence-pass-skipped.yaml +32 -0
  1239. package/checks/validation/repository/evals/launchbench/design-lock-landing-fanout-skipped.yaml +20 -0
  1240. package/checks/validation/repository/evals/launchbench/design-room-freeform-proposal.yaml +25 -0
  1241. package/checks/validation/repository/evals/launchbench/design-token-promotion-missing.yaml +11 -0
  1242. package/checks/validation/repository/evals/launchbench/design-worthiness-contrast-fail.yaml +15 -0
  1243. package/checks/validation/repository/evals/launchbench/design-worthiness-taste-missing.yaml +16 -0
  1244. package/checks/validation/repository/evals/launchbench/distribution-first-compliments.yaml +17 -0
  1245. package/checks/validation/repository/evals/launchbench/doppler-config-name-and-credential-routing.yaml +29 -0
  1246. package/checks/validation/repository/evals/launchbench/doppler-raw-token-requested.yaml +18 -0
  1247. package/checks/validation/repository/evals/launchbench/email-lane-deep-proof-missing.yaml +13 -0
  1248. package/checks/validation/repository/evals/launchbench/emotional-audit-prose-without-card-mapping.yaml +14 -0
  1249. package/checks/validation/repository/evals/launchbench/emotional-claim-without-research-grounding.yaml +14 -0
  1250. package/checks/validation/repository/evals/launchbench/emotional-design-system-missing.yaml +14 -0
  1251. package/checks/validation/repository/evals/launchbench/evidence-bar-overengineered.yaml +34 -0
  1252. package/checks/validation/repository/evals/launchbench/founder-gate-deferred-forever.yaml +33 -0
  1253. package/checks/validation/repository/evals/launchbench/founder-gate-jargon-without-choice.yaml +27 -0
  1254. package/checks/validation/repository/evals/launchbench/founder-zero-operator-skipped.yaml +20 -0
  1255. package/checks/validation/repository/evals/launchbench/geo-seo-landing-copy-skipped.yaml +20 -0
  1256. package/checks/validation/repository/evals/launchbench/graph-foundations-unenforceable-principle.yaml +22 -0
  1257. package/checks/validation/repository/evals/launchbench/hdyhau-survey-missing.yaml +20 -0
  1258. package/checks/validation/repository/evals/launchbench/higgsfield-design-brief-missing.yaml +25 -0
  1259. package/checks/validation/repository/evals/launchbench/higgsfield-remotion-fallback-unapproved.yaml +21 -0
  1260. package/checks/validation/repository/evals/launchbench/higgsfield-soul-identity-retrained-duplicate.yaml +26 -0
  1261. package/checks/validation/repository/evals/launchbench/house-style-adr-api-example.yaml +21 -0
  1262. package/checks/validation/repository/evals/launchbench/house-style-customer-voice.yaml +23 -0
  1263. package/checks/validation/repository/evals/launchbench/house-style-entrypoints.yaml +20 -0
  1264. package/checks/validation/repository/evals/launchbench/house-style-fixture-as-provider-ready.yaml +22 -0
  1265. package/checks/validation/repository/evals/launchbench/house-style-handoff.yaml +19 -0
  1266. package/checks/validation/repository/evals/launchbench/house-style-inspect-read-only-claim.yaml +26 -0
  1267. package/checks/validation/repository/evals/launchbench/house-style-literal-controls.yaml +21 -0
  1268. package/checks/validation/repository/evals/launchbench/house-style-mixed-readme.yaml +23 -0
  1269. package/checks/validation/repository/evals/launchbench/house-style-packaged-ethos-path.yaml +22 -0
  1270. package/checks/validation/repository/evals/launchbench/house-style-partial-pr.yaml +22 -0
  1271. package/checks/validation/repository/evals/launchbench/house-style-readme-kitchen.yaml +21 -0
  1272. package/checks/validation/repository/evals/launchbench/house-style-timeout-uncertain-mutation.yaml +21 -0
  1273. package/checks/validation/repository/evals/launchbench/in-app-simulator-route-mishandled.yaml +26 -0
  1274. package/checks/validation/repository/evals/launchbench/influencer-sponsorship-shortcuts.yaml +15 -0
  1275. package/checks/validation/repository/evals/launchbench/landing-funnel-deploy-gates.yaml +31 -0
  1276. package/checks/validation/repository/evals/launchbench/landing-motion-progressive-enhancement-missing.yaml +15 -0
  1277. package/checks/validation/repository/evals/launchbench/launch-tier-overproduction.yaml +41 -0
  1278. package/checks/validation/repository/evals/launchbench/live-effect-false-progress.yaml +28 -0
  1279. package/checks/validation/repository/evals/launchbench/live-provider-proof-missing.yaml +12 -0
  1280. package/checks/validation/repository/evals/launchbench/localization-malformed-seasonal-dates.yaml +18 -0
  1281. package/checks/validation/repository/evals/launchbench/localization-same-day-peak.yaml +17 -0
  1282. package/checks/validation/repository/evals/launchbench/missed-provider-deprecation-unmigrated.yaml +21 -0
  1283. package/checks/validation/repository/evals/launchbench/mobai-fallback-unapproved.yaml +13 -0
  1284. package/checks/validation/repository/evals/launchbench/mobai-onboarding-chain-unverified.yaml +23 -0
  1285. package/checks/validation/repository/evals/launchbench/mobai-v25-proof-conflated-or-unsafe.yaml +14 -0
  1286. package/checks/validation/repository/evals/launchbench/monetization-cozy-default-stack-unexamined.yaml +17 -0
  1287. package/checks/validation/repository/evals/launchbench/motion-craft-prose-never-applied.yaml +41 -0
  1288. package/checks/validation/repository/evals/launchbench/multi-runtime-skill-pin-drift.yaml +20 -0
  1289. package/checks/validation/repository/evals/launchbench/native-ios-proof-route-skipped.yaml +20 -0
  1290. package/checks/validation/repository/evals/launchbench/non-competitor-angle-hunt-missing.yaml +20 -0
  1291. package/checks/validation/repository/evals/launchbench/onboarding-event-invented-without-catalog.yaml +16 -0
  1292. package/checks/validation/repository/evals/launchbench/onboarding-research-auth-analytics-skipped.yaml +33 -0
  1293. package/checks/validation/repository/evals/launchbench/operating-graph-pack-leakage.yaml +24 -0
  1294. package/checks/validation/repository/evals/launchbench/operator-stops-after-access-instructions.yaml +18 -0
  1295. package/checks/validation/repository/evals/launchbench/orchestration-preflight-missing.yaml +23 -0
  1296. package/checks/validation/repository/evals/launchbench/pack-composition-weakens-base.yaml +24 -0
  1297. package/checks/validation/repository/evals/launchbench/paid-ai-anonymous-generation.yaml +20 -0
  1298. package/checks/validation/repository/evals/launchbench/paid-ai-controls-file-missing.yaml +18 -0
  1299. package/checks/validation/repository/evals/launchbench/paid-ai-kill-switch-disables-free.yaml +16 -0
  1300. package/checks/validation/repository/evals/launchbench/paid-ai-not-applicable-with-product-evidence.yaml +23 -0
  1301. package/checks/validation/repository/evals/launchbench/paid-ai-pack-omitted-while-spend-active.yaml +21 -0
  1302. package/checks/validation/repository/evals/launchbench/paid-ua-pending-mmp-waiver.yaml +18 -0
  1303. package/checks/validation/repository/evals/launchbench/paid-ua-spend-discipline-missing.yaml +19 -0
  1304. package/checks/validation/repository/evals/launchbench/paid-ua-spend-ready-without-appsflyer.yaml +19 -0
  1305. package/checks/validation/repository/evals/launchbench/paid-user-acquisition-system-missing.yaml +15 -0
  1306. package/checks/validation/repository/evals/launchbench/parallel-file-overlap-unsafe.yaml +20 -0
  1307. package/checks/validation/repository/evals/launchbench/paywall-engine-mismatch.yaml +19 -0
  1308. package/checks/validation/repository/evals/launchbench/paywall-experiment-program-unowned.yaml +18 -0
  1309. package/checks/validation/repository/evals/launchbench/paywall-experimentation-never-starts.yaml +35 -0
  1310. package/checks/validation/repository/evals/launchbench/paywall-goal-headline-missing.yaml +21 -0
  1311. package/checks/validation/repository/evals/launchbench/post-launch-metrics-never-operated.yaml +33 -0
  1312. package/checks/validation/repository/evals/launchbench/post-launch-ops-runbook-missing.yaml +34 -0
  1313. package/checks/validation/repository/evals/launchbench/post-launch-zombie-app-no-kill-decision.yaml +35 -0
  1314. package/checks/validation/repository/evals/launchbench/pre-build-kill-gate-skipped.yaml +43 -0
  1315. package/checks/validation/repository/evals/launchbench/price-derivation-apply-without-dry-run.yaml +19 -0
  1316. package/checks/validation/repository/evals/launchbench/price-derivation-multiplier-as-approval.yaml +19 -0
  1317. package/checks/validation/repository/evals/launchbench/project-state-stale-after-upload.yaml +16 -0
  1318. package/checks/validation/repository/evals/launchbench/remotion-assets-thin.yaml +20 -0
  1319. package/checks/validation/repository/evals/launchbench/remotion-license-unchecked.yaml +20 -0
  1320. package/checks/validation/repository/evals/launchbench/repository-profile-acceptance-incomplete.yaml +20 -0
  1321. package/checks/validation/repository/evals/launchbench/repository-profile-overlay-invalid-yaml.yaml +20 -0
  1322. package/checks/validation/repository/evals/launchbench/repository-profile-public-community-on-private.yaml +20 -0
  1323. package/checks/validation/repository/evals/launchbench/repository-profile-suppresses-privacy.yaml +19 -0
  1324. package/checks/validation/repository/evals/launchbench/resend-template-unbranded.yaml +13 -0
  1325. package/checks/validation/repository/evals/launchbench/revenuecat-entitlement-unproven.yaml +13 -0
  1326. package/checks/validation/repository/evals/launchbench/revenuecat-experiments-capability-unclassified.yaml +22 -0
  1327. package/checks/validation/repository/evals/launchbench/revenuecat-subscription-preflight-missing.yaml +18 -0
  1328. package/checks/validation/repository/evals/launchbench/review-prompt-teardown-race.yaml +16 -0
  1329. package/checks/validation/repository/evals/launchbench/scrollytelling-copy-visual-disconnect.yaml +18 -0
  1330. package/checks/validation/repository/evals/launchbench/scrollytelling-mobile-short-height-failure.yaml +16 -0
  1331. package/checks/validation/repository/evals/launchbench/scrollytelling-reduced-motion-no-js-failure.yaml +16 -0
  1332. package/checks/validation/repository/evals/launchbench/scrollytelling-scroll-sync-drift.yaml +16 -0
  1333. package/checks/validation/repository/evals/launchbench/secret-routing-missing.yaml +13 -0
  1334. package/checks/validation/repository/evals/launchbench/secrets-baseline-skipped.yaml +18 -0
  1335. package/checks/validation/repository/evals/launchbench/security-release-lane-missing.yaml +15 -0
  1336. package/checks/validation/repository/evals/launchbench/social-shared-password-instead-of-delegation.yaml +18 -0
  1337. package/checks/validation/repository/evals/launchbench/source-checkpoint-missing.yaml +20 -0
  1338. package/checks/validation/repository/evals/launchbench/source-registry-url-untracked.yaml +18 -0
  1339. package/checks/validation/repository/evals/launchbench/stale-blocker-after-authoritative-readback.yaml +20 -0
  1340. package/checks/validation/repository/evals/launchbench/stale-installed-skill-runtime.yaml +25 -0
  1341. package/checks/validation/repository/evals/launchbench/standing-approval-reprompt-and-late-tool-preflight.yaml +23 -0
  1342. package/checks/validation/repository/evals/launchbench/state-updated-but-never-narrated.yaml +30 -0
  1343. package/checks/validation/repository/evals/launchbench/store-screenshots-raw-only.yaml +24 -0
  1344. package/checks/validation/repository/evals/launchbench/subagent-dispatch-skipped.yaml +22 -0
  1345. package/checks/validation/repository/evals/launchbench/subagent-findings-unintegrated.yaml +21 -0
  1346. package/checks/validation/repository/evals/launchbench/subagent-forbidden-actions.yaml +19 -0
  1347. package/checks/validation/repository/evals/launchbench/transformation-demo-vitamin.yaml +19 -0
  1348. package/checks/validation/repository/evals/launchbench/typed-skill-graph-drift.yaml +17 -0
  1349. package/checks/validation/repository/evals/launchbench/variable-reward-without-ethics-guardrail.yaml +14 -0
  1350. package/checks/validation/repository/evals/launchbench/virality-predictor-skipped-before-spend.yaml +24 -0
  1351. package/checks/validation/repository/evals/launchbench/weekly-source-refresh-unreviewed.yaml +20 -0
  1352. package/checks/validation/repository/evals/launchbench/xctest-signal-kill-loop.yaml +17 -0
  1353. package/checks/validation/repository/evals/triggering/autopilot-triggering.yaml +140 -0
  1354. package/checks/validation/repository/fixtures/_builders-ops.ts +358 -0
  1355. package/checks/validation/repository/fixtures/_builders-store.ts +380 -0
  1356. package/checks/validation/repository/fixtures/_evidence-header-constants.ts +37 -0
  1357. package/checks/validation/repository/fixtures/_harness.ts +213 -0
  1358. package/checks/validation/repository/fixtures/_source-http-checks.ts +258 -0
  1359. package/checks/validation/repository/fixtures/_source-http-preload.mjs +71 -0
  1360. package/checks/validation/repository/fixtures/_state.ts +29 -0
  1361. package/checks/validation/repository/fixtures/_table-edit.ts +18 -0
  1362. package/checks/validation/repository/fixtures/agent-entrypoints.fixtures.ts +277 -0
  1363. package/checks/validation/repository/fixtures/agent-operations.fixtures.ts +614 -0
  1364. package/checks/validation/repository/fixtures/appkittie-adapter.fixtures.ts +143 -0
  1365. package/checks/validation/repository/fixtures/archetype.fixtures.ts +137 -0
  1366. package/checks/validation/repository/fixtures/architecture.fixtures.ts +127 -0
  1367. package/checks/validation/repository/fixtures/behavioral.fixtures.ts +19 -0
  1368. package/checks/validation/repository/fixtures/check-json.fixtures.ts +145 -0
  1369. package/checks/validation/repository/fixtures/continuity-length-budget.fixtures.ts +35 -0
  1370. package/checks/validation/repository/fixtures/copy.fixtures.ts +1486 -0
  1371. package/checks/validation/repository/fixtures/core-artifacts.fixtures.ts +3208 -0
  1372. package/checks/validation/repository/fixtures/design-taste-grading.fixtures.ts +358 -0
  1373. package/checks/validation/repository/fixtures/design-taste-rubric.fixtures.ts +136 -0
  1374. package/checks/validation/repository/fixtures/design.fixtures.ts +5771 -0
  1375. package/checks/validation/repository/fixtures/engineering.fixtures.ts +764 -0
  1376. package/checks/validation/repository/fixtures/evidence-schema.fixtures.ts +448 -0
  1377. package/checks/validation/repository/fixtures/founder-operator.fixtures.ts +897 -0
  1378. package/checks/validation/repository/fixtures/graph-foundations.fixtures.ts +107 -0
  1379. package/checks/validation/repository/fixtures/growth.fixtures.ts +908 -0
  1380. package/checks/validation/repository/fixtures/learning.fixtures.ts +243 -0
  1381. package/checks/validation/repository/fixtures/lifecycle.fixtures.ts +1958 -0
  1382. package/checks/validation/repository/fixtures/mobai.fixtures.ts +277 -0
  1383. package/checks/validation/repository/fixtures/onboarding.fixtures.ts +2447 -0
  1384. package/checks/validation/repository/fixtures/operating-graph.fixtures.ts +24 -0
  1385. package/checks/validation/repository/fixtures/pack-composition.fixtures.ts +117 -0
  1386. package/checks/validation/repository/fixtures/probes-and-grading.fixtures.ts +122 -0
  1387. package/checks/validation/repository/fixtures/provider-contracts.fixtures.ts +378 -0
  1388. package/checks/validation/repository/fixtures/providers-and-secrets.fixtures.ts +1266 -0
  1389. package/checks/validation/repository/fixtures/repo-gates.fixtures.ts +2451 -0
  1390. package/checks/validation/repository/fixtures/repository-boundary.fixtures.ts +2281 -0
  1391. package/checks/validation/repository/fixtures/repository-profile.fixtures.ts +244 -0
  1392. package/checks/validation/repository/fixtures/roster.fixtures.ts +62 -0
  1393. package/checks/validation/repository/fixtures/runtime-sync.fixtures.ts +286 -0
  1394. package/checks/validation/repository/fixtures/skill-supply-chain.fixtures.ts +114 -0
  1395. package/checks/validation/repository/fixtures/source-access.fixtures.ts +523 -0
  1396. package/checks/validation/repository/fixtures/state-and-meta.fixtures.ts +1518 -0
  1397. package/checks/validation/repository/fixtures/store.fixtures.ts +1573 -0
  1398. package/checks/validation/repository/fixtures/upstreams.fixtures.ts +222 -0
  1399. package/checks/validation/repository/launchbench-evals.md +150 -0
  1400. package/checks/validation/repository/message-batches.ts +75 -0
  1401. package/checks/validation/repository/refresh-source-freshness.ts +341 -0
  1402. package/checks/validation/repository/run-agent-evals.ts +117 -0
  1403. package/checks/validation/repository/run-behavioral-evals.ts +612 -0
  1404. package/checks/validation/repository/run-launchbench.ts +246 -0
  1405. package/checks/validation/repository/run-validator-fixtures.ts +173 -0
  1406. package/checks/validation/repository/skill-versioning.md +91 -0
  1407. package/checks/validation/repository/source-freshness-maintenance.md +129 -0
  1408. package/checks/validation/repository/source-registry.yaml +2976 -0
  1409. package/contracts/contribution/contract.ts +571 -0
  1410. package/contracts/extensions/contract.ts +307 -0
  1411. package/contracts/extensions/schemas/extension.schema.json +756 -0
  1412. package/contracts/mobile-operation.ts +148 -0
  1413. package/contracts/onboarding/foundations.ts +286 -0
  1414. package/contracts/public-api/REFERENCE.md +206 -0
  1415. package/contracts/public-api/connection-receipt.ts +645 -0
  1416. package/contracts/public-api/contract.ts +786 -0
  1417. package/contracts/public-api/examples/mobile-app-capture.json +5 -0
  1418. package/contracts/public-api/examples/subscription-app.json +19 -0
  1419. package/contracts/public-api/research-contract.ts +125 -0
  1420. package/contracts/public-api/schemas/business.create.input.schema.json +38 -0
  1421. package/contracts/public-api/schemas/business.create.result.schema.json +177 -0
  1422. package/contracts/public-api/schemas/business.evidence.input.schema.json +19 -0
  1423. package/contracts/public-api/schemas/business.evidence.result.schema.json +206 -0
  1424. package/contracts/public-api/schemas/business.initialize.input.schema.json +20 -0
  1425. package/contracts/public-api/schemas/business.initialize.result.schema.json +140 -0
  1426. package/contracts/public-api/schemas/business.plan.input.schema.json +21 -0
  1427. package/contracts/public-api/schemas/business.plan.result.schema.json +1007 -0
  1428. package/contracts/public-api/schemas/business.recover.input.schema.json +25 -0
  1429. package/contracts/public-api/schemas/business.recover.result.schema.json +179 -0
  1430. package/contracts/public-api/schemas/business.research.decision.input.schema.json +53 -0
  1431. package/contracts/public-api/schemas/business.research.decision.result.schema.json +184 -0
  1432. package/contracts/public-api/schemas/business.research.lookup.input.schema.json +87 -0
  1433. package/contracts/public-api/schemas/business.research.lookup.result.schema.json +281 -0
  1434. package/contracts/public-api/schemas/business.research.record.input.schema.json +136 -0
  1435. package/contracts/public-api/schemas/business.research.record.result.schema.json +149 -0
  1436. package/contracts/public-api/schemas/business.run.input.schema.json +53 -0
  1437. package/contracts/public-api/schemas/business.run.result.schema.json +218 -0
  1438. package/contracts/public-api/schemas/business.status.input.schema.json +15 -0
  1439. package/contracts/public-api/schemas/business.status.result.schema.json +319 -0
  1440. package/contracts/public-api/schemas/catalog.list.input.schema.json +20 -0
  1441. package/contracts/public-api/schemas/catalog.list.result.schema.json +208 -0
  1442. package/contracts/public-api/schemas/composition.activate.input.schema.json +30 -0
  1443. package/contracts/public-api/schemas/composition.activate.result.schema.json +161 -0
  1444. package/contracts/public-api/schemas/composition.plan.input.schema.json +25 -0
  1445. package/contracts/public-api/schemas/composition.plan.result.schema.json +253 -0
  1446. package/contracts/public-api/schemas/composition.preview.input.schema.json +118 -0
  1447. package/contracts/public-api/schemas/composition.preview.result.schema.json +284 -0
  1448. package/contracts/public-api/schemas/composition.recover.input.schema.json +23 -0
  1449. package/contracts/public-api/schemas/composition.recover.result.schema.json +161 -0
  1450. package/contracts/public-api/schemas/composition.schema.json +101 -0
  1451. package/contracts/public-api/schemas/market.report.input.schema.json +21 -0
  1452. package/contracts/public-api/schemas/market.report.result.schema.json +377 -0
  1453. package/contracts/public-api/schemas/packages.import.input.schema.json +29 -0
  1454. package/contracts/public-api/schemas/packages.import.result.schema.json +177 -0
  1455. package/contracts/public-api/schemas/packages.list.input.schema.json +15 -0
  1456. package/contracts/public-api/schemas/packages.list.result.schema.json +189 -0
  1457. package/contracts/research/observation.ts +27 -0
  1458. package/contracts/semantic/canonicalize.ts +25 -0
  1459. package/contracts/semantic/index.ts +116 -0
  1460. package/contracts/semantic/package-resource.ts +53 -0
  1461. package/contracts/semantic/query-ir.ts +215 -0
  1462. package/contracts/semantic/question-pack.ts +176 -0
  1463. package/contracts/semantic/questions.ts +149 -0
  1464. package/contracts/semantic/receipts.ts +179 -0
  1465. package/contracts/shared-resources.ts +18 -0
  1466. package/contracts/source-access.ts +44 -0
  1467. package/contracts/worker-artifact.ts +14 -0
  1468. package/dist/adapters/app-review/archive.js +46 -0
  1469. package/dist/adapters/app-review/asc-boundary.js +71 -0
  1470. package/dist/adapters/app-review/asc-provider.js +474 -0
  1471. package/dist/adapters/app-review/auth.js +53 -0
  1472. package/dist/adapters/app-review/capability.js +195 -0
  1473. package/dist/adapters/app-review/classify.js +107 -0
  1474. package/dist/adapters/app-review/consume.js +77 -0
  1475. package/dist/adapters/app-review/envelope.js +89 -0
  1476. package/dist/adapters/app-review/events.js +381 -0
  1477. package/dist/adapters/app-review/hmac.js +72 -0
  1478. package/dist/adapters/app-review/implement.js +76 -0
  1479. package/dist/adapters/app-review/index.js +29 -0
  1480. package/dist/adapters/app-review/ingest.js +106 -0
  1481. package/dist/adapters/app-review/mandate.js +76 -0
  1482. package/dist/adapters/app-review/normalize.js +245 -0
  1483. package/dist/adapters/app-review/packet.js +236 -0
  1484. package/dist/adapters/app-review/persist.js +83 -0
  1485. package/dist/adapters/app-review/plan.js +268 -0
  1486. package/dist/adapters/app-review/plist.js +218 -0
  1487. package/dist/adapters/app-review/poll.js +224 -0
  1488. package/dist/adapters/app-review/projection.js +143 -0
  1489. package/dist/adapters/app-review/queue.js +115 -0
  1490. package/dist/adapters/app-review/receiver.js +78 -0
  1491. package/dist/adapters/app-review/registration.js +52 -0
  1492. package/dist/adapters/app-review/remediate.js +185 -0
  1493. package/dist/adapters/app-review/render.js +175 -0
  1494. package/dist/adapters/app-review/resubmit.js +322 -0
  1495. package/dist/adapters/app-review/types.js +52 -0
  1496. package/dist/adapters/app-review/uncertain-execution.js +151 -0
  1497. package/dist/adapters/app-review/verification.js +35 -0
  1498. package/dist/adapters/appkittie-category-revenue.js +69 -0
  1499. package/dist/adapters/claude.js +51 -0
  1500. package/dist/adapters/codex.js +47 -0
  1501. package/dist/adapters/cursor.js +48 -0
  1502. package/dist/adapters/device-proof.js +649 -0
  1503. package/dist/adapters/greenfield/boundary.js +126 -0
  1504. package/dist/adapters/greenfield/fail-safe.js +120 -0
  1505. package/dist/adapters/greenfield/index.js +2 -0
  1506. package/dist/adapters/inline.js +35 -0
  1507. package/dist/adapters/install-control-permissions.js +264 -0
  1508. package/dist/adapters/install-entrypoints.js +344 -0
  1509. package/dist/adapters/install-schedule.js +571 -0
  1510. package/dist/adapters/ios-app-evidence.js +111 -0
  1511. package/dist/adapters/mobile-operation-host.js +206 -0
  1512. package/dist/adapters/mobile-operation.js +93 -0
  1513. package/dist/adapters/operating.js +7 -0
  1514. package/dist/adapters/probe.js +40 -0
  1515. package/dist/adapters/profile.js +134 -0
  1516. package/dist/adapters/providers/capability-delta.js +59 -0
  1517. package/dist/adapters/providers/contract.js +41 -0
  1518. package/dist/adapters/providers/evaluate.js +116 -0
  1519. package/dist/adapters/providers/expo/argv.js +222 -0
  1520. package/dist/adapters/providers/expo/decode.js +593 -0
  1521. package/dist/adapters/providers/expo/discovery.js +94 -0
  1522. package/dist/adapters/providers/expo/doctor.js +145 -0
  1523. package/dist/adapters/providers/expo/effects.js +142 -0
  1524. package/dist/adapters/providers/expo/execute.js +299 -0
  1525. package/dist/adapters/providers/expo/expo-device-bind.js +91 -0
  1526. package/dist/adapters/providers/expo/expo-mcp-route.js +282 -0
  1527. package/dist/adapters/providers/expo/hosting-prepare.js +116 -0
  1528. package/dist/adapters/providers/expo/identity.js +99 -0
  1529. package/dist/adapters/providers/expo/index.js +26 -0
  1530. package/dist/adapters/providers/expo/jobs.js +424 -0
  1531. package/dist/adapters/providers/expo/preflight.js +215 -0
  1532. package/dist/adapters/providers/expo/process.js +117 -0
  1533. package/dist/adapters/providers/expo/project-config.js +147 -0
  1534. package/dist/adapters/providers/expo/sanitize.js +46 -0
  1535. package/dist/adapters/providers/expo/signing-readiness.js +108 -0
  1536. package/dist/adapters/providers/expo/store-handoff.js +52 -0
  1537. package/dist/adapters/providers/expo/update-identity.js +70 -0
  1538. package/dist/adapters/providers/expo/update-policy.js +93 -0
  1539. package/dist/adapters/providers/expo/update-prepare.js +104 -0
  1540. package/dist/adapters/providers/expo/update-recovery.js +96 -0
  1541. package/dist/adapters/providers/expo/update-rollout.js +69 -0
  1542. package/dist/adapters/providers/expo/update-signing.js +69 -0
  1543. package/dist/adapters/providers/expo/web-api-contract.js +112 -0
  1544. package/dist/adapters/providers/growth-agent/boundary.js +143 -0
  1545. package/dist/adapters/providers/growth-agent/fail-safe.js +220 -0
  1546. package/dist/adapters/providers/growth-agent/index.js +2 -0
  1547. package/dist/adapters/providers/layers/effects.js +72 -0
  1548. package/dist/adapters/providers/layers/index.js +9 -0
  1549. package/dist/adapters/providers/layers/jobs.js +207 -0
  1550. package/dist/adapters/providers/layers/onboarding.js +114 -0
  1551. package/dist/adapters/providers/layers/route.js +242 -0
  1552. package/dist/adapters/providers/layers/transport.js +144 -0
  1553. package/dist/adapters/providers/load.js +300 -0
  1554. package/dist/adapters/providers/mobile-ops/boundary.js +114 -0
  1555. package/dist/adapters/providers/mobile-ops/fail-safe.js +190 -0
  1556. package/dist/adapters/providers/mobile-ops/index.js +2 -0
  1557. package/dist/adapters/providers/monetization-validation.js +72 -0
  1558. package/dist/adapters/providers/revenuecat/cli-catalog-observe.js +230 -0
  1559. package/dist/adapters/providers/revenuecat/cli-catalog.js +941 -0
  1560. package/dist/adapters/providers/revenuecat/cli-command-schema.js +319 -0
  1561. package/dist/adapters/providers/revenuecat/cli-decode.js +740 -0
  1562. package/dist/adapters/providers/revenuecat/cli-discovery.js +205 -0
  1563. package/dist/adapters/providers/revenuecat/cli-doctor.js +199 -0
  1564. package/dist/adapters/providers/revenuecat/cli-execute.js +345 -0
  1565. package/dist/adapters/providers/revenuecat/cli-ledger.js +371 -0
  1566. package/dist/adapters/providers/revenuecat/cli-operations.js +875 -0
  1567. package/dist/adapters/providers/revenuecat/cli-preflight.js +175 -0
  1568. package/dist/adapters/providers/revenuecat/cli-process.js +149 -0
  1569. package/dist/adapters/providers/revenuecat/cli-proof.js +121 -0
  1570. package/dist/adapters/providers/revenuecat/cli-reconcile-plan.js +901 -0
  1571. package/dist/adapters/providers/revenuecat/provisioning.js +52 -0
  1572. package/dist/adapters/providers/revenuecat/revenue-validation.js +772 -0
  1573. package/dist/adapters/providers/runtime-pin.js +92 -0
  1574. package/dist/adapters/providers/superwall/boundary.js +86 -0
  1575. package/dist/adapters/providers/superwall/fail-safe.js +171 -0
  1576. package/dist/adapters/providers/superwall/measurement.js +49 -0
  1577. package/dist/adapters/providers/typesafe/assess.js +160 -0
  1578. package/dist/adapters/providers/typesafe/binding.js +35 -0
  1579. package/dist/adapters/providers/typesafe/connection.js +58 -0
  1580. package/dist/adapters/providers/typesafe/decode.js +255 -0
  1581. package/dist/adapters/providers/typesafe/effects.js +67 -0
  1582. package/dist/adapters/providers/typesafe/encode.js +61 -0
  1583. package/dist/adapters/providers/typesafe/index.js +12 -0
  1584. package/dist/adapters/providers/typesafe/support.js +65 -0
  1585. package/dist/adapters/providers/typesafe/transport.js +318 -0
  1586. package/dist/adapters/provisioning/capability-gaps.js +66 -0
  1587. package/dist/adapters/provisioning/capability-readiness.js +39 -0
  1588. package/dist/adapters/provisioning/cli.js +259 -0
  1589. package/dist/adapters/provisioning/requirements.js +458 -0
  1590. package/dist/adapters/provisioning/resolve.js +217 -0
  1591. package/dist/adapters/registry.js +180 -0
  1592. package/dist/catalog/agent-graph/load.js +102 -0
  1593. package/dist/catalog/agent-graph/types.js +15 -0
  1594. package/dist/catalog/agent-graph/validate.js +110 -0
  1595. package/dist/catalog/areas.js +83 -0
  1596. package/dist/catalog/artifacts.js +38 -0
  1597. package/dist/catalog/authoring.js +43 -0
  1598. package/dist/catalog/bridge.js +221 -0
  1599. package/dist/catalog/business-primitives.js +80 -0
  1600. package/dist/catalog/business-units.js +13 -0
  1601. package/dist/catalog/capabilities/types.js +3 -0
  1602. package/dist/catalog/context-packs.js +76 -0
  1603. package/dist/catalog/domain-authority.js +32 -0
  1604. package/dist/catalog/domains.js +170 -0
  1605. package/dist/catalog/firstparty-declarations.js +625 -0
  1606. package/dist/catalog/firstparty-recipes.js +273 -0
  1607. package/dist/catalog/gates.js +93 -0
  1608. package/dist/catalog/ids.js +18 -0
  1609. package/dist/catalog/index.js +36 -0
  1610. package/dist/catalog/knowledge-packages.js +210 -0
  1611. package/dist/catalog/knowledge-validation.js +160 -0
  1612. package/dist/catalog/lane-graph.js +30 -0
  1613. package/dist/catalog/lanes.js +59 -0
  1614. package/dist/catalog/ontology/design-surface-applicability.js +383 -0
  1615. package/dist/catalog/ontology/instance-load.js +97 -0
  1616. package/dist/catalog/ontology/instance-types.js +25 -0
  1617. package/dist/catalog/ontology/instance-validate.js +86 -0
  1618. package/dist/catalog/ontology/load.js +174 -0
  1619. package/dist/catalog/ontology/onboarding-applicability.js +166 -0
  1620. package/dist/catalog/ontology/product-workspace.js +36 -0
  1621. package/dist/catalog/ontology/query.js +62 -0
  1622. package/dist/catalog/ontology/render-product.js +26 -0
  1623. package/dist/catalog/ontology/types.js +24 -0
  1624. package/dist/catalog/ontology/validate.js +173 -0
  1625. package/dist/catalog/operators.js +246 -0
  1626. package/dist/catalog/overlays.js +28 -0
  1627. package/dist/catalog/packs/compose.js +386 -0
  1628. package/dist/catalog/packs/firstparty-assets.js +68 -0
  1629. package/dist/catalog/packs/firstparty-notices.js +52 -0
  1630. package/dist/catalog/packs/firstparty.js +134 -0
  1631. package/dist/catalog/packs/installed-firstparty.js +20 -0
  1632. package/dist/catalog/packs/isolation.js +77 -0
  1633. package/dist/catalog/packs/load.js +543 -0
  1634. package/dist/catalog/packs/snapshots.js +122 -0
  1635. package/dist/catalog/packs/types.js +11 -0
  1636. package/dist/catalog/phases.js +137 -0
  1637. package/dist/catalog/principles/guards.js +101 -0
  1638. package/dist/catalog/principles/load.js +176 -0
  1639. package/dist/catalog/principles/types.js +26 -0
  1640. package/dist/catalog/profiles.js +40 -0
  1641. package/dist/catalog/providers/apple-asc-canonical-map.js +449 -0
  1642. package/dist/catalog/providers/conformance.js +41 -0
  1643. package/dist/catalog/providers/greenfield-70-applicability-closeout-map.js +210 -0
  1644. package/dist/catalog/providers/greenfield-71-handoff-closeout-map.js +331 -0
  1645. package/dist/catalog/providers/greenfield-72-benchmark-closeout-map.js +449 -0
  1646. package/dist/catalog/providers/greenfield-73-overhead-closeout-map.js +276 -0
  1647. package/dist/catalog/providers/greenfield-75-retrieval-closeout-map.js +283 -0
  1648. package/dist/catalog/providers/greenfield-76-change-impact-closeout-map.js +287 -0
  1649. package/dist/catalog/providers/greenfield-delivery-audit-map.js +319 -0
  1650. package/dist/catalog/providers/growth-agent-canonical-map.js +599 -0
  1651. package/dist/catalog/providers/mobile-ops-canonical-map.js +513 -0
  1652. package/dist/catalog/providers/semantic-batch-map.js +62 -0
  1653. package/dist/catalog/providers/semantic-eval-baselines-map.js +735 -0
  1654. package/dist/catalog/providers/semantic-graph-views-map.js +66 -0
  1655. package/dist/catalog/providers/semantic-plan-lower-map.js +54 -0
  1656. package/dist/catalog/providers/semantic-source-projection-map.js +78 -0
  1657. package/dist/catalog/providers/superwall-canonical-map.js +325 -0
  1658. package/dist/catalog/providers/typesafe-qualify-map.js +224 -0
  1659. package/dist/catalog/recipes/default-monetization.js +9 -0
  1660. package/dist/catalog/render-routing.js +394 -0
  1661. package/dist/catalog/repository-profiles/compile.js +381 -0
  1662. package/dist/catalog/repository-profiles/index.js +4 -0
  1663. package/dist/catalog/repository-profiles/paid-generation-applicability.js +111 -0
  1664. package/dist/catalog/repository-profiles/registry.js +75 -0
  1665. package/dist/catalog/repository-profiles/types.js +17 -0
  1666. package/dist/catalog/repository-profiles/workspace.js +128 -0
  1667. package/dist/catalog/roles.js +266 -0
  1668. package/dist/catalog/stacks/expo-agent-privacy.js +101 -0
  1669. package/dist/catalog/stacks/expo-agent-tools.js +264 -0
  1670. package/dist/catalog/stacks/expo-capability-matrix.js +209 -0
  1671. package/dist/catalog/stacks/expo-capability-protocol.js +521 -0
  1672. package/dist/catalog/stacks/expo-custom-module.js +367 -0
  1673. package/dist/catalog/stacks/expo-eas-commands.js +677 -0
  1674. package/dist/catalog/stacks/expo-eas-hosting.js +160 -0
  1675. package/dist/catalog/stacks/expo-eas-operation-matrix.js +194 -0
  1676. package/dist/catalog/stacks/expo-local-boot.js +301 -0
  1677. package/dist/catalog/stacks/expo-local-capabilities.js +240 -0
  1678. package/dist/catalog/stacks/expo-native-ownership.js +362 -0
  1679. package/dist/catalog/stacks/expo-observability.js +101 -0
  1680. package/dist/catalog/stacks/expo-proof-collection.js +231 -0
  1681. package/dist/catalog/stacks/expo-quality-evidence.js +148 -0
  1682. package/dist/catalog/stacks/expo-revenuecat-wiring.js +103 -0
  1683. package/dist/catalog/stacks/expo-router-contract.js +340 -0
  1684. package/dist/catalog/stacks/expo-sdk-upgrade.js +126 -0
  1685. package/dist/catalog/stacks/expo-selection.js +572 -0
  1686. package/dist/catalog/stacks/expo-starter-fixture/modules/b2c-native-capability/src/capability.js +36 -0
  1687. package/dist/catalog/stacks/expo-starter-fixture/modules/b2c-native-capability/src/index.web.js +11 -0
  1688. package/dist/catalog/stacks/expo-starter-fixture/modules/b2c-native-capability/src/invoke.js +17 -0
  1689. package/dist/catalog/stacks/expo-starter-fixture/src/capabilities/reducers.js +116 -0
  1690. package/dist/catalog/stacks/expo-starter-fixture/src/navigation/deep-link.js +14 -0
  1691. package/dist/catalog/stacks/expo-starter-fixture/src/navigation/journeys.js +94 -0
  1692. package/dist/catalog/stacks/expo-starter-fixture/src/navigation/route-graph.js +36 -0
  1693. package/dist/catalog/stacks/expo-starter-fixture/src/notifications/handoff.js +15 -0
  1694. package/dist/catalog/stacks/expo-starter-fixture/src/offline/local-cache.js +62 -0
  1695. package/dist/catalog/stacks/expo-starter-fixture/src/permissions/safe-state.js +10 -0
  1696. package/dist/catalog/stacks/expo-starter-fixture/src/persistence/seam.js +25 -0
  1697. package/dist/catalog/stacks/expo-starter-fixture/src/session/local-session.js +24 -0
  1698. package/dist/catalog/stacks/expo-starter-fixture/src/states/surface-state.js +12 -0
  1699. package/dist/catalog/stacks/expo-starter-fixture/src/ui/contract-binding.js +11 -0
  1700. package/dist/catalog/stacks/expo-starter-fixture/src/ui/tokens.js +8 -0
  1701. package/dist/catalog/stacks/expo-starter.js +292 -0
  1702. package/dist/catalog/stacks/expo-web-api-routes.js +145 -0
  1703. package/dist/catalog/stacks/expo-web-static.js +407 -0
  1704. package/dist/catalog/stacks/expo-web-surface-table.js +162 -0
  1705. package/dist/catalog/task-skills.js +345 -0
  1706. package/dist/catalog/taxonomy/load.js +109 -0
  1707. package/dist/catalog/taxonomy/types.js +30 -0
  1708. package/dist/catalog/taxonomy/validate.js +199 -0
  1709. package/dist/catalog/types.js +6 -0
  1710. package/dist/catalog/validate.js +745 -0
  1711. package/dist/catalog/workflows/build-release.js +704 -0
  1712. package/dist/catalog/workflows/growth-revenue.js +322 -0
  1713. package/dist/catalog/workflows/helpers.js +61 -0
  1714. package/dist/catalog/workflows/index.js +8 -0
  1715. package/dist/catalog/workflows/maintenance.js +269 -0
  1716. package/dist/catalog/workflows/operating-system.js +250 -0
  1717. package/dist/catalog/workflows/operations-trust.js +407 -0
  1718. package/dist/catalog/workflows/product-experience.js +1214 -0
  1719. package/dist/checks/validation/business/design/color-contrast.js +41 -0
  1720. package/dist/checks/validation/business/design/design-acceptance.js +1716 -0
  1721. package/dist/checks/validation/business/design/lib/vibecode-tells.js +78 -0
  1722. package/dist/checks/validation/business/design/lib/worthiness-mechanical.js +157 -0
  1723. package/dist/checks/validation/business/design/runtime-reviewer-inputs.js +51 -0
  1724. package/dist/checks/validation/business/design/surface-page-gates.js +140 -0
  1725. package/dist/checks/validation/repository/agent-guidance-contract.js +257 -0
  1726. package/dist/checks/validation/repository/check-agent-entrypoints.js +210 -0
  1727. package/dist/checks/validation/repository/check-architecture.js +327 -0
  1728. package/dist/checks/validation/repository/check-autopilot-contract.js +198 -0
  1729. package/dist/checks/validation/repository/check-capability-delta.js +28 -0
  1730. package/dist/checks/validation/repository/check-catalog.js +80 -0
  1731. package/dist/checks/validation/repository/check-gates-layout.js +76 -0
  1732. package/dist/checks/validation/repository/check-graph-foundations.js +130 -0
  1733. package/dist/checks/validation/repository/check-hub-spoke.js +110 -0
  1734. package/dist/checks/validation/repository/check-learning-grounding.js +259 -0
  1735. package/dist/checks/validation/repository/check-operating-graph.js +171 -0
  1736. package/dist/checks/validation/repository/check-pack-composition.js +87 -0
  1737. package/dist/checks/validation/repository/check-package-parity.js +410 -0
  1738. package/dist/checks/validation/repository/check-provider-boundary.js +116 -0
  1739. package/dist/checks/validation/repository/check-provider-contracts.js +21 -0
  1740. package/dist/checks/validation/repository/check-upstreams.js +123 -0
  1741. package/dist/checks/validation/repository/check-validator-docs.js +57 -0
  1742. package/dist/contracts/contribution/contract.js +496 -0
  1743. package/dist/contracts/extensions/contract.js +317 -0
  1744. package/dist/contracts/mobile-operation.js +137 -0
  1745. package/dist/contracts/onboarding/foundations.js +268 -0
  1746. package/dist/contracts/public-api/connection-receipt.js +468 -0
  1747. package/dist/contracts/public-api/contract.js +682 -0
  1748. package/dist/contracts/public-api/research-contract.js +119 -0
  1749. package/dist/contracts/research/observation.js +26 -0
  1750. package/dist/contracts/semantic/canonicalize.js +24 -0
  1751. package/dist/contracts/semantic/index.js +12 -0
  1752. package/dist/contracts/semantic/package-resource.js +42 -0
  1753. package/dist/contracts/semantic/query-ir.js +185 -0
  1754. package/dist/contracts/semantic/question-pack.js +155 -0
  1755. package/dist/contracts/semantic/questions.js +124 -0
  1756. package/dist/contracts/semantic/receipts.js +152 -0
  1757. package/dist/contracts/shared-resources.js +11 -0
  1758. package/dist/contracts/source-access.js +36 -0
  1759. package/dist/contracts/worker-artifact.js +13 -0
  1760. package/dist/entrypoints/cli/business.js +245 -0
  1761. package/dist/entrypoints/cli/contribute.js +256 -0
  1762. package/dist/entrypoints/mcp/business.js +17 -0
  1763. package/dist/entrypoints/mcp/contribute.js +36 -0
  1764. package/dist/entrypoints/mcp/run-process.js +58 -0
  1765. package/dist/entrypoints/mcp/server.js +664 -0
  1766. package/dist/kernel/autonomy/budget.js +110 -0
  1767. package/dist/kernel/autonomy/evaluator.js +81 -0
  1768. package/dist/kernel/autonomy/grants.js +88 -0
  1769. package/dist/kernel/autonomy/killswitch.js +16 -0
  1770. package/dist/kernel/autonomy/prerequisites.js +71 -0
  1771. package/dist/kernel/autonomy/probes/budget.js +50 -0
  1772. package/dist/kernel/autonomy/probes/doppler.js +34 -0
  1773. package/dist/kernel/autonomy/standing-approvals.js +272 -0
  1774. package/dist/kernel/autonomy/waivers.js +97 -0
  1775. package/dist/kernel/composition/activation.js +474 -0
  1776. package/dist/kernel/composition/compile-bindings.js +241 -0
  1777. package/dist/kernel/composition/notices.js +179 -0
  1778. package/dist/kernel/composition/onboarding-selection.js +172 -0
  1779. package/dist/kernel/composition/providers.js +29 -0
  1780. package/dist/kernel/composition/resolve.js +201 -0
  1781. package/dist/kernel/composition/resources.js +284 -0
  1782. package/dist/kernel/composition/semantic-plan-lower.js +659 -0
  1783. package/dist/kernel/composition/worker-context.js +54 -0
  1784. package/dist/kernel/context/budget.js +12 -0
  1785. package/dist/kernel/context/compile.js +54 -0
  1786. package/dist/kernel/context/receipt.js +7 -0
  1787. package/dist/kernel/context/selectors.js +25 -0
  1788. package/dist/kernel/contribution/accepted-upstreams.js +71 -0
  1789. package/dist/kernel/contribution/adoption-map.js +103 -0
  1790. package/dist/kernel/contribution/check.js +157 -0
  1791. package/dist/kernel/contribution/evaluate.js +251 -0
  1792. package/dist/kernel/contribution/existing-owners.js +89 -0
  1793. package/dist/kernel/contribution/github-metadata.js +178 -0
  1794. package/dist/kernel/contribution/host-observe.js +117 -0
  1795. package/dist/kernel/contribution/intake.js +559 -0
  1796. package/dist/kernel/contribution/manifest-io.js +238 -0
  1797. package/dist/kernel/contribution/plan.js +358 -0
  1798. package/dist/kernel/contribution/preview.js +198 -0
  1799. package/dist/kernel/contribution/provider-capability-delta.js +142 -0
  1800. package/dist/kernel/contribution/service.js +208 -0
  1801. package/dist/kernel/contribution/types.js +1 -0
  1802. package/dist/kernel/contribution/untrusted.js +164 -0
  1803. package/dist/kernel/contribution/upstream-coverage.js +99 -0
  1804. package/dist/kernel/contribution/upstreams-load.js +157 -0
  1805. package/dist/kernel/contribution/upstreams.js +1134 -0
  1806. package/dist/kernel/engine/artifact-fingerprint.js +29 -0
  1807. package/dist/kernel/engine/compile.js +201 -0
  1808. package/dist/kernel/engine/design-taste-authority.js +191 -0
  1809. package/dist/kernel/engine/dispatch.js +60 -0
  1810. package/dist/kernel/engine/founder-decision-receipt.js +474 -0
  1811. package/dist/kernel/engine/founder-trust-store.js +645 -0
  1812. package/dist/kernel/engine/frontier.js +123 -0
  1813. package/dist/kernel/engine/node-brief.js +199 -0
  1814. package/dist/kernel/engine/proof-rung.js +47 -0
  1815. package/dist/kernel/engine/review-evidence.js +292 -0
  1816. package/dist/kernel/engine/review-facet.js +6 -0
  1817. package/dist/kernel/engine/runstate.js +1032 -0
  1818. package/dist/kernel/engine/source-fingerprint.js +89 -0
  1819. package/dist/kernel/engine/verification-policy.js +4 -0
  1820. package/dist/kernel/engine/verification.js +130 -0
  1821. package/dist/kernel/knowledge-service/journey.js +46 -0
  1822. package/dist/kernel/knowledge-service/projection-helpers.js +196 -0
  1823. package/dist/kernel/knowledge-service/sections.js +58 -0
  1824. package/dist/kernel/knowledge-service/semantic-graph-views.js +514 -0
  1825. package/dist/kernel/knowledge-service/service.js +767 -0
  1826. package/dist/kernel/knowledge-service/tools.js +101 -0
  1827. package/dist/kernel/knowledge-service/types.js +27 -0
  1828. package/dist/kernel/lib/atomic-file.js +39 -0
  1829. package/dist/kernel/lib/bounded-file.js +29 -0
  1830. package/dist/kernel/lib/cli.js +42 -0
  1831. package/dist/kernel/lib/empty-equivalent-evidence.js +33 -0
  1832. package/dist/kernel/lib/later-guidance.js +101 -0
  1833. package/dist/kernel/lib/required-table-section.js +535 -0
  1834. package/dist/kernel/operating-model/agreements.js +17 -0
  1835. package/dist/kernel/operating-model/authorize.js +65 -0
  1836. package/dist/kernel/operating-model/erasure-metadata.js +6 -0
  1837. package/dist/kernel/operating-model/events.js +123 -0
  1838. package/dist/kernel/operating-model/mandates.js +64 -0
  1839. package/dist/kernel/operating-model/market-experiment.js +290 -0
  1840. package/dist/kernel/operating-model/measurement.js +400 -0
  1841. package/dist/kernel/operating-model/parties.js +12 -0
  1842. package/dist/kernel/operating-model/projections.js +109 -0
  1843. package/dist/kernel/operating-model/types.js +41 -0
  1844. package/dist/kernel/operating-model/validate.js +316 -0
  1845. package/dist/kernel/reducer/audit.js +103 -0
  1846. package/dist/kernel/reducer/cli.js +489 -0
  1847. package/dist/kernel/reducer/current-truth.js +383 -0
  1848. package/dist/kernel/reducer/erasure-guard.js +16 -0
  1849. package/dist/kernel/reducer/erasure.js +683 -0
  1850. package/dist/kernel/reducer/lock.js +137 -0
  1851. package/dist/kernel/reducer/patch.js +320 -0
  1852. package/dist/kernel/reducer/semantic-batch-ownership.js +27 -0
  1853. package/dist/kernel/reducer/semantic-graph-ownership.js +41 -0
  1854. package/dist/kernel/reducer/shared-claims.js +124 -0
  1855. package/dist/kernel/routing/eligibility.js +63 -0
  1856. package/dist/kernel/routing/rank.js +14 -0
  1857. package/dist/kernel/routing/resolve.js +89 -0
  1858. package/dist/kernel/routing/signals.js +27 -0
  1859. package/dist/kernel/routing/types.js +3 -0
  1860. package/dist/kernel/schema/domain-authority.js +3 -0
  1861. package/dist/kernel/schema/evidence-grammar.js +104 -0
  1862. package/dist/kernel/schema/evidence-schema-version.js +64 -0
  1863. package/dist/kernel/schema/index.js +283 -0
  1864. package/dist/kernel/schema/types.js +91 -0
  1865. package/dist/kernel/services/business.js +307 -0
  1866. package/dist/kernel/services/installed-composition.js +148 -0
  1867. package/dist/kernel/services/lifecycle.js +242 -0
  1868. package/dist/kernel/services/plan-projection.js +211 -0
  1869. package/dist/kernel/services/research-decision.js +209 -0
  1870. package/dist/kernel/services/research.js +99 -0
  1871. package/dist/kernel/services/source-projection.js +364 -0
  1872. package/dist/kernel/session/app-review-ingress.js +230 -0
  1873. package/dist/kernel/session/approve.js +364 -0
  1874. package/dist/kernel/session/attempt-failure.js +108 -0
  1875. package/dist/kernel/session/bootstrap.js +480 -0
  1876. package/dist/kernel/session/brief.js +69 -0
  1877. package/dist/kernel/session/catalog-contract.js +262 -0
  1878. package/dist/kernel/session/check.js +184 -0
  1879. package/dist/kernel/session/deterministic-gates.js +60 -0
  1880. package/dist/kernel/session/digest.js +280 -0
  1881. package/dist/kernel/session/doctor-host.js +187 -0
  1882. package/dist/kernel/session/doctor.js +275 -0
  1883. package/dist/kernel/session/executor.js +803 -0
  1884. package/dist/kernel/session/firstparty-worker-host.js +30 -0
  1885. package/dist/kernel/session/founder-brief.js +106 -0
  1886. package/dist/kernel/session/founder-gate.js +133 -0
  1887. package/dist/kernel/session/founder-key.js +118 -0
  1888. package/dist/kernel/session/initialization-guard.js +16 -0
  1889. package/dist/kernel/session/initialize.js +205 -0
  1890. package/dist/kernel/session/input-inventory.js +207 -0
  1891. package/dist/kernel/session/inspect.js +237 -0
  1892. package/dist/kernel/session/ios-proof-receipt.js +232 -0
  1893. package/dist/kernel/session/market-experiment.js +77 -0
  1894. package/dist/kernel/session/new.js +177 -0
  1895. package/dist/kernel/session/onboard.js +448 -0
  1896. package/dist/kernel/session/operate-bind.js +52 -0
  1897. package/dist/kernel/session/operate.js +211 -0
  1898. package/dist/kernel/session/operating-service.js +431 -0
  1899. package/dist/kernel/session/operating-transport.js +102 -0
  1900. package/dist/kernel/session/operating-types.js +4 -0
  1901. package/dist/kernel/session/operation-routes.js +569 -0
  1902. package/dist/kernel/session/plan.js +473 -0
  1903. package/dist/kernel/session/planning-context.js +92 -0
  1904. package/dist/kernel/session/planning-limits.js +2 -0
  1905. package/dist/kernel/session/proof.js +258 -0
  1906. package/dist/kernel/session/reducer-cli.js +23 -0
  1907. package/dist/kernel/session/research-observations.js +58 -0
  1908. package/dist/kernel/session/research-proof-projection.js +62 -0
  1909. package/dist/kernel/session/route-scoring.js +537 -0
  1910. package/dist/kernel/session/route-utterance.js +321 -0
  1911. package/dist/kernel/session/run.js +2042 -0
  1912. package/dist/kernel/session/runtime-write-audit.js +47 -0
  1913. package/dist/kernel/session/scope.js +75 -0
  1914. package/dist/kernel/session/semantic-batch.js +535 -0
  1915. package/dist/kernel/session/setup.js +126 -0
  1916. package/dist/kernel/session/status.js +320 -0
  1917. package/dist/kernel/session/stepper.js +188 -0
  1918. package/dist/kernel/session/update.js +95 -0
  1919. package/dist/kernel/session/verify.js +122 -0
  1920. package/dist/kernel/session/worker-prompt.js +477 -0
  1921. package/dist/kernel/session/workspace-revision.js +58 -0
  1922. package/dist/kernel/session/workspaces.js +68 -0
  1923. package/dist/kernel/work-orders/instantiate.js +51 -0
  1924. package/dist/kernel/work-orders/lifecycle.js +156 -0
  1925. package/dist/kernel/work-orders/outcomes.js +107 -0
  1926. package/dist/kernel/work-orders/types.js +1 -0
  1927. package/dist/tooling/browser-proof.js +1128 -0
  1928. package/dist/tooling/calibrate-utterance-router.js +278 -0
  1929. package/dist/tooling/catalog-scaffold.js +182 -0
  1930. package/dist/tooling/export-task-skill.js +181 -0
  1931. package/dist/tooling/grade-design-surface.js +341 -0
  1932. package/dist/tooling/grade-screenshots.js +462 -0
  1933. package/dist/tooling/knowledge.js +208 -0
  1934. package/dist/tooling/lib/app-copy-rules.js +369 -0
  1935. package/dist/tooling/lib/artifact-pages.js +136 -0
  1936. package/dist/tooling/lib/audit-plan.js +382 -0
  1937. package/dist/tooling/lib/canonical-json.js +26 -0
  1938. package/dist/tooling/lib/cli-entrypoint.js +13 -0
  1939. package/dist/tooling/lib/content-assets.js +246 -0
  1940. package/dist/tooling/lib/design-exploration.js +165 -0
  1941. package/dist/tooling/lib/design-md.js +381 -0
  1942. package/dist/tooling/lib/design-state.js +278 -0
  1943. package/dist/tooling/lib/design-taste-rubric.js +326 -0
  1944. package/dist/tooling/lib/founder-copy.js +522 -0
  1945. package/dist/tooling/lib/git-root.js +11 -0
  1946. package/dist/tooling/lib/grading.js +43 -0
  1947. package/dist/tooling/lib/html.js +31 -0
  1948. package/dist/tooling/lib/knowledge-freshness-pin.js +69 -0
  1949. package/dist/tooling/lib/launch-state.js +794 -0
  1950. package/dist/tooling/lib/markdown-lite.js +294 -0
  1951. package/dist/tooling/lib/no-slop-rules.js +243 -0
  1952. package/dist/tooling/lib/packed-check.js +60 -0
  1953. package/dist/tooling/lib/posthog-retention.js +96 -0
  1954. package/dist/tooling/lib/render-artifact-page.js +312 -0
  1955. package/dist/tooling/lib/runtime-sync-lib.js +122 -0
  1956. package/dist/tooling/lib/script-paths.js +117 -0
  1957. package/dist/tooling/lib/shard-pool.js +99 -0
  1958. package/dist/tooling/lib/skill-root.js +31 -0
  1959. package/dist/tooling/lib/source-freshness-state.js +31 -0
  1960. package/dist/tooling/lib/source-http.js +166 -0
  1961. package/dist/tooling/lib/spawn.js +30 -0
  1962. package/dist/tooling/lib/tsx-bin.js +64 -0
  1963. package/dist/tooling/lib/tsx-launcher.mjs +57 -0
  1964. package/dist/tooling/print-hosted-version.js +46 -0
  1965. package/dist/tooling/probe-eas.js +91 -0
  1966. package/dist/tooling/probe-posthog.js +263 -0
  1967. package/dist/tooling/probe-revenuecat-cli.js +399 -0
  1968. package/dist/tooling/probe-revenuecat.js +234 -0
  1969. package/dist/tooling/promote-design-tokens.js +215 -0
  1970. package/dist/tooling/provision-posthog-platform.js +126 -0
  1971. package/dist/tooling/prune-posthog-persons.js +270 -0
  1972. package/dist/tooling/render-artifact-pages.js +70 -0
  1973. package/dist/tooling/render-credits.js +269 -0
  1974. package/dist/tooling/render-design-room.js +451 -0
  1975. package/dist/tooling/render-hosted-bundle.js +186 -0
  1976. package/dist/tooling/render-product.js +102 -0
  1977. package/dist/tooling/render-public-api.js +95 -0
  1978. package/dist/tooling/render-task-skills.js +71 -0
  1979. package/dist/tooling/report-research-evidence-failures.js +135 -0
  1980. package/dist/tooling/run-audit.js +332 -0
  1981. package/dist/tooling/runtime-sync.js +392 -0
  1982. package/dist/tooling/seed-design-brief.js +65 -0
  1983. package/dist/tooling/test-public-api.js +37 -0
  1984. package/entrypoints/cli/b2c.mjs +51 -0
  1985. package/entrypoints/cli/business.ts +255 -0
  1986. package/entrypoints/cli/contribute.ts +273 -0
  1987. package/entrypoints/cli/help.d.mts +23 -0
  1988. package/entrypoints/cli/help.mjs +262 -0
  1989. package/entrypoints/mcp/b2c-app-builder-mcp.mjs +12 -0
  1990. package/entrypoints/mcp/business.ts +22 -0
  1991. package/entrypoints/mcp/contribute.ts +42 -0
  1992. package/entrypoints/mcp/run-process.ts +59 -0
  1993. package/entrypoints/mcp/server.ts +808 -0
  1994. package/examples/extensions/layers-growth/LICENSE-layers-mcp.txt +21 -0
  1995. package/examples/extensions/layers-growth/README.md +39 -0
  1996. package/examples/extensions/layers-growth/draft-input.json +31 -0
  1997. package/examples/extensions/layers-growth/evidence.json +17 -0
  1998. package/examples/extensions/layers-growth/extension.yaml +200 -0
  1999. package/examples/extensions/layers-growth/integration.md +122 -0
  2000. package/examples/extensions/layers-growth/output.json +23 -0
  2001. package/examples/extensions/layers-growth/pack.yaml +58 -0
  2002. package/examples/extensions/layers-growth/read-input.json +11 -0
  2003. package/examples/extensions/postiz-social/README.md +11 -0
  2004. package/examples/extensions/postiz-social/extension.yaml +178 -0
  2005. package/examples/extensions/postiz-social/integration.md +24 -0
  2006. package/examples/extensions/postiz-social/schemas/post.evidence.json +13 -0
  2007. package/examples/extensions/postiz-social/schemas/post.input.json +13 -0
  2008. package/examples/extensions/postiz-social/schemas/post.output.json +11 -0
  2009. package/examples/extensions/store-screenshot-compose/README.md +108 -0
  2010. package/examples/extensions/store-screenshot-compose/compose.mjs +683 -0
  2011. package/examples/extensions/store-screenshot-compose/compositor.md +51 -0
  2012. package/examples/extensions/store-screenshot-compose/copy.sample.json +28 -0
  2013. package/examples/extensions/store-screenshot-compose/extension.yaml +212 -0
  2014. package/examples/extensions/store-screenshot-compose/pack.yaml +60 -0
  2015. package/examples/extensions/store-screenshot-compose/schemas/compose-layout.input.json +17 -0
  2016. package/examples/extensions/store-screenshot-compose/schemas/compose-layout.output.json +32 -0
  2017. package/examples/extensions/store-screenshot-compose/schemas/export-localized.input.json +28 -0
  2018. package/examples/extensions/store-screenshot-compose/schemas/export-localized.output.json +29 -0
  2019. package/examples/extensions/store-screenshot-compose/schemas/provenance.evidence.json +80 -0
  2020. package/examples/extensions/store-screenshot-compose/schemas/validate-deliverables.evidence.json +41 -0
  2021. package/examples/extensions/store-screenshot-compose/schemas/validate-deliverables.input.json +12 -0
  2022. package/examples/extensions/store-screenshot-compose/schemas/validate-deliverables.output.json +56 -0
  2023. package/examples/extensions/store-screenshot-compose/templates/device-well.svg.tmpl +8 -0
  2024. package/examples/extensions/store-screenshot-compose/wells.json +38 -0
  2025. package/examples/extensions/superwall-ios/README.md +47 -0
  2026. package/examples/extensions/superwall-ios/dependency-checksums.json +6 -0
  2027. package/examples/extensions/superwall-ios/evidence.json +19 -0
  2028. package/examples/extensions/superwall-ios/extension.yaml +174 -0
  2029. package/examples/extensions/superwall-ios/input.json +15 -0
  2030. package/examples/extensions/superwall-ios/integration.md +9 -0
  2031. package/examples/extensions/superwall-ios/local-proof.json +44 -0
  2032. package/examples/extensions/superwall-ios/native/Package.resolved +32 -0
  2033. package/examples/extensions/superwall-ios/native/Package.swift +20 -0
  2034. package/examples/extensions/superwall-ios/native/Sources/MonetizationCore/EntitlementState.swift +54 -0
  2035. package/examples/extensions/superwall-ios/native/Sources/MonetizationNative/RevenueCatController.swift +129 -0
  2036. package/examples/extensions/superwall-ios/native/Tests/MonetizationCoreTests/EntitlementStateTests.swift +46 -0
  2037. package/examples/extensions/superwall-ios/output.json +16 -0
  2038. package/examples/extensions/superwall-ios/pack.yaml +56 -0
  2039. package/examples/extensions/support-case/README.md +7 -0
  2040. package/examples/extensions/support-case/evidence.json +21 -0
  2041. package/examples/extensions/support-case/extension.yaml +83 -0
  2042. package/examples/extensions/support-case/input.json +16 -0
  2043. package/examples/extensions/support-case/output.json +18 -0
  2044. package/examples/extensions/support-case/pack.yaml +38 -0
  2045. package/examples/extensions/support-case/support.md +3 -0
  2046. package/examples/workspace/README.md +3 -0
  2047. package/examples/workspace/business/DESIGN.md +338 -0
  2048. package/examples/workspace/business/PRODUCT.md +91 -0
  2049. package/examples/workspace/business/README.md +20 -0
  2050. package/examples/workspace/business/analytics/ANALYTICS.md +186 -0
  2051. package/examples/workspace/business/analytics/README.md +3 -0
  2052. package/examples/workspace/business/analytics/analytics-plan.html +14 -0
  2053. package/examples/workspace/business/analytics/posthog-proof.example.json +11 -0
  2054. package/examples/workspace/business/design/README.md +12 -0
  2055. package/examples/workspace/business/design/design-room.html +219 -0
  2056. package/examples/workspace/business/design/motion-catalog/DemoBloom.swift +208 -0
  2057. package/examples/workspace/business/design/motion-catalog/DemoCardReveal.swift +312 -0
  2058. package/examples/workspace/business/design/motion-catalog/DemoExtrude.swift +255 -0
  2059. package/examples/workspace/business/design/motion-catalog/DemoGesture.swift +315 -0
  2060. package/examples/workspace/business/design/motion-catalog/DemoGrid.swift +215 -0
  2061. package/examples/workspace/business/design/motion-catalog/DemoMascot.swift +535 -0
  2062. package/examples/workspace/business/design/motion-catalog/DemoMeter.swift +335 -0
  2063. package/examples/workspace/business/design/motion-catalog/DemoScratch.swift +357 -0
  2064. package/examples/workspace/business/design/motion-catalog/DemoScrub.swift +267 -0
  2065. package/examples/workspace/business/design/motion-catalog/DemoShiny.swift +325 -0
  2066. package/examples/workspace/business/design/motion-catalog/DemoSphereCloud.swift +337 -0
  2067. package/examples/workspace/business/design/motion-catalog/DemoTreasure.swift +484 -0
  2068. package/examples/workspace/business/design/motion-catalog/MotionLabControls.swift +48 -0
  2069. package/examples/workspace/business/design/motion-catalog/MotionLabIndex.swift +120 -0
  2070. package/examples/workspace/business/design/motion-catalog/MotionLabTheme.swift +54 -0
  2071. package/examples/workspace/business/design/motion-catalog/README.md +74 -0
  2072. package/examples/workspace/business/design/motion-catalog/TokenSpring.swift +96 -0
  2073. package/examples/workspace/business/design/motion-catalog/motion-tokens.ts +109 -0
  2074. package/examples/workspace/business/design/system/DesignTokens.swift +57 -0
  2075. package/examples/workspace/business/design/system/PremiumCraft.swift +352 -0
  2076. package/examples/workspace/business/design/system/design-tokens.ts +84 -0
  2077. package/examples/workspace/business/design/system/design_tokens.dart +14 -0
  2078. package/examples/workspace/business/design/system/tokens.css +45 -0
  2079. package/examples/workspace/business/design/system/tokens.json +313 -0
  2080. package/examples/workspace/business/engineering/ACCESSIBILITY_READINESS.md +10 -0
  2081. package/examples/workspace/business/engineering/APP_QUALITY.md +23 -0
  2082. package/examples/workspace/business/engineering/ENGINEERING_PLAN.md +13 -0
  2083. package/examples/workspace/business/engineering/PRODUCTION_READINESS.md +91 -0
  2084. package/examples/workspace/business/engineering/README.md +3 -0
  2085. package/examples/workspace/business/engineering/TECH_SPEC.md +57 -0
  2086. package/examples/workspace/business/engineering/app-agent-roster/APP_AGENTS.md +88 -0
  2087. package/examples/workspace/business/engineering/app-agent-roster/agents/accessibility-device-qa.md +36 -0
  2088. package/examples/workspace/business/engineering/app-agent-roster/agents/backend-infrastructure-engineer.md +36 -0
  2089. package/examples/workspace/business/engineering/app-agent-roster/agents/copy-specialist.md +36 -0
  2090. package/examples/workspace/business/engineering/app-agent-roster/agents/customer-success.md +54 -0
  2091. package/examples/workspace/business/engineering/app-agent-roster/agents/design-guru.md +56 -0
  2092. package/examples/workspace/business/engineering/app-agent-roster/agents/engineering-leader.md +60 -0
  2093. package/examples/workspace/business/engineering/app-agent-roster/agents/launch-surface-producer.md +118 -0
  2094. package/examples/workspace/business/engineering/app-agent-roster/agents/marketing-guru.md +59 -0
  2095. package/examples/workspace/business/engineering/app-agent-roster/agents/mobile-engineer.md +36 -0
  2096. package/examples/workspace/business/engineering/app-agent-roster/agents/operator-readiness.md +61 -0
  2097. package/examples/workspace/business/engineering/app-agent-roster/agents/orchestrator.md +56 -0
  2098. package/examples/workspace/business/engineering/app-agent-roster/agents/product-leader.md +52 -0
  2099. package/examples/workspace/business/engineering/app-agent-roster/agents/research-strategist.md +36 -0
  2100. package/examples/workspace/business/engineering/app-agent-roster/agents/security-architect.md +63 -0
  2101. package/examples/workspace/business/growth/DEMO_VIDEO.md +44 -0
  2102. package/examples/workspace/business/growth/EMAIL_OPS.md +109 -0
  2103. package/examples/workspace/business/growth/FASTLANE_OPS.md +5 -0
  2104. package/examples/workspace/business/growth/LAUNCH_NARRATIVE.md +241 -0
  2105. package/examples/workspace/business/growth/PAID_UA.md +142 -0
  2106. package/examples/workspace/business/growth/README.md +3 -0
  2107. package/examples/workspace/business/growth/UGC_PLAYBOOK.md +21 -0
  2108. package/examples/workspace/business/growth/VIRAL_GROWTH.md +130 -0
  2109. package/examples/workspace/business/growth/content-assets/CONTENT_ASSETS.md +127 -0
  2110. package/examples/workspace/business/growth/content-assets/content-assets.html +97 -0
  2111. package/examples/workspace/business/growth/content-assets/manifest.json +73 -0
  2112. package/examples/workspace/business/growth/content-assets/remotion-README.md +26 -0
  2113. package/examples/workspace/business/growth/content-intelligence.csv +1 -0
  2114. package/examples/workspace/business/growth/format-lab.csv +2 -0
  2115. package/examples/workspace/business/growth/landing/README.md +81 -0
  2116. package/examples/workspace/business/growth/landing/lib/motion-tokens.ts +103 -0
  2117. package/examples/workspace/business/growth/landing/lib/scene-progress.ts +286 -0
  2118. package/examples/workspace/business/growth/landing/lib/scroll-scene-controller.ts +464 -0
  2119. package/examples/workspace/business/growth/landing/motion.css +405 -0
  2120. package/examples/workspace/business/growth/landing/scrollytelling.portable.example.html +156 -0
  2121. package/examples/workspace/business/growth/landing/sections/Bento.tsx +51 -0
  2122. package/examples/workspace/business/growth/landing/sections/Cta.tsx +48 -0
  2123. package/examples/workspace/business/growth/landing/sections/Hero.tsx +62 -0
  2124. package/examples/workspace/business/growth/landing/sections/Marquee.tsx +34 -0
  2125. package/examples/workspace/business/growth/landing/sections/Pricing.tsx +73 -0
  2126. package/examples/workspace/business/growth/landing/sections/Scrollytelling.tsx +193 -0
  2127. package/examples/workspace/business/growth/landing/sections/Stats.tsx +74 -0
  2128. package/examples/workspace/business/growth/landing/sections/Testimonials.tsx +61 -0
  2129. package/examples/workspace/business/growth/landing/surface-contract.example.json +790 -0
  2130. package/examples/workspace/business/growth/paid-ua-report.csv +2 -0
  2131. package/examples/workspace/business/growth/resend/email-templates.ts +608 -0
  2132. package/examples/workspace/business/operations/AGENT_OPERATIONS.md +56 -0
  2133. package/examples/workspace/business/operations/BUSINESS_ACCESS.md +114 -0
  2134. package/examples/workspace/business/operations/FAILURE_CARDS.md +21 -0
  2135. package/examples/workspace/business/operations/LAUNCH_RETRO.md +53 -0
  2136. package/examples/workspace/business/operations/METRIC_CONTRACTS.md +48 -0
  2137. package/examples/workspace/business/operations/ORCHESTRATION.md +142 -0
  2138. package/examples/workspace/business/operations/POST_LAUNCH_OPS.md +84 -0
  2139. package/examples/workspace/business/operations/PROVIDER_PROOF.md +20 -0
  2140. package/examples/workspace/business/operations/README.md +3 -0
  2141. package/examples/workspace/business/operations/agent-operations.json +130 -0
  2142. package/examples/workspace/business/operations/agent-operations.schema.json +274 -0
  2143. package/examples/workspace/business/operations/business-access.json +418 -0
  2144. package/examples/workspace/business/operations/business-access.schema.json +285 -0
  2145. package/examples/workspace/business/operations/metric-contracts.json +346 -0
  2146. package/examples/workspace/business/operations/metric-contracts.schema.json +255 -0
  2147. package/examples/workspace/business/operations/orchestration.html +326 -0
  2148. package/examples/workspace/business/product/ONBOARDING.md +306 -0
  2149. package/examples/workspace/business/product/README.md +8 -0
  2150. package/examples/workspace/business/product/copy/COPY_BRIEF.md +64 -0
  2151. package/examples/workspace/business/product/copy/COPY_DECK.md +84 -0
  2152. package/examples/workspace/business/product/experience/11-star-experience/11-star-experience.html +326 -0
  2153. package/examples/workspace/business/product/experience/11-star-experience/11_STAR_EXPERIENCE.md +93 -0
  2154. package/examples/workspace/business/product/experience/emotional-design/EMOTIONAL_AUDIT.md +608 -0
  2155. package/examples/workspace/business/product/experience/emotional-design/EMOTIONAL_DESIGN.md +355 -0
  2156. package/examples/workspace/business/product/experience/emotional-design/emotional-design.html +737 -0
  2157. package/examples/workspace/business/product/experience/ux-patterns/UX_PATTERNS.md +144 -0
  2158. package/examples/workspace/business/product/experience/ux-patterns/ux-patterns.html +102 -0
  2159. package/examples/workspace/business/product/onboarding.html +58 -0
  2160. package/examples/workspace/business/product.yaml +125 -0
  2161. package/examples/workspace/business/revenue/README.md +3 -0
  2162. package/examples/workspace/business/revenue/REVENUE_OPS.md +210 -0
  2163. package/examples/workspace/business/revenue/revenuecat-proof.example.json +16 -0
  2164. package/examples/workspace/business/revenue/revenuecat-proof.md +70 -0
  2165. package/examples/workspace/business/state/LAUNCH_TRACE.md +29 -0
  2166. package/examples/workspace/business/state/README.md +9 -0
  2167. package/examples/workspace/business/state/business-state.json +520 -0
  2168. package/examples/workspace/business/store/APPLE_APP_STORE_REQUIREMENTS.md +84 -0
  2169. package/examples/workspace/business/store/APPLE_SIGNING.md +103 -0
  2170. package/examples/workspace/business/store/APP_REVIEW.md +10 -0
  2171. package/examples/workspace/business/store/GOOGLE_PLAY_RELEASE.md +71 -0
  2172. package/examples/workspace/business/store/MARKETPLACE_COMPLIANCE.md +8 -0
  2173. package/examples/workspace/business/store/README.md +3 -0
  2174. package/examples/workspace/business/store/STORE_CONSOLE.md +62 -0
  2175. package/examples/workspace/business/store/app-store-listing/APP_STORE_LISTING.md +160 -0
  2176. package/examples/workspace/business/store/app-store-listing/SCREENSHOTS.md +246 -0
  2177. package/examples/workspace/business/store/app-store-listing/SCREENSHOT_RUBRIC.md +202 -0
  2178. package/examples/workspace/business/store/app-store-listing/app-privacy-questionnaire.html +156 -0
  2179. package/examples/workspace/business/store/app-store-listing/app-store-listing.html +154 -0
  2180. package/examples/workspace/business/store/app-store-listing/screenshot-rubric-scores.example.json +117 -0
  2181. package/examples/workspace/business/store/store-console.html +271 -0
  2182. package/examples/workspace/business/strategy/BRAND.md +48 -0
  2183. package/examples/workspace/business/strategy/OFFER_TEST.md +43 -0
  2184. package/examples/workspace/business/strategy/PORTFOLIO_REGISTRY.md +34 -0
  2185. package/examples/workspace/business/strategy/README.md +3 -0
  2186. package/examples/workspace/business/strategy/RESEARCH.md +87 -0
  2187. package/examples/workspace/business/strategy/SIGNAL_CORPUS.md +34 -0
  2188. package/examples/workspace/business/strategy/TOOL_DECISIONS.md +30 -0
  2189. package/examples/workspace/business/strategy/localization-market-research/LOCALIZATION_MARKET_RESEARCH.md +93 -0
  2190. package/examples/workspace/business/strategy/localization-market-research/localization-market-research.html +62 -0
  2191. package/examples/workspace/business/studio/seed/business.json +57 -0
  2192. package/examples/workspace/business/trust/AI_SAFETY.md +10 -0
  2193. package/examples/workspace/business/trust/COMMUNITY_SAFETY.md +10 -0
  2194. package/examples/workspace/business/trust/PRIVACY.md +31 -0
  2195. package/examples/workspace/business/trust/README.md +3 -0
  2196. package/examples/workspace/business/trust/SECURITY.md +145 -0
  2197. package/examples/workspace/business/trust/TERMS.md +21 -0
  2198. package/examples/workspace/business/trust/secrets/.env.example +2 -0
  2199. package/examples/workspace/business/trust/secrets/SECRETS.md +77 -0
  2200. package/examples/workspace/business/trust/secrets/doppler.yaml +3 -0
  2201. package/examples/workspace/business/trust/security-review.html +373 -0
  2202. package/examples/workspace/business/ugc/script-bank.md +9 -0
  2203. package/kernel/autonomy/budget.ts +130 -0
  2204. package/kernel/autonomy/evaluator.ts +136 -0
  2205. package/kernel/autonomy/grants.ts +124 -0
  2206. package/kernel/autonomy/killswitch.ts +27 -0
  2207. package/kernel/autonomy/prerequisites.ts +94 -0
  2208. package/kernel/autonomy/probes/budget.ts +55 -0
  2209. package/kernel/autonomy/probes/doppler.ts +66 -0
  2210. package/kernel/autonomy/standing-approvals.ts +336 -0
  2211. package/kernel/autonomy/waivers.ts +129 -0
  2212. package/kernel/composition/activation.ts +471 -0
  2213. package/kernel/composition/compile-bindings.ts +297 -0
  2214. package/kernel/composition/notices.ts +226 -0
  2215. package/kernel/composition/onboarding-selection.ts +210 -0
  2216. package/kernel/composition/providers.ts +43 -0
  2217. package/kernel/composition/resolve.ts +252 -0
  2218. package/kernel/composition/resources.ts +298 -0
  2219. package/kernel/composition/semantic-plan-lower.ts +831 -0
  2220. package/kernel/composition/worker-context.ts +63 -0
  2221. package/kernel/context/budget.ts +16 -0
  2222. package/kernel/context/compile.ts +66 -0
  2223. package/kernel/context/receipt.ts +34 -0
  2224. package/kernel/context/selectors.ts +30 -0
  2225. package/kernel/contribution/accepted-upstreams.ts +83 -0
  2226. package/kernel/contribution/adoption-map.ts +153 -0
  2227. package/kernel/contribution/check.ts +197 -0
  2228. package/kernel/contribution/evaluate.ts +275 -0
  2229. package/kernel/contribution/existing-owners.ts +115 -0
  2230. package/kernel/contribution/github-metadata.ts +241 -0
  2231. package/kernel/contribution/host-observe.ts +146 -0
  2232. package/kernel/contribution/intake.ts +611 -0
  2233. package/kernel/contribution/manifest-io.ts +277 -0
  2234. package/kernel/contribution/plan.ts +422 -0
  2235. package/kernel/contribution/preview.ts +217 -0
  2236. package/kernel/contribution/provider-capability-delta.ts +178 -0
  2237. package/kernel/contribution/service.ts +291 -0
  2238. package/kernel/contribution/types.ts +180 -0
  2239. package/kernel/contribution/untrusted.ts +198 -0
  2240. package/kernel/contribution/upstream-coverage.ts +116 -0
  2241. package/kernel/contribution/upstreams-load.ts +184 -0
  2242. package/kernel/contribution/upstreams.ts +1206 -0
  2243. package/kernel/engine/artifact-fingerprint.ts +25 -0
  2244. package/kernel/engine/compile.ts +419 -0
  2245. package/kernel/engine/design-taste-authority.ts +264 -0
  2246. package/kernel/engine/dispatch.ts +96 -0
  2247. package/kernel/engine/founder-decision-receipt.ts +580 -0
  2248. package/kernel/engine/founder-trust-store.ts +771 -0
  2249. package/kernel/engine/frontier.ts +157 -0
  2250. package/kernel/engine/node-brief.ts +285 -0
  2251. package/kernel/engine/proof-rung.ts +95 -0
  2252. package/kernel/engine/review-evidence.ts +343 -0
  2253. package/kernel/engine/review-facet.ts +9 -0
  2254. package/kernel/engine/runstate.ts +1113 -0
  2255. package/kernel/engine/source-fingerprint.ts +100 -0
  2256. package/kernel/engine/verification-policy.ts +6 -0
  2257. package/kernel/engine/verification.ts +154 -0
  2258. package/kernel/knowledge-service/journey.ts +50 -0
  2259. package/kernel/knowledge-service/projection-helpers.ts +306 -0
  2260. package/kernel/knowledge-service/sections.ts +68 -0
  2261. package/kernel/knowledge-service/semantic-graph-views.ts +727 -0
  2262. package/kernel/knowledge-service/service.ts +835 -0
  2263. package/kernel/knowledge-service/tools.ts +118 -0
  2264. package/kernel/knowledge-service/types.ts +236 -0
  2265. package/kernel/lib/atomic-file.ts +34 -0
  2266. package/kernel/lib/bounded-file.ts +24 -0
  2267. package/kernel/lib/cli.ts +44 -0
  2268. package/kernel/lib/empty-equivalent-evidence.ts +35 -0
  2269. package/kernel/lib/later-guidance.ts +128 -0
  2270. package/kernel/lib/required-table-section.ts +679 -0
  2271. package/kernel/operating-model/agreements.ts +29 -0
  2272. package/kernel/operating-model/authorize.ts +117 -0
  2273. package/kernel/operating-model/erasure-metadata.ts +19 -0
  2274. package/kernel/operating-model/events.ts +142 -0
  2275. package/kernel/operating-model/mandates.ts +81 -0
  2276. package/kernel/operating-model/market-experiment.ts +354 -0
  2277. package/kernel/operating-model/measurement.ts +542 -0
  2278. package/kernel/operating-model/parties.ts +23 -0
  2279. package/kernel/operating-model/projections.ts +111 -0
  2280. package/kernel/operating-model/types.ts +306 -0
  2281. package/kernel/operating-model/validate.ts +388 -0
  2282. package/kernel/reducer/audit.ts +146 -0
  2283. package/kernel/reducer/cli.ts +552 -0
  2284. package/kernel/reducer/current-truth.ts +432 -0
  2285. package/kernel/reducer/erasure-guard.ts +17 -0
  2286. package/kernel/reducer/erasure.ts +741 -0
  2287. package/kernel/reducer/lock.ts +169 -0
  2288. package/kernel/reducer/patch.ts +395 -0
  2289. package/kernel/reducer/semantic-batch-ownership.ts +36 -0
  2290. package/kernel/reducer/semantic-graph-ownership.ts +54 -0
  2291. package/kernel/reducer/shared-claims.ts +133 -0
  2292. package/kernel/routing/eligibility.ts +71 -0
  2293. package/kernel/routing/rank.ts +21 -0
  2294. package/kernel/routing/resolve.ts +97 -0
  2295. package/kernel/routing/signals.ts +28 -0
  2296. package/kernel/routing/types.ts +84 -0
  2297. package/kernel/schema/app-review-webhook-envelope.schema.json +39 -0
  2298. package/kernel/schema/app-review.schema.json +1504 -0
  2299. package/kernel/schema/budget-ledger.schema.json +84 -0
  2300. package/kernel/schema/business-state.schema.json +909 -0
  2301. package/kernel/schema/checkpoint.schema.json +17 -0
  2302. package/kernel/schema/control.schema.json +40 -0
  2303. package/kernel/schema/current-truth.schema.json +56 -0
  2304. package/kernel/schema/domain-authority.ts +22 -0
  2305. package/kernel/schema/evidence-grammar.ts +132 -0
  2306. package/kernel/schema/evidence-schema-version.json +5 -0
  2307. package/kernel/schema/evidence-schema-version.ts +82 -0
  2308. package/kernel/schema/grants.schema.json +102 -0
  2309. package/kernel/schema/index.ts +518 -0
  2310. package/kernel/schema/market-experiment.schema.json +212 -0
  2311. package/kernel/schema/metric-contracts.schema.json +601 -0
  2312. package/kernel/schema/offer-test.schema.json +88 -0
  2313. package/kernel/schema/operation-envelope.schema.json +31 -0
  2314. package/kernel/schema/research-evidence.schema.json +144 -0
  2315. package/kernel/schema/run-state.schema.json +430 -0
  2316. package/kernel/schema/signal-corpus.schema.json +94 -0
  2317. package/kernel/schema/status.schema.json +25 -0
  2318. package/kernel/schema/types.ts +701 -0
  2319. package/kernel/schema/waivers.schema.json +97 -0
  2320. package/kernel/services/business.ts +431 -0
  2321. package/kernel/services/installed-composition.ts +146 -0
  2322. package/kernel/services/lifecycle.ts +262 -0
  2323. package/kernel/services/plan-projection.ts +230 -0
  2324. package/kernel/services/research-decision.ts +234 -0
  2325. package/kernel/services/research.ts +102 -0
  2326. package/kernel/services/source-projection.ts +503 -0
  2327. package/kernel/session/app-review-ingress.ts +254 -0
  2328. package/kernel/session/approve.ts +411 -0
  2329. package/kernel/session/attempt-failure.ts +113 -0
  2330. package/kernel/session/bootstrap.ts +497 -0
  2331. package/kernel/session/brief.ts +94 -0
  2332. package/kernel/session/catalog-contract.ts +293 -0
  2333. package/kernel/session/check.ts +206 -0
  2334. package/kernel/session/deterministic-gates.ts +76 -0
  2335. package/kernel/session/digest.ts +405 -0
  2336. package/kernel/session/doctor-host.ts +219 -0
  2337. package/kernel/session/doctor.ts +387 -0
  2338. package/kernel/session/executor.ts +934 -0
  2339. package/kernel/session/firstparty-worker-host.ts +30 -0
  2340. package/kernel/session/founder-brief.ts +110 -0
  2341. package/kernel/session/founder-gate.ts +188 -0
  2342. package/kernel/session/founder-key.ts +119 -0
  2343. package/kernel/session/initialization-guard.ts +17 -0
  2344. package/kernel/session/initialize.ts +209 -0
  2345. package/kernel/session/input-inventory.ts +217 -0
  2346. package/kernel/session/inspect.ts +304 -0
  2347. package/kernel/session/ios-proof-receipt.ts +273 -0
  2348. package/kernel/session/market-experiment.ts +81 -0
  2349. package/kernel/session/new.ts +202 -0
  2350. package/kernel/session/onboard.ts +551 -0
  2351. package/kernel/session/operate-bind.ts +58 -0
  2352. package/kernel/session/operate.ts +239 -0
  2353. package/kernel/session/operating-service.ts +452 -0
  2354. package/kernel/session/operating-transport.ts +125 -0
  2355. package/kernel/session/operating-types.ts +107 -0
  2356. package/kernel/session/operation-routes.ts +673 -0
  2357. package/kernel/session/plan.ts +667 -0
  2358. package/kernel/session/planning-context.ts +96 -0
  2359. package/kernel/session/planning-limits.ts +2 -0
  2360. package/kernel/session/proof.ts +302 -0
  2361. package/kernel/session/reducer-cli.ts +30 -0
  2362. package/kernel/session/research-observations.ts +59 -0
  2363. package/kernel/session/research-proof-projection.ts +76 -0
  2364. package/kernel/session/route-scoring.ts +560 -0
  2365. package/kernel/session/route-utterance.ts +486 -0
  2366. package/kernel/session/run.ts +2214 -0
  2367. package/kernel/session/runtime-write-audit.ts +44 -0
  2368. package/kernel/session/scope.ts +85 -0
  2369. package/kernel/session/semantic-batch.ts +834 -0
  2370. package/kernel/session/setup.ts +142 -0
  2371. package/kernel/session/status.ts +397 -0
  2372. package/kernel/session/stepper.ts +258 -0
  2373. package/kernel/session/update.ts +106 -0
  2374. package/kernel/session/verify.ts +135 -0
  2375. package/kernel/session/worker-prompt.ts +572 -0
  2376. package/kernel/session/workspace-revision.ts +59 -0
  2377. package/kernel/session/workspaces.ts +73 -0
  2378. package/kernel/work-orders/instantiate.ts +68 -0
  2379. package/kernel/work-orders/lifecycle.ts +178 -0
  2380. package/kernel/work-orders/outcomes.ts +161 -0
  2381. package/kernel/work-orders/types.ts +64 -0
  2382. package/knowledge/README.md +81 -0
  2383. package/knowledge/data/analytics-attribution.md +317 -0
  2384. package/knowledge/data/posthog-agent-tooling.md +101 -0
  2385. package/knowledge/design/audience-derived-identity.md +55 -0
  2386. package/knowledge/design/consumer-craft-benchmarks.md +72 -0
  2387. package/knowledge/design/design-acceptance.md +199 -0
  2388. package/knowledge/design/design-evidence-stack.md +130 -0
  2389. package/knowledge/design/design-room.md +83 -0
  2390. package/knowledge/design/design-visual-system.md +247 -0
  2391. package/knowledge/design/design-worthiness.md +188 -0
  2392. package/knowledge/design/editorial-scrollytelling.md +239 -0
  2393. package/knowledge/design/landing-motion-craft.md +67 -0
  2394. package/knowledge/design/mobile-flow-craft.md +177 -0
  2395. package/knowledge/design/motion-craft-benchmarks.md +340 -0
  2396. package/knowledge/design/premium-mobile-craft.md +137 -0
  2397. package/knowledge/design/quality-lens.md +100 -0
  2398. package/knowledge/design/refero-ux-patterns.md +131 -0
  2399. package/knowledge/design/remotion-content-assets.md +370 -0
  2400. package/knowledge/design/surfaces-b2c.md +84 -0
  2401. package/knowledge/design/vibecoded-tells.md +129 -0
  2402. package/knowledge/engineering/accessibility-readiness.md +24 -0
  2403. package/knowledge/engineering/app-agent-roster.md +120 -0
  2404. package/knowledge/engineering/app-quality.md +19 -0
  2405. package/knowledge/engineering/backend-data-contract.md +187 -0
  2406. package/knowledge/engineering/engineering-orchestration.md +365 -0
  2407. package/knowledge/engineering/expo-compatibility.md +74 -0
  2408. package/knowledge/engineering/expo-operations-map.md +84 -0
  2409. package/knowledge/engineering/expo-stack-selection.md +75 -0
  2410. package/knowledge/engineering/external-skill-packs.md +47 -0
  2411. package/knowledge/engineering/mobai-toolbelt.md +389 -0
  2412. package/knowledge/engineering/recommended-agent-skills.md +109 -0
  2413. package/knowledge/engineering/technical-documentation-ste100.md +89 -0
  2414. package/knowledge/engineering/xcodebuildmcp-testing.md +502 -0
  2415. package/knowledge/experience/commitment-funnel.md +90 -0
  2416. package/knowledge/experience/consumer-product-design-agency.md +268 -0
  2417. package/knowledge/experience/eleven-star-experience.md +194 -0
  2418. package/knowledge/experience/emotional-design-system.md +412 -0
  2419. package/knowledge/experience/emotional-experience-design.md +359 -0
  2420. package/knowledge/experience/emotional-experience-measurement.md +433 -0
  2421. package/knowledge/experience/ethics-guardrail.md +460 -0
  2422. package/knowledge/experience/experience-cards/commitment-card.md +36 -0
  2423. package/knowledge/experience/experience-cards/endowed-progress-card.md +34 -0
  2424. package/knowledge/experience/experience-cards/fresh-start-card.md +34 -0
  2425. package/knowledge/experience/experience-cards/identity-and-self-expression-card.md +35 -0
  2426. package/knowledge/experience/experience-cards/intent-mirroring-card.md +36 -0
  2427. package/knowledge/experience/experience-cards/mastery-and-status-card.md +43 -0
  2428. package/knowledge/experience/experience-cards/peak-end-card.md +44 -0
  2429. package/knowledge/experience/experience-cards/perceived-effort-delay-card.md +37 -0
  2430. package/knowledge/experience/experience-cards/reciprocity-card.md +38 -0
  2431. package/knowledge/experience/experience-cards/recovery-and-trust-repair-card.md +40 -0
  2432. package/knowledge/experience/experience-cards/streak-and-loss-aversion-card.md +37 -0
  2433. package/knowledge/experience/experience-cards/variable-reward-card.md +42 -0
  2434. package/knowledge/experience/experience-cards.md +172 -0
  2435. package/knowledge/experience/onboarding-conversion.md +422 -0
  2436. package/knowledge/experience/onboarding-foundations.md +264 -0
  2437. package/knowledge/experience/paywall-goal-headline.md +99 -0
  2438. package/knowledge/experience/push-notification-lifecycle.md +79 -0
  2439. package/knowledge/growth/appsflyer-mmp.md +99 -0
  2440. package/knowledge/growth/cro-landing.md +86 -0
  2441. package/knowledge/growth/fastlane-growth-ops.md +321 -0
  2442. package/knowledge/growth/geo-seo.md +163 -0
  2443. package/knowledge/growth/hdyhau-blended-roas.md +75 -0
  2444. package/knowledge/growth/influencer-sponsorship-engine.md +224 -0
  2445. package/knowledge/growth/ios-consumer-playbook-intake.md +65 -0
  2446. package/knowledge/growth/launch-narrative-cadence.md +340 -0
  2447. package/knowledge/growth/non-competitor-angle-discovery.md +80 -0
  2448. package/knowledge/growth/paid-user-acquisition.md +283 -0
  2449. package/knowledge/growth/ugc-creator-engine.md +259 -0
  2450. package/knowledge/growth/viral-growth-loops.md +174 -0
  2451. package/knowledge/money/billing-health-and-reactivation.md +54 -0
  2452. package/knowledge/money/offer-and-pricing-decisions.md +33 -0
  2453. package/knowledge/money/paywall-pricing-and-experiments.md +97 -0
  2454. package/knowledge/money/revenue-monetization.md +107 -0
  2455. package/knowledge/money/revenuecat-agent-tooling.md +174 -0
  2456. package/knowledge/money/revenuecat-and-store-products.md +115 -0
  2457. package/knowledge/money/stripe-and-web-billing.md +83 -0
  2458. package/knowledge/money/subscription-price-derivation.md +105 -0
  2459. package/knowledge/operations/autonomy-onboarding.md +269 -0
  2460. package/knowledge/operations/doppler-organization.md +73 -0
  2461. package/knowledge/operations/founder-zero-operator.md +184 -0
  2462. package/knowledge/operations/frontier-agent-operations.md +189 -0
  2463. package/knowledge/operations/paid-tool-routing.md +172 -0
  2464. package/knowledge/operations/post-launch-operations.md +261 -0
  2465. package/knowledge/operations/provider-state-recipes.md +80 -0
  2466. package/knowledge/operations/resend-email-ops.md +339 -0
  2467. package/knowledge/operations/secrets-management.md +215 -0
  2468. package/knowledge/orchestration/compound-engineering-routing.md +101 -0
  2469. package/knowledge/orchestration/dynamic-workflows.md +198 -0
  2470. package/knowledge/orchestration/full-launch-program.md +179 -0
  2471. package/knowledge/orchestration/isolated-review.md +144 -0
  2472. package/knowledge/orchestration/parallel-agent-orchestration.md +335 -0
  2473. package/knowledge/orchestration/project-state.md +96 -0
  2474. package/knowledge/process/artifact-contracts.md +1527 -0
  2475. package/knowledge/process/cascade-edges.yaml +217 -0
  2476. package/knowledge/process/change-cascade.md +102 -0
  2477. package/knowledge/process/current-truth.md +45 -0
  2478. package/knowledge/process/failure-cards.md +114 -0
  2479. package/knowledge/process/flow-traceability.md +189 -0
  2480. package/knowledge/process/launch-coverage.md +298 -0
  2481. package/knowledge/process/launch-phases.md +838 -0
  2482. package/knowledge/process/learning-capture.md +77 -0
  2483. package/knowledge/process/learnings/audit-runs-from-repo-root.md +22 -0
  2484. package/knowledge/process/provider-contracts.md +49 -0
  2485. package/knowledge/process/provider-proof.md +37 -0
  2486. package/knowledge/process/repository-profiles.md +60 -0
  2487. package/knowledge/process/tool-recipes/device-capture-and-proof.md +100 -0
  2488. package/knowledge/process/tool-recipes/engineering-and-agent-orchestration.md +89 -0
  2489. package/knowledge/process/tool-recipes/funnel-domain-and-privacy.md +142 -0
  2490. package/knowledge/process/tool-recipes/growth-and-store-routing.md +192 -0
  2491. package/knowledge/process/tool-recipes/research-intelligence.md +258 -0
  2492. package/knowledge/process/tool-recipes/revenue-email-analytics.md +101 -0
  2493. package/knowledge/process/tool-recipes/secrets-and-environment.md +35 -0
  2494. package/knowledge/process/tool-recipes/visual-and-motion-production.md +457 -0
  2495. package/knowledge/process/tool-recipes.md +67 -0
  2496. package/knowledge/product/ai-chat-companion.md +96 -0
  2497. package/knowledge/product/core-loop-and-complete-scope.md +82 -0
  2498. package/knowledge/product/habit-tracker.md +89 -0
  2499. package/knowledge/product/photo-ai-media.md +96 -0
  2500. package/knowledge/product/product-moat.md +64 -0
  2501. package/knowledge/product/social-network.md +117 -0
  2502. package/knowledge/research/distribution-first-niche.md +70 -0
  2503. package/knowledge/research/distribution-offer-signal.md +190 -0
  2504. package/knowledge/research/go-pivot-or-kill.md +120 -0
  2505. package/knowledge/research/localization-market-research.md +145 -0
  2506. package/knowledge/research/transformation-demo.md +70 -0
  2507. package/knowledge/store/age-rating-questionnaire.md +75 -0
  2508. package/knowledge/store/app-review-observe.md +314 -0
  2509. package/knowledge/store/app-review-remediate.md +125 -0
  2510. package/knowledge/store/app-review-resubmit.md +128 -0
  2511. package/knowledge/store/app-store-connect-cli.md +347 -0
  2512. package/knowledge/store/app-store-listing-prep.md +277 -0
  2513. package/knowledge/store/apple-signing-release.md +551 -0
  2514. package/knowledge/store/aso-apple-keyword-evidence.md +112 -0
  2515. package/knowledge/store/aso-store-ops.md +316 -0
  2516. package/knowledge/store/google-play-release.md +200 -0
  2517. package/knowledge/store/marketplace-regional-compliance.md +21 -0
  2518. package/knowledge/store/screenshot-toolchain.md +130 -0
  2519. package/knowledge/store/store-console-workflow.md +760 -0
  2520. package/knowledge/trust/community-safety.md +18 -0
  2521. package/knowledge/trust/generative-ai-safety.md +27 -0
  2522. package/knowledge/trust/paid-generative-ai-controls.md +85 -0
  2523. package/knowledge/trust/privacy-terms.md +192 -0
  2524. package/knowledge/trust/security-release-hardening.md +169 -0
  2525. package/knowledge/words/consumer-copy-benchmarks.md +111 -0
  2526. package/knowledge/words/conversion-copy.md +181 -0
  2527. package/knowledge/words/no-slop-writing.md +173 -0
  2528. package/package.json +290 -0
  2529. package/skill-version.json +149 -0
  2530. package/surfaces/starters/ai-chat-companion/README.md +41 -0
  2531. package/surfaces/starters/ai-chat-companion/prompts/00-positioning-strategy.md +45 -0
  2532. package/surfaces/starters/ai-chat-companion/prompts/01-database-schema.md +44 -0
  2533. package/surfaces/starters/ai-chat-companion/prompts/02-auth-system.md +38 -0
  2534. package/surfaces/starters/ai-chat-companion/prompts/03-chat-core-loop.md +42 -0
  2535. package/surfaces/starters/ai-chat-companion/prompts/04-model-integration.md +45 -0
  2536. package/surfaces/starters/ai-chat-companion/prompts/05-memory-personalization.md +38 -0
  2537. package/surfaces/starters/ai-chat-companion/prompts/06-usage-limits-metering.md +36 -0
  2538. package/surfaces/starters/ai-chat-companion/prompts/07-stripe-monetization.md +34 -0
  2539. package/surfaces/starters/ai-chat-companion/prompts/08-safety-and-moderation.md +39 -0
  2540. package/surfaces/starters/ai-chat-companion/prompts/variants/companion-character.md +40 -0
  2541. package/surfaces/starters/ai-chat-companion/prompts/variants/voice-first.md +37 -0
  2542. package/surfaces/starters/ai-chat-companion/starter/.env.example +18 -0
  2543. package/surfaces/starters/ai-chat-companion/starter/.github/workflows/ci.yml +30 -0
  2544. package/surfaces/starters/ai-chat-companion/starter/.gitignore.template +9 -0
  2545. package/surfaces/starters/ai-chat-companion/starter/README.md +48 -0
  2546. package/surfaces/starters/ai-chat-companion/starter/app/api/chat/route.ts +70 -0
  2547. package/surfaces/starters/ai-chat-companion/starter/app/api/revenuecat/webhook/route.ts +21 -0
  2548. package/surfaces/starters/ai-chat-companion/starter/app/api/stripe/checkout/route.ts +28 -0
  2549. package/surfaces/starters/ai-chat-companion/starter/app/api/stripe/webhook/route.ts +34 -0
  2550. package/surfaces/starters/ai-chat-companion/starter/app/auth/confirm/route.ts +22 -0
  2551. package/surfaces/starters/ai-chat-companion/starter/app/chat/page.tsx +78 -0
  2552. package/surfaces/starters/ai-chat-companion/starter/app/layout.tsx +20 -0
  2553. package/surfaces/starters/ai-chat-companion/starter/app/login/page.tsx +47 -0
  2554. package/surfaces/starters/ai-chat-companion/starter/app/page.tsx +17 -0
  2555. package/surfaces/starters/ai-chat-companion/starter/components/analytics-provider.tsx +14 -0
  2556. package/surfaces/starters/ai-chat-companion/starter/lib/analytics/events.ts +32 -0
  2557. package/surfaces/starters/ai-chat-companion/starter/lib/analytics/posthog-client.ts +28 -0
  2558. package/surfaces/starters/ai-chat-companion/starter/lib/billing/revenuecat.ts +27 -0
  2559. package/surfaces/starters/ai-chat-companion/starter/lib/billing/stripe.ts +15 -0
  2560. package/surfaces/starters/ai-chat-companion/starter/lib/strings.ts +32 -0
  2561. package/surfaces/starters/ai-chat-companion/starter/lib/supabase/client.ts +7 -0
  2562. package/surfaces/starters/ai-chat-companion/starter/lib/supabase/proxy.ts +29 -0
  2563. package/surfaces/starters/ai-chat-companion/starter/lib/supabase/server.ts +23 -0
  2564. package/surfaces/starters/ai-chat-companion/starter/next.config.ts +5 -0
  2565. package/surfaces/starters/ai-chat-companion/starter/package-lock.json +1294 -0
  2566. package/surfaces/starters/ai-chat-companion/starter/package.json +29 -0
  2567. package/surfaces/starters/ai-chat-companion/starter/proxy.ts +12 -0
  2568. package/surfaces/starters/ai-chat-companion/starter/supabase/migrations/0001_init.sql +78 -0
  2569. package/surfaces/starters/ai-chat-companion/starter/supabase/tests/0001_rls.test.sql +75 -0
  2570. package/surfaces/starters/ai-chat-companion/starter/tsconfig.json +41 -0
  2571. package/surfaces/starters/habit-tracker/README.md +43 -0
  2572. package/surfaces/starters/habit-tracker/prompts/00-positioning-strategy.md +47 -0
  2573. package/surfaces/starters/habit-tracker/prompts/01-database-schema.md +54 -0
  2574. package/surfaces/starters/habit-tracker/prompts/02-auth-system.md +42 -0
  2575. package/surfaces/starters/habit-tracker/prompts/03-habit-core-loop.md +50 -0
  2576. package/surfaces/starters/habit-tracker/prompts/04-reminders-and-streaks.md +58 -0
  2577. package/surfaces/starters/habit-tracker/prompts/05-stats-and-insights.md +44 -0
  2578. package/surfaces/starters/habit-tracker/prompts/06-paywall-and-monetization.md +50 -0
  2579. package/surfaces/starters/habit-tracker/prompts/07-social-accountability.md +49 -0
  2580. package/surfaces/starters/habit-tracker/prompts/variants/simple-counter-utility.md +43 -0
  2581. package/surfaces/starters/habit-tracker/prompts/variants/wellness-coach.md +44 -0
  2582. package/surfaces/starters/habit-tracker/starter/.env.example +14 -0
  2583. package/surfaces/starters/habit-tracker/starter/.github/workflows/ci.yml +30 -0
  2584. package/surfaces/starters/habit-tracker/starter/.gitignore.template +9 -0
  2585. package/surfaces/starters/habit-tracker/starter/README.md +48 -0
  2586. package/surfaces/starters/habit-tracker/starter/app/api/revenuecat/webhook/route.ts +21 -0
  2587. package/surfaces/starters/habit-tracker/starter/app/api/stripe/checkout/route.ts +28 -0
  2588. package/surfaces/starters/habit-tracker/starter/app/api/stripe/webhook/route.ts +34 -0
  2589. package/surfaces/starters/habit-tracker/starter/app/auth/confirm/route.ts +22 -0
  2590. package/surfaces/starters/habit-tracker/starter/app/layout.tsx +20 -0
  2591. package/surfaces/starters/habit-tracker/starter/app/login/page.tsx +47 -0
  2592. package/surfaces/starters/habit-tracker/starter/app/page.tsx +17 -0
  2593. package/surfaces/starters/habit-tracker/starter/app/today/page.tsx +27 -0
  2594. package/surfaces/starters/habit-tracker/starter/components/analytics-provider.tsx +14 -0
  2595. package/surfaces/starters/habit-tracker/starter/lib/analytics/events.ts +29 -0
  2596. package/surfaces/starters/habit-tracker/starter/lib/analytics/posthog-client.ts +28 -0
  2597. package/surfaces/starters/habit-tracker/starter/lib/billing/revenuecat.ts +27 -0
  2598. package/surfaces/starters/habit-tracker/starter/lib/billing/stripe.ts +15 -0
  2599. package/surfaces/starters/habit-tracker/starter/lib/strings.ts +27 -0
  2600. package/surfaces/starters/habit-tracker/starter/lib/supabase/client.ts +7 -0
  2601. package/surfaces/starters/habit-tracker/starter/lib/supabase/proxy.ts +29 -0
  2602. package/surfaces/starters/habit-tracker/starter/lib/supabase/server.ts +23 -0
  2603. package/surfaces/starters/habit-tracker/starter/next.config.ts +5 -0
  2604. package/surfaces/starters/habit-tracker/starter/package-lock.json +1222 -0
  2605. package/surfaces/starters/habit-tracker/starter/package.json +28 -0
  2606. package/surfaces/starters/habit-tracker/starter/proxy.ts +12 -0
  2607. package/surfaces/starters/habit-tracker/starter/supabase/migrations/0001_init.sql +84 -0
  2608. package/surfaces/starters/habit-tracker/starter/supabase/tests/0001_rls.test.sql +75 -0
  2609. package/surfaces/starters/habit-tracker/starter/tsconfig.json +41 -0
  2610. package/surfaces/starters/photo-ai-media/README.md +40 -0
  2611. package/surfaces/starters/photo-ai-media/prompts/00-positioning-strategy.md +51 -0
  2612. package/surfaces/starters/photo-ai-media/prompts/01-database-schema.md +55 -0
  2613. package/surfaces/starters/photo-ai-media/prompts/02-auth-system.md +39 -0
  2614. package/surfaces/starters/photo-ai-media/prompts/03-capture-and-library.md +42 -0
  2615. package/surfaces/starters/photo-ai-media/prompts/04-ai-generation-pipeline.md +46 -0
  2616. package/surfaces/starters/photo-ai-media/prompts/05-editing-and-presets.md +40 -0
  2617. package/surfaces/starters/photo-ai-media/prompts/06-credits-and-monetization.md +47 -0
  2618. package/surfaces/starters/photo-ai-media/prompts/07-sharing-and-virality.md +39 -0
  2619. package/surfaces/starters/photo-ai-media/prompts/08-content-safety-and-rights.md +49 -0
  2620. package/surfaces/starters/photo-ai-media/prompts/variants/avatar-headshot-studio.md +43 -0
  2621. package/surfaces/starters/photo-ai-media/prompts/variants/photo-restoration.md +39 -0
  2622. package/surfaces/starters/photo-ai-media/starter/.env.example +16 -0
  2623. package/surfaces/starters/photo-ai-media/starter/.github/workflows/ci.yml +30 -0
  2624. package/surfaces/starters/photo-ai-media/starter/.gitignore.template +9 -0
  2625. package/surfaces/starters/photo-ai-media/starter/README.md +50 -0
  2626. package/surfaces/starters/photo-ai-media/starter/app/api/generate/route.ts +47 -0
  2627. package/surfaces/starters/photo-ai-media/starter/app/api/revenuecat/webhook/route.ts +21 -0
  2628. package/surfaces/starters/photo-ai-media/starter/app/api/stripe/checkout/route.ts +28 -0
  2629. package/surfaces/starters/photo-ai-media/starter/app/api/stripe/webhook/route.ts +34 -0
  2630. package/surfaces/starters/photo-ai-media/starter/app/auth/confirm/route.ts +22 -0
  2631. package/surfaces/starters/photo-ai-media/starter/app/layout.tsx +20 -0
  2632. package/surfaces/starters/photo-ai-media/starter/app/library/page.tsx +29 -0
  2633. package/surfaces/starters/photo-ai-media/starter/app/login/page.tsx +47 -0
  2634. package/surfaces/starters/photo-ai-media/starter/app/page.tsx +17 -0
  2635. package/surfaces/starters/photo-ai-media/starter/components/analytics-provider.tsx +14 -0
  2636. package/surfaces/starters/photo-ai-media/starter/lib/analytics/events.ts +32 -0
  2637. package/surfaces/starters/photo-ai-media/starter/lib/analytics/posthog-client.ts +28 -0
  2638. package/surfaces/starters/photo-ai-media/starter/lib/billing/revenuecat.ts +27 -0
  2639. package/surfaces/starters/photo-ai-media/starter/lib/billing/stripe.ts +15 -0
  2640. package/surfaces/starters/photo-ai-media/starter/lib/strings.ts +27 -0
  2641. package/surfaces/starters/photo-ai-media/starter/lib/supabase/client.ts +7 -0
  2642. package/surfaces/starters/photo-ai-media/starter/lib/supabase/proxy.ts +29 -0
  2643. package/surfaces/starters/photo-ai-media/starter/lib/supabase/server.ts +23 -0
  2644. package/surfaces/starters/photo-ai-media/starter/next.config.ts +5 -0
  2645. package/surfaces/starters/photo-ai-media/starter/package-lock.json +1222 -0
  2646. package/surfaces/starters/photo-ai-media/starter/package.json +28 -0
  2647. package/surfaces/starters/photo-ai-media/starter/proxy.ts +12 -0
  2648. package/surfaces/starters/photo-ai-media/starter/supabase/migrations/0001_init.sql +74 -0
  2649. package/surfaces/starters/photo-ai-media/starter/supabase/tests/0001_rls.test.sql +72 -0
  2650. package/surfaces/starters/photo-ai-media/starter/tsconfig.json +41 -0
  2651. package/surfaces/starters/social-network/README.md +41 -0
  2652. package/surfaces/starters/social-network/prompts/00-niche-strategy.md +44 -0
  2653. package/surfaces/starters/social-network/prompts/01-database-schema.md +37 -0
  2654. package/surfaces/starters/social-network/prompts/02-auth-system.md +40 -0
  2655. package/surfaces/starters/social-network/prompts/03-feed-and-posts.md +43 -0
  2656. package/surfaces/starters/social-network/prompts/04-profiles-and-follow.md +41 -0
  2657. package/surfaces/starters/social-network/prompts/05-search-and-discovery.md +36 -0
  2658. package/surfaces/starters/social-network/prompts/06-direct-messages.md +32 -0
  2659. package/surfaces/starters/social-network/prompts/07-stripe-monetization.md +41 -0
  2660. package/surfaces/starters/social-network/prompts/08-invite-system.md +37 -0
  2661. package/surfaces/starters/social-network/prompts/variants/image-first-instagram.md +34 -0
  2662. package/surfaces/starters/social-network/prompts/variants/video-first-tiktok.md +40 -0
  2663. package/surfaces/starters/social-network/starter/.env.example +14 -0
  2664. package/surfaces/starters/social-network/starter/.github/workflows/ci.yml +30 -0
  2665. package/surfaces/starters/social-network/starter/.gitignore.template +9 -0
  2666. package/surfaces/starters/social-network/starter/README.md +47 -0
  2667. package/surfaces/starters/social-network/starter/app/api/revenuecat/webhook/route.ts +21 -0
  2668. package/surfaces/starters/social-network/starter/app/api/stripe/checkout/route.ts +28 -0
  2669. package/surfaces/starters/social-network/starter/app/api/stripe/webhook/route.ts +34 -0
  2670. package/surfaces/starters/social-network/starter/app/auth/confirm/route.ts +22 -0
  2671. package/surfaces/starters/social-network/starter/app/feed/page.tsx +30 -0
  2672. package/surfaces/starters/social-network/starter/app/layout.tsx +20 -0
  2673. package/surfaces/starters/social-network/starter/app/login/page.tsx +47 -0
  2674. package/surfaces/starters/social-network/starter/app/page.tsx +17 -0
  2675. package/surfaces/starters/social-network/starter/components/analytics-provider.tsx +14 -0
  2676. package/surfaces/starters/social-network/starter/lib/analytics/events.ts +31 -0
  2677. package/surfaces/starters/social-network/starter/lib/analytics/posthog-client.ts +28 -0
  2678. package/surfaces/starters/social-network/starter/lib/billing/revenuecat.ts +27 -0
  2679. package/surfaces/starters/social-network/starter/lib/billing/stripe.ts +15 -0
  2680. package/surfaces/starters/social-network/starter/lib/strings.ts +27 -0
  2681. package/surfaces/starters/social-network/starter/lib/supabase/client.ts +7 -0
  2682. package/surfaces/starters/social-network/starter/lib/supabase/proxy.ts +29 -0
  2683. package/surfaces/starters/social-network/starter/lib/supabase/server.ts +23 -0
  2684. package/surfaces/starters/social-network/starter/next.config.ts +5 -0
  2685. package/surfaces/starters/social-network/starter/package-lock.json +1222 -0
  2686. package/surfaces/starters/social-network/starter/package.json +28 -0
  2687. package/surfaces/starters/social-network/starter/proxy.ts +12 -0
  2688. package/surfaces/starters/social-network/starter/supabase/migrations/0001_init.sql +81 -0
  2689. package/surfaces/starters/social-network/starter/supabase/tests/0001_rls.test.sql +70 -0
  2690. package/surfaces/starters/social-network/starter/tsconfig.json +41 -0
  2691. package/surfaces/studio/seed/schema/business.empty.json +45 -0
  2692. package/surfaces/studio/seed/schema/business.schema.json +664 -0
  2693. package/surfaces/ui-library/README.md +42 -0
  2694. package/surfaces/ui-library/adapters/expo.json +57 -0
  2695. package/surfaces/ui-library/adapters/swiftui.json +57 -0
  2696. package/surfaces/ui-library/component-index.json +26 -0
  2697. package/surfaces/ui-library/components/feedback.empty-state.md +22 -0
  2698. package/surfaces/ui-library/components/feedback.haptics.md +21 -0
  2699. package/surfaces/ui-library/components/feedback.skeleton.md +21 -0
  2700. package/surfaces/ui-library/components/input.keyboard-behavior.md +22 -0
  2701. package/surfaces/ui-library/components/interaction.press-feedback.md +22 -0
  2702. package/surfaces/ui-library/schemas/adapter-manifest.schema.json +101 -0
  2703. package/surfaces/ui-library/schemas/component-contract.schema.json +56 -0
  2704. package/surfaces/ui-library/schemas/component-index.schema.json +34 -0
  2705. package/surfaces/workspace-template/new-business/DESIGN.md +198 -0
  2706. package/surfaces/workspace-template/new-business/PRODUCT.md +69 -0
  2707. package/surfaces/workspace-template/new-business/operations/metric-contracts.json +34 -0
  2708. package/surfaces/workspace-template/new-business/product.yaml +87 -0
  2709. package/surfaces/workspace-template/new-business/strategy/OFFER_TEST.md +43 -0
  2710. package/surfaces/workspace-template/new-business/strategy/RESEARCH.md +69 -0
  2711. package/surfaces/workspace-template/new-business/strategy/SIGNAL_CORPUS.md +34 -0
  2712. package/surfaces/workspace-template/repo-agent-entrypoints/.claude/settings.json +48 -0
  2713. package/surfaces/workspace-template/repo-agent-entrypoints/.cursor/rules/agents.mdc +12 -0
  2714. package/surfaces/workspace-template/repo-agent-entrypoints/AGENTS.md +102 -0
  2715. package/surfaces/workspace-template/repo-agent-entrypoints/CLAUDE.md +14 -0
  2716. package/tooling/README.md +3 -0
  2717. package/tooling/browser-proof.ts +1254 -0
  2718. package/tooling/calibrate-utterance-router.ts +374 -0
  2719. package/tooling/catalog-scaffold.ts +181 -0
  2720. package/tooling/ci-aggregate.mjs +105 -0
  2721. package/tooling/ci-lane.mjs +275 -0
  2722. package/tooling/copy-runtime-assets.mjs +18 -0
  2723. package/tooling/export-task-skill.ts +181 -0
  2724. package/tooling/grade-design-surface.ts +404 -0
  2725. package/tooling/grade-screenshots.ts +586 -0
  2726. package/tooling/knowledge.ts +219 -0
  2727. package/tooling/lib/app-copy-rules.ts +428 -0
  2728. package/tooling/lib/artifact-pages.ts +143 -0
  2729. package/tooling/lib/audit-plan.ts +492 -0
  2730. package/tooling/lib/canonical-json.ts +30 -0
  2731. package/tooling/lib/cli-entrypoint.ts +12 -0
  2732. package/tooling/lib/content-assets.ts +228 -0
  2733. package/tooling/lib/design-exploration.ts +232 -0
  2734. package/tooling/lib/design-md.ts +442 -0
  2735. package/tooling/lib/design-state.ts +333 -0
  2736. package/tooling/lib/design-taste-rubric.ts +375 -0
  2737. package/tooling/lib/founder-copy.ts +548 -0
  2738. package/tooling/lib/git-root.ts +12 -0
  2739. package/tooling/lib/grading.ts +92 -0
  2740. package/tooling/lib/html.ts +32 -0
  2741. package/tooling/lib/knowledge-freshness-pin.ts +83 -0
  2742. package/tooling/lib/launch-state.ts +965 -0
  2743. package/tooling/lib/markdown-lite.ts +351 -0
  2744. package/tooling/lib/no-slop-rules.ts +273 -0
  2745. package/tooling/lib/packed-check.ts +69 -0
  2746. package/tooling/lib/posthog-retention.ts +144 -0
  2747. package/tooling/lib/render-artifact-page.ts +342 -0
  2748. package/tooling/lib/runtime-sync-lib.ts +171 -0
  2749. package/tooling/lib/script-paths.ts +131 -0
  2750. package/tooling/lib/shard-pool.ts +121 -0
  2751. package/tooling/lib/skill-root.ts +35 -0
  2752. package/tooling/lib/source-freshness-state.ts +43 -0
  2753. package/tooling/lib/source-http.ts +167 -0
  2754. package/tooling/lib/spawn.ts +36 -0
  2755. package/tooling/lib/tsx-bin.ts +65 -0
  2756. package/tooling/lib/tsx-launcher.d.mts +4 -0
  2757. package/tooling/lib/tsx-launcher.mjs +57 -0
  2758. package/tooling/print-hosted-version.ts +49 -0
  2759. package/tooling/probe-eas.ts +99 -0
  2760. package/tooling/probe-posthog.ts +318 -0
  2761. package/tooling/probe-revenuecat-cli.ts +426 -0
  2762. package/tooling/probe-revenuecat.ts +282 -0
  2763. package/tooling/promote-design-tokens.ts +244 -0
  2764. package/tooling/provision-posthog-platform.ts +138 -0
  2765. package/tooling/prune-posthog-persons.ts +295 -0
  2766. package/tooling/render-artifact-pages.ts +93 -0
  2767. package/tooling/render-credits.ts +301 -0
  2768. package/tooling/render-design-room.ts +518 -0
  2769. package/tooling/render-hosted-bundle.ts +201 -0
  2770. package/tooling/render-product.ts +103 -0
  2771. package/tooling/render-public-api.ts +91 -0
  2772. package/tooling/render-task-skills.ts +69 -0
  2773. package/tooling/report-research-evidence-failures.ts +144 -0
  2774. package/tooling/run-audit.ts +386 -0
  2775. package/tooling/runtime-sync.ts +404 -0
  2776. package/tooling/seed-design-brief.ts +69 -0
  2777. package/tooling/test-public-api.ts +39 -0
  2778. package/tsconfig.json +32 -0
@@ -0,0 +1,2447 @@
1
+ import { mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
2
+ import path from "node:path";
3
+ import { type Harness, getLane, readState, writeState } from "./_harness.js";
4
+
5
+ /** Deterministic fixtures for the generalized onboarding system graph gate. */
6
+ export function register(h: Harness): void {
7
+ const { makeFixture, runFixture } = h;
8
+
9
+ const onboardingPath = (fixtureRoot: string): string => path.join(fixtureRoot, "product/ONBOARDING.md");
10
+ const mutateOnboarding = (fixtureRoot: string, mutate: (text: string) => string): void => {
11
+ const file = onboardingPath(fixtureRoot);
12
+ writeFileSync(file, mutate(readFileSync(file, "utf8")), "utf8");
13
+ };
14
+ const mutateProductYaml = (fixtureRoot: string, mutate: (text: string) => string): void => {
15
+ const file = path.join(fixtureRoot, "product.yaml");
16
+ writeFileSync(file, mutate(readFileSync(file, "utf8")), "utf8");
17
+ };
18
+ const setFeatureScope = (text: string, featureId: string, scope: "required" | "excluded" | "non-goal"): string => {
19
+ const pattern = new RegExp(`(- id: ${escapeRegExp(featureId)}\\n class_id: class.feature\\n slots:\\n slot.feature.scope: )\\S+`);
20
+ if (!pattern.test(text)) throw new Error(`fixture setup: feature ${featureId} not found`);
21
+ return text.replace(pattern, `$1${scope}`);
22
+ };
23
+ const removeFeature = (text: string, featureId: string): string => {
24
+ const listPattern = new RegExp(`\\n - ${escapeRegExp(featureId)}`);
25
+ const instancePattern = new RegExp(`\\n - id: ${escapeRegExp(featureId)}\\n class_id: class.feature\\n slots:\\n slot.feature.scope: \\S+`);
26
+ if (!listPattern.test(text)) throw new Error(`fixture setup: feature list entry ${featureId} not found`);
27
+ if (!instancePattern.test(text)) throw new Error(`fixture setup: feature instance ${featureId} not found`);
28
+ return text.replace(listPattern, "").replace(instancePattern, "");
29
+ };
30
+ const writeWorkspaceComposition = (fixtureRoot: string, recipeId: string, presentPaywallProvider?: string): void => {
31
+ const bindings =
32
+ presentPaywallProvider === undefined
33
+ ? "\n"
34
+ : `\nbindings:\n b2c/monetization.present-paywall:\n provider: {id: ${presentPaywallProvider}, version: 1.0.0}\n`;
35
+ writeFileSync(
36
+ path.join(fixtureRoot, "b2c.yaml"),
37
+ `apiVersion: b2c/v1\nrecipe: {id: ${recipeId}, version: 1.0.0}\ntarget: {platform: ios, runtime: swiftui}${bindings}`,
38
+ "utf8",
39
+ );
40
+ };
41
+ const studioSurface = (id: string, interaction?: string): Record<string, unknown> => ({
42
+ id,
43
+ name: id,
44
+ status: "draft",
45
+ purpose: "purpose prose must not be parsed as a technique class",
46
+ decisions: [],
47
+ tokenReferences: [],
48
+ ...(interaction === undefined ? {} : { interaction }),
49
+ });
50
+ const writeStudioSurfaces = (
51
+ fixtureRoot: string,
52
+ landingPages: Array<{ id: string; interaction?: string }> = [],
53
+ screens: Array<{ id: string; interaction?: string }> = [],
54
+ ): void => {
55
+ const file = path.join(fixtureRoot, "studio/seed/business.json");
56
+ const seed = JSON.parse(readFileSync(file, "utf8")) as {
57
+ surfaces: { landingPages: unknown[]; mobileApp: { screens: unknown[] } };
58
+ };
59
+ seed.surfaces.landingPages = landingPages.map((row) => studioSurface(row.id, row.interaction));
60
+ seed.surfaces.mobileApp.screens = screens.map((row) => studioSurface(row.id, row.interaction));
61
+ writeFileSync(file, `${JSON.stringify(seed, null, 2)}\n`, "utf8");
62
+ };
63
+ const writeSixtyFpsToolRow = (fixtureRoot: string, access: string, route: string): void => {
64
+ const file = path.join(fixtureRoot, "strategy/TOOL_DECISIONS.md");
65
+ const text = readFileSync(file, "utf8");
66
+ const marker = "\n## Mobile Proof Route Decision";
67
+ if (!text.includes(marker)) throw new Error("fixture setup: TOOL_DECISIONS intake marker missing");
68
+ const row = `| 60fps.design MCP | design | ${access} | required before paid/account access | ${route} | distilled recipes are not equivalent |\n`;
69
+ writeFileSync(file, text.replace(marker, `\n${row}${marker}`), "utf8");
70
+ };
71
+ const requireHeadlineFeature = (fixtureRoot: string): void => {
72
+ mutateProductYaml(fixtureRoot, (text) => setFeatureScope(text, "feature.paywall-goal-headline", "required"));
73
+ };
74
+ const requireRevenueCatHeadlineBind = (fixtureRoot: string): void => {
75
+ requireHeadlineFeature(fixtureRoot);
76
+ writeWorkspaceComposition(fixtureRoot, "b2c/subscription-app", "b2c/revenuecat");
77
+ };
78
+
79
+ // Shipped markdown tables are column-aligned (prettier pads every cell to its column's widest
80
+ // row), so a literal single-spaced row never matches them. Match rows by their cell contents
81
+ // with padding-tolerant separators, and throw when the row is absent: a String.replace that
82
+ // finds nothing silently leaves the fixture unmutated, which turns a "fails" case into a false
83
+ // failure and a "passes" case into a false pass.
84
+ const escapeRegExp = (value: string): string => value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
85
+ const tableRowPattern = (row: string): RegExp => {
86
+ const cells = row
87
+ .trim()
88
+ .slice(1, row.trim().endsWith("|") ? -1 : undefined)
89
+ .split("|")
90
+ .map((cell) => cell.trim());
91
+ return new RegExp(`\\|${cells.map((cell) => `\\s*${escapeRegExp(cell)}\\s*\\|`).join("")}`);
92
+ };
93
+ const replaceTableRow = (text: string, row: string, replacement: string): string => {
94
+ const pattern = tableRowPattern(row);
95
+ if (!pattern.test(text)) throw new Error(`fixture setup: table row not found: ${row}`);
96
+ return text.replace(pattern, replacement);
97
+ };
98
+ const removeTableBlock = (text: string, pattern: RegExp): string => {
99
+ if (!pattern.test(text)) throw new Error(`fixture setup: table block not found: ${pattern}`);
100
+ return text.replace(pattern, "");
101
+ };
102
+
103
+ // Mirrors check-onboarding-graph.ts's own TEMPLATE_DIRECTIVE_VERBS set: this fixture needs
104
+ // to fill every cell the validator itself would call a placeholder, not just the ones
105
+ // literally starting with "Record" -- the shipped template also opens cells with "Define",
106
+ // "Choose", etc., and leaving those unfilled means this "completed" fixture was never
107
+ // actually complete, so its assertions proved nothing about the cells it didn't touch.
108
+ const TEMPLATE_DIRECTIVE_VERBS_PATTERN =
109
+ /^\s*(?:add|added|capture|captured|choose|chosen|complete|completed|define|defined|describe|described|document|documented|enter|entered|fill|filled|finish|finished|include|included|insert|inserted|mark|marked|note|noted|provide|provided|record|replace|replaced|select|selected|specify|specified|update|updated|write|written)\b/i;
110
+
111
+ const baseline = makeFixture("onboarding-graph-baseline");
112
+ runFixture("shipped onboarding graph template passes before completion", baseline, "check-onboarding-graph.ts", 0);
113
+
114
+ const graphNodeMissing = makeFixture("onboarding-graph-node-missing");
115
+ mutateOnboarding(graphNodeMissing, (text) => text.replaceAll("ONB-22", "ONB-FINAL"));
116
+ runFixture("onboarding graph missing a canonical node fails", graphNodeMissing, "check-onboarding-graph.ts", 1, "onboarding_graph.node_missing");
117
+
118
+ const evidenceMissing = makeFixture("onboarding-graph-evidence-missing");
119
+ mutateOnboarding(evidenceMissing, (text) => text.replace("## Onbo Hub Pattern Atlas", "## Flow Pattern Notes"));
120
+ runFixture(
121
+ "onboarding without the authorized Onbo Hub evidence contract fails",
122
+ evidenceMissing,
123
+ "check-onboarding-graph.ts",
124
+ 1,
125
+ "onboarding_graph.section_onbo_hub_pattern_atlas_missing",
126
+ );
127
+
128
+ const commitmentFunnelMissing = makeFixture("onboarding-graph-commitment-funnel-missing");
129
+ mutateOnboarding(commitmentFunnelMissing, (text) => text.replace("## Commitment Funnel", "## First Session Order"));
130
+ runFixture(
131
+ "onboarding without the Commitment Funnel section fails",
132
+ commitmentFunnelMissing,
133
+ "check-onboarding-graph.ts",
134
+ 1,
135
+ "onboarding_graph.section_commitment_funnel_missing",
136
+ );
137
+
138
+ const funnelQualityMissing = makeFixture("onboarding-graph-funnel-quality-missing");
139
+ mutateOnboarding(funnelQualityMissing, (text) => text.replace("## Funnel Quality Metrics", "## Conversion Metrics"));
140
+ runFixture(
141
+ "onboarding without Funnel Quality Metrics fails",
142
+ funnelQualityMissing,
143
+ "check-onboarding-graph.ts",
144
+ 1,
145
+ "onboarding_graph.section_funnel_quality_metrics_missing",
146
+ );
147
+
148
+ const paywallGoalHeadlineMissing = makeFixture("onboarding-graph-paywall-goal-headline-missing");
149
+ requireRevenueCatHeadlineBind(paywallGoalHeadlineMissing);
150
+ mutateOnboarding(paywallGoalHeadlineMissing, (text) => text.replace("## Paywall Goal Headline", "## Paywall Copy Notes"));
151
+ runFixture(
152
+ "onboarding without the Paywall Goal Headline section fails",
153
+ paywallGoalHeadlineMissing,
154
+ "check-onboarding-graph.ts",
155
+ 1,
156
+ "onboarding_graph.section_paywall_goal_headline_missing",
157
+ );
158
+
159
+ const paywallGoalHeadlineSelected = makeFixture("onboarding-graph-paywall-goal-headline-selected");
160
+ requireRevenueCatHeadlineBind(paywallGoalHeadlineSelected);
161
+ runFixture(
162
+ "onboarding with an explicit RevenueCat present-paywall binding keeps the headline section",
163
+ paywallGoalHeadlineSelected,
164
+ "check-onboarding-graph.ts",
165
+ 0,
166
+ );
167
+
168
+ const paywallGoalHeadlineInvented = makeFixture("onboarding-graph-paywall-goal-headline-invented");
169
+ mutateOnboarding(paywallGoalHeadlineInvented, (text) =>
170
+ text.replace("Do not invent a goal or outcome.", "An invented outcome is allowed when it sounds more motivating than their answer."),
171
+ );
172
+ runFixture(
173
+ "onboarding that allows an invented paywall outcome fails",
174
+ paywallGoalHeadlineInvented,
175
+ "check-onboarding-graph.ts",
176
+ 1,
177
+ "onboarding_graph.paywall_goal_headline_invented",
178
+ );
179
+
180
+ const paywallGoalHeadlineTableMissing = makeFixture("onboarding-graph-paywall-goal-headline-table-missing");
181
+ requireRevenueCatHeadlineBind(paywallGoalHeadlineTableMissing);
182
+ mutateOnboarding(paywallGoalHeadlineTableMissing, (text) =>
183
+ removeTableBlock(
184
+ text,
185
+ /\|\s*Goal key\s*\|\s*User-facing prompt\s*\|\s*Headline template\s*\|\s*Fallback when skipped\s*\|[\s\S]*?\|\s*`skipped`\s*\|[^\n]*\n/,
186
+ ),
187
+ );
188
+ runFixture(
189
+ "onboarding whose Paywall Goal Headline section has no mapping table fails",
190
+ paywallGoalHeadlineTableMissing,
191
+ "check-onboarding-graph.ts",
192
+ 1,
193
+ "onboarding_graph.paywall_goal_headline_table",
194
+ );
195
+
196
+ const refundRateMissing = makeFixture("onboarding-graph-refund-rate-missing");
197
+ mutateOnboarding(refundRateMissing, (text) => text.replaceAll("refund rate", "churn after trial"));
198
+ runFixture(
199
+ "onboarding without refund rate as a funnel quality metric fails",
200
+ refundRateMissing,
201
+ "check-onboarding-graph.ts",
202
+ 1,
203
+ "onboarding_graph.funnel_quality",
204
+ );
205
+
206
+ const commitmentFunnelExcluded = makeFixture("onboarding-graph-commitment-funnel-excluded");
207
+ mutateProductYaml(commitmentFunnelExcluded, (text) => setFeatureScope(text, "feature.commitment-funnel", "excluded"));
208
+ mutateOnboarding(commitmentFunnelExcluded, (text) =>
209
+ text.replace("## Commitment Funnel", "## First Session Order").replace("## Funnel Quality Metrics", "## Conversion Metrics"),
210
+ );
211
+ runFixture("onboarding may omit the Commitment Funnel when feature.commitment-funnel is excluded", commitmentFunnelExcluded, "check-onboarding-graph.ts", 0);
212
+
213
+ const paywallGoalHeadlineExcluded = makeFixture("onboarding-graph-paywall-goal-headline-excluded");
214
+ mutateProductYaml(paywallGoalHeadlineExcluded, (text) => setFeatureScope(text, "feature.paywall-goal-headline", "excluded"));
215
+ mutateOnboarding(paywallGoalHeadlineExcluded, (text) => text.replace("## Paywall Goal Headline", "## Paywall Copy Notes"));
216
+ runFixture(
217
+ "onboarding may omit the Paywall Goal Headline when feature.paywall-goal-headline is excluded",
218
+ paywallGoalHeadlineExcluded,
219
+ "check-onboarding-graph.ts",
220
+ 0,
221
+ );
222
+
223
+ const onboardingFeaturesUnresolved = makeFixture("onboarding-graph-features-unresolved");
224
+ mutateProductYaml(onboardingFeaturesUnresolved, (text) => removeFeature(removeFeature(text, "feature.commitment-funnel"), "feature.paywall-goal-headline"));
225
+ runFixture(
226
+ "onboarding holds when commitment-funnel and paywall-goal-headline instances are absent",
227
+ onboardingFeaturesUnresolved,
228
+ "check-onboarding-graph.ts",
229
+ 1,
230
+ "onboarding_graph.commitment_funnel_unresolved",
231
+ );
232
+
233
+ const paywallGoalHeadlineUnresolvedComposition = makeFixture("onboarding-graph-paywall-goal-headline-unresolved-composition");
234
+ requireHeadlineFeature(paywallGoalHeadlineUnresolvedComposition);
235
+ runFixture(
236
+ "onboarding holds when the headline feature is required and present-paywall is unresolved",
237
+ paywallGoalHeadlineUnresolvedComposition,
238
+ "check-onboarding-graph.ts",
239
+ 1,
240
+ "onboarding_graph.paywall_goal_headline_unresolved",
241
+ );
242
+
243
+ const paywallGoalHeadlineUnavailable = makeFixture("onboarding-graph-paywall-goal-headline-unavailable");
244
+ requireHeadlineFeature(paywallGoalHeadlineUnavailable);
245
+ writeWorkspaceComposition(paywallGoalHeadlineUnavailable, "b2c/subscription-app", "b2c/superwall");
246
+ runFixture(
247
+ "onboarding cannot invent a RevenueCat headline bind for a Superwall presenter",
248
+ paywallGoalHeadlineUnavailable,
249
+ "check-onboarding-graph.ts",
250
+ 1,
251
+ "onboarding_graph.paywall_goal_headline_unavailable",
252
+ );
253
+
254
+ const motionResearchMissing = makeFixture("onboarding-graph-motion-research-missing");
255
+ mutateOnboarding(motionResearchMissing, (text) => text.replace("## Motion Research", "## Animation Notes"));
256
+ runFixture(
257
+ "onboarding without the Motion Research section fails",
258
+ motionResearchMissing,
259
+ "check-onboarding-graph.ts",
260
+ 1,
261
+ "onboarding_graph.section_motion_research_missing",
262
+ );
263
+
264
+ const motionInteractionUnresolved = makeFixture("onboarding-graph-motion-interaction-unresolved");
265
+ writeStudioSurfaces(motionInteractionUnresolved, [{ id: "privacy" }]);
266
+ runFixture(
267
+ "onboarding holds when a listed studio surface omits interaction",
268
+ motionInteractionUnresolved,
269
+ "check-onboarding-graph.ts",
270
+ 1,
271
+ "onboarding_graph.surface_interaction_unresolved",
272
+ );
273
+
274
+ const motionReferenceUnavailable = makeFixture("onboarding-graph-motion-reference-unavailable");
275
+ writeStudioSurfaces(motionReferenceUnavailable, [], [{ id: "hero", interaction: "bespoke-motion" }]);
276
+ writeSixtyFpsToolRow(motionReferenceUnavailable, "blocked", "fallback distilled recipes");
277
+ runFixture(
278
+ "onboarding holds when selected 60fps research is recorded as blocked",
279
+ motionReferenceUnavailable,
280
+ "check-onboarding-graph.ts",
281
+ 1,
282
+ "onboarding_graph.motion_reference_unavailable",
283
+ );
284
+
285
+ const motionReferenceSelectedMissingPhrases = makeFixture("onboarding-graph-motion-reference-selected-missing");
286
+ writeStudioSurfaces(motionReferenceSelectedMissingPhrases, [], [{ id: "hero", interaction: "bespoke-motion" }]);
287
+ writeSixtyFpsToolRow(motionReferenceSelectedMissingPhrases, "connected", "search_shots route");
288
+ mutateOnboarding(motionReferenceSelectedMissingPhrases, (text) =>
289
+ text.replaceAll("60fps MCP", "motion catalog").replaceAll("search_shots", "shot search").replaceAll("get_motion_breakdown", "motion breakdown"),
290
+ );
291
+ runFixture(
292
+ "onboarding requires 60fps MCP operations when that register is selected",
293
+ motionReferenceSelectedMissingPhrases,
294
+ "check-onboarding-graph.ts",
295
+ 1,
296
+ "onboarding_graph.motion_reference",
297
+ );
298
+
299
+ const paywallGoalHeadlineSuperwallExcluded = makeFixture("onboarding-graph-paywall-goal-headline-superwall-excluded");
300
+ mutateProductYaml(paywallGoalHeadlineSuperwallExcluded, (text) => setFeatureScope(text, "feature.paywall-goal-headline", "excluded"));
301
+ writeWorkspaceComposition(paywallGoalHeadlineSuperwallExcluded, "b2c/subscription-app", "b2c/superwall");
302
+ mutateOnboarding(paywallGoalHeadlineSuperwallExcluded, (text) => text.replace("## Paywall Goal Headline", "## Paywall Copy Notes"));
303
+ runFixture(
304
+ "onboarding may omit the headline bind when Superwall presents and the feature is excluded",
305
+ paywallGoalHeadlineSuperwallExcluded,
306
+ "check-onboarding-graph.ts",
307
+ 0,
308
+ );
309
+
310
+ const requiredSectionInFence = makeFixture("onboarding-graph-required-section-in-fence");
311
+ mutateOnboarding(requiredSectionInFence, (text) => {
312
+ // Relocate the entire live "## Privacy And Security" section into a fenced code sample,
313
+ // leaving it absent from the live document -- hasHeading() has no notion of fences, so
314
+ // before liveText was computed up front (and used for every structural check, not only the
315
+ // deep --require-done block) this would have still been accepted as present.
316
+ const section = text.match(/## Privacy And Security\n[\s\S]*?(?=\n## )/)?.[0];
317
+ if (!section) throw new Error("fixture setup: could not locate the Privacy And Security section to relocate");
318
+ const withoutLiveSection = text.replace(section, "");
319
+ return `${withoutLiveSection}\n\`\`\`markdown\n${section}\n\`\`\`\n`;
320
+ });
321
+ runFixture(
322
+ "a required section relocated into a fenced example still fails as missing",
323
+ requiredSectionInFence,
324
+ "check-onboarding-graph.ts",
325
+ 1,
326
+ "onboarding_graph.section_privacy_and_security_missing",
327
+ );
328
+
329
+ const requiredSectionInHtmlComment = makeFixture("onboarding-graph-required-section-in-html-comment");
330
+ mutateOnboarding(requiredSectionInHtmlComment, (text) => {
331
+ // Same relocation as requiredSectionInFence, but into an HTML comment rather than a
332
+ // triple-backtick fence -- a comment renders nothing at all, yet stripFencedBlocks() only
333
+ // ever stripped backtick fences, so this form stayed live and readable to every structural
334
+ // check.
335
+ const section = text.match(/## Performance And Observability\n[\s\S]*?(?=\n## )/)?.[0];
336
+ if (!section) throw new Error("fixture setup: could not locate the Performance And Observability section to relocate");
337
+ const withoutLiveSection = text.replace(section, "");
338
+ return `${withoutLiveSection}\n<!--\n${section}\n-->\n`;
339
+ });
340
+ runFixture(
341
+ "a required section relocated into an HTML comment still fails as missing",
342
+ requiredSectionInHtmlComment,
343
+ "check-onboarding-graph.ts",
344
+ 1,
345
+ "onboarding_graph.section_performance_and_observability_missing",
346
+ );
347
+
348
+ const requiredSectionInTildeFence = makeFixture("onboarding-graph-required-section-in-tilde-fence");
349
+ mutateOnboarding(requiredSectionInTildeFence, (text) => {
350
+ // Same relocation again, into a CommonMark tilde fence (~~~) -- an equally valid fence
351
+ // delimiter to triple backticks, which stripFencedBlocks() never recognized at all.
352
+ const section = text.match(/## Accessibility And Localization\n[\s\S]*?(?=\n## )/)?.[0];
353
+ if (!section) throw new Error("fixture setup: could not locate the Accessibility And Localization section to relocate");
354
+ const withoutLiveSection = text.replace(section, "");
355
+ return `${withoutLiveSection}\n~~~markdown\n${section}\n~~~\n`;
356
+ });
357
+ runFixture(
358
+ "a required section relocated into a tilde fence still fails as missing",
359
+ requiredSectionInTildeFence,
360
+ "check-onboarding-graph.ts",
361
+ 1,
362
+ "onboarding_graph.section_accessibility_and_localization_missing",
363
+ );
364
+
365
+ const requiredSectionInUnterminatedFence = makeFixture("onboarding-graph-required-section-in-unterminated-fence");
366
+ mutateOnboarding(requiredSectionInUnterminatedFence, (text) => {
367
+ // Same relocation again, but the opening fence is never closed -- CommonMark still renders
368
+ // an unterminated fence as extending to the end of the document (code, not prose), yet the
369
+ // old paired-delimiter regex required a closing run of backticks to match anything at all,
370
+ // so with no closer present it stripped nothing and left the relocated heading exactly as
371
+ // live and findable as if it had never been fenced.
372
+ const section = text.match(/## Prototype And Design Proof\n[\s\S]*?(?=\n## )/)?.[0];
373
+ if (!section) throw new Error("fixture setup: could not locate the Prototype And Design Proof section to relocate");
374
+ const withoutLiveSection = text.replace(section, "");
375
+ return `${withoutLiveSection}\n\`\`\`markdown\n${section}\n`;
376
+ });
377
+ runFixture(
378
+ "a required section relocated into an unterminated fence still fails as missing",
379
+ requiredSectionInUnterminatedFence,
380
+ "check-onboarding-graph.ts",
381
+ 1,
382
+ "onboarding_graph.section_prototype_and_design_proof_missing",
383
+ );
384
+
385
+ const requiredSectionAfterShortInnerFence = makeFixture("onboarding-graph-required-section-after-short-inner-fence");
386
+ mutateOnboarding(requiredSectionAfterShortInnerFence, (text) => {
387
+ // Opens with a four-backtick fence, then contains a three-backtick run before the relocated
388
+ // section and a real four-backtick closer after it. CommonMark only closes a fence with a
389
+ // same-character run at least as long as the opener, so the inner three-backtick line is
390
+ // literal fence content, not a closer -- the whole block, including the relocated section,
391
+ // stays hidden until the real four-backtick closer. A naive "any run of 3+ backticks closes
392
+ // it" strip would stop at the inner three-backtick line instead, leaving the section (and the
393
+ // real closer line after it) live and readable.
394
+ const section = text.match(/## Synthetic One-Star Pre-Mortem\n[\s\S]*?(?=\n## )/)?.[0];
395
+ if (!section) throw new Error("fixture setup: could not locate the Synthetic One-Star Pre-Mortem section to relocate");
396
+ const withoutLiveSection = text.replace(section, "");
397
+ return `${withoutLiveSection}\n\`\`\`\`markdown\nA decoy line that looks like a fence close but is too short to be one.\n\`\`\`\n${section}\n\`\`\`\`\n`;
398
+ });
399
+ runFixture(
400
+ "a required section placed after a shorter inner fence run (not a real closer) still fails as missing",
401
+ requiredSectionAfterShortInnerFence,
402
+ "check-onboarding-graph.ts",
403
+ 1,
404
+ "onboarding_graph.section_synthetic_one_star_pre_mortem_missing",
405
+ );
406
+
407
+ const requiredHeadingIndented = makeFixture("onboarding-graph-required-heading-indented");
408
+ mutateOnboarding(requiredHeadingIndented, (text) =>
409
+ // Indenting the heading line by 4 spaces turns it into a CommonMark indented code block (a
410
+ // completely different construct from a heading) rather than a fence or comment -- it is
411
+ // preceded by a blank line in the shipped template, which is what lets an indented line begin
412
+ // a code block instead of lazily continuing a paragraph. hasHeading() has no notion of
413
+ // indentation and only ever compares each line's own *trimmed* text, so an indented,
414
+ // non-rendering heading line still registered as the section being present.
415
+ text.replace("## Verification\n", " ## Verification\n"),
416
+ );
417
+ runFixture(
418
+ "a required heading indented into a CommonMark code block still fails as missing",
419
+ requiredHeadingIndented,
420
+ "check-onboarding-graph.ts",
421
+ 1,
422
+ "onboarding_graph.section_verification_missing",
423
+ );
424
+
425
+ const requiredSectionInScriptBlock = makeFixture("onboarding-graph-required-section-in-script-block");
426
+ mutateOnboarding(requiredSectionInScriptBlock, (text) => {
427
+ // Relocate the entire live "## Failure And Recovery" section into a <script type="text/plain">
428
+ // block -- a browser never renders script content as visible page text, the same reasoning
429
+ // already applied to HTML comments and fences, but stripNonRenderedMarkdown() had no notion of
430
+ // raw HTML blocks at all, so before this fix the relocated heading stayed live and findable.
431
+ const section = text.match(/## Failure And Recovery\n[\s\S]*?(?=\n## )/)?.[0];
432
+ if (!section) throw new Error("fixture setup: could not locate the Failure And Recovery section to relocate");
433
+ const withoutLiveSection = text.replace(section, "");
434
+ return `${withoutLiveSection}\n<script type="text/plain">\n${section}\n</script>\n`;
435
+ });
436
+ runFixture(
437
+ "a required section relocated into a script block still fails as missing",
438
+ requiredSectionInScriptBlock,
439
+ "check-onboarding-graph.ts",
440
+ 1,
441
+ "onboarding_graph.section_failure_and_recovery_missing",
442
+ );
443
+
444
+ const requiredSectionInDivBlock = makeFixture("onboarding-graph-required-section-in-div-block");
445
+ mutateOnboarding(requiredSectionInDivBlock, (text) => {
446
+ // Relocate the entire live "## Evidence Decision And Complaint Traceability" section into a
447
+ // <div> block, with no blank line between the opening tag and the heading -- CommonMark's
448
+ // HTML-block-type-6 rule (div, section, table, p, li, ... -- a different rule from the
449
+ // script/style/template family above) runs the block through the next blank line, not until a
450
+ // matching closing tag, so the heading line (the first line after the opener, with no blank
451
+ // line separating them) is absorbed into the block regardless of what happens later in the
452
+ // section body. A real renderer shows the heading as literal text beside the <div> markup,
453
+ // never as a parsed heading, but before this fix stripNonRenderedMarkdown() had no notion of
454
+ // this tag family at all and left it live and findable.
455
+ const section = text.match(/## Evidence Decision And Complaint Traceability\n[\s\S]*?(?=\n## )/)?.[0];
456
+ if (!section) throw new Error("fixture setup: could not locate the Evidence Decision And Complaint Traceability section to relocate");
457
+ const withoutLiveSection = text.replace(section, "");
458
+ return `${withoutLiveSection}\n<div>\n${section}\n</div>\n`;
459
+ });
460
+ runFixture(
461
+ "a required section relocated into a div block still fails as missing",
462
+ requiredSectionInDivBlock,
463
+ "check-onboarding-graph.ts",
464
+ 1,
465
+ "onboarding_graph.section_evidence_decision_and_complaint_traceability_missing",
466
+ );
467
+
468
+ const requiredSectionInPreBlock = makeFixture("onboarding-graph-required-section-in-pre-block");
469
+ mutateOnboarding(requiredSectionInPreBlock, (text) => {
470
+ // Relocate the entire live "## Competitor Review Matrix" section into a <pre> block.
471
+ // stripNonRenderingHtmlBlocks() originally only recognized script/style/template -- <pre>'s
472
+ // content DOES render visibly (unlike script/style/template), which is exactly why it was
473
+ // deliberately left unstripped, but "renders visibly" is the wrong test: a heading inside
474
+ // <pre> displays as literal preformatted text, never as a parsed heading a real renderer or
475
+ // this validator's own hasHeading()/graphRunRows()/countChecklistItems() would recognize.
476
+ const section = text.match(/## Competitor Review Matrix\n[\s\S]*?(?=\n## )/)?.[0];
477
+ if (!section) throw new Error("fixture setup: could not locate the Competitor Review Matrix section to relocate");
478
+ const withoutLiveSection = text.replace(section, "");
479
+ return `${withoutLiveSection}\n<pre>\n${section}\n</pre>\n`;
480
+ });
481
+ runFixture(
482
+ "a required section relocated into a pre block still fails as missing",
483
+ requiredSectionInPreBlock,
484
+ "check-onboarding-graph.ts",
485
+ 1,
486
+ "onboarding_graph.section_competitor_review_matrix_missing",
487
+ );
488
+
489
+ const requiredSectionInCustomElementBlock = makeFixture("onboarding-graph-required-section-in-custom-element-block");
490
+ mutateOnboarding(requiredSectionInCustomElementBlock, (text) => {
491
+ // Relocate the entire live "## Permissions And Lifecycle" section into an <x-proof> custom
492
+ // element. CommonMark's HTML-block-type-7 rule: a line consisting of a COMPLETE open or
493
+ // closing tag and nothing else -- ANY tag name, including hyphenated custom elements, not
494
+ // just the curated type-6 container set -- opens an HTML block that runs through the next
495
+ // blank line. A real renderer shows the absorbed heading as inert text inside unknown
496
+ // markup, never as a parsed heading, but stripNonRenderedMarkdown() previously recognized
497
+ // only the five type-1 tags and the curated type-6 set, so evidence or completion structure
498
+ // hidden in a custom element stayed live and findable.
499
+ const section = text.match(/## Permissions And Lifecycle\n[\s\S]*?(?=\n## )/)?.[0];
500
+ if (!section) throw new Error("fixture setup: could not locate the Permissions And Lifecycle section to relocate");
501
+ const withoutLiveSection = text.replace(section, "");
502
+ return `${withoutLiveSection}\n<x-proof>\n${section}\n</x-proof>\n`;
503
+ });
504
+ runFixture(
505
+ "a required section relocated into a custom-element block still fails as missing",
506
+ requiredSectionInCustomElementBlock,
507
+ "check-onboarding-graph.ts",
508
+ 1,
509
+ "onboarding_graph.section_permissions_and_lifecycle_missing",
510
+ );
511
+
512
+ const requiredSectionInTextareaBlock = makeFixture("onboarding-graph-required-section-in-textarea-block");
513
+ mutateOnboarding(requiredSectionInTextareaBlock, (text) => {
514
+ // Same gap, <textarea> this time: a form control's raw value renders visibly too, but a
515
+ // heading placed inside one is a literal string inside a control, never live document
516
+ // structure -- the same "renders visibly but is not parsed Markdown" case as <pre>.
517
+ const section = text.match(/## Internal Guidance Audit\n[\s\S]*?(?=\n## )/)?.[0];
518
+ if (!section) throw new Error("fixture setup: could not locate the Internal Guidance Audit section to relocate");
519
+ const withoutLiveSection = text.replace(section, "");
520
+ return `${withoutLiveSection}\n<textarea>\n${section}\n</textarea>\n`;
521
+ });
522
+ runFixture(
523
+ "a required section relocated into a textarea block still fails as missing",
524
+ requiredSectionInTextareaBlock,
525
+ "check-onboarding-graph.ts",
526
+ 1,
527
+ "onboarding_graph.section_internal_guidance_audit_missing",
528
+ );
529
+
530
+ const requiredHeadingTabIndented = makeFixture("onboarding-graph-required-heading-tab-indented");
531
+ mutateOnboarding(requiredHeadingTabIndented, (text) =>
532
+ // A single leading tab expands to CommonMark's own 4-column tab stop, the same indentation
533
+ // threshold as four literal spaces -- it is preceded by a blank line in the shipped template,
534
+ // so it opens an indented code block exactly like the space-indented case above. A check that
535
+ // only recognized four literal space characters would miss this and still find the heading.
536
+ text.replace("## Permissions And Lifecycle\n", "\t## Permissions And Lifecycle\n"),
537
+ );
538
+ runFixture(
539
+ "a required heading indented with a tab into a CommonMark code block still fails as missing",
540
+ requiredHeadingTabIndented,
541
+ "check-onboarding-graph.ts",
542
+ 1,
543
+ "onboarding_graph.section_permissions_and_lifecycle_missing",
544
+ );
545
+
546
+ const reviewInsideFirstRun = makeFixture("onboarding-graph-review-inside-first-run");
547
+ mutateOnboarding(reviewInsideFirstRun, (text) =>
548
+ text.replace(
549
+ "The native request happens outside first-run onboarding.",
550
+ "Show the native review prompt immediately after first value inside first-run onboarding.",
551
+ ),
552
+ );
553
+ runFixture(
554
+ "review request immediately after first value inside onboarding fails",
555
+ reviewInsideFirstRun,
556
+ "check-onboarding-graph.ts",
557
+ 1,
558
+ "onboarding_graph.review_inside_first_run",
559
+ );
560
+
561
+ const unobservableReview = makeFixture("onboarding-graph-unobservable-review-event");
562
+ mutateOnboarding(unobservableReview, (text) => text.replace("`review_request_returned`", "`review_prompt_shown`"));
563
+ runFixture(
564
+ "analytics cannot claim that the platform displayed a review prompt",
565
+ unobservableReview,
566
+ "check-onboarding-graph.ts",
567
+ 1,
568
+ "onboarding_graph.review_unobservable_event",
569
+ );
570
+
571
+ const controlContractMissing = makeFixture("onboarding-graph-control-contract-missing");
572
+ mutateOnboarding(controlContractMissing, (text) => text.replaceAll("ONB-CTL-001", "CONTROL-TBD"));
573
+ runFixture("onboarding without stable control IDs fails", controlContractMissing, "check-onboarding-graph.ts", 1, "onboarding_graph.design_contract");
574
+
575
+ const targetRuntimeMissing = makeFixture("onboarding-graph-target-runtime-missing");
576
+ mutateOnboarding(targetRuntimeMissing, (text) => text.replaceAll("Do not keep the old runtime", "Keep the old runtime"));
577
+ runFixture(
578
+ "replacement plan that keeps the old runtime fails",
579
+ targetRuntimeMissing,
580
+ "check-onboarding-graph.ts",
581
+ 1,
582
+ "onboarding_graph.replacement_contract",
583
+ );
584
+
585
+ const deferredWithUnscopedArtifact = makeFixture("onboarding-graph-deferred-with-unscoped-artifact");
586
+ {
587
+ const state = readState(deferredWithUnscopedArtifact);
588
+ const lane = getLane(state, "onboarding");
589
+ lane["status"] = "deferred";
590
+ lane["blockers"] = ["2026-08-08 founder deferred onboarding until the product hypothesis is validated"];
591
+ writeState(deferredWithUnscopedArtifact, state);
592
+ writeFileSync(onboardingPath(deferredWithUnscopedArtifact), "# Unscoped onboarding notes\n\nRetained for history.\n", "utf8");
593
+ }
594
+ runFixture("explicitly deferred onboarding ignores a retained removal artifact", deferredWithUnscopedArtifact, "check-onboarding-graph.ts", 0);
595
+
596
+ const doneWithPlaceholders = makeFixture("onboarding-graph-done-with-placeholders");
597
+ {
598
+ markOnboardingDone(doneWithPlaceholders);
599
+ }
600
+ runFixture(
601
+ "done onboarding lane with not_started nodes and template records fails",
602
+ doneWithPlaceholders,
603
+ "check-onboarding-graph.ts",
604
+ 1,
605
+ "onboarding_graph.placeholder_complete",
606
+ );
607
+
608
+ const doneWithRenamedPlaceholders = makeFixture("onboarding-graph-done-with-renamed-placeholders");
609
+ {
610
+ markOnboardingDone(doneWithRenamedPlaceholders);
611
+ mutateOnboarding(doneWithRenamedPlaceholders, (text) => text.replaceAll("not_started", "done").replaceAll("Record", "Completed"));
612
+ }
613
+ runFixture(
614
+ "renaming template directives does not create a completed onboarding contract",
615
+ doneWithRenamedPlaceholders,
616
+ "check-onboarding-graph.ts",
617
+ 1,
618
+ "onboarding_graph.placeholder_complete",
619
+ );
620
+
621
+ const doneWithOrdinaryRecordProse = makeFixture("onboarding-graph-done-with-ordinary-record-prose");
622
+ {
623
+ markOnboardingDone(doneWithOrdinaryRecordProse);
624
+ mutateOnboarding(doneWithOrdinaryRecordProse, (text) => {
625
+ const completed = checkVerificationItems(fillProseDirectiveLines(fillTemplateDirectiveCells(text.replaceAll("not_started", "done"))));
626
+ return `${completed}\nThis remains the canonical execution record for the completed onboarding system.\n`;
627
+ });
628
+ }
629
+ runFixture("completed onboarding may use the ordinary word record outside template cells", doneWithOrdinaryRecordProse, "check-onboarding-graph.ts", 0);
630
+ runFixture("a genuinely completed onboarding graph also satisfies --require-done", doneWithOrdinaryRecordProse, "check-onboarding-graph.ts", 0, undefined, [
631
+ "--require-done",
632
+ ]);
633
+
634
+ const doneWithTodoInInlineCodeSpan = makeFixture("onboarding-graph-done-with-todo-in-inline-code-span");
635
+ {
636
+ markOnboardingDone(doneWithTodoInInlineCodeSpan);
637
+ mutateOnboarding(doneWithTodoInInlineCodeSpan, (text) => {
638
+ const completed = checkVerificationItems(fillProseDirectiveLines(fillTemplateDirectiveCells(text.replaceAll("not_started", "done"))));
639
+ // A triple-backtick code SPAN (CommonMark allows any run length as a code-span delimiter,
640
+ // not just single backticks) sitting mid-line inside a sentence -- not alone on its own
641
+ // line -- is not a fence at all; the rendered document shows TODO right there, in the open.
642
+ // A fence-stripper that matches a run of 3+ backticks anywhere, ignoring line position,
643
+ // cannot tell this apart from a real fence and would erase the word along with its
644
+ // delimiters, hiding a genuine unfinished-work marker from the placeholder scan below.
645
+ return `${completed}\nThis section still displays \`\`\`TODO\`\`\` inline as a worked example of what NOT to leave in a finished artifact.\n`;
646
+ });
647
+ }
648
+ runFixture(
649
+ "a TODO marker inside an inline triple-backtick code span still fails --require-done as incomplete",
650
+ doneWithTodoInInlineCodeSpan,
651
+ "check-onboarding-graph.ts",
652
+ 1,
653
+ "onboarding_graph.placeholder_complete",
654
+ ["--require-done"],
655
+ );
656
+
657
+ const doneWithTodoAfterIndentedFenceLookalike = makeFixture("onboarding-graph-done-with-todo-after-indented-fence-lookalike");
658
+ {
659
+ markOnboardingDone(doneWithTodoAfterIndentedFenceLookalike);
660
+ mutateOnboarding(doneWithTodoAfterIndentedFenceLookalike, (text) => {
661
+ const completed = checkVerificationItems(fillProseDirectiveLines(fillTemplateDirectiveCells(text.replaceAll("not_started", "done"))));
662
+ // Both backtick runs are indented 4 spaces -- CommonMark's own cutoff for "this indentation
663
+ // starts an indented code block instead of a fence" (a fence may be indented at most 3
664
+ // spaces). A position-blind stripper that ignores indentation would still pair these two
665
+ // runs as an opener/closer and erase the live TODO line sitting between them; a real
666
+ // renderer never treats either line as a fence delimiter, so the TODO stays visible.
667
+ return `${completed}\n \`\`\`\nThis line still visibly says TODO and sits between two over-indented backtick runs.\n \`\`\`\n`;
668
+ });
669
+ }
670
+ runFixture(
671
+ "a TODO marker between two over-indented (4-space) backtick runs still fails --require-done as incomplete",
672
+ doneWithTodoAfterIndentedFenceLookalike,
673
+ "check-onboarding-graph.ts",
674
+ 1,
675
+ "onboarding_graph.placeholder_complete",
676
+ ["--require-done"],
677
+ );
678
+
679
+ const doneWithTodoAfterInlineHtmlTagMention = makeFixture("onboarding-graph-done-with-todo-after-inline-html-tag-mention");
680
+ {
681
+ markOnboardingDone(doneWithTodoAfterInlineHtmlTagMention);
682
+ mutateOnboarding(doneWithTodoAfterInlineHtmlTagMention, (text) => {
683
+ const completed = checkVerificationItems(fillProseDirectiveLines(fillTemplateDirectiveCells(text.replaceAll("not_started", "done"))));
684
+ // The tag mention sits inside an inline code span mid-sentence, not alone at the start of its
685
+ // own line -- CommonMark never treats it as a real HTML block opener, so the rendered
686
+ // document shows both this sentence and the later TODO line right there, in the open. A
687
+ // position-blind stripper that matches the tag name anywhere in the raw text would still read
688
+ // this as an unterminated opener and, finding no closing tag anywhere after it, erase
689
+ // everything through end of document -- including the live TODO line below -- along with it.
690
+ return `${completed}\nThis section still mentions \`<style>\` inline as a worked example of a tag name, not a real block.\nThis line still visibly says TODO, well after that inline mention.\n`;
691
+ });
692
+ }
693
+ runFixture(
694
+ "a TODO marker after an inline mid-sentence HTML tag mention still fails --require-done as incomplete",
695
+ doneWithTodoAfterInlineHtmlTagMention,
696
+ "check-onboarding-graph.ts",
697
+ 1,
698
+ "onboarding_graph.placeholder_complete",
699
+ ["--require-done"],
700
+ );
701
+
702
+ const doneWithIndentedGraphRunTable = makeFixture("onboarding-graph-done-with-indented-graph-run-table");
703
+ {
704
+ markOnboardingDone(doneWithIndentedGraphRunTable);
705
+ mutateOnboarding(doneWithIndentedGraphRunTable, (text) => {
706
+ const completed = checkVerificationItems(fillProseDirectiveLines(fillTemplateDirectiveCells(text.replaceAll("not_started", "done"))));
707
+ // Indenting the whole Graph Run table by 4 spaces turns it into a CommonMark indented code
708
+ // block (preceded by the blank line right after the "## Graph Run" heading) -- a rendered
709
+ // page shows this as inert code text, not as the graph's actual completion record.
710
+ // graphRunRows() has no notion of indentation and only ever matches each line's own
711
+ // *trimmed* text against "starts with |", so an indented, non-rendering table still
712
+ // registered every node as done.
713
+ // The header cells below are separated by \s* rather than a literal single space because
714
+ // the shipped template's Graph Run table is column-aligned (ADR-0002 repository layout
715
+ // move re-rendered it with padded cells) -- the same table graphRunRows() itself reads by
716
+ // trimming each cell, not by any fixed-width assumption.
717
+ const table = completed.match(/\|\s*Node\s*\|\s*Status\s*\|\s*Owner\s*\|\s*Result or next action\s*\|\n(?:\|.*\|\n?)+/);
718
+ if (!table) throw new Error("fixture setup: could not locate the Graph Run table to indent");
719
+ const indented = table[0]
720
+ .split("\n")
721
+ .map((line) => (line.length > 0 ? ` ${line}` : line))
722
+ .join("\n");
723
+ return completed.replace(table[0], indented);
724
+ });
725
+ }
726
+ runFixture(
727
+ "a Graph Run table indented into a CommonMark code block still fails every node as not done",
728
+ doneWithIndentedGraphRunTable,
729
+ "check-onboarding-graph.ts",
730
+ 1,
731
+ "onboarding_graph.node_not_done",
732
+ ["--require-done"],
733
+ );
734
+
735
+ // ONB-22's own catalog gate (check:onboarding-graph-complete) passes --require-done
736
+ // unconditionally -- the shipped template's Graph Run table still reads not_started for every
737
+ // node, so this is the one case that must fail even though the lenient baseline case above
738
+ // passes clean. This no longer depends on lanes.onboarding.status: the content checks below
739
+ // (which --require-done always runs, regardless of that field's value) reject the unstarted
740
+ // template on their own.
741
+ runFixture(
742
+ "the shipped template's own gate (--require-done) refuses to accept an unstarted onboarding lane",
743
+ baseline,
744
+ "check-onboarding-graph.ts",
745
+ 1,
746
+ "onboarding_graph.placeholder_complete",
747
+ ["--require-done"],
748
+ );
749
+
750
+ const completeArtifactLaneNeverMarkedDone = makeFixture("onboarding-graph-complete-artifact-lane-never-marked-done");
751
+ {
752
+ // Deliberately does NOT call markOnboardingDone -- lanes.onboarding.status stays at the
753
+ // shipped default (not_started), exactly as it would in a real durable-engine run: no
754
+ // production code path ever commits lanes.onboarding.status to "done" as a *result* of
755
+ // ONB-22's gate passing (kernel/engine/runstate.ts's reconcilePatch()/acceptVerification() only
756
+ // mutate run-state.json, never business-state.json). Requiring that field to already say done
757
+ // as --require-done's own precondition was therefore a deadlock the engine could never
758
+ // legitimately clear -- this proves the artifact's own content is sufficient on its own.
759
+ mutateOnboarding(completeArtifactLaneNeverMarkedDone, (text) => {
760
+ const completed = checkVerificationItems(fillProseDirectiveLines(fillTemplateDirectiveCells(text.replaceAll("not_started", "done"))));
761
+ return `${completed}\nThis remains the canonical execution record for the completed onboarding system.\n`;
762
+ });
763
+ }
764
+ runFixture(
765
+ "ONB-22's --require-done gate passes on a genuinely complete artifact even though lanes.onboarding.status was never externally marked done",
766
+ completeArtifactLaneNeverMarkedDone,
767
+ "check-onboarding-graph.ts",
768
+ 0,
769
+ undefined,
770
+ ["--require-done"],
771
+ );
772
+
773
+ // A durable-engine-managed v2 workspace has no state/business-state.json at all (its canonical
774
+ // state is state/business-state.json, per kernel/session/run.ts's resolveWorkspacePaths()) --
775
+ // without loadLaneFromBusinessStateV2()'s fallback in check-onboarding-graph.ts, ONB-22's own
776
+ // --require-done gate would report the lane permanently missing on every genuinely completed
777
+ // v2 run, since loadProjectState() alone only ever reads the v1 file. buildValidBusinessStateV2
778
+ // produces a complete, schema-valid document (loadLaneFromBusinessStateV2 runs every v2 document
779
+ // through validateBusinessState() and fails closed on anything less -- a fixture using a partial
780
+ // object would test a state the real validator never actually accepts).
781
+ const ALL_LANE_KEYS = [
782
+ "paid_tool_routing",
783
+ "secrets",
784
+ "security",
785
+ "research",
786
+ "traceability",
787
+ "experience",
788
+ "product",
789
+ "design",
790
+ "emotional_design",
791
+ "content_assets",
792
+ "analytics_attribution",
793
+ "paid_user_acquisition",
794
+ "onboarding",
795
+ "revenue",
796
+ "store_console",
797
+ "apple_signing",
798
+ "privacy_legal",
799
+ "email",
800
+ "orchestration",
801
+ "engineering",
802
+ "growth",
803
+ "post_launch_ops",
804
+ ];
805
+
806
+ function buildValidBusinessStateV2(onboardingLane: { status: string; evidence: string[]; blockers: string[] }): Record<string, unknown> {
807
+ const lanes: Record<string, unknown> = {};
808
+ for (const key of ALL_LANE_KEYS) {
809
+ lanes[key] = key === "onboarding" ? onboardingLane : { status: "pending", evidence: [], blockers: [] };
810
+ }
811
+ return {
812
+ schemaVersion: "2.0.0",
813
+ updatedAt: "2026-08-09T00:00:00.000Z",
814
+ narrative: { sinceLastTime: "", rightNow: "", yourCall: "", lastCelebratedPhase: "" },
815
+ project: {
816
+ name: "Fixture App",
817
+ slug: "fixture-app",
818
+ owner: "Founder",
819
+ phase: "phase_2_build",
820
+ launchScope: "essentials",
821
+ kickoffDate: "",
822
+ platforms: ["ios"],
823
+ bundleIds: { ios: "com.example.app", android: "" },
824
+ publicUrls: { landing: "", privacy: "", terms: "" },
825
+ },
826
+ lanes,
827
+ founderGates: { pending: [] },
828
+ };
829
+ }
830
+
831
+ const v2LaneComplete = makeFixture("onboarding-graph-v2-business-state-complete");
832
+ {
833
+ rmSync(path.join(v2LaneComplete, "state/business-state.json"), { force: true });
834
+ writeFileSync(
835
+ path.join(v2LaneComplete, "state/business-state.json"),
836
+ JSON.stringify(buildValidBusinessStateV2({ status: "succeeded", evidence: ["product/ONBOARDING.md", "product/onboarding.html"], blockers: [] })),
837
+ "utf8",
838
+ );
839
+ mutateOnboarding(v2LaneComplete, (text) => {
840
+ const completed = checkVerificationItems(fillProseDirectiveLines(fillTemplateDirectiveCells(text.replaceAll("not_started", "done"))));
841
+ return `${completed}\nThis remains the canonical execution record for the completed onboarding system.\n`;
842
+ });
843
+ }
844
+ runFixture(
845
+ "a current workspace reads completed lanes.onboarding from business state and satisfies --require-done",
846
+ v2LaneComplete,
847
+ "check-onboarding-graph.ts",
848
+ 0,
849
+ undefined,
850
+ ["--require-done"],
851
+ );
852
+
853
+ const v2LanePendingIncompleteArtifact = makeFixture("onboarding-graph-v2-business-state-pending-incomplete-artifact");
854
+ {
855
+ rmSync(path.join(v2LanePendingIncompleteArtifact, "state/business-state.json"), { force: true });
856
+ writeFileSync(
857
+ path.join(v2LanePendingIncompleteArtifact, "state/business-state.json"),
858
+ JSON.stringify(buildValidBusinessStateV2({ status: "pending", evidence: [], blockers: [] })),
859
+ "utf8",
860
+ );
861
+ }
862
+ runFixture(
863
+ "a v2 workspace with an unfinished onboarding lane and an unfinished artifact still fails --require-done",
864
+ v2LanePendingIncompleteArtifact,
865
+ "check-onboarding-graph.ts",
866
+ 1,
867
+ "onboarding_graph.placeholder_complete",
868
+ ["--require-done"],
869
+ );
870
+
871
+ // lanes.onboarding.status never legitimately becomes "succeeded" as a *result* of ONB-22's own
872
+ // gate passing under the durable engine (kernel/engine/runstate.ts's reconcilePatch()/
873
+ // acceptVerification() only ever mutate run-state.json, never business-state.json) -- so a
874
+ // canonical v2 lane realistically sits at "pending" for the entire run, including at the exact
875
+ // moment ONB-22 itself finally executes. --require-done must not deadlock on that: it validates
876
+ // the artifact's own content, not an externally-tracked field nothing ever sets to done for it.
877
+ const v2LanePendingCompleteArtifact = makeFixture("onboarding-graph-v2-business-state-pending-complete-artifact");
878
+ {
879
+ rmSync(path.join(v2LanePendingCompleteArtifact, "state/business-state.json"), { force: true });
880
+ writeFileSync(
881
+ path.join(v2LanePendingCompleteArtifact, "state/business-state.json"),
882
+ JSON.stringify(buildValidBusinessStateV2({ status: "pending", evidence: [], blockers: [] })),
883
+ "utf8",
884
+ );
885
+ mutateOnboarding(v2LanePendingCompleteArtifact, (text) => {
886
+ const completed = checkVerificationItems(fillProseDirectiveLines(fillTemplateDirectiveCells(text.replaceAll("not_started", "done"))));
887
+ return `${completed}\nThis remains the canonical execution record for the completed onboarding system.\n`;
888
+ });
889
+ }
890
+ runFixture(
891
+ "ONB-22's --require-done gate does not deadlock on a canonical v2 lane still pending once the artifact itself is genuinely complete",
892
+ v2LanePendingCompleteArtifact,
893
+ "check-onboarding-graph.ts",
894
+ 0,
895
+ undefined,
896
+ ["--require-done"],
897
+ );
898
+
899
+ // check-onboarding-graph.ts must fail closed on a malformed/partial business-state.json, never
900
+ // silently extract the one field it wants from an unvalidated document -- a corrupt canonical
901
+ // file must not quietly authorize the destructive ONB-22 cutover.
902
+ const v2LaneInvalid = makeFixture("onboarding-graph-v2-business-state-invalid");
903
+ {
904
+ rmSync(path.join(v2LaneInvalid, "state/business-state.json"), { force: true });
905
+ writeFileSync(
906
+ path.join(v2LaneInvalid, "state/business-state.json"),
907
+ JSON.stringify({ schemaVersion: "2.0.0", lanes: { onboarding: { status: "succeeded", evidence: [], blockers: [] } } }),
908
+ "utf8",
909
+ );
910
+ }
911
+ runFixture(
912
+ "a malformed business-state.json (missing required top-level fields) fails closed instead of trusting its one readable field",
913
+ v2LaneInvalid,
914
+ "check-onboarding-graph.ts",
915
+ 1,
916
+ "project_state.invalid_schema",
917
+ );
918
+
919
+ // Pending work does not claim a finished onboarding artifact.
920
+ const pendingOnboarding = makeFixture("onboarding-pending");
921
+ {
922
+ writeFileSync(
923
+ path.join(pendingOnboarding, "state/business-state.json"),
924
+ JSON.stringify(buildValidBusinessStateV2({ status: "pending", evidence: [], blockers: [] })),
925
+ "utf8",
926
+ );
927
+ }
928
+ runFixture("pending onboarding does not trigger completion checks against an unfinished artifact", pendingOnboarding, "check-onboarding-graph.ts", 0);
929
+
930
+ // Provider-proof checks read the same reducer-owned state as onboarding.
931
+ const pendingOnboardingNeedsNoProof = makeFixture("onboarding-pending-no-proof");
932
+ {
933
+ rmSync(path.join(pendingOnboardingNeedsNoProof, "state/business-state.json"), { force: true });
934
+ writeFileSync(
935
+ path.join(pendingOnboardingNeedsNoProof, "state/business-state.json"),
936
+ JSON.stringify(buildValidBusinessStateV2({ status: "pending", evidence: [], blockers: [] })),
937
+ "utf8",
938
+ );
939
+ }
940
+ runFixture("pending onboarding accepts the current state without provider proof", pendingOnboardingNeedsNoProof, "check-live-provider-proof.ts", 0);
941
+
942
+ const completedOnboardingNeedsProof = makeFixture("onboarding-completed-needs-proof");
943
+ {
944
+ writeFileSync(
945
+ path.join(completedOnboardingNeedsProof, "state/business-state.json"),
946
+ JSON.stringify(buildValidBusinessStateV2({ status: "succeeded", evidence: ["product/ONBOARDING.md"], blockers: [] })),
947
+ "utf8",
948
+ );
949
+ rmSync(path.join(completedOnboardingNeedsProof, "operations/PROVIDER_PROOF.md"), { force: true });
950
+ }
951
+ runFixture("completed onboarding requires provider proof", completedOnboardingNeedsProof, "check-live-provider-proof.ts", 1, "provider_proof.file_missing");
952
+
953
+ const doneWithUncheckedVerification = makeFixture("onboarding-graph-done-with-unchecked-verification");
954
+ {
955
+ markOnboardingDone(doneWithUncheckedVerification);
956
+ // Same table- and prose-filling treatment as the passing "genuinely completed" fixture
957
+ // above, but the Verification section's own "- [ ]" checklist is deliberately left untouched.
958
+ mutateOnboarding(doneWithUncheckedVerification, (text) => fillProseDirectiveLines(fillTemplateDirectiveCells(text.replaceAll("not_started", "done"))));
959
+ }
960
+ runFixture(
961
+ "a done lane with every Verification checklist item still unchecked fails",
962
+ doneWithUncheckedVerification,
963
+ "check-onboarding-graph.ts",
964
+ 1,
965
+ "onboarding_graph.verification_incomplete",
966
+ ["--require-done"],
967
+ );
968
+
969
+ const statusColumnSpoofed = makeFixture("onboarding-graph-status-column-spoofed");
970
+ {
971
+ markOnboardingDone(statusColumnSpoofed);
972
+ mutateOnboarding(statusColumnSpoofed, (text) => {
973
+ const filled = checkVerificationItems(fillProseDirectiveLines(fillTemplateDirectiveCells(text.replaceAll("not_started", "done"))));
974
+ // ONB-01's row now reads "done" in the Status column like every other row from the blanket
975
+ // replace above; put it back to "partial" there while planting the literal word "done" in
976
+ // its Result cell, proving the checker reads the Status column specifically, not any cell
977
+ // in the row. Matched by pattern rather than a literal single-spaced string because the
978
+ // shipped table's cells are column-aligned (padded to their widest row), not fixed-width.
979
+ return filled.replace(
980
+ /\|\s*`ONB-01`\s*\|\s*done\s*\|\s*Engineering and product\s*\|\s*Trace the current implementation\s*\|/,
981
+ "| `ONB-01` | partial | Engineering and product | done, this work is done |",
982
+ );
983
+ });
984
+ }
985
+ runFixture(
986
+ "a Graph Run row's non-status cell mentioning done does not substitute for its Status column",
987
+ statusColumnSpoofed,
988
+ "check-onboarding-graph.ts",
989
+ 1,
990
+ "onboarding_graph.node_not_done",
991
+ ["--require-done"],
992
+ );
993
+
994
+ const duplicateGraphRunRow = makeFixture("onboarding-graph-duplicate-row");
995
+ {
996
+ markOnboardingDone(duplicateGraphRunRow);
997
+ mutateOnboarding(duplicateGraphRunRow, (text) => {
998
+ const filled = checkVerificationItems(fillProseDirectiveLines(fillTemplateDirectiveCells(text.replaceAll("not_started", "done"))));
999
+ // A resumed or merged run can retain a stale row for a node alongside a freshly appended
1000
+ // one instead of updating it in place -- duplicate ONB-01's row with a conflicting status
1001
+ // to prove the checker rejects this instead of accepting the node because some row says done.
1002
+ // Matched by pattern rather than a literal single-spaced string because the shipped table's
1003
+ // cells are column-aligned (padded to their widest row), not fixed-width.
1004
+ return filled.replace(
1005
+ /\|\s*`ONB-01`\s*\|\s*done\s*\|\s*Engineering and product\s*\|\s*Trace the current implementation\s*\|/,
1006
+ "| `ONB-01` | partial | Engineering and product | Trace the current implementation |\n| `ONB-01` | done | Engineering and product | Trace the current implementation |",
1007
+ );
1008
+ });
1009
+ }
1010
+ runFixture(
1011
+ "duplicate Graph Run rows for one node fail even when one of them says done",
1012
+ duplicateGraphRunRow,
1013
+ "check-onboarding-graph.ts",
1014
+ 1,
1015
+ "onboarding_graph.node_duplicate_row",
1016
+ ["--require-done"],
1017
+ );
1018
+
1019
+ const fencedFakeGraphRunTable = makeFixture("onboarding-graph-fenced-fake-table");
1020
+ {
1021
+ markOnboardingDone(fencedFakeGraphRunTable);
1022
+ mutateOnboarding(fencedFakeGraphRunTable, (text) => {
1023
+ const completed = checkVerificationItems(fillProseDirectiveLines(fillTemplateDirectiveCells(text.replaceAll("not_started", "done"))));
1024
+ const graphRunSection = completed.match(/## Graph Run\n[\s\S]*?(?=\n## )/)?.[0];
1025
+ if (!graphRunSection) throw new Error("fixture setup: could not locate the Graph Run section to relocate");
1026
+ // Remove the live "## Graph Run" heading and table entirely and relocate the exact same
1027
+ // (all-done) content into a fenced code sample instead -- it is now the ONLY "## Graph Run"
1028
+ // heading anywhere in the document. sectionBody()'s own line search finds whichever "##
1029
+ // Graph Run" line comes first with no regard for fences, so before this fix this fenced
1030
+ // sample would have been picked up as the canonical run record and accepted every node as
1031
+ // done; after the fix, graphRunNodeStatus() reads only the fence-stripped live text, finds
1032
+ // no live Graph Run table at all, and correctly reports every node as not recorded.
1033
+ const withoutLiveTable = completed.replace(graphRunSection, "");
1034
+ return `${withoutLiveTable}\n\`\`\`markdown\n${graphRunSection}\n\`\`\`\n`;
1035
+ });
1036
+ }
1037
+ runFixture(
1038
+ "a fenced fake Graph Run table cannot substitute for the removed live one",
1039
+ fencedFakeGraphRunTable,
1040
+ "check-onboarding-graph.ts",
1041
+ 1,
1042
+ "onboarding_graph.node_not_done",
1043
+ ["--require-done"],
1044
+ );
1045
+
1046
+ const verificationChecklistDeleted = makeFixture("onboarding-graph-verification-checklist-deleted");
1047
+ {
1048
+ markOnboardingDone(verificationChecklistDeleted);
1049
+ mutateOnboarding(verificationChecklistDeleted, (text) => {
1050
+ const completed = fillProseDirectiveLines(fillTemplateDirectiveCells(text.replaceAll("not_started", "done")));
1051
+ // Delete every Verification checklist item outright (not just leave it unchecked) --
1052
+ // countUncheckedItems() alone reads 0 just as happily on an emptied section as on a
1053
+ // genuinely completed one, so this must be caught by a minimum-item-count check instead.
1054
+ return completed.replace(/## Verification[\s\S]*$/, "## Verification\n");
1055
+ });
1056
+ }
1057
+ runFixture(
1058
+ "deleting the Verification checklist outright still fails even though nothing is left unchecked",
1059
+ verificationChecklistDeleted,
1060
+ "check-onboarding-graph.ts",
1061
+ 1,
1062
+ "onboarding_graph.verification_items_missing",
1063
+ ["--require-done"],
1064
+ );
1065
+
1066
+ const verificationChecklistDeletedAndDuplicated = makeFixture("onboarding-graph-verification-checklist-deleted-and-duplicated");
1067
+ {
1068
+ markOnboardingDone(verificationChecklistDeletedAndDuplicated);
1069
+ mutateOnboarding(verificationChecklistDeletedAndDuplicated, (text) => {
1070
+ const completed = checkVerificationItems(fillProseDirectiveLines(fillTemplateDirectiveCells(text.replaceAll("not_started", "done"))));
1071
+ // Delete the first canonical assertion and duplicate the second one in its place --
1072
+ // verificationItemCount still reaches 11 and countUncheckedItems() still reads 0, so a
1073
+ // count-only check would accept this even though a required assertion is now genuinely
1074
+ // missing, replaced by a copy of an unrelated one.
1075
+ return completed.replace(
1076
+ "- [x] `ONB-00` through `ONB-22` are done, or the lane is not claimed done\n- [x] Evidence, reviews, authorized Onbo Hub, internal guidance, provider, policy, seven-principle, and motion research are joined\n",
1077
+ "- [x] Evidence, reviews, authorized Onbo Hub, internal guidance, provider, policy, seven-principle, and motion research are joined\n- [x] Evidence, reviews, authorized Onbo Hub, internal guidance, provider, policy, seven-principle, and motion research are joined\n",
1078
+ );
1079
+ });
1080
+ }
1081
+ runFixture(
1082
+ "deleting one canonical assertion and duplicating another still fails even though the count and unchecked total both look correct",
1083
+ verificationChecklistDeletedAndDuplicated,
1084
+ "check-onboarding-graph.ts",
1085
+ 1,
1086
+ "onboarding_graph.verification_assertion_missing",
1087
+ ["--require-done"],
1088
+ );
1089
+
1090
+ // Regression (round 23): the round-22 fix above still matched a fingerprint against the whole
1091
+ // section's raw text, so it passed as long as the deleted item's distinguishing text existed
1092
+ // ANYWHERE in the section -- including as ordinary prose that was never actually a checked
1093
+ // checklist line. Deleting the first item's checked line, leaving its exact text behind as a
1094
+ // floating (non-list) sentence, and duplicating the second item's checked line to keep the
1095
+ // total count at 11 used to satisfy every existing check: the item count, the unchecked count,
1096
+ // and a substring-anywhere fingerprint search all stayed green.
1097
+ const verificationFingerprintNotActuallyChecked = makeFixture("onboarding-graph-verification-fingerprint-not-actually-checked");
1098
+ {
1099
+ markOnboardingDone(verificationFingerprintNotActuallyChecked);
1100
+ mutateOnboarding(verificationFingerprintNotActuallyChecked, (text) => {
1101
+ const completed = checkVerificationItems(fillProseDirectiveLines(fillTemplateDirectiveCells(text.replaceAll("not_started", "done"))));
1102
+ return completed.replace(
1103
+ "- [x] `ONB-00` through `ONB-22` are done, or the lane is not claimed done\n- [x] Evidence, reviews, authorized Onbo Hub, internal guidance, provider, policy, seven-principle, and motion research are joined\n",
1104
+ "Historical note: `ONB-00` through `ONB-22` are done, or the lane is not claimed done -- see the retired checklist archive for detail.\n- [x] Evidence, reviews, authorized Onbo Hub, internal guidance, provider, policy, seven-principle, and motion research are joined\n- [x] Evidence, reviews, authorized Onbo Hub, internal guidance, provider, policy, seven-principle, and motion research are joined\n",
1105
+ );
1106
+ });
1107
+ }
1108
+ runFixture(
1109
+ "a deleted assertion's text surviving only as floating prose still fails, not just a fully-vanished assertion",
1110
+ verificationFingerprintNotActuallyChecked,
1111
+ "check-onboarding-graph.ts",
1112
+ 1,
1113
+ "onboarding_graph.verification_assertion_missing",
1114
+ ["--require-done"],
1115
+ );
1116
+
1117
+ const doneWithLegitimateAnswerWords = makeFixture("onboarding-graph-done-with-legitimate-answer-words");
1118
+ {
1119
+ markOnboardingDone(doneWithLegitimateAnswerWords);
1120
+ mutateOnboarding(doneWithLegitimateAnswerWords, (text) => {
1121
+ const filled = checkVerificationItems(fillProseDirectiveLines(fillTemplateDirectiveCells(text.replaceAll("not_started", "done"))));
1122
+ // The template itself prescribes these as the terminal answer format ("Yes or no" / "Pass
1123
+ // or gaps"); a real completed launch collapses them to the single chosen word.
1124
+ return filled.replaceAll("Yes or no", "Yes").replaceAll("Pass or gaps", "Pass");
1125
+ });
1126
+ }
1127
+ runFixture(
1128
+ "completed onboarding may answer Required/QA cells with the template's own prescribed Yes/Pass terminal words",
1129
+ doneWithLegitimateAnswerWords,
1130
+ "check-onboarding-graph.ts",
1131
+ 0,
1132
+ undefined,
1133
+ ["--require-done"],
1134
+ );
1135
+
1136
+ const doneWithUnfilledProseDirective = makeFixture("onboarding-graph-done-with-unfilled-prose-directive");
1137
+ {
1138
+ markOnboardingDone(doneWithUnfilledProseDirective);
1139
+ // Table cells, checklist, and status header are all completed, but the Execution Mode
1140
+ // section's own directive-verb-led paragraph ("Record `greenfield`, ...") is left exactly
1141
+ // as the shipped template wrote it -- table-only placeholder detection would miss this.
1142
+ mutateOnboarding(doneWithUnfilledProseDirective, (text) => checkVerificationItems(fillTemplateDirectiveCells(text.replaceAll("not_started", "done"))));
1143
+ }
1144
+ runFixture(
1145
+ "a done lane with an unfilled prose directive (Execution Mode, evidence trace, ...) fails",
1146
+ doneWithUnfilledProseDirective,
1147
+ "check-onboarding-graph.ts",
1148
+ 1,
1149
+ "onboarding_graph.placeholder_complete",
1150
+ ["--require-done"],
1151
+ );
1152
+
1153
+ const staleStatusHeader = makeFixture("onboarding-graph-stale-status-header");
1154
+ {
1155
+ markOnboardingDone(staleStatusHeader);
1156
+ mutateOnboarding(staleStatusHeader, (text) => {
1157
+ const filled = checkVerificationItems(fillProseDirectiveLines(fillTemplateDirectiveCells(text.replaceAll("not_started", "done"))));
1158
+ // Every node, checklist item, and table cell now says done; put only the artifact's own
1159
+ // top-of-document "Status: `done`" header back to "partial" to prove it is independently
1160
+ // required to agree, not just inferred from everything else being done.
1161
+ return filled.replace("Status: `done`", "Status: `partial`");
1162
+ });
1163
+ }
1164
+ runFixture(
1165
+ "a done lane whose artifact Status header still says partial fails",
1166
+ staleStatusHeader,
1167
+ "check-onboarding-graph.ts",
1168
+ 1,
1169
+ "onboarding_graph.artifact_status_not_done",
1170
+ ["--require-done"],
1171
+ );
1172
+
1173
+ const deferredRequireDone = makeFixture("onboarding-graph-deferred-require-done");
1174
+ {
1175
+ const state = readState(deferredRequireDone);
1176
+ const lane = getLane(state, "onboarding");
1177
+ lane["status"] = "deferred";
1178
+ lane["blockers"] = ["2026-08-08 founder deferred onboarding until the product hypothesis is validated"];
1179
+ writeState(deferredRequireDone, state);
1180
+ }
1181
+ runFixture("the general onboarding-graph check still honors an explicit deferral", deferredRequireDone, "check-onboarding-graph.ts", 0);
1182
+ // --require-done's skip variable is deliberately `laneExempt && hasDeferralReason && !requireDone`
1183
+ // -- the deferral exemption belongs to the general (lenient) invocation only. Under
1184
+ // --require-done, ONB-22's own gate still runs the full content checks against this fixture's
1185
+ // deliberately untouched (still unstarted) artifact regardless of the deferred status, and fails
1186
+ // on the same placeholder content the baseline unstarted-template fixture does.
1187
+ runFixture(
1188
+ "a deferred onboarding lane still fails ONB-22's own --require-done gate",
1189
+ deferredRequireDone,
1190
+ "check-onboarding-graph.ts",
1191
+ 1,
1192
+ "onboarding_graph.placeholder_complete",
1193
+ ["--require-done"],
1194
+ );
1195
+
1196
+ const deferredWithoutReason = makeFixture("onboarding-graph-deferred-without-reason");
1197
+ {
1198
+ const state = readState(deferredWithoutReason);
1199
+ const lane = getLane(state, "onboarding");
1200
+ lane["status"] = "deferred";
1201
+ // Deliberately no blockers or reason recorded -- evidence alone (already present from
1202
+ // markOnboardingDone-adjacent shipped state) is not an explanation of why the lane stopped.
1203
+ writeState(deferredWithoutReason, state);
1204
+ }
1205
+ runFixture(
1206
+ "a deferred lane with no recorded blockers or reason fails even the general check",
1207
+ deferredWithoutReason,
1208
+ "check-onboarding-graph.ts",
1209
+ 1,
1210
+ "onboarding_graph.deferred_without_reason",
1211
+ );
1212
+
1213
+ const doneWithCounterBoilerplate = makeFixture("onboarding-graph-done-with-counter-boilerplate");
1214
+ {
1215
+ markOnboardingDone(doneWithCounterBoilerplate);
1216
+ // Every directive cell gets the exact same boilerplate sentence with only an incrementing
1217
+ // number varying -- technically unique per cellTextCounts, but not real content.
1218
+ let counter = 0;
1219
+ mutateOnboarding(doneWithCounterBoilerplate, (text) =>
1220
+ checkVerificationItems(
1221
+ fillProseDirectiveLines(
1222
+ text
1223
+ .replaceAll("not_started", "done")
1224
+ .split("\n")
1225
+ .map((line) => {
1226
+ if (!line.trim().startsWith("|")) return line;
1227
+ return line
1228
+ .split("|")
1229
+ .map((cell) => {
1230
+ if (!TEMPLATE_DIRECTIVE_VERBS_PATTERN.test(cell)) return cell;
1231
+ counter += 1;
1232
+ return ` Evidence-${counter}: source-backed implementation detail dated 2026-08-08 `;
1233
+ })
1234
+ .join("|");
1235
+ })
1236
+ .join("\n"),
1237
+ ),
1238
+ ),
1239
+ );
1240
+ }
1241
+ runFixture(
1242
+ "a done lane whose table cells are all the same counter-varying boilerplate fails",
1243
+ doneWithCounterBoilerplate,
1244
+ "check-onboarding-graph.ts",
1245
+ 1,
1246
+ "onboarding_graph.placeholder_complete",
1247
+ ["--require-done"],
1248
+ );
1249
+
1250
+ const doneWithFixedDoctrineProse = makeFixture("onboarding-graph-done-with-fixed-doctrine-prose");
1251
+ {
1252
+ markOnboardingDone(doneWithFixedDoctrineProse);
1253
+ mutateOnboarding(doneWithFixedDoctrineProse, (text) => {
1254
+ const filled = checkVerificationItems(fillProseDirectiveLines(fillTemplateDirectiveCells(text.replaceAll("not_started", "done"))));
1255
+ // fillProseDirectiveLines swaps every directive-verb-led line's leading word, including
1256
+ // two sentences that sit directly above their own capture table (Analytics Contract's
1257
+ // "Define a machine-readable schema..." and First Value And Activation's "Define First
1258
+ // value rendered..."). Put those two back to literally "Define ..." -- exactly as shipped
1259
+ // -- while every genuine fill-in line stays filled, proving the validator's own
1260
+ // has-table-in-section exemption rather than a swapped-verb version of the same text.
1261
+ return filled
1262
+ .replace(
1263
+ "Confirmed First value rendered, First value engaged, Activation, habit signal, retention, monetization, review eligibility, and onboarding completion separately.",
1264
+ "Define First value rendered, First value engaged, Activation, habit signal, retention, monetization, review eligibility, and onboarding completion separately.",
1265
+ )
1266
+ .replace("Confirmed a machine-readable schema and typed clients.", "Define a machine-readable schema and typed clients.");
1267
+ });
1268
+ }
1269
+ runFixture(
1270
+ "fixed doctrine prose above a capture table passes even though it starts with a directive verb",
1271
+ doneWithFixedDoctrineProse,
1272
+ "check-onboarding-graph.ts",
1273
+ 0,
1274
+ undefined,
1275
+ ["--require-done"],
1276
+ );
1277
+
1278
+ // check-onboarding-evidence-packet.ts: ONB-03..ONB-08's own per-node deterministic gate
1279
+ // (round 5's production-verification fix). It reads --root and --path exactly the way
1280
+ // runDeterministicGates() invokes it.
1281
+ const evidenceScript = "check-onboarding-evidence-packet.ts";
1282
+ const writeEvidencePacket = (fixtureRoot: string, relativePath: string, content: string): void => {
1283
+ const filePath = path.join(fixtureRoot, relativePath);
1284
+ mkdirSync(path.dirname(filePath), { recursive: true });
1285
+ writeFileSync(filePath, content, "utf8");
1286
+ };
1287
+ const substantiveResearchProse = (topic: string): string => {
1288
+ const sentence = `This is a substantive, source-backed paragraph describing real research into ${topic}. `;
1289
+ return `## Findings\n\nFinding: ${sentence.trim()}\n\nSource: fixture observation 2026-09-09.\nClassification: observation.\nDecision: retain the current plan for ${topic}.\nUncertainty: synthetic fixture evidence.\n\n${sentence.repeat(8)}\n`;
1290
+ };
1291
+ const conciseStructuredPacket = `## Findings
1292
+
1293
+ Finding: Competitor reviews name the three-step quiz as the drop-off.
1294
+ Source: App Store review sample 2026-09-01 (n=40).
1295
+ Classification: observation.
1296
+ Decision: ONB-09 adopt a shorter quiz.
1297
+ Uncertainty: sample is US-only.
1298
+ `;
1299
+
1300
+ const onb00PacketMissing = makeFixture("onboarding-evidence-onb00-missing");
1301
+ runFixture(
1302
+ "ONB-00's gate fails when the resume/scope packet does not exist yet",
1303
+ onb00PacketMissing,
1304
+ evidenceScript,
1305
+ 1,
1306
+ "onboarding_evidence.packet_missing",
1307
+ ["--node", "ONB-00", "--path", "product/onboarding/graph/ONB-00-resume-scope.md"],
1308
+ );
1309
+
1310
+ const onb00PacketComplete = makeFixture("onboarding-evidence-onb00-complete");
1311
+ writeEvidencePacket(
1312
+ onb00PacketComplete,
1313
+ "product/onboarding/graph/ONB-00-resume-scope.md",
1314
+ substantiveResearchProse("whether this run is greenfield, replacement, audit-only, or a bounded incremental scope"),
1315
+ );
1316
+ runFixture("ONB-00's gate passes a genuinely substantive, marker-free resume/scope packet", onb00PacketComplete, evidenceScript, 0, undefined, [
1317
+ "--node",
1318
+ "ONB-00",
1319
+ "--path",
1320
+ "product/onboarding/graph/ONB-00-resume-scope.md",
1321
+ ]);
1322
+
1323
+ const onb01PacketMissing = makeFixture("onboarding-evidence-onb01-missing");
1324
+ runFixture(
1325
+ "ONB-01's gate fails when the current-state trace does not exist yet",
1326
+ onb01PacketMissing,
1327
+ evidenceScript,
1328
+ 1,
1329
+ "onboarding_evidence.packet_missing",
1330
+ ["--node", "ONB-01", "--path", "product/onboarding/graph/ONB-01-current-state-trace.md"],
1331
+ );
1332
+
1333
+ const onb01PacketComplete = makeFixture("onboarding-evidence-onb01-complete");
1334
+ writeEvidencePacket(
1335
+ onb01PacketComplete,
1336
+ "product/onboarding/graph/ONB-01-current-state-trace.md",
1337
+ substantiveResearchProse("the actual onboarding implementation, documents, routes, state, providers, events, failures, tests, and replaced surfaces"),
1338
+ );
1339
+ runFixture("ONB-01's gate passes a genuinely substantive, marker-free current-state trace", onb01PacketComplete, evidenceScript, 0, undefined, [
1340
+ "--node",
1341
+ "ONB-01",
1342
+ "--path",
1343
+ "product/onboarding/graph/ONB-01-current-state-trace.md",
1344
+ ]);
1345
+
1346
+ const onb02PacketMissing = makeFixture("onboarding-evidence-onb02-missing");
1347
+ runFixture("ONB-02's gate fails when the evidence plan does not exist yet", onb02PacketMissing, evidenceScript, 1, "onboarding_evidence.packet_missing", [
1348
+ "--node",
1349
+ "ONB-02",
1350
+ "--path",
1351
+ "product/onboarding/graph/ONB-02-evidence-plan.md",
1352
+ ]);
1353
+
1354
+ const onb02PacketComplete = makeFixture("onboarding-evidence-onb02-complete");
1355
+ writeEvidencePacket(
1356
+ onb02PacketComplete,
1357
+ "product/onboarding/graph/ONB-02-evidence-plan.md",
1358
+ substantiveResearchProse("the onboarding evidence hierarchy, access constraints, sample plan, and freshness cutoff"),
1359
+ );
1360
+ runFixture("ONB-02's gate passes a genuinely substantive, marker-free evidence plan", onb02PacketComplete, evidenceScript, 0, undefined, [
1361
+ "--node",
1362
+ "ONB-02",
1363
+ "--path",
1364
+ "product/onboarding/graph/ONB-02-evidence-plan.md",
1365
+ ]);
1366
+
1367
+ const evidencePacketMissing = makeFixture("onboarding-evidence-packet-missing");
1368
+ runFixture(
1369
+ "ONB-03's gate fails when its evidence packet does not exist yet",
1370
+ evidencePacketMissing,
1371
+ evidenceScript,
1372
+ 1,
1373
+ "onboarding_evidence.packet_missing",
1374
+ ["--node", "ONB-03", "--path", "product/onboarding/graph/ONB-03-current-guidance.md"],
1375
+ );
1376
+
1377
+ const evidencePacketThin = makeFixture("onboarding-evidence-packet-thin");
1378
+ writeEvidencePacket(evidencePacketThin, "product/onboarding/graph/ONB-04-competitor-reviews.md", "## Findings\n\nDone.\n");
1379
+ runFixture(
1380
+ "ONB-04's gate rejects a stub evidence packet that lacks a source and classification",
1381
+ evidencePacketThin,
1382
+ evidenceScript,
1383
+ 1,
1384
+ "onboarding_evidence.packet_record_incomplete",
1385
+ ["--node", "ONB-04", "--path", "product/onboarding/graph/ONB-04-competitor-reviews.md"],
1386
+ );
1387
+
1388
+ const evidencePacketConcise = makeFixture("onboarding-evidence-packet-concise");
1389
+ writeEvidencePacket(evidencePacketConcise, "product/onboarding/graph/ONB-04-competitor-reviews.md", conciseStructuredPacket);
1390
+ runFixture("ONB-04's gate passes a concise structured record under the old length proxy", evidencePacketConcise, evidenceScript, 0, undefined, [
1391
+ "--node",
1392
+ "ONB-04",
1393
+ "--path",
1394
+ "product/onboarding/graph/ONB-04-competitor-reviews.md",
1395
+ ]);
1396
+
1397
+ const evidencePacketHtmlCommentOnly = makeFixture("onboarding-evidence-packet-html-comment-only");
1398
+ writeEvidencePacket(
1399
+ evidencePacketHtmlCommentOnly,
1400
+ "product/onboarding/graph/ONB-04-competitor-reviews.md",
1401
+ `<!--\n${substantiveResearchProse("a competitor review that was never actually written, only faked inside this comment")}\n-->\n`,
1402
+ );
1403
+ runFixture(
1404
+ "an evidence packet whose only content is inside an HTML comment still fails as thin",
1405
+ evidencePacketHtmlCommentOnly,
1406
+ evidenceScript,
1407
+ 1,
1408
+ "onboarding_evidence.packet_too_thin",
1409
+ ["--node", "ONB-04", "--path", "product/onboarding/graph/ONB-04-competitor-reviews.md"],
1410
+ );
1411
+
1412
+ const evidencePacketTildeFenceOnly = makeFixture("onboarding-evidence-packet-tilde-fence-only");
1413
+ writeEvidencePacket(
1414
+ evidencePacketTildeFenceOnly,
1415
+ "product/onboarding/graph/ONB-04-competitor-reviews.md",
1416
+ `~~~markdown\n${substantiveResearchProse("a competitor review that was never actually written, only faked inside this tilde fence")}\n~~~\n`,
1417
+ );
1418
+ runFixture(
1419
+ "an evidence packet whose only content is inside a tilde fence still fails as thin",
1420
+ evidencePacketTildeFenceOnly,
1421
+ evidenceScript,
1422
+ 1,
1423
+ "onboarding_evidence.packet_too_thin",
1424
+ ["--node", "ONB-04", "--path", "product/onboarding/graph/ONB-04-competitor-reviews.md"],
1425
+ );
1426
+
1427
+ const evidencePacketUnterminatedFenceOnly = makeFixture("onboarding-evidence-packet-unterminated-fence-only");
1428
+ writeEvidencePacket(
1429
+ evidencePacketUnterminatedFenceOnly,
1430
+ "product/onboarding/graph/ONB-04-competitor-reviews.md",
1431
+ // The opening fence is never closed. CommonMark still renders everything after it as code,
1432
+ // not prose, to the end of the document -- but the old paired-delimiter regex only stripped
1433
+ // a fence when it found a matching close, so with none present here it stripped nothing and
1434
+ // this faked content still cleared the 400-character substantive-length check.
1435
+ `\`\`\`markdown\n${substantiveResearchProse("a competitor review that was never actually written, only faked inside this unterminated fence")}\n`,
1436
+ );
1437
+ runFixture(
1438
+ "an evidence packet whose only content is inside an unterminated fence still fails as thin",
1439
+ evidencePacketUnterminatedFenceOnly,
1440
+ evidenceScript,
1441
+ 1,
1442
+ "onboarding_evidence.packet_too_thin",
1443
+ ["--node", "ONB-04", "--path", "product/onboarding/graph/ONB-04-competitor-reviews.md"],
1444
+ );
1445
+
1446
+ const evidencePacketShortInnerFenceOnly = makeFixture("onboarding-evidence-packet-short-inner-fence-only");
1447
+ writeEvidencePacket(
1448
+ evidencePacketShortInnerFenceOnly,
1449
+ "product/onboarding/graph/ONB-04-competitor-reviews.md",
1450
+ // Four-backtick opener, a three-backtick decoy line, the faked content, then a real
1451
+ // four-backtick closer. CommonMark requires a closer at least as long as the opener, so the
1452
+ // decoy never closes the block -- the faked content stays hidden inside the fence the entire
1453
+ // way to the real closer. A strip that accepted any run of 3+ backticks as a valid closer
1454
+ // would stop at the decoy and let everything after it, including the real closer line, count
1455
+ // as live substantive text.
1456
+ `\`\`\`\`markdown\nA decoy line that looks like a fence close but is too short to be one.\n\`\`\`\n${substantiveResearchProse(
1457
+ "a competitor review that was never actually written, only faked past a too-short inner fence run",
1458
+ )}\n\`\`\`\`\n`,
1459
+ );
1460
+ runFixture(
1461
+ "an evidence packet whose only content sits past a shorter inner fence run still fails as thin",
1462
+ evidencePacketShortInnerFenceOnly,
1463
+ evidenceScript,
1464
+ 1,
1465
+ "onboarding_evidence.packet_too_thin",
1466
+ ["--node", "ONB-04", "--path", "product/onboarding/graph/ONB-04-competitor-reviews.md"],
1467
+ );
1468
+
1469
+ const evidencePacketIndentedContentOnly = makeFixture("onboarding-evidence-packet-indented-content-only");
1470
+ writeEvidencePacket(
1471
+ evidencePacketIndentedContentOnly,
1472
+ "product/onboarding/graph/ONB-04-competitor-reviews.md",
1473
+ // Every line indented 4 spaces at the very start of the document is a CommonMark indented
1474
+ // code block (the document start counts the same as a preceding blank line for the "cannot
1475
+ // interrupt a paragraph" rule) -- a rendered page shows this whole packet as inert code text,
1476
+ // not as a real finding. Without stripping indented code blocks the same way fenced and
1477
+ // commented-out blocks are stripped, a packet that never actually renders as prose still
1478
+ // cleared the substantive-length check.
1479
+ substantiveResearchProse("a competitor review that was never actually written, only indented into a CommonMark code block")
1480
+ .split("\n")
1481
+ .map((line) => (line.length > 0 ? ` ${line}` : line))
1482
+ .join("\n"),
1483
+ );
1484
+ runFixture(
1485
+ "an evidence packet whose only content is indented into a CommonMark code block still fails as thin",
1486
+ evidencePacketIndentedContentOnly,
1487
+ evidenceScript,
1488
+ 1,
1489
+ "onboarding_evidence.packet_too_thin",
1490
+ ["--node", "ONB-04", "--path", "product/onboarding/graph/ONB-04-competitor-reviews.md"],
1491
+ );
1492
+
1493
+ const evidencePacketStyleBlockOnly = makeFixture("onboarding-evidence-packet-style-block-only");
1494
+ writeEvidencePacket(
1495
+ evidencePacketStyleBlockOnly,
1496
+ "product/onboarding/graph/ONB-04-competitor-reviews.md",
1497
+ // A browser never renders <style> content as visible page text, the same non-rendering
1498
+ // reasoning already applied to HTML comments and fences -- but stripNonRenderedMarkdown() had
1499
+ // no notion of raw HTML blocks at all, so this faked content still cleared the 400-character
1500
+ // substantive-length check before this fix.
1501
+ `<style type="text/plain">\n${substantiveResearchProse(
1502
+ "a competitor review that was never actually written, only faked inside this style block",
1503
+ )}\n</style>\n`,
1504
+ );
1505
+ runFixture(
1506
+ "an evidence packet whose only content is inside a style block still fails as thin",
1507
+ evidencePacketStyleBlockOnly,
1508
+ evidenceScript,
1509
+ 1,
1510
+ "onboarding_evidence.packet_too_thin",
1511
+ ["--node", "ONB-04", "--path", "product/onboarding/graph/ONB-04-competitor-reviews.md"],
1512
+ );
1513
+
1514
+ const evidencePacketTabIndentedContentOnly = makeFixture("onboarding-evidence-packet-tab-indented-content-only");
1515
+ writeEvidencePacket(
1516
+ evidencePacketTabIndentedContentOnly,
1517
+ "product/onboarding/graph/ONB-04-competitor-reviews.md",
1518
+ // A single leading tab expands to CommonMark's own 4-column tab stop, the same indentation
1519
+ // threshold as four literal spaces -- a check that only recognized literal space characters
1520
+ // would miss this and let the faked content clear the substantive-length check.
1521
+ substantiveResearchProse("a competitor review that was never actually written, only tab-indented into a CommonMark code block")
1522
+ .split("\n")
1523
+ .map((line) => (line.length > 0 ? `\t${line}` : line))
1524
+ .join("\n"),
1525
+ );
1526
+ runFixture(
1527
+ "an evidence packet whose only content is tab-indented into a CommonMark code block still fails as thin",
1528
+ evidencePacketTabIndentedContentOnly,
1529
+ evidenceScript,
1530
+ 1,
1531
+ "onboarding_evidence.packet_too_thin",
1532
+ ["--node", "ONB-04", "--path", "product/onboarding/graph/ONB-04-competitor-reviews.md"],
1533
+ );
1534
+
1535
+ const evidencePacketTodoInInlineCodeSpan = makeFixture("onboarding-evidence-packet-todo-in-inline-code-span");
1536
+ writeEvidencePacket(
1537
+ evidencePacketTodoInInlineCodeSpan,
1538
+ "product/onboarding/graph/ONB-05-onbo-hub-atlas.md",
1539
+ // The TODO sits inside a mid-sentence triple-backtick code span, not alone on its own line --
1540
+ // a real render shows it in the open, as inline code. A position-blind fence stripper that
1541
+ // matches any run of 3+ backticks, wherever it appears, would erase the span and the word
1542
+ // along with it, letting a packet that visibly still says TODO pass the placeholder scan.
1543
+ `${substantiveResearchProse("the authorized Onbo Hub flow atlas")}\n\nThis draft still shows \`\`\`TODO\`\`\` inline where the real citation belongs.\n`,
1544
+ );
1545
+ runFixture(
1546
+ "ONB-05's gate rejects a TODO marker hidden inside an inline triple-backtick code span",
1547
+ evidencePacketTodoInInlineCodeSpan,
1548
+ evidenceScript,
1549
+ 1,
1550
+ "onboarding_evidence.packet_placeholder",
1551
+ ["--node", "ONB-05", "--path", "product/onboarding/graph/ONB-05-onbo-hub-atlas.md"],
1552
+ );
1553
+
1554
+ const evidencePacketTodoAfterInlineHtmlTagMention = makeFixture("onboarding-evidence-packet-todo-after-inline-html-tag-mention");
1555
+ writeEvidencePacket(
1556
+ evidencePacketTodoAfterInlineHtmlTagMention,
1557
+ "product/onboarding/graph/ONB-05-onbo-hub-atlas.md",
1558
+ // The tag mention sits inside an inline code span mid-sentence, not alone at the start of its
1559
+ // own line -- never a real HTML block opener. A position-blind stripper that matches the tag
1560
+ // name anywhere in the raw text would still read this as an unterminated opener and, finding
1561
+ // no closing tag anywhere after it, erase everything through end of document -- including the
1562
+ // real TODO line below -- letting a packet that visibly still says TODO pass the placeholder
1563
+ // scan.
1564
+ `${substantiveResearchProse(
1565
+ "the authorized Onbo Hub flow atlas",
1566
+ )}\n\nThis draft still mentions \`<style>\` inline as a worked example of a tag name, not a real block.\nTODO: fill in the rest once access is granted.\n`,
1567
+ );
1568
+ runFixture(
1569
+ "ONB-05's gate rejects a TODO marker that follows an inline mid-sentence HTML tag mention",
1570
+ evidencePacketTodoAfterInlineHtmlTagMention,
1571
+ evidenceScript,
1572
+ 1,
1573
+ "onboarding_evidence.packet_placeholder",
1574
+ ["--node", "ONB-05", "--path", "product/onboarding/graph/ONB-05-onbo-hub-atlas.md"],
1575
+ );
1576
+
1577
+ const evidencePacketPlaceholder = makeFixture("onboarding-evidence-packet-placeholder");
1578
+ writeEvidencePacket(
1579
+ evidencePacketPlaceholder,
1580
+ "product/onboarding/graph/ONB-05-onbo-hub-atlas.md",
1581
+ `${substantiveResearchProse("the authorized Onbo Hub flow atlas")}\n\nTODO: fill in the rest once access is granted.\n`,
1582
+ );
1583
+ runFixture(
1584
+ "ONB-05's gate rejects a packet that still carries a TODO/TBD/PLACEHOLDER marker",
1585
+ evidencePacketPlaceholder,
1586
+ evidenceScript,
1587
+ 1,
1588
+ "onboarding_evidence.packet_placeholder",
1589
+ ["--node", "ONB-05", "--path", "product/onboarding/graph/ONB-05-onbo-hub-atlas.md"],
1590
+ );
1591
+
1592
+ const evidencePacketQuotedSourceTbd = makeFixture("onboarding-evidence-packet-quoted-source-tbd");
1593
+ writeEvidencePacket(
1594
+ evidencePacketQuotedSourceTbd,
1595
+ "product/onboarding/graph/ONB-05-onbo-hub-atlas.md",
1596
+ `${conciseStructuredPacket.replace(
1597
+ "Source: App Store review sample 2026-09-01 (n=40).",
1598
+ 'Source: App Store review sample 2026-09-01 quotes "TBD" as the current empty-state label.',
1599
+ )}`,
1600
+ );
1601
+ runFixture(
1602
+ "ONB-05's gate does not treat a quoted TBD inside source evidence as an author placeholder",
1603
+ evidencePacketQuotedSourceTbd,
1604
+ evidenceScript,
1605
+ 0,
1606
+ undefined,
1607
+ ["--node", "ONB-05", "--path", "product/onboarding/graph/ONB-05-onbo-hub-atlas.md"],
1608
+ );
1609
+
1610
+ const evidencePacketApostropheAuthorTodo = makeFixture("onboarding-evidence-packet-apostrophe-author-todo");
1611
+ writeEvidencePacket(
1612
+ evidencePacketApostropheAuthorTodo,
1613
+ "product/onboarding/graph/ONB-05-onbo-hub-atlas.md",
1614
+ `${conciseStructuredPacket}\n\nThe app's TODO is still the author field and we don't know the empty-state copy.\n`,
1615
+ );
1616
+ runFixture(
1617
+ "ONB-05's gate still rejects an author TODO sitting between English apostrophes",
1618
+ evidencePacketApostropheAuthorTodo,
1619
+ evidenceScript,
1620
+ 1,
1621
+ "onboarding_evidence.packet_placeholder",
1622
+ ["--node", "ONB-05", "--path", "product/onboarding/graph/ONB-05-onbo-hub-atlas.md"],
1623
+ );
1624
+
1625
+ const evidencePacketFluentUnsupported = makeFixture("onboarding-evidence-packet-fluent-unsupported");
1626
+ writeEvidencePacket(
1627
+ evidencePacketFluentUnsupported,
1628
+ "product/onboarding/graph/ONB-04-competitor-reviews.md",
1629
+ `${conciseStructuredPacket}
1630
+
1631
+ This long fluent paragraph restates the same unsupported claim with more confidence and more padding. Structural completeness still cannot become semantic acceptance or runtime proof. Independent review and observed behavior stay separate obligations.
1632
+ `,
1633
+ );
1634
+ runFixture(
1635
+ "ONB-04's gate may pass a fluent unsupported claim on shape without granting semantic acceptance",
1636
+ evidencePacketFluentUnsupported,
1637
+ evidenceScript,
1638
+ 0,
1639
+ "semantic=unknown",
1640
+ ["--node", "ONB-04", "--path", "product/onboarding/graph/ONB-04-competitor-reviews.md"],
1641
+ );
1642
+
1643
+ const evidencePacketNoProse = makeFixture("onboarding-evidence-packet-no-prose");
1644
+ writeEvidencePacket(
1645
+ evidencePacketNoProse,
1646
+ "product/onboarding/graph/ONB-06-internal-guidance-audit.md",
1647
+ `## Findings\n\n| Rule | Status |\n| --- | --- |\n${"| internal-guidance-rule | resolved |\n".repeat(20)}`,
1648
+ );
1649
+ runFixture(
1650
+ "ONB-06's gate rejects a packet with a long table but no finding, source, or classification",
1651
+ evidencePacketNoProse,
1652
+ evidenceScript,
1653
+ 1,
1654
+ "onboarding_evidence.packet_record_incomplete",
1655
+ ["--node", "ONB-06", "--path", "product/onboarding/graph/ONB-06-internal-guidance-audit.md"],
1656
+ );
1657
+
1658
+ const evidencePacketMissingPathFlag = makeFixture("onboarding-evidence-packet-missing-path-flag");
1659
+ runFixture(
1660
+ "the evidence-packet gate refuses to run without --path",
1661
+ evidencePacketMissingPathFlag,
1662
+ evidenceScript,
1663
+ 1,
1664
+ "onboarding_evidence.missing_path_flag",
1665
+ ["--node", "ONB-07"],
1666
+ );
1667
+
1668
+ const evidencePacketComplete = makeFixture("onboarding-evidence-packet-complete");
1669
+ writeEvidencePacket(
1670
+ evidencePacketComplete,
1671
+ "product/onboarding/graph/ONB-08-motion-research.md",
1672
+ substantiveResearchProse("60fps motion references translated into the target framework"),
1673
+ );
1674
+ runFixture("ONB-08's gate passes a genuinely substantive, marker-free evidence packet", evidencePacketComplete, evidenceScript, 0, undefined, [
1675
+ "--node",
1676
+ "ONB-08",
1677
+ "--path",
1678
+ "product/onboarding/graph/ONB-08-motion-research.md",
1679
+ ]);
1680
+
1681
+ const onb08PacketArgs = ["--node", "ONB-08", "--path", "product/onboarding/graph/ONB-08-motion-research.md"] as const;
1682
+ const onb08MotionRegister = `${substantiveResearchProse("applicable motion research translated into the target framework")}
1683
+
1684
+ Motion Research uses the 60fps MCP with search_shots and get_motion_breakdown. Reference shot ID shot-fixture-001. Interruption behavior yields to the next gesture. Reduced-motion shows the complete final state without the choreography.
1685
+ `;
1686
+ const onb08NotApplicableProse = `${substantiveResearchProse("applicable motion research translated into the target framework")}
1687
+
1688
+ The 60fps motion register is not applicable for this product.
1689
+ `;
1690
+
1691
+ const onb08PacketStatic = makeFixture("onboarding-evidence-onb08-static-document");
1692
+ writeStudioSurfaces(onb08PacketStatic, [{ id: "privacy", interaction: "static-document" }]);
1693
+ writeEvidencePacket(
1694
+ onb08PacketStatic,
1695
+ "product/onboarding/graph/ONB-08-motion-research.md",
1696
+ substantiveResearchProse("static legal-page motion research with no invented shot IDs"),
1697
+ );
1698
+ runFixture("ONB-08's gate passes a static-document surface without 60fps shot IDs", onb08PacketStatic, evidenceScript, 0, undefined, [...onb08PacketArgs]);
1699
+
1700
+ const onb08PacketSelectedMissing = makeFixture("onboarding-evidence-onb08-selected-missing");
1701
+ writeStudioSurfaces(onb08PacketSelectedMissing, [], [{ id: "hero", interaction: "bespoke-motion" }]);
1702
+ writeSixtyFpsToolRow(onb08PacketSelectedMissing, "connected", "search_shots route");
1703
+ writeEvidencePacket(
1704
+ onb08PacketSelectedMissing,
1705
+ "product/onboarding/graph/ONB-08-motion-research.md",
1706
+ substantiveResearchProse("bespoke motion without recording any reference shot"),
1707
+ );
1708
+ runFixture(
1709
+ "ONB-08's gate fails when selected 60fps research omits shot IDs",
1710
+ onb08PacketSelectedMissing,
1711
+ evidenceScript,
1712
+ 1,
1713
+ "onboarding_evidence.onb08_motion_register",
1714
+ [...onb08PacketArgs],
1715
+ );
1716
+
1717
+ const onb08PacketSelectedComplete = makeFixture("onboarding-evidence-onb08-selected-complete");
1718
+ writeStudioSurfaces(onb08PacketSelectedComplete, [], [{ id: "hero", interaction: "bespoke-motion" }]);
1719
+ writeSixtyFpsToolRow(onb08PacketSelectedComplete, "connected", "search_shots route");
1720
+ writeEvidencePacket(onb08PacketSelectedComplete, "product/onboarding/graph/ONB-08-motion-research.md", onb08MotionRegister);
1721
+ runFixture("ONB-08's gate passes selected 60fps research with shot IDs", onb08PacketSelectedComplete, evidenceScript, 0, undefined, [...onb08PacketArgs]);
1722
+
1723
+ const onb08PacketNotApplicableOverride = makeFixture("onboarding-evidence-onb08-not-applicable-override");
1724
+ writeStudioSurfaces(onb08PacketNotApplicableOverride, [], [{ id: "hero", interaction: "bespoke-motion" }]);
1725
+ writeSixtyFpsToolRow(onb08PacketNotApplicableOverride, "connected", "search_shots route");
1726
+ writeEvidencePacket(onb08PacketNotApplicableOverride, "product/onboarding/graph/ONB-08-motion-research.md", onb08NotApplicableProse);
1727
+ runFixture(
1728
+ "ONB-08's gate fails when packet prose claims selected 60fps research is not applicable",
1729
+ onb08PacketNotApplicableOverride,
1730
+ evidenceScript,
1731
+ 1,
1732
+ "onboarding_evidence.onb08_motion_register",
1733
+ [...onb08PacketArgs],
1734
+ );
1735
+
1736
+ const onb08PacketUnavailable = makeFixture("onboarding-evidence-onb08-unavailable");
1737
+ writeStudioSurfaces(onb08PacketUnavailable, [], [{ id: "hero", interaction: "bespoke-motion" }]);
1738
+ writeSixtyFpsToolRow(onb08PacketUnavailable, "blocked", "fallback distilled recipes");
1739
+ writeEvidencePacket(onb08PacketUnavailable, "product/onboarding/graph/ONB-08-motion-research.md", onb08MotionRegister);
1740
+ runFixture(
1741
+ "ONB-08's gate does not accept shot IDs when the 60fps MCP is blocked",
1742
+ onb08PacketUnavailable,
1743
+ evidenceScript,
1744
+ 1,
1745
+ "onboarding_evidence.onb08_motion_reference_unavailable",
1746
+ [...onb08PacketArgs],
1747
+ );
1748
+
1749
+ const onb08PacketUnresolved = makeFixture("onboarding-evidence-onb08-unresolved");
1750
+ writeStudioSurfaces(onb08PacketUnresolved, [{ id: "privacy" }]);
1751
+ writeEvidencePacket(onb08PacketUnresolved, "product/onboarding/graph/ONB-08-motion-research.md", onb08MotionRegister);
1752
+ runFixture(
1753
+ "ONB-08's gate holds when a listed studio surface omits interaction",
1754
+ onb08PacketUnresolved,
1755
+ evidenceScript,
1756
+ 1,
1757
+ "onboarding_evidence.onb08_surface_interaction_unresolved",
1758
+ [...onb08PacketArgs],
1759
+ );
1760
+
1761
+ const onb08PacketImplemented = makeFixture("onboarding-evidence-onb08-implemented-hooks");
1762
+ writeStudioSurfaces(onb08PacketImplemented, [{ id: "home", interaction: "conversion" }]);
1763
+ writeSixtyFpsToolRow(onb08PacketImplemented, "connected", "search_shots route");
1764
+ mkdirSync(path.join(onb08PacketImplemented, "growth/landing"), { recursive: true });
1765
+ writeFileSync(path.join(onb08PacketImplemented, "growth/landing/index.html"), "<main><h1>Landing</h1></main>\n", "utf8");
1766
+ writeFileSync(
1767
+ path.join(onb08PacketImplemented, "growth/landing/Story.tsx"),
1768
+ 'export function Story() { return <section data-scrolly-step="need">Need</section>; }\n',
1769
+ "utf8",
1770
+ );
1771
+ writeEvidencePacket(
1772
+ onb08PacketImplemented,
1773
+ "product/onboarding/graph/ONB-08-motion-research.md",
1774
+ substantiveResearchProse("conversion landing that already implements scroll-linked hooks without recording shot IDs"),
1775
+ );
1776
+ runFixture(
1777
+ "ONB-08's gate fails when implemented scroll-linked hooks omit the 60fps register",
1778
+ onb08PacketImplemented,
1779
+ evidenceScript,
1780
+ 1,
1781
+ "onboarding_evidence.onb08_motion_register",
1782
+ [...onb08PacketArgs],
1783
+ );
1784
+
1785
+ const onb20PacketMissing = makeFixture("onboarding-evidence-onb20-missing");
1786
+ runFixture(
1787
+ "ONB-20's gate fails when the adversarial-QA packet does not exist yet",
1788
+ onb20PacketMissing,
1789
+ evidenceScript,
1790
+ 1,
1791
+ "onboarding_evidence.packet_missing",
1792
+ ["--node", "ONB-20", "--path", "product/onboarding/graph/ONB-20-adversarial-qa.md"],
1793
+ );
1794
+
1795
+ const onb20PacketComplete = makeFixture("onboarding-evidence-onb20-complete");
1796
+ writeEvidencePacket(
1797
+ onb20PacketComplete,
1798
+ "product/onboarding/graph/ONB-20-adversarial-qa.md",
1799
+ substantiveResearchProse("the synthetic one-star pre-mortem, policy review, instrumentation QA, and accessibility review"),
1800
+ );
1801
+ runFixture("ONB-20's gate passes a genuinely substantive, marker-free adversarial-QA packet", onb20PacketComplete, evidenceScript, 0, undefined, [
1802
+ "--node",
1803
+ "ONB-20",
1804
+ "--path",
1805
+ "product/onboarding/graph/ONB-20-adversarial-qa.md",
1806
+ ]);
1807
+
1808
+ const onb21PacketMissing = makeFixture("onboarding-evidence-onb21-missing");
1809
+ runFixture(
1810
+ "ONB-21's gate fails when the Compound Engineering plan does not exist yet",
1811
+ onb21PacketMissing,
1812
+ evidenceScript,
1813
+ 1,
1814
+ "onboarding_evidence.packet_missing",
1815
+ ["--node", "ONB-21", "--path", "product/onboarding/graph/ONB-21-compound-engineering-plan.md"],
1816
+ );
1817
+
1818
+ const onb21PacketComplete = makeFixture("onboarding-evidence-onb21-complete");
1819
+ writeEvidencePacket(
1820
+ onb21PacketComplete,
1821
+ "product/onboarding/graph/ONB-21-compound-engineering-plan.md",
1822
+ substantiveResearchProse("the implementation-ready Compound Engineering plan translated from the accepted onboarding graph"),
1823
+ );
1824
+ runFixture("ONB-21's gate passes a genuinely substantive, marker-free implementation plan", onb21PacketComplete, evidenceScript, 0, undefined, [
1825
+ "--node",
1826
+ "ONB-21",
1827
+ "--path",
1828
+ "product/onboarding/graph/ONB-21-compound-engineering-plan.md",
1829
+ ]);
1830
+
1831
+ const onb09PacketMissing = makeFixture("onboarding-evidence-onb09-missing");
1832
+ runFixture("ONB-09's gate fails when the evidence join does not exist yet", onb09PacketMissing, evidenceScript, 1, "onboarding_evidence.packet_missing", [
1833
+ "--node",
1834
+ "ONB-09",
1835
+ "--path",
1836
+ "product/onboarding/graph/ONB-09-evidence-join.md",
1837
+ ]);
1838
+
1839
+ const onb09PacketComplete = makeFixture("onboarding-evidence-onb09-complete");
1840
+ writeEvidencePacket(
1841
+ onb09PacketComplete,
1842
+ "product/onboarding/graph/ONB-09-evidence-join.md",
1843
+ substantiveResearchProse("the joined guidance, reviews, flow evidence, internal doctrine, provider facts, policy, and motion research decisions"),
1844
+ );
1845
+ runFixture("ONB-09's gate passes a genuinely substantive, marker-free evidence join", onb09PacketComplete, evidenceScript, 0, undefined, [
1846
+ "--node",
1847
+ "ONB-09",
1848
+ "--path",
1849
+ "product/onboarding/graph/ONB-09-evidence-join.md",
1850
+ ]);
1851
+
1852
+ const onb10PacketMissing = makeFixture("onboarding-evidence-onb10-missing");
1853
+ runFixture(
1854
+ "ONB-10's gate fails when the first-value and activation packet does not exist yet",
1855
+ onb10PacketMissing,
1856
+ evidenceScript,
1857
+ 1,
1858
+ "onboarding_evidence.packet_missing",
1859
+ ["--node", "ONB-10", "--path", "product/onboarding/graph/ONB-10-first-value-activation.md"],
1860
+ );
1861
+
1862
+ const onb10PacketComplete = makeFixture("onboarding-evidence-onb10-complete");
1863
+ writeEvidencePacket(
1864
+ onb10PacketComplete,
1865
+ "product/onboarding/graph/ONB-10-first-value-activation.md",
1866
+ substantiveResearchProse("first value rendered, first value engaged, activation, habit, and retention hypotheses"),
1867
+ );
1868
+ runFixture("ONB-10's gate passes a genuinely substantive, marker-free first-value and activation packet", onb10PacketComplete, evidenceScript, 0, undefined, [
1869
+ "--node",
1870
+ "ONB-10",
1871
+ "--path",
1872
+ "product/onboarding/graph/ONB-10-first-value-activation.md",
1873
+ ]);
1874
+
1875
+ const onb11PacketMissing = makeFixture("onboarding-evidence-onb11-missing");
1876
+ runFixture(
1877
+ "ONB-11's gate fails when the effort and question audit does not exist yet",
1878
+ onb11PacketMissing,
1879
+ evidenceScript,
1880
+ 1,
1881
+ "onboarding_evidence.packet_missing",
1882
+ ["--node", "ONB-11", "--path", "product/onboarding/graph/ONB-11-effort-question-audit.md"],
1883
+ );
1884
+
1885
+ const onb11PacketComplete = makeFixture("onboarding-evidence-onb11-complete");
1886
+ writeEvidencePacket(
1887
+ onb11PacketComplete,
1888
+ "product/onboarding/graph/ONB-11-effort-question-audit.md",
1889
+ substantiveResearchProse("effort before value, question usefulness, permissions, interruption budget, and visible personalization proof"),
1890
+ );
1891
+ runFixture("ONB-11's gate passes a genuinely substantive, marker-free effort and question audit", onb11PacketComplete, evidenceScript, 0, undefined, [
1892
+ "--node",
1893
+ "ONB-11",
1894
+ "--path",
1895
+ "product/onboarding/graph/ONB-11-effort-question-audit.md",
1896
+ ]);
1897
+
1898
+ const onb12PacketMissing = makeFixture("onboarding-evidence-onb12-missing");
1899
+ runFixture(
1900
+ "ONB-12's gate fails when the state and identity contract does not exist yet",
1901
+ onb12PacketMissing,
1902
+ evidenceScript,
1903
+ 1,
1904
+ "onboarding_evidence.packet_missing",
1905
+ ["--node", "ONB-12", "--path", "product/onboarding/graph/ONB-12-state-identity-contract.md"],
1906
+ );
1907
+
1908
+ const onb12PacketComplete = makeFixture("onboarding-evidence-onb12-complete");
1909
+ writeEvidencePacket(
1910
+ onb12PacketComplete,
1911
+ "product/onboarding/graph/ONB-12-state-identity-contract.md",
1912
+ substantiveResearchProse("the canonical journey, profile, identity, entitlement, continuity, and cross-surface state transitions"),
1913
+ );
1914
+ runFixture("ONB-12's gate passes a genuinely substantive, marker-free state and identity contract", onb12PacketComplete, evidenceScript, 0, undefined, [
1915
+ "--node",
1916
+ "ONB-12",
1917
+ "--path",
1918
+ "product/onboarding/graph/ONB-12-state-identity-contract.md",
1919
+ ]);
1920
+
1921
+ const onb13PacketMissing = makeFixture("onboarding-evidence-onb13-missing");
1922
+ runFixture(
1923
+ "ONB-13's gate fails when the analytics and experiments packet does not exist yet",
1924
+ onb13PacketMissing,
1925
+ evidenceScript,
1926
+ 1,
1927
+ "onboarding_evidence.packet_missing",
1928
+ ["--node", "ONB-13", "--path", "product/onboarding/graph/ONB-13-analytics-experiments.md"],
1929
+ );
1930
+
1931
+ const onb13PacketComplete = makeFixture("onboarding-evidence-onb13-complete");
1932
+ writeEvidencePacket(
1933
+ onb13PacketComplete,
1934
+ "product/onboarding/graph/ONB-13-analytics-experiments.md",
1935
+ substantiveResearchProse(
1936
+ "typed analytics, authoritative emitters, identity stitching, deduplication, experiment assignment, exposure, and expected sequences",
1937
+ ),
1938
+ );
1939
+ runFixture("ONB-13's gate passes a genuinely substantive, marker-free analytics and experiments packet", onb13PacketComplete, evidenceScript, 0, undefined, [
1940
+ "--node",
1941
+ "ONB-13",
1942
+ "--path",
1943
+ "product/onboarding/graph/ONB-13-analytics-experiments.md",
1944
+ ]);
1945
+
1946
+ const onb14PacketMissing = makeFixture("onboarding-evidence-onb14-missing");
1947
+ runFixture(
1948
+ "ONB-14's gate fails when the trust, lifecycle, and policy packet does not exist yet",
1949
+ onb14PacketMissing,
1950
+ evidenceScript,
1951
+ 1,
1952
+ "onboarding_evidence.packet_missing",
1953
+ ["--node", "ONB-14", "--path", "product/onboarding/graph/ONB-14-trust-lifecycle-policy.md"],
1954
+ );
1955
+
1956
+ const onb14PacketComplete = makeFixture("onboarding-evidence-onb14-complete");
1957
+ writeEvidencePacket(
1958
+ onb14PacketComplete,
1959
+ "product/onboarding/graph/ONB-14-trust-lifecycle-policy.md",
1960
+ substantiveResearchProse("review timing, permissions, lifecycle, privacy, security, accessibility, and policy behavior"),
1961
+ );
1962
+ runFixture(
1963
+ "ONB-14's gate passes a genuinely substantive, marker-free trust, lifecycle, and policy packet",
1964
+ onb14PacketComplete,
1965
+ evidenceScript,
1966
+ 0,
1967
+ undefined,
1968
+ ["--node", "ONB-14", "--path", "product/onboarding/graph/ONB-14-trust-lifecycle-policy.md"],
1969
+ );
1970
+
1971
+ const onb15PacketMissing = makeFixture("onboarding-evidence-onb15-missing");
1972
+ runFixture(
1973
+ "ONB-15's gate fails when the architecture decision does not exist yet",
1974
+ onb15PacketMissing,
1975
+ evidenceScript,
1976
+ 1,
1977
+ "onboarding_evidence.packet_missing",
1978
+ ["--node", "ONB-15", "--path", "product/onboarding/graph/ONB-15-architecture-decision.md"],
1979
+ );
1980
+
1981
+ const onb15PacketComplete = makeFixture("onboarding-evidence-onb15-complete");
1982
+ writeEvidencePacket(
1983
+ onb15PacketComplete,
1984
+ "product/onboarding/graph/ONB-15-architecture-decision.md",
1985
+ substantiveResearchProse("the native-first, hosted-funnel-first, hybrid, web-first, and evidence-backed architecture comparison and selection"),
1986
+ );
1987
+ runFixture("ONB-15's gate passes a genuinely substantive, marker-free architecture decision", onb15PacketComplete, evidenceScript, 0, undefined, [
1988
+ "--node",
1989
+ "ONB-15",
1990
+ "--path",
1991
+ "product/onboarding/graph/ONB-15-architecture-decision.md",
1992
+ ]);
1993
+
1994
+ const onb16PacketMissing = makeFixture("onboarding-evidence-onb16-missing");
1995
+ runFixture(
1996
+ "ONB-16's gate fails when the canonical journey graph does not exist yet",
1997
+ onb16PacketMissing,
1998
+ evidenceScript,
1999
+ 1,
2000
+ "onboarding_evidence.packet_missing",
2001
+ ["--node", "ONB-16", "--path", "product/onboarding/graph/ONB-16-journey-graph.md"],
2002
+ );
2003
+
2004
+ const onb16PacketComplete = makeFixture("onboarding-evidence-onb16-complete");
2005
+ writeEvidencePacket(
2006
+ onb16PacketComplete,
2007
+ "product/onboarding/graph/ONB-16-journey-graph.md",
2008
+ substantiveResearchProse("the acquisition-specific journeys that converge on one semantic onboarding state graph"),
2009
+ );
2010
+ runFixture("ONB-16's gate passes a genuinely substantive, marker-free canonical journey graph", onb16PacketComplete, evidenceScript, 0, undefined, [
2011
+ "--node",
2012
+ "ONB-16",
2013
+ "--path",
2014
+ "product/onboarding/graph/ONB-16-journey-graph.md",
2015
+ ]);
2016
+
2017
+ const onb17PacketMissing = makeFixture("onboarding-evidence-onb17-missing");
2018
+ runFixture(
2019
+ "ONB-17's gate fails when the screen, control, and paywall contract does not exist yet",
2020
+ onb17PacketMissing,
2021
+ evidenceScript,
2022
+ 1,
2023
+ "onboarding_evidence.packet_missing",
2024
+ ["--node", "ONB-17", "--path", "product/onboarding/graph/ONB-17-screen-control-paywall-contract.md"],
2025
+ );
2026
+
2027
+ const onb17PacketComplete = makeFixture("onboarding-evidence-onb17-complete");
2028
+ requireRevenueCatHeadlineBind(onb17PacketComplete);
2029
+ writeEvidencePacket(
2030
+ onb17PacketComplete,
2031
+ "product/onboarding/graph/ONB-17-screen-control-paywall-contract.md",
2032
+ `${substantiveResearchProse("every onboarding screen, copy key, control, action, paywall state, failure, recovery, accessibility, and localization behavior")}
2033
+
2034
+ Paywall Goal Headline contract: the quiz writes paywall_headline_key. Keep templates in RevenueCat offering metadata and bind customVariables at present time. A skipped goal uses the fallback template.
2035
+ `,
2036
+ );
2037
+ runFixture(
2038
+ "ONB-17's gate passes a genuinely substantive, marker-free screen, control, and paywall contract",
2039
+ onb17PacketComplete,
2040
+ evidenceScript,
2041
+ 0,
2042
+ undefined,
2043
+ ["--node", "ONB-17", "--path", "product/onboarding/graph/ONB-17-screen-control-paywall-contract.md"],
2044
+ );
2045
+
2046
+ const onb17PacketHeadlineMissing = makeFixture("onboarding-evidence-onb17-headline-missing");
2047
+ requireRevenueCatHeadlineBind(onb17PacketHeadlineMissing);
2048
+ writeEvidencePacket(
2049
+ onb17PacketHeadlineMissing,
2050
+ "product/onboarding/graph/ONB-17-screen-control-paywall-contract.md",
2051
+ substantiveResearchProse("every onboarding screen, copy key, control, action, paywall state, failure, recovery, accessibility, and localization behavior"),
2052
+ );
2053
+ runFixture(
2054
+ "ONB-17's gate fails when the screen, control, and paywall contract omits the Paywall Goal Headline bind",
2055
+ onb17PacketHeadlineMissing,
2056
+ evidenceScript,
2057
+ 1,
2058
+ "onboarding_evidence.onb17_paywall_goal_headline",
2059
+ ["--node", "ONB-17", "--path", "product/onboarding/graph/ONB-17-screen-control-paywall-contract.md"],
2060
+ );
2061
+
2062
+ const onb17PacketArgs = ["--node", "ONB-17", "--path", "product/onboarding/graph/ONB-17-screen-control-paywall-contract.md"] as const;
2063
+ const onb17HeadlineContract = `${substantiveResearchProse("every onboarding screen, copy key, control, action, paywall state, failure, recovery, accessibility, and localization behavior")}
2064
+
2065
+ Paywall Goal Headline contract: the quiz writes paywall_headline_key. Keep templates in RevenueCat offering metadata and bind customVariables at present time. A skipped goal uses the fallback template.
2066
+ `;
2067
+ const onb17NotApplicableProse = `${substantiveResearchProse("every onboarding screen, copy key, control, action, paywall state, failure, recovery, accessibility, and localization behavior")}
2068
+
2069
+ The Paywall Goal Headline bind is not applicable for this product.
2070
+ `;
2071
+
2072
+ const onb17PacketHeadlineExcluded = makeFixture("onboarding-evidence-onb17-headline-excluded");
2073
+ mutateProductYaml(onb17PacketHeadlineExcluded, (text) => setFeatureScope(text, "feature.paywall-goal-headline", "excluded"));
2074
+ writeEvidencePacket(
2075
+ onb17PacketHeadlineExcluded,
2076
+ "product/onboarding/graph/ONB-17-screen-control-paywall-contract.md",
2077
+ substantiveResearchProse("every onboarding screen, copy key, control, action, paywall state, failure, recovery, accessibility, and localization behavior"),
2078
+ );
2079
+ runFixture(
2080
+ "ONB-17's gate passes without the headline bind when feature.paywall-goal-headline is excluded",
2081
+ onb17PacketHeadlineExcluded,
2082
+ evidenceScript,
2083
+ 0,
2084
+ undefined,
2085
+ [...onb17PacketArgs],
2086
+ );
2087
+
2088
+ const onb17PacketNotApplicableOverride = makeFixture("onboarding-evidence-onb17-not-applicable-override");
2089
+ requireRevenueCatHeadlineBind(onb17PacketNotApplicableOverride);
2090
+ writeEvidencePacket(onb17PacketNotApplicableOverride, "product/onboarding/graph/ONB-17-screen-control-paywall-contract.md", onb17NotApplicableProse);
2091
+ runFixture(
2092
+ "ONB-17's gate fails when packet prose claims the required headline bind is not applicable",
2093
+ onb17PacketNotApplicableOverride,
2094
+ evidenceScript,
2095
+ 1,
2096
+ "onboarding_evidence.onb17_paywall_goal_headline",
2097
+ [...onb17PacketArgs],
2098
+ );
2099
+
2100
+ const onb17PacketHeadlineUnresolved = makeFixture("onboarding-evidence-onb17-headline-unresolved");
2101
+ mutateProductYaml(onb17PacketHeadlineUnresolved, (text) => removeFeature(text, "feature.paywall-goal-headline"));
2102
+ writeEvidencePacket(onb17PacketHeadlineUnresolved, "product/onboarding/graph/ONB-17-screen-control-paywall-contract.md", onb17HeadlineContract);
2103
+ runFixture(
2104
+ "ONB-17's gate holds when feature.paywall-goal-headline is absent",
2105
+ onb17PacketHeadlineUnresolved,
2106
+ evidenceScript,
2107
+ 1,
2108
+ "onboarding_evidence.onb17_paywall_goal_headline_unresolved",
2109
+ [...onb17PacketArgs],
2110
+ );
2111
+
2112
+ const onb17PacketHeadlineUnresolvedComposition = makeFixture("onboarding-evidence-onb17-headline-unresolved-composition");
2113
+ requireHeadlineFeature(onb17PacketHeadlineUnresolvedComposition);
2114
+ writeEvidencePacket(onb17PacketHeadlineUnresolvedComposition, "product/onboarding/graph/ONB-17-screen-control-paywall-contract.md", onb17HeadlineContract);
2115
+ runFixture(
2116
+ "ONB-17's gate holds when the headline feature is required and present-paywall is unresolved",
2117
+ onb17PacketHeadlineUnresolvedComposition,
2118
+ evidenceScript,
2119
+ 1,
2120
+ "onboarding_evidence.onb17_paywall_goal_headline_unresolved",
2121
+ [...onb17PacketArgs],
2122
+ );
2123
+
2124
+ const onb17PacketHeadlineUnavailable = makeFixture("onboarding-evidence-onb17-headline-unavailable");
2125
+ requireHeadlineFeature(onb17PacketHeadlineUnavailable);
2126
+ writeWorkspaceComposition(onb17PacketHeadlineUnavailable, "b2c/subscription-app", "b2c/superwall");
2127
+ writeEvidencePacket(onb17PacketHeadlineUnavailable, "product/onboarding/graph/ONB-17-screen-control-paywall-contract.md", onb17HeadlineContract);
2128
+ runFixture(
2129
+ "ONB-17's gate does not accept a RevenueCat headline bind for a Superwall presenter",
2130
+ onb17PacketHeadlineUnavailable,
2131
+ evidenceScript,
2132
+ 1,
2133
+ "onboarding_evidence.onb17_paywall_goal_headline_unavailable",
2134
+ [...onb17PacketArgs],
2135
+ );
2136
+
2137
+ const onb17PacketSuperwallExcluded = makeFixture("onboarding-evidence-onb17-superwall-excluded");
2138
+ mutateProductYaml(onb17PacketSuperwallExcluded, (text) => setFeatureScope(text, "feature.paywall-goal-headline", "excluded"));
2139
+ writeWorkspaceComposition(onb17PacketSuperwallExcluded, "b2c/subscription-app", "b2c/superwall");
2140
+ writeEvidencePacket(onb17PacketSuperwallExcluded, "product/onboarding/graph/ONB-17-screen-control-paywall-contract.md", onb17NotApplicableProse);
2141
+ runFixture("ONB-17's gate passes Superwall presentation when the headline feature is excluded", onb17PacketSuperwallExcluded, evidenceScript, 0, undefined, [
2142
+ ...onb17PacketArgs,
2143
+ ]);
2144
+
2145
+ const onb17PacketRevenueCatPurchaseExcluded = makeFixture("onboarding-evidence-onb17-revenuecat-purchase-excluded");
2146
+ mutateProductYaml(onb17PacketRevenueCatPurchaseExcluded, (text) => setFeatureScope(text, "feature.paywall-goal-headline", "excluded"));
2147
+ writeWorkspaceComposition(onb17PacketRevenueCatPurchaseExcluded, "b2c/subscription-app", "b2c/revenuecat");
2148
+ writeEvidencePacket(
2149
+ onb17PacketRevenueCatPurchaseExcluded,
2150
+ "product/onboarding/graph/ONB-17-screen-control-paywall-contract.md",
2151
+ substantiveResearchProse("every onboarding screen, copy key, control, action, paywall state, failure, recovery, accessibility, and localization behavior"),
2152
+ );
2153
+ runFixture(
2154
+ "ONB-17's gate passes a RevenueCat purchase owner when the headline feature is excluded",
2155
+ onb17PacketRevenueCatPurchaseExcluded,
2156
+ evidenceScript,
2157
+ 0,
2158
+ undefined,
2159
+ [...onb17PacketArgs],
2160
+ );
2161
+
2162
+ const onb17PacketCompleteConsumerUnavailable = makeFixture("onboarding-evidence-onb17-complete-consumer-unavailable");
2163
+ requireHeadlineFeature(onb17PacketCompleteConsumerUnavailable);
2164
+ writeWorkspaceComposition(onb17PacketCompleteConsumerUnavailable, "b2c/complete-consumer-business");
2165
+ writeEvidencePacket(onb17PacketCompleteConsumerUnavailable, "product/onboarding/graph/ONB-17-screen-control-paywall-contract.md", onb17HeadlineContract);
2166
+ runFixture(
2167
+ "ONB-17's gate treats a required headline as unavailable when the recipe has no present-paywall operation",
2168
+ onb17PacketCompleteConsumerUnavailable,
2169
+ evidenceScript,
2170
+ 1,
2171
+ "onboarding_evidence.onb17_paywall_goal_headline_unavailable",
2172
+ [...onb17PacketArgs],
2173
+ );
2174
+
2175
+ const onb18PacketMissing = makeFixture("onboarding-evidence-onb18-missing");
2176
+ runFixture(
2177
+ "ONB-18's gate fails when the visual design and prototype packet does not exist yet",
2178
+ onb18PacketMissing,
2179
+ evidenceScript,
2180
+ 1,
2181
+ "onboarding_evidence.packet_missing",
2182
+ ["--node", "ONB-18", "--path", "product/onboarding/graph/ONB-18-visual-design-prototype.md"],
2183
+ );
2184
+
2185
+ const onb18PacketComplete = makeFixture("onboarding-evidence-onb18-complete");
2186
+ writeEvidencePacket(
2187
+ onb18PacketComplete,
2188
+ "product/onboarding/graph/ONB-18-visual-design-prototype.md",
2189
+ substantiveResearchProse("the high-fidelity onboarding design, motion, interactive prototype, and design QA"),
2190
+ );
2191
+ runFixture(
2192
+ "ONB-18's gate passes a genuinely substantive, marker-free visual design and prototype packet",
2193
+ onb18PacketComplete,
2194
+ evidenceScript,
2195
+ 0,
2196
+ undefined,
2197
+ ["--node", "ONB-18", "--path", "product/onboarding/graph/ONB-18-visual-design-prototype.md"],
2198
+ );
2199
+
2200
+ const onb19PacketMissing = makeFixture("onboarding-evidence-onb19-missing");
2201
+ runFixture(
2202
+ "ONB-19's gate fails when the implementation and cutover contract does not exist yet",
2203
+ onb19PacketMissing,
2204
+ evidenceScript,
2205
+ 1,
2206
+ "onboarding_evidence.packet_missing",
2207
+ ["--node", "ONB-19", "--path", "product/onboarding/graph/ONB-19-implementation-cutover-contract.md"],
2208
+ );
2209
+
2210
+ const onb19PacketComplete = makeFixture("onboarding-evidence-onb19-complete");
2211
+ writeEvidencePacket(
2212
+ onb19PacketComplete,
2213
+ "product/onboarding/graph/ONB-19-implementation-cutover-contract.md",
2214
+ substantiveResearchProse("the implementation units, reliability, performance, observability, privacy, migration, hard cutover, and deletion plan"),
2215
+ );
2216
+ runFixture(
2217
+ "ONB-19's gate passes a genuinely substantive, marker-free implementation and cutover contract",
2218
+ onb19PacketComplete,
2219
+ evidenceScript,
2220
+ 0,
2221
+ undefined,
2222
+ ["--node", "ONB-19", "--path", "product/onboarding/graph/ONB-19-implementation-cutover-contract.md"],
2223
+ );
2224
+
2225
+ // --- check-onboarding-cutover-repository.ts ---
2226
+ // check-onboarding-graph.ts (and its --require-done variant) only ever read
2227
+ // product/ONBOARDING.md's own prose. A Removal Inventory row can claim Disposition
2228
+ // "delete" for an artifact that was never actually removed and both gates above stay
2229
+ // silent -- this is the independent, filesystem-grounded check that closes that gap.
2230
+ const cutoverScript = "check-onboarding-cutover-repository.ts";
2231
+
2232
+ const cutoverBaseline = makeFixture("onboarding-cutover-baseline");
2233
+ runFixture("shipped Removal Inventory template passes base mode: its unresolved option-list row is not a deletion claim", cutoverBaseline, cutoverScript, 0);
2234
+
2235
+ const cutoverUnverifiable = makeFixture("onboarding-cutover-deletion-unverifiable");
2236
+ mutateOnboarding(cutoverUnverifiable, (text) =>
2237
+ replaceTableRow(
2238
+ text,
2239
+ "| `REMOVE-001` | Record the item | Preserve durable data, transform once, recompute, archive legal history, or delete |",
2240
+ "| REMOVE-001 | Record the item | delete |",
2241
+ ),
2242
+ );
2243
+ runFixture(
2244
+ "a delete-disposition row naming no backtick-quoted artifact is unverifiable",
2245
+ cutoverUnverifiable,
2246
+ cutoverScript,
2247
+ 1,
2248
+ "onboarding_cutover.deletion_unverifiable",
2249
+ );
2250
+
2251
+ const cutoverNotVerified = makeFixture("onboarding-cutover-deletion-not-verified");
2252
+ mutateOnboarding(cutoverNotVerified, (text) =>
2253
+ replaceTableRow(
2254
+ text,
2255
+ "| `REMOVE-001` | Record the item | Preserve durable data, transform once, recompute, archive legal history, or delete |",
2256
+ "| `state/business-state.json` | Record the item | delete |",
2257
+ ),
2258
+ );
2259
+ runFixture(
2260
+ "a delete-disposition row naming a path that still exists on disk fails",
2261
+ cutoverNotVerified,
2262
+ cutoverScript,
2263
+ 1,
2264
+ "onboarding_cutover.deletion_not_verified",
2265
+ );
2266
+
2267
+ const cutoverVerified = makeFixture("onboarding-cutover-deletion-verified");
2268
+ mutateOnboarding(cutoverVerified, (text) =>
2269
+ replaceTableRow(
2270
+ text,
2271
+ "| `REMOVE-001` | Record the item | Preserve durable data, transform once, recompute, archive legal history, or delete |",
2272
+ "| `retired/old-onboarding-flow.ts` | Record the item | delete |",
2273
+ ),
2274
+ );
2275
+ runFixture("a delete-disposition row naming a path genuinely absent from disk passes", cutoverVerified, cutoverScript, 0);
2276
+
2277
+ // Round 24 (PR #153 review): the shipped template row's Disposition cell is the unresolved
2278
+ // option list. A bare \bdelete\b substring test read that option list as a live deletion
2279
+ // decision, and its placeholder span (`REMOVE-001`, absent from disk by construction) then
2280
+ // counted as a verified deletion -- ONB-22 could pass without a concrete cutover inventory.
2281
+ // Base mode: an unresolved cell is NOT a deletion claim. --require-resolved (the ONB-22 gate
2282
+ // variant, check:onboarding-cutover-repository-complete): every row must resolve to exactly
2283
+ // one terminal disposition, so the shipped row itself is rejected until it is resolved.
2284
+ const cutoverUnresolvedRequire = makeFixture("onboarding-cutover-unresolved-require-resolved");
2285
+ runFixture(
2286
+ "the shipped option-list Disposition row fails --require-resolved until it records exactly one terminal disposition",
2287
+ cutoverUnresolvedRequire,
2288
+ cutoverScript,
2289
+ 1,
2290
+ "onboarding_cutover.disposition_unresolved",
2291
+ ["--require-resolved"],
2292
+ );
2293
+
2294
+ const cutoverResolvedRequire = makeFixture("onboarding-cutover-resolved-require-resolved");
2295
+ mutateOnboarding(cutoverResolvedRequire, (text) =>
2296
+ replaceTableRow(
2297
+ text,
2298
+ "| `REMOVE-001` | Record the item | Preserve durable data, transform once, recompute, archive legal history, or delete |",
2299
+ "| `retired/old-onboarding-flow.ts` | Record the item | delete |",
2300
+ ),
2301
+ );
2302
+ runFixture("a resolved delete row naming a genuinely absent path passes --require-resolved", cutoverResolvedRequire, cutoverScript, 0, undefined, [
2303
+ "--require-resolved",
2304
+ ]);
2305
+
2306
+ const cutoverOptionListNotAClaim = makeFixture("onboarding-cutover-option-list-not-a-claim");
2307
+ mutateOnboarding(cutoverOptionListNotAClaim, (text) => replaceTableRow(text, "| `REMOVE-001` | Record the item |", "| `state` | Record the item |"));
2308
+ runFixture(
2309
+ "an unresolved option-list row is not a deletion claim in base mode, even when its span names a path that still exists",
2310
+ cutoverOptionListNotAClaim,
2311
+ cutoverScript,
2312
+ 0,
2313
+ );
2314
+
2315
+ // Regression: a punctuation heuristic ("must contain / or .") used to skip verifying any
2316
+ // extensionless span entirely, so a bare directory name naming a real, still-existing target
2317
+ // silently passed. `state` is a directory the fixture root always ships (copied from
2318
+ // examples/workspace/business), so this is a genuine on-disk collision, not a synthetic one.
2319
+ const cutoverExtensionlessNotVerified = makeFixture("onboarding-cutover-deletion-extensionless-not-verified");
2320
+ mutateOnboarding(cutoverExtensionlessNotVerified, (text) =>
2321
+ replaceTableRow(
2322
+ text,
2323
+ "| `REMOVE-001` | Record the item | Preserve durable data, transform once, recompute, archive legal history, or delete |",
2324
+ "| `state` | Record the item | delete |",
2325
+ ),
2326
+ );
2327
+ runFixture(
2328
+ "a delete-disposition row naming an extensionless path that still exists on disk fails",
2329
+ cutoverExtensionlessNotVerified,
2330
+ cutoverScript,
2331
+ 1,
2332
+ "onboarding_cutover.deletion_not_verified",
2333
+ );
2334
+
2335
+ // Regression (round 23): deletionManifestRows() used to return an empty array whenever the
2336
+ // "### Removal Inventory" heading itself was missing, and the caller's for-of loop over an
2337
+ // empty array reports zero issues -- indistinguishable from "nothing to verify". Renaming the
2338
+ // heading while leaving the phrase "Removal Inventory" elsewhere satisfies check-onboarding-
2339
+ // graph.ts's unrelated phrase-presence checks, so ONB-22 could pass both completion gates
2340
+ // without ever checking a single repository target.
2341
+ const cutoverManifestMissing = makeFixture("onboarding-cutover-manifest-missing");
2342
+ mutateOnboarding(cutoverManifestMissing, (text) =>
2343
+ text.replace("### Removal Inventory", "### Unstructured Removal Notes (see the Removal Inventory process elsewhere)"),
2344
+ );
2345
+ runFixture(
2346
+ "an artifact with no parseable Removal Inventory heading fails instead of silently passing",
2347
+ cutoverManifestMissing,
2348
+ cutoverScript,
2349
+ 1,
2350
+ "onboarding_cutover.deletion_manifest_missing",
2351
+ );
2352
+
2353
+ // Same silent-pass gap, reached by renaming the table's Disposition column instead of removing
2354
+ // the heading: the heading and table both still exist, but header.indexOf("disposition") ===
2355
+ // -1 also used to return an empty array.
2356
+ const cutoverManifestDispositionRenamed = makeFixture("onboarding-cutover-manifest-disposition-renamed");
2357
+ mutateOnboarding(cutoverManifestDispositionRenamed, (text) =>
2358
+ replaceTableRow(
2359
+ text,
2360
+ "| Removal ID | Code, data, config, provider, analytics, test, doc, dashboard, alert, or secret | Disposition | Delete task | Verification |",
2361
+ "| Removal ID | Code, data, config, provider, analytics, test, doc, dashboard, alert, or secret | Action | Delete task | Verification |",
2362
+ ),
2363
+ );
2364
+ runFixture(
2365
+ "a Removal Inventory table with its Disposition column renamed fails instead of silently passing",
2366
+ cutoverManifestDispositionRenamed,
2367
+ cutoverScript,
2368
+ 1,
2369
+ "onboarding_cutover.deletion_manifest_unparseable",
2370
+ );
2371
+
2372
+ function checkVerificationItems(text: string): string {
2373
+ return text.replace(/^-\s*\[\s*\]/gm, "- [x]");
2374
+ }
2375
+
2376
+ function markOnboardingDone(fixtureRoot: string): void {
2377
+ const state = readState(fixtureRoot);
2378
+ const lane = getLane(state, "onboarding");
2379
+ lane["status"] = "succeeded";
2380
+ lane["evidence"] = ["product/ONBOARDING.md", "product/onboarding.html"];
2381
+ writeState(fixtureRoot, state);
2382
+ }
2383
+
2384
+ // check-onboarding-graph.ts's tablePlaceholderCells() now also rejects boilerplate that
2385
+ // repeats with only an embedded counter varying (e.g. "Evidence-1: ...", "Evidence-2: ..."),
2386
+ // since that is exactly the shape of filler that is technically unique but carries no real
2387
+ // content. This filler derives each cell's text from its own table's column header and its
2388
+ // row's own identifying content instead of a counter, so distinct rows and columns produce
2389
+ // genuinely distinct text -- the same way a real completed launch's answers would differ
2390
+ // because they are about different things, not because of an incrementing label.
2391
+ function fillTemplateDirectiveCells(text: string): string {
2392
+ const lines = text.split("\n");
2393
+ let header: string[] | null = null;
2394
+ let pendingHeader: string[] | null = null;
2395
+
2396
+ return lines
2397
+ .map((line) => {
2398
+ const trimmed = line.trim();
2399
+ if (!trimmed.startsWith("|")) {
2400
+ header = null;
2401
+ pendingHeader = null;
2402
+ return line;
2403
+ }
2404
+ if (/^\|?\s*:?-{3,}:?\s*(\|\s*:?-{3,}:?\s*)*\|?$/.test(trimmed)) {
2405
+ header = pendingHeader;
2406
+ pendingHeader = null;
2407
+ return line;
2408
+ }
2409
+ if (header === null) {
2410
+ pendingHeader = line.split("|").map((cell) => cell.trim());
2411
+ return line;
2412
+ }
2413
+ const rawCells = line.split("|");
2414
+ const trimmedCells = rawCells.map((cell) => cell.trim().replaceAll("`", ""));
2415
+ const rowIdentity = trimmedCells.slice(1, -1).find((cell) => cell.length > 0 && !TEMPLATE_DIRECTIVE_VERBS_PATTERN.test(cell)) || "this row";
2416
+ const resolvedHeader = header;
2417
+ return rawCells
2418
+ .map((cell, index) => {
2419
+ if (!TEMPLATE_DIRECTIVE_VERBS_PATTERN.test(cell)) return cell;
2420
+ const columnName = (resolvedHeader?.[index] || "field").toLowerCase();
2421
+ return ` Confirmed ${columnName} for ${rowIdentity} `;
2422
+ })
2423
+ .join("|");
2424
+ })
2425
+ .join("\n");
2426
+ }
2427
+
2428
+ // Mirrors check-onboarding-graph.ts's own proseDirectiveLines(): fills paragraph-level
2429
+ // directive lines (Execution Mode, Source Map And Current-State Trace, ...) the table-cell
2430
+ // filler above never touches. Several of these same sentences are also where requirePhrases()
2431
+ // finds its required doctrine phrases (e.g. line 105's "Define First value rendered, First
2432
+ // value engaged, Activation, ..." carries three of onboarding_graph.activation_contract's
2433
+ // required phrases) -- replacing the whole line would make those checks fail too. Swap only
2434
+ // the leading verb for a word outside TEMPLATE_DIRECTIVE_VERBS_PATTERN, keeping the rest of
2435
+ // the sentence (and its required phrases) verbatim.
2436
+ function fillProseDirectiveLines(text: string): string {
2437
+ return text
2438
+ .split("\n")
2439
+ .map((line) => {
2440
+ const trimmed = line.trim();
2441
+ if (trimmed.length === 0 || trimmed.startsWith("|") || trimmed.startsWith("#") || trimmed.startsWith("-")) return line;
2442
+ if (!TEMPLATE_DIRECTIVE_VERBS_PATTERN.test(line)) return line;
2443
+ return line.replace(/^(\s*)[A-Za-z]+/, "$1Confirmed");
2444
+ })
2445
+ .join("\n");
2446
+ }
2447
+ }