@polymorphism-tech/morph-spec 4.8.19 → 4.9.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 (137) hide show
  1. package/CLAUDE.md +21 -0
  2. package/README.md +2 -2
  3. package/bin/morph-spec.js +15 -56
  4. package/bin/task-manager.js +115 -14
  5. package/bin/validate.js +67 -33
  6. package/claude-plugin.json +1 -1
  7. package/docs/CHEATSHEET.md +201 -203
  8. package/docs/QUICKSTART.md +2 -2
  9. package/framework/CLAUDE.md +21 -0
  10. package/framework/agents.json +698 -176
  11. package/framework/hooks/claude-code/post-tool-use/context-refresh.js +1 -1
  12. package/framework/hooks/claude-code/post-tool-use/dispatch.js +2 -2
  13. package/framework/hooks/claude-code/post-tool-use/skill-reminder.js +155 -0
  14. package/framework/hooks/claude-code/pre-tool-use/protect-spec-files.js +1 -1
  15. package/framework/hooks/claude-code/session-start/inject-morph-context.js +71 -2
  16. package/framework/hooks/claude-code/statusline.py +76 -30
  17. package/framework/hooks/claude-code/user-prompt/set-terminal-title.js +14 -6
  18. package/framework/hooks/shared/activity-logger.js +0 -24
  19. package/framework/hooks/shared/phase-utils.js +3 -0
  20. package/framework/hooks/shared/skill-reminder-helpers.js +79 -0
  21. package/framework/hooks/shared/stale-task-reset.js +57 -0
  22. package/framework/hooks/shared/state-reader.js +2 -2
  23. package/framework/hooks/shared/worktree-helpers.js +53 -0
  24. package/framework/phases.json +40 -8
  25. package/framework/skills/level-0-meta/brainstorming/SKILL.md +1 -1
  26. package/framework/skills/level-0-meta/code-review/SKILL.md +1 -1
  27. package/framework/skills/level-0-meta/code-review-nextjs/SKILL.md +163 -163
  28. package/framework/skills/level-0-meta/frontend-review/SKILL.md +5 -5
  29. package/framework/skills/level-0-meta/morph-checklist/SKILL.md +2 -2
  30. package/framework/skills/level-0-meta/morph-init/SKILL.md +5 -5
  31. package/framework/skills/level-0-meta/morph-replicate/SKILL.md +4 -4
  32. package/framework/skills/level-0-meta/morph-replicate/references/blazor-html-mapping.md +1 -1
  33. package/framework/skills/level-0-meta/post-implementation/SKILL.md +59 -12
  34. package/framework/skills/level-0-meta/simulation-checklist/SKILL.md +1 -1
  35. package/framework/skills/level-0-meta/terminal-title/SKILL.md +1 -1
  36. package/framework/skills/level-0-meta/tool-usage-guide/SKILL.md +1 -1
  37. package/framework/skills/level-0-meta/tool-usage-guide/references/tools-per-phase.md +6 -5
  38. package/framework/skills/level-0-meta/verification-before-completion/SKILL.md +1 -1
  39. package/framework/skills/level-1-workflows/phase-clarify/SKILL.md +215 -189
  40. package/framework/skills/level-1-workflows/phase-codebase-analysis/SKILL.md +251 -251
  41. package/framework/skills/level-1-workflows/phase-design/SKILL.md +382 -365
  42. package/framework/skills/level-1-workflows/phase-implement/SKILL.md +492 -450
  43. package/framework/skills/level-1-workflows/phase-setup/SKILL.md +194 -190
  44. package/framework/skills/level-1-workflows/phase-tasks/SKILL.md +270 -270
  45. package/framework/skills/level-1-workflows/phase-uiux/SKILL.md +285 -285
  46. package/framework/standards/STANDARDS.json +640 -88
  47. package/framework/standards/infrastructure/vercel/vercel-database.md +106 -0
  48. package/framework/templates/REGISTRY.json +1825 -1909
  49. package/framework/templates/context/CONTEXT-FEATURE.md +276 -276
  50. package/framework/templates/docs/onboarding.md +1 -5
  51. package/package.json +2 -6
  52. package/src/commands/agents/dispatch-agents.js +55 -4
  53. package/src/commands/project/doctor.js +16 -47
  54. package/src/commands/project/init.js +1 -1
  55. package/src/commands/project/status.js +2 -2
  56. package/src/commands/project/update.js +381 -365
  57. package/src/commands/project/worktree.js +154 -0
  58. package/src/commands/state/advance-phase.js +120 -30
  59. package/src/commands/state/approve.js +2 -2
  60. package/src/commands/state/index.js +7 -8
  61. package/src/commands/state/phase-runner.js +1 -1
  62. package/src/commands/state/state.js +61 -6
  63. package/src/commands/tasks/task.js +78 -99
  64. package/src/commands/templates/template-render.js +93 -173
  65. package/src/commands/trust/trust.js +26 -21
  66. package/src/core/paths/output-schema.js +15 -0
  67. package/src/core/state/state-manager.js +28 -54
  68. package/src/core/workflows/workflow-detector.js +9 -87
  69. package/src/lib/phase-chain/phase-validator.js +330 -0
  70. package/src/lib/stack/stack-profile.js +88 -0
  71. package/src/lib/tasks/task-classifier.js +16 -0
  72. package/src/lib/tasks/test-runner.js +77 -0
  73. package/src/lib/trust/trust-manager.js +32 -144
  74. package/src/lib/validators/spec-validator.js +58 -4
  75. package/src/lib/validators/validation-runner.js +23 -11
  76. package/src/scripts/setup-infra.js +240 -224
  77. package/src/utils/agents-installer.js +2 -2
  78. package/src/utils/banner.js +1 -1
  79. package/src/utils/claude-settings-manager.js +1 -1
  80. package/src/utils/file-copier.js +1 -0
  81. package/src/utils/hooks-installer.js +258 -8
  82. package/framework/hooks/dev/check-sync-health.js +0 -117
  83. package/framework/hooks/dev/guard-version-numbers.js +0 -57
  84. package/framework/hooks/dev/sync-standards-registry.js +0 -60
  85. package/framework/hooks/dev/sync-template-registry.js +0 -60
  86. package/framework/hooks/dev/validate-skill-format.js +0 -70
  87. package/framework/hooks/dev/validate-standard-format.js +0 -73
  88. package/framework/templates/meta-prompts/hops/hop-retry.md +0 -78
  89. package/framework/templates/meta-prompts/hops/hop-validation.md +0 -97
  90. package/framework/templates/meta-prompts/hops/hop-wrapper.md +0 -36
  91. package/framework/workflows/configs/design-impl.json +0 -49
  92. package/framework/workflows/configs/express.json +0 -45
  93. package/framework/workflows/configs/fast-track.json +0 -42
  94. package/framework/workflows/configs/full-morph.json +0 -79
  95. package/framework/workflows/configs/fusion.json +0 -39
  96. package/framework/workflows/configs/long-running.json +0 -33
  97. package/framework/workflows/configs/spec-only.json +0 -43
  98. package/framework/workflows/configs/ui-refresh.json +0 -49
  99. package/framework/workflows/configs/zero-touch.json +0 -82
  100. package/src/commands/project/monitor.js +0 -295
  101. package/src/commands/project/tutorial.js +0 -115
  102. package/src/commands/state/validate-phase.js +0 -238
  103. package/src/commands/templates/generate-contracts.js +0 -445
  104. package/src/core/orchestrator.js +0 -171
  105. package/src/core/registry/command-registry.js +0 -28
  106. package/src/core/registry/index.js +0 -8
  107. package/src/core/registry/validator-registry.js +0 -204
  108. package/src/core/templates/template-validator.js +0 -296
  109. package/src/generator/config-generator.js +0 -206
  110. package/src/generator/templates/config.json.template +0 -40
  111. package/src/generator/templates/project.md.template +0 -67
  112. package/src/lib/agents/micro-agent-factory.js +0 -161
  113. package/src/lib/analysis/complexity-analyzer.js +0 -441
  114. package/src/lib/analysis/index.js +0 -7
  115. package/src/lib/analytics/analytics-engine.js +0 -345
  116. package/src/lib/checkpoints/checkpoint-hooks.js +0 -298
  117. package/src/lib/checkpoints/index.js +0 -7
  118. package/src/lib/context/context-bundler.js +0 -241
  119. package/src/lib/context/context-optimizer.js +0 -212
  120. package/src/lib/context/context-tracker.js +0 -273
  121. package/src/lib/context/core-four-tracker.js +0 -201
  122. package/src/lib/context/mcp-optimizer.js +0 -200
  123. package/src/lib/execution/fusion-executor.js +0 -304
  124. package/src/lib/execution/parallel-executor.js +0 -270
  125. package/src/lib/hooks/stop-hook-executor.js +0 -286
  126. package/src/lib/hops/hop-composer.js +0 -221
  127. package/src/lib/phase-chain/eligibility-checker.js +0 -243
  128. package/src/lib/threads/thread-coordinator.js +0 -238
  129. package/src/lib/threads/thread-manager.js +0 -317
  130. package/src/lib/tracking/artifact-trail.js +0 -202
  131. package/src/scanner/project-scanner.js +0 -242
  132. package/src/ui/diff-display.js +0 -91
  133. package/src/ui/interactive-wizard.js +0 -96
  134. package/src/ui/user-review.js +0 -211
  135. package/src/ui/wizard-questions.js +0 -188
  136. package/src/utils/color-utils.js +0 -70
  137. package/src/utils/process-handler.js +0 -97
