@enterpriseai/cli 3.19.0 → 3.19.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (362) hide show
  1. package/package.json +1 -1
  2. package/resources/gofer/.gofer-version +4 -357
  3. package/resources/gofer/agents-skills/eai/SKILL.md +365 -0
  4. package/resources/gofer/agents-skills/eai-update/SKILL.md +56 -0
  5. package/resources/gofer/agents-skills/gofer-documentation/SKILL.md +93 -0
  6. package/resources/gofer/bash-scripts/create-new-feature.sh +3 -1
  7. package/resources/gofer/bash-scripts/sync-implementation-status.sh +4 -3
  8. package/resources/gofer/bash-scripts/update-agent-context.sh +7 -8
  9. package/resources/gofer/bash-scripts/validate-artifact.sh +10 -6
  10. package/resources/gofer/bash-scripts/verify-object-type-routing-workspace.sh +184 -0
  11. package/resources/gofer/claude-commands/eai-update.md +46 -0
  12. package/resources/gofer/claude-commands/eai.md +355 -0
  13. package/resources/gofer/claude-skills/eai/SKILL.md +365 -0
  14. package/resources/gofer/claude-skills/eai-update/SKILL.md +56 -0
  15. package/resources/gofer/claude-skills/gofer-documentation/SKILL.md +93 -0
  16. package/resources/gofer/commands/0_gofer_start.md +440 -99
  17. package/resources/gofer/commands/0a_problem_validation.md +187 -27
  18. package/resources/gofer/commands/10_gofer_cloud.md +183 -23
  19. package/resources/gofer/commands/1_gofer_research.md +239 -30
  20. package/resources/gofer/commands/2_gofer_specify.md +239 -35
  21. package/resources/gofer/commands/3_gofer_plan.md +259 -43
  22. package/resources/gofer/commands/4_gofer_tasks.md +401 -81
  23. package/resources/gofer/commands/5_gofer_implement.md +375 -84
  24. package/resources/gofer/commands/6_gofer_validate.md +284 -53
  25. package/resources/gofer/commands/7_gofer_save.md +187 -26
  26. package/resources/gofer/commands/7a_stakeholder_comms.md +183 -23
  27. package/resources/gofer/commands/8_gofer_branding.md +183 -23
  28. package/resources/gofer/commands/9_gofer_tests.md +212 -23
  29. package/resources/gofer/commands/gofer_bootstrap_workspace.md +121 -8
  30. package/resources/gofer/commands/gofer_check_workspace.md +123 -8
  31. package/resources/gofer/commands/gofer_constitution.md +183 -23
  32. package/resources/gofer/commands/gofer_diagnose.md +183 -23
  33. package/resources/gofer/commands/gofer_eai_first_run.md +254 -25
  34. package/resources/gofer/commands/gofer_hydrate.md +183 -23
  35. package/resources/gofer/commands/gofer_personality.md +117 -6
  36. package/resources/gofer/commands/gofer_plan.md +117 -6
  37. package/resources/gofer/commands/gofer_side.md +117 -6
  38. package/resources/gofer/commands/gofer_spec_summary.md +183 -23
  39. package/resources/gofer/commands/gofer_tdd.md +183 -23
  40. package/resources/gofer/commands/gofer_vocabulary.md +185 -25
  41. package/resources/gofer/commands/gofer_zoom_out.md +183 -23
  42. package/resources/gofer/config/typesafe-learning-review.json +16 -0
  43. package/resources/gofer/config/typesafe-semantic-review.json +9 -0
  44. package/resources/gofer/copilot-instructions/gofer-cost.instructions.md +15 -6
  45. package/resources/gofer/copilot-instructions/typescript.instructions.md +1 -1
  46. package/resources/gofer/copilot-prompts/eai-update.prompt.md +58 -0
  47. package/resources/gofer/copilot-prompts/eai.prompt.md +367 -0
  48. package/resources/gofer/gemini/commands/gofer/eai-update.md +22 -0
  49. package/resources/gofer/gemini/commands/gofer/eai-update.toml +2 -0
  50. package/resources/gofer/gemini/commands/gofer/eai.md +357 -0
  51. package/resources/gofer/gemini/commands/gofer/eai.toml +2 -0
  52. package/resources/gofer/gemini/commands/gofer/manifest.json +3 -27
  53. package/resources/gofer/gemini/extension.json +4 -4
  54. package/resources/gofer/github-agents/eai.agent.md +83 -0
  55. package/resources/gofer/github-agents/gofer-business.agent.md +73 -4
  56. package/resources/gofer/github-agents/gofer-implement.agent.md +71 -2
  57. package/resources/gofer/github-agents/gofer-plan.agent.md +72 -2
  58. package/resources/gofer/github-agents/gofer-research.agent.md +72 -2
  59. package/resources/gofer/github-agents/gofer-validate.agent.md +72 -2
  60. package/resources/gofer/github-skills/eai/SKILL.md +365 -0
  61. package/resources/gofer/github-skills/eai-update/SKILL.md +56 -0
  62. package/resources/gofer/github-skills/gofer-documentation/SKILL.md +93 -0
  63. package/resources/gofer/grok-skills/eai/SKILL.md +267 -14
  64. package/resources/gofer/grok-skills/eai-update/SKILL.md +56 -0
  65. package/resources/gofer/hook-scripts/user-prompt-submit.mjs +58 -13
  66. package/resources/gofer/instruction-templates/base/agents-base.md +8 -4
  67. package/resources/gofer/instruction-templates/gofer/gofer-claude.md +7 -5
  68. package/resources/gofer/instruction-templates/gofer/gofer-copilot.md +10 -8
  69. package/resources/gofer/memory/constitution.md +9 -7
  70. package/resources/gofer/memory/gofer-model-policy.yaml +23 -1
  71. package/resources/gofer/memory/lessons.md +0 -31
  72. package/resources/gofer/node-scripts/canonical-descriptions.mjs +1 -1
  73. package/resources/gofer/node-scripts/check-version-alignment.mjs +4 -7
  74. package/resources/gofer/node-scripts/delivery-lineage-corpus.mjs +156 -0
  75. package/resources/gofer/node-scripts/generate-commands.mjs +1073 -265
  76. package/resources/gofer/node-scripts/gofer-acceptance-check.mjs +143 -0
  77. package/resources/gofer/node-scripts/gofer-agent-catalog.mjs +271 -0
  78. package/resources/gofer/node-scripts/gofer-benchmark-executor.mjs +123 -0
  79. package/resources/gofer/node-scripts/gofer-benchmark-sign.mjs +62 -0
  80. package/resources/gofer/node-scripts/gofer-benchmark-signer.mjs +89 -0
  81. package/resources/gofer/node-scripts/gofer-benchmark.mjs +76 -0
  82. package/resources/gofer/node-scripts/gofer-blocker-control.mjs +274 -0
  83. package/resources/gofer/node-scripts/gofer-claude-adapter.mjs +154 -0
  84. package/resources/gofer/node-scripts/gofer-closed-loop-audit.mjs +19 -2
  85. package/resources/gofer/node-scripts/gofer-delivery-check.mjs +121 -0
  86. package/resources/gofer/node-scripts/gofer-encrypted-key.mjs +58 -0
  87. package/resources/gofer/node-scripts/gofer-execution-metrics.mjs +477 -0
  88. package/resources/gofer/node-scripts/gofer-execution-recovery.mjs +334 -0
  89. package/resources/gofer/node-scripts/gofer-grok-adapter.mjs +184 -0
  90. package/resources/gofer/node-scripts/gofer-heldout-corpus.mjs +73 -0
  91. package/resources/gofer/node-scripts/gofer-heldout-snapshot.mjs +286 -0
  92. package/resources/gofer/node-scripts/gofer-heldout-verifier.mjs +211 -0
  93. package/resources/gofer/node-scripts/gofer-host-capability.mjs +335 -0
  94. package/resources/gofer/node-scripts/gofer-independent-reviewer.mjs +130 -0
  95. package/resources/gofer/node-scripts/gofer-live-routing.mjs +109 -0
  96. package/resources/gofer/node-scripts/gofer-local-capability-issuer.mjs +71 -0
  97. package/resources/gofer/node-scripts/gofer-local-isolation.mjs +175 -0
  98. package/resources/gofer/node-scripts/gofer-local-settings-cleanup.mjs +388 -0
  99. package/resources/gofer/node-scripts/gofer-loop-audit.mjs +54 -3
  100. package/resources/gofer/node-scripts/gofer-native-adapter.mjs +567 -0
  101. package/resources/gofer/node-scripts/gofer-native-benchmark-dispatch.mjs +145 -0
  102. package/resources/gofer/node-scripts/gofer-native-runtime.mjs +169 -0
  103. package/resources/gofer/node-scripts/gofer-pre-edit-check.mjs +204 -0
  104. package/resources/gofer/node-scripts/gofer-priority-check.mjs +214 -0
  105. package/resources/gofer/node-scripts/gofer-response-check.mjs +56 -0
  106. package/resources/gofer/node-scripts/gofer-reviewed-learning.mjs +1232 -0
  107. package/resources/gofer/node-scripts/gofer-run-verified-task.mjs +330 -0
  108. package/resources/gofer/node-scripts/gofer-runtime-ledger.mjs +289 -0
  109. package/resources/gofer/node-scripts/gofer-semantic-drift.mjs +584 -0
  110. package/resources/gofer/node-scripts/gofer-surface-update.mjs +1178 -0
  111. package/resources/gofer/node-scripts/gofer-trust-bootstrap.mjs +77 -0
  112. package/resources/gofer/node-scripts/gofer-trusted-benchmark.mjs +102 -0
  113. package/resources/gofer/node-scripts/gofer-trusted-evaluator.mjs +274 -0
  114. package/resources/gofer/node-scripts/gofer-tty-prompt.mjs +34 -0
  115. package/resources/gofer/node-scripts/gofer-typesafe-credentials.mjs +435 -0
  116. package/resources/gofer/node-scripts/gofer-ui-preview.mjs +1212 -0
  117. package/resources/gofer/node-scripts/gofer-verified-execution.mjs +484 -0
  118. package/resources/gofer/node-scripts/gofer-verifier-key-ceremony.mjs +101 -0
  119. package/resources/gofer/node-scripts/gofer-worktree-layout.mjs +32 -0
  120. package/resources/gofer/node-scripts/object-type-routing-phase-bundle.mjs +360 -0
  121. package/resources/gofer/node-scripts/package-agent-plugin.mjs +574 -82
  122. package/resources/gofer/node-scripts/parse-stage-command.mjs +1 -1
  123. package/resources/gofer/node-scripts/render-delivery-lineage.mjs +178 -0
  124. package/resources/gofer/node-scripts/sync-extension-resources.mjs +78 -2
  125. package/resources/gofer/node-scripts/validate-object-type-identifiers.mjs +767 -0
  126. package/resources/gofer/node-scripts/validate-object-type-routing-workspace.mjs +1325 -0
  127. package/resources/gofer/node-scripts/validate-v4-resource-contract.d.mts +44 -0
  128. package/resources/gofer/node-scripts/validate-v4-resource-contract.mjs +957 -0
  129. package/resources/gofer/node-scripts/workspace-bootstrap-lib.mjs +685 -116
  130. package/resources/gofer/references/agent-catalog.json +126 -0
  131. package/resources/gofer/references/blocker-mediation.md +156 -0
  132. package/resources/gofer/references/business-updates-and-goal-checks.md +109 -0
  133. package/resources/gofer/references/delivery-lineage.md +48 -0
  134. package/resources/gofer/references/mvp-capability-validation.md +102 -0
  135. package/resources/gofer/references/platform/README.md +1 -1
  136. package/resources/gofer/references/platform/eai-app-template.md +15 -13
  137. package/resources/gofer/references/platform/eai-auth-access.md +104 -0
  138. package/resources/gofer/references/platform/eai-config-driven-ui.md +5 -5
  139. package/resources/gofer/references/platform/eai-error-catalog.yaml +77 -19
  140. package/resources/gofer/references/platform/eai-repo-contract.md +61 -23
  141. package/resources/gofer/references/platform/eai-service-patterns.md +102 -105
  142. package/resources/gofer/references/platform/eai.md +44 -8
  143. package/resources/gofer/references/platform/vertical-template.md +10 -9
  144. package/resources/gofer/references/priority-outcome-protection.md +152 -0
  145. package/resources/gofer/references/verified-agent-execution.md +179 -0
  146. package/resources/gofer/schemas/gofer-learning-trace-v1.json +70 -0
  147. package/resources/gofer/specify-commands/0_gofer_start.md +440 -99
  148. package/resources/gofer/specify-commands/0a_problem_validation.md +187 -27
  149. package/resources/gofer/specify-commands/10_gofer_cloud.md +183 -23
  150. package/resources/gofer/specify-commands/1_gofer_research.md +239 -30
  151. package/resources/gofer/specify-commands/2_gofer_specify.md +239 -35
  152. package/resources/gofer/specify-commands/3_gofer_plan.md +259 -43
  153. package/resources/gofer/specify-commands/4_gofer_tasks.md +401 -81
  154. package/resources/gofer/specify-commands/5_gofer_implement.md +375 -84
  155. package/resources/gofer/specify-commands/6_gofer_validate.md +284 -53
  156. package/resources/gofer/specify-commands/7_gofer_save.md +187 -26
  157. package/resources/gofer/specify-commands/7a_stakeholder_comms.md +183 -23
  158. package/resources/gofer/specify-commands/8_gofer_branding.md +183 -23
  159. package/resources/gofer/specify-commands/9_gofer_tests.md +212 -23
  160. package/resources/gofer/specify-commands/gofer_bootstrap_workspace.md +121 -8
  161. package/resources/gofer/specify-commands/gofer_check_workspace.md +123 -8
  162. package/resources/gofer/specify-commands/gofer_constitution.md +183 -23
  163. package/resources/gofer/specify-commands/gofer_diagnose.md +183 -23
  164. package/resources/gofer/specify-commands/gofer_eai_first_run.md +254 -25
  165. package/resources/gofer/specify-commands/gofer_hydrate.md +183 -23
  166. package/resources/gofer/specify-commands/gofer_personality.md +117 -6
  167. package/resources/gofer/specify-commands/gofer_plan.md +117 -6
  168. package/resources/gofer/specify-commands/gofer_side.md +117 -6
  169. package/resources/gofer/specify-commands/gofer_spec_summary.md +183 -23
  170. package/resources/gofer/specify-commands/gofer_tdd.md +183 -23
  171. package/resources/gofer/specify-commands/gofer_vocabulary.md +185 -25
  172. package/resources/gofer/specify-commands/gofer_zoom_out.md +183 -23
  173. package/resources/gofer/specify-config/object-type-routing.json +24 -0
  174. package/resources/gofer/specify-config/typesafe-learning-review.json +16 -0
  175. package/resources/gofer/specify-config/typesafe-semantic-review.json +9 -0
  176. package/resources/gofer/system-skills/eai/SKILL.md +365 -0
  177. package/resources/gofer/system-skills/eai-update/SKILL.md +56 -0
  178. package/resources/gofer/system-skills/gofer-documentation/SKILL.md +93 -0
  179. package/resources/gofer/templates/build-map-template.md +64 -0
  180. package/resources/gofer/templates/business-scenarios-template.json +14 -0
  181. package/resources/gofer/templates/ciso-security-summary-template.md +3 -3
  182. package/resources/gofer/templates/context-bundle-template.md +4 -3
  183. package/resources/gofer/templates/contract-pack-template.md +8 -8
  184. package/resources/gofer/templates/cto-architecture-summary-template.md +3 -3
  185. package/resources/gofer/templates/delivery-lineage-template.json +8 -0
  186. package/resources/gofer/templates/eai-preflight-template.md +109 -68
  187. package/resources/gofer/templates/goal-ledger-template.json +1 -1
  188. package/resources/gofer/templates/gofer-model-policy.yaml +28 -6
  189. package/resources/gofer/templates/loop-contract-template.json +3 -1
  190. package/resources/gofer/templates/plan-template.md +8 -7
  191. package/resources/gofer/templates/priority-plan-template.json +29 -0
  192. package/resources/gofer/templates/proposal-review-template.md +6 -3
  193. package/resources/gofer/templates/release-capability-ledger-template.md +24 -0
  194. package/resources/gofer/templates/research-template.md +7 -6
  195. package/resources/gofer/templates/spec-summary-template.md +1 -1
  196. package/resources/gofer/templates/spec-template.md +45 -6
  197. package/resources/gofer/templates/tasks-template.md +12 -3
  198. package/resources/gofer/templates/ui-preview-brief-template.md +55 -5
  199. package/resources/gofer/templates/ui-review-log-template.md +21 -3
  200. package/resources/gofer/templates/ui-show-and-tell-template.md +46 -0
  201. package/resources/gofer/templates/visuals/capability-heatmap-template.md +2 -2
  202. package/resources/gofer/templates/working-backwards-prfaq-template.md +9 -8
  203. package/resources/linked-sources.json +2 -2
  204. package/resources/gofer/agents-skills/0_gofer_start/SKILL.md +0 -1287
  205. package/resources/gofer/agents-skills/0a_problem_validation/SKILL.md +0 -429
  206. package/resources/gofer/agents-skills/10_gofer_cloud/SKILL.md +0 -635
  207. package/resources/gofer/agents-skills/1_gofer_research/SKILL.md +0 -1159
  208. package/resources/gofer/agents-skills/2_gofer_specify/SKILL.md +0 -860
  209. package/resources/gofer/agents-skills/3_gofer_plan/SKILL.md +0 -899
  210. package/resources/gofer/agents-skills/4_gofer_tasks/SKILL.md +0 -760
  211. package/resources/gofer/agents-skills/5_gofer_implement/SKILL.md +0 -944
  212. package/resources/gofer/agents-skills/6_gofer_validate/SKILL.md +0 -2302
  213. package/resources/gofer/agents-skills/7_gofer_save/SKILL.md +0 -423
  214. package/resources/gofer/agents-skills/7a_stakeholder_comms/SKILL.md +0 -508
  215. package/resources/gofer/agents-skills/8_gofer_branding/SKILL.md +0 -315
  216. package/resources/gofer/agents-skills/9_gofer_tests/SKILL.md +0 -558
  217. package/resources/gofer/agents-skills/gofer_bootstrap_workspace/SKILL.md +0 -148
  218. package/resources/gofer/agents-skills/gofer_check_workspace/SKILL.md +0 -119
  219. package/resources/gofer/agents-skills/gofer_constitution/SKILL.md +0 -612
  220. package/resources/gofer/agents-skills/gofer_diagnose/SKILL.md +0 -114
  221. package/resources/gofer/agents-skills/gofer_eai_first_run/SKILL.md +0 -397
  222. package/resources/gofer/agents-skills/gofer_hydrate/SKILL.md +0 -561
  223. package/resources/gofer/agents-skills/gofer_personality/SKILL.md +0 -44
  224. package/resources/gofer/agents-skills/gofer_plan/SKILL.md +0 -40
  225. package/resources/gofer/agents-skills/gofer_side/SKILL.md +0 -45
  226. package/resources/gofer/agents-skills/gofer_spec_summary/SKILL.md +0 -112
  227. package/resources/gofer/agents-skills/gofer_tdd/SKILL.md +0 -112
  228. package/resources/gofer/agents-skills/gofer_vocabulary/SKILL.md +0 -112
  229. package/resources/gofer/agents-skills/gofer_zoom_out/SKILL.md +0 -112
  230. package/resources/gofer/claude-commands/0_gofer_start.md +0 -1282
  231. package/resources/gofer/claude-commands/0a_problem_validation.md +0 -424
  232. package/resources/gofer/claude-commands/10_gofer_cloud.md +0 -630
  233. package/resources/gofer/claude-commands/1_gofer_research.md +0 -1154
  234. package/resources/gofer/claude-commands/2_gofer_specify.md +0 -855
  235. package/resources/gofer/claude-commands/3_gofer_plan.md +0 -894
  236. package/resources/gofer/claude-commands/4_gofer_tasks.md +0 -755
  237. package/resources/gofer/claude-commands/5_gofer_implement.md +0 -939
  238. package/resources/gofer/claude-commands/6_gofer_validate.md +0 -2297
  239. package/resources/gofer/claude-commands/7_gofer_save.md +0 -418
  240. package/resources/gofer/claude-commands/7a_stakeholder_comms.md +0 -503
  241. package/resources/gofer/claude-commands/8_gofer_branding.md +0 -310
  242. package/resources/gofer/claude-commands/9_gofer_tests.md +0 -553
  243. package/resources/gofer/claude-commands/gofer_bootstrap_workspace.md +0 -143
  244. package/resources/gofer/claude-commands/gofer_check_workspace.md +0 -114
  245. package/resources/gofer/claude-commands/gofer_constitution.md +0 -607
  246. package/resources/gofer/claude-commands/gofer_diagnose.md +0 -109
  247. package/resources/gofer/claude-commands/gofer_eai_first_run.md +0 -392
  248. package/resources/gofer/claude-commands/gofer_hydrate.md +0 -556
  249. package/resources/gofer/claude-commands/gofer_personality.md +0 -39
  250. package/resources/gofer/claude-commands/gofer_plan.md +0 -35
  251. package/resources/gofer/claude-commands/gofer_side.md +0 -40
  252. package/resources/gofer/claude-commands/gofer_spec_summary.md +0 -107
  253. package/resources/gofer/claude-commands/gofer_tdd.md +0 -107
  254. package/resources/gofer/claude-commands/gofer_vocabulary.md +0 -107
  255. package/resources/gofer/claude-commands/gofer_zoom_out.md +0 -107
  256. package/resources/gofer/claude-skills/eai-gofer/SKILL.md +0 -56
  257. package/resources/gofer/copilot-prompts/0_gofer_start.prompt.md +0 -1308
  258. package/resources/gofer/copilot-prompts/0a_problem_validation.prompt.md +0 -429
  259. package/resources/gofer/copilot-prompts/10_gofer_cloud.prompt.md +0 -644
  260. package/resources/gofer/copilot-prompts/1_gofer_research.prompt.md +0 -1177
  261. package/resources/gofer/copilot-prompts/2_gofer_specify.prompt.md +0 -878
  262. package/resources/gofer/copilot-prompts/3_gofer_plan.prompt.md +0 -917
  263. package/resources/gofer/copilot-prompts/4_gofer_tasks.prompt.md +0 -778
  264. package/resources/gofer/copilot-prompts/5_gofer_implement.prompt.md +0 -962
  265. package/resources/gofer/copilot-prompts/6_gofer_validate.prompt.md +0 -2310
  266. package/resources/gofer/copilot-prompts/7_gofer_save.prompt.md +0 -433
  267. package/resources/gofer/copilot-prompts/7a_stakeholder_comms.prompt.md +0 -516
  268. package/resources/gofer/copilot-prompts/8_gofer_branding.prompt.md +0 -323
  269. package/resources/gofer/copilot-prompts/9_gofer_tests.prompt.md +0 -566
  270. package/resources/gofer/copilot-prompts/gofer_bootstrap_workspace.prompt.md +0 -161
  271. package/resources/gofer/copilot-prompts/gofer_check_workspace.prompt.md +0 -132
  272. package/resources/gofer/copilot-prompts/gofer_constitution.prompt.md +0 -621
  273. package/resources/gofer/copilot-prompts/gofer_diagnose.prompt.md +0 -127
  274. package/resources/gofer/copilot-prompts/gofer_eai_first_run.prompt.md +0 -410
  275. package/resources/gofer/copilot-prompts/gofer_hydrate.prompt.md +0 -571
  276. package/resources/gofer/copilot-prompts/gofer_personality.prompt.md +0 -57
  277. package/resources/gofer/copilot-prompts/gofer_plan.prompt.md +0 -53
  278. package/resources/gofer/copilot-prompts/gofer_side.prompt.md +0 -58
  279. package/resources/gofer/copilot-prompts/gofer_spec_summary.prompt.md +0 -125
  280. package/resources/gofer/copilot-prompts/gofer_tdd.prompt.md +0 -125
  281. package/resources/gofer/copilot-prompts/gofer_vocabulary.prompt.md +0 -125
  282. package/resources/gofer/copilot-prompts/gofer_zoom_out.prompt.md +0 -125
  283. package/resources/gofer/gemini/commands/gofer/0_gofer_start.md +0 -1282
  284. package/resources/gofer/gemini/commands/gofer/0_gofer_start.toml +0 -2
  285. package/resources/gofer/gemini/commands/gofer/0a_problem_validation.md +0 -424
  286. package/resources/gofer/gemini/commands/gofer/0a_problem_validation.toml +0 -2
  287. package/resources/gofer/gemini/commands/gofer/10_gofer_cloud.md +0 -630
  288. package/resources/gofer/gemini/commands/gofer/10_gofer_cloud.toml +0 -2
  289. package/resources/gofer/gemini/commands/gofer/1_gofer_research.md +0 -1154
  290. package/resources/gofer/gemini/commands/gofer/1_gofer_research.toml +0 -2
  291. package/resources/gofer/gemini/commands/gofer/2_gofer_specify.md +0 -855
  292. package/resources/gofer/gemini/commands/gofer/2_gofer_specify.toml +0 -2
  293. package/resources/gofer/gemini/commands/gofer/3_gofer_plan.md +0 -894
  294. package/resources/gofer/gemini/commands/gofer/3_gofer_plan.toml +0 -2
  295. package/resources/gofer/gemini/commands/gofer/4_gofer_tasks.md +0 -755
  296. package/resources/gofer/gemini/commands/gofer/4_gofer_tasks.toml +0 -2
  297. package/resources/gofer/gemini/commands/gofer/5_gofer_implement.md +0 -939
  298. package/resources/gofer/gemini/commands/gofer/5_gofer_implement.toml +0 -2
  299. package/resources/gofer/gemini/commands/gofer/6_gofer_validate.md +0 -2297
  300. package/resources/gofer/gemini/commands/gofer/6_gofer_validate.toml +0 -2
  301. package/resources/gofer/gemini/commands/gofer/7_gofer_save.md +0 -418
  302. package/resources/gofer/gemini/commands/gofer/7_gofer_save.toml +0 -2
  303. package/resources/gofer/gemini/commands/gofer/7a_stakeholder_comms.md +0 -503
  304. package/resources/gofer/gemini/commands/gofer/7a_stakeholder_comms.toml +0 -2
  305. package/resources/gofer/gemini/commands/gofer/8_gofer_branding.md +0 -310
  306. package/resources/gofer/gemini/commands/gofer/8_gofer_branding.toml +0 -2
  307. package/resources/gofer/gemini/commands/gofer/9_gofer_tests.md +0 -553
  308. package/resources/gofer/gemini/commands/gofer/9_gofer_tests.toml +0 -2
  309. package/resources/gofer/gemini/commands/gofer/gofer_bootstrap_workspace.md +0 -143
  310. package/resources/gofer/gemini/commands/gofer/gofer_bootstrap_workspace.toml +0 -2
  311. package/resources/gofer/gemini/commands/gofer/gofer_check_workspace.md +0 -114
  312. package/resources/gofer/gemini/commands/gofer/gofer_check_workspace.toml +0 -2
  313. package/resources/gofer/gemini/commands/gofer/gofer_constitution.md +0 -607
  314. package/resources/gofer/gemini/commands/gofer/gofer_constitution.toml +0 -2
  315. package/resources/gofer/gemini/commands/gofer/gofer_diagnose.md +0 -109
  316. package/resources/gofer/gemini/commands/gofer/gofer_diagnose.toml +0 -2
  317. package/resources/gofer/gemini/commands/gofer/gofer_eai_first_run.md +0 -392
  318. package/resources/gofer/gemini/commands/gofer/gofer_eai_first_run.toml +0 -2
  319. package/resources/gofer/gemini/commands/gofer/gofer_hydrate.md +0 -556
  320. package/resources/gofer/gemini/commands/gofer/gofer_hydrate.toml +0 -2
  321. package/resources/gofer/gemini/commands/gofer/gofer_personality.md +0 -39
  322. package/resources/gofer/gemini/commands/gofer/gofer_personality.toml +0 -2
  323. package/resources/gofer/gemini/commands/gofer/gofer_plan.md +0 -35
  324. package/resources/gofer/gemini/commands/gofer/gofer_plan.toml +0 -2
  325. package/resources/gofer/gemini/commands/gofer/gofer_side.md +0 -40
  326. package/resources/gofer/gemini/commands/gofer/gofer_side.toml +0 -2
  327. package/resources/gofer/gemini/commands/gofer/gofer_spec_summary.md +0 -107
  328. package/resources/gofer/gemini/commands/gofer/gofer_spec_summary.toml +0 -2
  329. package/resources/gofer/gemini/commands/gofer/gofer_tdd.md +0 -107
  330. package/resources/gofer/gemini/commands/gofer/gofer_tdd.toml +0 -2
  331. package/resources/gofer/gemini/commands/gofer/gofer_vocabulary.md +0 -107
  332. package/resources/gofer/gemini/commands/gofer/gofer_vocabulary.toml +0 -2
  333. package/resources/gofer/gemini/commands/gofer/gofer_zoom_out.md +0 -107
  334. package/resources/gofer/gemini/commands/gofer/gofer_zoom_out.toml +0 -2
  335. package/resources/gofer/github-skills/eai-gofer/SKILL.md +0 -56
  336. package/resources/gofer/system-skills/0_gofer_start/SKILL.md +0 -1287
  337. package/resources/gofer/system-skills/0a_problem_validation/SKILL.md +0 -429
  338. package/resources/gofer/system-skills/10_gofer_cloud/SKILL.md +0 -635
  339. package/resources/gofer/system-skills/1_gofer_research/SKILL.md +0 -1159
  340. package/resources/gofer/system-skills/2_gofer_specify/SKILL.md +0 -860
  341. package/resources/gofer/system-skills/3_gofer_plan/SKILL.md +0 -899
  342. package/resources/gofer/system-skills/4_gofer_tasks/SKILL.md +0 -760
  343. package/resources/gofer/system-skills/5_gofer_implement/SKILL.md +0 -944
  344. package/resources/gofer/system-skills/6_gofer_validate/SKILL.md +0 -2302
  345. package/resources/gofer/system-skills/7_gofer_save/SKILL.md +0 -423
  346. package/resources/gofer/system-skills/7a_stakeholder_comms/SKILL.md +0 -508
  347. package/resources/gofer/system-skills/8_gofer_branding/SKILL.md +0 -315
  348. package/resources/gofer/system-skills/9_gofer_tests/SKILL.md +0 -558
  349. package/resources/gofer/system-skills/gofer_bootstrap_workspace/SKILL.md +0 -148
  350. package/resources/gofer/system-skills/gofer_check_workspace/SKILL.md +0 -119
  351. package/resources/gofer/system-skills/gofer_constitution/SKILL.md +0 -612
  352. package/resources/gofer/system-skills/gofer_diagnose/SKILL.md +0 -114
  353. package/resources/gofer/system-skills/gofer_eai_first_run/SKILL.md +0 -397
  354. package/resources/gofer/system-skills/gofer_hydrate/SKILL.md +0 -561
  355. package/resources/gofer/system-skills/gofer_personality/SKILL.md +0 -44
  356. package/resources/gofer/system-skills/gofer_plan/SKILL.md +0 -40
  357. package/resources/gofer/system-skills/gofer_side/SKILL.md +0 -45
  358. package/resources/gofer/system-skills/gofer_spec_summary/SKILL.md +0 -112
  359. package/resources/gofer/system-skills/gofer_tdd/SKILL.md +0 -112
  360. package/resources/gofer/system-skills/gofer_vocabulary/SKILL.md +0 -112
  361. package/resources/gofer/system-skills/gofer_zoom_out/SKILL.md +0 -112
  362. 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
+ }