@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
@@ -135,7 +135,7 @@ Gofer consists of three coordinated components:
135
135
  - Manages UI (tree views, commands, progress panels)
136
136
  - Launches Language Server as child process
137
137
  - Auto-creates provider-neutral `.vscode/mcp.json` for VS Code/Copilot, Claude
138
- Code, Codex, Gemini, and compatible agent apps
138
+ Code, Codex, Google Antigravity, Grok Build, and compatible agent apps
139
139
 
140
140
  **Language Server** (`/language-server/`):
141
141
 
@@ -333,10 +333,11 @@ and MUST NOT be conflated.
333
333
  canonical Gofer stages MUST be ≤2048 bytes (≤2KB). Codex preloads ~2% of
334
334
  context for skill name+description text; over-budget triggers a global drop of
335
335
  ALL skill descriptions, not per-bundle eviction (NFR-004, SC-006).
336
- - **Per-CLI parity**: Numbered stages, utilities, and helper commands are
337
- emitted to Claude, Codex, Gemini, Copilot, VS Code, GitHub prompts, agent
338
- skills, and system skills unless their frontmatter explicitly says otherwise
339
- (FR-007, SC-012).
336
+ - **Per-host parity**: Numbered stages, utilities, and helper commands are
337
+ emitted for Claude, Codex, Copilot, Google Antigravity, Grok Build, and VS
338
+ Code through their configured command, prompt, agent-skill, and system-skill
339
+ formats unless frontmatter explicitly says otherwise. The `.gemini/` emitter
340
+ remains legacy file-format compatibility only (FR-007, SC-012).
340
341
  - **Flat tree**: Codex skill files emit at depth ≤2 from `.agents/skills/`; no
341
342
  `<tenant>/<stage>/` nesting (FR-008).
342
343
  - **No fictional config keys**: The official Codex disable knob is per-skill
@@ -370,8 +371,9 @@ configured CLI surfaces:
370
371
  - `extension/resources/claude-prompts/` (Claude-mirror, VSCode)
371
372
  - `extension/resources/copilot-prompts/` (Copilot)
372
373
  - `.github/prompts/` (GitHub Prompts)
373
- - `.agents/skills/gofer/` (Codex)
374
- - `.gemini/commands/gofer/` (Gemini)
374
+ - `.agents/skills/gofer/` (Codex and Google Antigravity)
375
+ - `.grok/skills/` (Grok Build)
376
+ - `.gemini/commands/gofer/` (legacy Gemini file-format compatibility)
375
377
  - `.system/skills/` (system)
376
378
 
377
379
  ### Anti-drift Guard
@@ -67,7 +67,7 @@ surfaces:
67
67
  reasoningEffort: high
68
68
  contextWindowTokens: 1050000
69
69
  useFor: broad frontier reasoning, complex architecture, final arbitration
70
- gemini:
70
+ antigravity:
71
71
  simple:
72
72
  model: gemini-3.1-flash-lite
73
73
  contextWindowTokens: 1000000
@@ -95,3 +95,25 @@ surfaces:
95
95
  model: "Best available in picker: GPT-5.3-Codex, GPT-5.5, Claude Opus, or Gemini Pro"
96
96
  useFor: explicit hard review, security, architecture, or release gates
97
97
  note: Copilot model availability depends on plan, organization policy, client, and feature surface.
98
+ grok:
99
+ simple:
100
+ model: Provider default
101
+ useFor: quick Grok Build questions, summaries, and low-risk edits
102
+ medium:
103
+ model: Provider default
104
+ useFor: normal Gofer stage prompts and implementation work
105
+ hard:
106
+ model: Best available in picker
107
+ useFor: explicit hard review, architecture, security, and release validation
108
+ note: Grok model availability depends on account, client, and provider policy.
109
+ vscode:
110
+ simple:
111
+ model: Auto
112
+ useFor: quick editor questions, completion, and low-risk fixes
113
+ medium:
114
+ model: Auto
115
+ useFor: normal Gofer stage prompts in the VS Code host
116
+ hard:
117
+ model: Best available in picker
118
+ useFor: explicit hard review, architecture, security, and release validation
119
+ note: VS Code model availability depends on installed extensions and organization policy.
@@ -6,37 +6,6 @@ correction.
6
6
 
7
7
  ---
8
8
 
