From 3a99e52e55cf5f3aa802976c217dbf8947345da7 Mon Sep 17 00:00:00 2001 From: Jack McCarthy Date: Mon, 5 Oct 2026 20:13:38 -0400 Subject: [PATCH] Compact project new CLI wiring Put the project import and the help strings that fit within 120 columns on one line, as the rest of __main__.py does, and report an interrupt through the existing ProjectCreateError handler, which maps project-create-interrupted to exit 130. Drop the duplicated scripts/ reference loop in the setup guidance test. --- autoform_cli/__main__.py | 33 +++++++-------------------------- tests/test_skill_examples.py | 6 ------ 2 files changed, 7 insertions(+), 32 deletions(-) diff --git a/autoform_cli/__main__.py b/autoform_cli/__main__.py index 3335899a1..f8df17ac1 100644 --- a/autoform_cli/__main__.py +++ b/autoform_cli/__main__.py @@ -23,13 +23,7 @@ from .graph import GraphValidationError, load_graph from .impact import ImpactError, format_impact, revision_impact from .lean import build_linker, declaration_names, index_failure_message -from .project import ( - ProjectCatalogError, - ProjectCreateError, - create_project, - inspect_project, - load_release_catalog, -) +from .project import ProjectCatalogError, ProjectCreateError, create_project, inspect_project, load_release_catalog from .render import PublicationError, render_site from .runtime import RuntimeProjectionError, load_runtime_graph, resolve_runtime_paths from .scaffold import ScaffoldError, scaffold_project @@ -108,20 +102,12 @@ def main(argv: Sequence[str] | None = None) -> int: help="local port (default: choose an available port)", ) - project = subparsers.add_parser( - "project", help="create or inspect local projects and supported releases" - ) + project = subparsers.add_parser("project", help="create or inspect local projects and supported releases") project_subparsers = project.add_subparsers(dest="project_command", required=True) - project_new = project_subparsers.add_parser( - "new", help="atomically create a complete Lean and Autoform project" - ) - project_new.add_argument( - "target", nargs="?", help="new project directory (required); it must not exist" - ) + project_new = project_subparsers.add_parser("new", help="atomically create a complete Lean and Autoform project") + project_new.add_argument("target", nargs="?", help="new project directory (required); it must not exist") project_new.add_argument("--package", help="UpperCamelCase Lean package name (required)") - project_new.add_argument( - "--release", help="release id from 'project versions' (default: the recommended release)" - ) + project_new.add_argument("--release", help="release id from 'project versions' (default: the recommended release)") project_new.add_argument( "--lean-toolchain", help=( @@ -529,12 +515,7 @@ def _project(args: argparse.Namespace) -> int: "Project creation was interrupted and no project was published. A hidden " ".autoform-new-* stage may remain in the target parent; inspect it before removal." ) - error = ProjectCreateError("project-create-interrupted", message) - if args.json: - print(error.to_json()) - else: - print(f"error[{error.code}]: {error.message}", file=sys.stderr) - return 130 + raise ProjectCreateError("project-create-interrupted", message) from None if args.json: print(result.to_json()) else: @@ -564,7 +545,7 @@ def _project(args: argparse.Namespace) -> int: print(error.to_json()) else: print(f"error[{error.code}]: {error.message}", file=sys.stderr) - return 1 + return 130 if error.code == "project-create-interrupted" else 1 except ProjectCatalogError as error: if args.json: print(json.dumps({"error": {"code": "project-catalog-invalid", "message": str(error)}, "ok": False})) diff --git a/tests/test_skill_examples.py b/tests/test_skill_examples.py index ceecddc6b..e4ec9f2bc 100644 --- a/tests/test_skill_examples.py +++ b/tests/test_skill_examples.py @@ -191,12 +191,6 @@ def test_setup_guidance_uses_the_offline_atomic_project_creator(repo_root: Path) assert (repo_root / reference).is_file(), ( f"{document.relative_to(repo_root)} references missing helper {reference}" ) - for document in sorted(setup_root.rglob("*.md")): - text = document.read_text(encoding="utf-8") - for reference in re.findall(r"(? None: