@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.
- package/package.json +3 -3
- package/resources/deploy/eai-app-template/producer-pin.json +5 -5
- package/resources/deploy/eai-app-template/tests/source-unknown-deployment-evidence.test.mjs +2141 -1
- package/resources/gofer/.gofer-version +4 -357
- package/resources/gofer/agents-skills/eai/SKILL.md +365 -0
- package/resources/gofer/agents-skills/eai-update/SKILL.md +56 -0
- package/resources/gofer/agents-skills/gofer-documentation/SKILL.md +93 -0
- package/resources/gofer/bash-scripts/create-new-feature.sh +3 -1
- package/resources/gofer/bash-scripts/sync-implementation-status.sh +4 -3
- package/resources/gofer/bash-scripts/update-agent-context.sh +7 -8
- package/resources/gofer/bash-scripts/validate-artifact.sh +10 -6
- package/resources/gofer/bash-scripts/verify-object-type-routing-workspace.sh +184 -0
- package/resources/gofer/claude-commands/eai-update.md +46 -0
- package/resources/gofer/claude-commands/eai.md +355 -0
- package/resources/gofer/claude-skills/eai/SKILL.md +365 -0
- package/resources/gofer/claude-skills/eai-update/SKILL.md +56 -0
- package/resources/gofer/claude-skills/gofer-documentation/SKILL.md +93 -0
- package/resources/gofer/commands/0_gofer_start.md +440 -99
- package/resources/gofer/commands/0a_problem_validation.md +187 -27
- package/resources/gofer/commands/10_gofer_cloud.md +183 -23
- package/resources/gofer/commands/1_gofer_research.md +239 -30
- package/resources/gofer/commands/2_gofer_specify.md +239 -35
- package/resources/gofer/commands/3_gofer_plan.md +259 -43
- package/resources/gofer/commands/4_gofer_tasks.md +401 -81
- package/resources/gofer/commands/5_gofer_implement.md +375 -84
- package/resources/gofer/commands/6_gofer_validate.md +284 -53
- package/resources/gofer/commands/7_gofer_save.md +187 -26
- package/resources/gofer/commands/7a_stakeholder_comms.md +183 -23
- package/resources/gofer/commands/8_gofer_branding.md +183 -23
- package/resources/gofer/commands/9_gofer_tests.md +212 -23
- package/resources/gofer/commands/gofer_bootstrap_workspace.md +121 -8
- package/resources/gofer/commands/gofer_check_workspace.md +123 -8
- package/resources/gofer/commands/gofer_constitution.md +183 -23
- package/resources/gofer/commands/gofer_diagnose.md +183 -23
- package/resources/gofer/commands/gofer_eai_first_run.md +254 -25
- package/resources/gofer/commands/gofer_hydrate.md +183 -23
- package/resources/gofer/commands/gofer_personality.md +117 -6
- package/resources/gofer/commands/gofer_plan.md +117 -6
- package/resources/gofer/commands/gofer_side.md +117 -6
- package/resources/gofer/commands/gofer_spec_summary.md +183 -23
- package/resources/gofer/commands/gofer_tdd.md +183 -23
- package/resources/gofer/commands/gofer_vocabulary.md +185 -25
- package/resources/gofer/commands/gofer_zoom_out.md +183 -23
- package/resources/gofer/config/typesafe-learning-review.json +16 -0
- package/resources/gofer/config/typesafe-semantic-review.json +9 -0
- package/resources/gofer/copilot-instructions/gofer-cost.instructions.md +15 -6
- package/resources/gofer/copilot-instructions/typescript.instructions.md +1 -1
- package/resources/gofer/copilot-prompts/eai-update.prompt.md +58 -0
- package/resources/gofer/copilot-prompts/eai.prompt.md +367 -0
- package/resources/gofer/gemini/commands/gofer/eai-update.md +22 -0
- package/resources/gofer/gemini/commands/gofer/eai-update.toml +2 -0
- package/resources/gofer/gemini/commands/gofer/eai.md +357 -0
- package/resources/gofer/gemini/commands/gofer/eai.toml +2 -0
- package/resources/gofer/gemini/commands/gofer/manifest.json +3 -27
- package/resources/gofer/gemini/extension.json +4 -4
- package/resources/gofer/github-agents/eai.agent.md +83 -0
- package/resources/gofer/github-agents/gofer-business.agent.md +73 -4
- package/resources/gofer/github-agents/gofer-implement.agent.md +71 -2
- package/resources/gofer/github-agents/gofer-plan.agent.md +72 -2
- package/resources/gofer/github-agents/gofer-research.agent.md +72 -2
- package/resources/gofer/github-agents/gofer-validate.agent.md +72 -2
- package/resources/gofer/github-skills/eai/SKILL.md +365 -0
- package/resources/gofer/github-skills/eai-update/SKILL.md +56 -0
- package/resources/gofer/github-skills/gofer-documentation/SKILL.md +93 -0
- package/resources/gofer/grok-skills/eai/SKILL.md +267 -14
- package/resources/gofer/grok-skills/eai-update/SKILL.md +56 -0
- package/resources/gofer/hook-scripts/user-prompt-submit.mjs +58 -13
- package/resources/gofer/instruction-templates/base/agents-base.md +8 -4
- package/resources/gofer/instruction-templates/gofer/gofer-claude.md +7 -5
- package/resources/gofer/instruction-templates/gofer/gofer-copilot.md +10 -8
- package/resources/gofer/memory/constitution.md +9 -7
- package/resources/gofer/memory/gofer-model-policy.yaml +23 -1
- package/resources/gofer/memory/lessons.md +0 -31
- package/resources/gofer/node-scripts/canonical-descriptions.mjs +1 -1
- package/resources/gofer/node-scripts/check-version-alignment.mjs +4 -7
- package/resources/gofer/node-scripts/delivery-lineage-corpus.mjs +156 -0
- package/resources/gofer/node-scripts/generate-commands.mjs +1073 -265
- package/resources/gofer/node-scripts/gofer-acceptance-check.mjs +143 -0
- package/resources/gofer/node-scripts/gofer-agent-catalog.mjs +271 -0
- package/resources/gofer/node-scripts/gofer-benchmark-executor.mjs +123 -0
- package/resources/gofer/node-scripts/gofer-benchmark-sign.mjs +62 -0
- package/resources/gofer/node-scripts/gofer-benchmark-signer.mjs +89 -0
- package/resources/gofer/node-scripts/gofer-benchmark.mjs +76 -0
- package/resources/gofer/node-scripts/gofer-blocker-control.mjs +274 -0
- package/resources/gofer/node-scripts/gofer-claude-adapter.mjs +154 -0
- package/resources/gofer/node-scripts/gofer-closed-loop-audit.mjs +19 -2
- package/resources/gofer/node-scripts/gofer-delivery-check.mjs +121 -0
- package/resources/gofer/node-scripts/gofer-encrypted-key.mjs +58 -0
- package/resources/gofer/node-scripts/gofer-execution-metrics.mjs +477 -0
- package/resources/gofer/node-scripts/gofer-execution-recovery.mjs +334 -0
- package/resources/gofer/node-scripts/gofer-grok-adapter.mjs +184 -0
- package/resources/gofer/node-scripts/gofer-heldout-corpus.mjs +73 -0
- package/resources/gofer/node-scripts/gofer-heldout-snapshot.mjs +286 -0
- package/resources/gofer/node-scripts/gofer-heldout-verifier.mjs +211 -0
- package/resources/gofer/node-scripts/gofer-host-capability.mjs +335 -0
- package/resources/gofer/node-scripts/gofer-independent-reviewer.mjs +130 -0
- package/resources/gofer/node-scripts/gofer-live-routing.mjs +109 -0
- package/resources/gofer/node-scripts/gofer-local-capability-issuer.mjs +71 -0
- package/resources/gofer/node-scripts/gofer-local-isolation.mjs +175 -0
- package/resources/gofer/node-scripts/gofer-local-settings-cleanup.mjs +388 -0
- package/resources/gofer/node-scripts/gofer-loop-audit.mjs +54 -3
- package/resources/gofer/node-scripts/gofer-native-adapter.mjs +567 -0
- package/resources/gofer/node-scripts/gofer-native-benchmark-dispatch.mjs +145 -0
- package/resources/gofer/node-scripts/gofer-native-runtime.mjs +169 -0
- package/resources/gofer/node-scripts/gofer-pre-edit-check.mjs +204 -0
- package/resources/gofer/node-scripts/gofer-priority-check.mjs +214 -0
- package/resources/gofer/node-scripts/gofer-response-check.mjs +56 -0
- package/resources/gofer/node-scripts/gofer-reviewed-learning.mjs +1232 -0
- package/resources/gofer/node-scripts/gofer-run-verified-task.mjs +330 -0
- package/resources/gofer/node-scripts/gofer-runtime-ledger.mjs +289 -0
- package/resources/gofer/node-scripts/gofer-semantic-drift.mjs +584 -0
- package/resources/gofer/node-scripts/gofer-surface-update.mjs +1178 -0
- package/resources/gofer/node-scripts/gofer-trust-bootstrap.mjs +77 -0
- package/resources/gofer/node-scripts/gofer-trusted-benchmark.mjs +102 -0
- package/resources/gofer/node-scripts/gofer-trusted-evaluator.mjs +274 -0
- package/resources/gofer/node-scripts/gofer-tty-prompt.mjs +34 -0
- package/resources/gofer/node-scripts/gofer-typesafe-credentials.mjs +435 -0
- package/resources/gofer/node-scripts/gofer-ui-preview.mjs +1212 -0
- package/resources/gofer/node-scripts/gofer-verified-execution.mjs +484 -0
- package/resources/gofer/node-scripts/gofer-verifier-key-ceremony.mjs +101 -0
- package/resources/gofer/node-scripts/gofer-worktree-layout.mjs +32 -0
- package/resources/gofer/node-scripts/object-type-routing-phase-bundle.mjs +360 -0
- package/resources/gofer/node-scripts/package-agent-plugin.mjs +574 -82
- package/resources/gofer/node-scripts/parse-stage-command.mjs +1 -1
- package/resources/gofer/node-scripts/render-delivery-lineage.mjs +178 -0
- package/resources/gofer/node-scripts/sync-extension-resources.mjs +78 -2
- package/resources/gofer/node-scripts/validate-object-type-identifiers.mjs +767 -0
- package/resources/gofer/node-scripts/validate-object-type-routing-workspace.mjs +1325 -0
- package/resources/gofer/node-scripts/validate-v4-resource-contract.d.mts +44 -0
- package/resources/gofer/node-scripts/validate-v4-resource-contract.mjs +957 -0
- package/resources/gofer/node-scripts/workspace-bootstrap-lib.mjs +685 -116
- package/resources/gofer/references/agent-catalog.json +126 -0
- package/resources/gofer/references/blocker-mediation.md +156 -0
- package/resources/gofer/references/business-updates-and-goal-checks.md +109 -0
- package/resources/gofer/references/delivery-lineage.md +48 -0
- package/resources/gofer/references/mvp-capability-validation.md +102 -0
- package/resources/gofer/references/platform/README.md +1 -1
- package/resources/gofer/references/platform/eai-app-template.md +15 -13
- package/resources/gofer/references/platform/eai-auth-access.md +104 -0
- package/resources/gofer/references/platform/eai-config-driven-ui.md +5 -5
- package/resources/gofer/references/platform/eai-error-catalog.yaml +77 -19
- package/resources/gofer/references/platform/eai-repo-contract.md +61 -23
- package/resources/gofer/references/platform/eai-service-patterns.md +102 -105
- package/resources/gofer/references/platform/eai.md +44 -8
- package/resources/gofer/references/platform/vertical-template.md +10 -9
- package/resources/gofer/references/priority-outcome-protection.md +152 -0
- package/resources/gofer/references/verified-agent-execution.md +179 -0
- package/resources/gofer/schemas/gofer-learning-trace-v1.json +70 -0
- package/resources/gofer/specify-commands/0_gofer_start.md +440 -99
- package/resources/gofer/specify-commands/0a_problem_validation.md +187 -27
- package/resources/gofer/specify-commands/10_gofer_cloud.md +183 -23
- package/resources/gofer/specify-commands/1_gofer_research.md +239 -30
- package/resources/gofer/specify-commands/2_gofer_specify.md +239 -35
- package/resources/gofer/specify-commands/3_gofer_plan.md +259 -43
- package/resources/gofer/specify-commands/4_gofer_tasks.md +401 -81
- package/resources/gofer/specify-commands/5_gofer_implement.md +375 -84
- package/resources/gofer/specify-commands/6_gofer_validate.md +284 -53
- package/resources/gofer/specify-commands/7_gofer_save.md +187 -26
- package/resources/gofer/specify-commands/7a_stakeholder_comms.md +183 -23
- package/resources/gofer/specify-commands/8_gofer_branding.md +183 -23
- package/resources/gofer/specify-commands/9_gofer_tests.md +212 -23
- package/resources/gofer/specify-commands/gofer_bootstrap_workspace.md +121 -8
- package/resources/gofer/specify-commands/gofer_check_workspace.md +123 -8
- package/resources/gofer/specify-commands/gofer_constitution.md +183 -23
- package/resources/gofer/specify-commands/gofer_diagnose.md +183 -23
- package/resources/gofer/specify-commands/gofer_eai_first_run.md +254 -25
- package/resources/gofer/specify-commands/gofer_hydrate.md +183 -23
- package/resources/gofer/specify-commands/gofer_personality.md +117 -6
- package/resources/gofer/specify-commands/gofer_plan.md +117 -6
- package/resources/gofer/specify-commands/gofer_side.md +117 -6
- package/resources/gofer/specify-commands/gofer_spec_summary.md +183 -23
- package/resources/gofer/specify-commands/gofer_tdd.md +183 -23
- package/resources/gofer/specify-commands/gofer_vocabulary.md +185 -25
- package/resources/gofer/specify-commands/gofer_zoom_out.md +183 -23
- package/resources/gofer/specify-config/object-type-routing.json +24 -0
- package/resources/gofer/specify-config/typesafe-learning-review.json +16 -0
- package/resources/gofer/specify-config/typesafe-semantic-review.json +9 -0
- package/resources/gofer/system-skills/eai/SKILL.md +365 -0
- package/resources/gofer/system-skills/eai-update/SKILL.md +56 -0
- package/resources/gofer/system-skills/gofer-documentation/SKILL.md +93 -0
- package/resources/gofer/templates/build-map-template.md +64 -0
- package/resources/gofer/templates/business-scenarios-template.json +14 -0
- package/resources/gofer/templates/ciso-security-summary-template.md +3 -3
- package/resources/gofer/templates/context-bundle-template.md +4 -3
- package/resources/gofer/templates/contract-pack-template.md +8 -8
- package/resources/gofer/templates/cto-architecture-summary-template.md +3 -3
- package/resources/gofer/templates/delivery-lineage-template.json +8 -0
- package/resources/gofer/templates/eai-preflight-template.md +109 -68
- package/resources/gofer/templates/goal-ledger-template.json +1 -1
- package/resources/gofer/templates/gofer-model-policy.yaml +28 -6
- package/resources/gofer/templates/loop-contract-template.json +3 -1
- package/resources/gofer/templates/plan-template.md +8 -7
- package/resources/gofer/templates/priority-plan-template.json +29 -0
- package/resources/gofer/templates/proposal-review-template.md +6 -3
- package/resources/gofer/templates/release-capability-ledger-template.md +24 -0
- package/resources/gofer/templates/research-template.md +7 -6
- package/resources/gofer/templates/spec-summary-template.md +1 -1
- package/resources/gofer/templates/spec-template.md +45 -6
- package/resources/gofer/templates/tasks-template.md +12 -3
- package/resources/gofer/templates/ui-preview-brief-template.md +55 -5
- package/resources/gofer/templates/ui-review-log-template.md +21 -3
- package/resources/gofer/templates/ui-show-and-tell-template.md +46 -0
- package/resources/gofer/templates/visuals/capability-heatmap-template.md +2 -2
- package/resources/gofer/templates/working-backwards-prfaq-template.md +9 -8
- package/resources/linked-sources.json +4 -4
- package/resources/gofer/agents-skills/0_gofer_start/SKILL.md +0 -1287
- package/resources/gofer/agents-skills/0a_problem_validation/SKILL.md +0 -429
- package/resources/gofer/agents-skills/10_gofer_cloud/SKILL.md +0 -635
- package/resources/gofer/agents-skills/1_gofer_research/SKILL.md +0 -1159
- package/resources/gofer/agents-skills/2_gofer_specify/SKILL.md +0 -860
- package/resources/gofer/agents-skills/3_gofer_plan/SKILL.md +0 -899
- package/resources/gofer/agents-skills/4_gofer_tasks/SKILL.md +0 -760
- package/resources/gofer/agents-skills/5_gofer_implement/SKILL.md +0 -944
- package/resources/gofer/agents-skills/6_gofer_validate/SKILL.md +0 -2302
- package/resources/gofer/agents-skills/7_gofer_save/SKILL.md +0 -423
- package/resources/gofer/agents-skills/7a_stakeholder_comms/SKILL.md +0 -508
- package/resources/gofer/agents-skills/8_gofer_branding/SKILL.md +0 -315
- package/resources/gofer/agents-skills/9_gofer_tests/SKILL.md +0 -558
- package/resources/gofer/agents-skills/gofer_bootstrap_workspace/SKILL.md +0 -148
- package/resources/gofer/agents-skills/gofer_check_workspace/SKILL.md +0 -119
- package/resources/gofer/agents-skills/gofer_constitution/SKILL.md +0 -612
- package/resources/gofer/agents-skills/gofer_diagnose/SKILL.md +0 -114
- package/resources/gofer/agents-skills/gofer_eai_first_run/SKILL.md +0 -397
- package/resources/gofer/agents-skills/gofer_hydrate/SKILL.md +0 -561
- package/resources/gofer/agents-skills/gofer_personality/SKILL.md +0 -44
- package/resources/gofer/agents-skills/gofer_plan/SKILL.md +0 -40
- package/resources/gofer/agents-skills/gofer_side/SKILL.md +0 -45
- package/resources/gofer/agents-skills/gofer_spec_summary/SKILL.md +0 -112
- package/resources/gofer/agents-skills/gofer_tdd/SKILL.md +0 -112
- package/resources/gofer/agents-skills/gofer_vocabulary/SKILL.md +0 -112
- package/resources/gofer/agents-skills/gofer_zoom_out/SKILL.md +0 -112
- package/resources/gofer/claude-commands/0_gofer_start.md +0 -1282
- package/resources/gofer/claude-commands/0a_problem_validation.md +0 -424
- package/resources/gofer/claude-commands/10_gofer_cloud.md +0 -630
- package/resources/gofer/claude-commands/1_gofer_research.md +0 -1154
- package/resources/gofer/claude-commands/2_gofer_specify.md +0 -855
- package/resources/gofer/claude-commands/3_gofer_plan.md +0 -894
- package/resources/gofer/claude-commands/4_gofer_tasks.md +0 -755
- package/resources/gofer/claude-commands/5_gofer_implement.md +0 -939
- package/resources/gofer/claude-commands/6_gofer_validate.md +0 -2297
- package/resources/gofer/claude-commands/7_gofer_save.md +0 -418
- package/resources/gofer/claude-commands/7a_stakeholder_comms.md +0 -503
- package/resources/gofer/claude-commands/8_gofer_branding.md +0 -310
- package/resources/gofer/claude-commands/9_gofer_tests.md +0 -553
- package/resources/gofer/claude-commands/gofer_bootstrap_workspace.md +0 -143
- package/resources/gofer/claude-commands/gofer_check_workspace.md +0 -114
- package/resources/gofer/claude-commands/gofer_constitution.md +0 -607
- package/resources/gofer/claude-commands/gofer_diagnose.md +0 -109
- package/resources/gofer/claude-commands/gofer_eai_first_run.md +0 -392
- package/resources/gofer/claude-commands/gofer_hydrate.md +0 -556
- package/resources/gofer/claude-commands/gofer_personality.md +0 -39
- package/resources/gofer/claude-commands/gofer_plan.md +0 -35
- package/resources/gofer/claude-commands/gofer_side.md +0 -40
- package/resources/gofer/claude-commands/gofer_spec_summary.md +0 -107
- package/resources/gofer/claude-commands/gofer_tdd.md +0 -107
- package/resources/gofer/claude-commands/gofer_vocabulary.md +0 -107
- package/resources/gofer/claude-commands/gofer_zoom_out.md +0 -107
- package/resources/gofer/claude-skills/eai-gofer/SKILL.md +0 -56
- package/resources/gofer/copilot-prompts/0_gofer_start.prompt.md +0 -1308
- package/resources/gofer/copilot-prompts/0a_problem_validation.prompt.md +0 -429
- package/resources/gofer/copilot-prompts/10_gofer_cloud.prompt.md +0 -644
- package/resources/gofer/copilot-prompts/1_gofer_research.prompt.md +0 -1177
- package/resources/gofer/copilot-prompts/2_gofer_specify.prompt.md +0 -878
- package/resources/gofer/copilot-prompts/3_gofer_plan.prompt.md +0 -917
- package/resources/gofer/copilot-prompts/4_gofer_tasks.prompt.md +0 -778
- package/resources/gofer/copilot-prompts/5_gofer_implement.prompt.md +0 -962
- package/resources/gofer/copilot-prompts/6_gofer_validate.prompt.md +0 -2310
- package/resources/gofer/copilot-prompts/7_gofer_save.prompt.md +0 -433
- package/resources/gofer/copilot-prompts/7a_stakeholder_comms.prompt.md +0 -516
- package/resources/gofer/copilot-prompts/8_gofer_branding.prompt.md +0 -323
- package/resources/gofer/copilot-prompts/9_gofer_tests.prompt.md +0 -566
- package/resources/gofer/copilot-prompts/gofer_bootstrap_workspace.prompt.md +0 -161
- package/resources/gofer/copilot-prompts/gofer_check_workspace.prompt.md +0 -132
- package/resources/gofer/copilot-prompts/gofer_constitution.prompt.md +0 -621
- package/resources/gofer/copilot-prompts/gofer_diagnose.prompt.md +0 -127
- package/resources/gofer/copilot-prompts/gofer_eai_first_run.prompt.md +0 -410
- package/resources/gofer/copilot-prompts/gofer_hydrate.prompt.md +0 -571
- package/resources/gofer/copilot-prompts/gofer_personality.prompt.md +0 -57
- package/resources/gofer/copilot-prompts/gofer_plan.prompt.md +0 -53
- package/resources/gofer/copilot-prompts/gofer_side.prompt.md +0 -58
- package/resources/gofer/copilot-prompts/gofer_spec_summary.prompt.md +0 -125
- package/resources/gofer/copilot-prompts/gofer_tdd.prompt.md +0 -125
- package/resources/gofer/copilot-prompts/gofer_vocabulary.prompt.md +0 -125
- package/resources/gofer/copilot-prompts/gofer_zoom_out.prompt.md +0 -125
- package/resources/gofer/gemini/commands/gofer/0_gofer_start.md +0 -1282
- package/resources/gofer/gemini/commands/gofer/0_gofer_start.toml +0 -2
- package/resources/gofer/gemini/commands/gofer/0a_problem_validation.md +0 -424
- package/resources/gofer/gemini/commands/gofer/0a_problem_validation.toml +0 -2
- package/resources/gofer/gemini/commands/gofer/10_gofer_cloud.md +0 -630
- package/resources/gofer/gemini/commands/gofer/10_gofer_cloud.toml +0 -2
- package/resources/gofer/gemini/commands/gofer/1_gofer_research.md +0 -1154
- package/resources/gofer/gemini/commands/gofer/1_gofer_research.toml +0 -2
- package/resources/gofer/gemini/commands/gofer/2_gofer_specify.md +0 -855
- package/resources/gofer/gemini/commands/gofer/2_gofer_specify.toml +0 -2
- package/resources/gofer/gemini/commands/gofer/3_gofer_plan.md +0 -894
- package/resources/gofer/gemini/commands/gofer/3_gofer_plan.toml +0 -2
- package/resources/gofer/gemini/commands/gofer/4_gofer_tasks.md +0 -755
- package/resources/gofer/gemini/commands/gofer/4_gofer_tasks.toml +0 -2
- package/resources/gofer/gemini/commands/gofer/5_gofer_implement.md +0 -939
- package/resources/gofer/gemini/commands/gofer/5_gofer_implement.toml +0 -2
- package/resources/gofer/gemini/commands/gofer/6_gofer_validate.md +0 -2297
- package/resources/gofer/gemini/commands/gofer/6_gofer_validate.toml +0 -2
- package/resources/gofer/gemini/commands/gofer/7_gofer_save.md +0 -418
- package/resources/gofer/gemini/commands/gofer/7_gofer_save.toml +0 -2
- package/resources/gofer/gemini/commands/gofer/7a_stakeholder_comms.md +0 -503
- package/resources/gofer/gemini/commands/gofer/7a_stakeholder_comms.toml +0 -2
- package/resources/gofer/gemini/commands/gofer/8_gofer_branding.md +0 -310
- package/resources/gofer/gemini/commands/gofer/8_gofer_branding.toml +0 -2
- package/resources/gofer/gemini/commands/gofer/9_gofer_tests.md +0 -553
- package/resources/gofer/gemini/commands/gofer/9_gofer_tests.toml +0 -2
- package/resources/gofer/gemini/commands/gofer/gofer_bootstrap_workspace.md +0 -143
- package/resources/gofer/gemini/commands/gofer/gofer_bootstrap_workspace.toml +0 -2
- package/resources/gofer/gemini/commands/gofer/gofer_check_workspace.md +0 -114
- package/resources/gofer/gemini/commands/gofer/gofer_check_workspace.toml +0 -2
- package/resources/gofer/gemini/commands/gofer/gofer_constitution.md +0 -607
- package/resources/gofer/gemini/commands/gofer/gofer_constitution.toml +0 -2
- package/resources/gofer/gemini/commands/gofer/gofer_diagnose.md +0 -109
- package/resources/gofer/gemini/commands/gofer/gofer_diagnose.toml +0 -2
- package/resources/gofer/gemini/commands/gofer/gofer_eai_first_run.md +0 -392
- package/resources/gofer/gemini/commands/gofer/gofer_eai_first_run.toml +0 -2
- package/resources/gofer/gemini/commands/gofer/gofer_hydrate.md +0 -556
- package/resources/gofer/gemini/commands/gofer/gofer_hydrate.toml +0 -2
- package/resources/gofer/gemini/commands/gofer/gofer_personality.md +0 -39
- package/resources/gofer/gemini/commands/gofer/gofer_personality.toml +0 -2
- package/resources/gofer/gemini/commands/gofer/gofer_plan.md +0 -35
- package/resources/gofer/gemini/commands/gofer/gofer_plan.toml +0 -2
- package/resources/gofer/gemini/commands/gofer/gofer_side.md +0 -40
- package/resources/gofer/gemini/commands/gofer/gofer_side.toml +0 -2
- package/resources/gofer/gemini/commands/gofer/gofer_spec_summary.md +0 -107
- package/resources/gofer/gemini/commands/gofer/gofer_spec_summary.toml +0 -2
- package/resources/gofer/gemini/commands/gofer/gofer_tdd.md +0 -107
- package/resources/gofer/gemini/commands/gofer/gofer_tdd.toml +0 -2
- package/resources/gofer/gemini/commands/gofer/gofer_vocabulary.md +0 -107
- package/resources/gofer/gemini/commands/gofer/gofer_vocabulary.toml +0 -2
- package/resources/gofer/gemini/commands/gofer/gofer_zoom_out.md +0 -107
- package/resources/gofer/gemini/commands/gofer/gofer_zoom_out.toml +0 -2
- package/resources/gofer/github-skills/eai-gofer/SKILL.md +0 -56
- package/resources/gofer/system-skills/0_gofer_start/SKILL.md +0 -1287
- package/resources/gofer/system-skills/0a_problem_validation/SKILL.md +0 -429
- package/resources/gofer/system-skills/10_gofer_cloud/SKILL.md +0 -635
- package/resources/gofer/system-skills/1_gofer_research/SKILL.md +0 -1159
- package/resources/gofer/system-skills/2_gofer_specify/SKILL.md +0 -860
- package/resources/gofer/system-skills/3_gofer_plan/SKILL.md +0 -899
- package/resources/gofer/system-skills/4_gofer_tasks/SKILL.md +0 -760
- package/resources/gofer/system-skills/5_gofer_implement/SKILL.md +0 -944
- package/resources/gofer/system-skills/6_gofer_validate/SKILL.md +0 -2302
- package/resources/gofer/system-skills/7_gofer_save/SKILL.md +0 -423
- package/resources/gofer/system-skills/7a_stakeholder_comms/SKILL.md +0 -508
- package/resources/gofer/system-skills/8_gofer_branding/SKILL.md +0 -315
- package/resources/gofer/system-skills/9_gofer_tests/SKILL.md +0 -558
- package/resources/gofer/system-skills/gofer_bootstrap_workspace/SKILL.md +0 -148
- package/resources/gofer/system-skills/gofer_check_workspace/SKILL.md +0 -119
- package/resources/gofer/system-skills/gofer_constitution/SKILL.md +0 -612
- package/resources/gofer/system-skills/gofer_diagnose/SKILL.md +0 -114
- package/resources/gofer/system-skills/gofer_eai_first_run/SKILL.md +0 -397
- package/resources/gofer/system-skills/gofer_hydrate/SKILL.md +0 -561
- package/resources/gofer/system-skills/gofer_personality/SKILL.md +0 -44
- package/resources/gofer/system-skills/gofer_plan/SKILL.md +0 -40
- package/resources/gofer/system-skills/gofer_side/SKILL.md +0 -45
- package/resources/gofer/system-skills/gofer_spec_summary/SKILL.md +0 -112
- package/resources/gofer/system-skills/gofer_tdd/SKILL.md +0 -112
- package/resources/gofer/system-skills/gofer_vocabulary/SKILL.md +0 -112
- package/resources/gofer/system-skills/gofer_zoom_out/SKILL.md +0 -112
- 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,
|
|
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-
|
|
337
|
-
emitted
|
|
338
|
-
|
|
339
|
-
|
|
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
|
-
- `.
|
|
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
|
-
|
|
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,
|
|
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
|
|
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
|
|
76
|
-
path: '.
|
|
77
|
-
version:
|
|
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
|
+
}
|