@enterpriseai/cli 3.19.0 → 3.19.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (364) hide show
  1. package/package.json +3 -3
  2. package/resources/deploy/eai-app-template/producer-pin.json +5 -5
  3. package/resources/deploy/eai-app-template/tests/source-unknown-deployment-evidence.test.mjs +2141 -1
  4. package/resources/gofer/.gofer-version +4 -357
  5. package/resources/gofer/agents-skills/eai/SKILL.md +365 -0
  6. package/resources/gofer/agents-skills/eai-update/SKILL.md +56 -0
  7. package/resources/gofer/agents-skills/gofer-documentation/SKILL.md +93 -0
  8. package/resources/gofer/bash-scripts/create-new-feature.sh +3 -1
  9. package/resources/gofer/bash-scripts/sync-implementation-status.sh +4 -3
  10. package/resources/gofer/bash-scripts/update-agent-context.sh +7 -8
  11. package/resources/gofer/bash-scripts/validate-artifact.sh +10 -6
  12. package/resources/gofer/bash-scripts/verify-object-type-routing-workspace.sh +184 -0
  13. package/resources/gofer/claude-commands/eai-update.md +46 -0
  14. package/resources/gofer/claude-commands/eai.md +355 -0
  15. package/resources/gofer/claude-skills/eai/SKILL.md +365 -0
  16. package/resources/gofer/claude-skills/eai-update/SKILL.md +56 -0
  17. package/resources/gofer/claude-skills/gofer-documentation/SKILL.md +93 -0
  18. package/resources/gofer/commands/0_gofer_start.md +440 -99
  19. package/resources/gofer/commands/0a_problem_validation.md +187 -27
  20. package/resources/gofer/commands/10_gofer_cloud.md +183 -23
  21. package/resources/gofer/commands/1_gofer_research.md +239 -30
  22. package/resources/gofer/commands/2_gofer_specify.md +239 -35
  23. package/resources/gofer/commands/3_gofer_plan.md +259 -43
  24. package/resources/gofer/commands/4_gofer_tasks.md +401 -81
  25. package/resources/gofer/commands/5_gofer_implement.md +375 -84
  26. package/resources/gofer/commands/6_gofer_validate.md +284 -53
  27. package/resources/gofer/commands/7_gofer_save.md +187 -26
  28. package/resources/gofer/commands/7a_stakeholder_comms.md +183 -23
  29. package/resources/gofer/commands/8_gofer_branding.md +183 -23
  30. package/resources/gofer/commands/9_gofer_tests.md +212 -23
  31. package/resources/gofer/commands/gofer_bootstrap_workspace.md +121 -8
  32. package/resources/gofer/commands/gofer_check_workspace.md +123 -8
  33. package/resources/gofer/commands/gofer_constitution.md +183 -23
  34. package/resources/gofer/commands/gofer_diagnose.md +183 -23
  35. package/resources/gofer/commands/gofer_eai_first_run.md +254 -25
  36. package/resources/gofer/commands/gofer_hydrate.md +183 -23
  37. package/resources/gofer/commands/gofer_personality.md +117 -6
  38. package/resources/gofer/commands/gofer_plan.md +117 -6
  39. package/resources/gofer/commands/gofer_side.md +117 -6
  40. package/resources/gofer/commands/gofer_spec_summary.md +183 -23
  41. package/resources/gofer/commands/gofer_tdd.md +183 -23
  42. package/resources/gofer/commands/gofer_vocabulary.md +185 -25
  43. package/resources/gofer/commands/gofer_zoom_out.md +183 -23
  44. package/resources/gofer/config/typesafe-learning-review.json +16 -0
  45. package/resources/gofer/config/typesafe-semantic-review.json +9 -0
  46. package/resources/gofer/copilot-instructions/gofer-cost.instructions.md +15 -6
  47. package/resources/gofer/copilot-instructions/typescript.instructions.md +1 -1
  48. package/resources/gofer/copilot-prompts/eai-update.prompt.md +58 -0
  49. package/resources/gofer/copilot-prompts/eai.prompt.md +367 -0
  50. package/resources/gofer/gemini/commands/gofer/eai-update.md +22 -0
  51. package/resources/gofer/gemini/commands/gofer/eai-update.toml +2 -0
  52. package/resources/gofer/gemini/commands/gofer/eai.md +357 -0
  53. package/resources/gofer/gemini/commands/gofer/eai.toml +2 -0
  54. package/resources/gofer/gemini/commands/gofer/manifest.json +3 -27
  55. package/resources/gofer/gemini/extension.json +4 -4
  56. package/resources/gofer/github-agents/eai.agent.md +83 -0
  57. package/resources/gofer/github-agents/gofer-business.agent.md +73 -4
  58. package/resources/gofer/github-agents/gofer-implement.agent.md +71 -2
  59. package/resources/gofer/github-agents/gofer-plan.agent.md +72 -2
  60. package/resources/gofer/github-agents/gofer-research.agent.md +72 -2
  61. package/resources/gofer/github-agents/gofer-validate.agent.md +72 -2
  62. package/resources/gofer/github-skills/eai/SKILL.md +365 -0
  63. package/resources/gofer/github-skills/eai-update/SKILL.md +56 -0
  64. package/resources/gofer/github-skills/gofer-documentation/SKILL.md +93 -0
  65. package/resources/gofer/grok-skills/eai/SKILL.md +267 -14
  66. package/resources/gofer/grok-skills/eai-update/SKILL.md +56 -0
  67. package/resources/gofer/hook-scripts/user-prompt-submit.mjs +58 -13
  68. package/resources/gofer/instruction-templates/base/agents-base.md +8 -4
  69. package/resources/gofer/instruction-templates/gofer/gofer-claude.md +7 -5
  70. package/resources/gofer/instruction-templates/gofer/gofer-copilot.md +10 -8
  71. package/resources/gofer/memory/constitution.md +9 -7
  72. package/resources/gofer/memory/gofer-model-policy.yaml +23 -1
  73. package/resources/gofer/memory/lessons.md +0 -31
  74. package/resources/gofer/node-scripts/canonical-descriptions.mjs +1 -1
  75. package/resources/gofer/node-scripts/check-version-alignment.mjs +4 -7
  76. package/resources/gofer/node-scripts/delivery-lineage-corpus.mjs +156 -0
  77. package/resources/gofer/node-scripts/generate-commands.mjs +1073 -265
  78. package/resources/gofer/node-scripts/gofer-acceptance-check.mjs +143 -0
  79. package/resources/gofer/node-scripts/gofer-agent-catalog.mjs +271 -0
  80. package/resources/gofer/node-scripts/gofer-benchmark-executor.mjs +123 -0
  81. package/resources/gofer/node-scripts/gofer-benchmark-sign.mjs +62 -0
  82. package/resources/gofer/node-scripts/gofer-benchmark-signer.mjs +89 -0
  83. package/resources/gofer/node-scripts/gofer-benchmark.mjs +76 -0
  84. package/resources/gofer/node-scripts/gofer-blocker-control.mjs +274 -0
  85. package/resources/gofer/node-scripts/gofer-claude-adapter.mjs +154 -0
  86. package/resources/gofer/node-scripts/gofer-closed-loop-audit.mjs +19 -2
  87. package/resources/gofer/node-scripts/gofer-delivery-check.mjs +121 -0
  88. package/resources/gofer/node-scripts/gofer-encrypted-key.mjs +58 -0
  89. package/resources/gofer/node-scripts/gofer-execution-metrics.mjs +477 -0
  90. package/resources/gofer/node-scripts/gofer-execution-recovery.mjs +334 -0
  91. package/resources/gofer/node-scripts/gofer-grok-adapter.mjs +184 -0
  92. package/resources/gofer/node-scripts/gofer-heldout-corpus.mjs +73 -0
  93. package/resources/gofer/node-scripts/gofer-heldout-snapshot.mjs +286 -0
  94. package/resources/gofer/node-scripts/gofer-heldout-verifier.mjs +211 -0
  95. package/resources/gofer/node-scripts/gofer-host-capability.mjs +335 -0
  96. package/resources/gofer/node-scripts/gofer-independent-reviewer.mjs +130 -0
  97. package/resources/gofer/node-scripts/gofer-live-routing.mjs +109 -0
  98. package/resources/gofer/node-scripts/gofer-local-capability-issuer.mjs +71 -0
  99. package/resources/gofer/node-scripts/gofer-local-isolation.mjs +175 -0
  100. package/resources/gofer/node-scripts/gofer-local-settings-cleanup.mjs +388 -0
  101. package/resources/gofer/node-scripts/gofer-loop-audit.mjs +54 -3
  102. package/resources/gofer/node-scripts/gofer-native-adapter.mjs +567 -0
  103. package/resources/gofer/node-scripts/gofer-native-benchmark-dispatch.mjs +145 -0
  104. package/resources/gofer/node-scripts/gofer-native-runtime.mjs +169 -0
  105. package/resources/gofer/node-scripts/gofer-pre-edit-check.mjs +204 -0
  106. package/resources/gofer/node-scripts/gofer-priority-check.mjs +214 -0
  107. package/resources/gofer/node-scripts/gofer-response-check.mjs +56 -0
  108. package/resources/gofer/node-scripts/gofer-reviewed-learning.mjs +1232 -0
  109. package/resources/gofer/node-scripts/gofer-run-verified-task.mjs +330 -0
  110. package/resources/gofer/node-scripts/gofer-runtime-ledger.mjs +289 -0
  111. package/resources/gofer/node-scripts/gofer-semantic-drift.mjs +584 -0
  112. package/resources/gofer/node-scripts/gofer-surface-update.mjs +1178 -0
  113. package/resources/gofer/node-scripts/gofer-trust-bootstrap.mjs +77 -0
  114. package/resources/gofer/node-scripts/gofer-trusted-benchmark.mjs +102 -0
  115. package/resources/gofer/node-scripts/gofer-trusted-evaluator.mjs +274 -0
  116. package/resources/gofer/node-scripts/gofer-tty-prompt.mjs +34 -0
  117. package/resources/gofer/node-scripts/gofer-typesafe-credentials.mjs +435 -0
  118. package/resources/gofer/node-scripts/gofer-ui-preview.mjs +1212 -0
  119. package/resources/gofer/node-scripts/gofer-verified-execution.mjs +484 -0
  120. package/resources/gofer/node-scripts/gofer-verifier-key-ceremony.mjs +101 -0
  121. package/resources/gofer/node-scripts/gofer-worktree-layout.mjs +32 -0
  122. package/resources/gofer/node-scripts/object-type-routing-phase-bundle.mjs +360 -0
  123. package/resources/gofer/node-scripts/package-agent-plugin.mjs +574 -82
  124. package/resources/gofer/node-scripts/parse-stage-command.mjs +1 -1
  125. package/resources/gofer/node-scripts/render-delivery-lineage.mjs +178 -0
  126. package/resources/gofer/node-scripts/sync-extension-resources.mjs +78 -2
  127. package/resources/gofer/node-scripts/validate-object-type-identifiers.mjs +767 -0
  128. package/resources/gofer/node-scripts/validate-object-type-routing-workspace.mjs +1325 -0
  129. package/resources/gofer/node-scripts/validate-v4-resource-contract.d.mts +44 -0
  130. package/resources/gofer/node-scripts/validate-v4-resource-contract.mjs +957 -0
  131. package/resources/gofer/node-scripts/workspace-bootstrap-lib.mjs +685 -116
  132. package/resources/gofer/references/agent-catalog.json +126 -0
  133. package/resources/gofer/references/blocker-mediation.md +156 -0
  134. package/resources/gofer/references/business-updates-and-goal-checks.md +109 -0
  135. package/resources/gofer/references/delivery-lineage.md +48 -0
  136. package/resources/gofer/references/mvp-capability-validation.md +102 -0
  137. package/resources/gofer/references/platform/README.md +1 -1
  138. package/resources/gofer/references/platform/eai-app-template.md +15 -13
  139. package/resources/gofer/references/platform/eai-auth-access.md +104 -0
  140. package/resources/gofer/references/platform/eai-config-driven-ui.md +5 -5
  141. package/resources/gofer/references/platform/eai-error-catalog.yaml +77 -19
  142. package/resources/gofer/references/platform/eai-repo-contract.md +61 -23
  143. package/resources/gofer/references/platform/eai-service-patterns.md +102 -105
  144. package/resources/gofer/references/platform/eai.md +44 -8
  145. package/resources/gofer/references/platform/vertical-template.md +10 -9
  146. package/resources/gofer/references/priority-outcome-protection.md +152 -0
  147. package/resources/gofer/references/verified-agent-execution.md +179 -0
  148. package/resources/gofer/schemas/gofer-learning-trace-v1.json +70 -0
  149. package/resources/gofer/specify-commands/0_gofer_start.md +440 -99
  150. package/resources/gofer/specify-commands/0a_problem_validation.md +187 -27
  151. package/resources/gofer/specify-commands/10_gofer_cloud.md +183 -23
  152. package/resources/gofer/specify-commands/1_gofer_research.md +239 -30
  153. package/resources/gofer/specify-commands/2_gofer_specify.md +239 -35
  154. package/resources/gofer/specify-commands/3_gofer_plan.md +259 -43
  155. package/resources/gofer/specify-commands/4_gofer_tasks.md +401 -81
  156. package/resources/gofer/specify-commands/5_gofer_implement.md +375 -84
  157. package/resources/gofer/specify-commands/6_gofer_validate.md +284 -53
  158. package/resources/gofer/specify-commands/7_gofer_save.md +187 -26
  159. package/resources/gofer/specify-commands/7a_stakeholder_comms.md +183 -23
  160. package/resources/gofer/specify-commands/8_gofer_branding.md +183 -23
  161. package/resources/gofer/specify-commands/9_gofer_tests.md +212 -23
  162. package/resources/gofer/specify-commands/gofer_bootstrap_workspace.md +121 -8
  163. package/resources/gofer/specify-commands/gofer_check_workspace.md +123 -8
  164. package/resources/gofer/specify-commands/gofer_constitution.md +183 -23
  165. package/resources/gofer/specify-commands/gofer_diagnose.md +183 -23
  166. package/resources/gofer/specify-commands/gofer_eai_first_run.md +254 -25
  167. package/resources/gofer/specify-commands/gofer_hydrate.md +183 -23
  168. package/resources/gofer/specify-commands/gofer_personality.md +117 -6
  169. package/resources/gofer/specify-commands/gofer_plan.md +117 -6
  170. package/resources/gofer/specify-commands/gofer_side.md +117 -6
  171. package/resources/gofer/specify-commands/gofer_spec_summary.md +183 -23
  172. package/resources/gofer/specify-commands/gofer_tdd.md +183 -23
  173. package/resources/gofer/specify-commands/gofer_vocabulary.md +185 -25
  174. package/resources/gofer/specify-commands/gofer_zoom_out.md +183 -23
  175. package/resources/gofer/specify-config/object-type-routing.json +24 -0
  176. package/resources/gofer/specify-config/typesafe-learning-review.json +16 -0
  177. package/resources/gofer/specify-config/typesafe-semantic-review.json +9 -0
  178. package/resources/gofer/system-skills/eai/SKILL.md +365 -0
  179. package/resources/gofer/system-skills/eai-update/SKILL.md +56 -0
  180. package/resources/gofer/system-skills/gofer-documentation/SKILL.md +93 -0
  181. package/resources/gofer/templates/build-map-template.md +64 -0
  182. package/resources/gofer/templates/business-scenarios-template.json +14 -0
  183. package/resources/gofer/templates/ciso-security-summary-template.md +3 -3
  184. package/resources/gofer/templates/context-bundle-template.md +4 -3
  185. package/resources/gofer/templates/contract-pack-template.md +8 -8
  186. package/resources/gofer/templates/cto-architecture-summary-template.md +3 -3
  187. package/resources/gofer/templates/delivery-lineage-template.json +8 -0
  188. package/resources/gofer/templates/eai-preflight-template.md +109 -68
  189. package/resources/gofer/templates/goal-ledger-template.json +1 -1
  190. package/resources/gofer/templates/gofer-model-policy.yaml +28 -6
  191. package/resources/gofer/templates/loop-contract-template.json +3 -1
  192. package/resources/gofer/templates/plan-template.md +8 -7
  193. package/resources/gofer/templates/priority-plan-template.json +29 -0
  194. package/resources/gofer/templates/proposal-review-template.md +6 -3
  195. package/resources/gofer/templates/release-capability-ledger-template.md +24 -0
  196. package/resources/gofer/templates/research-template.md +7 -6
  197. package/resources/gofer/templates/spec-summary-template.md +1 -1
  198. package/resources/gofer/templates/spec-template.md +45 -6
  199. package/resources/gofer/templates/tasks-template.md +12 -3
  200. package/resources/gofer/templates/ui-preview-brief-template.md +55 -5
  201. package/resources/gofer/templates/ui-review-log-template.md +21 -3
  202. package/resources/gofer/templates/ui-show-and-tell-template.md +46 -0
  203. package/resources/gofer/templates/visuals/capability-heatmap-template.md +2 -2
  204. package/resources/gofer/templates/working-backwards-prfaq-template.md +9 -8
  205. package/resources/linked-sources.json +4 -4
  206. package/resources/gofer/agents-skills/0_gofer_start/SKILL.md +0 -1287
  207. package/resources/gofer/agents-skills/0a_problem_validation/SKILL.md +0 -429
  208. package/resources/gofer/agents-skills/10_gofer_cloud/SKILL.md +0 -635
  209. package/resources/gofer/agents-skills/1_gofer_research/SKILL.md +0 -1159
  210. package/resources/gofer/agents-skills/2_gofer_specify/SKILL.md +0 -860
  211. package/resources/gofer/agents-skills/3_gofer_plan/SKILL.md +0 -899
  212. package/resources/gofer/agents-skills/4_gofer_tasks/SKILL.md +0 -760
  213. package/resources/gofer/agents-skills/5_gofer_implement/SKILL.md +0 -944
  214. package/resources/gofer/agents-skills/6_gofer_validate/SKILL.md +0 -2302
  215. package/resources/gofer/agents-skills/7_gofer_save/SKILL.md +0 -423
  216. package/resources/gofer/agents-skills/7a_stakeholder_comms/SKILL.md +0 -508
  217. package/resources/gofer/agents-skills/8_gofer_branding/SKILL.md +0 -315
  218. package/resources/gofer/agents-skills/9_gofer_tests/SKILL.md +0 -558
  219. package/resources/gofer/agents-skills/gofer_bootstrap_workspace/SKILL.md +0 -148
  220. package/resources/gofer/agents-skills/gofer_check_workspace/SKILL.md +0 -119
  221. package/resources/gofer/agents-skills/gofer_constitution/SKILL.md +0 -612
  222. package/resources/gofer/agents-skills/gofer_diagnose/SKILL.md +0 -114
  223. package/resources/gofer/agents-skills/gofer_eai_first_run/SKILL.md +0 -397
  224. package/resources/gofer/agents-skills/gofer_hydrate/SKILL.md +0 -561
  225. package/resources/gofer/agents-skills/gofer_personality/SKILL.md +0 -44
  226. package/resources/gofer/agents-skills/gofer_plan/SKILL.md +0 -40
  227. package/resources/gofer/agents-skills/gofer_side/SKILL.md +0 -45
  228. package/resources/gofer/agents-skills/gofer_spec_summary/SKILL.md +0 -112
  229. package/resources/gofer/agents-skills/gofer_tdd/SKILL.md +0 -112
  230. package/resources/gofer/agents-skills/gofer_vocabulary/SKILL.md +0 -112
  231. package/resources/gofer/agents-skills/gofer_zoom_out/SKILL.md +0 -112
  232. package/resources/gofer/claude-commands/0_gofer_start.md +0 -1282
  233. package/resources/gofer/claude-commands/0a_problem_validation.md +0 -424
  234. package/resources/gofer/claude-commands/10_gofer_cloud.md +0 -630
  235. package/resources/gofer/claude-commands/1_gofer_research.md +0 -1154
  236. package/resources/gofer/claude-commands/2_gofer_specify.md +0 -855
  237. package/resources/gofer/claude-commands/3_gofer_plan.md +0 -894
  238. package/resources/gofer/claude-commands/4_gofer_tasks.md +0 -755
  239. package/resources/gofer/claude-commands/5_gofer_implement.md +0 -939
  240. package/resources/gofer/claude-commands/6_gofer_validate.md +0 -2297
  241. package/resources/gofer/claude-commands/7_gofer_save.md +0 -418
  242. package/resources/gofer/claude-commands/7a_stakeholder_comms.md +0 -503
  243. package/resources/gofer/claude-commands/8_gofer_branding.md +0 -310
  244. package/resources/gofer/claude-commands/9_gofer_tests.md +0 -553
  245. package/resources/gofer/claude-commands/gofer_bootstrap_workspace.md +0 -143
  246. package/resources/gofer/claude-commands/gofer_check_workspace.md +0 -114
  247. package/resources/gofer/claude-commands/gofer_constitution.md +0 -607
  248. package/resources/gofer/claude-commands/gofer_diagnose.md +0 -109
  249. package/resources/gofer/claude-commands/gofer_eai_first_run.md +0 -392
  250. package/resources/gofer/claude-commands/gofer_hydrate.md +0 -556
  251. package/resources/gofer/claude-commands/gofer_personality.md +0 -39
  252. package/resources/gofer/claude-commands/gofer_plan.md +0 -35
  253. package/resources/gofer/claude-commands/gofer_side.md +0 -40
  254. package/resources/gofer/claude-commands/gofer_spec_summary.md +0 -107
  255. package/resources/gofer/claude-commands/gofer_tdd.md +0 -107
  256. package/resources/gofer/claude-commands/gofer_vocabulary.md +0 -107
  257. package/resources/gofer/claude-commands/gofer_zoom_out.md +0 -107
  258. package/resources/gofer/claude-skills/eai-gofer/SKILL.md +0 -56
  259. package/resources/gofer/copilot-prompts/0_gofer_start.prompt.md +0 -1308
  260. package/resources/gofer/copilot-prompts/0a_problem_validation.prompt.md +0 -429
  261. package/resources/gofer/copilot-prompts/10_gofer_cloud.prompt.md +0 -644
  262. package/resources/gofer/copilot-prompts/1_gofer_research.prompt.md +0 -1177
  263. package/resources/gofer/copilot-prompts/2_gofer_specify.prompt.md +0 -878
  264. package/resources/gofer/copilot-prompts/3_gofer_plan.prompt.md +0 -917
  265. package/resources/gofer/copilot-prompts/4_gofer_tasks.prompt.md +0 -778
  266. package/resources/gofer/copilot-prompts/5_gofer_implement.prompt.md +0 -962
  267. package/resources/gofer/copilot-prompts/6_gofer_validate.prompt.md +0 -2310
  268. package/resources/gofer/copilot-prompts/7_gofer_save.prompt.md +0 -433
  269. package/resources/gofer/copilot-prompts/7a_stakeholder_comms.prompt.md +0 -516
  270. package/resources/gofer/copilot-prompts/8_gofer_branding.prompt.md +0 -323
  271. package/resources/gofer/copilot-prompts/9_gofer_tests.prompt.md +0 -566
  272. package/resources/gofer/copilot-prompts/gofer_bootstrap_workspace.prompt.md +0 -161
  273. package/resources/gofer/copilot-prompts/gofer_check_workspace.prompt.md +0 -132
  274. package/resources/gofer/copilot-prompts/gofer_constitution.prompt.md +0 -621
  275. package/resources/gofer/copilot-prompts/gofer_diagnose.prompt.md +0 -127
  276. package/resources/gofer/copilot-prompts/gofer_eai_first_run.prompt.md +0 -410
  277. package/resources/gofer/copilot-prompts/gofer_hydrate.prompt.md +0 -571
  278. package/resources/gofer/copilot-prompts/gofer_personality.prompt.md +0 -57
  279. package/resources/gofer/copilot-prompts/gofer_plan.prompt.md +0 -53
  280. package/resources/gofer/copilot-prompts/gofer_side.prompt.md +0 -58
  281. package/resources/gofer/copilot-prompts/gofer_spec_summary.prompt.md +0 -125
  282. package/resources/gofer/copilot-prompts/gofer_tdd.prompt.md +0 -125
  283. package/resources/gofer/copilot-prompts/gofer_vocabulary.prompt.md +0 -125
  284. package/resources/gofer/copilot-prompts/gofer_zoom_out.prompt.md +0 -125
  285. package/resources/gofer/gemini/commands/gofer/0_gofer_start.md +0 -1282
  286. package/resources/gofer/gemini/commands/gofer/0_gofer_start.toml +0 -2
  287. package/resources/gofer/gemini/commands/gofer/0a_problem_validation.md +0 -424
  288. package/resources/gofer/gemini/commands/gofer/0a_problem_validation.toml +0 -2
  289. package/resources/gofer/gemini/commands/gofer/10_gofer_cloud.md +0 -630
  290. package/resources/gofer/gemini/commands/gofer/10_gofer_cloud.toml +0 -2
  291. package/resources/gofer/gemini/commands/gofer/1_gofer_research.md +0 -1154
  292. package/resources/gofer/gemini/commands/gofer/1_gofer_research.toml +0 -2
  293. package/resources/gofer/gemini/commands/gofer/2_gofer_specify.md +0 -855
  294. package/resources/gofer/gemini/commands/gofer/2_gofer_specify.toml +0 -2
  295. package/resources/gofer/gemini/commands/gofer/3_gofer_plan.md +0 -894
  296. package/resources/gofer/gemini/commands/gofer/3_gofer_plan.toml +0 -2
  297. package/resources/gofer/gemini/commands/gofer/4_gofer_tasks.md +0 -755
  298. package/resources/gofer/gemini/commands/gofer/4_gofer_tasks.toml +0 -2
  299. package/resources/gofer/gemini/commands/gofer/5_gofer_implement.md +0 -939
  300. package/resources/gofer/gemini/commands/gofer/5_gofer_implement.toml +0 -2
  301. package/resources/gofer/gemini/commands/gofer/6_gofer_validate.md +0 -2297
  302. package/resources/gofer/gemini/commands/gofer/6_gofer_validate.toml +0 -2
  303. package/resources/gofer/gemini/commands/gofer/7_gofer_save.md +0 -418
  304. package/resources/gofer/gemini/commands/gofer/7_gofer_save.toml +0 -2
  305. package/resources/gofer/gemini/commands/gofer/7a_stakeholder_comms.md +0 -503
  306. package/resources/gofer/gemini/commands/gofer/7a_stakeholder_comms.toml +0 -2
  307. package/resources/gofer/gemini/commands/gofer/8_gofer_branding.md +0 -310
  308. package/resources/gofer/gemini/commands/gofer/8_gofer_branding.toml +0 -2
  309. package/resources/gofer/gemini/commands/gofer/9_gofer_tests.md +0 -553
  310. package/resources/gofer/gemini/commands/gofer/9_gofer_tests.toml +0 -2
  311. package/resources/gofer/gemini/commands/gofer/gofer_bootstrap_workspace.md +0 -143
  312. package/resources/gofer/gemini/commands/gofer/gofer_bootstrap_workspace.toml +0 -2
  313. package/resources/gofer/gemini/commands/gofer/gofer_check_workspace.md +0 -114
  314. package/resources/gofer/gemini/commands/gofer/gofer_check_workspace.toml +0 -2
  315. package/resources/gofer/gemini/commands/gofer/gofer_constitution.md +0 -607
  316. package/resources/gofer/gemini/commands/gofer/gofer_constitution.toml +0 -2
  317. package/resources/gofer/gemini/commands/gofer/gofer_diagnose.md +0 -109
  318. package/resources/gofer/gemini/commands/gofer/gofer_diagnose.toml +0 -2
  319. package/resources/gofer/gemini/commands/gofer/gofer_eai_first_run.md +0 -392
  320. package/resources/gofer/gemini/commands/gofer/gofer_eai_first_run.toml +0 -2
  321. package/resources/gofer/gemini/commands/gofer/gofer_hydrate.md +0 -556
  322. package/resources/gofer/gemini/commands/gofer/gofer_hydrate.toml +0 -2
  323. package/resources/gofer/gemini/commands/gofer/gofer_personality.md +0 -39
  324. package/resources/gofer/gemini/commands/gofer/gofer_personality.toml +0 -2
  325. package/resources/gofer/gemini/commands/gofer/gofer_plan.md +0 -35
  326. package/resources/gofer/gemini/commands/gofer/gofer_plan.toml +0 -2
  327. package/resources/gofer/gemini/commands/gofer/gofer_side.md +0 -40
  328. package/resources/gofer/gemini/commands/gofer/gofer_side.toml +0 -2
  329. package/resources/gofer/gemini/commands/gofer/gofer_spec_summary.md +0 -107
  330. package/resources/gofer/gemini/commands/gofer/gofer_spec_summary.toml +0 -2
  331. package/resources/gofer/gemini/commands/gofer/gofer_tdd.md +0 -107
  332. package/resources/gofer/gemini/commands/gofer/gofer_tdd.toml +0 -2
  333. package/resources/gofer/gemini/commands/gofer/gofer_vocabulary.md +0 -107
  334. package/resources/gofer/gemini/commands/gofer/gofer_vocabulary.toml +0 -2
  335. package/resources/gofer/gemini/commands/gofer/gofer_zoom_out.md +0 -107
  336. package/resources/gofer/gemini/commands/gofer/gofer_zoom_out.toml +0 -2
  337. package/resources/gofer/github-skills/eai-gofer/SKILL.md +0 -56
  338. package/resources/gofer/system-skills/0_gofer_start/SKILL.md +0 -1287
  339. package/resources/gofer/system-skills/0a_problem_validation/SKILL.md +0 -429
  340. package/resources/gofer/system-skills/10_gofer_cloud/SKILL.md +0 -635
  341. package/resources/gofer/system-skills/1_gofer_research/SKILL.md +0 -1159
  342. package/resources/gofer/system-skills/2_gofer_specify/SKILL.md +0 -860
  343. package/resources/gofer/system-skills/3_gofer_plan/SKILL.md +0 -899
  344. package/resources/gofer/system-skills/4_gofer_tasks/SKILL.md +0 -760
  345. package/resources/gofer/system-skills/5_gofer_implement/SKILL.md +0 -944
  346. package/resources/gofer/system-skills/6_gofer_validate/SKILL.md +0 -2302
  347. package/resources/gofer/system-skills/7_gofer_save/SKILL.md +0 -423
  348. package/resources/gofer/system-skills/7a_stakeholder_comms/SKILL.md +0 -508
  349. package/resources/gofer/system-skills/8_gofer_branding/SKILL.md +0 -315
  350. package/resources/gofer/system-skills/9_gofer_tests/SKILL.md +0 -558
  351. package/resources/gofer/system-skills/gofer_bootstrap_workspace/SKILL.md +0 -148
  352. package/resources/gofer/system-skills/gofer_check_workspace/SKILL.md +0 -119
  353. package/resources/gofer/system-skills/gofer_constitution/SKILL.md +0 -612
  354. package/resources/gofer/system-skills/gofer_diagnose/SKILL.md +0 -114
  355. package/resources/gofer/system-skills/gofer_eai_first_run/SKILL.md +0 -397
  356. package/resources/gofer/system-skills/gofer_hydrate/SKILL.md +0 -561
  357. package/resources/gofer/system-skills/gofer_personality/SKILL.md +0 -44
  358. package/resources/gofer/system-skills/gofer_plan/SKILL.md +0 -40
  359. package/resources/gofer/system-skills/gofer_side/SKILL.md +0 -45
  360. package/resources/gofer/system-skills/gofer_spec_summary/SKILL.md +0 -112
  361. package/resources/gofer/system-skills/gofer_tdd/SKILL.md +0 -112
  362. package/resources/gofer/system-skills/gofer_vocabulary/SKILL.md +0 -112
  363. package/resources/gofer/system-skills/gofer_zoom_out/SKILL.md +0 -112
  364. package/resources/gofer/templates/ui-approval-template.md +0 -32
