@atmem/architect 0.0.0-stage → 0.2.0-alpha.4.1

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 (498) hide show
  1. package/CONSTITUTION.md +144 -0
  2. package/README.md +33 -2
  3. package/agent-skills/discovery/SKILL.md +48 -0
  4. package/agent-skills/discovery/topics.json +139 -0
  5. package/agent-skills/generation-capabilities.json +760 -0
  6. package/agent-skills/service-lifecycle.json +21 -0
  7. package/agent-skills/specialists/architecture/SKILL.md +15 -0
  8. package/agent-skills/specialists/aws/SKILL.md +17 -0
  9. package/agent-skills/specialists/azure/SKILL.md +7 -0
  10. package/agent-skills/specialists/composition/SKILL.md +17 -0
  11. package/agent-skills/specialists/devops/SKILL.md +10 -0
  12. package/agent-skills/specialists/finops/SKILL.md +7 -0
  13. package/agent-skills/specialists/gcp/SKILL.md +7 -0
  14. package/agent-skills/specialists/ibm/SKILL.md +7 -0
  15. package/agent-skills/specialists/manifest.json +13 -0
  16. package/agent-skills/specialists/pulumi/SKILL.md +7 -0
  17. package/agent-skills/specialists/security/SKILL.md +7 -0
  18. package/agent-skills/specialists/terraform/SKILL.md +14 -0
  19. package/agent-skills/upstream/aws/LICENSE +175 -0
  20. package/agent-skills/upstream/aws/SKILL.md +125 -0
  21. package/agent-skills/upstream/azure/LICENSE +21 -0
  22. package/agent-skills/upstream/azure/SKILL.md +387 -0
  23. package/agent-skills/upstream/gcp/LICENSE +202 -0
  24. package/agent-skills/upstream/gcp/SKILL.md +159 -0
  25. package/agent-skills/upstream/manifest.json +57 -0
  26. package/agent-skills/upstream/pulumi/LICENSE +201 -0
  27. package/agent-skills/upstream/pulumi/SKILL.md +501 -0
  28. package/agent-skills/upstream/terraform/LICENSE +373 -0
  29. package/agent-skills/upstream/terraform/SKILL.md +316 -0
  30. package/agent-skills/workflows/workflows.json +601 -0
  31. package/cli/architect.mjs +3 -0
  32. package/cli/runtime.mjs +115 -0
  33. package/dist/assets/html2canvas.esm-QH1iLAAe.js +22 -0
  34. package/dist/assets/index-B97MkVMs.css +1 -0
  35. package/dist/assets/index-qtCM2D7O.js +21271 -0
  36. package/dist/assets/index.es-C6C0sneB.js +18 -0
  37. package/dist/assets/purify.es-CAi2OJFm.js +3 -0
  38. package/dist/assets/visual-export-DjbjgQbA.js +173 -0
  39. package/dist/favicon.svg +2 -0
  40. package/dist/fonts/DM-Sans-OFL.txt +93 -0
  41. package/dist/fonts/Manrope-OFL.txt +93 -0
  42. package/dist/fonts/NotoSans-Regular.ttf +0 -0
  43. package/dist/fonts/OFL.txt +94 -0
  44. package/dist/fonts/dm-sans-latin-wght-normal.woff2 +0 -0
  45. package/dist/fonts/manrope-latin-wght-normal.woff2 +0 -0
  46. package/dist/index.html +4 -0
  47. package/dist/licenses/aws-architect-LICENSE.txt +17 -0
  48. package/dist/licenses/aws-mcp-LICENSE.txt +175 -0
  49. package/dist/licenses/aws-mcp-NOTICE.txt +1 -0
  50. package/dist/licenses/cloud-emulation-notices.txt +36619 -0
  51. package/dist/licenses/dependency-notices.txt +6379 -0
  52. package/dist/licenses/emulation-notices.txt +717 -0
  53. package/dist/licenses/github-copilot-sdk-LICENSE.txt +21 -0
  54. package/dist/licenses/memory-dependency-notices.txt +3319 -0
  55. package/dist/licenses/openarchflow-LICENSE.txt +21 -0
  56. package/dist/licenses/python-dependency-notices.txt +11951 -0
  57. package/docs/upstream-lock.json +26 -0
  58. package/knowledge/engineering-practices.json +536 -0
  59. package/package.json +30 -4
  60. package/packaging/uv-release-lock.json +54 -0
  61. package/public/licenses/aws-architect-LICENSE.txt +17 -0
  62. package/public/licenses/aws-mcp-LICENSE.txt +175 -0
  63. package/public/licenses/aws-mcp-NOTICE.txt +1 -0
  64. package/public/licenses/cloud-emulation-notices.txt +36619 -0
  65. package/public/licenses/dependency-notices.txt +6379 -0
  66. package/public/licenses/emulation-notices.txt +717 -0
  67. package/public/licenses/github-copilot-sdk-LICENSE.txt +21 -0
  68. package/public/licenses/memory-dependency-notices.txt +3319 -0
  69. package/public/licenses/openarchflow-LICENSE.txt +21 -0
  70. package/public/licenses/python-dependency-notices.txt +11951 -0
  71. package/scripts/terraform-render.mjs +8 -0
  72. package/server/__init__.py +0 -0
  73. package/server/abstraction.py +28 -0
  74. package/server/agent_runtime.py +153 -0
  75. package/server/app.py +257 -0
  76. package/server/architect.py +112 -0
  77. package/server/architecture_activity.py +67 -0
  78. package/server/attachments.py +101 -0
  79. package/server/cloud-emulation-requirements.txt +29 -0
  80. package/server/codex_app_server.py +219 -0
  81. package/server/codex_engineering_backend.py +266 -0
  82. package/server/codex_worker_policy.py +170 -0
  83. package/server/contracts.py +315 -0
  84. package/server/copilot_worker.py +16 -0
  85. package/server/dependency_mirror.py +54 -0
  86. package/server/design_patch.py +43 -0
  87. package/server/emulation-requirements.txt +8 -0
  88. package/server/emulation_adapters.py +20 -0
  89. package/server/emulation_routes.py +98 -0
  90. package/server/emulation_worker.py +351 -0
  91. package/server/engineering_artifacts.py +215 -0
  92. package/server/engineering_assets/application-runtime.json +4372 -0
  93. package/server/engineering_assets/architecture_work.schema.json +79 -0
  94. package/server/engineering_assets/materialize_runtime.py +62 -0
  95. package/server/engineering_assets/prepare_tools.py +96 -0
  96. package/server/engineering_assets/sql_validation.py +59 -0
  97. package/server/engineering_contexts.py +120 -0
  98. package/server/engineering_delivery.py +210 -0
  99. package/server/engineering_finalization.py +210 -0
  100. package/server/engineering_handoff.py +163 -0
  101. package/server/engineering_jobs.py +206 -0
  102. package/server/engineering_knowledge.py +75 -0
  103. package/server/engineering_reconciliation.py +159 -0
  104. package/server/engineering_routes.py +469 -0
  105. package/server/engineering_sessions.py +273 -0
  106. package/server/engineering_tools.py +166 -0
  107. package/server/generation_lint.py +18 -0
  108. package/server/local_providers.py +181 -0
  109. package/server/local_validation.py +236 -0
  110. package/server/memory-requirements.lock +181 -0
  111. package/server/memory-requirements.txt +6 -0
  112. package/server/memory_routes.py +82 -0
  113. package/server/memory_service.py +273 -0
  114. package/server/memory_worker.py +66 -0
  115. package/server/openai_voice.py +80 -0
  116. package/server/packaged_app.py +9 -0
  117. package/server/pricing.py +84 -0
  118. package/server/process_control_observation.py +31 -0
  119. package/server/prompts.py +123 -0
  120. package/server/public_faq_emulation_worker.py +44 -0
  121. package/server/requirements.lock +1618 -0
  122. package/server/requirements.txt +68 -0
  123. package/server/runtime_dependency_locks.py +27 -0
  124. package/server/runtime_evidence.py +93 -0
  125. package/server/settings.py +14 -0
  126. package/server/skills.py +103 -0
  127. package/server/storage_emulation_worker.py +160 -0
  128. package/server/structured_emulation_worker.py +48 -0
  129. package/server/terraform_routes.py +118 -0
  130. package/server/upstream/__init__.py +0 -0
  131. package/server/upstream/agent/__init__.py +1 -0
  132. package/server/upstream/agent/aws_architect.py +600 -0
  133. package/server/upstream/agent/config/__init__.py +1 -0
  134. package/server/upstream/agent/config/agent_config.py +82 -0
  135. package/server/upstream/agent/config/prompts.py +138 -0
  136. package/server/upstream/agent/rate_limiter.py +62 -0
  137. package/server/upstream/utils/__init__.py +1 -0
  138. package/server/upstream/utils/file_writer.py +43 -0
  139. package/server/validation_applicability.py +85 -0
  140. package/server/validation_jobs.py +252 -0
  141. package/server/validation_workers.py +48 -0
  142. package/server/voice_routes.py +91 -0
  143. package/server/voice_worker.py +26 -0
  144. package/specs/028-convergence-evaluation/evidence/20261110-ibm-invoice-native/registry-structured/qualification.json +72 -0
  145. package/specs/028-convergence-evaluation/evidence/20261110-invoice-runtime/durable-current/receipt.json +61 -0
  146. package/specs/029-general-purpose-engine/evidence/20261111-runtime-dependencies/sdk/receipt.json +22 -0
  147. package/src/ArchitectureActivity.jsx +54 -0
  148. package/src/ArchitectureWorkPanel.jsx +46 -0
  149. package/src/ArtifactChecks.jsx +49 -0
  150. package/src/BlockRequirements.jsx +13 -0
  151. package/src/BrainActivity.jsx +11 -0
  152. package/src/ChatMessage.jsx +19 -0
  153. package/src/ChatResizeHandle.jsx +6 -0
  154. package/src/CodePreview.jsx +8 -0
  155. package/src/ComponentReview.jsx +31 -0
  156. package/src/DeliveryViews.jsx +59 -0
  157. package/src/EmulationPanel.jsx +44 -0
  158. package/src/EngagementViews.jsx +385 -0
  159. package/src/EngineeringPanel.jsx +151 -0
  160. package/src/ImplementationDelivery.jsx +55 -0
  161. package/src/JourneyViews.jsx +400 -0
  162. package/src/MemoryPanel.jsx +46 -0
  163. package/src/OpenAIVoicePanel.jsx +65 -0
  164. package/src/OutputsView.jsx +65 -0
  165. package/src/TerraformView.jsx +57 -0
  166. package/src/WorkbenchDialogs.jsx +532 -0
  167. package/src/activity-presentation.mjs +28 -0
  168. package/src/ai-qualification-scenarios.mjs +31 -0
  169. package/src/approval-application-files.mjs +32 -0
  170. package/src/approval-applications.mjs +82 -0
  171. package/src/approval-spec-kit.mjs +30 -0
  172. package/src/architecture-activity.css +28 -0
  173. package/src/architecture-activity.mjs +63 -0
  174. package/src/architecture-work.mjs +176 -0
  175. package/src/artifact-work.mjs +103 -0
  176. package/src/async-documents.mjs +191 -0
  177. package/src/atflow.css +1140 -0
  178. package/src/atforma.css +748 -0
  179. package/src/atmem-tokens.css +79 -0
  180. package/src/aws-preflight.mjs +60 -0
  181. package/src/aws-public-faq.mjs +102 -0
  182. package/src/aws-validation-scenarios.mjs +10 -0
  183. package/src/aws-validation.mjs +48 -0
  184. package/src/azure-plan-mocks.mjs +25 -0
  185. package/src/azure-structured.mjs +133 -0
  186. package/src/bedrock-summary.mjs +152 -0
  187. package/src/bounded-rag.mjs +60 -0
  188. package/src/brand.css +9 -0
  189. package/src/canvas-view.mjs +28 -0
  190. package/src/capability-composition.mjs +44 -0
  191. package/src/chat-attachments.mjs +13 -0
  192. package/src/cloud-provider-locks.mjs +9 -0
  193. package/src/cloud-storage-scenarios.mjs +2 -0
  194. package/src/component-review.mjs +55 -0
  195. package/src/composition-spec-kit.mjs +30 -0
  196. package/src/consultation-context.mjs +15 -0
  197. package/src/consultation.mjs +52 -0
  198. package/src/container-contracts.mjs +5 -0
  199. package/src/container-inspection.mjs +75 -0
  200. package/src/container-runtime.mjs +30 -0
  201. package/src/container-security-inspection.mjs +49 -0
  202. package/src/container-terraform.mjs +109 -0
  203. package/src/conversation.mjs +17 -0
  204. package/src/core.mjs +863 -0
  205. package/src/cross-cloud-storage.mjs +100 -0
  206. package/src/delivery-capabilities.mjs +25 -0
  207. package/src/delivery.mjs +58 -0
  208. package/src/deployment-ownership.mjs +10 -0
  209. package/src/deployment-region.mjs +11 -0
  210. package/src/derive.mjs +31 -0
  211. package/src/design-build-flow.mjs +10 -0
  212. package/src/diagram-attention.mjs +24 -0
  213. package/src/discovery.mjs +359 -0
  214. package/src/document.mjs +170 -0
  215. package/src/emulation-feedback.mjs +61 -0
  216. package/src/emulation-guidance.mjs +37 -0
  217. package/src/engagement.mjs +274 -0
  218. package/src/engineering-client.mjs +73 -0
  219. package/src/engineering-defaults.mjs +17 -0
  220. package/src/engineering.css +31 -0
  221. package/src/enterprise-application.mjs +76 -0
  222. package/src/enterprise-aws-host-infrastructure.mjs +62 -0
  223. package/src/enterprise-aws-host-tests.mjs +15 -0
  224. package/src/enterprise-aws-infrastructure-tests.mjs +38 -0
  225. package/src/enterprise-aws-infrastructure.mjs +138 -0
  226. package/src/enterprise-google-infrastructure.mjs +84 -0
  227. package/src/enterprise-google-tests.mjs +25 -0
  228. package/src/estimate.mjs +188 -0
  229. package/src/existing-references.mjs +18 -0
  230. package/src/external-identities.mjs +17 -0
  231. package/src/faq-lambda-build.mjs +28 -0
  232. package/src/gcp-structured.mjs +104 -0
  233. package/src/generation-provider.mjs +7 -0
  234. package/src/generation-quality.mjs +69 -0
  235. package/src/handoff.mjs +141 -0
  236. package/src/ibm-registry.mjs +12 -0
  237. package/src/ibm-structured.mjs +103 -0
  238. package/src/identifiers.mjs +15 -0
  239. package/src/implementation-map.mjs +14 -0
  240. package/src/implementation-outcome.mjs +8 -0
  241. package/src/incomplete-terraform.mjs +9 -0
  242. package/src/integrations.ts +137 -0
  243. package/src/interface-contracts.mjs +30 -0
  244. package/src/invoice-application.mjs +66 -0
  245. package/src/invoice-aws-operations.mjs +136 -0
  246. package/src/invoice-aws.mjs +143 -0
  247. package/src/invoice-azure-operations.mjs +147 -0
  248. package/src/invoice-azure.mjs +134 -0
  249. package/src/invoice-builder.mjs +35 -0
  250. package/src/invoice-dependencies.mjs +43 -0
  251. package/src/invoice-gcp-operations.mjs +178 -0
  252. package/src/invoice-gcp.mjs +104 -0
  253. package/src/invoice-ibm-operations.mjs +278 -0
  254. package/src/invoice-ibm.mjs +142 -0
  255. package/src/invoice-operations.mjs +143 -0
  256. package/src/invoice-plan.mjs +45 -0
  257. package/src/invoice-region.mjs +6 -0
  258. package/src/invoice-spec-kit.mjs +61 -0
  259. package/src/invoice-state.mjs +7 -0
  260. package/src/invoice-terraform.mjs +29 -0
  261. package/src/invoice-tests.mjs +122 -0
  262. package/src/journey-workspace.css +72 -0
  263. package/src/journey.mjs +87 -0
  264. package/src/levels.mjs +145 -0
  265. package/src/local-agent.mjs +184 -0
  266. package/src/main.jsx +2458 -0
  267. package/src/model-policy-preflight.mjs +34 -0
  268. package/src/openai-voice.mjs +102 -0
  269. package/src/output-bundle.mjs +11 -0
  270. package/src/ownership-inspection.mjs +28 -0
  271. package/src/pack.mjs +201 -0
  272. package/src/pricing.mjs +31 -0
  273. package/src/production-state.mjs +8 -0
  274. package/src/project-copy.mjs +10 -0
  275. package/src/project-file.mjs +160 -0
  276. package/src/project-links.mjs +3 -0
  277. package/src/protected-state.mjs +43 -0
  278. package/src/public-faq-builder.mjs +19 -0
  279. package/src/public-faq-clouds.mjs +251 -0
  280. package/src/public-faq.mjs +122 -0
  281. package/src/pulumi.mjs +123 -0
  282. package/src/python-container.mjs +25 -0
  283. package/src/python-runtime.mjs +50 -0
  284. package/src/rag-handler.mjs +43 -0
  285. package/src/rag-web-assets.mjs +52 -0
  286. package/src/rag-web.mjs +68 -0
  287. package/src/records.mjs +177 -0
  288. package/src/resources.mjs +163 -0
  289. package/src/review.mjs +252 -0
  290. package/src/runtime/EnterpriseDocument.java +89 -0
  291. package/src/runtime/approved_http_destination.py +72 -0
  292. package/src/runtime/aws-lambda-qualification-lock.json +7 -0
  293. package/src/runtime/aws-python-lock.json +82 -0
  294. package/src/runtime/aws-web-python-lock.json +887 -0
  295. package/src/runtime/aws_json_model.py +42 -0
  296. package/src/runtime/azure-python-lock.json +863 -0
  297. package/src/runtime/azure-sources.json +8 -0
  298. package/src/runtime/azure-test-lock.json +23 -0
  299. package/src/runtime/azure_acceptance.py +192 -0
  300. package/src/runtime/azure_structured.py +153 -0
  301. package/src/runtime/bounded_rag.py +126 -0
  302. package/src/runtime/catalog_admin.py +70 -0
  303. package/src/runtime/cloud-sql-proxy-lock.json +8 -0
  304. package/src/runtime/cloud-sql-proxy-security-review.json +30 -0
  305. package/src/runtime/connector_cli.py +50 -0
  306. package/src/runtime/connector_sync.py +70 -0
  307. package/src/runtime/durable-python-lock.json +247 -0
  308. package/src/runtime/durable_workflow.py +325 -0
  309. package/src/runtime/enterprise-application-manifest.json +110 -0
  310. package/src/runtime/enterprise-application-sources.json +266 -0
  311. package/src/runtime/enterprise-auth-python-lock.json +592 -0
  312. package/src/runtime/enterprise-aws-host-bootstrap-source.json +1 -0
  313. package/src/runtime/enterprise-aws-host-probe-source.json +1 -0
  314. package/src/runtime/enterprise-aws-task-template.json +235 -0
  315. package/src/runtime/enterprise-document-lock.json +18 -0
  316. package/src/runtime/enterprise-document.Dockerfile +15 -0
  317. package/src/runtime/enterprise-runtime-aws-python-lock.json +1115 -0
  318. package/src/runtime/enterprise-runtime-azure-python-lock.json +1106 -0
  319. package/src/runtime/enterprise-runtime-gcp-python-lock.json +1060 -0
  320. package/src/runtime/enterprise-runtime-ibm-python-lock.json +1096 -0
  321. package/src/runtime/enterprise-runtime-python-lock.json +1058 -0
  322. package/src/runtime/enterprise-runtime.Dockerfile +15 -0
  323. package/src/runtime/enterprise-web-app.js +1 -0
  324. package/src/runtime/enterprise-web-entry.js +105 -0
  325. package/src/runtime/enterprise-web-lock.json +29 -0
  326. package/src/runtime/enterprise-web-notices.txt +229 -0
  327. package/src/runtime/enterprise-web.css +4 -0
  328. package/src/runtime/enterprise-web.html +8 -0
  329. package/src/runtime/enterprise_audit.py +91 -0
  330. package/src/runtime/enterprise_audit_schema.sql +25 -0
  331. package/src/runtime/enterprise_auth_schema.sql +67 -0
  332. package/src/runtime/enterprise_auth_store.py +241 -0
  333. package/src/runtime/enterprise_aws_host_bootstrap.py +120 -0
  334. package/src/runtime/enterprise_aws_host_probe.py +105 -0
  335. package/src/runtime/enterprise_aws_hosts.py +136 -0
  336. package/src/runtime/enterprise_aws_jobs.py +300 -0
  337. package/src/runtime/enterprise_aws_objects.py +93 -0
  338. package/src/runtime/enterprise_aws_transfer.py +83 -0
  339. package/src/runtime/enterprise_azure_batch_api.py +128 -0
  340. package/src/runtime/enterprise_azure_host.py +599 -0
  341. package/src/runtime/enterprise_azure_jobs.py +294 -0
  342. package/src/runtime/enterprise_azure_objects.py +234 -0
  343. package/src/runtime/enterprise_azure_pool.py +161 -0
  344. package/src/runtime/enterprise_azure_transfer.py +122 -0
  345. package/src/runtime/enterprise_configuration.py +136 -0
  346. package/src/runtime/enterprise_document.py +116 -0
  347. package/src/runtime/enterprise_document_cli.py +32 -0
  348. package/src/runtime/enterprise_document_contract.py +54 -0
  349. package/src/runtime/enterprise_document_job.py +109 -0
  350. package/src/runtime/enterprise_document_jobs.py +122 -0
  351. package/src/runtime/enterprise_document_jobs_schema.sql +23 -0
  352. package/src/runtime/enterprise_extraction_cache.py +186 -0
  353. package/src/runtime/enterprise_extraction_schema.sql +17 -0
  354. package/src/runtime/enterprise_google_jobs.py +275 -0
  355. package/src/runtime/enterprise_google_transfer.py +85 -0
  356. package/src/runtime/enterprise_http.py +212 -0
  357. package/src/runtime/enterprise_identity.py +52 -0
  358. package/src/runtime/enterprise_knowledge.py +152 -0
  359. package/src/runtime/enterprise_models.py +94 -0
  360. package/src/runtime/enterprise_native.py +181 -0
  361. package/src/runtime/enterprise_oauth.py +132 -0
  362. package/src/runtime/enterprise_operator.py +160 -0
  363. package/src/runtime/enterprise_parser_service.py +136 -0
  364. package/src/runtime/enterprise_parser_transport.py +68 -0
  365. package/src/runtime/enterprise_queries.py +255 -0
  366. package/src/runtime/enterprise_queries_schema.sql +27 -0
  367. package/src/runtime/enterprise_query_service.py +111 -0
  368. package/src/runtime/enterprise_secrets.py +110 -0
  369. package/src/runtime/enterprise_sessions.py +95 -0
  370. package/src/runtime/enterprise_sources.py +260 -0
  371. package/src/runtime/enterprise_web.py +39 -0
  372. package/src/runtime/enterprise_worker.py +68 -0
  373. package/src/runtime/export_contract_acceptance.py +18 -0
  374. package/src/runtime/faq-output-contract.json +40 -0
  375. package/src/runtime/faq-web-app.js +41 -0
  376. package/src/runtime/faq-web.css +1 -0
  377. package/src/runtime/faq-web.html +6 -0
  378. package/src/runtime/gcp-sources.json +9 -0
  379. package/src/runtime/gcp_acceptance.py +110 -0
  380. package/src/runtime/gcp_structured.py +150 -0
  381. package/src/runtime/http_acceptance.py +39 -0
  382. package/src/runtime/iap-web-app.js +36 -0
  383. package/src/runtime/iap-web-source.json +1 -0
  384. package/src/runtime/ibm-python-lock.json +856 -0
  385. package/src/runtime/ibm-sources.json +9 -0
  386. package/src/runtime/ibm_acceptance.py +133 -0
  387. package/src/runtime/ibm_structured.py +113 -0
  388. package/src/runtime/invoice-azapi-provider-lock.json +7 -0
  389. package/src/runtime/invoice-ibm-provider-lock.json +7 -0
  390. package/src/runtime/invoice-parser-lock.json +1199 -0
  391. package/src/runtime/invoice-parser-python-lock.json +56 -0
  392. package/src/runtime/invoice-parser.Dockerfile +190 -0
  393. package/src/runtime/invoice-sources.json +58 -0
  394. package/src/runtime/invoice-test-sources.json +24 -0
  395. package/src/runtime/invoice-web.css +2 -0
  396. package/src/runtime/invoice-web.html +12 -0
  397. package/src/runtime/invoice-web.js +112 -0
  398. package/src/runtime/invoice_configuration.py +17 -0
  399. package/src/runtime/invoice_document.py +95 -0
  400. package/src/runtime/invoice_extraction.py +96 -0
  401. package/src/runtime/invoice_http.py +129 -0
  402. package/src/runtime/invoice_identity.py +5 -0
  403. package/src/runtime/invoice_maintenance.py +40 -0
  404. package/src/runtime/invoice_native.py +77 -0
  405. package/src/runtime/invoice_object_store.py +153 -0
  406. package/src/runtime/invoice_operations.py +108 -0
  407. package/src/runtime/invoice_operator.py +79 -0
  408. package/src/runtime/invoice_operator_core.py +39 -0
  409. package/src/runtime/invoice_operator_job.py +147 -0
  410. package/src/runtime/invoice_parser_cli.py +17 -0
  411. package/src/runtime/invoice_parser_identity.py +39 -0
  412. package/src/runtime/invoice_parser_service.py +89 -0
  413. package/src/runtime/invoice_parser_transport.py +89 -0
  414. package/src/runtime/invoice_processing.py +24 -0
  415. package/src/runtime/invoice_retention.py +16 -0
  416. package/src/runtime/invoice_runtime_secrets.py +43 -0
  417. package/src/runtime/invoice_stage.py +80 -0
  418. package/src/runtime/invoice_web.py +39 -0
  419. package/src/runtime/invoice_worker.py +50 -0
  420. package/src/runtime/lambda_faq.py +5 -0
  421. package/src/runtime/parser-requirements.lock +4 -0
  422. package/src/runtime/policy_review.py +18 -0
  423. package/src/runtime/postgres-qualification-lock.json +21 -0
  424. package/src/runtime/public-faq-sources.json +22 -0
  425. package/src/runtime/public_catalog_admin.py +122 -0
  426. package/src/runtime/public_catalog_store.py +125 -0
  427. package/src/runtime/public_faq.py +144 -0
  428. package/src/runtime/public_faq_app.py +49 -0
  429. package/src/runtime/python-container-lock.json +18 -0
  430. package/src/runtime/rag-sources.json +10 -0
  431. package/src/runtime/rag_acceptance.py +60 -0
  432. package/src/runtime/rag_aws_adapter.py +95 -0
  433. package/src/runtime/rds-ca-source.json +9 -0
  434. package/src/runtime/rds-global-ca.pem +2888 -0
  435. package/src/runtime/state-contract-check-source.json +4 -0
  436. package/src/runtime/state_contract_check.py +338 -0
  437. package/src/runtime/structured-source.json +1 -0
  438. package/src/runtime/structured-web-app.js +71 -0
  439. package/src/runtime/structured-web-source.json +1 -0
  440. package/src/runtime/structured_http.py +105 -0
  441. package/src/runtime/structured_output.py +48 -0
  442. package/src/runtime/web-python-lock.json +802 -0
  443. package/src/runtime/web_user_admin.py +44 -0
  444. package/src/runtime/workflow_application.py +62 -0
  445. package/src/runtime/workflow_bindings.py +128 -0
  446. package/src/runtime/workflow_configuration.py +40 -0
  447. package/src/runtime/workflow_connection.py +105 -0
  448. package/src/runtime/workflow_contract.py +54 -0
  449. package/src/runtime/workflow_database.py +94 -0
  450. package/src/runtime/workflow_errors.py +6 -0
  451. package/src/runtime/workflow_http.py +178 -0
  452. package/src/runtime/workflow_identity.py +69 -0
  453. package/src/runtime/workflow_payload.py +118 -0
  454. package/src/runtime/workflow_process_stage.py +88 -0
  455. package/src/runtime/workflow_profile.py +91 -0
  456. package/src/runtime/workflow_review.py +106 -0
  457. package/src/runtime/workflow_role_bootstrap.py +104 -0
  458. package/src/runtime/workflow_schema.sql +72 -0
  459. package/src/runtime/workflow_worker.py +142 -0
  460. package/src/runtime-settings.mjs +15 -0
  461. package/src/s3-access.mjs +14 -0
  462. package/src/source-contracts.mjs +17 -0
  463. package/src/spec-kit.mjs +186 -0
  464. package/src/state-custody.mjs +32 -0
  465. package/src/state-inspection.mjs +45 -0
  466. package/src/state-spec-kit.mjs +13 -0
  467. package/src/storage-tests.mjs +25 -0
  468. package/src/structured-api.mjs +133 -0
  469. package/src/structured-contract.mjs +19 -0
  470. package/src/structured-operation-policy.mjs +2 -0
  471. package/src/structured-web.mjs +17 -0
  472. package/src/style.css +1 -0
  473. package/src/system-description.mjs +26 -0
  474. package/src/terraform-admission.mjs +66 -0
  475. package/src/terraform-composition.mjs +83 -0
  476. package/src/terraform-expressions.mjs +46 -0
  477. package/src/terraform-validation-coverage.mjs +11 -0
  478. package/src/terraform.mjs +128 -0
  479. package/src/text-statistics.mjs +51 -0
  480. package/src/upstream/openarchflow/format-payload.ts +26 -0
  481. package/src/upstream/openarchflow/import/mermaid.ts +205 -0
  482. package/src/upstream/openarchflow/import/sql-ddl.ts +109 -0
  483. package/src/upstream/openarchflow/layout.ts +54 -0
  484. package/src/upstream/openarchflow/providers/aws.ts +196 -0
  485. package/src/upstream/openarchflow/providers/azure.ts +126 -0
  486. package/src/upstream/openarchflow/providers/cloudnative.ts +71 -0
  487. package/src/upstream/openarchflow/providers/generic.ts +227 -0
  488. package/src/upstream/openarchflow/providers/integration.ts +22 -0
  489. package/src/upstream/openarchflow/providers/types.ts +2 -0
  490. package/src/upstream/openarchflow/templates.ts +937 -0
  491. package/src/upstream-catalog.mjs +10 -0
  492. package/src/useChatScroll.jsx +36 -0
  493. package/src/useEmulation.jsx +36 -0
  494. package/src/validation-receipt.mjs +10 -0
  495. package/src/visual-export.mjs +92 -0
  496. package/src/voice-conversation.mjs +117 -0
  497. package/src/work-intake.mjs +24 -0
  498. package/src/workflow-runtime-inventory.mjs +3 -0
@@ -0,0 +1,501 @@
1
+ ---
2
+ name: pulumi-best-practices
3
+ version: 1.0.0
4
+ description: Load when the user is writing, reviewing, or debugging Pulumi TypeScript/Python programs; asks about Output<T> or apply() usage; wants to create ComponentResource classes; needs to refactor resources without destroying them (aliases); is setting up secrets or config; or is configuring a pulumi preview/up CI workflow. Also load for questions about resource dependency order, parent/child resource relationships, or pulumi.interpolate.
5
+ ---
6
+
7
+ # Pulumi Best Practices
8
+
9
+ ## When to Use This Skill
10
+
11
+ Invoke this skill when:
12
+
13
+ - Writing new Pulumi programs or components
14
+ - Reviewing Pulumi code for correctness
15
+ - Refactoring existing Pulumi infrastructure
16
+ - Debugging resource dependency issues
17
+ - Setting up configuration and secrets
18
+
19
+ ## Practices
20
+
21
+ ### 1. Never Create Resources Inside `apply()`
22
+
23
+ **Why**: Resources created inside `apply()` don't appear in `pulumi preview`, making changes unpredictable. Pulumi cannot properly track dependencies, leading to race conditions and deployment failures.
24
+
25
+ **Detection signals**:
26
+
27
+ - `new aws.` or other resource constructors inside `.apply()` callbacks
28
+ - Resource creation inside `pulumi.all([...]).apply()`
29
+ - Dynamic resource counts determined at runtime inside apply
30
+
31
+ **Wrong**:
32
+
33
+ ```typescript
34
+ const bucket = new aws.s3.Bucket("bucket");
35
+
36
+ bucket.id.apply(bucketId => {
37
+ // WRONG: This resource won't appear in preview
38
+ new aws.s3.BucketObject("object", {
39
+ bucket: bucketId,
40
+ content: "hello",
41
+ });
42
+ });
43
+ ```
44
+
45
+ **Right**:
46
+
47
+ ```typescript
48
+ const bucket = new aws.s3.Bucket("bucket");
49
+
50
+ // Pass the output directly - Pulumi handles the dependency
51
+ const object = new aws.s3.BucketObject("object", {
52
+ bucket: bucket.id, // Output<string> works here
53
+ content: "hello",
54
+ });
55
+ ```
56
+
57
+ **When apply is appropriate**:
58
+
59
+ - Transforming output values for use in tags, names, or computed strings
60
+ - Logging or debugging (not resource creation)
61
+ - Conditional logic that affects resource properties, not resource existence
62
+
63
+ **Reference**: https://www.pulumi.com/docs/concepts/inputs-outputs/
64
+
65
+ ---
66
+
67
+ ### 2. Pass Outputs Directly as Inputs
68
+
69
+ **Why**: Pulumi builds a directed acyclic graph (DAG) based on input/output relationships. Passing outputs directly ensures correct creation order. Unwrapping values manually breaks the dependency chain, causing resources to deploy in wrong order or reference values that don't exist yet.
70
+
71
+ **Detection signals**:
72
+
73
+ - Variables extracted from `.apply()` used later as resource inputs
74
+ - `await` on output values outside of apply
75
+ - String concatenation with outputs instead of `pulumi.interpolate`
76
+
77
+ **Wrong**:
78
+
79
+ ```typescript
80
+ const vpc = new aws.ec2.Vpc("vpc", { cidrBlock: "10.0.0.0/16" });
81
+
82
+ // WRONG: Extracting the value breaks the dependency chain
83
+ let vpcId: string;
84
+ vpc.id.apply(id => { vpcId = id; });
85
+
86
+ const subnet = new aws.ec2.Subnet("subnet", {
87
+ vpcId: vpcId, // May be undefined, no tracked dependency
88
+ cidrBlock: "10.0.1.0/24",
89
+ });
90
+ ```
91
+
92
+ **Right**:
93
+
94
+ ```typescript
95
+ const vpc = new aws.ec2.Vpc("vpc", { cidrBlock: "10.0.0.0/16" });
96
+
97
+ const subnet = new aws.ec2.Subnet("subnet", {
98
+ vpcId: vpc.id, // Pass the Output directly
99
+ cidrBlock: "10.0.1.0/24",
100
+ });
101
+ ```
102
+
103
+ **For string interpolation**:
104
+
105
+ ```typescript
106
+ // WRONG
107
+ const name = bucket.id.apply(id => `prefix-${id}-suffix`);
108
+
109
+ // RIGHT - use pulumi.interpolate for template literals
110
+ const name = pulumi.interpolate`prefix-${bucket.id}-suffix`;
111
+
112
+ // RIGHT - use pulumi.concat for simple concatenation
113
+ const name = pulumi.concat("prefix-", bucket.id, "-suffix");
114
+ ```
115
+
116
+ **Reference**: https://www.pulumi.com/docs/concepts/inputs-outputs/
117
+
118
+ ---
119
+
120
+ ### 3. Use Components for Related Resources
121
+
122
+ **Why**: ComponentResource classes group related resources into reusable, logical units. Without components, your resource graph is flat, making it hard to understand which resources belong together, reuse patterns across stacks, or reason about your infrastructure at a higher level.
123
+
124
+ **Detection signals**:
125
+
126
+ - Multiple related resources created at top level without grouping
127
+ - Repeated resource patterns across stacks that should be abstracted
128
+ - Hard to understand resource relationships from the Pulumi console
129
+
130
+ **Wrong**:
131
+
132
+ ```typescript
133
+ // Flat structure - no logical grouping, hard to reuse
134
+ const bucket = new aws.s3.Bucket("app-bucket");
135
+ const bucketPolicy = new aws.s3.BucketPolicy("app-bucket-policy", {
136
+ bucket: bucket.id,
137
+ policy: policyDoc,
138
+ });
139
+ const originAccessIdentity = new aws.cloudfront.OriginAccessIdentity("app-oai");
140
+ const distribution = new aws.cloudfront.Distribution("app-cdn", { /* ... */ });
141
+ ```
142
+
143
+ **Right**:
144
+
145
+ ```typescript
146
+ interface StaticSiteArgs {
147
+ domain: string;
148
+ content: pulumi.asset.AssetArchive;
149
+ }
150
+
151
+ class StaticSite extends pulumi.ComponentResource {
152
+ public readonly url: pulumi.Output<string>;
153
+
154
+ constructor(name: string, args: StaticSiteArgs, opts?: pulumi.ComponentResourceOptions) {
155
+ super("myorg:components:StaticSite", name, args, opts);
156
+
157
+ // Resources created here - see practice 4 for parent setup
158
+ const bucket = new aws.s3.Bucket(`${name}-bucket`, {}, { parent: this });
159
+ // ...
160
+
161
+ this.url = distribution.domainName;
162
+ this.registerOutputs({ url: this.url });
163
+ }
164
+ }
165
+
166
+ // Reusable across stacks
167
+ const site = new StaticSite("marketing", {
168
+ domain: "marketing.example.com",
169
+ content: new pulumi.asset.FileArchive("./dist"),
170
+ });
171
+ ```
172
+
173
+ **Component best practices**:
174
+
175
+ - Use a consistent type URN pattern: `organization:module:ComponentName`
176
+ - Call `registerOutputs()` at the end of the constructor
177
+ - Expose outputs as class properties for consumers
178
+ - Accept `ComponentResourceOptions` to allow callers to set providers, aliases, etc.
179
+
180
+ For in-depth component authoring guidance (args design, multi-language support, testing, distribution), use skill `pulumi-component`.
181
+
182
+ **Reference**: https://www.pulumi.com/docs/concepts/resources/components/
183
+
184
+ ---
185
+
186
+ ### 4. Always Set `parent: this` in Components
187
+
188
+ **Why**: When you create resources inside a ComponentResource without setting `parent: this`, those resources appear at the root level of your stack's state. This breaks the logical hierarchy, makes the Pulumi console hard to navigate, and can cause issues with aliases and refactoring. The parent relationship is what makes the component actually group its children.
189
+
190
+ **Detection signals**:
191
+
192
+ - ComponentResource classes that don't pass `{ parent: this }` to child resources
193
+ - Resources inside a component appearing at root level in the console
194
+ - Unexpected behavior when adding aliases to components
195
+
196
+ **Wrong**:
197
+
198
+ ```typescript
199
+ class MyComponent extends pulumi.ComponentResource {
200
+ constructor(name: string, opts?: pulumi.ComponentResourceOptions) {
201
+ super("myorg:components:MyComponent", name, {}, opts);
202
+
203
+ // WRONG: No parent set - this bucket appears at root level
204
+ const bucket = new aws.s3.Bucket(`${name}-bucket`);
205
+ }
206
+ }
207
+ ```
208
+
209
+ **Right**:
210
+
211
+ ```typescript
212
+ class MyComponent extends pulumi.ComponentResource {
213
+ constructor(name: string, opts?: pulumi.ComponentResourceOptions) {
214
+ super("myorg:components:MyComponent", name, {}, opts);
215
+
216
+ // RIGHT: Parent establishes hierarchy
217
+ const bucket = new aws.s3.Bucket(`${name}-bucket`, {}, {
218
+ parent: this
219
+ });
220
+
221
+ const policy = new aws.s3.BucketPolicy(`${name}-policy`, {
222
+ bucket: bucket.id,
223
+ policy: policyDoc,
224
+ }, {
225
+ parent: this
226
+ });
227
+ }
228
+ }
229
+ ```
230
+
231
+ **What parent: this provides**:
232
+
233
+ - Resources appear nested under the component in Pulumi console
234
+ - Deleting the component deletes all children
235
+ - Aliases on the component automatically apply to children
236
+ - Clear ownership in state files
237
+
238
+ **Reference**: https://www.pulumi.com/docs/concepts/resources/components/
239
+
240
+ ---
241
+
242
+ ### 5. Encrypt Secrets from Day One
243
+
244
+ **Why**: Secrets marked with `--secret` are encrypted in state files, masked in CLI output, and tracked through transformations. Starting with plaintext config and converting later requires credential rotation, reference updates, and audit of leaked values in logs and state history.
245
+
246
+ **Detection signals**:
247
+
248
+ - Passwords, API keys, tokens stored as plain config
249
+ - Connection strings with embedded credentials
250
+ - Private keys or certificates in plaintext
251
+
252
+ **Wrong**:
253
+
254
+ ```bash
255
+ # Plaintext - will be visible in state and logs
256
+ pulumi config set databasePassword hunter2
257
+ pulumi config set apiKey sk-1234567890
258
+ ```
259
+
260
+ **Right**:
261
+
262
+ ```bash
263
+ # Encrypted from the start
264
+ pulumi config set --secret databasePassword hunter2
265
+ pulumi config set --secret apiKey sk-1234567890
266
+ ```
267
+
268
+ **In code**:
269
+
270
+ ```typescript
271
+ const config = new pulumi.Config();
272
+
273
+ // This retrieves a secret - the value stays encrypted
274
+ const dbPassword = config.requireSecret("databasePassword");
275
+
276
+ // Creating outputs from secrets preserves secrecy
277
+ const connectionString = pulumi.interpolate`postgres://user:${dbPassword}@host/db`;
278
+ // connectionString is also a secret Output
279
+
280
+ // Explicitly mark values as secret
281
+ const computed = pulumi.secret(someValue);
282
+ ```
283
+
284
+ **Use Pulumi ESC for centralized secrets**:
285
+
286
+ ```yaml
287
+ # Pulumi.yaml
288
+ environment:
289
+ - production-secrets # Pull from ESC environment
290
+ ```
291
+
292
+ ```bash
293
+ # ESC manages secrets centrally across stacks
294
+ esc env set production-secrets db.password --secret "hunter2"
295
+ ```
296
+
297
+ **What qualifies as a secret**:
298
+
299
+ - Passwords and passphrases
300
+ - API keys and tokens
301
+ - Private keys and certificates
302
+ - Connection strings with credentials
303
+ - OAuth client secrets
304
+ - Encryption keys
305
+
306
+ **References**:
307
+
308
+ - https://www.pulumi.com/docs/concepts/secrets/
309
+ - https://www.pulumi.com/docs/esc/
310
+
311
+ ---
312
+
313
+ ### 6. Use Aliases When Refactoring
314
+
315
+ **Why**: Renaming resources, moving them into components, or changing parents causes Pulumi to see them as new resources. Without aliases, refactoring destroys and recreates resources, potentially causing downtime or data loss. Aliases preserve resource identity through refactors.
316
+
317
+ **Detection signals**:
318
+
319
+ - Resource rename without alias
320
+ - Moving resource into or out of a ComponentResource
321
+ - Changing the parent of a resource
322
+ - Preview shows delete+create when update was intended
323
+
324
+ **Wrong**:
325
+
326
+ ```typescript
327
+ // Before: resource named "my-bucket"
328
+ const bucket = new aws.s3.Bucket("my-bucket");
329
+
330
+ // After: renamed without alias - DESTROYS THE BUCKET
331
+ const bucket = new aws.s3.Bucket("application-bucket");
332
+ ```
333
+
334
+ **Right**:
335
+
336
+ ```typescript
337
+ // After: renamed with alias - preserves the existing bucket
338
+ const bucket = new aws.s3.Bucket("application-bucket", {}, {
339
+ aliases: [{ name: "my-bucket" }],
340
+ });
341
+ ```
342
+
343
+ **Moving into a component**:
344
+
345
+ ```typescript
346
+ // Before: top-level resource
347
+ const bucket = new aws.s3.Bucket("my-bucket");
348
+
349
+ // After: inside a component - needs alias with old parent
350
+ class MyComponent extends pulumi.ComponentResource {
351
+ constructor(name: string, opts?: pulumi.ComponentResourceOptions) {
352
+ super("myorg:components:MyComponent", name, {}, opts);
353
+
354
+ const bucket = new aws.s3.Bucket("bucket", {}, {
355
+ parent: this,
356
+ aliases: [{
357
+ name: "my-bucket",
358
+ parent: pulumi.rootStackResource, // Was at root
359
+ }],
360
+ });
361
+ }
362
+ }
363
+ ```
364
+
365
+ **Alias types**:
366
+
367
+ ```typescript
368
+ // Simple name change
369
+ aliases: [{ name: "old-name" }]
370
+
371
+ // Parent change
372
+ aliases: [{ name: "resource-name", parent: oldParent }]
373
+
374
+ // Full URN (when you know the exact previous URN)
375
+ aliases: ["urn:pulumi:stack::project::aws:s3/bucket:Bucket::old-name"]
376
+ ```
377
+
378
+ **Lifecycle**:
379
+
380
+ 1. Add alias during refactor
381
+ 2. Run `pulumi up` on all stacks
382
+ 3. Remove alias after all stacks updated (optional, but keeps code clean)
383
+
384
+ **Reference**: https://www.pulumi.com/docs/iac/concepts/resources/options/aliases/
385
+
386
+ ---
387
+
388
+ ### 7. Preview Before Every Deployment
389
+
390
+ **Why**: `pulumi preview` shows exactly what will be created, updated, or destroyed. Surprises in production come from skipping preview. A resource showing "replace" when you expected "update" means imminent destruction and recreation.
391
+
392
+ **Detection signals**:
393
+
394
+ - Running `pulumi up --yes` interactively without reviewing changes
395
+ - No preview step anywhere in the CI/CD workflow for a given change
396
+ - Preview output not reviewed before merge or deployment approval
397
+
398
+ **Wrong**:
399
+
400
+ ```bash
401
+ # Deploying blind
402
+ pulumi up --yes
403
+ ```
404
+
405
+ **Right**:
406
+
407
+ ```bash
408
+ # Always preview first
409
+ pulumi preview
410
+
411
+ # Review the output, then deploy
412
+ pulumi up
413
+ ```
414
+
415
+ **What to look for in preview**:
416
+
417
+ - `+ create` - New resource will be created
418
+ - `~ update` - Existing resource will be modified in place
419
+ - `- delete` - Resource will be destroyed
420
+ - `+-replace` - Resource will be destroyed and recreated (potential downtime)
421
+ - `~+-replace` - Resource will be updated, then replaced
422
+
423
+ **Warning signs**:
424
+
425
+ - Unexpected `replace` operations (check for immutable property changes)
426
+ - Resources being deleted that shouldn't be
427
+ - More changes than expected from your code diff
428
+
429
+ **CI/CD integration**:
430
+
431
+ ```yaml
432
+ # GitHub Actions example
433
+ jobs:
434
+ preview:
435
+ runs-on: ubuntu-latest
436
+ steps:
437
+ - uses: actions/checkout@v4
438
+ - name: Pulumi Preview
439
+ uses: pulumi/actions@v5
440
+ with:
441
+ command: preview
442
+ stack-name: production
443
+ env:
444
+ PULUMI_ACCESS_TOKEN: ${{ secrets.PULUMI_ACCESS_TOKEN }}
445
+
446
+ deploy:
447
+ needs: preview
448
+ runs-on: ubuntu-latest
449
+ if: github.ref == 'refs/heads/main'
450
+ steps:
451
+ - name: Pulumi Up
452
+ uses: pulumi/actions@v5
453
+ with:
454
+ command: up
455
+ stack-name: production
456
+ ```
457
+
458
+ **PR workflow**:
459
+
460
+ - Run preview on every PR
461
+ - Post preview output as PR comment
462
+ - Require preview review before merge
463
+ - Deploy only on merge to main
464
+
465
+ **References**:
466
+
467
+ - https://www.pulumi.com/docs/cli/commands/pulumi_preview/
468
+ - https://www.pulumi.com/docs/iac/packages-and-automation/continuous-delivery/github-actions/
469
+
470
+ ---
471
+
472
+ ## Quick Reference
473
+
474
+ | Practice | Key Signal | Fix |
475
+ |----------|-----------|-----|
476
+ | No resources in apply | `new Resource()` inside `.apply()` | Move resource outside, pass Output directly |
477
+ | Pass outputs directly | Extracted values used as inputs | Use Output objects, `pulumi.interpolate` |
478
+ | Use components | Flat structure, repeated patterns | Create ComponentResource classes |
479
+ | Set parent: this | Component children at root level | Pass `{ parent: this }` to all child resources |
480
+ | Secrets from day one | Plaintext passwords/keys in config | Use `--secret` flag, ESC |
481
+ | Aliases when refactoring | Delete+create in preview | Add alias with old name/parent |
482
+ | Preview before deploy | `pulumi up --yes` | Always run `pulumi preview` first |
483
+
484
+ ## Validation Checklist
485
+
486
+ When reviewing Pulumi code, verify:
487
+
488
+ - [ ] No resource constructors inside `apply()` callbacks
489
+ - [ ] Outputs passed directly to dependent resources
490
+ - [ ] Related resources grouped in ComponentResource classes
491
+ - [ ] Child resources have `{ parent: this }`
492
+ - [ ] Sensitive values use `config.requireSecret()` or `--secret`
493
+ - [ ] Refactored resources have aliases preserving identity
494
+ - [ ] Deployment process includes preview step
495
+
496
+ ## Related Skills
497
+
498
+ - **pulumi-overview**: Entry-point skill that orients an agent across the three Pulumi surfaces (`pulumi do` CLI, IaC projects, and Pulumi Cloud) and routes to specialized skills. Load it first when the task begins with general infrastructure phrasing or spans multiple Pulumi surfaces. Use skill `pulumi-overview`.
499
+ - **pulumi-component**: Deep guide to authoring ComponentResource classes, designing args interfaces, multi-language support, testing, and distribution. Use skill `pulumi-component`.
500
+ - **pulumi-automation-api**: Programmatic orchestration of multiple stacks. Use skill `pulumi-automation-api`.
501
+ - **pulumi-esc**: Centralized secrets and configuration management. Use skill `pulumi-esc`.