@polymorphism-tech/morph-spec 8.47.0 → 9.0.0

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 (222) hide show
  1. package/CLAUDE.md +48 -39
  2. package/README.md +3 -4
  3. package/bin/morph-spec.js +37 -51
  4. package/bin/validate.js +3 -111
  5. package/claude-plugin.json +1 -1
  6. package/docs/CHEATSHEET.md +1 -1
  7. package/docs/QUICKSTART.md +1 -1
  8. package/framework/CLAUDE.md +41 -101
  9. package/framework/MORPH.md +95 -252
  10. package/framework/agents.json +75 -18
  11. package/framework/commands/morph-apply.md +5 -28
  12. package/framework/commands/morph-archive.md +1 -1
  13. package/framework/commands/morph-hotfix.md +8 -8
  14. package/framework/commands/morph-infra.md +1 -1
  15. package/framework/commands/morph-preflight.md +2 -3
  16. package/framework/commands/morph-proposal.md +2 -50
  17. package/framework/commands/morph-status.md +3 -3
  18. package/framework/docs/CLI.md +585 -286
  19. package/framework/evals/review-checklist.md +82 -41
  20. package/framework/hooks/README.md +10 -11
  21. package/framework/hooks/claude-code/core/comment-guard.js +1 -1
  22. package/framework/hooks/claude-code/core/denylist.json +33 -3
  23. package/framework/hooks/claude-code/core/enforce-phase-writes.js +16 -20
  24. package/framework/hooks/claude-code/core/gate-guard.js +2 -11
  25. package/framework/hooks/claude-code/core/pre-bash-denylist.js +38 -0
  26. package/framework/hooks/claude-code/core/protect-spec-files.js +30 -242
  27. package/framework/hooks/claude-code/core/state-sync.js +7 -21
  28. package/framework/hooks/claude-code/core/telemetry-log.js +3 -3
  29. package/framework/hooks/claude-code/core/validate-completion.js +33 -97
  30. package/framework/hooks/claude-code/core/warn-bash-source-write.js +31 -0
  31. package/framework/hooks/claude-code/core/worktree-context.js +5 -4
  32. package/framework/hooks/claude-code/statusline.py +55 -41
  33. package/framework/hooks/package.json +3 -0
  34. package/framework/hooks/shared/activity-logger.js +1 -1
  35. package/framework/hooks/shared/build-check.js +10 -6
  36. package/framework/hooks/shared/command-tokens.js +169 -0
  37. package/framework/hooks/shared/comment-rules.js +1 -1
  38. package/framework/hooks/shared/comment-scanner.js +10 -23
  39. package/framework/hooks/shared/comment-stripper.js +1 -1
  40. package/framework/hooks/shared/e2e-check.js +64 -27
  41. package/framework/hooks/shared/errata.js +72 -0
  42. package/framework/hooks/shared/feature-locator.js +1 -1
  43. package/framework/hooks/shared/frontend-locations.js +6 -0
  44. package/framework/hooks/shared/gate-question.js +18 -0
  45. package/framework/hooks/shared/phase-utils.js +15 -32
  46. package/framework/hooks/shared/slice-progress.js +118 -0
  47. package/framework/hooks/shared/spawn-command.js +23 -0
  48. package/framework/hooks/shared/state-reader.js +61 -87
  49. package/framework/hooks/shared/state-writer.js +2 -3
  50. package/framework/mcp/registry.json +3 -4
  51. package/framework/phases.json +23 -39
  52. package/framework/schemas/config.schema.json +14 -9
  53. package/framework/schemas/feature.schema.json +15 -50
  54. package/framework/skills/README.md +3 -4
  55. package/framework/skills/core/create-umbraco-lp/SKILL.md +1 -1
  56. package/framework/skills/core/migrate-lp-to-umbraco/SKILL.md +1 -1
  57. package/framework/skills/core/morph-apply/SKILL.md +149 -222
  58. package/framework/skills/core/morph-hotfix/SKILL.md +33 -42
  59. package/framework/skills/core/morph-machine/SKILL.md +2 -2
  60. package/framework/skills/core/morph-media/SKILL.md +1 -1
  61. package/framework/skills/core/morph-plan/SKILL.md +137 -299
  62. package/framework/skills/core/morph-review/SKILL.md +111 -136
  63. package/framework/skills/core/morph-standards/SKILL.md +27 -39
  64. package/framework/skills/core/morph-uiux/SKILL.md +77 -152
  65. package/framework/standards/STANDARDS.json +86 -1218
  66. package/framework/standards/STANDARDS.meta.json +1305 -0
  67. package/framework/standards/ai-agents/evals-with-cache.md +1 -2
  68. package/framework/standards/ai-agents/setup.md +1 -1
  69. package/framework/standards/architecture/code-comments.md +6 -6
  70. package/framework/standards/integration/mcp/mcp-tools.md +7 -7
  71. package/framework/templates/README.md +2 -3
  72. package/framework/templates/REGISTRY.json +6 -170
  73. package/framework/templates/docs/plan.md +72 -0
  74. package/framework/templates/dotnet/ai-kit/README.md +1 -9
  75. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/Morph.AiKit.Tests.csproj +0 -10
  76. package/framework/templates/meta-prompts/squad-leaders/backend-squad.md +1 -1
  77. package/framework/templates/meta-prompts/squad-leaders/frontend-squad.md +1 -1
  78. package/framework/templates/meta-prompts/squad-leaders/squad-leader.md +1 -1
  79. package/framework/templates/meta-prompts/validators/pre-commit-validator.md +3 -4
  80. package/package.json +1 -1
  81. package/src/commands/e2e/e2e.js +2 -2
  82. package/src/commands/observability/cost.js +18 -60
  83. package/src/commands/project/doctor-procs.js +1 -1
  84. package/src/commands/project/doctor.js +9 -9
  85. package/src/commands/project/fleet.js +4 -4
  86. package/src/commands/project/heavy.js +3 -3
  87. package/src/commands/project/init.js +4 -0
  88. package/src/commands/project/setup-infra-cmd.js +2 -1
  89. package/src/commands/project/stack-scan.js +58 -0
  90. package/src/commands/project/standards.js +79 -25
  91. package/src/commands/project/status.js +29 -69
  92. package/src/commands/project/update.js +17 -1
  93. package/src/commands/project/worktree.js +1 -1
  94. package/src/commands/state/advance.js +62 -46
  95. package/src/commands/state/approve.js +81 -141
  96. package/src/commands/state/archive.js +20 -84
  97. package/src/commands/state/auto-approval.js +68 -0
  98. package/src/commands/state/create.js +28 -1
  99. package/src/commands/state/delete.js +1 -1
  100. package/src/commands/state/finish.js +11 -23
  101. package/src/commands/state/gate-check.js +85 -84
  102. package/src/commands/state/gate-decision.js +6 -4
  103. package/src/commands/state/handoff.js +1 -1
  104. package/src/commands/state/list.js +9 -9
  105. package/src/commands/state/report-check.js +157 -311
  106. package/src/commands/state/retype.js +9 -3
  107. package/src/commands/validation/mutate.js +77 -14
  108. package/src/commands/validation/plan-check.js +81 -0
  109. package/src/commands/validation/validate-feature.js +60 -135
  110. package/src/commands/validation/verify.js +40 -72
  111. package/src/core/paths/output-schema.js +19 -66
  112. package/src/core/state/gate-order.js +5 -6
  113. package/src/core/state/lifecycle-audit.js +2 -2
  114. package/src/core/state/state-manager.js +17 -98
  115. package/src/core/templates/template-registry.js +2 -2
  116. package/src/core/templates/template-seed.js +22 -0
  117. package/src/core/work-types.js +10 -10
  118. package/src/dashboard/app/components/ActivityFeed.jsx +2 -3
  119. package/src/dashboard/app/components/CommandPalette.jsx +5 -5
  120. package/src/dashboard/app/components/EntityLink.jsx +1 -1
  121. package/src/dashboard/app/hooks/useMorphQuery.js +1 -1
  122. package/src/dashboard/app/lib/phases.js +2 -4
  123. package/src/dashboard/app/pages/Activity.jsx +1 -1
  124. package/src/dashboard/app/pages/FeatureDetail.jsx +139 -129
  125. package/src/dashboard/app/pages/Features.jsx +9 -9
  126. package/src/dashboard/app/pages/Guide.jsx +2 -2
  127. package/src/dashboard/app/pages/PhasePipeline.jsx +3 -4
  128. package/src/dashboard/app/pages/Standards.jsx +1 -1
  129. package/src/dashboard/scanner/activity-scanner.js +5 -15
  130. package/src/dashboard/scanner/agents-scanner.js +1 -1
  131. package/src/dashboard/scanner/docs-scanner.js +2 -2
  132. package/src/dashboard/scanner/features-scanner.js +95 -60
  133. package/src/dashboard/scanner/project-api.js +1 -1
  134. package/src/dashboard/scanner/standards-scanner.js +2 -1
  135. package/src/lib/ci/ci-verify.js +17 -1
  136. package/src/lib/ci/github-ci.js +1 -1
  137. package/src/lib/detectors/index.js +3 -8
  138. package/src/lib/generators/handoff-generator.js +34 -65
  139. package/src/lib/generators/settings-generator.js +11 -89
  140. package/src/lib/git/evidence-staleness.js +1 -1
  141. package/src/lib/git/tree-fingerprint.js +19 -7
  142. package/src/lib/git/tree-state.js +2 -2
  143. package/src/lib/heavy/cleanup.js +1 -5
  144. package/src/lib/installers/memory-installer.js +6 -8
  145. package/src/lib/mutation/commands.js +3 -2
  146. package/src/lib/{tasks/dotnet-test-introspection.js → mutation/dotnet-introspection.js} +17 -282
  147. package/src/lib/mutation/plan.js +14 -6
  148. package/src/lib/mutation/runner.js +1 -1
  149. package/src/lib/mutation/subset.js +46 -9
  150. package/src/lib/plan/artifact-vocabulary.js +60 -0
  151. package/src/lib/plan/checks.js +234 -0
  152. package/src/lib/plan/plan-parser.js +209 -0
  153. package/src/lib/plan/plan-template.js +18 -0
  154. package/src/lib/review-reports.js +222 -0
  155. package/src/lib/risk-detector.js +131 -140
  156. package/src/lib/specs/adr-index.js +50 -69
  157. package/src/lib/specs/design-seed.js +18 -0
  158. package/src/lib/specs/frontmatter.js +44 -0
  159. package/src/lib/specs/gfm-table.js +17 -0
  160. package/src/lib/specs/old-format.js +68 -0
  161. package/src/lib/specs/revocations.js +37 -95
  162. package/src/lib/specs/screen-checklist.js +18 -17
  163. package/src/lib/stack/dotnet-build-ignores.js +47 -0
  164. package/src/lib/stack/stack-scan.js +267 -0
  165. package/src/lib/standards/registry.js +43 -0
  166. package/src/lib/standards/sections.js +58 -0
  167. package/src/lib/tasks/eval-node.js +4 -12
  168. package/src/lib/tasks/test-nodes.js +1 -74
  169. package/src/lib/tasks/test-runner.js +75 -117
  170. package/src/lib/telemetry/metrics.js +8 -69
  171. package/src/lib/telemetry/telemetry-reader.js +5 -118
  172. package/src/lib/telemetry/verify-event.js +5 -7
  173. package/src/lib/validators/code-budget/code-budget-validator.js +1 -1
  174. package/src/lib/validators/contracts/contract-compliance-validator.js +2 -2
  175. package/src/lib/validators/reuse/reuse-validator.js +22 -45
  176. package/src/lib/validators/traceability-check.js +85 -129
  177. package/src/lib/validators/verify-runner.js +118 -235
  178. package/src/lib/worktree/docker-audit.js +1 -2
  179. package/src/lib/worktree/fleet-scanner.js +25 -38
  180. package/src/scripts/setup-infra.js +9 -0
  181. package/src/utils/agents-installer.js +76 -9
  182. package/src/utils/claude-settings-manager.js +0 -35
  183. package/src/utils/file-copier.js +27 -1
  184. package/src/utils/hooks-installer.js +16 -9
  185. package/src/utils/skills-installer.js +1 -2
  186. package/framework/evals/trace-schema.md +0 -67
  187. package/framework/hooks/claude-code/core/tasks-json-guard.js +0 -83
  188. package/framework/hooks/claude-code/core/trace-autogen.js +0 -277
  189. package/framework/hooks/git/pre-commit/specs.sh +0 -50
  190. package/framework/hooks/shared/tasks-validator.js +0 -111
  191. package/framework/rules/morph-task-tracking.md +0 -54
  192. package/framework/rules/morph-workflow.md +0 -244
  193. package/framework/schemas/tasks.schema.json +0 -79
  194. package/framework/skills/core/morph-brainstorming/SKILL.md +0 -161
  195. package/framework/skills/core/morph-implement/SKILL.md +0 -194
  196. package/framework/skills/core/morph-proposal/SKILL.md +0 -152
  197. package/framework/skills/core/morph-stack-scan/SKILL.md +0 -145
  198. package/framework/templates/docs/proposal.md +0 -192
  199. package/framework/templates/docs/spec.md +0 -57
  200. package/framework/templates/docs/ui-components.md +0 -52
  201. package/framework/templates/docs/ui-design-system.md +0 -76
  202. package/framework/templates/docs/ui-flows.md +0 -167
  203. package/framework/templates/examples/spec-examples.md +0 -91
  204. package/framework/templates/feature/decisions.md +0 -124
  205. package/framework/templates/feature/recap.md +0 -145
  206. package/framework/templates/tasks.template.json +0 -17
  207. package/src/commands/state/usecase.js +0 -143
  208. package/src/commands/tasks/dag.js +0 -181
  209. package/src/lib/agents/output-collector.js +0 -76
  210. package/src/lib/evaluator-report.js +0 -104
  211. package/src/lib/specs/acervo-format.js +0 -70
  212. package/src/lib/specs/acervo-lifecycle.js +0 -264
  213. package/src/lib/specs/done-criteria-check.js +0 -200
  214. package/src/lib/specs/usecase-check.js +0 -301
  215. package/src/lib/specs/usecase-promoter.js +0 -301
  216. package/src/lib/specs/usecase-registry.js +0 -237
  217. package/src/lib/tasks/dispatch-planner.js +0 -319
  218. package/src/lib/tasks/mermaid-renderer.js +0 -132
  219. package/src/lib/tasks/task-classifier.js +0 -30
  220. package/src/lib/tasks/task-parser.js +0 -209
  221. package/src/lib/tasks/tasks-json-parser.js +0 -296
  222. package/src/lib/tasks/test-scope.js +0 -597