@@ -0,0 +1,477 @@
1
+ #!/usr/bin/env node
2
+ import { createReadStream } from 'node:fs';
3
+ import path from 'node:path';
4
+ import { fileURLToPath } from 'node:url';
5
+
6
+ const MAX_BYTES = 8 * 1024 * 1024;
7
+ const MAX_TRIALS = 2000;
8
+ const MAX_ENTRIES = 10000;
9
+ const METRICS = ['calls', 'inputTokens', 'outputTokens', 'costUsd'];
10
+ const STATUSES = ['verified', 'failed', 'blocked', 'timed-out', 'cancelled', 'stale', 'incomplete'];
11
+ const MATCH_FIELDS = [
12
+ 'caseId',
13
+ 'requirementsRevision',
14
+ 'inputRevision',
15
+ 'environmentRevision',
16
+ 'surface',
17
+ 'measurementClass',
18
+ ];
19
+
20
+ function requireValue(condition, code) {
21
+ if (!condition) throw new Error(code);
22
+ }
23
+
24
+ function object(value, fields, label) {
25
+ requireValue(
26
+ value !== null && typeof value === 'object' && !Array.isArray(value),
27
+ `INVALID_${label}`
28
+ );
29
+ requireValue(
30
+ Object.keys(value).every((key) => fields.includes(key)),
31
+ `UNSUPPORTED_${label}_FIELD`
32
+ );
33
+ }
34
+
35
+ function text(value) {
36
+ return typeof value === 'string' && value.trim().length > 0 && value.length <= 1024;
37
+ }
38
+
39
+ function number(value, integer = false) {
40
+ return (
41
+ typeof value === 'number' &&
42
+ Number.isFinite(value) &&
43
+ value >= 0 &&
44
+ value <= Number.MAX_SAFE_INTEGER &&
45
+ (!integer || Number.isSafeInteger(value))
46
+ );
47
+ }
48
+
49
+ function sum(values) {
50
+ const result = values.reduce((total, value) => total + value, 0);
51
+ requireValue(
52
+ Number.isFinite(result) && Math.abs(result) <= Number.MAX_SAFE_INTEGER,
53
+ 'METRIC_OVERFLOW'
54
+ );
55
+ return result;
56
+ }
57
+
58
+ function usageSummary(entries, complete) {
59
+ const result = { entryCount: entries.length, reported: {} };
60
+ for (const metric of METRICS) {
61
+ const known = entries.map((entry) => entry[metric]).filter((value) => value != null);
62
+ result.reported[metric] = known.length ? sum(known) : null;
63
+ result[metric] =
64
+ complete && entries.length > 0 && known.length === entries.length
65
+ ? result.reported[metric]
66
+ : null;
67
+ }
68
+ return result;
69
+ }
70
+
71
+ export function summarizeUsage(usage) {
72
+ if (usage == null) return usageSummary([], false);
73
+ object(usage, ['complete', 'entries'], 'USAGE');
74
+ requireValue(
75
+ typeof usage.complete === 'boolean' &&
76
+ Array.isArray(usage.entries) &&
77
+ usage.entries.length <= MAX_ENTRIES,
78
+ 'INVALID_USAGE'
79
+ );
80
+ const seen = new Set();
81
+ for (const entry of usage.entries) {
82
+ object(entry, ['executionId', 'role', 'attempt', ...METRICS], 'USAGE_ENTRY');
83
+ requireValue(
84
+ text(entry.executionId) && !seen.has(entry.executionId),
85
+ 'DUPLICATE_OR_INVALID_EXECUTION_ID'
86
+ );
87
+ seen.add(entry.executionId);
88
+ requireValue(
89
+ ['worker', 'reviewer', 'controller', 'check'].includes(entry.role),
90
+ 'INVALID_USAGE_ROLE'
91
+ );
92
+ requireValue(Number.isSafeInteger(entry.attempt) && entry.attempt > 0, 'INVALID_ATTEMPT');
93
+ for (const metric of METRICS) {
94
+ requireValue(
95
+ entry[metric] == null || number(entry[metric], metric !== 'costUsd'),
96
+ `INVALID_USAGE_${metric}`
97
+ );
98
+ }
99
+ }
100
+ return usageSummary(usage.entries, usage.complete);
101
+ }
102
+
103
+ function aggregateUsage(trials) {
104
+ const result = { entryCount: sum(trials.map((trial) => trial.usage.entryCount)), reported: {} };
105
+ for (const metric of METRICS) {
106
+ const reported = trials
107
+ .map((trial) => trial.usage.reported[metric])
108
+ .filter((value) => value != null);
109
+ result.reported[metric] = reported.length ? sum(reported) : null;
110
+ result[metric] =
111
+ trials.length > 0 && trials.every((trial) => trial.usage[metric] != null)
112
+ ? sum(trials.map((trial) => trial.usage[metric]))
113
+ : null;
114
+ }
115
+ return result;
116
+ }
117
+
118
+ function statistics(values) {
119
+ const observed = values.filter((value) => value != null).sort((a, b) => a - b);
120
+ const result = {
121
+ count: values.length,
122
+ observedCount: observed.length,
123
+ missingCount: values.length - observed.length,
124
+ median: null,
125
+ p95: null,
126
+ mean: null,
127
+ min: null,
128
+ max: null,
129
+ sampleStandardDeviation: null,
130
+ standardError: null,
131
+ };
132
+ // Incomplete cohorts must not become favourable complete-case subsets.
133
+ if (!values.length || observed.length !== values.length) return result;
134
+ const n = observed.length;
135
+ const mean = sum(observed.map((value) => value / n));
136
+ const middle = Math.floor(n / 2);
137
+ result.mean = mean;
138
+ result.median = n % 2 ? observed[middle] : observed[middle - 1] / 2 + observed[middle] / 2;
139
+ result.p95 = observed[Math.ceil(0.95 * n) - 1];
140
+ result.min = observed[0];
141
+ result.max = observed[n - 1];
142
+ if (n > 1) {
143
+ const variance = observed.reduce((total, value) => total + (value - mean) ** 2 / (n - 1), 0);
144
+ result.sampleStandardDeviation = Math.sqrt(variance);
145
+ result.standardError = result.sampleStandardDeviation / Math.sqrt(n);
146
+ }
147
+ return result;
148
+ }
149
+
150
+ function normalizeTrial(trial, revisions) {
151
+ object(
152
+ trial,
153
+ [
154
+ 'trialId',
155
+ 'pairId',
156
+ 'variant',
157
+ ...MATCH_FIELDS,
158
+ 'implementationRevision',
159
+ 'requiredChecks',
160
+ 'status',
161
+ 'elapsedMs',
162
+ 'checks',
163
+ 'usage',
164
+ ],
165
+ 'TRIAL'
166
+ );
167
+ for (const field of ['trialId', 'pairId', 'implementationRevision', ...MATCH_FIELDS]) {
168
+ requireValue(text(trial[field]), `INVALID_TRIAL_${field}`);
169
+ }
170
+ requireValue(['baseline', 'candidate'].includes(trial.variant), 'INVALID_VARIANT');
171
+ requireValue(trial.implementationRevision === revisions[trial.variant], 'REVISION_MISMATCH');
172
+ requireValue(
173
+ ['synthetic', 'local-process', 'native-host'].includes(trial.measurementClass),
174
+ 'INVALID_MEASUREMENT_CLASS'
175
+ );
176
+ requireValue(STATUSES.includes(trial.status), 'INVALID_STATUS');
177
+ requireValue(trial.elapsedMs == null || number(trial.elapsedMs), 'INVALID_ELAPSED_MS');
178
+ requireValue(
179
+ Array.isArray(trial.requiredChecks) &&
180
+ trial.requiredChecks.length > 0 &&
181
+ trial.requiredChecks.length <= 256 &&
182
+ trial.requiredChecks.every(text) &&
183
+ new Set(trial.requiredChecks).size === trial.requiredChecks.length,
184
+ 'INVALID_REQUIRED_CHECKS'
185
+ );
186
+ const checks = trial.checks ?? [];
187
+ requireValue(Array.isArray(checks) && checks.length <= 256, 'INVALID_CHECKS');
188
+ const seen = new Set();
189
+ for (const check of checks) {
190
+ object(
191
+ check,
192
+ [
193
+ 'id',
194
+ 'status',
195
+ 'receipt',
196
+ 'requirementsRevision',
197
+ 'inputRevision',
198
+ 'implementationRevision',
199
+ ],
200
+ 'CHECK'
201
+ );
202
+ requireValue(text(check.id) && !seen.has(check.id), 'DUPLICATE_OR_INVALID_CHECK');
203
+ requireValue(
204
+ ['passed', 'failed', 'blocked', 'missing', 'timed-out'].includes(check.status),
205
+ 'INVALID_CHECK_STATUS'
206
+ );
207
+ seen.add(check.id);
208
+ }
209
+ const requiredChecks = [...trial.requiredChecks].sort();
210
+ const acceptanceIssues = trial.status === 'verified' ? [] : [`TRIAL_${trial.status}`];
211
+ for (const id of requiredChecks) {
212
+ const check = checks.find((item) => item.id === id);
213
+ if (
214
+ !check ||
215
+ check.status !== 'passed' ||
216
+ !text(check.receipt) ||
217
+ check.requirementsRevision !== trial.requirementsRevision ||
218
+ check.inputRevision !== trial.inputRevision ||
219
+ check.implementationRevision !== trial.implementationRevision
220
+ ) {
221
+ acceptanceIssues.push(`MISSING_FAILED_OR_STALE_CHECK:${id}`);
222
+ }
223
+ }
224
+ return {
225
+ ...trial,
226
+ requiredChecks,
227
+ checks,
228
+ elapsedMs: trial.elapsedMs ?? null,
229
+ usage: summarizeUsage(trial.usage),
230
+ usageEntries: trial.usage?.entries ?? [],
231
+ usageDeclaredComplete: trial.usage?.complete ?? false,
232
+ accepted: acceptanceIssues.length === 0,
233
+ acceptanceIssues,
234
+ };
235
+ }
236
+
237
+ function cohortKey(trial) {
238
+ return JSON.stringify([...MATCH_FIELDS.map((field) => trial[field]), trial.requiredChecks]);
239
+ }
240
+
241
+ function summarizeCohort(pairs) {
242
+ const baseline = pairs.map((pair) => pair.baseline);
243
+ const candidate = pairs.map((pair) => pair.candidate);
244
+ const baselineAccepted = baseline.filter((trial) => trial.accepted).length;
245
+ const candidateAccepted = candidate.filter((trial) => trial.accepted).length;
246
+ const elapsedMs = {
247
+ baseline: statistics(baseline.map((trial) => trial.elapsedMs)),
248
+ candidate: statistics(candidate.map((trial) => trial.elapsedMs)),
249
+ };
250
+ const pairedElapsedDeltaMs = statistics(
251
+ pairs.map((pair) =>
252
+ pair.baseline.elapsedMs == null || pair.candidate.elapsedMs == null
253
+ ? null
254
+ : pair.candidate.elapsedMs - pair.baseline.elapsedMs
255
+ )
256
+ );
257
+ const quality = {
258
+ baselineAccepted,
259
+ candidateAccepted,
260
+ baselineAcceptanceRate: baselineAccepted / pairs.length,
261
+ candidateAcceptanceRate: candidateAccepted / pairs.length,
262
+ acceptanceRateDelta: (candidateAccepted - baselineAccepted) / pairs.length,
263
+ regressions: pairs.filter((pair) => pair.baseline.accepted && !pair.candidate.accepted).length,
264
+ improvements: pairs.filter((pair) => !pair.baseline.accepted && pair.candidate.accepted).length,
265
+ };
266
+ const observedMedianReductionFraction =
267
+ elapsedMs.baseline.median > 0 && elapsedMs.candidate.median != null
268
+ ? (elapsedMs.baseline.median - elapsedMs.candidate.median) / elapsedMs.baseline.median
269
+ : null;
270
+ const outcomes = Object.fromEntries(
271
+ ['baseline', 'candidate'].map((variant) => [
272
+ variant,
273
+ Object.fromEntries(
274
+ STATUSES.map((status) => [
275
+ status,
276
+ pairs.filter((pair) => pair[variant].status === status).length,
277
+ ])
278
+ ),
279
+ ])
280
+ );
281
+ return {
282
+ ...Object.fromEntries(MATCH_FIELDS.map((field) => [field, baseline[0][field]])),
283
+ requiredChecks: baseline[0].requiredChecks,
284
+ pairCount: pairs.length,
285
+ pairIds: pairs.map((pair) => pair.baseline.pairId),
286
+ outcomes,
287
+ quality,
288
+ elapsedMs,
289
+ pairedElapsedDeltaMs,
290
+ usage: { baseline: aggregateUsage(baseline), candidate: aggregateUsage(candidate) },
291
+ observedMedianReductionFraction,
292
+ observedTargetMet:
293
+ observedMedianReductionFraction != null &&
294
+ observedMedianReductionFraction >= 0.2 &&
295
+ elapsedMs.candidate.p95 <= elapsedMs.baseline.p95 &&
296
+ baselineAccepted === pairs.length &&
297
+ candidateAccepted === pairs.length,
298
+ uncertainty:
299
+ 'Descriptive matched sample only; standard error is not a significance test. Small samples and selection bias limit inference. Failure durations are not time to accepted success.',
300
+ };
301
+ }
302
+
303
+ export function generateExecutionMetrics(input) {
304
+ object(input, ['schemaVersion', 'revisions', 'trials'], 'INPUT');
305
+ requireValue(input.schemaVersion === 1, 'UNSUPPORTED_SCHEMA_VERSION');
306
+ object(input.revisions, ['baseline', 'candidate'], 'REVISIONS');
307
+ requireValue(
308
+ text(input.revisions.baseline) && text(input.revisions.candidate),
309
+ 'INVALID_REVISIONS'
310
+ );
311
+ requireValue(
312
+ Array.isArray(input.trials) && input.trials.length <= MAX_TRIALS,
313
+ 'INVALID_TRIAL_COUNT'
314
+ );
315
+ const ids = new Set();
316
+ const executions = new Set();
317
+ const pairs = new Map();
318
+ for (const raw of input.trials) {
319
+ const trial = normalizeTrial(raw, input.revisions);
320
+ requireValue(!ids.has(trial.trialId), 'DUPLICATE_TRIAL_ID');
321
+ ids.add(trial.trialId);
322
+ for (const entry of trial.usageEntries) {
323
+ requireValue(!executions.has(entry.executionId), 'DUPLICATE_EXECUTION_ID');
324
+ executions.add(entry.executionId);
325
+ requireValue(executions.size <= 100000, 'TOO_MANY_USAGE_ENTRIES');
326
+ }
327
+ if (!pairs.has(trial.pairId)) pairs.set(trial.pairId, {});
328
+ const pair = pairs.get(trial.pairId);
329
+ requireValue(!pair[trial.variant], 'DUPLICATE_PAIR_VARIANT');
330
+ pair[trial.variant] = trial;
331
+ }
332
+ const groups = new Map();
333
+ const trials = [];
334
+ for (const pairId of [...pairs.keys()].sort()) {
335
+ const pair = pairs.get(pairId);
336
+ requireValue(pair.baseline && pair.candidate, 'UNMATCHED_TRIAL');
337
+ const key = cohortKey(pair.baseline);
338
+ requireValue(key === cohortKey(pair.candidate), 'PAIR_MISMATCH');
339
+ if (!groups.has(key)) groups.set(key, []);
340
+ groups.get(key).push(pair);
341
+ trials.push(pair.baseline, pair.candidate);
342
+ }
343
+ return {
344
+ schemaVersion: 1,
345
+ revisions: { ...input.revisions },
346
+ trialCount: trials.length,
347
+ pairCount: pairs.size,
348
+ trials,
349
+ cohorts: [...groups.keys()].sort().map((key) => summarizeCohort(groups.get(key))),
350
+ nativeEvidenceAuthenticated: false,
351
+ productSpeedClaimSupported: false,
352
+ limitations: [
353
+ 'Synthetic and local-process results are not native product performance evidence.',
354
+ 'Native labels, revision tokens and receipt references are declarations, not authenticated host evidence or proof of parallel overlap.',
355
+ 'Observed targets are descriptive only. Native qualification, full-population completeness, independent review and existing release gates remain required.',
356
+ 'All supplied failed, blocked, timed-out, cancelled, stale and incomplete trials remain in denominators and usage totals.',
357
+ 'Unknown metrics are null. Reported partial usage is not a complete total; no pricing or savings is inferred.',
358
+ ],
359
+ };
360
+ }
361
+
362
+ function display(value) {
363
+ return value == null ? 'UNKNOWN' : String(value).replace(/[|\r\n]/g, ' ');
364
+ }
365
+
366
+ export function formatMarkdown(report) {
367
+ const lines = [
368
+ '# Matched Execution Metrics',
369
+ '',
370
+ `Trials: ${report.trialCount}; matched pairs: ${report.pairCount}.`,
371
+ 'Product speed claim: not supported by this reporter. Native evidence is not authenticated.',
372
+ '',
373
+ '| Case | Surface | Evidence class | Pairs | Baseline median ms | Candidate median ms | Baseline accepted | Candidate accepted | Baseline total USD | Candidate total USD |',
374
+ '| --- | --- | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: |',
375
+ ];
376
+ for (const cohort of report.cohorts) {
377
+ lines.push(
378
+ `| ${[
379
+ cohort.caseId,
380
+ cohort.surface,
381
+ cohort.measurementClass,
382
+ cohort.pairCount,
383
+ cohort.elapsedMs.baseline.median,
384
+ cohort.elapsedMs.candidate.median,
385
+ cohort.quality.baselineAccepted,
386
+ cohort.quality.candidateAccepted,
387
+ cohort.usage.baseline.costUsd,
388
+ cohort.usage.candidate.costUsd,
389
+ ]
390
+ .map(display)
391
+ .join(' | ')} |`
392
+ );
393
+ }
394
+ lines.push(
395
+ '',
396
+ '## Timing And Uncertainty',
397
+ '',
398
+ '| Case | Surface | Evidence class | Baseline p95 ms | Candidate p95 ms | Paired mean delta ms | Paired standard error ms | Quality regressions |',
399
+ '| --- | --- | --- | ---: | ---: | ---: | ---: | ---: |'
400
+ );
401
+ for (const cohort of report.cohorts) {
402
+ lines.push(
403
+ `| ${[
404
+ cohort.caseId,
405
+ cohort.surface,
406
+ cohort.measurementClass,
407
+ cohort.elapsedMs.baseline.p95,
408
+ cohort.elapsedMs.candidate.p95,
409
+ cohort.pairedElapsedDeltaMs.mean,
410
+ cohort.pairedElapsedDeltaMs.standardError,
411
+ cohort.quality.regressions,
412
+ ]
413
+ .map(display)
414
+ .join(' | ')} |`
415
+ );
416
+ }
417
+ lines.push(
418
+ '',
419
+ 'Deltas are candidate minus baseline. Statistics are descriptive, not significance tests; small samples limit inference. Failure durations are not time to accepted success.'
420
+ );
421
+ lines.push(
422
+ '',
423
+ '## Retained Trials',
424
+ '',
425
+ '| Trial | Arm | Status | Accepted | Elapsed ms | Total USD |',
426
+ '| --- | --- | --- | --- | ---: | ---: |'
427
+ );
428
+ for (const trial of report.trials) {
429
+ lines.push(
430
+ `| ${[trial.trialId, trial.variant, trial.status, trial.accepted, trial.elapsedMs, trial.usage.costUsd].map(display).join(' | ')} |`
431
+ );
432
+ }
433
+ lines.push(
434
+ '',
435
+ '## Limitations',
436
+ '',
437
+ ...report.limitations.map((item) => `- ${item}`),
438
+ '- JSON contains complete cohort definitions, paired statistics, uncertainty, acceptance issues and reported partial usage.'
439
+ );
440
+ return lines.join('\n');
441
+ }
442
+
443
+ async function main(argv) {
444
+ if (argv.length === 1 && ['--help', '-h'].includes(argv[0])) {
445
+ console.log(
446
+ 'Usage: node gofer-execution-metrics.mjs --input <trials.json|-> [--json]\nRead-only matched-trial report; - reads stdin. No native performance certification.'
447
+ );
448
+ return;
449
+ }
450
+ let inputPath;
451
+ let json = false;
452
+ for (let index = 0; index < argv.length; index++) {
453
+ if (argv[index] === '--json' && !json) json = true;
454
+ else if (argv[index] === '--input' && inputPath === undefined) {
455
+ inputPath = argv[++index];
456
+ requireValue(text(inputPath) && !inputPath.startsWith('--'), 'MISSING_INPUT_PATH');
457
+ } else throw new Error('UNSUPPORTED_ARGUMENT');
458
+ }
459
+ requireValue(inputPath !== undefined, 'MISSING_INPUT_PATH');
460
+ const stream = inputPath === '-' ? process.stdin : createReadStream(inputPath);
461
+ const chunks = [];
462
+ let bytes = 0;
463
+ for await (const chunk of stream) {
464
+ bytes += Buffer.byteLength(chunk);
465
+ requireValue(bytes <= MAX_BYTES, 'INPUT_TOO_LARGE');
466
+ chunks.push(Buffer.from(chunk));
467
+ }
468
+ const report = generateExecutionMetrics(JSON.parse(Buffer.concat(chunks).toString('utf8')));
469
+ console.log(json ? JSON.stringify(report, null, 2) : formatMarkdown(report));
470
+ }
471
+
472
+ if (process.argv[1] && fileURLToPath(import.meta.url) === path.resolve(process.argv[1])) {
473
+ main(process.argv.slice(2)).catch((error) => {
474
+ console.error(`Execution metrics error: ${error.message}`);
475
+ process.exitCode = 1;
476
+ });
477
+ }