@tdk-landscape/tdk-cli-core 1.3.53 → 1.3.55
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -0
- package/README.md +1 -1
- package/cli/dist/commands/doctor.js +21 -3
- package/cli/dist/commands/upgrade.js +7 -7
- package/cli/dist/generator/extension-fetch.js +16 -9
- package/cli/dist/utils/spinner.js +39 -0
- package/cli/package.json +1 -2
- package/package.json +16 -2
- package/.claude/skills/layer-autoresearch/SKILL.md +0 -48
- package/.claude/skills/tdk-troubleshoot/SKILL.md +0 -222
- package/.github/ISSUE_TEMPLATE/bug_report.yml +0 -40
- package/.github/ISSUE_TEMPLATE/config.yml +0 -11
- package/.github/ISSUE_TEMPLATE/feature_request.yml +0 -18
- package/.github/ISSUE_TEMPLATE/premium_license.yml +0 -43
- package/.github/dependabot.yml +0 -33
- package/.github/pull_request_template.md +0 -5
- package/.github/workflows/ci.yml +0 -200
- package/.github/workflows/release-binaries.yml +0 -139
- package/.github/zizmor.yml +0 -9
- package/.pre-commit-config.yaml +0 -57
- package/CODE_OF_CONDUCT.md +0 -9
- package/CONTRIBUTING.md +0 -42
- package/Makefile +0 -92
- package/SECURITY.md +0 -17
- package/benchmarks/results/container-scale-2026-09-25T20-54-49-736Z.json +0 -45
- package/benchmarks/results/container-scale-2026-09-25T21-01-20-540Z.json +0 -150
- package/benchmarks/results/container-scale-2026-09-25T21-15-01-441Z.json +0 -73
- package/benchmarks/results/container-scale-2026-09-25T22-09-01-630Z.json +0 -77
- package/benchmarks/results/container-scale-2026-09-25T22-18-28-371Z.json +0 -202
- package/cli/AGENTS.md +0 -390
- package/cli/DESIGN.md +0 -735
- package/cli/README.md +0 -292
- package/cli/biome.json +0 -40
- package/cli/dependency-graph.svg +0 -1135
- package/cli/dist/cli.d.ts +0 -3
- package/cli/dist/cli.d.ts.map +0 -1
- package/cli/dist/cli.js.map +0 -1
- package/cli/dist/commands/completion.d.ts +0 -3
- package/cli/dist/commands/completion.d.ts.map +0 -1
- package/cli/dist/commands/completion.js.map +0 -1
- package/cli/dist/commands/config.d.ts +0 -3
- package/cli/dist/commands/config.d.ts.map +0 -1
- package/cli/dist/commands/config.js.map +0 -1
- package/cli/dist/commands/doctor.d.ts +0 -19
- package/cli/dist/commands/doctor.d.ts.map +0 -1
- package/cli/dist/commands/doctor.js.map +0 -1
- package/cli/dist/commands/down.d.ts +0 -3
- package/cli/dist/commands/down.d.ts.map +0 -1
- package/cli/dist/commands/down.js.map +0 -1
- package/cli/dist/commands/help.d.ts +0 -2
- package/cli/dist/commands/help.d.ts.map +0 -1
- package/cli/dist/commands/help.js.map +0 -1
- package/cli/dist/commands/networks.d.ts +0 -3
- package/cli/dist/commands/networks.d.ts.map +0 -1
- package/cli/dist/commands/networks.js.map +0 -1
- package/cli/dist/commands/project.d.ts +0 -9
- package/cli/dist/commands/project.d.ts.map +0 -1
- package/cli/dist/commands/project.js.map +0 -1
- package/cli/dist/commands/projects.d.ts +0 -3
- package/cli/dist/commands/projects.d.ts.map +0 -1
- package/cli/dist/commands/projects.js.map +0 -1
- package/cli/dist/commands/resource.d.ts +0 -69
- package/cli/dist/commands/resource.d.ts.map +0 -1
- package/cli/dist/commands/resource.js.map +0 -1
- package/cli/dist/commands/resources.d.ts +0 -3
- package/cli/dist/commands/resources.d.ts.map +0 -1
- package/cli/dist/commands/resources.js.map +0 -1
- package/cli/dist/commands/stack.d.ts +0 -3
- package/cli/dist/commands/stack.d.ts.map +0 -1
- package/cli/dist/commands/stack.js.map +0 -1
- package/cli/dist/commands/stacks.d.ts +0 -3
- package/cli/dist/commands/stacks.d.ts.map +0 -1
- package/cli/dist/commands/stacks.js.map +0 -1
- package/cli/dist/commands/status.d.ts +0 -3
- package/cli/dist/commands/status.d.ts.map +0 -1
- package/cli/dist/commands/status.js.map +0 -1
- package/cli/dist/commands/ui.d.ts +0 -3
- package/cli/dist/commands/ui.d.ts.map +0 -1
- package/cli/dist/commands/ui.js.map +0 -1
- package/cli/dist/commands/up.d.ts +0 -3
- package/cli/dist/commands/up.d.ts.map +0 -1
- package/cli/dist/commands/up.js.map +0 -1
- package/cli/dist/commands/upgrade.d.ts +0 -14
- package/cli/dist/commands/upgrade.d.ts.map +0 -1
- package/cli/dist/commands/upgrade.js.map +0 -1
- package/cli/dist/commands/version.d.ts +0 -3
- package/cli/dist/commands/version.d.ts.map +0 -1
- package/cli/dist/commands/version.js.map +0 -1
- package/cli/dist/components/Accessible.d.ts +0 -8
- package/cli/dist/components/Accessible.d.ts.map +0 -1
- package/cli/dist/components/Accessible.js.map +0 -1
- package/cli/dist/components/BaseTooltip.d.ts +0 -4
- package/cli/dist/components/BaseTooltip.d.ts.map +0 -1
- package/cli/dist/components/BaseTooltip.js.map +0 -1
- package/cli/dist/components/DetailPanel.d.ts +0 -4
- package/cli/dist/components/DetailPanel.d.ts.map +0 -1
- package/cli/dist/components/DetailPanel.js.map +0 -1
- package/cli/dist/components/FileTree.d.ts +0 -4
- package/cli/dist/components/FileTree.d.ts.map +0 -1
- package/cli/dist/components/FileTree.js.map +0 -1
- package/cli/dist/components/ResourceSelectInput.d.ts +0 -4
- package/cli/dist/components/ResourceSelectInput.d.ts.map +0 -1
- package/cli/dist/components/ResourceSelectInput.js.map +0 -1
- package/cli/dist/components/ResourceTable.d.ts +0 -4
- package/cli/dist/components/ResourceTable.d.ts.map +0 -1
- package/cli/dist/components/ResourceTable.js.map +0 -1
- package/cli/dist/components/TabBar.d.ts +0 -4
- package/cli/dist/components/TabBar.d.ts.map +0 -1
- package/cli/dist/components/TabBar.js.map +0 -1
- package/cli/dist/components/Tooltip.d.ts +0 -12
- package/cli/dist/components/Tooltip.d.ts.map +0 -1
- package/cli/dist/components/Tooltip.js.map +0 -1
- package/cli/dist/components/index.d.ts +0 -8
- package/cli/dist/components/index.d.ts.map +0 -1
- package/cli/dist/components/index.js.map +0 -1
- package/cli/dist/config/platform-standards.d.ts +0 -159
- package/cli/dist/config/platform-standards.d.ts.map +0 -1
- package/cli/dist/config/platform-standards.js.map +0 -1
- package/cli/dist/generator/extension-fetch.d.ts +0 -25
- package/cli/dist/generator/extension-fetch.d.ts.map +0 -1
- package/cli/dist/generator/extension-fetch.js.map +0 -1
- package/cli/dist/generator/template-engine.d.ts +0 -62
- package/cli/dist/generator/template-engine.d.ts.map +0 -1
- package/cli/dist/generator/template-engine.js.map +0 -1
- package/cli/dist/index.d.ts +0 -11
- package/cli/dist/index.d.ts.map +0 -1
- package/cli/dist/index.js.map +0 -1
- package/cli/dist/types/index.d.ts +0 -257
- package/cli/dist/types/index.d.ts.map +0 -1
- package/cli/dist/types/index.js.map +0 -1
- package/cli/dist/utils/cache.d.ts +0 -19
- package/cli/dist/utils/cache.d.ts.map +0 -1
- package/cli/dist/utils/cache.js.map +0 -1
- package/cli/dist/utils/command-helpers.d.ts +0 -17
- package/cli/dist/utils/command-helpers.d.ts.map +0 -1
- package/cli/dist/utils/command-helpers.js.map +0 -1
- package/cli/dist/utils/constants.d.ts +0 -53
- package/cli/dist/utils/constants.d.ts.map +0 -1
- package/cli/dist/utils/constants.js.map +0 -1
- package/cli/dist/utils/discovery-context.d.ts +0 -4
- package/cli/dist/utils/discovery-context.d.ts.map +0 -1
- package/cli/dist/utils/discovery-context.js.map +0 -1
- package/cli/dist/utils/docker.d.ts +0 -4
- package/cli/dist/utils/docker.d.ts.map +0 -1
- package/cli/dist/utils/docker.js.map +0 -1
- package/cli/dist/utils/doctor-runtime.d.ts +0 -81
- package/cli/dist/utils/doctor-runtime.d.ts.map +0 -1
- package/cli/dist/utils/doctor-runtime.js.map +0 -1
- package/cli/dist/utils/env-validator.d.ts +0 -15
- package/cli/dist/utils/env-validator.d.ts.map +0 -1
- package/cli/dist/utils/env-validator.js.map +0 -1
- package/cli/dist/utils/errors.d.ts +0 -31
- package/cli/dist/utils/errors.d.ts.map +0 -1
- package/cli/dist/utils/errors.js.map +0 -1
- package/cli/dist/utils/file-helpers.d.ts +0 -14
- package/cli/dist/utils/file-helpers.d.ts.map +0 -1
- package/cli/dist/utils/file-helpers.js.map +0 -1
- package/cli/dist/utils/formatting.d.ts +0 -30
- package/cli/dist/utils/formatting.d.ts.map +0 -1
- package/cli/dist/utils/formatting.js.map +0 -1
- package/cli/dist/utils/paths.d.ts +0 -3
- package/cli/dist/utils/paths.d.ts.map +0 -1
- package/cli/dist/utils/paths.js.map +0 -1
- package/cli/dist/utils/port-assignment.d.ts +0 -6
- package/cli/dist/utils/port-assignment.d.ts.map +0 -1
- package/cli/dist/utils/port-assignment.js.map +0 -1
- package/cli/dist/utils/project-features.d.ts +0 -23
- package/cli/dist/utils/project-features.d.ts.map +0 -1
- package/cli/dist/utils/project-features.js.map +0 -1
- package/cli/dist/utils/project-templates.d.ts +0 -7
- package/cli/dist/utils/project-templates.d.ts.map +0 -1
- package/cli/dist/utils/project-templates.js.map +0 -1
- package/cli/dist/utils/prompt.d.ts +0 -28
- package/cli/dist/utils/prompt.d.ts.map +0 -1
- package/cli/dist/utils/prompt.js.map +0 -1
- package/cli/dist/utils/resource-features.d.ts +0 -29
- package/cli/dist/utils/resource-features.d.ts.map +0 -1
- package/cli/dist/utils/resource-features.js.map +0 -1
- package/cli/dist/utils/service-urls.d.ts +0 -30
- package/cli/dist/utils/service-urls.d.ts.map +0 -1
- package/cli/dist/utils/service-urls.js.map +0 -1
- package/cli/dist/utils/services.d.ts +0 -18
- package/cli/dist/utils/services.d.ts.map +0 -1
- package/cli/dist/utils/services.js.map +0 -1
- package/cli/dist/utils/stack-features.d.ts +0 -22
- package/cli/dist/utils/stack-features.d.ts.map +0 -1
- package/cli/dist/utils/stack-features.js.map +0 -1
- package/cli/dist/utils/tar.d.ts +0 -7
- package/cli/dist/utils/tar.d.ts.map +0 -1
- package/cli/dist/utils/tar.js.map +0 -1
- package/cli/dist/utils/tilt.d.ts +0 -20
- package/cli/dist/utils/tilt.d.ts.map +0 -1
- package/cli/dist/utils/tilt.js.map +0 -1
- package/cli/dist/utils/validation.d.ts +0 -16
- package/cli/dist/utils/validation.d.ts.map +0 -1
- package/cli/dist/utils/validation.js.map +0 -1
- package/cli/knip.json +0 -6
- package/cli/pnpm-lock.yaml +0 -2305
- package/cli/pnpm-workspace.yaml +0 -2
- package/cli/src/cli.ts +0 -72
- package/cli/src/commands/__tests__/always-enabled-infra.test.ts +0 -109
- package/cli/src/commands/__tests__/config.test.ts +0 -146
- package/cli/src/commands/__tests__/doctor.test.ts +0 -730
- package/cli/src/commands/__tests__/error-handling.test.ts +0 -78
- package/cli/src/commands/__tests__/phases-model.test.ts +0 -161
- package/cli/src/commands/__tests__/project-resource-features-e2e.test.ts +0 -187
- package/cli/src/commands/__tests__/project.test.ts +0 -68
- package/cli/src/commands/__tests__/resource.test.ts +0 -226
- package/cli/src/commands/__tests__/saas-starter-integration.test.ts +0 -194
- package/cli/src/commands/__tests__/stack-features-e2e.test.ts +0 -135
- package/cli/src/commands/__tests__/upgrade.test.ts +0 -198
- package/cli/src/commands/completion.ts +0 -300
- package/cli/src/commands/config.ts +0 -299
- package/cli/src/commands/doctor.ts +0 -926
- package/cli/src/commands/down.ts +0 -37
- package/cli/src/commands/help.ts +0 -143
- package/cli/src/commands/networks-design.md +0 -80
- package/cli/src/commands/networks.ts +0 -332
- package/cli/src/commands/project.ts +0 -456
- package/cli/src/commands/projects.ts +0 -82
- package/cli/src/commands/resource.ts +0 -652
- package/cli/src/commands/resources.ts +0 -95
- package/cli/src/commands/stack.ts +0 -128
- package/cli/src/commands/stacks.ts +0 -52
- package/cli/src/commands/status.ts +0 -88
- package/cli/src/commands/ui.tsx +0 -843
- package/cli/src/commands/up.ts +0 -169
- package/cli/src/commands/upgrade.ts +0 -628
- package/cli/src/commands/version.ts +0 -9
- package/cli/src/components/Accessible.tsx +0 -21
- package/cli/src/components/BaseTooltip.tsx +0 -66
- package/cli/src/components/DetailPanel.tsx +0 -146
- package/cli/src/components/FileTree.tsx +0 -89
- package/cli/src/components/ResourceSelectInput.tsx +0 -30
- package/cli/src/components/ResourceTable.tsx +0 -78
- package/cli/src/components/TabBar.tsx +0 -53
- package/cli/src/components/Tooltip.tsx +0 -11
- package/cli/src/components/index.ts +0 -7
- package/cli/src/config/platform-standards.test.ts +0 -11
- package/cli/src/config/platform-standards.ts +0 -196
- package/cli/src/generator/__tests__/extension-fetch.test.ts +0 -242
- package/cli/src/generator/__tests__/template-engine.test.ts +0 -70
- package/cli/src/generator/extension-fetch.ts +0 -286
- package/cli/src/generator/template-engine.ts +0 -752
- package/cli/src/index.ts +0 -86
- package/cli/src/templates.d.ts +0 -4
- package/cli/src/types/index.ts +0 -353
- package/cli/src/utils/__tests__/cache.test.ts +0 -98
- package/cli/src/utils/__tests__/formatting.test.ts +0 -170
- package/cli/src/utils/__tests__/paths.test.ts +0 -180
- package/cli/src/utils/__tests__/port-assignment.test.ts +0 -121
- package/cli/src/utils/__tests__/service-urls.test.ts +0 -174
- package/cli/src/utils/__tests__/services.test.ts +0 -531
- package/cli/src/utils/__tests__/tilt.test.ts +0 -172
- package/cli/src/utils/__tests__/validation.test.ts +0 -148
- package/cli/src/utils/cache.ts +0 -76
- package/cli/src/utils/command-helpers.ts +0 -54
- package/cli/src/utils/constants.ts +0 -130
- package/cli/src/utils/discovery-context.ts +0 -49
- package/cli/src/utils/docker.ts +0 -20
- package/cli/src/utils/doctor-runtime.ts +0 -644
- package/cli/src/utils/env-validator.ts +0 -139
- package/cli/src/utils/errors.ts +0 -168
- package/cli/src/utils/file-helpers.ts +0 -62
- package/cli/src/utils/formatting.ts +0 -215
- package/cli/src/utils/paths.ts +0 -53
- package/cli/src/utils/port-assignment.ts +0 -106
- package/cli/src/utils/project-features.ts +0 -118
- package/cli/src/utils/project-templates.ts +0 -29
- package/cli/src/utils/prompt.ts +0 -128
- package/cli/src/utils/resource-features.ts +0 -215
- package/cli/src/utils/service-urls.ts +0 -124
- package/cli/src/utils/services.ts +0 -364
- package/cli/src/utils/stack-features.ts +0 -30
- package/cli/src/utils/tar.ts +0 -24
- package/cli/src/utils/tilt.ts +0 -133
- package/cli/src/utils/validation.ts +0 -67
- package/cli/tsconfig.json +0 -25
- package/cli/tsconfig.typecheck.json +0 -8
- package/docs/FEATURES.md +0 -281
- package/docs/demo.svg +0 -217
- package/engine/docs/AUTODISCOVERY_TEST.md +0 -182
- package/engine/docs/C4-ARCHITECTURE-operations.md +0 -396
- package/engine/docs/C4-ARCHITECTURE-overview.md +0 -284
- package/engine/docs/C4-ARCHITECTURE.md +0 -17
- package/engine/docs/GOLDEN_IMAGE_INTEGRATION.md +0 -349
- package/engine/docs/MANIFEST_DRIVEN_ARCHITECTURE.md +0 -357
- package/engine/docs/README.md +0 -284
- package/install.sh +0 -19
- package/knip.json +0 -10
- package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/.openspec.yaml +0 -2
- package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/design.md +0 -102
- package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/proposal.md +0 -31
- package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/specs/vscode-tdk-notifications/spec.md +0 -48
- package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/specs/vscode-tdk-orchestration/spec.md +0 -63
- package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/specs/vscode-tdk-troubleshooting/spec.md +0 -56
- package/openspec/changes/add-vscode-tdk-troubleshooter-plugin/tasks.md +0 -61
- package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/.openspec.yaml +0 -2
- package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/design.md +0 -114
- package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/proposal.md +0 -32
- package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/specs/manifest-field-migration/spec.md +0 -20
- package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/specs/resource-terminology-standard/spec.md +0 -20
- package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/specs/stack-terminology-standard/spec.md +0 -20
- package/openspec/changes/archive/2026-04-28-rename-domain-to-stack-service-to-resource/tasks.md +0 -194
- package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/.openspec.yaml +0 -2
- package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/design.md +0 -111
- package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/proposal.md +0 -33
- package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/specs/function-naming-alignment/spec.md +0 -12
- package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/specs/optional-parameter-patterns/spec.md +0 -18
- package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/specs/parameter-documentation/spec.md +0 -16
- package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/specs/parameter-naming-consistency/spec.md +0 -12
- package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/specs/parameter-ordering-standard/spec.md +0 -12
- package/openspec/changes/archive/2026-04-28-star-files-parameter-fixes/tasks.md +0 -194
- package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/.openspec.yaml +0 -2
- package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/design.md +0 -84
- package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/proposal.md +0 -31
- package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/specs/codebase-audit/spec.md +0 -27
- package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/specs/dead-code-cleanup/spec.md +0 -27
- package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/specs/test-gap-fill/spec.md +0 -23
- package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/specs/todo-resolution/spec.md +0 -27
- package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/tasks.md +0 -39
- package/openspec/changes/archive/2026-06-25-landscape-consolidation/.openspec.yaml +0 -2
- package/openspec/changes/archive/2026-06-25-landscape-consolidation/design.md +0 -80
- package/openspec/changes/archive/2026-06-25-landscape-consolidation/proposal.md +0 -40
- package/openspec/changes/archive/2026-06-25-landscape-consolidation/spec.md +0 -52
- package/openspec/changes/archive/2026-06-25-landscape-consolidation/tasks.md +0 -51
- package/openspec/changes/archive/2026-09-17-fix-generated-stack-boot/.openspec.yaml +0 -2
- package/openspec/changes/archive/2026-09-17-fix-generated-stack-boot/design.md +0 -43
- package/openspec/changes/archive/2026-09-17-fix-generated-stack-boot/proposal.md +0 -29
- package/openspec/changes/archive/2026-09-17-fix-generated-stack-boot/specs/self-contained-generated-projects/spec.md +0 -67
- package/openspec/changes/archive/2026-09-17-fix-generated-stack-boot/tasks.md +0 -27
- package/openspec/changes/optimize-runtime-docker-layers/.openspec.yaml +0 -3
- package/openspec/changes/optimize-runtime-docker-layers/design.md +0 -81
- package/openspec/changes/optimize-runtime-docker-layers/proposal.md +0 -44
- package/openspec/changes/optimize-runtime-docker-layers/specs/runtime-container-footprint/spec.md +0 -79
- package/openspec/changes/optimize-runtime-docker-layers/tasks.md +0 -36
- package/openspec/changes/prioritized-cold-start/.openspec.yaml +0 -4
- package/openspec/changes/prioritized-cold-start/design.md +0 -137
- package/openspec/changes/prioritized-cold-start/proposal.md +0 -41
- package/openspec/changes/prioritized-cold-start/specs/on-demand-resource-startup/spec.md +0 -98
- package/openspec/changes/prioritized-cold-start/tasks.md +0 -69
- package/openspec/config.yaml +0 -1
- package/openspec/specs/manifest-field-migration/spec.md +0 -24
- package/openspec/specs/resource-terminology-standard/spec.md +0 -24
- package/openspec/specs/self-contained-generated-projects/spec.md +0 -67
- package/openspec/specs/stack-terminology-standard/spec.md +0 -24
- package/platform/services/platform/proxy/service.yaml +0 -14
- package/scripts/audit-codebase.sh +0 -213
- package/scripts/autoresearch/layer-eval.sh +0 -65
- package/scripts/benchmark/README.md +0 -25
- package/scripts/benchmark/container-scale.ts +0 -503
- package/scripts/benchmark/pre-release-gate.sh +0 -9
- package/scripts/install-git-hooks.sh +0 -14
- package/scripts/measure-idle-footprint.sh +0 -58
- package/scripts/record-demo.sh +0 -43
- package/scripts/release-binaries.sh +0 -97
- package/scripts/setup-pre-commit.sh +0 -33
- package/scripts/stage-npm-engine.sh +0 -36
- package/tests/tilt-engine/__init__.py +0 -5
- package/tests/tilt-engine/conftest.py +0 -182
- package/tests/tilt-engine/fixtures/appointment-frontend-service.json +0 -11
- package/tests/tilt-engine/fixtures/identity-backend-service.json +0 -12
- package/tests/tilt-engine/fixtures/invalid-service.json +0 -4
- package/tests/tilt-engine/test_agents_md_generator.py +0 -341
- package/tests/tilt-engine/test_agents_md_integration.py +0 -378
- package/tests/tilt-engine/test_cache_operations.py +0 -181
- package/tests/tilt-engine/test_cache_persistence.py +0 -142
- package/tests/tilt-engine/test_code_executor.py +0 -152
- package/tests/tilt-engine/test_code_viewer.py +0 -127
- package/tests/tilt-engine/test_compose_port_anchors.py +0 -310
- package/tests/tilt-engine/test_config_inspector.py +0 -162
- package/tests/tilt-engine/test_daemon_focus_mode.py +0 -89
- package/tests/tilt-engine/test_daemon_polling.py +0 -122
- package/tests/tilt-engine/test_daemon_registration.py +0 -115
- package/tests/tilt-engine/test_daemon_validation.py +0 -107
- package/tests/tilt-engine/test_docker_generator_bugs.py +0 -493
- package/tests/tilt-engine/test_docker_prune.py +0 -119
- package/tests/tilt-engine/test_dockerignore_path_bug.py +0 -82
- package/tests/tilt-engine/test_file_browser.py +0 -193
- package/tests/tilt-engine/test_frontend_basepath_manifest.py +0 -27
- package/tests/tilt-engine/test_health_dependencies.py +0 -130
- package/tests/tilt-engine/test_health_endpoints.py +0 -118
- package/tests/tilt-engine/test_health_tilt_ui.py +0 -85
- package/tests/tilt-engine/test_runtime_container_footprint.py +0 -162
- package/tests/tilt-engine/test_sablier_defer_start.py +0 -237
- package/tests/tilt-engine/test_safety_aliases.py +0 -84
- package/tests/tilt-engine/test_snapshot_diff.py +0 -136
- package/tests/tilt-engine/test_snapshot_persistence.py +0 -163
- package/tests/tilt-engine/test_snapshot_scanning.py +0 -123
- package/tests/tilt-engine/test_standalone_project_boot.py +0 -61
- package/tests/tilt-engine/test_standalone_traefik.py +0 -160
- package/tests/tilt-engine/test_traefik_static_wake_route.py +0 -187
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,15 @@ Notable changes to the `tdk` CLI. Versions match [npm](https://www.npmjs.com/pac
|
|
|
4
4
|
|
|
5
5
|
## Unreleased
|
|
6
6
|
|
|
7
|
+
- Dropped the `ora` dependency (only `tdk upgrade` used it) in favor of a small built-in spinner: 50 installed packages instead of 61, and no more duplicate versions of cli-cursor, restore-cursor, onetime and signal-exit.
|
|
8
|
+
- `tdk doctor` outside a project checks only Docker, Compose and Tilt, and reports "This machine is ready for TDK". Before, running it right after installing (as the installer suggests) failed with "Master configs missing … Environment not ready".
|
|
9
|
+
|
|
10
|
+
## 1.3.54 (2026-09-27)
|
|
11
|
+
|
|
12
|
+
- The npm package ships only what the CLI needs at runtime: 294 files and 458 kB, down from 678 files and 888 kB. Repo tooling, tests, source maps, CI config and the openspec docs are no longer included.
|
|
13
|
+
|
|
14
|
+
## 1.3.53 (2026-09-27)
|
|
15
|
+
|
|
7
16
|
- The "requires a license key" errors link to the working request form (`tdk-landscape.github.io/tdk-website/#waitlist`); the old link pointed at a page without it.
|
|
8
17
|
- New issue template for Premium license requests.
|
|
9
18
|
|
package/README.md
CHANGED
|
@@ -172,7 +172,7 @@ make pre-commit-run # run pre-commit hooks on all files
|
|
|
172
172
|
tdk doctor
|
|
173
173
|
```
|
|
174
174
|
|
|
175
|
-
|
|
175
|
+
Checks Docker, Compose and Tilt. Inside a project it also checks the generated configs, `.env`, service scripts and that the ingress ports are free, before you run `tdk up`.
|
|
176
176
|
|
|
177
177
|
## Community
|
|
178
178
|
|
|
@@ -681,11 +681,13 @@ export const doctorCommand = new Command("doctor")
|
|
|
681
681
|
console.log(`${chalk.red("✗")} --ping-timeout must be a positive number of milliseconds`);
|
|
682
682
|
process.exit(1);
|
|
683
683
|
}
|
|
684
|
-
const
|
|
684
|
+
const machineChecks = [
|
|
685
685
|
checkDockerRuntime,
|
|
686
686
|
checkTilt,
|
|
687
687
|
checkDockerCompose,
|
|
688
688
|
checkDockerVersions,
|
|
689
|
+
];
|
|
690
|
+
const projectChecks = [
|
|
689
691
|
checkMasterConfigs,
|
|
690
692
|
checkGeneratedProjectRuntimeAssets,
|
|
691
693
|
checkStarlarkLoadExports,
|
|
@@ -704,8 +706,13 @@ export const doctorCommand = new Command("doctor")
|
|
|
704
706
|
];
|
|
705
707
|
// Runs last: needs routable services (and working Traefik) to mean anything.
|
|
706
708
|
if (options.ping) {
|
|
707
|
-
|
|
709
|
+
projectChecks.push(() => checkServiceHealth(pingTimeout));
|
|
708
710
|
}
|
|
711
|
+
// Right after installing, people run `tdk doctor` before they have a
|
|
712
|
+
// project. Only the machine checks mean anything there; the project checks
|
|
713
|
+
// would all fail with "run tdk project".
|
|
714
|
+
const inProject = Boolean(findProjectRoot());
|
|
715
|
+
const checks = inProject ? [...machineChecks, ...projectChecks] : machineChecks;
|
|
709
716
|
let allPassed = true;
|
|
710
717
|
for (const checkFn of checks) {
|
|
711
718
|
const result = await checkFn();
|
|
@@ -728,7 +735,18 @@ export const doctorCommand = new Command("doctor")
|
|
|
728
735
|
}
|
|
729
736
|
}
|
|
730
737
|
console.log("");
|
|
731
|
-
if (allPassed) {
|
|
738
|
+
if (allPassed && !inProject) {
|
|
739
|
+
console.log(`${chalk.gray("○")} ${chalk.gray("Not in a TDK project, so project checks were skipped")}`);
|
|
740
|
+
console.log("");
|
|
741
|
+
console.log(`${chalk.green(chalk.bold("✓"))} This machine is ready for TDK`);
|
|
742
|
+
console.log("");
|
|
743
|
+
console.log("Next steps:");
|
|
744
|
+
console.log(" 1. mkdir my-app && cd my-app");
|
|
745
|
+
console.log(" 2. tdk project --yes");
|
|
746
|
+
console.log(" 3. tdk resource api --type backend --stack my-app");
|
|
747
|
+
console.log(" 4. tdk up my-app");
|
|
748
|
+
}
|
|
749
|
+
else if (allPassed) {
|
|
732
750
|
console.log(`${chalk.green(chalk.bold("✓"))} Environment ready for TDK`);
|
|
733
751
|
console.log("");
|
|
734
752
|
console.log("Next steps:");
|
|
@@ -5,11 +5,11 @@ import { dirname, join, resolve } from "node:path";
|
|
|
5
5
|
import { fileURLToPath } from "node:url";
|
|
6
6
|
import chalk from "chalk";
|
|
7
7
|
import { Command } from "commander";
|
|
8
|
-
import ora from "ora";
|
|
9
8
|
import { getErrorMessage, logVerbose, showErrorAndExit } from "../utils/errors.js";
|
|
10
9
|
import { showCancelled } from "../utils/formatting.js";
|
|
11
10
|
import { getPackageVersion } from "../utils/paths.js";
|
|
12
11
|
import { promptConfirm } from "../utils/prompt.js";
|
|
12
|
+
import { startSpinner } from "../utils/spinner.js";
|
|
13
13
|
function isStandaloneBinary(tdkPath) {
|
|
14
14
|
try {
|
|
15
15
|
const fileInfo = execSync(`file -b ${JSON.stringify(tdkPath)}`, { encoding: "utf-8" });
|
|
@@ -138,7 +138,7 @@ export async function upgradeViaBinary(tdkPath, release) {
|
|
|
138
138
|
console.log(chalk.cyan(` chmod +x ${tdkPath}`));
|
|
139
139
|
return false;
|
|
140
140
|
}
|
|
141
|
-
const spinner =
|
|
141
|
+
const spinner = startSpinner(`Downloading ${release.assetName} (${release.tag})...`);
|
|
142
142
|
// Download to /tmp first (both the binary and the engine bundle below) so a
|
|
143
143
|
// failed network step can't leave a half-written binary at tdkPath.
|
|
144
144
|
const tmpPath = `/tmp/tdk-upgrade-${release.assetName}`;
|
|
@@ -204,7 +204,7 @@ function getCurrentVersion() {
|
|
|
204
204
|
}
|
|
205
205
|
}
|
|
206
206
|
async function getLatestVersion() {
|
|
207
|
-
const spinner =
|
|
207
|
+
const spinner = startSpinner("Checking for latest version...");
|
|
208
208
|
try {
|
|
209
209
|
const result = execSync("npm view @tdk-landscape/tdk-cli-core version", {
|
|
210
210
|
encoding: "utf-8",
|
|
@@ -224,7 +224,7 @@ async function getLatestVersion() {
|
|
|
224
224
|
}
|
|
225
225
|
}
|
|
226
226
|
async function upgradeViaNpm() {
|
|
227
|
-
const spinner =
|
|
227
|
+
const spinner = startSpinner("Upgrading via npm...");
|
|
228
228
|
try {
|
|
229
229
|
execSync("npm install -g @tdk-landscape/tdk-cli-core@latest", {
|
|
230
230
|
stdio: "inherit",
|
|
@@ -252,7 +252,7 @@ async function upgradeViaNpm() {
|
|
|
252
252
|
}
|
|
253
253
|
}
|
|
254
254
|
async function upgradeViaBun() {
|
|
255
|
-
const spinner =
|
|
255
|
+
const spinner = startSpinner("Upgrading via bun...");
|
|
256
256
|
try {
|
|
257
257
|
execSync("bun install -g @tdk-landscape/tdk-cli-core@latest", {
|
|
258
258
|
stdio: "inherit",
|
|
@@ -280,7 +280,7 @@ async function upgradeViaBun() {
|
|
|
280
280
|
}
|
|
281
281
|
}
|
|
282
282
|
async function upgradeViaGit(path) {
|
|
283
|
-
const spinner =
|
|
283
|
+
const spinner = startSpinner("Pulling latest changes from git...");
|
|
284
284
|
try {
|
|
285
285
|
execSync("git rev-parse --git-dir", {
|
|
286
286
|
cwd: path,
|
|
@@ -492,7 +492,7 @@ export const upgradeCommand = new Command("upgrade")
|
|
|
492
492
|
process.exit(1);
|
|
493
493
|
}
|
|
494
494
|
console.log();
|
|
495
|
-
const verifySpinner =
|
|
495
|
+
const verifySpinner = startSpinner("Verifying upgrade...");
|
|
496
496
|
try {
|
|
497
497
|
const newVersion = execSync("tdk version", { encoding: "utf-8" }).trim();
|
|
498
498
|
verifySpinner.succeed(`Verified: now running ${chalk.green(newVersion)}`);
|
|
@@ -94,15 +94,25 @@ function isCacheFresh(path) {
|
|
|
94
94
|
return false;
|
|
95
95
|
return Date.now() - statSync(path).mtimeMs < CACHE_TTL_MS;
|
|
96
96
|
}
|
|
97
|
+
// Sends the key as `Authorization: Bearer`, never in the URL, where request
|
|
98
|
+
// logs and proxies record it. A worker deployed before it read the header
|
|
99
|
+
// answers 401 "missing key" (a current one only returns 401 when it gets no
|
|
100
|
+
// key at all), so retry that once with the old `?key=` - premium keeps
|
|
101
|
+
// working until the worker is updated. Drop the retry once it is.
|
|
102
|
+
async function fetchPremium(key, resource, projectId) {
|
|
103
|
+
const url = `${getEndpoint()}?resource=${encodeURIComponent(resource)}` +
|
|
104
|
+
`&projectId=${encodeURIComponent(projectId)}`;
|
|
105
|
+
const res = await fetch(url, { headers: { Authorization: `Bearer ${key}` } });
|
|
106
|
+
if (res.status !== 401)
|
|
107
|
+
return res;
|
|
108
|
+
await res.arrayBuffer().catch(() => undefined);
|
|
109
|
+
return fetch(`${url}&key=${encodeURIComponent(key)}`);
|
|
110
|
+
}
|
|
97
111
|
async function fetchPremiumBundle(key, projectId) {
|
|
98
|
-
const endpoint = getEndpoint();
|
|
99
112
|
for (const resource of KNOWN_RESOURCES) {
|
|
100
|
-
const url = `${endpoint}?key=${encodeURIComponent(key)}` +
|
|
101
|
-
`&resource=${encodeURIComponent(resource)}` +
|
|
102
|
-
`&projectId=${encodeURIComponent(projectId)}`;
|
|
103
113
|
let res;
|
|
104
114
|
try {
|
|
105
|
-
res = await
|
|
115
|
+
res = await fetchPremium(key, resource, projectId);
|
|
106
116
|
}
|
|
107
117
|
catch (err) {
|
|
108
118
|
console.warn(`⚠️ Premium fetch failed (network error): ${err.message}`);
|
|
@@ -208,12 +218,9 @@ async function hasLiveResourceLicense(projectRoot, resource) {
|
|
|
208
218
|
}
|
|
209
219
|
}
|
|
210
220
|
const projectId = getOrCreateProjectId(projectRoot);
|
|
211
|
-
const endpoint = getEndpoint();
|
|
212
|
-
const url = `${endpoint}?key=${encodeURIComponent(key)}` +
|
|
213
|
-
`&resource=${encodeURIComponent(resource)}&projectId=${encodeURIComponent(projectId)}`;
|
|
214
221
|
let granted = false;
|
|
215
222
|
try {
|
|
216
|
-
const res = await
|
|
223
|
+
const res = await fetchPremium(key, resource, projectId);
|
|
217
224
|
granted = res.ok;
|
|
218
225
|
// Drain the body (a full premium.tar.gz on success) so we don't leave
|
|
219
226
|
// it dangling - we only need the status, not the content.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
const FRAMES = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
|
|
3
|
+
export function startSpinner(initialText) {
|
|
4
|
+
const stream = process.stderr;
|
|
5
|
+
const animate = stream.isTTY === true;
|
|
6
|
+
let frame = 0;
|
|
7
|
+
let text = initialText;
|
|
8
|
+
let timer;
|
|
9
|
+
const render = () => stream.write(`\r\x1b[2K${chalk.cyan(FRAMES[frame])} ${text}`);
|
|
10
|
+
if (animate) {
|
|
11
|
+
render();
|
|
12
|
+
timer = setInterval(() => {
|
|
13
|
+
frame = (frame + 1) % FRAMES.length;
|
|
14
|
+
render();
|
|
15
|
+
}, 80);
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
stream.write(`- ${text}\n`);
|
|
19
|
+
}
|
|
20
|
+
const finish = (symbol, message) => {
|
|
21
|
+
if (timer)
|
|
22
|
+
clearInterval(timer);
|
|
23
|
+
stream.write(`${animate ? "\r\x1b[2K" : ""}${symbol} ${message ?? text}\n`);
|
|
24
|
+
};
|
|
25
|
+
return {
|
|
26
|
+
get text() {
|
|
27
|
+
return text;
|
|
28
|
+
},
|
|
29
|
+
set text(value) {
|
|
30
|
+
text = value;
|
|
31
|
+
if (!animate)
|
|
32
|
+
stream.write(`- ${text}\n`);
|
|
33
|
+
},
|
|
34
|
+
succeed: (message) => finish(chalk.green("✔"), message),
|
|
35
|
+
fail: (message) => finish(chalk.red("✖"), message),
|
|
36
|
+
warn: (message) => finish(chalk.yellow("⚠"), message),
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=spinner.js.map
|
package/cli/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tdk-cli-internal",
|
|
3
3
|
"private": true,
|
|
4
|
-
"version": "1.3.
|
|
4
|
+
"version": "1.3.55",
|
|
5
5
|
"description": "TDK CLI - Tilt Development Kit command line interface",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"tdk",
|
|
@@ -58,7 +58,6 @@
|
|
|
58
58
|
"handlebars": "^4.7.8",
|
|
59
59
|
"ink": "^7.1.1",
|
|
60
60
|
"ink-select-input": "^6.2.0",
|
|
61
|
-
"ora": "^9.4.1",
|
|
62
61
|
"react": "^19.3.0"
|
|
63
62
|
},
|
|
64
63
|
"devDependencies": {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tdk-landscape/tdk-cli-core",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.55",
|
|
4
4
|
"description": "Run 100 microservices on a 16 GB laptop without Kubernetes. Scaffold services and run them locally with hot reload, built on Tilt.",
|
|
5
5
|
"homepage": "https://tdk-landscape.github.io/tdk-website",
|
|
6
6
|
"repository": {
|
|
@@ -18,6 +18,21 @@
|
|
|
18
18
|
"tdk": "cli/bin/tdk.js",
|
|
19
19
|
"tdk-cli": "cli/bin/tdk.js"
|
|
20
20
|
},
|
|
21
|
+
"files": [
|
|
22
|
+
"Tiltfile",
|
|
23
|
+
"engine",
|
|
24
|
+
"!engine/docs",
|
|
25
|
+
"discovery",
|
|
26
|
+
"specs",
|
|
27
|
+
"ext",
|
|
28
|
+
"shared-platform-engineering/docker-templates",
|
|
29
|
+
"cli/bin",
|
|
30
|
+
"cli/dist/**/*.js",
|
|
31
|
+
"cli/templates",
|
|
32
|
+
"cli/package.json",
|
|
33
|
+
"cli/shared-platform-engineering/docker-templates",
|
|
34
|
+
"CHANGELOG.md"
|
|
35
|
+
],
|
|
21
36
|
"scripts": {
|
|
22
37
|
"build": "cd cli && npm run build",
|
|
23
38
|
"build:watch": "cd cli && npm run build:watch",
|
|
@@ -56,7 +71,6 @@
|
|
|
56
71
|
"handlebars": "^4.7.8",
|
|
57
72
|
"ink": "^7.1.1",
|
|
58
73
|
"ink-select-input": "^6.2.0",
|
|
59
|
-
"ora": "^9.4.1",
|
|
60
74
|
"react": "^19.3.0"
|
|
61
75
|
},
|
|
62
76
|
"devDependencies": {
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: layer-autoresearch
|
|
3
|
-
description: Autonomous keep/discard experiment loop (after karpathy/autoresearch) that optimises TDK's L1-L4 Docker layers toward the north star of 100 services on a 16 GB machine. Use when asked to run autoresearch on the Docker layers or to optimise the golden/runtime layers experimentally.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Layer autoresearch
|
|
7
|
-
|
|
8
|
-
Adapted from karpathy/autoresearch `program.md`. You are an autonomous researcher making the TDK runtime layers cheaper **without removing features**.
|
|
9
|
-
|
|
10
|
-
## Setup (with the user, once)
|
|
11
|
-
|
|
12
|
-
1. Agree a run tag (e.g. `sep25`). Create `git checkout -b autoresearch/<tag>` from `main`. The branch must be new.
|
|
13
|
-
2. Warn the user: this workspace has an external tool that auto-commits and pushes working-tree edits. Ask them to pause it for the run, because experiment resets must not reach `origin/main`.
|
|
14
|
-
3. Read the in-scope files in full:
|
|
15
|
-
- Editable: `engine/topologies/platform/docker/layers/*.star`, `engine/topologies/platform/docker/layers/prisma/*.star`, `engine/topologies/platform/docker/build/golden_image_dockerfile.star`, `engine/topologies/platform/docker/config/healthcheck.star`.
|
|
16
|
-
- Read-only ground truth: `scripts/autoresearch/layer-eval.sh`, `scripts/benchmark/container-scale.ts`, `tests/tilt-engine/test_runtime_container_footprint.py`, and the spec `openspec/specs/runtime-container-footprint` (or its change under `openspec/changes/`).
|
|
17
|
-
4. Check that `../tdk-erp-system` exists with built images (`docker images | grep finance_`). If not, ask the human to run `tdk up` there once.
|
|
18
|
-
5. Create an untracked `autoresearch-results.tsv` with the header `commit mem_mib image_mib status description`.
|
|
19
|
-
6. Confirm with the user, then start.
|
|
20
|
-
|
|
21
|
-
## Experiment
|
|
22
|
-
|
|
23
|
-
Run `scripts/autoresearch/layer-eval.sh > run.log 2>&1` (about 5-10 minutes). Read the results with `grep -A20 '^---' run.log`.
|
|
24
|
-
|
|
25
|
-
- **Primary metric: `mem_per_service_mib`, lower is better.** This is idle memory per real ERP service, and it is what limits 100 services on 16 GB.
|
|
26
|
-
- **Tie-breaker:** if memory is within 0.5 MiB of the best, a lower `unique_per_service_mib` or `service_image_mib` wins, then simpler code.
|
|
27
|
-
- **Hard constraints.** `status: ok` requires all 20 services healthy, zero crashes, and passing feature tests. Anything else is a discard, or a crash if it didn't run.
|
|
28
|
-
- **Never** edit the eval harness, benchmark, tests or spec. Never remove a user-facing feature: Prisma, Infisical entrypoint, hugo-as-feature, healthchecks, signal handling. Don't add dependencies.
|
|
29
|
-
|
|
30
|
-
Candidate ideas, from real measurements on 2026-09-25:
|
|
31
|
-
- Duplicate `node_modules` copy in the L4 backend runtime (4.2 MB twice per service).
|
|
32
|
-
- L1 installs `file`, `bash` and `openssl` into every runtime image (30 MB apk layer). Check what actually needs them first.
|
|
33
|
-
- Bun runtime memory flags (e.g. `--smol`) in the resolved `CMD`.
|
|
34
|
-
- Distroless or slimmer Bun base for L4.
|
|
35
|
-
- Per-service unique layer size.
|
|
36
|
-
|
|
37
|
-
## Loop (never stop until the human interrupts)
|
|
38
|
-
|
|
39
|
-
1. Note the current commit.
|
|
40
|
-
2. Change the editable files with one idea.
|
|
41
|
-
3. `git commit -m "<idea>"`.
|
|
42
|
-
4. Run the eval, redirected to `run.log` (don't flood context).
|
|
43
|
-
5. If there's no `---` block, `tail -n 50 run.log`. Fix trivial mistakes, otherwise log `crash`.
|
|
44
|
-
6. Append a row to `autoresearch-results.tsv` (untracked).
|
|
45
|
-
7. If the metric improved and `status: ok`, keep the commit. Otherwise `git reset --hard HEAD~1`.
|
|
46
|
-
8. An eval that runs longer than 20 minutes counts as a failure.
|
|
47
|
-
|
|
48
|
-
The first run is always the unmodified baseline.
|
|
@@ -1,222 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: tdk-troubleshoot
|
|
3
|
-
description: Diagnose and fix TDK (tdk-cli-core) local-dev problems with verified commands. Covers `tdk doctor`, `tdk up` or `tdk down` failing or hanging, "Docker daemon is not responding", red Tilt resources (pull access denied for golden images, missing shared-platform-engineering files, TS2688 bun types, run-only "No such image"), Postgres crash loops, services never reaching healthy, a machine overloaded by many services, Docker image size vs memory questions, and benchmarking how many services fit on a laptop. Use this whenever someone works in tdk-cli-core or a TDK project (tdk-erp-system, tdk-saas-starter, tdk-restaurant-example, auth-user) and anything about tdk, Tilt, or Docker is broken, slow, or being measured, even if they never say "troubleshoot".
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# TDK troubleshooting
|
|
7
|
-
|
|
8
|
-
This skill comes from a long session on 2026-09-25. It brought `tdk-erp-system` (107 services) up, measured it, and wasted a lot of the user's time along the way. Everything below marked **measured** or **verified** was run on the user's 16 GB MacBook Air (Docker VM: 8 CPUs, 7,934 MiB). Anything else is labelled as unknown.
|
|
9
|
-
|
|
10
|
-
## How to work (the expensive lessons)
|
|
11
|
-
|
|
12
|
-
- **Say what you measured, what you estimated, and what you don't know, in that order.** Most of the frustration came from confident claims that a later measurement contradicted, such as "memory is ~16 MiB/container" (`docker stats`, which undercounts) and "112 s boot" (actually the launcher script). "I don't know yet, here is how I'd find out" is a good answer.
|
|
13
|
-
- **Check machine load before blaming Docker, Tilt or the code.** An overloaded Mac makes every tool look broken.
|
|
14
|
-
- **Before anything that runs longer than about 5 minutes or starts dozens of containers, say so and give an estimate.** A full ERP `tdk up` froze this machine once. Ask first.
|
|
15
|
-
- **Give short status lines while waiting.** Silence during long builds reads as "nothing works".
|
|
16
|
-
- **Don't polish a proxy metric.** Shrinking images didn't touch the real bottleneck. Ask what actually hurts (time, CPU, a freeze) and measure that.
|
|
17
|
-
|
|
18
|
-
## First 60 seconds: triage
|
|
19
|
-
|
|
20
|
-
```bash
|
|
21
|
-
sysctl -n vm.loadavg; top -l 1 -n 0 | grep -E "CPU usage|PhysMem"
|
|
22
|
-
time docker ps -q | wc -l
|
|
23
|
-
pgrep -fl "tilt up"
|
|
24
|
-
docker info --format 'CPUs={{.NCPU}} MemTotal={{.MemTotal}}'
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
- **`docker ps` taking more than about 5 s means overload, not breakage.** Measured: 6–13 s with 110 ERP containers plus Tilt running, load average 28–43, 99 MB free RAM. `tdk doctor` and `tdk down` both fail their own 10 s Docker check in that state.
|
|
28
|
-
- **A `tilt up` process still running recreates any container you `docker stop`** within seconds. Stop Tilt first.
|
|
29
|
-
- **Other TDK projects share the `*-autogenerated-*` container naming** (for example kitchen, guest, operations and auth from the restaurant and auth projects). Filter by stack name before stopping anything.
|
|
30
|
-
|
|
31
|
-
## Symptoms, causes and fixes (verified)
|
|
32
|
-
|
|
33
|
-
### "Docker daemon is not responding (`docker ps` hung for 10s)"
|
|
34
|
-
|
|
35
|
-
**Cause:** overload, as above. `tdk down` is blocked by the same check.
|
|
36
|
-
|
|
37
|
-
**Fix:** stop Tilt, then stop the project's containers directly.
|
|
38
|
-
|
|
39
|
-
```bash
|
|
40
|
-
pkill -TERM -f "tilt up -f $PWD/.tdk/.tdk-out/Tiltfile"
|
|
41
|
-
docker ps --format '{{.Names}}' | grep -E '^(finance|hr|sales|inventory|manufacturing|supply_chain|analytics)-autogenerated-' | xargs docker stop
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
### Postgres restarting with "Database is uninitialized and superuser password is not specified"
|
|
45
|
-
|
|
46
|
-
**Cause:** the container was created while `DB_PASSWORD` was empty. Environment variables are fixed when a container is created, so fixing `.env` later doesn't help.
|
|
47
|
-
|
|
48
|
-
**Check:**
|
|
49
|
-
|
|
50
|
-
```bash
|
|
51
|
-
docker inspect <project>_postgres --format '{{range .Config.Env}}{{println .}}{{end}}' | grep POSTGRES_PASSWORD
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
**Fix:** recreate the container (Tilt or compose `up` recreates it). The data volume survives.
|
|
55
|
-
|
|
56
|
-
### Tilt build error `pull access denied ... docker.io/library/<project>-l4-backend:latest`
|
|
57
|
-
|
|
58
|
-
**Cause:** the golden layers aren't built yet (the `golden-layers-build` resource is still running).
|
|
59
|
-
|
|
60
|
-
**Fix:** wait for it to finish. Tilt does **not** retry resources that failed before it finished, so trigger every errored resource yourself.
|
|
61
|
-
|
|
62
|
-
```bash
|
|
63
|
-
tilt get uiresources -o json | python3 -c 'import json,sys; [print(i["metadata"]["name"]) for i in json.load(sys.stdin)["items"] if i.get("status",{}).get("updateStatus")=="error"]' | xargs -n1 tilt trigger
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
### `*-run-only` resources fail with `No such image: <stack>_<svc>:dev`
|
|
67
|
-
|
|
68
|
-
**Cause:** they ran `docker compose up --no-build` before the image existed.
|
|
69
|
-
|
|
70
|
-
**Fix:** once the image builds, `tilt trigger` them.
|
|
71
|
-
|
|
72
|
-
### Missing generated files in the build context
|
|
73
|
-
|
|
74
|
-
The build fails with `"/shared-platform-engineering/docker-templates/<x>.sh": not found` or `"/package.json": not found`.
|
|
75
|
-
|
|
76
|
-
**Cause:** the project is missing its generated runtime assets.
|
|
77
|
-
|
|
78
|
-
**Fix:**
|
|
79
|
-
- `tdk project --yes` copies `shared-platform-engineering/docker-templates` (verified).
|
|
80
|
-
- If the root `package.json` is still missing, add a Bun workspace manifest. This is what fixed ERP:
|
|
81
|
-
|
|
82
|
-
```json
|
|
83
|
-
{ "name": "<project>", "private": true, "type": "module", "workspaces": ["services/*/*"] }
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
- `tdk doctor` now reports both (`checkGeneratedProjectRuntimeAssets`).
|
|
87
|
-
|
|
88
|
-
### `bun run build` fails with `TS2688: Cannot find type definition file for 'bun'`
|
|
89
|
-
|
|
90
|
-
**Cause:** the generated tsconfig sets `"types": ["bun"]`, but the service's `package.json` has no `@types/bun`.
|
|
91
|
-
|
|
92
|
-
**Fix:** add `"@types/bun": "^1.4.2"` to `devDependencies`. `tdk doctor` now reports this (`checkTypeScriptTypeDependencies`).
|
|
93
|
-
|
|
94
|
-
### `tdk up <stack>` queues every stack
|
|
95
|
-
|
|
96
|
-
**Observed, not root-caused:** `tdk up finance` left 129 resources pending across all stacks.
|
|
97
|
-
|
|
98
|
-
**Protect the machine:** check the counts, then disable the other stacks.
|
|
99
|
-
|
|
100
|
-
```bash
|
|
101
|
-
tilt get uiresources -o json | python3 -c 'import json,sys,collections; print(collections.Counter(i.get("status",{}).get("updateStatus") for i in json.load(sys.stdin)["items"]))'
|
|
102
|
-
tilt disable <other-stack-resource> <...>
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
### Engine edits have no effect
|
|
106
|
-
|
|
107
|
-
**Cause:** projects run a vendored copy of the engine at `.tdk/.tdk-out/tdk-cli-ext/`. The installed `/usr/local/bin/tdk` vendors **its own bundled engine**, so it can silently overwrite your local one.
|
|
108
|
-
|
|
109
|
-
**Fix:** re-vendor from your local checkout, then check the copy matches.
|
|
110
|
-
|
|
111
|
-
```bash
|
|
112
|
-
(cd <core>/cli && bun run build)
|
|
113
|
-
TDK_EXTENSION_SOURCE=<core> node <core>/cli/bin/tdk.js project --yes
|
|
114
|
-
diff -rq <core>/engine/topologies/platform/docker .tdk/.tdk-out/tdk-cli-ext/engine/topologies/platform/docker
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
### Reading Tilt state
|
|
118
|
-
|
|
119
|
-
- Use the CLI. The HTTP API (`localhost:10350/api/view`) returns 403 "missing session token".
|
|
120
|
-
- `tilt get uiresources <name> -o json` shows a resource's state. **`buildHistory[0]` is the newest build**; reading `[-1]` shows a stale error and misleads you.
|
|
121
|
-
- `tilt logs <resource>` gives the full build log.
|
|
122
|
-
|
|
123
|
-
## ERP project layout
|
|
124
|
-
|
|
125
|
-
| Thing | Value |
|
|
126
|
-
|---|---|
|
|
127
|
-
| Service manifests | `services/<stack>/<svc>/service.json` |
|
|
128
|
-
| Image names | `<stack>_<svc>:dev` |
|
|
129
|
-
| Compose project | `<stack>-autogenerated` |
|
|
130
|
-
| Compose file | `services/<stack>/.autogenerated/docker-compose.app.autogenerated.yml` |
|
|
131
|
-
| Postgres | `services/platform/database-management/docker-compose.yml` |
|
|
132
|
-
| Traefik | `.tdk/.tdk-out/docker-compose.traefik.yml` |
|
|
133
|
-
| Databases | `<project>_<stack>`, created with `createdb` |
|
|
134
|
-
| Golden images | `<project>-l1`, `-l2`, `-l3-*`, `-l4-*` |
|
|
135
|
-
|
|
136
|
-
## Measuring without fooling yourself
|
|
137
|
-
|
|
138
|
-
### Image size is disk, not RAM
|
|
139
|
-
|
|
140
|
-
- `docker images` counts shared layers once per image. Real disk use is `docker system df`. The 107 ERP images add up to 26 GB listed, but all 151 images on the machine together use 6 GB on disk.
|
|
141
|
-
- See what fills an image, layer by layer:
|
|
142
|
-
|
|
143
|
-
```bash
|
|
144
|
-
docker history <img> --format '{{.Size}}\t{{.CreatedBy}}'
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
- **Measured:** ERP backends are 176–276 MB each, but only 4.5–8.8 MB is service-specific. The rest is shared: Bun binary 93 MB, Alpine 9 MB, L1 packages 30 MB.
|
|
148
|
-
- **Measured:** `auth_auth-api-backend:dev` is 826 MB on disk, yet uses 33 MiB of RAM when running. Of the 826 MB, two copies of `node_modules` take 199 MB each, and hugo takes 57 MB. The duplicate-copy fix is only on branch `autoresearch/sep25`. The hugo removal is on `main`. Both need a rebuild to take effect.
|
|
149
|
-
|
|
150
|
-
### RAM: `docker stats` undercounts
|
|
151
|
-
|
|
152
|
-
It leaves out Docker's per-container overhead in the VM (containerd shims and the init process). Use the change in the Docker VM's own memory instead:
|
|
153
|
-
|
|
154
|
-
```bash
|
|
155
|
-
docker run --rm alpine awk '/MemTotal/{t=$2}/MemAvailable/{a=$2}END{printf "%d MiB used\n",(t-a)/1024}' /proc/meminfo
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
- **Measured:** 100 idle ERP containers cost **2,076 MiB real (about 21 MiB each)**. `docker stats` reported 1,693 MiB for the same containers.
|
|
159
|
-
- The VM measurement is noisy for small counts: the same 20-container setup read 442 MiB one time and 214 MiB the next. Use 100 containers, or repeat the run and report the range.
|
|
160
|
-
|
|
161
|
-
### Time: start containers in parallel, as Tilt does
|
|
162
|
-
|
|
163
|
-
A serial `docker run` loop measures the launcher, not the services. For parallel starts on macOS:
|
|
164
|
-
|
|
165
|
-
```bash
|
|
166
|
-
tr '\n' '\0' < cmds.txt | xargs -0 -n1 -P8 sh -c
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
- **Measured:** 100 ERP containers were all healthy in **31.7 s** starting 8 at a time, with 0 crashes. Starting the containers took 26.6 s of that.
|
|
170
|
-
- The website claims "full boot in under 5 seconds". Measured, that only holds for about 5 services (4.5 s).
|
|
171
|
-
|
|
172
|
-
### North-star math: 100 services in 16 GB
|
|
173
|
-
|
|
174
|
-
(Docker VM MemTotal − 512 MiB for infrastructure) ÷ 100 = the per-service budget. On this Mac that's (7,934 − 512) ÷ 100 ≈ **74 MiB per service**. The measured 21 MiB fits, but only for idle containers answering `/health`. It hasn't been measured under real load.
|
|
175
|
-
|
|
176
|
-
## Tools in this repo and how far to trust them
|
|
177
|
-
|
|
178
|
-
| Tool | Status |
|
|
179
|
-
|---|---|
|
|
180
|
-
| `bun scripts/benchmark/container-scale.ts --synthetic` | **Verified** for 5 to 100 containers. Starts containers serially, so "all healthy" is about the launch time. |
|
|
181
|
-
| `container-scale.ts` default (compose) mode | **Verified at tier 5** (2026-09-26): real generated compose files, real Postgres, real Traefik, 5/5 requests through Traefik returned 200, all healthy in 4.9s. Not yet run at 100 — that's the one that answers the north star. Its first run hung indefinitely (`Bun.spawn()` + a `Bun.sleepSync()` poll on `exitCode` never observes the exit, because `sleepSync` blocks the event loop Bun needs to record it) — fixed by launching with `spawnSync` instead. If you see a `container-scale.ts` run sit for minutes with 0% CPU while its containers are already healthy, this bug is back; check for `Bun.spawn` + `sleepSync` polling anywhere in the file. |
|
|
182
|
-
| `scripts/autoresearch/layer-eval.sh` with the `layer-autoresearch` skill | **Verified** (4 runs). Run it from a worktree outside `~/Developer/Codex`. |
|
|
183
|
-
| `scripts/measure-idle-footprint.sh <container>` | Written but **never run**. |
|
|
184
|
-
| `tilt alpha tiltfile-result -f <Tiltfile>` | Runs Starlark without starting anything. `print` output is swallowed, so return data with `fail('RESULT' + encode_json(r))`. `load()` needs a literal path. |
|
|
185
|
-
| `tests/tilt-engine/test_runtime_container_footprint.py` | Runs the real generators through Tilt. |
|
|
186
|
-
|
|
187
|
-
## Environment traps
|
|
188
|
-
|
|
189
|
-
- **`.tdk/.project-id` is not gitignored by default and is easy to accidentally stage.** It's created the first time anything checks a Premium license (`getOrCreateProjectId` in `cli/src/generator/extension-fetch.ts`) - a random UUID sent alongside `TDK_LICENSE_KEY` to the license server for per-project tracking, not itself a secret credential, but it's local machine state that has no business in a shared repo. Found staged (`git status`, not yet committed - caught before it reached `origin/main`) in `tdk-erp-system` on 2026-09-26; `tdk-saas-starter` and `tdk-restaurant-example` had the same `.gitignore` gap with no file yet; `tdk-user-management` has **no `.gitignore` at all** (currently harmless - only 35 minimal tracked files, nothing sensitive - but unprotected the moment real development starts there). The CLI has no `.gitignore` template of its own to fix at the source (`tdk project` doesn't generate one; each starter repo ships its own) - check every project's `.gitignore` for `.tdk/.project-id` individually, and `git status`/`git log --all -- .tdk/.project-id` before assuming it's fine.
|
|
190
|
-
|
|
191
|
-
- **Auto-commit tool.** Something outside Claude commits and pushes edits in `~/Developer/Codex/*` repos to `origin/main` within about a minute, with messages like "skill" or "specs". Do experiments in a worktree outside that folder:
|
|
192
|
-
|
|
193
|
-
```bash
|
|
194
|
-
git worktree add ~/Developer/<name> <branch>
|
|
195
|
-
```
|
|
196
|
-
|
|
197
|
-
- **macOS shell:**
|
|
198
|
-
- There's no `timeout` command.
|
|
199
|
-
- `xargs -I` has a 255-character limit, so use the `-0` form above.
|
|
200
|
-
- System `python3` is 3.9: add `from __future__ import annotations` before using `X | None` types.
|
|
201
|
-
- Bash is version 3.2.
|
|
202
|
-
- **Lint only the files you touched:**
|
|
203
|
-
|
|
204
|
-
```bash
|
|
205
|
-
cd cli && ./node_modules/.bin/biome check <files>
|
|
206
|
-
```
|
|
207
|
-
|
|
208
|
-
`bun run lint -- <files>` still lints the whole repo, which has many pre-existing errors.
|
|
209
|
-
- **Failures that aren't yours:**
|
|
210
|
-
- pytest `test_docker_generator_bugs.py::test_expose_line_must_be_numeric_port` and `test_health_endpoints.py::test_overall_health_endpoint_structure` also fail on the unmodified code.
|
|
211
|
-
- vitest `saas-starter-integration` and `stack-features-e2e` time out when Docker is busy.
|
|
212
|
-
|
|
213
|
-
## Resolved since the first version of this skill
|
|
214
|
-
|
|
215
|
-
- **`tdk up <stack>` queuing every stack — fixed and verified (2026-09-26).** `tdk up finance` computed the right 16-service list but passed it to Tilt as bare positional args. The generated Tiltfile's focus filter (`Config.apply_focus` / `apply_focus_filter` in `profiles.star`) only reads the `--focus` flag - the positional-args catch-all it also defines (`cfg['args']`) is never read anywhere. So every stack-scoped `tdk up` silently fell back to Tilt's default "pre-alpha" phase and enabled every stack in it (verified: 247 enabled resources instead of 16-40). Fix: `buildTiltUpArgs` (`cli/src/utils/tilt.ts`) now passes `--focus=<stackName>`, reusing the Tiltfile's own dependency-aware domain expansion. **Argument order matters**: `--focus=...` must come after a `--` separator (`tilt up -f <path> -- --focus=finance <names>`) - `tilt up` rejects `--focus` as an unrecognized top-level flag otherwise (`tilt up --help` lists its real flags; custom Tiltfile config flags only reach `config.parse()` via `--`). Verified end-to-end: `tilt get uiresources` showed 402 Disabled / 24 Enabled for `tdk up finance` after the fix, and the 24 enabled were exactly finance's services plus required infra.
|
|
216
|
-
|
|
217
|
-
- **What actually overloads a real full `tdk up` at 100+ services — tested and it held (2026-09-26).** Ran a real, uncapped `tdk up` (no stack filter, all 107 services, Tilt doing real builds and reconciliation - not the synthetic/capped benchmark) with a self-killing watchdog sampling load/free-memory/`docker ps` latency every 5s. Result: **110/110 containers reached healthy, zero crashes, zero danger-threshold strikes**, over an 18-minute run. Load peaked around 20 during the busiest build phase (~20-30 containers starting at once) and then *settled back down* to 11-16 as more services came online, finishing at 11.45 with all 110 up. `docker ps` occasionally spiked to 2-6s under load but never approached the 10s `tdk doctor` timeout for long. This is the same scenario that froze the machine on 2026-09-25 (load 28-43, 99 MB free, `docker ps` 6-13s) - it did not recur. Caveat: this is one run on one machine state, and it isn't certain which fix (or whether the host simply had less competing load this time) made the difference; the single-process-CMD image rebuild only covered a minority of services (finance + a couple of supply_chain ones) at the time of this run, so a full image rebuild wasn't a factor. Re-run with the watchdog pattern above (`sysctl -n vm.loadavg`, `vm_stat` free pages, timed `docker ps`) before trusting a "it's fine now" claim on a different machine or after further engine changes.
|
|
218
|
-
|
|
219
|
-
## Still unknown
|
|
220
|
-
|
|
221
|
-
- **Whether Bun `--smol` (`BUN_OPTIONS=--smol`) saves memory.** Bun does read the variable, but the A/B test was inconclusive.
|
|
222
|
-
- **Why auth's production `node_modules` is 199 MB.**
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
name: Bug report
|
|
2
|
-
description: Something in tdk does not work as expected
|
|
3
|
-
labels: [bug]
|
|
4
|
-
body:
|
|
5
|
-
- type: textarea
|
|
6
|
-
id: what-happened
|
|
7
|
-
attributes:
|
|
8
|
-
label: What happened?
|
|
9
|
-
description: What did you run, what did you expect, and what happened instead?
|
|
10
|
-
validations:
|
|
11
|
-
required: true
|
|
12
|
-
- type: textarea
|
|
13
|
-
id: repro
|
|
14
|
-
attributes:
|
|
15
|
-
label: Steps to reproduce
|
|
16
|
-
placeholder: |
|
|
17
|
-
1. tdk project --yes
|
|
18
|
-
2. tdk up api
|
|
19
|
-
3. ...
|
|
20
|
-
validations:
|
|
21
|
-
required: true
|
|
22
|
-
- type: textarea
|
|
23
|
-
id: doctor
|
|
24
|
-
attributes:
|
|
25
|
-
label: Output of `tdk doctor`
|
|
26
|
-
render: shell
|
|
27
|
-
- type: input
|
|
28
|
-
id: version
|
|
29
|
-
attributes:
|
|
30
|
-
label: TDK version
|
|
31
|
-
description: Output of `tdk --version`
|
|
32
|
-
validations:
|
|
33
|
-
required: true
|
|
34
|
-
- type: dropdown
|
|
35
|
-
id: os
|
|
36
|
-
attributes:
|
|
37
|
-
label: Operating system
|
|
38
|
-
options: [macOS (Apple Silicon), macOS (Intel), Linux, Windows (WSL), Other]
|
|
39
|
-
validations:
|
|
40
|
-
required: true
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
blank_issues_enabled: true
|
|
2
|
-
contact_links:
|
|
3
|
-
- name: Request a Premium license (form)
|
|
4
|
-
url: https://tdk-landscape.github.io/tdk-website/#waitlist
|
|
5
|
-
about: Private request form on the TDK website
|
|
6
|
-
- name: Documentation
|
|
7
|
-
url: https://tdk-landscape.github.io/tdk-website
|
|
8
|
-
about: Guides, quickstart, and examples
|
|
9
|
-
- name: Report a security vulnerability
|
|
10
|
-
url: https://github.com/tdk-landscape/tdk-cli-core/security/advisories/new
|
|
11
|
-
about: Please report security issues privately
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
name: Feature request
|
|
2
|
-
description: Suggest an idea or improvement for TDK
|
|
3
|
-
labels: [enhancement]
|
|
4
|
-
body:
|
|
5
|
-
- type: textarea
|
|
6
|
-
id: problem
|
|
7
|
-
attributes:
|
|
8
|
-
label: What problem are you trying to solve?
|
|
9
|
-
validations:
|
|
10
|
-
required: true
|
|
11
|
-
- type: textarea
|
|
12
|
-
id: solution
|
|
13
|
-
attributes:
|
|
14
|
-
label: What would you like TDK to do?
|
|
15
|
-
- type: textarea
|
|
16
|
-
id: alternatives
|
|
17
|
-
attributes:
|
|
18
|
-
label: What do you do today instead?
|