9
- ## 2026-08-12: Trace the actual client before assigning ownership
10
-
11
- **Incident**: A production workspace-member invitation failed from an EAI CLI
12
- command, but the first explanation treated the request as though it originated
13
- in Admin Portal.
14
-
15
- **Root cause**: The downstream PublicAPI, AdminAPI, AzureAPI, and Microsoft
16
- Graph path was identified correctly, but the initiating client and its request
17
- payload were not established first. The CLI's email-based `user role set`
18
- command sent only email and role, even though its lower-level API client already
19
- supported complete invitation details.
20
-
21
- **Fix**: Added optional first name, last name, message, and redirect URI flags to
22
- the email-based role-assignment command and retained the existing short form.
23
-
24
- **Lessons**:
25
-
26
- - Establish the initiating surface from the exact command, request ID, and
27
- request payload before attributing a failure to a UI or service.
28
- - A client-side workaround is useful proof of a missing downstream default; it
29
- does not remove the need to fix the service contract.
30
- - Keep existing-user role assignment simple while allowing new-user invitations
31
- to supply every field the identity provider requires.
32
-
33
- **References**:
34
-
35
- - `.specify/specs/v4-member-invite-e2e-crud/diagnose-report.md`
36
- - `tests/integration/user.test.ts`
37
-
38
- ---
39
-
40
9
  ## 2026-04-25: Codex skill-budget hygiene
41
10
 
42
11
  **Incident**: Codex CLI logged `Exceeded skills context budget of 2%` and
