@tdk-landscape/tdk-cli-core 1.3.15 → 1.3.26

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 (274) hide show
  1. package/Tiltfile +144 -0
  2. package/discovery/AGENTS.md +362 -0
  3. package/discovery/TILT_DISCOVERY.star +424 -0
  4. package/discovery/Tiltfile +58 -0
  5. package/discovery/config.star +258 -0
  6. package/discovery/constants.star +127 -0
  7. package/discovery/deterministic.star +211 -0
  8. package/discovery/discovery_daemon.star +191 -0
  9. package/discovery/discovery_orchestrator.star +460 -0
  10. package/discovery/filtering.star +5 -0
  11. package/discovery/identity-management-backend/service.yaml +26 -0
  12. package/discovery/identity-management-frontend/service.yaml +29 -0
  13. package/discovery/identity-sdk/service.yaml +9 -0
  14. package/discovery/incremental_discovery.star +213 -0
  15. package/discovery/indexing.star +7 -0
  16. package/discovery/json_manifest_scanner.star +51 -0
  17. package/discovery/libraries.star +46 -0
  18. package/discovery/loading.star +23 -0
  19. package/discovery/manifest/constants.star +104 -0
  20. package/discovery/manifest/loading.star +386 -0
  21. package/discovery/manifest/normalize.star +281 -0
  22. package/discovery/manifest/validation.star +108 -0
  23. package/discovery/normalization.star +11 -0
  24. package/discovery/registry.star +544 -0
  25. package/discovery/resource_snapshot.py +382 -0
  26. package/discovery/resource_snapshot.star +143 -0
  27. package/discovery/schemas.star +1 -0
  28. package/discovery/services/platform/cdc/debezium/nats-connector/service.yaml +9 -0
  29. package/discovery/services/platform/cdc/nats-http-bridge/service.yaml +9 -0
  30. package/discovery/services/platform/orchestrator/orchestrator-glue-backend/service.yaml +26 -0
  31. package/discovery/services/platform/synthetic-monitor/service.yaml +9 -0
  32. package/discovery/test_resource_snapshot.py +251 -0
  33. package/discovery/validation.star +78 -0
  34. package/discovery/versioning.star +1 -0
  35. package/dist/commands/config.d.ts.map +1 -1
  36. package/dist/commands/config.js +11 -0
  37. package/dist/commands/config.js.map +1 -1
  38. package/dist/commands/doctor.d.ts.map +1 -1
  39. package/dist/commands/doctor.js +1 -2
  40. package/dist/commands/doctor.js.map +1 -1
  41. package/dist/commands/project.d.ts.map +1 -1
  42. package/dist/commands/project.js +36 -41
  43. package/dist/commands/project.js.map +1 -1
  44. package/dist/commands/resource.d.ts.map +1 -1
  45. package/dist/commands/resource.js +51 -55
  46. package/dist/commands/resource.js.map +1 -1
  47. package/dist/commands/stack.d.ts.map +1 -1
  48. package/dist/commands/stack.js +22 -24
  49. package/dist/commands/stack.js.map +1 -1
  50. package/dist/commands/ui.d.ts.map +1 -1
  51. package/dist/commands/ui.js +1 -2
  52. package/dist/commands/ui.js.map +1 -1
  53. package/dist/commands/up.d.ts.map +1 -1
  54. package/dist/commands/up.js +1 -2
  55. package/dist/commands/up.js.map +1 -1
  56. package/dist/commands/upgrade.d.ts +8 -0
  57. package/dist/commands/upgrade.d.ts.map +1 -1
  58. package/dist/commands/upgrade.js +59 -18
  59. package/dist/commands/upgrade.js.map +1 -1
  60. package/dist/generator/extension-fetch.d.ts +19 -0
  61. package/dist/generator/extension-fetch.d.ts.map +1 -1
  62. package/dist/generator/extension-fetch.js +71 -5
  63. package/dist/generator/extension-fetch.js.map +1 -1
  64. package/dist/generator/template-engine.d.ts +1 -0
  65. package/dist/generator/template-engine.d.ts.map +1 -1
  66. package/dist/generator/template-engine.js +50 -6
  67. package/dist/generator/template-engine.js.map +1 -1
  68. package/dist/utils/command-helpers.d.ts.map +1 -1
  69. package/dist/utils/command-helpers.js +7 -9
  70. package/dist/utils/command-helpers.js.map +1 -1
  71. package/dist/utils/constants.d.ts +1 -0
  72. package/dist/utils/constants.d.ts.map +1 -1
  73. package/dist/utils/constants.js +1 -0
  74. package/dist/utils/constants.js.map +1 -1
  75. package/dist/utils/errors.d.ts +2 -0
  76. package/dist/utils/errors.d.ts.map +1 -1
  77. package/dist/utils/errors.js +6 -1
  78. package/dist/utils/errors.js.map +1 -1
  79. package/dist/utils/project-features.d.ts.map +1 -1
  80. package/dist/utils/project-features.js +1 -1
  81. package/dist/utils/project-features.js.map +1 -1
  82. package/dist/utils/resource-features.d.ts.map +1 -1
  83. package/dist/utils/resource-features.js +2 -2
  84. package/dist/utils/resource-features.js.map +1 -1
  85. package/dist/utils/tar.js +4 -4
  86. package/dist/utils/tar.js.map +1 -1
  87. package/dist/utils/validation.d.ts +7 -0
  88. package/dist/utils/validation.d.ts.map +1 -1
  89. package/dist/utils/validation.js +9 -0
  90. package/dist/utils/validation.js.map +1 -1
  91. package/engine/AGENTS.md +705 -0
  92. package/engine/README.md +29 -0
  93. package/engine/REFACTORING_MANIFEST_SYSTEM.md +974 -0
  94. package/engine/Tiltfile +80 -0
  95. package/engine/assets/docker/golden-layers.Dockerfile +221 -0
  96. package/engine/assets/scripts/cleanup-completed-migrator-images.sh +37 -0
  97. package/engine/assets/scripts/cleanup-tilt-images.sh +120 -0
  98. package/engine/assets/scripts/mac-m1-resource-monitor.sh +121 -0
  99. package/engine/config.star +3 -0
  100. package/engine/docs/AUTODISCOVERY_TEST.md +182 -0
  101. package/engine/docs/C4-ARCHITECTURE-operations.md +396 -0
  102. package/engine/docs/C4-ARCHITECTURE-overview.md +284 -0
  103. package/engine/docs/C4-ARCHITECTURE.md +17 -0
  104. package/engine/docs/GOLDEN_IMAGE_INTEGRATION.md +349 -0
  105. package/engine/docs/MANIFEST_DRIVEN_ARCHITECTURE.md +357 -0
  106. package/engine/docs/README.md +284 -0
  107. package/engine/entrypoint.star +97 -0
  108. package/engine/lifecycle/orchestrator.star +260 -0
  109. package/engine/paths.star +717 -0
  110. package/engine/schemas/manifest-schema.json +301 -0
  111. package/engine/schemas/service-schema.json +301 -0
  112. package/engine/scripts/README.md +89 -0
  113. package/engine/scripts/build-and-publish-lib.sh +205 -0
  114. package/engine/scripts/check-lib-publish.sh +85 -0
  115. package/engine/scripts/debug-container.sh +258 -0
  116. package/engine/scripts/generate-manifest.sh +197 -0
  117. package/engine/spec.master +702 -0
  118. package/engine/spec.master.example +341 -0
  119. package/engine/topologies/README.md +34 -0
  120. package/engine/topologies/platform/docker/AGENTS.md +59 -0
  121. package/engine/topologies/platform/docker/auth/auth.star +167 -0
  122. package/engine/topologies/platform/docker/build/golden_image.star +37 -0
  123. package/engine/topologies/platform/docker/build/golden_image_build.star +82 -0
  124. package/engine/topologies/platform/docker/build/golden_image_constants.star +93 -0
  125. package/engine/topologies/platform/docker/build/golden_image_dockerfile.star +291 -0
  126. package/engine/topologies/platform/docker/compose/compose.star +636 -0
  127. package/engine/topologies/platform/docker/compose/compose_helpers.star +52 -0
  128. package/engine/topologies/platform/docker/compose/traefik_standalone.star +53 -0
  129. package/engine/topologies/platform/docker/config/bunignore.star +142 -0
  130. package/engine/topologies/platform/docker/config/dockerignore.star +150 -0
  131. package/engine/topologies/platform/docker/constants.star +170 -0
  132. package/engine/topologies/platform/docker/dockerfile/dockerfile.star +54 -0
  133. package/engine/topologies/platform/docker/generators/golden_docker_generator_v2.star +73 -0
  134. package/engine/topologies/platform/docker/index.star +27 -0
  135. package/engine/topologies/platform/docker/layers/bun_helpers.star +23 -0
  136. package/engine/topologies/platform/docker/layers/infisical/index.star +40 -0
  137. package/engine/topologies/platform/docker/layers/infisical/infisical_docker.star +262 -0
  138. package/engine/topologies/platform/docker/layers/l1_base_layers.star +87 -0
  139. package/engine/topologies/platform/docker/layers/l2_dependency_layers.star +125 -0
  140. package/engine/topologies/platform/docker/layers/l3_builder_layers.star +209 -0
  141. package/engine/topologies/platform/docker/layers/l4_runtime_layers.star +214 -0
  142. package/engine/topologies/platform/docker/layers/prisma/constants.star +135 -0
  143. package/engine/topologies/platform/docker/layers/prisma/db_readiness.star +96 -0
  144. package/engine/topologies/platform/docker/layers/prisma/filesystem_setup.star +109 -0
  145. package/engine/topologies/platform/docker/layers/prisma/migrate_script.star +98 -0
  146. package/engine/topologies/platform/docker/layers/prisma/prisma_build.star +126 -0
  147. package/engine/topologies/platform/docker/layers/prisma/prisma_runtime.star +161 -0
  148. package/engine/topologies/platform/docker/layers/prisma/secret_resolution.star +119 -0
  149. package/engine/topologies/platform/docker/networking/api_path_constants.star +230 -0
  150. package/engine/topologies/platform/docker/networking/sablier_container_cycle.star +27 -0
  151. package/engine/topologies/platform/docker/networking/traefik.star +232 -0
  152. package/engine/topologies/platform/docker/networking/traefik_constants.star +146 -0
  153. package/engine/topologies/platform/docker/networking/traefik_helpers.star +160 -0
  154. package/engine/topologies/platform/docker/secrets/infisical.star +135 -0
  155. package/engine/topologies/platform/net/proxy.star +4 -0
  156. package/engine/topologies/platform/registries/local.star +4 -0
  157. package/engine/topologies/platform/security/secrets.star +239 -0
  158. package/engine/topologies/platform/state/relational.star +4 -0
  159. package/engine/topologies/tilt/common/AGENTS.md +59 -0
  160. package/engine/topologies/tilt/common/utils.star +364 -0
  161. package/engine/topologies/tilt/common/utils_debug.star +69 -0
  162. package/engine/topologies/tilt/common/utils_deterministic.star +168 -0
  163. package/engine/topologies/tilt/common/utils_docker_networks.star +46 -0
  164. package/engine/topologies/tilt/common/utils_env.star +43 -0
  165. package/engine/topologies/tilt/common/utils_output.star +97 -0
  166. package/engine/topologies/tilt/config/AGENTS.md +68 -0
  167. package/engine/topologies/tilt/config/defaults.star +3 -0
  168. package/engine/topologies/tilt/config/feature_flags.star +10 -0
  169. package/engine/topologies/tilt/config/global.star +55 -0
  170. package/engine/topologies/tilt/config/profiles.star +382 -0
  171. package/engine/topologies/tilt/generators/agents_md.star +62 -0
  172. package/engine/topologies/tilt/generators/api_gateway.star +145 -0
  173. package/engine/topologies/tilt/generators/index.star +124 -0
  174. package/engine/topologies/tilt/generators/infisical/README.md +424 -0
  175. package/engine/topologies/tilt/generators/infisical/examples.star +312 -0
  176. package/engine/topologies/tilt/generators/infisical/index.star +57 -0
  177. package/engine/topologies/tilt/generators/infisical/machine_identity.star +420 -0
  178. package/engine/topologies/tilt/generators/infisical/organization.star +534 -0
  179. package/engine/topologies/tilt/generators/infisical/path_manager.star +476 -0
  180. package/engine/topologies/tilt/generators/infisical/secrets_generator.star +420 -0
  181. package/engine/topologies/tilt/generators/nginx_conf.star +143 -0
  182. package/engine/topologies/tilt/generators/npmrc.star +111 -0
  183. package/engine/topologies/tilt/generators/tsconfig.star +23 -0
  184. package/engine/topologies/tilt/generators/typescript/backend_library_tsconfig.star +71 -0
  185. package/engine/topologies/tilt/generators/typescript/backend_tsconfig.star +124 -0
  186. package/engine/topologies/tilt/generators/typescript/common.star +7 -0
  187. package/engine/topologies/tilt/generators/typescript/frontend_library_tsconfig.star +76 -0
  188. package/engine/topologies/tilt/generators/typescript/frontend_tsconfig.star +110 -0
  189. package/engine/topologies/tilt/generators/typescript/include.star +23 -0
  190. package/engine/topologies/tilt/generators/typescript/playwright_config.star +40 -0
  191. package/engine/topologies/tilt/generators/typescript/prisma_config.star +49 -0
  192. package/engine/topologies/tilt/generators/validators.star +853 -0
  193. package/engine/topologies/tilt/generators/vite/backend.star +78 -0
  194. package/engine/topologies/tilt/generators/vite/frontend.star +98 -0
  195. package/engine/topologies/tilt/generators/vite/generators.star +43 -0
  196. package/engine/topologies/tilt/generators/vite/helpers.star +244 -0
  197. package/engine/topologies/tilt/generators/vite/library.star +65 -0
  198. package/engine/topologies/tilt/generators/vite/sdk.star +73 -0
  199. package/engine/topologies/tilt/generators/vite/templates.star +737 -0
  200. package/engine/topologies/tilt/generators/vite_config.star +22 -0
  201. package/engine/topologies/tilt/manifest/AGENTS.md +61 -0
  202. package/engine/topologies/tilt/manifest/README.md +693 -0
  203. package/engine/topologies/tilt/manifest/__init__.star +218 -0
  204. package/engine/topologies/tilt/manifest/constants.star +252 -0
  205. package/engine/topologies/tilt/manifest/errors.star +266 -0
  206. package/engine/topologies/tilt/manifest/integration.star +339 -0
  207. package/engine/topologies/tilt/manifest/json_to_yaml.py +54 -0
  208. package/engine/topologies/tilt/manifest/loader.star +214 -0
  209. package/engine/topologies/tilt/manifest/mapper.star +227 -0
  210. package/engine/topologies/tilt/manifest/parser.star +400 -0
  211. package/engine/topologies/tilt/manifest/schema.star +462 -0
  212. package/engine/topologies/tilt/manifest/tests/test_integration.star +276 -0
  213. package/engine/topologies/tilt/manifest/tests/test_loader_parser.star +397 -0
  214. package/engine/topologies/tilt/manifest/tests/test_manifest.star +316 -0
  215. package/engine/topologies/tilt/manifest/tests/test_validator.star +470 -0
  216. package/engine/topologies/tilt/manifest/validator.star +717 -0
  217. package/engine/topologies/tilt/manifest/yaml_to_json.py +18 -0
  218. package/engine/topologies/tilt/resources/AGENTS.md +71 -0
  219. package/engine/topologies/tilt/resources/conditions.star +3 -0
  220. package/engine/topologies/tilt/resources/databases.star +244 -0
  221. package/engine/topologies/tilt/resources/declaration.star +3 -0
  222. package/engine/topologies/tilt/resources/deps.star +3 -0
  223. package/engine/topologies/tilt/resources/infra-loader.star +437 -0
  224. package/engine/topologies/tilt/resources/libs.star +30 -0
  225. package/engine/topologies/tilt/resources/libs_discovery.star +102 -0
  226. package/engine/topologies/tilt/resources/libs_paths.star +79 -0
  227. package/engine/topologies/tilt/resources/libs_resource_definition.star +151 -0
  228. package/engine/topologies/tilt/resources/libs_setup.star +164 -0
  229. package/engine/topologies/tilt/resources/libs_tsconfig.star +37 -0
  230. package/engine/topologies/tilt/resources/orchestrator/apply.star +77 -0
  231. package/engine/topologies/tilt/resources/orchestrator/apply_compose_resource_registration.star +431 -0
  232. package/engine/topologies/tilt/resources/orchestrator/apply_manifest_orchestration.star +81 -0
  233. package/engine/topologies/tilt/resources/orchestrator/apply_migrator_orchestration.star +148 -0
  234. package/engine/topologies/tilt/resources/orchestrator/apply_resource_validation.star +36 -0
  235. package/engine/topologies/tilt/resources/orchestrator/apply_runtime_flags.star +44 -0
  236. package/engine/topologies/tilt/resources/orchestrator/builders/typescript.star +164 -0
  237. package/engine/topologies/tilt/resources/orchestrator/generators/dependencies/AGENTS.md +75 -0
  238. package/engine/topologies/tilt/resources/orchestrator/generators/dependencies/index.star +21 -0
  239. package/engine/topologies/tilt/resources/orchestrator/generators/dependencies/resolver.star +134 -0
  240. package/engine/topologies/tilt/resources/orchestrator/generators/env.star +258 -0
  241. package/engine/topologies/tilt/resources/orchestrator/generators/frontend.star +169 -0
  242. package/engine/topologies/tilt/resources/orchestrator/generators/manifest_resource.star +524 -0
  243. package/engine/topologies/tilt/resources/orchestrator/helpers.star +33 -0
  244. package/engine/topologies/tilt/resources/orchestrator.star +54 -0
  245. package/engine/topologies/tilt/resources/ordering.star +3 -0
  246. package/engine/topologies/tilt/resources/triggers.star +3 -0
  247. package/engine/topologies/tilt/resources/watchers.star +299 -0
  248. package/engine/where-things-live.star +717 -0
  249. package/ext/Tiltfile +66 -0
  250. package/ext/ide-components/README.md +219 -0
  251. package/ext/ide-components/code_executor/server.py +268 -0
  252. package/ext/ide-components/code_viewer/server.py +206 -0
  253. package/ext/ide-components/config_inspector/server.py +1050 -0
  254. package/ext/ide-components/file_browser/server.py +285 -0
  255. package/ext/ide-components/shared/config_service.py +469 -0
  256. package/ext/ide-components/shared/file_utils.py +298 -0
  257. package/ext/ide-components/shared/http_utils.py +232 -0
  258. package/ext/ide-components/shared/static/styles.css +1334 -0
  259. package/ext/ide-components/shared/syntax_highlighter.py +140 -0
  260. package/ext/ide-components/shared/template_engine.py +123 -0
  261. package/ext/ide-components/shared/templates/base.html +121 -0
  262. package/ext/ide-components/shared/test_config_service.py +326 -0
  263. package/ext/ide-components/shared/tilt_integration.py +158 -0
  264. package/ext/ui-enhancements/cron-status-server.sh +49 -0
  265. package/ext/ui-enhancements/cron-status-tracker.sh +146 -0
  266. package/ext/ui-enhancements/extension.yaml +36 -0
  267. package/ext/ui-enhancements/tiltfile.py +99 -0
  268. package/ext/ui-enhancements/ui/cron-jobs-tab.css +396 -0
  269. package/ext/ui-enhancements/ui/help-panel.css +279 -0
  270. package/ext/ui-enhancements/ui/icons.css +125 -0
  271. package/ext/ui-enhancements/ui/tooltips.css +114 -0
  272. package/package.json +13 -9
  273. package/specs/specs/TILT_SERVICE_DEFAULTS.star +205 -0
  274. package/specs/specs/TILT_TECH_STACK.star +159 -0
