@@ -879,11 +879,15 @@ def train_cmd( |
| 879 | store = for_dlm(parsed.frontmatter.dlm_id) | 879 | store = for_dlm(parsed.frontmatter.dlm_id) |
| 880 | store.ensure_layout() | 880 | store.ensure_layout() |
| 881 | | 881 | |
| 882 | - # `dlm init` writes a manifest as part of store provisioning. When | 882 | + # `dlm init` writes a manifest as part of store provisioning. Mirror |
| 883 | - # we just scaffolded a fresh `.dlm`, mirror that manifest write | 883 | + # that manifest write here when the store layout exists but has no |
| 884 | - # here too. Guarded by exists() so --rescaffold (same dlm_id, | 884 | + # manifest yet — covers two flows: |
| 885 | - # prior store) preserves training history. | 885 | + # - auto-scaffold via `dlm train <dir>` (just_scaffolded path) |
| 886 | - if just_scaffolded and not store.manifest.exists(): | 886 | + # - hand-authored .dlm with a fresh ULID that never went through |
| | 887 | + # `dlm init` (e.g. authored via the LSP / VSCode extension) |
| | 888 | + # License acceptance has already been validated upstream by this |
| | 889 | + # point, so we just record it. |
| | 890 | + if not store.manifest.exists(): |
| 887 | from dlm.base_models import is_gated | 891 | from dlm.base_models import is_gated |
| 888 | from dlm.base_models.license import require_acceptance | 892 | from dlm.base_models.license import require_acceptance |
| 889 | from dlm.store.manifest import Manifest, save_manifest | 893 | from dlm.store.manifest import Manifest, save_manifest |