@@ -42,7 +42,7 @@ export const CANONICAL_DESCRIPTIONS = {
42
42
  'gofer:bootstrap-workspace':
43
43
  'Create or update the repo-owned Gofer scaffold.',
44
44
  'gofer:eai-first-run':
45
- 'Check EAI CLI, login, workspace, template, and Gofer readiness.',
45
+ 'Check EAI CLI, login, tenant, template, and Gofer readiness.',
46
46
  'gofer:vocabulary':
47
47
  'Extract domain terms into a canonical glossary.',
48
48
  'gofer:diagnose':
@@ -35,10 +35,7 @@ function readText(root, relativePath) {
35
35
 
36
36
  function collectVersions(root) {
37
37
  const codexPluginManifest = readJson(root, '.codex-plugin/plugin.json');
38
- const releaseAssetVersion =
39
- /eai-gofer-agent-plugin-([^/]+)\.zip$/.exec(
40
- codexPluginManifest.gofer?.releaseAsset ?? ''
41
- )?.[1] ?? 'missing';
38
+ const codexMarketplace = readJson(root, '.agents/plugins/marketplace.json');
42
39
 
43
40
  return [
44
41
  {
@@ -72,9 +69,9 @@ function collectVersions(root) {
72
69
  version: codexPluginManifest.version,
73
70
  },
74
71
  {
75
- name: 'Codex plugin release asset',
76
- path: '.codex-plugin/plugin.json#gofer.releaseAsset',
77
- version: releaseAssetVersion,
72
+ name: 'Codex plugin marketplace',
73
+ path: '.agents/plugins/marketplace.json',
74
+ version: codexMarketplace.plugins?.[0]?.version ?? 'missing',
78
75
  },
79
76
  {
80
77
  name: 'workspace version marker',
@@ -0,0 +1,156 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { promises as fs } from 'node:fs';
3
+ import path from 'node:path';
4
+
5
+ const FORBIDDEN = ['AdminAPI', 'ResourceAPI', 'Configurator', 'Authz', 'AzureAPI', 'AICore', 'GeoService', 'Infra2025', 'eai-testing-dev', 'tech-docs'];
6
+ const PHASES = {
7
+ P1: { name: 'Research', stage: 'intent', kind: 'artifact', preferred: ['research.md', 'discovery.md', 'problem-brief.md'] },
8
+ P2: { name: 'Specify', stage: 'requirements', kind: 'requirement', preferred: ['spec.md', 'spec-summary.md', 'assumptions.md'] },
9
+ P3: { name: 'Plan', stage: 'architecture', kind: 'architecture', preferred: ['plan.md', 'data-model.md', 'quickstart.md'] },
10
+ P4: { name: 'Tasks', stage: 'delivery', kind: 'work-order', preferred: ['tasks.md', 'traceability.md', 'issues.md'] },
11
+ P5: { name: 'Implement', stage: 'delivery', kind: 'artifact', preferred: ['implementation-status.md', 'tdd-session.md', 'audit-history.md'] },
12
+ P6: { name: 'Validate', stage: 'validation', kind: 'test', preferred: ['validation.md', 'validation-report.md', 'engineering-review-report.md'] },
13
+ Feature: { name: 'Artifact', stage: 'requirements', kind: 'documentation-file', preferred: [] },
14
+ };
15
+
16
+ const NAMES = {
17
+ P1: new Set(['research', 'discovery', 'problem-brief', 'working-backwards-prfaq', 'business-analysis', 'market-analysis', 'proposal-review', 'context-bundle', 'reuse-scan', 'build-map', 'eai-preflight', 'ui-preview-brief', 'execution-profile']),
18
+ P2: new Set(['spec', 'spec-summary', 'glossary', 'assumptions', 'contract-pack', 'business-owner-summary']),
19
+ P3: new Set(['plan', 'data-model', 'quickstart', 'cto-architecture-summary', 'service-fit-matrix', 'ui-review-log', 'ui-show-and-tell']),
20
+ P4: new Set(['tasks', 'traceability', 'issues', 'workflow-dag', 'loop-contract']),
21
+ P5: new Set(['implementation-status', 'implementation-skill-evidence', 'tdd-session', 'diagnose-report', 'doc-consistency-scan', 'audit-history', 'session-checkpoint']),
22
+ P6: new Set(['validation', 'validation-report', 'engineering-review-report', 'blast-radius-report', 'remediation-report', 'goal-rebaseline-report', 'loop-audit-report']),
23
+ };
24
+
25
+ function stem(relativePath) {
26
+ return path.posix.basename(relativePath, path.posix.extname(relativePath)).toLowerCase();
27
+ }
28
+
29
+ function phaseFor(relativePath) {
30
+ const name = stem(relativePath);
31
+ if (NAMES.P1.has(name)) return 'P1';
32
+ if (NAMES.P2.has(name) || relativePath.startsWith('checklists/')) return 'P2';
33
+ if (NAMES.P3.has(name) || relativePath.startsWith('contracts/') || relativePath.startsWith('visuals/') || relativePath.startsWith('sequence-diagrams/')) return 'P3';
34
+ if (NAMES.P4.has(name)) return 'P4';
35
+ if (NAMES.P5.has(name)) return 'P5';
36
+ if (NAMES.P6.has(name)) return 'P6';
37
+ return 'Feature';
38
+ }
39
+
40
+ function titleFor(relativePath, content) {
41
+ const frontmatter = content.match(/^---\s*[\r\n]+[\s\S]*?^title:\s*["']?([^\r\n"']+)/m)?.[1];
42
+ const heading = content.match(/^#\s+(.+)$/m)?.[1];
43
+ return (frontmatter ?? heading ?? stem(relativePath).replace(/[-_]+/g, ' ')).trim().slice(0, 120);
44
+ }
45
+
46
+ function outcomeFor(heading) {
47
+ if (/\b(rejected|declined|not selected)\b/i.test(heading)) return 'rejected';
48
+ if (/\bsuperseded\b/i.test(heading)) return 'superseded';
49
+ if (/\b(selected approach|approved direction|chosen option|recommendation|final decision|architecture decision)\b/i.test(heading)) return 'selected';
50
+ return undefined;
51
+ }
52
+
53
+ function summaryFor(value) {
54
+ const summary = value.replace(/```[\s\S]*?```/g, ' ').replace(/\[([^\]]+)\]\([^)]+\)/g, '$1').replace(/^[\s]*[-+*]\s+/gm, '').replace(/[#>*_`|]/g, ' ').replace(/\s+/g, ' ').trim();
55
+ return summary ? summary.slice(0, 320) : undefined;
56
+ }
57
+
58
+ function decisionsFor(content) {
59
+ const headings = [...content.matchAll(/^#{1,6}\s+(.+)$/gm)];
60
+ const decisions = [];
61
+ for (let index = 0; index < headings.length; index += 1) {
62
+ const match = headings[index];
63
+ const heading = match[1].trim();
64
+ if (!/\b(decision|decisions|selected approach|approved direction|chosen option|recommendation|rejected alternative|declined option|superseded decision)\b/i.test(heading)) continue;
65
+ const bodyStart = (match.index ?? 0) + match[0].length;
66
+ const bodyEnd = headings[index + 1]?.index ?? content.length;
67
+ decisions.push({ heading, decisionOutcome: outcomeFor(heading), summary: summaryFor(content.slice(bodyStart, bodyEnd)) });
68
+ }
69
+ return decisions.slice(0, 30);
70
+ }
71
+
72
+ function id(prefix, value) {
73
+ return `${prefix}:${createHash('sha256').update(value).digest('hex').slice(0, 16)}`;
74
+ }
75
+
76
+ async function listArtifacts(folder, prefix = '') {
77
+ const entries = await fs.readdir(folder, { withFileTypes: true });
78
+ const artifacts = [];
79
+ for (const entry of entries) {
80
+ const relativePath = prefix ? `${prefix}/${entry.name}` : entry.name;
81
+ const absolutePath = path.join(folder, entry.name);
82
+ if (entry.isDirectory()) artifacts.push(...(await listArtifacts(absolutePath, relativePath)));
83
+ else if (/\.(md|json)$/i.test(entry.name) && !/^delivery-lineage\.(md|json)$/i.test(entry.name)) {
84
+ const content = await fs.readFile(absolutePath, 'utf8');
85
+ const leaked = FORBIDDEN.find((term) => content.toLowerCase().includes(term.toLowerCase()));
86
+ if (leaked) throw new Error(`Customer feature artifact ${relativePath} contains forbidden internal term ${leaked}.`);
87
+ artifacts.push({ relativePath, content });
88
+ }
89
+ }
90
+ return artifacts;
91
+ }
92
+
93
+ function sortArtifacts(code, left, right) {
94
+ const preferred = PHASES[code].preferred;
95
+ const leftRank = preferred.indexOf(left.relativePath);
96
+ const rightRank = preferred.indexOf(right.relativePath);
97
+ if (leftRank >= 0 || rightRank >= 0) {
98
+ if (leftRank < 0) return 1;
99
+ if (rightRank < 0) return -1;
100
+ return leftRank - rightRank;
101
+ }
102
+ return left.relativePath.localeCompare(right.relativePath);
103
+ }
104
+
105
+ /** Enriches CLI/plugin Mermaid output with the complete customer-safe P1-P6 corpus. */
106
+ export async function augmentCustomerLineageCorpus(lineage, inputPath) {
107
+ const marker = `${path.sep}.specify${path.sep}`;
108
+ const markerIndex = inputPath.indexOf(marker);
109
+ if (markerIndex < 0) return lineage;
110
+ const repositoryRoot = inputPath.slice(0, markerIndex);
111
+ const repository = path.basename(repositoryRoot);
112
+ const featureFolder = path.dirname(inputPath);
113
+ const featureRoot = path.relative(repositoryRoot, featureFolder).split(path.sep).join('/');
114
+ const nodes = lineage.nodes.map((node) => ({ ...node }));
115
+ const edges = lineage.edges.map((edge) => ({ ...edge }));
116
+ const nodeBySource = new Map(nodes.filter((node) => node.source?.repository === repository).map((node) => [node.source.path, node.id]));
117
+ const edgeIds = new Set(edges.map((edge) => edge.id));
118
+ const groups = new Map();
119
+ const addEdge = (edge) => {
120
+ if (!edgeIds.has(edge.id)) {
121
+ edgeIds.add(edge.id);
122
+ edges.push(edge);
123
+ }
124
+ };
125
+
126
+ for (const artifact of await listArtifacts(featureFolder)) {
127
+ const code = phaseFor(artifact.relativePath);
128
+ const phase = PHASES[code];
129
+ const sourcePath = `${featureRoot}/${artifact.relativePath}`;
130
+ let nodeId = nodeBySource.get(sourcePath);
131
+ if (!nodeId) {
132
+ nodeId = id('corpus', sourcePath);
133
+ nodes.push({ id: nodeId, kind: phase.kind, label: `${code} ${phase.name} · ${titleFor(artifact.relativePath, artifact.content)}`, stage: phase.stage, visibility: 'customer', status: 'current', source: { repository, path: sourcePath } });
134
+ nodeBySource.set(sourcePath, nodeId);
135
+ }
136
+ const items = groups.get(code) ?? [];
137
+ items.push({ nodeId, relativePath: artifact.relativePath });
138
+ groups.set(code, items);
139
+ for (const decision of decisionsFor(artifact.content)) {
140
+ const decisionId = id('decision', `${sourcePath}#${decision.heading}`);
141
+ if (!nodes.some((node) => node.id === decisionId)) nodes.push({ id: decisionId, kind: 'decision', label: `${code} Decision · ${decision.heading}`, stage: phase.stage, visibility: 'customer', status: 'current', decisionOutcome: decision.decisionOutcome, summary: decision.summary, source: { repository, path: sourcePath, anchor: decision.heading } });
142
+ addEdge({ id: id('corpus-edge', `${nodeId}:records-decision:${decisionId}`), source: nodeId, target: decisionId, relation: 'records-decision', visibility: 'customer', status: 'current' });
143
+ }
144
+ }
145
+
146
+ let previousAnchor;
147
+ for (const code of ['P1', 'P2', 'P3', 'P4', 'P5', 'P6', 'Feature']) {
148
+ const items = (groups.get(code) ?? []).sort((left, right) => sortArtifacts(code, left, right));
149
+ const anchor = items[0]?.nodeId;
150
+ if (!anchor) continue;
151
+ if (previousAnchor) addEdge({ id: id('corpus-edge', `${previousAnchor}:informs:${anchor}`), source: previousAnchor, target: anchor, relation: 'informs', visibility: 'customer', status: 'current' });
152
+ for (const item of items.slice(1)) addEdge({ id: id('corpus-edge', `${anchor}:supports:${item.nodeId}`), source: anchor, target: item.nodeId, relation: 'supports', visibility: 'customer', status: 'current' });
153
+ previousAnchor = anchor;
154
+ }
155
+ return { ...lineage, nodes, edges };
156
+ }