@@ -142,11 +142,14 @@ def _previously_accepted(store_manifest_path: Path) -> bool: |
| 142 | 142 | """ |
| 143 | 143 | if not store_manifest_path.exists(): |
| 144 | 144 | return False |
| 145 | | - try: |
| 146 | | - from dlm.store.manifest import load_manifest |
| 145 | + from dlm.store.errors import ManifestCorruptError |
| 146 | + from dlm.store.manifest import load_manifest |
| 147 | 147 | |
| 148 | + try: |
| 148 | 149 | manifest = load_manifest(store_manifest_path) |
| 149 | | - except Exception: |
| 150 | + except (ManifestCorruptError, OSError): |
| 151 | + # Audit-05 N2: narrow from bare `Exception` so programmer bugs |
| 152 | + # propagate instead of being silently treated as "no acceptance." |
| 150 | 153 | return False |
| 151 | 154 | return manifest.license_acceptance is not None |
| 152 | 155 | |
@@ -248,6 +251,7 @@ def train_cmd( |
| 248 | 251 | |
| 249 | 252 | from dlm.base_models import GatedModelError |
| 250 | 253 | from dlm.base_models import resolve as resolve_base_model |
| 254 | + from dlm.doc.errors import DlmParseError |
| 251 | 255 | from dlm.doc.parser import parse_file |
| 252 | 256 | from dlm.hardware import doctor |
| 253 | 257 | from dlm.lock import LockMode, LockValidationError |
@@ -285,7 +289,11 @@ def train_cmd( |
| 285 | 289 | elif ignore_lock: |
| 286 | 290 | lock_mode = "ignore" |
| 287 | 291 | |
| 288 | | - parsed = parse_file(path) |
| 292 | + try: |
| 293 | + parsed = parse_file(path) |
| 294 | + except (DlmParseError, OSError) as exc: |
| 295 | + console.print(f"[red]error:[/red] {exc}") |
| 296 | + raise typer.Exit(code=1) from exc |
| 289 | 297 | try: |
| 290 | 298 | spec = resolve_base_model( |
| 291 | 299 | parsed.frontmatter.base_model, |
@@ -378,6 +386,7 @@ def prompt_cmd( |
| 378 | 386 | from rich.console import Console |
| 379 | 387 | |
| 380 | 388 | from dlm.base_models import resolve as resolve_base_model |
| 389 | + from dlm.doc.errors import DlmParseError |
| 381 | 390 | from dlm.doc.parser import parse_file |
| 382 | 391 | from dlm.hardware import doctor |
| 383 | 392 | from dlm.inference import AdapterNotFoundError, generate, load_for_inference |
@@ -488,6 +497,7 @@ def export_cmd( |
| 488 | 497 | |
| 489 | 498 | from dlm.base_models import GatedModelError, download_spec |
| 490 | 499 | from dlm.base_models import resolve as resolve_base_model |
| 500 | + from dlm.doc.errors import DlmParseError |
| 491 | 501 | from dlm.doc.parser import parse_file |
| 492 | 502 | from dlm.export import ( |
| 493 | 503 | ExportError, |
@@ -736,6 +746,7 @@ def show_cmd( |
| 736 | 746 | |
| 737 | 747 | from rich.console import Console |
| 738 | 748 | |
| 749 | + from dlm.doc.errors import DlmParseError |
| 739 | 750 | from dlm.doc.errors import DlmParseError |
| 740 | 751 | from dlm.doc.parser import parse_file |
| 741 | 752 | from dlm.store.errors import ManifestCorruptError |