@@ -0,0 +1,1305 @@
1
+ {
2
+ "version": "1.0.0",
3
+ "standards": {
4
+ "ai-agents-agent-archetypes": {
5
+ "aliases": [
6
+ "agent archetype",
7
+ "arquetipo de agente",
8
+ "qual forma de agente",
9
+ "conversational agent",
10
+ "one-shot agent",
11
+ "batch agent",
12
+ "vision agent",
13
+ "chat with history"
14
+ ],
15
+ "verifiedAgainst": "Microsoft.Agents.AI 1.20.0 + Microsoft.Extensions.AI 10.9.0 (ai-pin 2026-09-08); provado por `templates/dotnet/ai-kit/src/Morph.AiKit/Agents/AgentFactory.cs` e `.../Conversation/ConversationStore.cs` (arquétipos **one-shot em batch** e **chat com histórico** — o conversacional com fases NÃO tem lastro no kit, e `ai-agents-conversational-agent-with-phases` declara isso no próprio cabeçalho). O arquétipo visão + structured output é **verificação documental** — o ai-kit não exercita multimodalidade.",
16
+ "provedBy": [
17
+ "templates/dotnet/ai-kit/src/Morph.AiKit/Agents/AgentFactory.cs",
18
+ ".../Conversation/ConversationStore.cs"
19
+ ]
20
+ },
21
+ "ai-agents-agent-session": {
22
+ "aliases": [
23
+ "agent session",
24
+ "chat history",
25
+ "conversation state",
26
+ "chat reducer",
27
+ "history truncation",
28
+ "multi-turn",
29
+ "persistent session",
30
+ "ChatHistoryProvider",
31
+ "own conversation table",
32
+ "conversa propria",
33
+ "ProviderSessionState"
34
+ ],
35
+ "verifiedAgainst": "Microsoft.Agents.AI 1.20.0 + Microsoft.Extensions.AI 10.9.0 (ai-pin 2026-09-08); provado por `templates/dotnet/ai-kit/src/Morph.AiKit/Conversation/ConversationStore.cs` (a subclasse de `ChatHistoryProvider`, a invariante de instância única e o teste de duas sessões concorrentes). Nomes de tipo e membros medidos por reflexão sobre `Microsoft.Agents.AI.Abstractions` 1.20.0 em 2026-09-08.",
36
+ "provedBy": [
37
+ "templates/dotnet/ai-kit/src/Morph.AiKit/Conversation/ConversationStore.cs"
38
+ ]
39
+ },
40
+ "ai-agents-agent-spec": {
41
+ "aliases": [
42
+ "agent spec",
43
+ "AgentSpec",
44
+ "agent catalog",
45
+ "AgentCatalog",
46
+ "um agente por spec",
47
+ "defaults do agente",
48
+ "quantos agentes"
49
+ ],
50
+ "verifiedAgainst": "Microsoft.Agents.AI 1.20.0 + Microsoft.Extensions.AI 10.9.0 (ai-pin 2026-09-08); provado por `templates/dotnet/ai-kit/src/Morph.AiKit/Agents/AgentSpec.cs`, `.../Agents/AgentSpecOptions.cs` e `.../Agents/AgentFactory.cs` — o record, o bag de opções e a materialização são exatamente o que o kit compila.",
51
+ "provedBy": [
52
+ "templates/dotnet/ai-kit/src/Morph.AiKit/Agents/AgentSpec.cs",
53
+ ".../Agents/AgentSpecOptions.cs",
54
+ ".../Agents/AgentFactory.cs"
55
+ ]
56
+ },
57
+ "ai-agents-batching": {
58
+ "aliases": [
59
+ "batching",
60
+ "batch api",
61
+ "bulk prompts",
62
+ "batch processing",
63
+ "async batch",
64
+ "bulk inference",
65
+ "offline batch",
66
+ "CreateBatchOperation",
67
+ "BatchClient"
68
+ ],
69
+ "verifiedAgainst": "OpenAI 2.13.0 (ai-pin 2026-09-08) + Microsoft.Extensions.AI 10.9.0. **Verificação documental** do fluxo da Batch API (platform.openai.com/docs/guides/batch, lido 2026-09-08), sem cláusula `provado por`: o ai-kit **referencia** o pacote `OpenAI` no `.csproj` — contrato de versão, régua = restore (`NU1102`) — mas **não o exercita**; não existe um único `using OpenAI` em `src/` (medido 2026-09-08), logo um rename de API não reprova a PR. Ver a tabela \"Dois níveis de garantia\" no README do kit. **Todos os nomes de tipo e assinaturas .NET foram medidos por reflexão sobre a assembly `OpenAI` 2.13.0 em 2026-09-08**, e os 9 marcadores `// VERIFY` desta página foram RESOLVIDOS por essa medição.",
70
+ "provedBy": []
71
+ },
72
+ "ai-agents-context-providers": {
73
+ "aliases": [
74
+ "context provider",
75
+ "dynamic context",
76
+ "context injection",
77
+ "AIContextProvider",
78
+ "memory provider",
79
+ "inject context",
80
+ "system prompt injection",
81
+ "compaction",
82
+ "MAAI001",
83
+ "tool before provider",
84
+ "ordem de escolha"
85
+ ],
86
+ "verifiedAgainst": "Microsoft.Agents.AI 1.20.0 (ai-pin 2026-09-08) + doc oficial de context providers e de compaction (learn.microsoft.com, `ms.date` 2026-07-30). **Verificação documental** para o desenho — o ai-kit não registra `AIContextProvider`; os nomes de tipo, o pacote de cada extensão e o atributo `[Experimental]` da compaction foram **medidos por reflexão sobre `Microsoft.Agents.AI` 1.20.0** em 2026-09-08.",
87
+ "provedBy": []
88
+ },
89
+ "ai-agents-conversational-agent-with-phases": {
90
+ "aliases": [
91
+ "agente conversacional",
92
+ "fases do agente",
93
+ "allow-list de tools",
94
+ "RequireAny",
95
+ "ChatToolMode",
96
+ "compositor de turno",
97
+ "teto de tool calls",
98
+ "turno de conversa"
99
+ ],
100
+ "verifiedAgainst": "Microsoft.Extensions.AI 10.9.0 + Microsoft.Agents.AI 1.20.0 (ai-pin 2026-09-08). `ChatToolMode.RequireAny` foi **medido por reflexão sobre `Microsoft.Extensions.AI.Abstractions` 10.9.0** em 2026-09-08. O restante é **verificação documental**, sem cláusula `provado por` — o ai-kit ainda não traz um compositor de turno, e o padrão é destilado de um único repositório de campo (ver a nota de fonte única abaixo).",
101
+ "provedBy": []
102
+ },
103
+ "ai-agents-cost-and-budget": {
104
+ "aliases": [
105
+ "custo de llm",
106
+ "cost middleware",
107
+ "UsageCostMiddleware",
108
+ "teto de custo",
109
+ "budget middleware",
110
+ "tarifa por token",
111
+ "cost_usd",
112
+ "orçamento do agente"
113
+ ],
114
+ "verifiedAgainst": "Microsoft.Extensions.AI 10.9.0 + Microsoft.Agents.AI 1.20.0 (ai-pin 2026-09-08); provado por `templates/dotnet/ai-kit/src/Morph.AiKit/Middleware/UsageCostMiddleware.cs`, `.../Middleware/UsageCostRecord.cs` e `.../Providers/ModelAlias.cs` — o middleware, o record de custo não-nulo e a conta de tarifa são o que o kit compila. A ausência de qualquer propriedade de preço em `UsageDetails` foi **medida por reflexão sobre `Microsoft.Extensions.AI.Abstractions` 10.9.0** em 2026-09-08. O teto de orçamento é **verificação documental** — o ai-kit não traz um middleware de orçamento.",
115
+ "provedBy": [
116
+ "templates/dotnet/ai-kit/src/Morph.AiKit/Middleware/UsageCostMiddleware.cs",
117
+ ".../Middleware/UsageCostRecord.cs",
118
+ ".../Providers/ModelAlias.cs"
119
+ ]
120
+ },
121
+ "ai-agents-durable-workflows-hitl": {
122
+ "aliases": [
123
+ "durable workflow",
124
+ "checkpoint",
125
+ "checkpointing",
126
+ "human in the loop",
127
+ "hitl",
128
+ "requestport",
129
+ "requestinfoevent",
130
+ "resume workflow",
131
+ "long running workflow",
132
+ "approval workflow",
133
+ "icheckpointstore",
134
+ "tool approval",
135
+ "ApprovalRequiredAIFunction",
136
+ "ToolApprovalAgent"
137
+ ],
138
+ "verifiedAgainst": "Microsoft.Agents.AI 1.20.0 + Microsoft.Extensions.AI 10.9.0 (ai-pin 2026-09-08); `Microsoft.Agents.AI.Workflows` 1.20.0 e `Microsoft.Agents.AI.DurableTask` `1.16.0-preview.260730.1` **não estão no pin** — versões apuradas no nuget.org em 2026-09-08. **Verificação documental**, sem cláusula `provado por`: o ai-kit não exercita workflows nem aprovação de tool. Os nomes de tipo e membros de aprovação foram **medidos por reflexão sobre as assemblies do pin** em 2026-09-08.",
139
+ "provedBy": []
140
+ },
141
+ "ai-agents-evals-with-cache": {
142
+ "aliases": [
143
+ "eval",
144
+ "evals",
145
+ "eval de modelo",
146
+ "regressao de prompt",
147
+ "prompt regression",
148
+ "model swap",
149
+ "troca de modelo",
150
+ "cache de respostas",
151
+ "response cache",
152
+ "dataset de eval",
153
+ "EvalFixture",
154
+ "OfflineChatClient",
155
+ "DiskBasedResponseCacheProvider",
156
+ "no evals",
157
+ "runner evals",
158
+ "--refresh-cache",
159
+ "evals.watch"
160
+ ],
161
+ "verifiedAgainst": "Microsoft.Extensions.AI.Evaluation 10.9.0 + `.Quality` + `.Reporting` (ai-pin 2026-09-08); provado por `templates/dotnet/ai-kit/src/Morph.AiKit/Evals/EvalFixture.cs`, que compila e roda no CI contra exatamente essas versões. A superfície de `DiskBasedReportingConfiguration`, `DiskBasedResponseCacheProvider`, `ReportingConfiguration` e dos avaliadores de `.Quality` foi **medida por reflexão sobre as assemblies `Microsoft.Extensions.AI.Evaluation*` 10.9.0** em 2026-09-08.",
162
+ "provedBy": [
163
+ "templates/dotnet/ai-kit/src/Morph.AiKit/Evals/EvalFixture.cs"
164
+ ]
165
+ },
166
+ "ai-agents-guardrails": {
167
+ "aliases": [
168
+ "guardrail",
169
+ "guard de tool",
170
+ "regra proibida",
171
+ "validacao de pertinencia",
172
+ "fail-open guard",
173
+ "argumento nao confiavel",
174
+ "choke-point"
175
+ ],
176
+ "verifiedAgainst": "Microsoft.Extensions.AI 10.9.0 + Microsoft.Agents.AI 1.20.0 (ai-pin 2026-09-08). **Verificação documental**, sem cláusula `provado por` — o ai-kit não traz um guard de exemplo; o padrão é destilado de dois repositórios em produção, com o local de cada evidência citado na seção correspondente.",
177
+ "provedBy": []
178
+ },
179
+ "ai-agents-llm-runtime-defaults": {
180
+ "aliases": [
181
+ "llm defaults",
182
+ "runtime defaults",
183
+ "timeout llm",
184
+ "retry llm",
185
+ "strict json schema",
186
+ "temperature reasoning",
187
+ "capability por alias",
188
+ "network timeout"
189
+ ],
190
+ "verifiedAgainst": "Microsoft.Extensions.AI 10.9.0 + Microsoft.Agents.AI 1.20.0 + OpenAI 2.13.0 (ai-pin 2026-09-08); provado por `templates/dotnet/ai-kit/src/Morph.AiKit/Providers/ModelAlias.cs` e `.../Providers/ModelRegistry.cs` (alias, `api:`, e limite por alias com procedência obrigatória). A superfície do SDK citada aqui — `ChatOptions`, `ChatResponseFormatJson`, `ReasoningEffort`, `OpenAIClientOptions` — foi **medida por reflexão sobre as assemblies do pin** em 2026-09-08. O timeout é **provado por** `.../Agents/AgentSpecOptions.cs` e `.../Agents/AgentFactory.cs`, que o kit compila **por spec** (`TimeoutSeconds` vira um cliente de timeout no pipeline) — e **não** por alias: a allowlist de alias do registry não tem chave de timeout (medido). Os valores default do retry do `System.ClientModel` 1.15.0 são **verificação documental** — essa assembly está fora do conjunto que o probe carrega.",
191
+ "provedBy": [
192
+ "templates/dotnet/ai-kit/src/Morph.AiKit/Providers/ModelAlias.cs",
193
+ ".../Providers/ModelRegistry.cs",
194
+ ".../Agents/AgentSpecOptions.cs",
195
+ ".../Agents/AgentFactory.cs"
196
+ ]
197
+ },
198
+ "ai-agents-mcp-server": {
199
+ "aliases": [
200
+ "mcp server",
201
+ "expose mcp",
202
+ "build mcp server",
203
+ "mcp host",
204
+ "publish tools",
205
+ "create mcp server",
206
+ "ModelContextProtocol server",
207
+ "request filters",
208
+ "AddCallToolFilter",
209
+ "stateless",
210
+ "spec 2026-07-28"
211
+ ],
212
+ "verifiedAgainst": "ModelContextProtocol 2.2.0 + ModelContextProtocol.AspNetCore 2.2.0 (ai-pin 2026-09-08; o `.AspNetCore` não está no pin — versão apurada no nuget.org em 2026-09-08) + revisão de spec MCP **2026-07-28** (modelcontextprotocol.io/specification/versioning, lido 2026-09-08). **Verificação documental — o ai-kit não exercita MCP**, e por isso este standard NÃO carimba `provado por`. Os nomes de tipo, os defaults e os avisos de obsolescência abaixo foram **medidos por reflexão sobre as assemblies 2.2.0** em 2026-09-08.",
213
+ "provedBy": []
214
+ },
215
+ "ai-agents-mcp-tools": {
216
+ "aliases": [
217
+ "mcp",
218
+ "model context protocol",
219
+ "mcp client",
220
+ "consume mcp server",
221
+ "mcp tools",
222
+ "external tools",
223
+ "agent mcp client",
224
+ "McpClient.CreateAsync",
225
+ "HttpClientTransport",
226
+ "MRTR"
227
+ ],
228
+ "verifiedAgainst": "ModelContextProtocol 2.2.0 + Microsoft.Agents.AI 1.20.0 + Microsoft.Extensions.AI 10.9.0 (ai-pin 2026-09-08) + revisão de spec MCP **2026-07-28**. **Verificação documental — o ai-kit não exercita MCP**, e por isso este standard NÃO carimba `provado por`. Todos os nomes de tipo abaixo foram **medidos por reflexão sobre `ModelContextProtocol.Core` 2.2.0** em 2026-09-08.",
229
+ "provedBy": []
230
+ },
231
+ "ai-agents-media-pipeline": {
232
+ "aliases": [
233
+ "media pipeline",
234
+ "media job",
235
+ "media review",
236
+ "C2PA",
237
+ "SynthID",
238
+ "AI Act",
239
+ "content provenance",
240
+ "marcação de IA",
241
+ "idempotência de mídia"
242
+ ],
243
+ "verifiedAgainst": "Microsoft.Extensions.AI 10.9.0 + OpenAI 2.13.0 + Google.GenAI 1.21.0 (ai-pin 2026-09-08); provado por `templates/dotnet/ai-kit/src/Morph.AiKit/Media/` — a máquina de estados (`MediaJob`), a revisão humana (`MediaReview`), a marcação exigida na publicação (`MediaDisclosure` + `MediaJob.Publish`), as duas chaves (`MediaIdempotencyKey` × `MediaHash`), o storage por conteúdo (`MediaStore`) e a acessibilidade `internal` de `IMediaProvider` compilam e são exercitados por teste. Preço, data de desligamento, C2PA/SynthID e o texto legal do AI Act são **verificação documental** contra as páginas de §Como re-verificar este standard.",
244
+ "provedBy": [
245
+ "templates/dotnet/ai-kit/src/Morph.AiKit/Media/"
246
+ ]
247
+ },
248
+ "ai-agents-media-video": {
249
+ "aliases": [
250
+ "media video",
251
+ "video generation",
252
+ "text to video",
253
+ "image to video",
254
+ "veo",
255
+ "seedance",
256
+ "kling",
257
+ "runway",
258
+ "GenerateVideosAsync"
259
+ ],
260
+ "verifiedAgainst": "Google.GenAI 1.21.0 + OpenAI 2.13.0 (ai-pin 2026-09-08); provado por `templates/dotnet/ai-kit/src/Morph.AiKit/Media/Providers/VeoVideoProvider.cs` — `Models.GenerateVideosAsync(model, GenerateVideosSource, GenerateVideosConfig, ct)`, o polling por `Operations.GetAsync` + `operation.Done` e o sinal de bloqueio `RaiMediaFilteredCount` COMPILAM ali. Preço, duração, retenção e data de desligamento são **verificação documental** contra as páginas listadas em §Como re-verificar este standard.",
261
+ "provedBy": [
262
+ "templates/dotnet/ai-kit/src/Morph.AiKit/Media/Providers/VeoVideoProvider.cs"
263
+ ]
264
+ },
265
+ "ai-agents-middleware-patterns": {
266
+ "aliases": [
267
+ "middleware",
268
+ "agent middleware",
269
+ "function calling middleware",
270
+ "retry",
271
+ "anti-hallucination",
272
+ "resilience",
273
+ "telemetry middleware",
274
+ "agent run middleware",
275
+ "pipeline order",
276
+ "streaming downgrade"
277
+ ],
278
+ "verifiedAgainst": "Microsoft.Agents.AI 1.20.0 + Microsoft.Extensions.AI 10.9.0 (ai-pin 2026-09-08); `provado por templates/dotnet/ai-kit/src/Morph.AiKit/Agents/AgentFactory.cs` para a **ordem do pipeline** — a fábrica do kit é o único lugar que conhece essa ordem, e ela é medida por teste, não herdada de folclore. As assinaturas de `Use(...)` foram **medidas por reflexão sobre `AIAgentBuilder` e `ChatClientBuilder`** em 2026-09-08.",
279
+ "provedBy": [
280
+ "templates/dotnet/ai-kit/src/Morph.AiKit/Agents/AgentFactory.cs"
281
+ ]
282
+ },
283
+ "ai-agents-modalities-image-gen": {
284
+ "aliases": [
285
+ "image generation",
286
+ "text to image",
287
+ "dall-e",
288
+ "gpt-image",
289
+ "mockup",
290
+ "image synthesis",
291
+ "generate image",
292
+ "image from text",
293
+ "MEAI001",
294
+ "IImageGenerator"
295
+ ],
296
+ "verifiedAgainst": "OpenAI 2.13.0 + Microsoft.Extensions.AI 10.9.0 + Google.GenAI 1.21.0 (ai-pin 2026-09-08); provado por `templates/dotnet/ai-kit/src/Morph.AiKit/Media/Providers/OpenAIImageProvider.cs` — `IImageGenerator`, `MEAI001`, `ImageGenerationRequest.OriginalImages` e a ausência de propriedade tipada para `quality` COMPILAM ali, e `OPENAI001` em `GeneratedImageQuality` foi medido pelo compilador. `HostedImageGenerationTool` foi medido por reflexão sobre a assembly do pin (existe, não é experimental); preço, data de desligamento e limites de referência são **verificação documental** contra as páginas de §Como re-verificar este standard.",
297
+ "provedBy": [
298
+ "templates/dotnet/ai-kit/src/Morph.AiKit/Media/Providers/OpenAIImageProvider.cs"
299
+ ]
300
+ },
301
+ "ai-agents-modalities-speech-to-text": {
302
+ "aliases": [
303
+ "speech to text",
304
+ "transcription",
305
+ "whisper",
306
+ "audio to text",
307
+ "voice transcription",
308
+ "STT",
309
+ "audio transcription"
310
+ ],
311
+ "verifiedAgainst": "OpenAI 2.13.0 + Microsoft.Extensions.AI 10.9.0 (ai-pin 2026-09-08). **Verificação documental**, sem cláusula `provado por` — o ai-kit não transcreve áudio. `AudioClient.TranscribeAudioAsync` e a ponte `AsISpeechToTextClient` foram **medidas por reflexão sobre as assemblies do pin** em 2026-09-08. Em 2026-10-03 os blocos da API, do `TranscriptionService`, do agente downstream (dentro de um método-invólucro) e do registro DI compilaram com `TreatWarningsAsErrors` contra `OpenAI` 2.13.0 + `Microsoft.Agents.AI` 1.20.0 (o pin de 2026-09-08, que é a data que este campo carrega).",
312
+ "provedBy": []
313
+ },
314
+ "ai-agents-modalities-text-to-speech": {
315
+ "aliases": [
316
+ "text to speech",
317
+ "TTS",
318
+ "voice synthesis",
319
+ "audio generation",
320
+ "speech synthesis",
321
+ "voice output",
322
+ "speak text"
323
+ ],
324
+ "verifiedAgainst": "OpenAI 2.13.0 + Microsoft.Extensions.AI 10.9.0 (ai-pin 2026-09-08). **Verificação documental**, sem cláusula `provado por` — o ai-kit não gera áudio. `AudioClient.GenerateSpeechAsync`, a sobrecarga de streaming e a ponte `AsITextToSpeechClient` foram **medidas por reflexão sobre as assemblies do pin** em 2026-09-08.",
325
+ "provedBy": []
326
+ },
327
+ "ai-agents-modalities-vision": {
328
+ "aliases": [
329
+ "vision",
330
+ "image to text",
331
+ "OCR",
332
+ "image analysis",
333
+ "multimodal input",
334
+ "image agent",
335
+ "PDF analysis",
336
+ "visual understanding"
337
+ ],
338
+ "verifiedAgainst": "Microsoft.Extensions.AI 10.9.0 + Microsoft.Agents.AI 1.20.0 (ai-pin 2026-09-08). **Verificação documental**, sem cláusula `provado por` — o ai-kit não exercita conteúdo multimodal. Os três tipos de conteúdo citados (`TextContent`, `UriContent`, `DataContent`) foram **conferidos por reflexão sobre `Microsoft.Extensions.AI.Abstractions` 10.9.0** em 2026-09-08 e continuam existindo com esses nomes.",
339
+ "provedBy": []
340
+ },
341
+ "ai-agents-multi-agent-patterns": {
342
+ "aliases": [
343
+ "multi-agent",
344
+ "agent as tool",
345
+ "agent composition",
346
+ "sequential agents",
347
+ "handoff",
348
+ "sub-agent",
349
+ "agent orchestration",
350
+ "nested agent",
351
+ "agente auxiliar",
352
+ "AsAIFunction"
353
+ ],
354
+ "verifiedAgainst": "Microsoft.Agents.AI 1.20.0 (ai-pin 2026-09-08) + Microsoft.Agents.AI.Workflows 1.20.0 (**fora do pin**; versão apurada no nuget.org em 2026-09-08). **Verificação documental**, sem cláusula `provado por` — o ai-kit não compõe agentes. As assinaturas de `AgentWorkflowBuilder`/`HandoffWorkflowBuilder` e a **ausência** do atributo `[Experimental]` no Handoff foram **medidas por reflexão sobre a assembly 1.20.0** em 2026-09-08.",
355
+ "provedBy": []
356
+ },
357
+ "ai-agents-observability-patterns": {
358
+ "aliases": [
359
+ "observability",
360
+ "opentelemetry",
361
+ "telemetry",
362
+ "logging",
363
+ "tracing",
364
+ "log investigation",
365
+ "troubleshooting",
366
+ "aspire dashboard",
367
+ "correlation id",
368
+ "agent observability",
369
+ "agent telemetry",
370
+ "EnableSensitiveData",
371
+ "span duplication",
372
+ "invoke_agent"
373
+ ],
374
+ "verifiedAgainst": "Microsoft.Agents.AI 1.20.0 + Microsoft.Extensions.AI 10.9.0 (ai-pin 2026-09-08); `provado por templates/dotnet/ai-kit/src/Morph.AiKit/Observability/MorphOpenTelemetryExtensions.cs` — o guard de span duplicado, a regra de \"um nível, uma instrumentação\" e o default `EnableSensitiveData = false` são exatamente o que o kit compila, com os spans contados em `tests/Morph.AiKit.Tests/TelemetryTests.cs`. Nomes de símbolo, de span, de métrica e das duas `ActivitySource` foram **medidos por reflexão e por leitura dos literais das assemblies do pin** em 2026-09-08, e em 2026-09-09 **todos os treze nomes `gen_ai.*` desta página** foram remedidos, um a um, por **teste de exclusividade**: os quatro `SetTag` da seção *Enrichment* e os nove das seções de span, métrica e atributo de agente. **Os treze existem** — depois de uma correção: `gen_ai.response.finish_reason`, no **singular**, não existia, só aparecia como cabeça de `finish_reason`**s**, e sobreviveu a duas varreduras porque as duas usaram `includes` — e **`includes` de um prefixo não prova o literal autônomo**. Os treze estão tabelados, em **duas** tabelas com propósitos diferentes: a de *Enrichment* registra os **4** `SetTag` daquele bloco (mais os **cinco** nomes rejeitados: o `finish_reason` singular, `PromptTokens`, `CompletionTokens`, `prompt_tokens` e `completion_tokens`), e a de distribuição, na seção *Nomes de span, métricas e atributos — medidos*, registra os **13** por assembly. A conferência é reproduzível por `node scripts/api-probe/probe.mjs tags` sobre este arquivo. A **instabilidade da convenção** — o split do semconv **v1.42.0 (2026-06-12)**, que depreciou e moveu todo `gen_ai.*` para `open-telemetry/semantic-conventions-genai`, onde nada GenAI está `Stable`, contra a v1.37 que o `OpenTelemetryChatClient` declara implementar — é **verificação documental**, apurada em 2026-09-08.",
375
+ "provedBy": [
376
+ "templates/dotnet/ai-kit/src/Morph.AiKit/Observability/MorphOpenTelemetryExtensions.cs"
377
+ ]
378
+ },
379
+ "ai-agents-production": {
380
+ "aliases": [
381
+ "agent middleware",
382
+ "production agent",
383
+ "a2a protocol",
384
+ "mcp integration",
385
+ "agent observability",
386
+ "agent telemetry",
387
+ "anti-hallucination",
388
+ "semantic caching",
389
+ "multi-tenant isolation",
390
+ "AgentIsolationKeyProvider",
391
+ "concurrent tool invocation"
392
+ ],
393
+ "verifiedAgainst": "Microsoft.Agents.AI 1.20.0 (ai-pin 2026-09-08) + Microsoft.Agents.AI.Hosting `1.20.0-preview.260831.1` e Microsoft.Agents.AI.A2A `1.20.0-preview.260831.1` (**fora do pin**; versões apuradas no nuget.org em 2026-09-08). **Verificação documental**, sem cláusula `provado por` — este standard é panorama, e cada tema tem dono canônico noutro standard. Os nomes de isolamento multi-tenant foram **medidos por reflexão sobre `Microsoft.Agents.AI.Hosting`** em 2026-09-08.",
394
+ "provedBy": []
395
+ },
396
+ "ai-agents-prompt-sources": {
397
+ "aliases": [
398
+ "prompts in db",
399
+ "agent prompts",
400
+ "prompt versioning",
401
+ "prompt hot-reload",
402
+ "editable instructions",
403
+ "prompt management",
404
+ "prompt sources",
405
+ "prompt por tenant",
406
+ "spec publicado",
407
+ "reconciliação de prompt"
408
+ ],
409
+ "verifiedAgainst": "Microsoft.Agents.AI 1.20.0 + Microsoft.Extensions.AI 10.9.0 (ai-pin 2026-09-08). **Verificação documental**, sem cláusula `provado por` — o ai-kit não traz loader de prompt, e os dois mecanismos descritos aqui são destilados de três produtos em produção. As **quatro** superfícies de API que este standard cita foram medidas por reflexão, e vivem em **três assemblies diferentes** — o carimbo diz onde remedir, então o nome importa: `IChatClient.AsAIAgent(instructions:, name:)` é `Microsoft.Extensions.AI.ChatClientExtensions`, em **`Microsoft.Agents.AI` 1.20.0** (medida em 2026-09-08); `AIAgent.RunAsync` (as oito sobrecargas) e `AIAgent.CreateSessionAsync` são de `Microsoft.Agents.AI.AIAgent`, na assembly **`Microsoft.Agents.AI.Abstractions` 1.20.0** — **remedidas** em 2026-09-09, porque a leitura de 2026-09-08 estava errada no *quê*, e a de 2026-09-09 estava errada no *onde* (as duas retificações estão no callout abaixo); e `builder.AddAIAgent` (§Keyed singleton) é `Microsoft.Agents.AI.Hosting.HostApplicationBuilderAgentExtensions` — cinco sobrecargas, na assembly **`Microsoft.Agents.AI.Hosting` 1.20.0.0**, que vem do pacote **`Microsoft.Agents.AI.Hosting` `1.20.0-preview.260831.1`**: ele é **prerelease** e está **FORA do `ai-pin.json`** (apurado em `scripts/api-probe/companions.json`, 2026-09-08) — quem adotar esta seção registra a dependência prerelease em `decisions.md`, como manda `ai-agents-production`. **Duas ressalvas de escopo**, porque um carimbo que não as diz promete mais do que mediu: `Microsoft.Agents.AI.Abstractions` e `Microsoft.Extensions.AI.Abstractions` são nomes de **assembly** (elas viajam dentro dos pacotes `Microsoft.Agents.AI` e `Microsoft.Extensions.AI`), não ids de pacote; e `IMemoryCache`/`DbContext`, usados no padrão de cache e na §Keyed singleton, são superfícies de ASP.NET Core e EF Core — **fora do pin, não medidas aqui, verificação documental**.",
410
+ "provedBy": []
411
+ },
412
+ "ai-agents-providers-model-registry": {
413
+ "aliases": [
414
+ "model registry",
415
+ "provider agnostic",
416
+ "model alias",
417
+ "IChatClient factory",
418
+ "multi-model",
419
+ "model selection",
420
+ "model config",
421
+ "switch provider",
422
+ "openai google anthropic ollama",
423
+ "direct model",
424
+ "api per alias",
425
+ "responses vs chat",
426
+ "reasoning effort",
427
+ "temperature vs reasoning",
428
+ "model pricing"
429
+ ],
430
+ "verifiedAgainst": "Microsoft.Agents.AI 1.20.0 + Microsoft.Extensions.AI 10.9.0 + OpenAI 2.13.0 (ai-pin 2026-09-08); provado por `templates/dotnet/ai-kit/src/Morph.AiKit/Providers/ModelRegistry.cs` e `.../Providers/ModelAlias.cs` e `.../Agents/AgentApi.cs`. Nomes de tipo do `Microsoft.Extensions.AI` e do `OpenAI` medidos por reflexão sobre as assemblies do pin em 2026-09-08.",
431
+ "provedBy": [
432
+ "templates/dotnet/ai-kit/src/Morph.AiKit/Providers/ModelRegistry.cs",
433
+ ".../Providers/ModelAlias.cs",
434
+ ".../Agents/AgentApi.cs"
435
+ ]
436
+ },
437
+ "ai-agents-rag-custom-pgvector": {
438
+ "aliases": [
439
+ "rag",
440
+ "vector search",
441
+ "pgvector",
442
+ "embeddings",
443
+ "custom rag",
444
+ "retrieval",
445
+ "semantic search",
446
+ "knowledge base",
447
+ "RAG tool",
448
+ "delta ingestion",
449
+ "incremental ingestion",
450
+ "lookup key",
451
+ "content hash"
452
+ ],
453
+ "verifiedAgainst": "Microsoft.Agents.AI 1.20.0 + Microsoft.Extensions.AI 10.9.0 (ai-pin 2026-09-08); `provado por templates/dotnet/ai-kit/src/Morph.AiKit/Rag/DeltaIngest.cs` **restrito à seção \"Ingestão delta por lookup-key\"** — é a única parte deste standard que o ai-kit compila. Todo o resto (pgvector, SQL, HNSW, embeddings, multi-tenant) é **verificação documental**; a versão e o status de `Microsoft.Extensions.DataIngestion` foram apurados no nuget.org em 2026-09-08. Em 2026-10-03, contra o mesmo pin, compilaram com `TreatWarningsAsErrors` os blocos de registro do `IEmbeddingGenerator`, do `VectorSearchTool` (EF Core + Pgvector.EntityFrameworkCore 0.3.0) e do *Exemplo de uso* (a ponte `Microsoft.Extensions.AI.OpenAI` 10.9.0 resolveu `OpenAI` 2.12.0); a forma anterior `RunAsync(question, ct)` não compilava (CS1503).",
454
+ "provedBy": [
455
+ "templates/dotnet/ai-kit/src/Morph.AiKit/Rag/DeltaIngest.cs"
456
+ ]
457
+ },
458
+ "ai-agents-service-tier-flex": {
459
+ "aliases": [
460
+ "service tier",
461
+ "flex tier",
462
+ "cost optimization",
463
+ "async tier",
464
+ "priority tier",
465
+ "tier flex",
466
+ "background inference",
467
+ "ChatServiceTier"
468
+ ],
469
+ "verifiedAgainst": "OpenAI 2.13.0 + Microsoft.Extensions.AI 10.9.0 (ai-pin 2026-09-08). **Verificação documental** da política de tiers (platform.openai.com/docs/guides/service-tiers, lido 2026-09-08), sem cláusula `provado por`: o ai-kit **referencia** o pacote `OpenAI` no `.csproj` — contrato de versão, régua = restore (`NU1102`) — mas **não o exercita**; não existe um único `using OpenAI` em `src/` (medido 2026-09-08), logo um rename de API não reprova a PR. Ver a tabela \"Dois níveis de garantia\" no README do kit. **O nome e o tipo da propriedade C# foram medidos por reflexão sobre a assembly `OpenAI` 2.13.0 em 2026-09-08**, e o marcador `// VERIFY` desta página foi RESOLVIDO por essa medição.",
470
+ "provedBy": []
471
+ },
472
+ "ai-agents-setup": {
473
+ "aliases": [
474
+ "MAF setup",
475
+ "Microsoft Agents AI",
476
+ "ChatClient",
477
+ "AsAIAgent",
478
+ "AIAgent dotnet",
479
+ "agent framework setup",
480
+ "MAF packages",
481
+ "MAF nuget",
482
+ "responses api",
483
+ "GetResponsesClient",
484
+ "store false",
485
+ "chat completions"
486
+ ],
487
+ "verifiedAgainst": "Microsoft.Agents.AI 1.20.0 + Microsoft.Extensions.AI 10.9.0 + OpenAI 2.13.0 (ai-pin 2026-09-08); provado por `templates/dotnet/ai-kit/src/Morph.AiKit/Agents/AgentFactory.cs` (pipeline e escolha de protocolo). A superfície do SDK `OpenAI` e das pontes `Microsoft.Agents.AI.OpenAI` / `Microsoft.Extensions.AI.OpenAI` foi **medida por reflexão sobre as assemblies do pin** em 2026-09-08 — o ai-kit **não exercita** o cliente concreto da OpenAI — referencia o pacote no `.csproj`, mas não há `using OpenAI` em `src/` (medido 2026-09-08); ver a tabela \"Dois níveis de garantia\" no README do kit.",
488
+ "provedBy": [
489
+ "templates/dotnet/ai-kit/src/Morph.AiKit/Agents/AgentFactory.cs"
490
+ ]
491
+ },
492
+ "ai-agents-structured-output": {
493
+ "aliases": [
494
+ "structured output",
495
+ "typed response",
496
+ "response format",
497
+ "schema validated output",
498
+ "record output",
499
+ "JSON schema agent",
500
+ "RunAsync generic",
501
+ "typed agent output",
502
+ "ToAgentResponseAsync",
503
+ "response format limits"
504
+ ],
505
+ "verifiedAgainst": "Microsoft.Agents.AI 1.20.0 + Microsoft.Extensions.AI 10.9.0 (ai-pin 2026-09-08); `provado por templates/dotnet/ai-kit/src/Morph.AiKit/Agents/AgentFactory.cs` **apenas** para o mapeamento de `AgentSpec.OutputSchema` → `ChatOptions.ResponseFormat = ChatResponseFormat.ForJsonSchema(...)`, que é o que o kit compila. `RunAsync<T>`, `Deserialize<T>` e os limites do `ResponseFormat` são **verificação documental**, com os nomes de tipo medidos por reflexão sobre `Microsoft.Extensions.AI.Abstractions` 10.9.0 em 2026-09-08.",
506
+ "provedBy": [
507
+ "templates/dotnet/ai-kit/src/Morph.AiKit/Agents/AgentFactory.cs"
508
+ ]
509
+ },
510
+ "ai-agents-sweet-spot": {
511
+ "aliases": [
512
+ "sweet spot",
513
+ "when to use agent",
514
+ "agent vs workflow",
515
+ "when not to use workflow",
516
+ "MAF decision",
517
+ "simple agent default",
518
+ "4 feature rule",
519
+ "single agent default",
520
+ "tool budget",
521
+ "how many tools"
522
+ ],
523
+ "verifiedAgainst": "Microsoft.Agents.AI 1.20.0 + Microsoft.Agents.AI.Workflows 1.20.0 (ai-pin 2026-09-08 para o primeiro; o segundo está **fora do pin**, versão apurada no nuget.org em 2026-09-08). **Verificação documental**, sem cláusula `provado por` — este standard é decisão de arquitetura, não API. A escada de complexidade foi reconferida e **continua correta**; o que entrou de novo é o custo de definição de tool por turno e o status do Handoff.",
524
+ "provedBy": []
525
+ },
526
+ "ai-agents-testing-ai": {
527
+ "aliases": [
528
+ "testar agente",
529
+ "fake IChatClient",
530
+ "ScriptedChatClient",
531
+ "harness de turno",
532
+ "eval de agente",
533
+ "teste sem rede",
534
+ "golden de prompt"
535
+ ],
536
+ "verifiedAgainst": "Microsoft.Extensions.AI 10.9.0 + Microsoft.Agents.AI 1.20.0 (ai-pin 2026-09-08); provado por `templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/Fakes/FakeChatClient.cs` e `.../src/Morph.AiKit/Providers/IProviderClientFactory.cs` — o fake roteirizado e a costura que dispensa rede são o que o kit compila e exercita. Harness de turno completo e evals com cache de resposta são **verificação documental** — o ai-kit não os traz.",
537
+ "provedBy": [
538
+ "templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/Fakes/FakeChatClient.cs",
539
+ ".../src/Morph.AiKit/Providers/IProviderClientFactory.cs"
540
+ ]
541
+ },
542
+ "ai-agents-vector-data-extensions": {
543
+ "aliases": [
544
+ "microsoft extensions vectordata",
545
+ "vectorstorecollection",
546
+ "vector store abstraction",
547
+ "data ingestion",
548
+ "ingestion pipeline",
549
+ "semantic kernel connectors exception",
550
+ "pgvector connector",
551
+ "vectorstorewriter",
552
+ "CommunityToolkit VectorData",
553
+ "connector rename"
554
+ ],
555
+ "verifiedAgainst": "Microsoft.Extensions.VectorData.Abstractions **10.9.0** + CommunityToolkit.VectorData.PgVector **1.0.1** + Microsoft.Extensions.DataIngestion **10.9.0-preview.1.26411.16** — nenhum deles está no `framework/ai-pin.json` (que cobre os 5 pacotes de agente), portanto **todas as versões acima foram apuradas na API do nuget.org em 2026-09-08** e são citadas com essa data, não como pin. **Verificação documental**, sem cláusula `provado por`: o ai-kit **não referencia nem exercita** VectorData — o pacote não está no `Morph.AiKit.csproj`, cujos cinco `PackageReference` são exatamente os do pin (medido 2026-09-08). Aqui nem a régua fraca do restore existe.",
556
+ "provedBy": []
557
+ },
558
+ "ai-agents-workflows": {
559
+ "aliases": [
560
+ "workflow",
561
+ "agent workflow",
562
+ "fan-in",
563
+ "fan-out",
564
+ "when not to use workflow",
565
+ "orchestration",
566
+ "AgentWorkflowBuilder",
567
+ "concurrent workflow",
568
+ "Microsoft.Agents.AI.Workflows",
569
+ "declarative workflow"
570
+ ],
571
+ "verifiedAgainst": "Microsoft.Agents.AI 1.20.0 (ai-pin 2026-09-08) + Microsoft.Agents.AI.Workflows 1.20.0, Microsoft.Agents.AI.Workflows.Declarative 1.20.0 e Microsoft.Agents.AI.Declarative `1.20.0-rc1` (**os três fora do pin**; versões apuradas no nuget.org em 2026-09-08). **Verificação documental**, sem cláusula `provado por` — o ai-kit não monta workflows. **A localização dos tipos de workflow foi medida por reflexão em 2026-09-08 e CORRIGE este standard**: eles não estão no pacote base.",
572
+ "provedBy": []
573
+ },
574
+ "architecture-vertical-slice-vertical-slice": {
575
+ "aliases": [
576
+ "vertical slice",
577
+ "VSA",
578
+ "slice architecture",
579
+ "feature slice",
580
+ "CQRS slice"
581
+ ],
582
+ "verifiedAgainst": ".NET 10 (SDK 10.0.400-preview) + EF Core 10.0.12 + FluentValidation 12.1.1 + Scrutor 7. Os blocos da slice (Handler, Validator, Endpoint) compilam com `TreatWarningsAsErrors` sobre o `Result`/`Error`/`ErrorHttpMapping` de `result-pattern.md` nos namespaces da árvore acima (`{ProjectName}` substituído; o Handler com `global using` de Abstractions/Database/Entities, o Endpoint só com os próprios `using`); Abstractions, Pipelines e DI são verificação documental.",
583
+ "provedBy": []
584
+ },
585
+ "backend-api-validation": {
586
+ "aliases": [
587
+ "FluentValidation",
588
+ "input validation",
589
+ "request validation",
590
+ "API validation",
591
+ "model validation"
592
+ ],
593
+ "verifiedAgainst": ".NET 10 (SDK 10.0.400-preview) + FluentValidation 12.1.1 + EF Core 10.0.12. The validator, `OrderStatus`, `OrderErrors` and state-check handler blocks compile with `TreatWarningsAsErrors` over the `Result`/`Error`/`ValidationError` of `result-pattern.md`.",
594
+ "provedBy": []
595
+ },
596
+ "backend-database-postgresql-database": {
597
+ "aliases": [
598
+ "PostgreSQL",
599
+ "postgres",
600
+ "pg",
601
+ "database design",
602
+ "SQL schema"
603
+ ],
604
+ "verifiedAgainst": "PostgreSQL 16/17 + EF Core 10.0.12 (Npgsql provider 10.0.3) + @neondatabase/serverless. The EF Core query blocks compile with `TreatWarningsAsErrors` inside a wrapper method over stand-in entities; the SQL is documentary.",
605
+ "provedBy": []
606
+ },
607
+ "backend-database-vector-search-rag": {
608
+ "aliases": [
609
+ "vector search",
610
+ "RAG",
611
+ "embeddings",
612
+ "pgvector",
613
+ "semantic search"
614
+ ],
615
+ "verifiedAgainst": ".NET 10 (SDK 10.0.400-preview) + Npgsql.EntityFrameworkCore.PostgreSQL 10.0.3 + Pgvector.EntityFrameworkCore 0.3.0 + Microsoft.Extensions.AI 10.9.0 + Microsoft.Agents.AI 1.20.0 (ai-pin 2026-09-08). Os blocos de indexação, indexação em lote, busca+geração (RAG), endpoint e job compilam com `TreatWarningsAsErrors` sobre o `Result`/`IHandler`/`ErrorHttpMapping` de `result-pattern.md`/`vertical-slice.md` e o `Document`/`ApplicationDbContext` de `neon-pgvector.md`; o registro do `IEmbeddingGenerator` por provedor, os custos e o SQL são verificação documental.",
616
+ "provedBy": []
617
+ },
618
+ "backend-dotnet-fluent-validation-vsa": {
619
+ "aliases": [
620
+ "FluentValidation VSA",
621
+ "validation decorator",
622
+ "validation pipeline",
623
+ "AbstractValidator",
624
+ "ValidationDecorator"
625
+ ],
626
+ "verifiedAgainst": ".NET 10 (SDK 10.0.400-preview) + FluentValidation 12.1.1. The validator block and the decorator (its three blocks assembled into one class) compile with `TreatWarningsAsErrors` over the `Result`/`ValidationError` of `result-pattern.md`, and the validator was run with `FakeTimeProvider` across a year change to show the year is read per validation.",
627
+ "provedBy": []
628
+ },
629
+ "backend-dotnet-result-pattern": {
630
+ "aliases": [
631
+ "Result<T>",
632
+ "railway oriented",
633
+ "error handling",
634
+ "Match pattern",
635
+ "Result monad"
636
+ ],
637
+ "verifiedAgainst": ".NET 10 (SDK 10.0.400-preview) + the shared framework `Microsoft.AspNetCore.App` 10 — the HTTP mapping uses `Results`/`IResult`/`StatusCodes`; the `Error`, `ValidationError`, `ResultExtensions`, `ErrorHttpMapping`, endpoint usage and `BookErrors` blocks compile with `TreatWarningsAsErrors` (the Anatomy blocks carry `{ ... }` placeholders and were compiled through a concrete stand-in).",
638
+ "provedBy": []
639
+ },
640
+ "backend-dotnet-scalar-ui": {
641
+ "aliases": [
642
+ "Scalar",
643
+ "API documentation",
644
+ "OpenAPI UI",
645
+ "Swagger replacement",
646
+ "Scalar.AspNetCore"
647
+ ],
648
+ "verifiedAgainst": ".NET 10 (SDK 10.0.400-preview) + Scalar.AspNetCore 2.x + Microsoft.AspNetCore.OpenApi 10. The `ApiTags` and tagged-endpoint blocks compile with `TreatWarningsAsErrors` over the `Result`/`ErrorHttpMapping` of `result-pattern.md` (ApiTags placed in `ProjectName.Constants`); the startup and metadata snippets (`async (...) => { ... }`) are fragments, checked against the docs only.",
649
+ "provedBy": []
650
+ },
651
+ "backend-dotnet-scrutor": {
652
+ "aliases": [
653
+ "Scrutor",
654
+ "auto-discovery",
655
+ "assembly scanning",
656
+ "decorator registration",
657
+ "handler registration"
658
+ ],
659
+ "verifiedAgainst": ".NET 10 + Scrutor 7 (`Scan`/`Decorate` API).",
660
+ "provedBy": []
661
+ },
662
+ "backend-dotnet-testing": {
663
+ "aliases": [
664
+ "xunit",
665
+ "TimeProvider",
666
+ "FakeTimeProvider",
667
+ "fake clock",
668
+ "integration test",
669
+ "ProblemDetails",
670
+ "error body assertion",
671
+ "test budget",
672
+ "orçamento de teste",
673
+ "[Theory] table"
674
+ ],
675
+ "verifiedAgainst": ".NET 10 + xUnit 2 + `Microsoft.Extensions.TimeProvider.Testing`.",
676
+ "provedBy": []
677
+ },
678
+ "backend-dotnet-vsa-handler-patterns": {
679
+ "aliases": [
680
+ "VSA handler",
681
+ "vertical slice handler",
682
+ "feature slice",
683
+ "IHandler pattern",
684
+ "handler endpoint"
685
+ ],
686
+ "verifiedAgainst": ".NET 10 (SDK 10.0.400-preview; minimal APIs, primary constructors, `Guid.CreateVersion7()`). The \"Complete Endpoint Example\" block compiles with `TreatWarningsAsErrors` over the `Result`/`ErrorHttpMapping` of `result-pattern.md` (in `ProjectName.Abstractions`/`ProjectName.Extensions`, reached only through the block's own `using`s); the other blocks are documentary.",
687
+ "provedBy": []
688
+ },
689
+ "backend-integrations-asaas-asaas-api": {
690
+ "aliases": [
691
+ "asaas",
692
+ "payment",
693
+ "PIX",
694
+ "boleto",
695
+ "Brazilian payment"
696
+ ],
697
+ "verifiedAgainst": "Asaas REST API v3 (docs read via context7 on 2026-10-03: headers, `POST /payments`, `GET /payments?externalReference=`, `pixQrCode`, webhook payload, delivery and error rules) + .NET 10 (SDK 10.0.400-preview, `IHttpClientFactory` from the ASP.NET Core shared framework) + EF Core 10.0.12. The options, client, registration, PIX slice, webhook slice/endpoint and CPF/CNPJ blocks compile with `TreatWarningsAsErrors` over the `Result`/`ErrorHttpMapping` of `result-pattern.md`; the CPF/CNPJ validator was run against valid and invalid documents (numeric and the alphanumeric `12.ABC.345/01DE-35`), and the `BaseUrl` trailing-slash rule and the `dueDate` JSON shape were checked by running them; the SQL is documentary.",
698
+ "provedBy": []
699
+ },
700
+ "backend-integrations-hangfire-hangfire-jobs": {
701
+ "aliases": [
702
+ "hangfire",
703
+ "background jobs",
704
+ "scheduled jobs",
705
+ "recurring",
706
+ "cron",
707
+ "fire and forget"
708
+ ],
709
+ "verifiedAgainst": ".NET 10 (SDK 10.0.400-preview) + Hangfire.Core/Hangfire.AspNetCore 1.8.25 + Hangfire.PostgreSql 1.21.1 + Newtonsoft.Json 13.0.4. The startup, job/handler, dashboard-filter and idempotency blocks compile with `TreatWarningsAsErrors`; the Job Types calls compile inside a wrapper method; the per-job DI scope (`AspNetCoreJobActivator` → `IServiceScopeFactory`) and the `PostgreSqlStorageOptions` defaults were read by reflection on those assemblies; the pooled-endpoint limits (LISTEN/NOTIFY, migrations on the direct string) come from the Neon connection-pooling docs. Cron strings are documentary.",
710
+ "provedBy": []
711
+ },
712
+ "backend-integrations-neon-auth-neon-auth": {
713
+ "aliases": [
714
+ "neon auth",
715
+ "better auth",
716
+ "authentication",
717
+ "OAuth",
718
+ "JWT",
719
+ "session management",
720
+ "trusted origins",
721
+ "EdDSA",
722
+ "Ed25519",
723
+ "BouncyCastle",
724
+ "signature validator",
725
+ "jwks",
726
+ "middleware runtime",
727
+ "api prefix",
728
+ "data api",
729
+ "postgrest",
730
+ "bypass backend",
731
+ "direct database access"
732
+ ],
733
+ "verifiedAgainst": "Neon Auth — @neondatabase/auth + @neondatabase/auth-ui (Better Auth).",
734
+ "provedBy": []
735
+ },
736
+ "backend-integrations-resend-resend-email": {
737
+ "aliases": [
738
+ "resend",
739
+ "email",
740
+ "transactional email",
741
+ "SMTP",
742
+ "email notification"
743
+ ],
744
+ "verifiedAgainst": "Resend Node SDK 4 + Resend .NET SDK + React Email.",
745
+ "provedBy": []
746
+ },
747
+ "data-nosql-cache-redis": {
748
+ "aliases": [
749
+ "redis",
750
+ "cache",
751
+ "distributed cache",
752
+ "IDistributedCache",
753
+ "cache-aside",
754
+ "StackExchange.Redis"
755
+ ],
756
+ "verifiedAgainst": ".NET 10 (SDK 10.0.400-preview) + Microsoft.Extensions.Caching.StackExchangeRedis 10.0.12 + StackExchange.Redis 2.13.17 + EF Core 10.0.12. The registration, cache-aside handler, invalidation and rate-limit blocks compile with `TreatWarningsAsErrors` over the `Result` of `result-pattern.md`; package dependencies read from the nuget.org nuspec on 2026-10-03.",
757
+ "provedBy": []
758
+ },
759
+ "data-nosql-cosmos-db": {
760
+ "aliases": [
761
+ "cosmos",
762
+ "CosmosDB",
763
+ "document database",
764
+ "partition key",
765
+ "RUs"
766
+ ],
767
+ "verifiedAgainst": ".NET 10 (SDK 10.0.400-preview) + Microsoft.Azure.Cosmos 3.63.2 + Newtonsoft.Json 13.0.4 — every `csharp` block below compiles with `TreatWarningsAsErrors` against the `Result`/`Error` types of `backend-dotnet-result-pattern`.",
768
+ "provedBy": []
769
+ },
770
+ "data-vector-search-rag-chunking": {
771
+ "aliases": [
772
+ "RAG chunking",
773
+ "document chunking",
774
+ "text splitting",
775
+ "chunk overlap",
776
+ "embedding chunks"
777
+ ],
778
+ "verifiedAgainst": ".NET 10 (chunking algorithms — language-level, no external package).",
779
+ "provedBy": []
780
+ },
781
+ "frontend-design-system-ai-image-generation": {
782
+ "aliases": [
783
+ "Image Generation",
784
+ "AI Assets",
785
+ "Gemini Images",
786
+ "brand fidelity",
787
+ "reference images",
788
+ "favicon",
789
+ "og image",
790
+ "asset generation"
791
+ ],
792
+ "verifiedAgainst": "morph-assets MCP (OpenRouter; default model `openai/gpt-image-2.5-flare`) + Next.js 15 `next/image`.",
793
+ "provedBy": []
794
+ },
795
+ "frontend-design-system-ai-video-generation": {
796
+ "aliases": [
797
+ "video generation",
798
+ "seedance",
799
+ "img2vid",
800
+ "endImage",
801
+ "directional footage",
802
+ "loop video",
803
+ "E005",
804
+ "animate render",
805
+ "scroll scrub footage"
806
+ ],
807
+ "verifiedAgainst": "morph-assets MCP (generate_video, generate_loop_video, get_video, library, media_tool) over OpenRouter; models `bytedance/seedance-1-5-pro` and `bytedance/seedance-2.0`.",
808
+ "provedBy": []
809
+ },
810
+ "frontend-design-system-animations": {
811
+ "aliases": [
812
+ "animations",
813
+ "transitions",
814
+ "motion",
815
+ "CSS animations",
816
+ "keyframes",
817
+ "prefers-reduced-motion"
818
+ ],
819
+ "verifiedAgainst": "CSS animations/transitions (language-level, no framework).",
820
+ "provedBy": []
821
+ },
822
+ "frontend-design-system-naming": {
823
+ "aliases": [
824
+ "BEM",
825
+ "CSS naming",
826
+ "class naming",
827
+ "design token naming",
828
+ "component naming"
829
+ ],
830
+ "verifiedAgainst": "CSS (BEM + custom properties — language-level, no framework).",
831
+ "provedBy": []
832
+ },
833
+ "frontend-design-system-premium-finish": {
834
+ "aliases": [
835
+ "premium finish",
836
+ "polish layer",
837
+ "film grain",
838
+ "atmosphere",
839
+ "load-in stagger",
840
+ "scrim",
841
+ "text over video",
842
+ "metallic accent",
843
+ "looks like a template"
844
+ ],
845
+ "verifiedAgainst": "Production landing pages, CSS-only techniques, no runtime dependency.",
846
+ "provedBy": []
847
+ },
848
+ "frontend-gsap-core": {
849
+ "aliases": [
850
+ "GSAP",
851
+ "GreenSock",
852
+ "gsap.to",
853
+ "gsap.from",
854
+ "useGSAP",
855
+ "gsap timeline",
856
+ "gsap utils",
857
+ "gsap performance"
858
+ ],
859
+ "verifiedAgainst": "GSAP 3.13 + @gsap/react.",
860
+ "provedBy": []
861
+ },
862
+ "frontend-gsap-plugins": {
863
+ "aliases": [
864
+ "Flip",
865
+ "SplitText",
866
+ "MorphSVG",
867
+ "DrawSVG",
868
+ "MotionPath",
869
+ "Draggable",
870
+ "Observer",
871
+ "ScrollToPlugin"
872
+ ],
873
+ "verifiedAgainst": "GSAP 3.13 + @gsap/react.",
874
+ "provedBy": []
875
+ },
876
+ "frontend-gsap-scrolltrigger": {
877
+ "aliases": [
878
+ "ScrollTrigger",
879
+ "scroll animation",
880
+ "pinning",
881
+ "scrubbing",
882
+ "parallax",
883
+ "scroll-driven"
884
+ ],
885
+ "verifiedAgainst": "GSAP 3.13 ScrollTrigger + @gsap/react.",
886
+ "provedBy": []
887
+ },
888
+ "frontend-nextjs-app-router": {
889
+ "aliases": [
890
+ "app router",
891
+ "Next.js 14",
892
+ "server components",
893
+ "app directory",
894
+ "RSC"
895
+ ],
896
+ "verifiedAgainst": "Next.js 15.",
897
+ "provedBy": []
898
+ },
899
+ "frontend-nextjs-components": {
900
+ "aliases": [
901
+ "react components",
902
+ "server component",
903
+ "client component",
904
+ "shadcn/ui",
905
+ "UI components"
906
+ ],
907
+ "verifiedAgainst": "Next.js 16 + shadcn 4 CLI (the code blocks typecheck under `tsc --strict`).",
908
+ "provedBy": []
909
+ },
910
+ "frontend-nextjs-data-fetching": {
911
+ "aliases": [
912
+ "TanStack Query",
913
+ "react-query",
914
+ "server actions",
915
+ "data fetching",
916
+ "useQuery"
917
+ ],
918
+ "verifiedAgainst": "Next.js 15 + TanStack Query 5 + Zod 4.",
919
+ "provedBy": []
920
+ },
921
+ "frontend-nextjs-forms": {
922
+ "aliases": [
923
+ "react-hook-form",
924
+ "Zod",
925
+ "form validation",
926
+ "shadcn Field",
927
+ "Controller"
928
+ ],
929
+ "verifiedAgainst": "Next.js 16 + react-hook-form 7 + Zod 4 + @hookform/resolvers 5 + shadcn 4 `Field` (the code blocks typecheck under `tsc --strict`).",
930
+ "provedBy": []
931
+ },
932
+ "frontend-nextjs-motion-patterns": {
933
+ "aliases": [
934
+ "framer-motion",
935
+ "animation variants",
936
+ "motion design",
937
+ "page transition",
938
+ "AnimatePresence"
939
+ ],
940
+ "verifiedAgainst": "Motion for React 12+ (`motion`, imports from `motion/react`); the npm registry and the `motion`/`framer-motion`/`motion-dom` 14.0.0 typings were read on 2026-10-03 (`motion/react` re-exports `framer-motion`, which re-exports `motion-dom`: `Variants`, `useInView`, `AnimatePresence`, `useReducedMotion`, `staggerChildren`/`delayChildren` all present). The TSX snippets are documentary.",
941
+ "provedBy": []
942
+ },
943
+ "frontend-nextjs-naming-conventions": {
944
+ "aliases": [
945
+ "naming conventions",
946
+ "file naming",
947
+ "component naming",
948
+ "Next.js naming",
949
+ "TypeScript naming"
950
+ ],
951
+ "verifiedAgainst": "Next.js 15 + Zod 4.",
952
+ "provedBy": []
953
+ },
954
+ "frontend-nextjs-nextjs-patterns": {
955
+ "aliases": [
956
+ "Next.js patterns",
957
+ "middleware",
958
+ "auth patterns",
959
+ "caching patterns",
960
+ "image optimization"
961
+ ],
962
+ "verifiedAgainst": "Next.js 15 + TanStack Query 5 + Zod 4 + react-hook-form 7.",
963
+ "provedBy": []
964
+ },
965
+ "frontend-nextjs-project-structure": {
966
+ "aliases": [
967
+ "project structure",
968
+ "folder structure",
969
+ "src directory",
970
+ "app directory organization"
971
+ ],
972
+ "verifiedAgainst": "Next.js 15 (App Router, `src/` layout).",
973
+ "provedBy": []
974
+ },
975
+ "frontend-nextjs-state-management": {
976
+ "aliases": [
977
+ "zustand",
978
+ "React context",
979
+ "global state",
980
+ "state management",
981
+ "client state"
982
+ ],
983
+ "verifiedAgainst": "Next.js 15 + TanStack Query 5 + Zustand 5.",
984
+ "provedBy": []
985
+ },
986
+ "frontend-nextjs-testing": {
987
+ "aliases": [
988
+ "vitest",
989
+ "jest",
990
+ "testing-library",
991
+ "Playwright",
992
+ "Next.js testing",
993
+ "component tests",
994
+ "test budget",
995
+ "orçamento de teste",
996
+ "it.each table"
997
+ ],
998
+ "verifiedAgainst": "Vitest 3 + React Testing Library 16 + MSW 2.",
999
+ "provedBy": []
1000
+ },
1001
+ "frontend-scroll-driven-frame-scrub": {
1002
+ "aliases": [
1003
+ "frame scrub",
1004
+ "canvas scrub",
1005
+ "scroll-driven video",
1006
+ "scrollytelling video",
1007
+ "apple scroll video",
1008
+ "ffmpeg frames",
1009
+ "poster fallback"
1010
+ ],
1011
+ "verifiedAgainst": "GSAP 3.13 ScrollTrigger + Lenis 1.x + ffmpeg 6.x, shipped to production.",
1012
+ "provedBy": []
1013
+ },
1014
+ "frontend-scroll-driven-scroll-components": {
1015
+ "aliases": [
1016
+ "pinned gallery",
1017
+ "horizontal scroll",
1018
+ "scroll reveal",
1019
+ "parallax drift",
1020
+ "count-up",
1021
+ "lightbox",
1022
+ "scroll progress",
1023
+ "expanding modal"
1024
+ ],
1025
+ "verifiedAgainst": "GSAP 3.13 (ScrollTrigger, matchMedia, context) + React 18 + Lenis 1.x, shipped to production.",
1026
+ "provedBy": []
1027
+ },
1028
+ "frontend-scroll-driven-smooth-scroll": {
1029
+ "aliases": [
1030
+ "lenis",
1031
+ "smooth scroll",
1032
+ "scroll wiring",
1033
+ "gsap ticker",
1034
+ "window.__lenis",
1035
+ "scrolltrigger refresh",
1036
+ "HMR stale triggers"
1037
+ ],
1038
+ "verifiedAgainst": "Lenis 1.x + GSAP 3.13 ScrollTrigger + Vite 5, shipped to production.",
1039
+ "provedBy": []
1040
+ },
1041
+ "frontend-seo-meta-schema-audit": {
1042
+ "aliases": [
1043
+ "seo",
1044
+ "meta tags",
1045
+ "open graph",
1046
+ "og:image",
1047
+ "schema.org",
1048
+ "json-ld",
1049
+ "rich results",
1050
+ "lighthouse",
1051
+ "go-live audit",
1052
+ "canonical"
1053
+ ],
1054
+ "verifiedAgainst": "Schema.org vocabulary + Lighthouse via Chrome DevTools MCP, shipped to production.",
1055
+ "provedBy": []
1056
+ },
1057
+ "infrastructure-docker-coolify-deploy": {
1058
+ "aliases": [
1059
+ "coolify",
1060
+ "docker deploy",
1061
+ "self-hosted",
1062
+ "VPS deployment",
1063
+ "docker compose",
1064
+ "coolify api",
1065
+ "ssh deploy"
1066
+ ],
1067
+ "verifiedAgainst": ".NET 10 + Next.js 15 + Node 22 (Docker base images) + Coolify 4.x API. The `POST /api/v1/deploy` contract was checked against the Coolify docs/OpenAPI on 2026-10-03, and Coolify 4.3.23 was observed answering `GET /deploy` with \"This endpoint has changed to a POST request\"; Dockerfiles and snippets are documentary.",
1068
+ "provedBy": []
1069
+ },
1070
+ "infrastructure-docker-local-compose-isolation": {
1071
+ "aliases": [
1072
+ "compose isolation",
1073
+ "worktree ports",
1074
+ "container_name",
1075
+ "POSTGRES_PORT",
1076
+ "COMPOSE_PROJECT_NAME",
1077
+ "port block",
1078
+ "PG_PORT",
1079
+ "portEnvNames",
1080
+ "local docker compose"
1081
+ ],
1082
+ "verifiedAgainst": "Docker Compose v2 + morph-spec 8.34 (dedicated stack per worktree).",
1083
+ "provedBy": []
1084
+ },
1085
+ "infrastructure-neon-pgrag": {
1086
+ "aliases": [
1087
+ "pgrag",
1088
+ "RAG in SQL",
1089
+ "embedding pipeline",
1090
+ "Neon RAG",
1091
+ "in-database RAG"
1092
+ ],
1093
+ "verifiedAgainst": "Neon pgrag (`rag` extension family — experimental, see Core Rules).",
1094
+ "provedBy": []
1095
+ },
1096
+ "infrastructure-neon-pgvector": {
1097
+ "aliases": [
1098
+ "pgvector",
1099
+ "vector embeddings",
1100
+ "similarity search",
1101
+ "Neon vectors",
1102
+ "HNSW index"
1103
+ ],
1104
+ "verifiedAgainst": ".NET 10 (SDK 10.0.400-preview) + Npgsql.EntityFrameworkCore.PostgreSQL 10.0.3 + Pgvector.EntityFrameworkCore 0.3.0 + Microsoft.Extensions.AI 10.9.0 (ai-pin 2026-09-08). The entity, configuration, DbContext, search-handler and raw-Npgsql blocks compile with `TreatWarningsAsErrors` (handler over the `Result`/`IHandler` of `result-pattern.md`/`vertical-slice.md`), and the handler's query shape was translated with `ToQueryString()` to `ORDER BY d.embedding <=> @query`; the SQL (index DDL, `ef_search`, the two SQL functions) is documentary, checked against the pgvector README.",
1105
+ "provedBy": []
1106
+ },
1107
+ "infrastructure-neon-setup": {
1108
+ "aliases": [
1109
+ "Neon",
1110
+ "neonctl",
1111
+ "serverless postgres",
1112
+ "Neon CLI",
1113
+ "Neon setup"
1114
+ ],
1115
+ "verifiedAgainst": ".NET 10 (SDK 10.0.400-preview) + Npgsql.EntityFrameworkCore.PostgreSQL 10.0.3 + neonctl. The DbContext registration, design-time factory and cold-start blocks compile with `TreatWarningsAsErrors`; that Npgsql 10 rejects `postgresql://` URIs and marks `Trust Server Certificate` as \"no longer needed and does nothing\" was measured on 10.0.3; the suspend-timeout API and `--cu` ranges were checked against the Neon docs (context7). neonctl commands are documentary.",
1116
+ "provedBy": []
1117
+ },
1118
+ "integration-mcp-mcp-tools": {
1119
+ "aliases": [
1120
+ "MCP",
1121
+ "Model Context Protocol",
1122
+ "Claude tools",
1123
+ "MCP server",
1124
+ "MCP client"
1125
+ ],
1126
+ "verifiedAgainst": "Claude Code 2.1.282 MCP tooling — context7, Playwright (as plugin and as a project MCP server); GitHub via `gh` CLI; Neon via its MCP or `neonctl`.",
1127
+ "provedBy": []
1128
+ },
1129
+ "frontend-admin-app-data-table": {
1130
+ "aliases": [
1131
+ "data table",
1132
+ "admin list",
1133
+ "server-side pagination",
1134
+ "paginação",
1135
+ "tabela de dados",
1136
+ "ordenação no servidor",
1137
+ "empty state",
1138
+ "row selection",
1139
+ "bulk actions",
1140
+ "manualPagination"
1141
+ ],
1142
+ "verifiedAgainst": "Next.js 16 App Router + @tanstack/react-table 9 + Zod 4 + shadcn 4 (the code blocks typecheck under `tsc --strict`).",
1143
+ "provedBy": []
1144
+ },
1145
+ "frontend-admin-app-feedback": {
1146
+ "aliases": [
1147
+ "confirmation dialog",
1148
+ "confirm dialog",
1149
+ "delete confirmation",
1150
+ "toast",
1151
+ "sonner",
1152
+ "toast messages",
1153
+ "undo toast",
1154
+ "diálogo de confirmação"
1155
+ ],
1156
+ "verifiedAgainst": "shadcn 4 `AlertDialog` (Radix) + sonner 2 + TanStack Query 5 (the code blocks typecheck under `tsc --strict`).",
1157
+ "provedBy": []
1158
+ },
1159
+ "frontend-admin-app-forms": {
1160
+ "aliases": [
1161
+ "admin form",
1162
+ "crud form",
1163
+ "server validation errors",
1164
+ "ValidationProblemDetails",
1165
+ "unsaved changes",
1166
+ "formulário"
1167
+ ],
1168
+ "verifiedAgainst": "react-hook-form 7 + @hookform/resolvers 5 + Zod 4 + TanStack Query 5 + shadcn 4 `Field` (the code blocks typecheck under `tsc --strict`).",
1169
+ "provedBy": []
1170
+ },
1171
+ "frontend-admin-app-page-structure": {
1172
+ "aliases": [
1173
+ "tabs",
1174
+ "abas",
1175
+ "long page",
1176
+ "página longa",
1177
+ "wizard",
1178
+ "multi-step form",
1179
+ "stepper",
1180
+ "detail page"
1181
+ ],
1182
+ "verifiedAgainst": "Next.js 16 App Router + shadcn 4 `Tabs` (Radix) + react-hook-form 7 + Zod 4 (the code blocks typecheck under `tsc --strict`).",
1183
+ "provedBy": []
1184
+ },
1185
+ "architecture-code-comments": {
1186
+ "aliases": [
1187
+ "code comments",
1188
+ "comentário de código",
1189
+ "comment policy",
1190
+ "política de comentário",
1191
+ "comentário de processo",
1192
+ "self-documenting code"
1193
+ ],
1194
+ "verifiedAgainst": "C#, TypeScript e JavaScript (convenção de linguagem, sem pacote externo).",
1195
+ "provedBy": []
1196
+ },
1197
+ "ai-agents-tool-adapters": {
1198
+ "aliases": [
1199
+ "tool fina",
1200
+ "adaptador de tool",
1201
+ "Ops",
1202
+ "Desfecho",
1203
+ "Render",
1204
+ "regra de negocio em tool",
1205
+ "descricao da tool",
1206
+ "golden de tool",
1207
+ "refactor neutro",
1208
+ "migracao de teste"
1209
+ ],
1210
+ "verifiedAgainst": "Microsoft.Extensions.AI 10.9.0 + Microsoft.Agents.AI 1.20.0 (ai-pin 2026-09-08); os dois blocos C# abaixo foram extraídos com `scripts/extract-doc-csharp.mjs` e compilados contra o pin com `TreatWarningsAsErrors`, e os três testes do segundo bloco foram executados e passam. **A separação em si e a migração de teste são verificação documental:** vêm da feature `tools-finas` do MORPH_GHLBrain e o ai-kit não as traz.",
1211
+ "provedBy": []
1212
+ }
1213
+ },
1214
+ "sharedAliases": {
1215
+ "agent middleware": [
1216
+ "ai-agents-production",
1217
+ "ai-agents-middleware-patterns"
1218
+ ],
1219
+ "anti-hallucination": [
1220
+ "ai-agents-production",
1221
+ "ai-agents-middleware-patterns"
1222
+ ],
1223
+ "agent observability": [
1224
+ "ai-agents-production",
1225
+ "ai-agents-observability-patterns"
1226
+ ],
1227
+ "agent telemetry": [
1228
+ "ai-agents-production",
1229
+ "ai-agents-observability-patterns"
1230
+ ],
1231
+ "when not to use workflow": [
1232
+ "ai-agents-workflows",
1233
+ "ai-agents-sweet-spot"
1234
+ ],
1235
+ "rag": [
1236
+ "ai-agents-rag-custom-pgvector",
1237
+ "backend-database-vector-search-rag"
1238
+ ],
1239
+ "vector search": [
1240
+ "ai-agents-rag-custom-pgvector",
1241
+ "backend-database-vector-search-rag"
1242
+ ],
1243
+ "pgvector": [
1244
+ "ai-agents-rag-custom-pgvector",
1245
+ "backend-database-vector-search-rag",
1246
+ "infrastructure-neon-pgvector"
1247
+ ],
1248
+ "embeddings": [
1249
+ "ai-agents-rag-custom-pgvector",
1250
+ "backend-database-vector-search-rag"
1251
+ ],
1252
+ "semantic search": [
1253
+ "ai-agents-rag-custom-pgvector",
1254
+ "backend-database-vector-search-rag"
1255
+ ],
1256
+ "middleware": [
1257
+ "ai-agents-middleware-patterns",
1258
+ "frontend-nextjs-nextjs-patterns"
1259
+ ],
1260
+ "image generation": [
1261
+ "ai-agents-modalities-image-gen",
1262
+ "frontend-design-system-ai-image-generation"
1263
+ ],
1264
+ "mcp": [
1265
+ "ai-agents-mcp-tools",
1266
+ "integration-mcp-mcp-tools"
1267
+ ],
1268
+ "model context protocol": [
1269
+ "ai-agents-mcp-tools",
1270
+ "integration-mcp-mcp-tools"
1271
+ ],
1272
+ "mcp client": [
1273
+ "ai-agents-mcp-tools",
1274
+ "integration-mcp-mcp-tools"
1275
+ ],
1276
+ "mcp server": [
1277
+ "ai-agents-mcp-server",
1278
+ "integration-mcp-mcp-tools"
1279
+ ],
1280
+ "feature slice": [
1281
+ "architecture-vertical-slice-vertical-slice",
1282
+ "backend-dotnet-vsa-handler-patterns"
1283
+ ],
1284
+ "component naming": [
1285
+ "frontend-design-system-naming",
1286
+ "frontend-nextjs-naming-conventions"
1287
+ ],
1288
+ "video generation": [
1289
+ "ai-agents-media-video",
1290
+ "frontend-design-system-ai-video-generation"
1291
+ ],
1292
+ "seedance": [
1293
+ "ai-agents-media-video",
1294
+ "frontend-design-system-ai-video-generation"
1295
+ ],
1296
+ "test budget": [
1297
+ "backend-dotnet-testing",
1298
+ "frontend-nextjs-testing"
1299
+ ],
1300
+ "orçamento de teste": [
1301
+ "backend-dotnet-testing",
1302
+ "frontend-nextjs-testing"
1303
+ ]
1304
+ }
1305
+ }