@@ -10,7 +10,13 @@
10
10
  "tags": [
11
11
  "ai-agents"
12
12
  ],
13
- "aliases": ["Blazor AI", "AI chat UI", "streaming Blazor", "agent UI", "chat component"],
13
+ "aliases": [
14
+ "Blazor AI",
15
+ "AI chat UI",
16
+ "streaming Blazor",
17
+ "agent UI",
18
+ "chat component"
19
+ ],
14
20
  "anchors": {
15
21
  "streaming": "#streaming-responses",
16
22
  "state": "#ui-state-management",
@@ -27,7 +33,13 @@
27
33
  "tags": [
28
34
  "ai-agents"
29
35
  ],
30
- "aliases": ["AI production", "agent reliability", "production AI", "agent safety", "autonomous systems"],
36
+ "aliases": [
37
+ "AI production",
38
+ "agent reliability",
39
+ "production AI",
40
+ "agent safety",
41
+ "autonomous systems"
42
+ ],
31
43
  "anchors": {
32
44
  "reliability": "#reliability-patterns",
33
45
  "safety": "#safety-guardrails",
@@ -44,7 +56,13 @@
44
56
  "tags": [
45
57
  "ai-agents"
46
58
  ],
47
- "aliases": ["AI agent setup", "MCP configuration", "tool configuration", "Claude setup", "agent initialization"],
59
+ "aliases": [
60
+ "AI agent setup",
61
+ "MCP configuration",
62
+ "tool configuration",
63
+ "Claude setup",
64
+ "agent initialization"
65
+ ],
48
66
  "anchors": {
49
67
  "mcp": "#mcp-configuration",
50
68
  "tools": "#tool-definitions",
@@ -61,7 +79,12 @@
61
79
  "tags": [
62
80
  "ai-agents"
63
81
  ],
64
- "aliases": ["team orchestration", "agent team", "multi-agent coordination", "squad dispatch"],
82
+ "aliases": [
83
+ "team orchestration",
84
+ "agent team",
85
+ "multi-agent coordination",
86
+ "squad dispatch"
87
+ ],
65
88
  "anchors": {
66
89
  "patterns": "#orchestration-patterns",
67
90
  "communication": "#inter-agent-communication"
@@ -77,7 +100,13 @@
77
100
  "tags": [
78
101
  "ai-agents"
79
102
  ],
80
- "aliases": ["agent workflow", "multi-agent", "orchestration pattern", "agent chain", "parallel agents"],
103
+ "aliases": [
104
+ "agent workflow",
105
+ "multi-agent",
106
+ "orchestration pattern",
107
+ "agent chain",
108
+ "parallel agents"
109
+ ],
81
110
  "anchors": {
82
111
  "orchestration": "#orchestration-patterns",
83
112
  "parallel": "#parallel-execution",
@@ -95,7 +124,12 @@
95
124
  "architecture",
96
125
  "ddd"
97
126
  ],
98
- "aliases": ["aggregate root", "DDD aggregate", "domain aggregate", "aggregate pattern"],
127
+ "aliases": [
128
+ "aggregate root",
129
+ "DDD aggregate",
130
+ "domain aggregate",
131
+ "aggregate pattern"
132
+ ],
99
133
  "anchors": {
100
134
  "root": "#aggregate-root-design",
101
135
  "invariants": "#enforcing-invariants",
@@ -113,7 +147,13 @@
113
147
  "architecture",
114
148
  "ddd"
115
149
  ],
116
- "aliases": ["bounded context", "BC", "context map", "integration events", "domain boundary"],
150
+ "aliases": [
151
+ "bounded context",
152
+ "BC",
153
+ "context map",
154
+ "integration events",
155
+ "domain boundary"
156
+ ],
117
157
  "anchors": {
118
158
  "context-map": "#context-map",
119
159
  "integration": "#integration-events",
@@ -131,7 +171,13 @@
131
171
  "architecture",
132
172
  "ddd"
133
173
  ],
134
- "aliases": ["DDD level", "domain complexity", "CRUD vs DDD", "complexity decision tree", "domain model level"],
174
+ "aliases": [
175
+ "DDD level",
176
+ "domain complexity",
177
+ "CRUD vs DDD",
178
+ "complexity decision tree",
179
+ "domain model level"
180
+ ],
135
181
  "anchors": {
136
182
  "decision-tree": "#decision-tree",
137
183
  "level1": "#level-1-crud",
@@ -150,7 +196,13 @@
150
196
  "architecture",
151
197
  "ddd"
152
198
  ],
153
- "aliases": ["DDD entity", "domain entity", "entity class", "entity ID", "entity lifecycle"],
199
+ "aliases": [
200
+ "DDD entity",
201
+ "domain entity",
202
+ "entity class",
203
+ "entity ID",
204
+ "entity lifecycle"
205
+ ],
154
206
  "anchors": {
155
207
  "identity": "#entity-identity",
156
208
  "lifecycle": "#entity-lifecycle"
@@ -167,7 +219,12 @@
167
219
  "architecture",
168
220
  "ddd"
169
221
  ],
170
- "aliases": ["ubiquitous language", "domain language", "shared vocabulary", "domain glossary"],
222
+ "aliases": [
223
+ "ubiquitous language",
224
+ "domain language",
225
+ "shared vocabulary",
226
+ "domain glossary"
227
+ ],
171
228
  "anchors": {
172
229
  "glossary": "#domain-glossary",
173
230
  "naming": "#naming-from-domain"
@@ -184,7 +241,13 @@
184
241
  "architecture",
185
242
  "ddd"
186
243
  ],
187
- "aliases": ["value object", "VO", "immutable value", "domain value type", "strongly typed"],
244
+ "aliases": [
245
+ "value object",
246
+ "VO",
247
+ "immutable value",
248
+ "domain value type",
249
+ "strongly typed"
250
+ ],
188
251
  "anchors": {
189
252
  "equality": "#equality-by-value",
190
253
  "validation": "#value-object-validation",
@@ -202,7 +265,13 @@
202
265
  "architecture",
203
266
  "vertical-slice"
204
267
  ],
205
- "aliases": ["vertical slice", "VSA", "slice architecture", "feature slice", "CQRS slice"],
268
+ "aliases": [
269
+ "vertical slice",
270
+ "VSA",
271
+ "slice architecture",
272
+ "feature slice",
273
+ "CQRS slice"
274
+ ],
206
275
  "anchors": {
207
276
  "structure": "#slice-structure",
208
277
  "rules": "#slice-rules",
@@ -220,7 +289,13 @@
220
289
  "backend",
221
290
  "api"
222
291
  ],
223
- "aliases": ["minimal api", "minimal APIs", ".NET minimal API", "route handler", "MapGet"],
292
+ "aliases": [
293
+ "minimal api",
294
+ "minimal APIs",
295
+ ".NET minimal API",
296
+ "route handler",
297
+ "MapGet"
298
+ ],
224
299
  "anchors": {
225
300
  "endpoints": "#endpoint-registration",
226
301
  "grouping": "#route-groups"
@@ -237,7 +312,13 @@
237
312
  "backend",
238
313
  "api"
239
314
  ],
240
- "aliases": ["REST API", "RESTful", "HTTP API", "resource API", "HTTP methods"],
315
+ "aliases": [
316
+ "REST API",
317
+ "RESTful",
318
+ "HTTP API",
319
+ "resource API",
320
+ "HTTP methods"
321
+ ],
241
322
  "anchors": {
242
323
  "resources": "#resource-design",
243
324
  "errors": "#error-responses"
@@ -254,7 +335,13 @@
254
335
  "backend",
255
336
  "api"
256
337
  ],
257
- "aliases": ["FluentValidation", "input validation", "request validation", "API validation", "model validation"],
338
+ "aliases": [
339
+ "FluentValidation",
340
+ "input validation",
341
+ "request validation",
342
+ "API validation",
343
+ "model validation"
344
+ ],
258
345
  "anchors": {
259
346
  "fluent": "#fluentvalidation-setup",
260
347
  "rules": "#validation-rules"
@@ -271,7 +358,13 @@
271
358
  "backend",
272
359
  "authentication"
273
360
  ],
274
- "aliases": ["passkeys", "WebAuthn", "FIDO2", "passwordless", "biometric auth"],
361
+ "aliases": [
362
+ "passkeys",
363
+ "WebAuthn",
364
+ "FIDO2",
365
+ "passwordless",
366
+ "biometric auth"
367
+ ],
275
368
  "anchors": {
276
369
  "registration": "#passkey-registration",
277
370
  "authentication": "#passkey-authentication"
@@ -288,7 +381,13 @@
288
381
  "backend",
289
382
  "database"
290
383
  ],
291
- "aliases": ["Entity Framework", "EF Core", "DbContext", "LINQ queries", "ORM"],
384
+ "aliases": [
385
+ "Entity Framework",
386
+ "EF Core",
387
+ "DbContext",
388
+ "LINQ queries",
389
+ "ORM"
390
+ ],
292
391
  "anchors": {
293
392
  "dbcontext": "#dbcontext-patterns",
294
393
  "queries": "#query-optimization",
@@ -306,7 +405,13 @@
306
405
  "backend",
307
406
  "database"
308
407
  ],
309
- "aliases": ["EF migrations", "database migration", "schema migration", "dotnet ef", "Add-Migration"],
408
+ "aliases": [
409
+ "EF migrations",
410
+ "database migration",
411
+ "schema migration",
412
+ "dotnet ef",
413
+ "Add-Migration"
414
+ ],
310
415
  "anchors": {
311
416
  "workflow": "#migration-workflow",
312
417
  "production": "#production-migrations"
@@ -324,7 +429,13 @@
324
429
  "database",
325
430
  "postgresql"
326
431
  ],
327
- "aliases": ["PostgreSQL", "postgres", "pg", "database design", "SQL schema"],
432
+ "aliases": [
433
+ "PostgreSQL",
434
+ "postgres",
435
+ "pg",
436
+ "database design",
437
+ "SQL schema"
438
+ ],
328
439
  "anchors": {
329
440
  "schema": "#schema-design",
330
441
  "indexes": "#index-strategy"
@@ -341,7 +452,13 @@
341
452
  "backend",
342
453
  "database"
343
454
  ],
344
- "aliases": ["repository", "IRepository", "Unit of Work", "data access", "repository pattern"],
455
+ "aliases": [
456
+ "repository",
457
+ "IRepository",
458
+ "Unit of Work",
459
+ "data access",
460
+ "repository pattern"
461
+ ],
345
462
  "anchors": {
346
463
  "pattern": "#repository-pattern",
347
464
  "uow": "#unit-of-work"
@@ -358,7 +475,13 @@
358
475
  "backend",
359
476
  "database"
360
477
  ],
361
- "aliases": ["vector search", "RAG", "embeddings", "pgvector", "semantic search"],
478
+ "aliases": [
479
+ "vector search",
480
+ "RAG",
481
+ "embeddings",
482
+ "pgvector",
483
+ "semantic search"
484
+ ],
362
485
  "anchors": {
363
486
  "chunking": "#chunking-strategy",
364
487
  "retrieval": "#retrieval-patterns"
@@ -375,7 +498,13 @@
375
498
  "backend",
376
499
  "dotnet"
377
500
  ],
378
- "aliases": ["async/await", "Task<T>", "CancellationToken", "ValueTask", "async programming"],
501
+ "aliases": [
502
+ "async/await",
503
+ "Task<T>",
504
+ "CancellationToken",
505
+ "ValueTask",
506
+ "async programming"
507
+ ],
379
508
  "anchors": {
380
509
  "cancellation": "#cancellation-token-pattern",
381
510
  "parallel": "#parallel-execution-patterns"
@@ -392,7 +521,13 @@
392
521
  "backend",
393
522
  "dotnet"
394
523
  ],
395
- "aliases": [".NET core", "dotnet core", "C# patterns", "backend core", "dotnet standards"],
524
+ "aliases": [
525
+ ".NET core",
526
+ "dotnet core",
527
+ "C# patterns",
528
+ "backend core",
529
+ "dotnet standards"
530
+ ],
396
531
  "anchors": {
397
532
  "di": "#dependency-injection",
398
533
  "services": "#service-registration",
@@ -410,7 +545,13 @@
410
545
  "backend",
411
546
  "dotnet"
412
547
  ],
413
- "aliases": ["dependency injection", "IoC", "DI container", "service registration", "inversion of control"],
548
+ "aliases": [
549
+ "dependency injection",
550
+ "IoC",
551
+ "DI container",
552
+ "service registration",
553
+ "inversion of control"
554
+ ],
414
555
  "anchors": {
415
556
  "patterns": "#di-patterns",
416
557
  "anti-patterns": "#di-anti-patterns"
@@ -427,7 +568,13 @@
427
568
  "backend",
428
569
  "dotnet"
429
570
  ],
430
- "aliases": ["program.cs", "startup configuration", "NuGet packages", "package setup", "app bootstrap"],
571
+ "aliases": [
572
+ "program.cs",
573
+ "startup configuration",
574
+ "NuGet packages",
575
+ "package setup",
576
+ "app bootstrap"
577
+ ],
431
578
  "anchors": {
432
579
  "nuget": "#nuget-packages",
433
580
  "middleware": "#middleware-order"
@@ -445,7 +592,13 @@
445
592
  "integrations",
446
593
  "asaas"
447
594
  ],
448
- "aliases": ["asaas", "payment", "PIX", "boleto", "Brazilian payment"],
595
+ "aliases": [
596
+ "asaas",
597
+ "payment",
598
+ "PIX",
599
+ "boleto",
600
+ "Brazilian payment"
601
+ ],
449
602
  "anchors": {
450
603
  "payments": "#payment-types",
451
604
  "webhooks": "#webhook-handling"
@@ -463,7 +616,13 @@
463
616
  "integrations",
464
617
  "clerk"
465
618
  ],
466
- "aliases": ["clerk", "authentication", "OAuth", "JWT", "session management"],
619
+ "aliases": [
620
+ "clerk",
621
+ "authentication",
622
+ "OAuth",
623
+ "JWT",
624
+ "session management"
625
+ ],
467
626
  "anchors": {
468
627
  "setup": "#clerk-setup",
469
628
  "middleware": "#auth-middleware"
@@ -481,7 +640,14 @@
481
640
  "integrations",
482
641
  "hangfire"
483
642
  ],
484
- "aliases": ["hangfire", "background jobs", "scheduled jobs", "recurring", "cron", "fire and forget"],
643
+ "aliases": [
644
+ "hangfire",
645
+ "background jobs",
646
+ "scheduled jobs",
647
+ "recurring",
648
+ "cron",
649
+ "fire and forget"
650
+ ],
485
651
  "anchors": {
486
652
  "jobs": "#job-types",
487
653
  "retry": "#retry-policies"
@@ -499,7 +665,13 @@
499
665
  "integrations",
500
666
  "resend"
501
667
  ],
502
- "aliases": ["resend", "email", "transactional email", "SMTP", "email notification"],
668
+ "aliases": [
669
+ "resend",
670
+ "email",
671
+ "transactional email",
672
+ "SMTP",
673
+ "email notification"
674
+ ],
503
675
  "anchors": {
504
676
  "sending": "#send-email",
505
677
  "templates": "#email-templates"
@@ -515,7 +687,13 @@
515
687
  "tags": [
516
688
  "context"
517
689
  ],
518
- "aliases": ["analytics", "GTM", "GA4", "event tracking", "data layer"],
690
+ "aliases": [
691
+ "analytics",
692
+ "GTM",
693
+ "GA4",
694
+ "event tracking",
695
+ "data layer"
696
+ ],
519
697
  "anchors": {
520
698
  "events": "#event-tracking",
521
699
  "setup": "#analytics-setup"
@@ -531,7 +709,12 @@
531
709
  "tags": [
532
710
  "context"
533
711
  ],
534
- "aliases": ["context bundles", "bundled context", "spec bundles", "feature bundles"],
712
+ "aliases": [
713
+ "context bundles",
714
+ "bundled context",
715
+ "spec bundles",
716
+ "feature bundles"
717
+ ],
535
718
  "anchors": {
536
719
  "structure": "#bundle-structure",
537
720
  "loading": "#context-loading"
@@ -547,7 +730,12 @@
547
730
  "tags": [
548
731
  "context"
549
732
  ],
550
- "aliases": ["context priming", "agent priming", "system prompt", "context injection"],
733
+ "aliases": [
734
+ "context priming",
735
+ "agent priming",
736
+ "system prompt",
737
+ "context injection"
738
+ ],
551
739
  "anchors": {
552
740
  "patterns": "#priming-patterns",
553
741
  "efficiency": "#context-efficiency"
@@ -563,7 +751,13 @@
563
751
  "tags": [
564
752
  "core"
565
753
  ],
566
- "aliases": ["architecture", "clean architecture", "layered architecture", "SOLID", "design principles"],
754
+ "aliases": [
755
+ "architecture",
756
+ "clean architecture",
757
+ "layered architecture",
758
+ "SOLID",
759
+ "design principles"
760
+ ],
567
761
  "anchors": {
568
762
  "layers": "#layer-boundaries",
569
763
  "patterns": "#architectural-patterns"
@@ -579,7 +773,13 @@
579
773
  "tags": [
580
774
  "core"
581
775
  ],
582
- "aliases": ["coding standards", "code style", "clean code", "naming conventions", "code quality"],
776
+ "aliases": [
777
+ "coding standards",
778
+ "code style",
779
+ "clean code",
780
+ "naming conventions",
781
+ "code quality"
782
+ ],
583
783
  "anchors": {
584
784
  "naming": "#naming-conventions",
585
785
  "patterns": "#code-patterns"
@@ -595,7 +795,13 @@
595
795
  "tags": [
596
796
  "core"
597
797
  ],
598
- "aliases": ["git flow", "branch strategy", "feature branch", "gitflow", "branch naming"],
798
+ "aliases": [
799
+ "git flow",
800
+ "branch strategy",
801
+ "feature branch",
802
+ "gitflow",
803
+ "branch naming"
804
+ ],
599
805
  "anchors": {
600
806
  "branching": "#branch-naming",
601
807
  "workflow": "#git-workflow"
@@ -611,7 +817,13 @@
611
817
  "tags": [
612
818
  "core"
613
819
  ],
614
- "aliases": ["git", "commit messages", "conventional commits", "changelog", "git hooks"],
820
+ "aliases": [
821
+ "git",
822
+ "commit messages",
823
+ "conventional commits",
824
+ "changelog",
825
+ "git hooks"
826
+ ],
615
827
  "anchors": {
616
828
  "commits": "#commit-format",
617
829
  "hooks": "#pre-commit-hooks"
@@ -627,7 +839,14 @@
627
839
  "tags": [
628
840
  "core"
629
841
  ],
630
- "aliases": ["testing", "unit tests", "integration tests", "TDD", "test coverage", "xUnit"],
842
+ "aliases": [
843
+ "testing",
844
+ "unit tests",
845
+ "integration tests",
846
+ "TDD",
847
+ "test coverage",
848
+ "xUnit"
849
+ ],
631
850
  "anchors": {
632
851
  "patterns": "#test-patterns",
633
852
  "coverage": "#coverage-requirements"
@@ -644,7 +863,13 @@
644
863
  "data",
645
864
  "nosql"
646
865
  ],
647
- "aliases": ["blob storage", "Azure Storage", "file storage", "BlobServiceClient", "object storage"],
866
+ "aliases": [
867
+ "blob storage",
868
+ "Azure Storage",
869
+ "file storage",
870
+ "BlobServiceClient",
871
+ "object storage"
872
+ ],
648
873
  "anchors": {
649
874
  "upload": "#upload-patterns",
650
875
  "access": "#sas-tokens"
@@ -662,7 +887,14 @@
662
887
  "nosql",
663
888
  "cache"
664
889
  ],
665
- "aliases": ["redis", "cache", "distributed cache", "IDistributedCache", "cache-aside", "StackExchange.Redis"],
890
+ "aliases": [
891
+ "redis",
892
+ "cache",
893
+ "distributed cache",
894
+ "IDistributedCache",
895
+ "cache-aside",
896
+ "StackExchange.Redis"
897
+ ],
666
898
  "anchors": {
667
899
  "patterns": "#cache-patterns",
668
900
  "invalidation": "#cache-invalidation"
@@ -679,7 +911,13 @@
679
911
  "data",
680
912
  "nosql"
681
913
  ],
682
- "aliases": ["cosmos", "CosmosDB", "document database", "partition key", "RUs"],
914
+ "aliases": [
915
+ "cosmos",
916
+ "CosmosDB",
917
+ "document database",
918
+ "partition key",
919
+ "RUs"
920
+ ],
683
921
  "anchors": {
684
922
  "modeling": "#document-modeling",
685
923
  "queries": "#query-patterns"
@@ -696,7 +934,13 @@
696
934
  "data",
697
935
  "vector-search"
698
936
  ],
699
- "aliases": ["Azure AI Search", "cognitive search", "vector search", "hybrid search", "semantic ranking"],
937
+ "aliases": [
938
+ "Azure AI Search",
939
+ "cognitive search",
940
+ "vector search",
941
+ "hybrid search",
942
+ "semantic ranking"
943
+ ],
700
944
  "anchors": {
701
945
  "indexing": "#index-setup",
702
946
  "queries": "#search-queries"
@@ -713,7 +957,13 @@
713
957
  "data",
714
958
  "vector-search"
715
959
  ],
716
- "aliases": ["RAG chunking", "document chunking", "text splitting", "chunk overlap", "embedding chunks"],
960
+ "aliases": [
961
+ "RAG chunking",
962
+ "document chunking",
963
+ "text splitting",
964
+ "chunk overlap",
965
+ "embedding chunks"
966
+ ],
717
967
  "anchors": {
718
968
  "strategies": "#chunking-strategies",
719
969
  "retrieval": "#retrieval-pipeline"
@@ -730,7 +980,12 @@
730
980
  "frontend",
731
981
  "blazor"
732
982
  ],
733
- "aliases": ["blazor checklist", "blazor design review", "UI checklist", "component checklist"],
983
+ "aliases": [
984
+ "blazor checklist",
985
+ "blazor design review",
986
+ "UI checklist",
987
+ "component checklist"
988
+ ],
734
989
  "anchors": {
735
990
  "components": "#component-checklist",
736
991
  "accessibility": "#a11y-checklist"
@@ -747,7 +1002,12 @@
747
1002
  "frontend",
748
1003
  "blazor"
749
1004
  ],
750
- "aliases": ["fluent ui setup", "blazor fluent", "Microsoft Fluent UI", "FluentUI install"],
1005
+ "aliases": [
1006
+ "fluent ui setup",
1007
+ "blazor fluent",
1008
+ "Microsoft Fluent UI",
1009
+ "FluentUI install"
1010
+ ],
751
1011
  "anchors": {
752
1012
  "setup": "#package-setup",
753
1013
  "theme": "#theme-configuration"
@@ -764,7 +1024,13 @@
764
1024
  "frontend",
765
1025
  "blazor"
766
1026
  ],
767
- "aliases": ["fluent ui components", "FluentDataGrid", "FluentDialog", "FluentButton", "FluentCombobox"],
1027
+ "aliases": [
1028
+ "fluent ui components",
1029
+ "FluentDataGrid",
1030
+ "FluentDialog",
1031
+ "FluentButton",
1032
+ "FluentCombobox"
1033
+ ],
768
1034
  "anchors": {
769
1035
  "grid": "#data-grid",
770
1036
  "forms": "#form-components"
@@ -781,7 +1047,12 @@
781
1047
  "frontend",
782
1048
  "blazor"
783
1049
  ],
784
- "aliases": ["html to blazor", "blazor migration", "html conversion", "razor conversion"],
1050
+ "aliases": [
1051
+ "html to blazor",
1052
+ "blazor migration",
1053
+ "html conversion",
1054
+ "razor conversion"
1055
+ ],
785
1056
  "anchors": {
786
1057
  "mapping": "#html-to-blazor-mapping",
787
1058
  "components": "#component-patterns"
@@ -798,7 +1069,13 @@
798
1069
  "frontend",
799
1070
  "blazor"
800
1071
  ],
801
- "aliases": ["blazor lifecycle", "OnInitialized", "OnAfterRender", "StateHasChanged", "component lifecycle"],
1072
+ "aliases": [
1073
+ "blazor lifecycle",
1074
+ "OnInitialized",
1075
+ "OnAfterRender",
1076
+ "StateHasChanged",
1077
+ "component lifecycle"
1078
+ ],
802
1079
  "anchors": {
803
1080
  "hooks": "#lifecycle-hooks",
804
1081
  "async": "#async-patterns"
@@ -815,7 +1092,13 @@
815
1092
  "frontend",
816
1093
  "blazor"
817
1094
  ],
818
- "aliases": ["blazor anti-patterns", "blazor mistakes", "blazor gotchas", "blazor bugs", "common errors"],
1095
+ "aliases": [
1096
+ "blazor anti-patterns",
1097
+ "blazor mistakes",
1098
+ "blazor gotchas",
1099
+ "blazor bugs",
1100
+ "common errors"
1101
+ ],
819
1102
  "anchors": {
820
1103
  "concurrency": "#concurrency-pitfalls",
821
1104
  "memory": "#memory-leaks"
@@ -832,7 +1115,13 @@
832
1115
  "frontend",
833
1116
  "blazor"
834
1117
  ],
835
- "aliases": ["blazor state", "cascading value", "state container", "component state", "Fluxor"],
1118
+ "aliases": [
1119
+ "blazor state",
1120
+ "cascading value",
1121
+ "state container",
1122
+ "component state",
1123
+ "Fluxor"
1124
+ ],
836
1125
  "anchors": {
837
1126
  "patterns": "#state-patterns",
838
1127
  "sharing": "#state-sharing"
@@ -849,7 +1138,13 @@
849
1138
  "frontend",
850
1139
  "design-system"
851
1140
  ],
852
- "aliases": ["aesthetic direction", "visual design", "brand identity", "design language", "design tone"],
1141
+ "aliases": [
1142
+ "aesthetic direction",
1143
+ "visual design",
1144
+ "brand identity",
1145
+ "design language",
1146
+ "design tone"
1147
+ ],
853
1148
  "anchors": {
854
1149
  "principles": "#design-principles",
855
1150
  "tokens": "#design-tokens"
@@ -866,7 +1161,14 @@
866
1161
  "frontend",
867
1162
  "design-system"
868
1163
  ],
869
- "aliases": ["animations", "transitions", "motion", "CSS animations", "keyframes", "prefers-reduced-motion"],
1164
+ "aliases": [
1165
+ "animations",
1166
+ "transitions",
1167
+ "motion",
1168
+ "CSS animations",
1169
+ "keyframes",
1170
+ "prefers-reduced-motion"
1171
+ ],
870
1172
  "anchors": {
871
1173
  "tokens": "#animation-tokens",
872
1174
  "principles": "#motion-principles"
@@ -883,7 +1185,13 @@
883
1185
  "frontend",
884
1186
  "design-system"
885
1187
  ],
886
- "aliases": ["BEM", "CSS naming", "class naming", "design token naming", "component naming"],
1188
+ "aliases": [
1189
+ "BEM",
1190
+ "CSS naming",
1191
+ "class naming",
1192
+ "design token naming",
1193
+ "component naming"
1194
+ ],
887
1195
  "anchors": {
888
1196
  "blocks": "#bem-blocks",
889
1197
  "tokens": "#token-naming"
@@ -900,7 +1208,13 @@
900
1208
  "frontend",
901
1209
  "nextjs"
902
1210
  ],
903
- "aliases": ["app router", "Next.js 14", "server components", "app directory", "RSC"],
1211
+ "aliases": [
1212
+ "app router",
1213
+ "Next.js 14",
1214
+ "server components",
1215
+ "app directory",
1216
+ "RSC"
1217
+ ],
904
1218
  "anchors": {
905
1219
  "layout": "#layout-patterns",
906
1220
  "routing": "#routing-patterns"
@@ -917,7 +1231,13 @@
917
1231
  "frontend",
918
1232
  "nextjs"
919
1233
  ],
920
- "aliases": ["react components", "server component", "client component", "shadcn/ui", "UI components"],
1234
+ "aliases": [
1235
+ "react components",
1236
+ "server component",
1237
+ "client component",
1238
+ "shadcn/ui",
1239
+ "UI components"
1240
+ ],
921
1241
  "anchors": {
922
1242
  "patterns": "#component-patterns",
923
1243
  "shadcn": "#shadcn-usage"
@@ -934,7 +1254,13 @@
934
1254
  "frontend",
935
1255
  "nextjs"
936
1256
  ],
937
- "aliases": ["TanStack Query", "react-query", "server actions", "data fetching", "useQuery"],
1257
+ "aliases": [
1258
+ "TanStack Query",
1259
+ "react-query",
1260
+ "server actions",
1261
+ "data fetching",
1262
+ "useQuery"
1263
+ ],
938
1264
  "anchors": {
939
1265
  "server": "#server-fetching",
940
1266
  "client": "#client-fetching"
@@ -951,7 +1277,13 @@
951
1277
  "frontend",
952
1278
  "nextjs"
953
1279
  ],
954
- "aliases": ["react-hook-form", "Zod", "form validation", "Server Actions forms", "useFormState"],
1280
+ "aliases": [
1281
+ "react-hook-form",
1282
+ "Zod",
1283
+ "form validation",
1284
+ "Server Actions forms",
1285
+ "useFormState"
1286
+ ],
955
1287
  "anchors": {
956
1288
  "validation": "#zod-schemas",
957
1289
  "submission": "#form-submission"
@@ -968,7 +1300,13 @@
968
1300
  "frontend",
969
1301
  "nextjs"
970
1302
  ],
971
- "aliases": ["naming conventions", "file naming", "component naming", "Next.js naming", "TypeScript naming"],
1303
+ "aliases": [
1304
+ "naming conventions",
1305
+ "file naming",
1306
+ "component naming",
1307
+ "Next.js naming",
1308
+ "TypeScript naming"
1309
+ ],
972
1310
  "anchors": {
973
1311
  "files": "#file-naming",
974
1312
  "components": "#component-naming"
@@ -985,7 +1323,13 @@
985
1323
  "frontend",
986
1324
  "nextjs"
987
1325
  ],
988
- "aliases": ["Next.js patterns", "middleware", "auth patterns", "caching patterns", "image optimization"],
1326
+ "aliases": [
1327
+ "Next.js patterns",
1328
+ "middleware",
1329
+ "auth patterns",
1330
+ "caching patterns",
1331
+ "image optimization"
1332
+ ],
989
1333
  "anchors": {
990
1334
  "auth": "#auth-patterns",
991
1335
  "caching": "#caching-patterns"
@@ -1002,7 +1346,12 @@
1002
1346
  "frontend",
1003
1347
  "nextjs"
1004
1348
  ],
1005
- "aliases": ["project structure", "folder structure", "src directory", "app directory organization"],
1349
+ "aliases": [
1350
+ "project structure",
1351
+ "folder structure",
1352
+ "src directory",
1353
+ "app directory organization"
1354
+ ],
1006
1355
  "anchors": {
1007
1356
  "structure": "#directory-structure",
1008
1357
  "organization": "#feature-organization"
@@ -1019,7 +1368,13 @@
1019
1368
  "frontend",
1020
1369
  "nextjs"
1021
1370
  ],
1022
- "aliases": ["zustand", "React context", "global state", "state management", "client state"],
1371
+ "aliases": [
1372
+ "zustand",
1373
+ "React context",
1374
+ "global state",
1375
+ "state management",
1376
+ "client state"
1377
+ ],
1023
1378
  "anchors": {
1024
1379
  "patterns": "#state-patterns",
1025
1380
  "server": "#server-state"
@@ -1036,7 +1391,14 @@
1036
1391
  "frontend",
1037
1392
  "nextjs"
1038
1393
  ],
1039
- "aliases": ["vitest", "jest", "testing-library", "Playwright", "Next.js testing", "component tests"],
1394
+ "aliases": [
1395
+ "vitest",
1396
+ "jest",
1397
+ "testing-library",
1398
+ "Playwright",
1399
+ "Next.js testing",
1400
+ "component tests"
1401
+ ],
1040
1402
  "anchors": {
1041
1403
  "unit": "#unit-tests",
1042
1404
  "e2e": "#e2e-tests"
@@ -1053,7 +1415,13 @@
1053
1415
  "infrastructure",
1054
1416
  "azure"
1055
1417
  ],
1056
- "aliases": ["azure", "Azure setup", "resource group", "subscription", "azure baseline"],
1418
+ "aliases": [
1419
+ "azure",
1420
+ "Azure setup",
1421
+ "resource group",
1422
+ "subscription",
1423
+ "azure baseline"
1424
+ ],
1057
1425
  "anchors": {
1058
1426
  "resources": "#core-resources",
1059
1427
  "security": "#security-baseline"
@@ -1071,7 +1439,13 @@
1071
1439
  "azure",
1072
1440
  "bicep"
1073
1441
  ],
1074
- "aliases": ["bicep", "ARM template", "IaC", "infrastructure as code", "resource deployment"],
1442
+ "aliases": [
1443
+ "bicep",
1444
+ "ARM template",
1445
+ "IaC",
1446
+ "infrastructure as code",
1447
+ "resource deployment"
1448
+ ],
1075
1449
  "anchors": {
1076
1450
  "modules": "#module-patterns",
1077
1451
  "parameters": "#parameter-files"
@@ -1089,7 +1463,13 @@
1089
1463
  "azure",
1090
1464
  "devops"
1091
1465
  ],
1092
- "aliases": ["azure devops", "ADO", "pipelines", "YAML pipeline", "azure-pipelines.yml"],
1466
+ "aliases": [
1467
+ "azure devops",
1468
+ "ADO",
1469
+ "pipelines",
1470
+ "YAML pipeline",
1471
+ "azure-pipelines.yml"
1472
+ ],
1093
1473
  "anchors": {
1094
1474
  "setup": "#organization-setup",
1095
1475
  "pipelines": "#pipeline-setup"
@@ -1107,7 +1487,14 @@
1107
1487
  "azure",
1108
1488
  "devops"
1109
1489
  ],
1110
- "aliases": ["local dev", "azurite", "local azure", "dev container", "local secrets", "dotnet user-secrets"],
1490
+ "aliases": [
1491
+ "local dev",
1492
+ "azurite",
1493
+ "local azure",
1494
+ "dev container",
1495
+ "local secrets",
1496
+ "dotnet user-secrets"
1497
+ ],
1111
1498
  "anchors": {
1112
1499
  "emulators": "#local-emulators",
1113
1500
  "secrets": "#local-secrets"
@@ -1125,7 +1512,14 @@
1125
1512
  "azure",
1126
1513
  "services"
1127
1514
  ],
1128
- "aliases": ["Azure Functions", "serverless", "function app", "timer trigger", "HTTP trigger", "Durable Functions"],
1515
+ "aliases": [
1516
+ "Azure Functions",
1517
+ "serverless",
1518
+ "function app",
1519
+ "timer trigger",
1520
+ "HTTP trigger",
1521
+ "Durable Functions"
1522
+ ],
1129
1523
  "anchors": {
1130
1524
  "triggers": "#trigger-types",
1131
1525
  "bindings": "#input-output-bindings"
@@ -1143,7 +1537,13 @@
1143
1537
  "azure",
1144
1538
  "services"
1145
1539
  ],
1146
- "aliases": ["service bus", "message queue", "topics", "subscriptions", "dead letter queue"],
1540
+ "aliases": [
1541
+ "service bus",
1542
+ "message queue",
1543
+ "topics",
1544
+ "subscriptions",
1545
+ "dead letter queue"
1546
+ ],
1147
1547
  "anchors": {
1148
1548
  "setup": "#namespace-setup",
1149
1549
  "patterns": "#messaging-patterns"
@@ -1161,7 +1561,13 @@
1161
1561
  "azure",
1162
1562
  "services"
1163
1563
  ],
1164
- "aliases": ["azure storage", "blob", "table storage", "queue storage", "storage account tiers"],
1564
+ "aliases": [
1565
+ "azure storage",
1566
+ "blob",
1567
+ "table storage",
1568
+ "queue storage",
1569
+ "storage account tiers"
1570
+ ],
1165
1571
  "anchors": {
1166
1572
  "tiers": "#storage-tiers",
1167
1573
  "security": "#access-control"
@@ -1178,7 +1584,13 @@
1178
1584
  "infrastructure",
1179
1585
  "docker"
1180
1586
  ],
1181
- "aliases": ["easypanel", "docker deploy", "self-hosted", "VPS deployment", "docker compose"],
1587
+ "aliases": [
1588
+ "easypanel",
1589
+ "docker deploy",
1590
+ "self-hosted",
1591
+ "VPS deployment",
1592
+ "docker compose"
1593
+ ],
1182
1594
  "anchors": {
1183
1595
  "setup": "#easypanel-setup",
1184
1596
  "deployment": "#deployment-flow"
@@ -1195,7 +1607,12 @@
1195
1607
  "infrastructure",
1196
1608
  "supabase"
1197
1609
  ],
1198
- "aliases": ["supabase MCP", "supabase tools", "supabase configuration", "MCP supabase"],
1610
+ "aliases": [
1611
+ "supabase MCP",
1612
+ "supabase tools",
1613
+ "supabase configuration",
1614
+ "MCP supabase"
1615
+ ],
1199
1616
  "anchors": {
1200
1617
  "setup": "#mcp-configuration",
1201
1618
  "tools": "#available-tools"
@@ -1212,7 +1629,13 @@
1212
1629
  "infrastructure",
1213
1630
  "supabase"
1214
1631
  ],
1215
- "aliases": ["supabase auth", "magic link", "OAuth", "JWT supabase", "row level security auth"],
1632
+ "aliases": [
1633
+ "supabase auth",
1634
+ "magic link",
1635
+ "OAuth",
1636
+ "JWT supabase",
1637
+ "row level security auth"
1638
+ ],
1216
1639
  "anchors": {
1217
1640
  "setup": "#auth-setup",
1218
1641
  "providers": "#auth-providers"
@@ -1229,7 +1652,13 @@
1229
1652
  "infrastructure",
1230
1653
  "supabase"
1231
1654
  ],
1232
- "aliases": ["pgvector", "vector embeddings", "similarity search", "supabase vectors", "HNSW index"],
1655
+ "aliases": [
1656
+ "pgvector",
1657
+ "vector embeddings",
1658
+ "similarity search",
1659
+ "supabase vectors",
1660
+ "HNSW index"
1661
+ ],
1233
1662
  "anchors": {
1234
1663
  "setup": "#pgvector-setup",
1235
1664
  "queries": "#similarity-queries"
@@ -1246,7 +1675,13 @@
1246
1675
  "infrastructure",
1247
1676
  "supabase"
1248
1677
  ],
1249
- "aliases": ["RLS", "row level security", "postgres policies", "multi-tenant security", "supabase policies"],
1678
+ "aliases": [
1679
+ "RLS",
1680
+ "row level security",
1681
+ "postgres policies",
1682
+ "multi-tenant security",
1683
+ "supabase policies"
1684
+ ],
1250
1685
  "anchors": {
1251
1686
  "policies": "#rls-policies",
1252
1687
  "patterns": "#tenant-patterns"
@@ -1263,7 +1698,13 @@
1263
1698
  "infrastructure",
1264
1699
  "supabase"
1265
1700
  ],
1266
- "aliases": ["supabase storage", "file uploads", "storage buckets", "storage policies", "signed URLs"],
1701
+ "aliases": [
1702
+ "supabase storage",
1703
+ "file uploads",
1704
+ "storage buckets",
1705
+ "storage policies",
1706
+ "signed URLs"
1707
+ ],
1267
1708
  "anchors": {
1268
1709
  "buckets": "#bucket-setup",
1269
1710
  "policies": "#storage-policies"
@@ -1280,7 +1721,14 @@
1280
1721
  "integration",
1281
1722
  "api"
1282
1723
  ],
1283
- "aliases": ["graphql", "Hot Chocolate", "GraphQL schema", "query", "mutation", "subscription"],
1724
+ "aliases": [
1725
+ "graphql",
1726
+ "Hot Chocolate",
1727
+ "GraphQL schema",
1728
+ "query",
1729
+ "mutation",
1730
+ "subscription"
1731
+ ],
1284
1732
  "anchors": {
1285
1733
  "setup": "#hot-chocolate-setup",
1286
1734
  "patterns": "#schema-patterns"
@@ -1297,7 +1745,13 @@
1297
1745
  "integration",
1298
1746
  "api"
1299
1747
  ],
1300
- "aliases": ["grpc", "protobuf", ".proto files", "gRPC service", "server streaming"],
1748
+ "aliases": [
1749
+ "grpc",
1750
+ "protobuf",
1751
+ ".proto files",
1752
+ "gRPC service",
1753
+ "server streaming"
1754
+ ],
1301
1755
  "anchors": {
1302
1756
  "proto": "#proto-design",
1303
1757
  "patterns": "#service-patterns"
@@ -1314,7 +1768,13 @@
1314
1768
  "integration",
1315
1769
  "api"
1316
1770
  ],
1317
- "aliases": ["REST design", "RESTful API", "HTTP API design", "resource naming", "API versioning"],
1771
+ "aliases": [
1772
+ "REST design",
1773
+ "RESTful API",
1774
+ "HTTP API design",
1775
+ "resource naming",
1776
+ "API versioning"
1777
+ ],
1318
1778
  "anchors": {
1319
1779
  "resources": "#resource-naming",
1320
1780
  "errors": "#error-handling"
@@ -1331,7 +1791,13 @@
1331
1791
  "integration",
1332
1792
  "event-driven"
1333
1793
  ],
1334
- "aliases": ["CQRS", "command query separation", "MediatR", "read model", "write model"],
1794
+ "aliases": [
1795
+ "CQRS",
1796
+ "command query separation",
1797
+ "MediatR",
1798
+ "read model",
1799
+ "write model"
1800
+ ],
1335
1801
  "anchors": {
1336
1802
  "commands": "#command-patterns",
1337
1803
  "queries": "#query-patterns"
@@ -1348,7 +1814,13 @@
1348
1814
  "integration",
1349
1815
  "event-driven"
1350
1816
  ],
1351
- "aliases": ["event sourcing", "event store", "event replay", "aggregate events", "append-only log"],
1817
+ "aliases": [
1818
+ "event sourcing",
1819
+ "event store",
1820
+ "event replay",
1821
+ "aggregate events",
1822
+ "append-only log"
1823
+ ],
1352
1824
  "anchors": {
1353
1825
  "events": "#domain-events",
1354
1826
  "replay": "#event-replay"
@@ -1365,7 +1837,13 @@
1365
1837
  "integration",
1366
1838
  "event-driven"
1367
1839
  ],
1368
- "aliases": ["service bus integration", "message broker", "event bus", "publisher", "consumer"],
1840
+ "aliases": [
1841
+ "service bus integration",
1842
+ "message broker",
1843
+ "event bus",
1844
+ "publisher",
1845
+ "consumer"
1846
+ ],
1369
1847
  "anchors": {
1370
1848
  "topics": "#topic-subscription",
1371
1849
  "patterns": "#integration-patterns"
@@ -1382,7 +1860,13 @@
1382
1860
  "integration",
1383
1861
  "mcp"
1384
1862
  ],
1385
- "aliases": ["MCP", "Model Context Protocol", "Claude tools", "MCP server", "MCP client"],
1863
+ "aliases": [
1864
+ "MCP",
1865
+ "Model Context Protocol",
1866
+ "Claude tools",
1867
+ "MCP server",
1868
+ "MCP client"
1869
+ ],
1386
1870
  "anchors": {
1387
1871
  "tools": "#tool-definitions",
1388
1872
  "setup": "#server-setup"
@@ -1398,7 +1882,14 @@
1398
1882
  "tags": [
1399
1883
  "observability"
1400
1884
  ],
1401
- "aliases": ["logging", "serilog", "ILogger", "structured logging", "log levels", "Application Insights"],
1885
+ "aliases": [
1886
+ "logging",
1887
+ "serilog",
1888
+ "ILogger",
1889
+ "structured logging",
1890
+ "log levels",
1891
+ "Application Insights"
1892
+ ],
1402
1893
  "anchors": {
1403
1894
  "setup": "#serilog-setup",
1404
1895
  "patterns": "#logging-patterns"
@@ -1414,7 +1905,14 @@
1414
1905
  "tags": [
1415
1906
  "observability"
1416
1907
  ],
1417
- "aliases": ["metrics", "prometheus", "OpenTelemetry metrics", "custom metrics", "counters", "histograms"],
1908
+ "aliases": [
1909
+ "metrics",
1910
+ "prometheus",
1911
+ "OpenTelemetry metrics",
1912
+ "custom metrics",
1913
+ "counters",
1914
+ "histograms"
1915
+ ],
1418
1916
  "anchors": {
1419
1917
  "setup": "#metrics-setup",
1420
1918
  "instruments": "#metric-types"
@@ -1430,7 +1928,14 @@
1430
1928
  "tags": [
1431
1929
  "observability"
1432
1930
  ],
1433
- "aliases": ["monitoring", "alerts", "dashboards", "Application Insights", "health checks", "SLA"],
1931
+ "aliases": [
1932
+ "monitoring",
1933
+ "alerts",
1934
+ "dashboards",
1935
+ "Application Insights",
1936
+ "health checks",
1937
+ "SLA"
1938
+ ],
1434
1939
  "anchors": {
1435
1940
  "alerts": "#alert-rules",
1436
1941
  "dashboards": "#dashboard-setup"
@@ -1446,7 +1951,13 @@
1446
1951
  "tags": [
1447
1952
  "observability"
1448
1953
  ],
1449
- "aliases": ["tracing", "OpenTelemetry", "distributed trace", "spans", "W3C TraceContext"],
1954
+ "aliases": [
1955
+ "tracing",
1956
+ "OpenTelemetry",
1957
+ "distributed trace",
1958
+ "spans",
1959
+ "W3C TraceContext"
1960
+ ],
1450
1961
  "anchors": {
1451
1962
  "setup": "#otel-setup",
1452
1963
  "propagation": "#context-propagation"
@@ -1462,7 +1973,14 @@
1462
1973
  "tags": [
1463
1974
  "workflows"
1464
1975
  ],
1465
- "aliases": ["parallel", "Task.WhenAll", "concurrent", "parallelism", "async parallel", "Parallel.ForEachAsync"],
1976
+ "aliases": [
1977
+ "parallel",
1978
+ "Task.WhenAll",
1979
+ "concurrent",
1980
+ "parallelism",
1981
+ "async parallel",
1982
+ "Parallel.ForEachAsync"
1983
+ ],
1466
1984
  "anchors": {
1467
1985
  "patterns": "#parallel-patterns",
1468
1986
  "throttling": "#concurrency-limits"
@@ -1478,12 +1996,46 @@
1478
1996
  "tags": [
1479
1997
  "workflows"
1480
1998
  ],
1481
- "aliases": ["threads", "ThreadPool", "ConfigureAwait", "deadlock prevention", "async void", "synchronization"],
1999
+ "aliases": [
2000
+ "threads",
2001
+ "ThreadPool",
2002
+ "ConfigureAwait",
2003
+ "deadlock prevention",
2004
+ "async void",
2005
+ "synchronization"
2006
+ ],
1482
2007
  "anchors": {
1483
2008
  "patterns": "#thread-patterns",
1484
2009
  "deadlocks": "#deadlock-prevention"
1485
2010
  },
1486
2011
  "digest": "Use async/await throughout — never mix blocking calls (.Result, .Wait()). ConfigureAwait(false) in library code. Never Thread.Sleep — use Task.Delay with CancellationToken. Lock-free with Interlocked for counters, ConcurrentDictionary for shared state. ThreadPool.QueueUserWorkItem only for truly detached background work."
2012
+ },
2013
+ {
2014
+ "id": "infrastructure-vercel-database",
2015
+ "name": "vercel database",
2016
+ "path": "infrastructure/vercel/vercel-database.md",
2017
+ "category": "infrastructure",
2018
+ "subcategory": "vercel",
2019
+ "tags": [
2020
+ "infrastructure",
2021
+ "vercel",
2022
+ "nextjs",
2023
+ "database"
2024
+ ],
2025
+ "aliases": [
2026
+ "Vercel deploy",
2027
+ "serverless database",
2028
+ "Neon",
2029
+ "PlanetScale",
2030
+ "Vercel Postgres",
2031
+ "serverless postgres"
2032
+ ],
2033
+ "anchors": {
2034
+ "decision": "#decision-tree-choose-your-db-tier",
2035
+ "neon": "#implementation-neon-recommended",
2036
+ "supabase": "#implementation-supabase--pgbouncer-transaction-mode"
2037
+ },
2038
+ "digest": "NEVER use a traditional TCP connection pool (plain pg/Npgsql) when deploying to Vercel — ephemeral functions exhaust connections instantly. ALWAYS use a serverless-compatible database: Neon (first choice for SQL), Supabase with PgBouncer on port 6543 (transaction mode), PlanetScale, or Turso. Set connection_limit=1 when using ORMs with PgBouncer."
1487
2039
  }
1488
2040
  ]
1489
- }
2041
+ }