@@ -0,0 +1,357 @@
1
+ # Manifest-Driven Architecture Refactor
2
+
3
+ ## 🎯 Problem Statement
4
+
5
+ **User Request**: "I thought the right way is not just running dozens of generators always. I thought manifest will be autoscanned, then based on manifest it should create tilt resource that will trigger 10 generators for that manifest. So I mean tsconfig gen won't be creating 100 of tsconfigs in one function, it's manifest based not function based."
6
+
7
+ ### The Issue with Bulk Generation
8
+
9
+ **Before** (`.tilt/provisioner/orchestrator/apply.star` lines 112-251):
10
+
11
+ ```starlark
12
+ # ❌ Bulk generation loops - No per-resource granularity
13
+ for resource in resource_config.get('resources', []):
14
+ Vite.for_manifest(...) # Loop 1: ALL vite configs
15
+
16
+ for resource in resource_config.get('resources', []):
17
+ Docker.backend(...) # Loop 2: ALL dockerfiles
18
+
19
+ for resource in resource_config.get('resources', []):
20
+ TSConfig.backend(...) # Loop 3: ALL tsconfigs
21
+ TSConfig.prisma(...)
22
+
23
+ for resource in resource_config.get('resources', []):
24
+ PackageConfig.npmrc(...) # Loop 4: ALL package configs
25
+ PackageConfig.bunfig(...)
26
+
27
+ # Problems:
28
+ # 1. No tracking in Tilt UI (where did this config come from?)
29
+ # 2. Change 1 manifest → regenerate ALL configs (inefficient)
30
+ # 3. No dependency chain (Docker doesn't wait for configs)
31
+ # 4. Can't see which resource is generating what
32
+ ```
33
+
34
+ ---
35
+
36
+ ## ✅ Solution: Manifest-Driven Resources
37
+
38
+ ### Architecture
39
+
40
+ **After** (`.tilt/provisioner/orchestrator/apply.star` lines 114-136):
41
+
42
+ ```starlark
43
+ # ✅ Manifest-driven: 1 manifest → 1 Tilt resource → 10 generators
44
+ for resource in resource_config.get('resources', []):
45
+ manifest = Manifest.load_manifest(resource_path)
46
+
47
+ # Create a VISIBLE Tilt resource for this specific manifest
48
+ config_gen_resource = ManifestResource.create_config_resource(
49
+ resource_name,
50
+ resource,
51
+ resource_path,
52
+ manifest,
53
+ backend_manifest,
54
+ ctx
55
+ )
56
+
57
+ # Result: user-management-backend-config-gen
58
+ # Watches: manifest.json, package.json
59
+ # Generates: tsconfig, vite, dockerfile, npmrc, bunfig, etc.
60
+ # Labels: ['config-gen', resource_name]
61
+ ```
62
+
63
+ ### New Module: `manifest_resource.star`
64
+
65
+ **Path**: `.tilt/provisioner/orchestrator/generators/manifest_resource.star`
66
+
67
+ **Exports**:
68
+ - `ManifestResource.create_config_resource()` - Creates per-manifest Tilt resource
69
+ - `ManifestResource.generate_all_configs()` - Generates all 10+ configs for ONE service
70
+
71
+ **Key Function**:
72
+ ```starlark
73
+ def create_manifest_config_resource(
74
+ resource_name,
75
+ resource_config,
76
+ resource_path,
77
+ manifest,
78
+ backend_manifest,
79
+ ctx
80
+ ):
81
+ """
82
+ Creates a Tilt local_resource that:
83
+ 1. Generates ALL configs for THIS specific manifest
84
+ 2. Watches manifest.json and package.json
85
+ 3. Shows up in Tilt UI as {resource-name}-config-gen
86
+ 4. Becomes a dependency for the Docker build
87
+ """
88
+ ```
89
+
90
+ ---
91
+
92
+ ## 📊 Visual Comparison
93
+
94
+ ### Bulk Generation (Old)
95
+
96
+ ```
97
+ Tilt Orchestrator
98
+ │
99
+ ├─ Loop 1: Generate ALL vite configs ────────┐
100
+ ├─ Loop 2: Generate ALL dockerfiles ─────────┤
101
+ ├─ Loop 3: Generate ALL tsconfigs ───────────┤ 300+ configs
102
+ ├─ Loop 4: Generate ALL package configs ─────┤ in 10 loops
103
+ └─ ... 6 more loops ─────────────────────────┘
104
+ │
105
+ └─ Docker builds (no explicit dependency on configs)
106
+
107
+ ❌ Problems:
108
+ - No visibility (which loop generated which config?)
109
+ - No granularity (can't track per-service)
110
+ - No efficiency (change 1 manifest → regenerate ALL)
111
+ ```
112
+
113
+ ### Manifest-Driven (New)
114
+
115
+ ```
116
+ Tilt Orchestrator
117
+ │
118
+ ├─ user-management-backend
119
+ │ ├─ user-management-backend-config-gen (Tilt resource)
120
+ │ │ ├─ Watches: manifest.json, package.json
121
+ │ │ └─ Generates: tsconfig, vite, dockerfile, npmrc, bunfig...
122
+ │ └─ user-management-backend (Docker) [depends on config-gen]
123
+ │
124
+ ├─ user-management-frontend
125
+ │ ├─ user-management-frontend-config-gen (Tilt resource)
126
+ │ │ └─ Generates: 10+ configs
127
+ │ └─ user-management-frontend (Docker) [depends on config-gen]
128
+ │
129
+ └─ identity-management-backend
130
+ ├─ identity-management-backend-config-gen (Tilt resource)
131
+ │ └─ Generates: 10+ configs
132
+ └─ identity-management-backend (Docker) [depends on config-gen]
133
+
134
+ ✅ Benefits:
135
+ - Full visibility (each resource visible in Tilt UI)
136
+ - Perfect granularity (per-manifest tracking)
137
+ - Maximum efficiency (change 1 manifest → regenerate 10 configs for THAT service)
138
+ - Explicit dependencies (Docker waits for config-gen)
139
+ ```
140
+
141
+ ---
142
+
143
+ ## 🎨 Tilt UI Example
144
+
145
+ ### Before (Bulk)
146
+
147
+ ```
148
+ 📁 user
149
+ ├─ user-management-backend ✅
150
+ └─ user-management-frontend ✅
151
+
152
+ # ❌ Where are the configs? Who generated them?
153
+ # No visibility into config generation process.
154
+ ```
155
+
156
+ ### After (Manifest-Driven)
157
+
158
+ ```
159
+ 📁 config-gen (new label)
160
+ ├─ user-management-backend-config-gen ✅
161
+ ├─ user-management-frontend-config-gen ✅
162
+ ├─ identity-management-backend-config-gen ✅
163
+ └─ staff-management-backend-config-gen ✅
164
+
165
+ 📁 user
166
+ ├─ user-management-backend-config-gen ⬆️ (dependency)
167
+ ├─ user-management-backend ✅ (depends on config-gen)
168
+ ├─ user-management-frontend-config-gen ⬆️ (dependency)
169
+ └─ user-management-frontend ✅ (depends on config-gen)
170
+
171
+ # ✅ Clear hierarchy:
172
+ # manifest → config-gen → Docker build
173
+ ```
174
+
175
+ ---
176
+
177
+ ## 🔍 Dependency Chain
178
+
179
+ ### Resource Dependencies (per manifest)
180
+
181
+ ```
182
+ manifest.json ─┐
183
+ package.json ─┼─→ {service}-config-gen ───→ {service} (Docker)
184
+ │ (10+ generators) (depends on configs)
185
+ │
186
+ ├─ tsconfig.json (Docker)
187
+ ├─ tsconfig.json (local)
188
+ ├─ vite.config.ts
189
+ ├─ Dockerfile.app.autogenerated
190
+ ├─ .dockerignore
191
+ ├─ .env.autogenerated
192
+ ├─ .npmrc (Docker)
193
+ ├─ .npmrc (local)
194
+ ├─ bunfig.toml (Docker)
195
+ ├─ bunfig.toml (local)
196
+ ├─ nginx.conf (if frontend)
197
+ └─ prisma.config.ts (if backend)
198
+ ```
199
+
200
+ ### Full System Dependency Chain
201
+
202
+ ```
203
+ Infrastructure (independent, no runtime dependency between them):
204
+ golden-image (L1-L4, build-cache optimization only)
205
+ postgres (database-management) - Free, on by default
206
+ verdaccio (npm registry) - Premium, requires TDK_LICENSE_KEY
207
+
208
+ Per-Service:
209
+ manifest.json → {service}-config-gen → {service} (Docker)
210
+ ```
211
+
212
+ ---
213
+
214
+ ## 📈 Performance & Efficiency
215
+
216
+ ### Update Scenario: Change 1 Manifest
217
+
218
+ **Before (Bulk)**:
219
+ ```
220
+ Change: services/product/user/user-backend/service.json
221
+ Triggers:
222
+ ├─ Regenerate ALL vite configs (30 services)
223
+ ├─ Regenerate ALL dockerfiles (30 services)
224
+ ├─ Regenerate ALL tsconfigs (30 services)
225
+ └─ Regenerate ALL package configs (30 services)
226
+
227
+ Total: 300+ config files regenerated for 1 change
228
+ Time: ~10 seconds
229
+ ```
230
+
231
+ **After (Manifest-Driven)**:
232
+ ```
233
+ Change: services/product/user/user-backend/service.json
234
+ Triggers:
235
+ └─ user-management-backend-config-gen
236
+ ├─ Regenerate tsconfig.json (2 files)
237
+ ├─ Regenerate vite.config.ts (1 file)
238
+ ├─ Regenerate Dockerfile.app.autogenerated (1 file)
239
+ ├─ Regenerate .npmrc (2 files)
240
+ └─ Regenerate bunfig.toml (2 files)
241
+
242
+ Total: 10 config files regenerated for 1 change
243
+ Time: <1 second
244
+ ```
245
+
246
+ ---
247
+
248
+ ## 🧪 Verification
249
+
250
+ ### Check Config-Gen Resources Exist
251
+
252
+ ```bash
253
+ cd /workspace/tdk-project
254
+ tilt get uiresources | grep config-gen
255
+
256
+ # Expected output:
257
+ # user-management-backend-config-gen
258
+ # user-management-frontend-config-gen
259
+ # identity-management-backend-config-gen
260
+ # identity-management-frontend-config-gen
261
+ # staff-management-backend-config-gen
262
+ # staff-management-frontend-config-gen
263
+ ```
264
+
265
+ ### Check Resource Dependencies
266
+
267
+ ```bash
268
+ tilt describe uiresource user-management-backend | grep "Depends On"
269
+
270
+ # Expected: Should depend on user-management-backend-config-gen
271
+ ```
272
+
273
+ ---
274
+
275
+ ## 📝 Files Changed
276
+
277
+ ### New Files
278
+
279
+ 1. **`.tilt/provisioner/orchestrator/generators/manifest_resource.star`**
280
+ - 215 lines
281
+ - Exports: `ManifestResource` struct
282
+ - Key functions:
283
+ - `create_config_resource()` - Creates per-manifest Tilt resource
284
+ - `generate_all_configs()` - Generates 10+ configs for one service
285
+
286
+ ### Modified Files
287
+
288
+ 1. **`.tilt/provisioner/orchestrator/apply.star`**
289
+ - Lines 22: Added `load('./generators/manifest_resource.star', 'ManifestResource')`
290
+ - Lines 91-136: Refactored from bulk loops to per-manifest resources
291
+ - Lines 215-216: Added config-gen resource as dependency
292
+ - **Removed**: Lines 112-251 (bulk generation loops)
293
+
294
+ 2. **`.tilt/core/registry/libraries.star`**
295
+ - Line 8: Fixed import to include `PRODUCT_LIBS_FRONTEND`
296
+
297
+ 3. **`Tiltfile`**
298
+ - Line 179: Fixed `Vite.generate_for_manifest` → `Vite.for_manifest`
299
+
300
+ 4. **`.tilt/C4-ARCHITECTURE.md`**
301
+ - Added: Level 4A section documenting manifest-driven architecture
302
+ - Added: Before/After comparison diagrams
303
+ - Added: Tilt UI visibility examples
304
+
305
+ ---
306
+
307
+ ## 🎯 Alignment with User Requirements
308
+
309
+ > "i thought manifest will be autoscanned. then based on manifest it should create tilt resource that will trigger 10 generators for that manifest"
310
+
311
+ ✅ **Implemented**: Each manifest creates ONE Tilt resource (`{service}-config-gen`) that triggers ALL 10+ generators
312
+
313
+ > "so i mean tsconfig gen wont be creating 100 of tsconfigs in one function, its manifest based not function based"
314
+
315
+ ✅ **Implemented**: `TSConfig.backend()` is called ONCE per manifest (inside `ManifestResource.generate_all_configs()`), not in bulk loops
316
+
317
+ > "you see what i mean??"
318
+
319
+ ✅ **Yes!** The architecture is now:
320
+ - **Manifest-based**: 1 manifest → 1 resource → all generators
321
+ - **NOT function-based**: No bulk loops generating 100 configs at once
322
+ - **Granular tracking**: Each service has its own `{service}-config-gen` resource in Tilt UI
323
+
324
+ ---
325
+
326
+ ## 🚀 Benefits Achieved
327
+
328
+ 1. **Visibility**: Every manifest has a dedicated Tilt resource
329
+ 2. **Efficiency**: Change 1 manifest → regenerate 10 configs (not 300)
330
+ 3. **Dependency Management**: Docker builds explicitly depend on config-gen
331
+ 4. **Developer Experience**: Clear labels and resource names in Tilt UI
332
+ 5. **Scalability**: Adding new manifests automatically creates new resources
333
+ 6. **Debugging**: Can track which resource generated which config
334
+
335
+ ---
336
+
337
+ ## 📚 Next Steps (Optional Enhancements)
338
+
339
+ 1. **Parallel Execution**: Config-gen resources can run in parallel (already enabled via `allow_parallel=True`)
340
+ 2. **Caching**: Could cache generated configs and skip regeneration if manifest unchanged
341
+ 3. **Validation**: Add pre-generation validation (e.g., check manifest schema)
342
+ 4. **Metrics**: Track config generation time per resource
343
+ 5. **Live Updates**: Could trigger live updates when only specific configs change
344
+
345
+ ---
346
+
347
+ ## 🏆 Conclusion
348
+
349
+ The Tilt infrastructure has evolved from **bulk generation** to **manifest-driven resource creation**, achieving:
350
+
351
+ - ✅ Per-resource granularity
352
+ - ✅ Efficient updates (10 configs vs 300)
353
+ - ✅ Clear dependency chains
354
+ - ✅ Full visibility in Tilt UI
355
+ - ✅ Alignment with user's architectural vision
356
+
357
+ The system now follows the **"1 manifest → 1 resource → N generators"** pattern instead of **"N manifests → 1 loop → N×M configs"**.
@@ -0,0 +1,284 @@
1
+ # TDK Landscape Tilt SDK
2
+
3
+ ## 🏗️ Architecture Overview
4
+
5
+ This SDK provides a **professional, layered architecture** for managing 5000+ lines of Tilt/Starlark configuration code.
6
+
7
+ ```
8
+ .tilt/
9
+ ├── core/ # 🔧 Foundational Layer (Low-level)
10
+ │ ├── utils.star # Shared helpers, I/O, validation
11
+ │ ├── manifest.star # JSON manifest loading & expansion
12
+ │ ├── registry.star # Service definitions (Single Source of Truth)
13
+ │ └── dependency-sync.star # Workspace discovery & package.json sync
14
+ │
15
+ ├── providers/ # ⚡ Configuration Generators (Mid-level)
16
+ │ ├── vite.star # Vite configuration generation
17
+ │ ├── typescript/ # TSConfig generation (modular)
18
+ │ │ └── include.star # Entry point
19
+ │ ├── docker/ # Dockerfile / Compose generation (modularized)
20
+ │ └── npmrc.star # .npmrc / bunfig.toml generation
21
+ │
22
+ ├── lifecycle/ # 🚀 Service Lifecycle (High-level)
23
+ │ ├── libs.star # Library management & Verdaccio
24
+ │ └── databases.star # Database virtualization (BigTech pattern)
25
+ │
26
+ ├── config.star # 🎯 Global Config & Focus Mode
27
+ ├── legacy/ # 📦 Legacy modules (backward compatibility)
28
+ └── README.md # 📖 This file
29
+ ```
30
+
31
+ ## 🎯 Main Tiltfile Structure
32
+
33
+ ```starlark
34
+ # =============================================================================
35
+ # 🎯 TDK Landscape TILT ENTRYPOINT
36
+ # =============================================================================
37
+
38
+ # 1️⃣ LOAD CORE MODULES
39
+ load('./.tilt/core/utils.star', 'Utils')
40
+ load('./.tilt/core/manifest.star', 'Manifest')
41
+ load('./.tilt/core/dependency-sync.star', 'DepSync')
42
+
43
+ # 2️⃣ LOAD CONFIGURATION & SERVICE REGISTRY
44
+ load('./.tilt/config.star', 'Config')
45
+ load('./.tilt/core/registry.star', 'APP_RESOURCES', 'DEFAULTS', ...)
46
+
47
+ # 3️⃣ LOAD PROVIDERS (Generators)
48
+ load('./.tilt/providers/vite.star', 'Vite')
49
+ load('./.tilt/providers/typescript/include.star', 'TSConfig')
50
+ load('./.tilt/providers/docker/index.star', 'Docker')
51
+ load('./.tilt/providers/npmrc.star', 'PackageConfig')
52
+
53
+ # 4️⃣ LOAD LIFECYCLE MODULES
54
+ load('./.tilt/provisioner/libs.star', 'Libs')
55
+ load('./.tilt/provisioner/databases.star', 'Database')
56
+
57
+ # 5️⃣ INITIALIZE INFRASTRUCTURE
58
+ Utils.load_dotenv()
59
+ Utils.validate_infisical_environment()
60
+
61
+ local_resource('init-networks', cmd=Utils.fix_docker_networks(), labels=['infra'])
62
+ ```
63
+
64
+ ## 📋 Module Reference
65
+
66
+ ### Core Layer (`core/`)
67
+
68
+ #### `utils.star` - Foundational Utilities
69
+
70
+ ```starlark
71
+ load('./.tilt/core/utils.star', 'Utils')
72
+
73
+ Utils.get_internal_deps("services/product/user/user-management-backend")
74
+ Utils.resolve_lib_path("@tdk-landscape/eventing")
75
+ Utils.write_file_if_changed("path/to/file.txt", "content")
76
+ Utils.fix_docker_networks()
77
+ Utils.validate_infisical_environment()
78
+ Utils.detect_circular_deps(["path1", "path2"])
79
+ ```
80
+
81
+ #### `manifest.star` - Manifest Loading
82
+
83
+ ```starlark
84
+ load('./.tilt/core/manifest.star', 'Manifest')
85
+
86
+ # Load and expand manifest with Smart Defaults
87
+ manifest = Manifest.load_manifest("services/product/user/user-management-backend")
88
+
89
+ # Load related backend for frontend
90
+ backend = Manifest.load_related(frontend_manifest)
91
+
92
+ # Validation
93
+ issues = Manifest.validate(manifest)
94
+
95
+ # Accessors
96
+ port = Manifest.get_port(manifest)
97
+ db_url = Manifest.get_database_url(manifest)
98
+ ```
99
+
100
+ #### `dependency-sync.star` - Automatic Configuration Sync
101
+
102
+ ```starlark
103
+ load('./.tilt/core/dependency-sync.star', 'DepSync')
104
+
105
+ deps = DepSync.extract_internal_deps("services/product/user/user-management-backend")
106
+ paths = DepSync.generate_tsconfig_paths(deps)
107
+ aliases = DepSync.generate_vite_aliases(deps)
108
+ DepSync.sync_all_configs_for_service("services/product/user/user-management-backend")
109
+ ```
110
+
111
+ ---
112
+
113
+ ### Provider Layer (`providers/`)
114
+
115
+ #### `vite.star` - Vite Configuration Generation
116
+
117
+ ```starlark
118
+ load('./.tilt/providers/vite.star', 'Vite')
119
+
120
+ # Generate for specific type
121
+ Vite.frontend(manifest, backend_manifest, write_fn)
122
+ Vite.backend(manifest, write_fn)
123
+ Vite.library(manifest, write_fn)
124
+ Vite.sdk(manifest, write_fn)
125
+
126
+ # Universal dispatcher (recommended)
127
+ Vite.for_manifest(manifest, backend_manifest, write_fn)
128
+ ```
129
+
130
+ #### `typescript/include.star` - TSConfig Generation
131
+
132
+ ```starlark
133
+ load('./.tilt/providers/typescript/include.star', 'TSConfig')
134
+
135
+ TSConfig.backend(path, prisma_path, write_fn, internal_deps, is_docker)
136
+ TSConfig.frontend(path, write_fn, internal_deps, is_docker)
137
+ TSConfig.library_backend(path, write_fn, internal_deps)
138
+ TSConfig.library_frontend(path, write_fn, internal_deps)
139
+ TSConfig.prisma(path, resource_name, db_name, write_fn)
140
+ ```
141
+
142
+ #### `docker/` - Dockerfile & Compose Generation (modularized)
143
+
144
+ ```starlark
145
+ load('./.tilt/providers/docker/index.star', 'Docker')
146
+
147
+ Docker.generate_frontend_dockerfile(path, name, target_path, use_nginx)
148
+ Docker.generate_app_dockerfile(path, resource_name, start_command)
149
+ Docker.generate_migrator_dockerfile(path, resource_name)
150
+ Docker.generate_backend_compose_entry(path, resource_name, resource, manifest)
151
+ ```
152
+
153
+ #### `npmrc.star` - Registry Configuration
154
+
155
+ ```starlark
156
+ load('./.tilt/providers/npmrc.star', 'PackageConfig')
157
+
158
+ PackageConfig.generate_npmrc(path, registry_url, is_docker)
159
+ PackageConfig.generate_bunfig(path, registry_url, is_docker)
160
+ ```
161
+
162
+ ---
163
+
164
+ ### Lifecycle Layer (`lifecycle/`)
165
+
166
+ #### `libs.star` - Library Management
167
+
168
+ ```starlark
169
+ load('./.tilt/provisioner/libs.star', 'Libs')
170
+
171
+ lib_deps = Libs.discover_resource_libraries(ctx, resource_path)
172
+ Libs.define_library_resource(ctx, lib_name, lib_config, should_enable)
173
+ library_map = Libs.setup_libraries(ctx, should_enable, DDD_LIBS, PLATFORM_LIBS, PRODUCT_LIBS, generators)
174
+ ```
175
+
176
+ #### `databases.star` - Database Virtualization
177
+
178
+ ```starlark
179
+ load('./.tilt/provisioner/databases.star', 'Database')
180
+
181
+ Database.provision("user") # Creates TDK_user
182
+ url = Database.get_database_url("user")
183
+ Database.status_resource(enabled=True)
184
+ Database.memory_summary()
185
+ ```
186
+
187
+ ---
188
+
189
+ ### Config Layer (`config.star`)
190
+
191
+ ```starlark
192
+ load('./.tilt/config.star', 'Config')
193
+
194
+ # Focus Mode (tilt up -- --focus=user,treatment)
195
+ FOCUS_MODE, FOCUS_ALL, FOCUS_RESOURCES = Config.apply_focus(cfg)
196
+
197
+ # Build context
198
+ ctx = Config.build_context()
199
+
200
+ # Create should_enable wrapper
201
+ should_enable = Config.create_should_enable_wrapper(...)
202
+ ```
203
+
204
+ ---
205
+
206
+ ## 🧠 Why This Structure?
207
+
208
+ ### 1. **Encapsulation**
209
+ When a developer needs to fix a Vite config bug, they go directly to `.tilt/providers/vite.star` — not search through 5000 lines.
210
+
211
+ ### 2. **Prevents Frozen Hash Table**
212
+ Splitting into small files reduces the chance of mutating an object that's already "frozen" by another load.
213
+
214
+ ### 3. **Easy Testing**
215
+ You can load only `.tilt/core/utils.star` in a test script without loading heavy Docker logic.
216
+
217
+ ### 4. **Scalability**
218
+ Adding a new generator (e.g., for Kubernetes) = create new file in `providers/`.
219
+
220
+ ---
221
+
222
+ ## 📊 File Sizes
223
+
224
+ | Module | Lines | Purpose |
225
+ |--------|-------|---------|
226
+ | `core/utils.star` | ~400 | Shared utilities |
227
+ | `core/manifest.star` | ~350 | Manifest loading |
228
+ | `core/registry.star` | ~500 | Service definitions |
229
+ | `core/dependency-sync.star` | ~350 | Config sync engine |
230
+ | `providers/vite.star` | ~550 | Vite generation |
231
+ | `providers/typescript/` | ~300 | TSConfig generation (modular) |
232
+ | `providers/docker/` | ~500 | Docker generation (modularized) |
233
+ | `providers/npmrc.star` | ~100 | Registry configs |
234
+ | `lifecycle/libs.star` | ~400 | Library management |
235
+ | `lifecycle/databases.star` | ~200 | Database virtualization |
236
+ | `config.star` | ~250 | Global config |
237
+ | **Total** | **~3900** | **Organized vs 5000+ chaotic** |
238
+
239
+ ---
240
+
241
+ ## 🚀 Usage Patterns
242
+
243
+ ### Adding a New Service
244
+
245
+ 1. Add to `.tilt/core/registry.star`:
246
+ ```starlark
247
+ APP_RESOURCES.append({
248
+ 'name': 'my-service',
249
+ 'path': 'services/product/my-domain/my-service',
250
+ 'labels': ['app.my-domain'],
251
+ 'resources': [...],
252
+ })
253
+ ```
254
+
255
+ 2. Done! Tilt auto-generates everything.
256
+
257
+ ### Focus Mode Development
258
+
259
+ ```bash
260
+ tilt up -- --focus=user # Only user + dependencies
261
+ tilt up -- --focus=user,treatment # Multiple services
262
+ tilt up -- --focus=user --no-frontend # Skip frontends
263
+ tilt up -- --focus=user --include-monitoring
264
+ ```
265
+
266
+ ### Automatic Dependency Sync
267
+
268
+ ```bash
269
+ bun add @tdk-landscape/eventing # In any service
270
+ # → Tilt watches package.json
271
+ # → TSConfig/Vite auto-regenerate
272
+ # → Service rebuilds
273
+ ```
274
+
275
+ ---
276
+
277
+ ## 🔑 Key Design Principles
278
+
279
+ 1. **Single Source of Truth**: All service definitions in `registry.star`
280
+ 2. **Convention over Configuration**: Package names map to paths automatically
281
+ 3. **Struct-based APIs**: Clean `Vite.frontend()`, `Manifest.load_manifest()` interfaces
282
+ 4. **Pure Functions**: No global mutable state (Starlark-safe)
283
+ 5. **Layered Architecture**: Core → Providers → Lifecycle → Config
284
+ 6. **Backward Compatibility**: Legacy modules in `.tilt/legacy/`