create-forge 0.3.0__tar.gz → 0.3.2__tar.gz

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 (76) hide show
  1. {create_forge-0.3.0 → create_forge-0.3.2}/CHANGELOG.md +16 -0
  2. create_forge-0.3.2/PKG-INFO +214 -0
  3. create_forge-0.3.2/README.md +180 -0
  4. {create_forge-0.3.0 → create_forge-0.3.2}/docs/adr/README.md +6 -0
  5. {create_forge-0.3.0 → create_forge-0.3.2}/docs/roadmap-v2/README.md +3 -1
  6. {create_forge-0.3.0 → create_forge-0.3.2}/docs/roadmap-v2/roadmap/14-data-science-validation-and-rollout/README.md +13 -4
  7. {create_forge-0.3.0 → create_forge-0.3.2}/pyproject.toml +32 -5
  8. {create_forge-0.3.0 → create_forge-0.3.2}/src/create_forge/cli.py +155 -9
  9. create_forge-0.3.2/src/create_forge/runner.py +341 -0
  10. create_forge-0.3.2/src/create_forge/sources.py +86 -0
  11. {create_forge-0.3.0 → create_forge-0.3.2}/tests/conftest.py +1 -1
  12. {create_forge-0.3.0 → create_forge-0.3.2}/tests/installed_client.py +6 -5
  13. {create_forge-0.3.0 → create_forge-0.3.2}/tests/test_cli.py +53 -0
  14. create_forge-0.3.2/tests/test_copier_cache.py +130 -0
  15. {create_forge-0.3.0 → create_forge-0.3.2}/tests/test_e2e_installed_data_science.py +18 -0
  16. {create_forge-0.3.0 → create_forge-0.3.2}/tests/test_engine_contract.py +37 -0
  17. {create_forge-0.3.0 → create_forge-0.3.2}/tests/test_reference_client_boundary.py +1 -1
  18. create_forge-0.3.2/tests/test_runner.py +325 -0
  19. create_forge-0.3.2/tests/test_sources.py +307 -0
  20. {create_forge-0.3.0 → create_forge-0.3.2}/tests/test_update.py +35 -0
  21. create_forge-0.3.2/tests/test_workflows.py +171 -0
  22. create_forge-0.3.0/PKG-INFO +0 -312
  23. create_forge-0.3.0/README.md +0 -280
  24. create_forge-0.3.0/src/create_forge/runner.py +0 -162
  25. create_forge-0.3.0/tests/test_runner.py +0 -159
  26. {create_forge-0.3.0 → create_forge-0.3.2}/.gitignore +0 -0
  27. {create_forge-0.3.0 → create_forge-0.3.2}/LICENSE +0 -0
  28. {create_forge-0.3.0 → create_forge-0.3.2}/docs/roadmap-v1/README.md +0 -0
  29. {create_forge-0.3.0 → create_forge-0.3.2}/docs/roadmap-v1/roadmap/00-governance-and-principles/README.md +0 -0
  30. {create_forge-0.3.0 → create_forge-0.3.2}/docs/roadmap-v1/roadmap/01-python-core/README.md +0 -0
  31. {create_forge-0.3.0 → create_forge-0.3.2}/docs/roadmap-v1/roadmap/02-developer-experience/README.md +0 -0
  32. {create_forge-0.3.0 → create_forge-0.3.2}/docs/roadmap-v1/roadmap/03-quality-and-ci/README.md +0 -0
  33. {create_forge-0.3.0 → create_forge-0.3.2}/docs/roadmap-v1/roadmap/04-runtime-and-configuration/README.md +0 -0
  34. {create_forge-0.3.0 → create_forge-0.3.2}/docs/roadmap-v1/roadmap/05-security-and-supply-chain/README.md +0 -0
  35. {create_forge-0.3.0 → create_forge-0.3.2}/docs/roadmap-v1/roadmap/06-extension-and-composition-contract/README.md +0 -0
  36. {create_forge-0.3.0 → create_forge-0.3.2}/docs/roadmap-v1/roadmap/07-forge-cli-integration/README.md +0 -0
  37. {create_forge-0.3.0 → create_forge-0.3.2}/docs/roadmap-v1/roadmap/08-reference-archetype-validation/README.md +0 -0
  38. {create_forge-0.3.0 → create_forge-0.3.2}/docs/roadmap-v1/roadmap/09-blueprint-compatibility/README.md +0 -0
  39. {create_forge-0.3.0 → create_forge-0.3.2}/docs/roadmap-v2/roadmap/10-data-science-architecture-contract/README.md +0 -0
  40. {create_forge-0.3.0 → create_forge-0.3.2}/docs/roadmap-v2/roadmap/11-reusable-data-science-capabilities/README.md +0 -0
  41. {create_forge-0.3.0 → create_forge-0.3.2}/docs/roadmap-v2/roadmap/12-data-science-archetype/README.md +0 -0
  42. {create_forge-0.3.0 → create_forge-0.3.2}/docs/roadmap-v2/roadmap/13-data-science-cli-integration/README.md +0 -0
  43. {create_forge-0.3.0 → create_forge-0.3.2}/examples/README.md +0 -0
  44. {create_forge-0.3.0 → create_forge-0.3.2}/src/create_forge/__init__.py +0 -0
  45. {create_forge-0.3.0 → create_forge-0.3.2}/src/create_forge/compat.py +0 -0
  46. {create_forge-0.3.0 → create_forge-0.3.2}/src/create_forge/config.py +0 -0
  47. {create_forge-0.3.0 → create_forge-0.3.2}/src/create_forge/engine.py +0 -0
  48. {create_forge-0.3.0 → create_forge-0.3.2}/src/create_forge/models.py +0 -0
  49. {create_forge-0.3.0 → create_forge-0.3.2}/src/create_forge/pipeline.py +0 -0
  50. {create_forge-0.3.0 → create_forge-0.3.2}/src/create_forge/prompts.py +0 -0
  51. {create_forge-0.3.0 → create_forge-0.3.2}/src/create_forge/registry.py +0 -0
  52. {create_forge-0.3.0 → create_forge-0.3.2}/src/create_forge/spec.py +0 -0
  53. {create_forge-0.3.0 → create_forge-0.3.2}/src/create_forge/staging.py +0 -0
  54. {create_forge-0.3.0 → create_forge-0.3.2}/src/create_forge/templates.toml +0 -0
  55. {create_forge-0.3.0 → create_forge-0.3.2}/tests/__init__.py +0 -0
  56. {create_forge-0.3.0 → create_forge-0.3.2}/tests/test_adr.py +0 -0
  57. {create_forge-0.3.0 → create_forge-0.3.2}/tests/test_archetype_parity.py +0 -0
  58. {create_forge-0.3.0 → create_forge-0.3.2}/tests/test_component_selection.py +0 -0
  59. {create_forge-0.3.0 → create_forge-0.3.2}/tests/test_config.py +0 -0
  60. {create_forge-0.3.0 → create_forge-0.3.2}/tests/test_data_science_pipeline.py +0 -0
  61. {create_forge-0.3.0 → create_forge-0.3.2}/tests/test_downstream_reference.py +0 -0
  62. {create_forge-0.3.0 → create_forge-0.3.2}/tests/test_drift.py +0 -0
  63. {create_forge-0.3.0 → create_forge-0.3.2}/tests/test_e2e_engine_generation.py +0 -0
  64. {create_forge-0.3.0 → create_forge-0.3.2}/tests/test_e2e_generation.py +0 -0
  65. {create_forge-0.3.0 → create_forge-0.3.2}/tests/test_e2e_installed_rollout.py +0 -0
  66. {create_forge-0.3.0 → create_forge-0.3.2}/tests/test_engine_adapter.py +0 -0
  67. {create_forge-0.3.0 → create_forge-0.3.2}/tests/test_engine_cross_repository.py +0 -0
  68. {create_forge-0.3.0 → create_forge-0.3.2}/tests/test_labels.py +0 -0
  69. {create_forge-0.3.0 → create_forge-0.3.2}/tests/test_models.py +0 -0
  70. {create_forge-0.3.0 → create_forge-0.3.2}/tests/test_pipeline.py +0 -0
  71. {create_forge-0.3.0 → create_forge-0.3.2}/tests/test_policy_hook.py +0 -0
  72. {create_forge-0.3.0 → create_forge-0.3.2}/tests/test_prompts.py +0 -0
  73. {create_forge-0.3.0 → create_forge-0.3.2}/tests/test_registry.py +0 -0
  74. {create_forge-0.3.0 → create_forge-0.3.2}/tests/test_spec.py +0 -0
  75. {create_forge-0.3.0 → create_forge-0.3.2}/tests/test_staging.py +0 -0
  76. {create_forge-0.3.0 → create_forge-0.3.2}/tests/test_update_network.py +0 -0
@@ -1,6 +1,22 @@
1
1
  # Changelog
2
2
 
3
3
  Generated by git-cliff from Conventional Commits.
4
+ ## [0.3.2] - 2026-09-08
5
+
6
+ ### Features
7
+
8
+ - Diagnose the Copier template cache
9
+ ## [0.3.1] - 2026-09-08
10
+
11
+ ### Bug Fixes
12
+
13
+ - Prevent template source credentials from reaching CLI output (#144)
14
+ - Raise the Copier floor past the destination-escape advisories (#146)
15
+
16
+ ### Documentation
17
+
18
+ - Publish 0.3.0 and close the Data Science roadmap (#130)
19
+ - Add shared Forge user guide and simplify README (#131)
4
20
  ## [0.3.0] - 2026-09-05
5
21
 
6
22
  ### Bug Fixes
@@ -0,0 +1,214 @@
1
+ Metadata-Version: 2.5
2
+ Name: create-forge
3
+ Version: 0.3.2
4
+ Summary: Scaffold modern Python projects from maintained templates.
5
+ Project-URL: Homepage, https://github.com/Sandsy09/create-forge
6
+ Project-URL: Repository, https://github.com/Sandsy09/create-forge
7
+ Project-URL: Issues, https://github.com/Sandsy09/create-forge/issues
8
+ Project-URL: Changelog, https://github.com/Sandsy09/create-forge/blob/main/CHANGELOG.md
9
+ Author: Alex
10
+ License-Expression: MIT
11
+ License-File: LICENSE
12
+ Keywords: cookiecutter,copier,project,scaffold,template
13
+ Classifier: Development Status :: 3 - Alpha
14
+ Classifier: Environment :: Console
15
+ Classifier: Intended Audience :: Developers
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Programming Language :: Python :: 3.13
19
+ Classifier: Programming Language :: Python :: 3.14
20
+ Classifier: Topic :: Software Development :: Code Generators
21
+ Classifier: Typing :: Typed
22
+ Requires-Python: >=3.11
23
+ Requires-Dist: copier<10,>=9.16
24
+ Requires-Dist: platformdirs>=4.3.6
25
+ Requires-Dist: pydantic>=2.10
26
+ Requires-Dist: pyyaml>=6.0
27
+ Requires-Dist: questionary>=2.0
28
+ Requires-Dist: rich>=13.9
29
+ Requires-Dist: typer>=0.16
30
+ Provides-Extra: engine
31
+ Requires-Dist: forge-template<0.5,>=0.4.1; extra == 'engine'
32
+ Requires-Dist: uv<0.13,>=0.12; extra == 'engine'
33
+ Description-Content-Type: text/markdown
34
+
35
+ # create-forge
36
+
37
+ [![CI](https://github.com/Sandsy09/create-forge/actions/workflows/ci.yml/badge.svg)](https://github.com/Sandsy09/create-forge/actions/workflows/ci.yml)
38
+ [![PyPI](https://img.shields.io/pypi/v/create-forge)](https://pypi.org/project/create-forge/)
39
+
40
+ Create Python projects with packaging, quality checks, and a useful starting
41
+ structure already in place.
42
+
43
+ ```bash
44
+ uvx create-forge new
45
+ ```
46
+
47
+ Requires [uv](https://docs.astral.sh/uv/getting-started/installation/), Git,
48
+ and Python 3.11+ (uv can install Python for you). Configure your Git author
49
+ name and email before generating a default Library project: generation
50
+ creates local commits.
51
+
52
+ **[Read the Forge user guide](https://sandsy09.github.io/create-forge/)**
53
+ for walkthroughs, template choices, and troubleshooting.
54
+
55
+ ## How the repositories fit together
56
+
57
+ | Repository | What it provides |
58
+ | --- | --- |
59
+ | **create-forge** | The CLI: prompts, project creation, updates, and diagnostics. |
60
+ | [forge-template](https://github.com/Sandsy09/forge-template) | The project templates and composition engine used to generate files. |
61
+
62
+ You normally use the CLI without cloning either repository. Generated
63
+ projects do not depend on either Forge package at runtime.
64
+
65
+ ## Create your first project
66
+
67
+ ```bash
68
+ uvx create-forge new "My Library"
69
+ cd my-library
70
+ uv run poe check
71
+ ```
72
+
73
+ The default workflow creates an installable Library with a `src/` layout,
74
+ uv, Ruff, pytest with coverage, mypy and/or pyright, pre-commit hooks, and
75
+ GitHub Actions CI. Choose your build backend, versioning, license, and
76
+ dependency-update tooling. MkDocs documentation is optional.
77
+
78
+ The template is rendered by [Copier](https://copier.readthedocs.io/), which
79
+ also supports bringing later template improvements into existing projects.
80
+
81
+ ## Install and manage the tool
82
+
83
+ Use `uvx` for occasional runs, or install a persistent command:
84
+
85
+ ```bash
86
+ uv tool install create-forge
87
+ create-forge new
88
+ uv tool upgrade create-forge
89
+ ```
90
+
91
+ If the command is not on your PATH, run `uv tool update-shell` and restart
92
+ your terminal.
93
+
94
+ ### Choose a CLI version
95
+
96
+ ```bash
97
+ uvx create-forge@latest new
98
+ uvx create-forge@0.3.0 new
99
+ uv tool install "create-forge==0.3.0"
100
+ ```
101
+
102
+ Plain `uvx create-forge` can reuse a cached or persistently installed
103
+ version; `@latest` explicitly requests the latest release. Tool upgrades
104
+ respect the constraints used at installation, so an exact pin stays pinned.
105
+ To return to the latest release, run `uv tool install create-forge@latest`.
106
+ See [installation and versions](https://sandsy09.github.io/create-forge/installation/).
107
+
108
+ ## Everyday usage
109
+
110
+ | Command | Purpose |
111
+ | --- | --- |
112
+ | `uvx create-forge new` | Create a project interactively. |
113
+ | `uvx create-forge list` | List the bundled Copier templates. |
114
+ | `uvx create-forge update` | Update a Copier-generated project from its directory. |
115
+ | `uvx create-forge doctor` | Diagnose Python, Git, uv, and package compatibility. |
116
+ | `uvx create-forge config init` | Create an optional configuration file. |
117
+ | `uvx create-forge config show` | Show resolved configuration and its sources. |
118
+
119
+ For scripts and CI, provide a project name and skip questions with `--yes`:
120
+
121
+ ```bash
122
+ uvx create-forge new "My Library" --yes --data github_org=your-org --data build_backend=hatchling --data versioning=vcs
123
+ ```
124
+
125
+ Use `--path` to choose the destination and repeat `--data key=value` to
126
+ preset answers. Run `uvx create-forge new --help` for the default workflow's
127
+ options. Saved author details, GitHub organisation, and preferred template
128
+ are covered in the [CLI guide](https://sandsy09.github.io/create-forge/cli/).
129
+
130
+ ### Choose a template version or source
131
+
132
+ ```bash
133
+ uvx create-forge new "My Library" --template library --ref v0.4.1
134
+ uvx create-forge new "Custom Project" --template-url https://github.com/you/your-template
135
+ ```
136
+
137
+ `--ref` selects a Git revision in the **template repository**. It does not
138
+ select the CLI version. Without it, Copier uses the latest suitable release
139
+ tag. The bundled registry currently offers Library; upgrade the CLI to
140
+ receive registry changes.
141
+
142
+ Templates can execute code through generation and update tasks. Use custom
143
+ sources only when you trust their content; `--yes` also skips the custom
144
+ template confirmation.
145
+
146
+ ### Update a generated project
147
+
148
+ From a clean, committed Copier-generated project:
149
+
150
+ ```bash
151
+ uvx create-forge update --dry-run
152
+ uvx create-forge update
153
+ uv run poe check
154
+ ```
155
+
156
+ Keep `.copier-answers.yml` committed. Review the resulting diff and resolve
157
+ conflicts before committing. A dry run validates the update without applying
158
+ it; it does not produce a file-by-file diff. Use `update --ref v0.4.1` to
159
+ target a particular template version.
160
+
161
+ ## Preview: more project types and capabilities
162
+
163
+ The `0.3.0` CLI also provides an opt-in engine preview using
164
+ `forge-template>=0.4.1,<0.5`. These options are currently hidden from help.
165
+
166
+ | Project type | Use it for |
167
+ | --- | --- |
168
+ | Library | A distributable Python package with a choice of packaging modes. |
169
+ | CLI Application | A Typer application with a console command and tests. |
170
+ | Data Science | A Python package with a starter notebook and Jupyter tooling. |
171
+
172
+ Add **Jupyter** for notebook development or **Scientific Python** for NumPy,
173
+ pandas, Matplotlib, and scikit-learn. Data Science requires Jupyter;
174
+ Scientific Python is optional. These capabilities can also accompany the
175
+ other preview archetypes.
176
+
177
+ ```bash
178
+ uvx --from "create-forge[engine]==0.3.0" create-forge new "My Analysis" --engine-preview --archetype data-science --capability jupyter --yes --data license=mit
179
+ cd my-analysis
180
+ uv run --locked poe check
181
+ uv run poe notebook
182
+ ```
183
+
184
+ For regular preview use, install with `uv tool install "create-forge[engine]"`.
185
+ The [project guide](https://sandsy09.github.io/create-forge/projects/) explains
186
+ each type's output and links to complete recipes.
187
+
188
+ **Preview projects do not support `create-forge update`.** Their shared
189
+ tooling differs from the default Copier template; the preview does not
190
+ generate its CI workflows or install Git hooks. `--template`,
191
+ `--template-url`, and `--ref` apply only to the Copier workflow.
192
+
193
+ ## What's next
194
+
195
+ The Foundation and Data Science roadmaps are complete. Making the engine
196
+ the default generation workflow is a planned direction with no scheduled
197
+ release. Follow [open work](https://github.com/Sandsy09/create-forge/issues)
198
+ and [releases](https://github.com/Sandsy09/create-forge/releases) for updates,
199
+ or suggest a project type, capability, or guide you would find useful.
200
+
201
+ ## Feedback and contributing
202
+
203
+ - [Report a CLI problem or suggest a feature](https://github.com/Sandsy09/create-forge/issues/new/choose).
204
+ - [Request or correct documentation](https://github.com/Sandsy09/create-forge/issues/new?template=documentation.yml).
205
+ - [Report generated-content or capability problems](https://github.com/Sandsy09/forge-template/issues/new/choose).
206
+
207
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for development and PR checks, and
208
+ the [reference index](https://sandsy09.github.io/create-forge/reference/) for
209
+ engine APIs and architecture documents. Report vulnerabilities through
210
+ [SECURITY.md](SECURITY.md).
211
+
212
+ ## License
213
+
214
+ MIT — see [LICENSE](LICENSE).
@@ -0,0 +1,180 @@
1
+ # create-forge
2
+
3
+ [![CI](https://github.com/Sandsy09/create-forge/actions/workflows/ci.yml/badge.svg)](https://github.com/Sandsy09/create-forge/actions/workflows/ci.yml)
4
+ [![PyPI](https://img.shields.io/pypi/v/create-forge)](https://pypi.org/project/create-forge/)
5
+
6
+ Create Python projects with packaging, quality checks, and a useful starting
7
+ structure already in place.
8
+
9
+ ```bash
10
+ uvx create-forge new
11
+ ```
12
+
13
+ Requires [uv](https://docs.astral.sh/uv/getting-started/installation/), Git,
14
+ and Python 3.11+ (uv can install Python for you). Configure your Git author
15
+ name and email before generating a default Library project: generation
16
+ creates local commits.
17
+
18
+ **[Read the Forge user guide](https://sandsy09.github.io/create-forge/)**
19
+ for walkthroughs, template choices, and troubleshooting.
20
+
21
+ ## How the repositories fit together
22
+
23
+ | Repository | What it provides |
24
+ | --- | --- |
25
+ | **create-forge** | The CLI: prompts, project creation, updates, and diagnostics. |
26
+ | [forge-template](https://github.com/Sandsy09/forge-template) | The project templates and composition engine used to generate files. |
27
+
28
+ You normally use the CLI without cloning either repository. Generated
29
+ projects do not depend on either Forge package at runtime.
30
+
31
+ ## Create your first project
32
+
33
+ ```bash
34
+ uvx create-forge new "My Library"
35
+ cd my-library
36
+ uv run poe check
37
+ ```
38
+
39
+ The default workflow creates an installable Library with a `src/` layout,
40
+ uv, Ruff, pytest with coverage, mypy and/or pyright, pre-commit hooks, and
41
+ GitHub Actions CI. Choose your build backend, versioning, license, and
42
+ dependency-update tooling. MkDocs documentation is optional.
43
+
44
+ The template is rendered by [Copier](https://copier.readthedocs.io/), which
45
+ also supports bringing later template improvements into existing projects.
46
+
47
+ ## Install and manage the tool
48
+
49
+ Use `uvx` for occasional runs, or install a persistent command:
50
+
51
+ ```bash
52
+ uv tool install create-forge
53
+ create-forge new
54
+ uv tool upgrade create-forge
55
+ ```
56
+
57
+ If the command is not on your PATH, run `uv tool update-shell` and restart
58
+ your terminal.
59
+
60
+ ### Choose a CLI version
61
+
62
+ ```bash
63
+ uvx create-forge@latest new
64
+ uvx create-forge@0.3.0 new
65
+ uv tool install "create-forge==0.3.0"
66
+ ```
67
+
68
+ Plain `uvx create-forge` can reuse a cached or persistently installed
69
+ version; `@latest` explicitly requests the latest release. Tool upgrades
70
+ respect the constraints used at installation, so an exact pin stays pinned.
71
+ To return to the latest release, run `uv tool install create-forge@latest`.
72
+ See [installation and versions](https://sandsy09.github.io/create-forge/installation/).
73
+
74
+ ## Everyday usage
75
+
76
+ | Command | Purpose |
77
+ | --- | --- |
78
+ | `uvx create-forge new` | Create a project interactively. |
79
+ | `uvx create-forge list` | List the bundled Copier templates. |
80
+ | `uvx create-forge update` | Update a Copier-generated project from its directory. |
81
+ | `uvx create-forge doctor` | Diagnose Python, Git, uv, and package compatibility. |
82
+ | `uvx create-forge config init` | Create an optional configuration file. |
83
+ | `uvx create-forge config show` | Show resolved configuration and its sources. |
84
+
85
+ For scripts and CI, provide a project name and skip questions with `--yes`:
86
+
87
+ ```bash
88
+ uvx create-forge new "My Library" --yes --data github_org=your-org --data build_backend=hatchling --data versioning=vcs
89
+ ```
90
+
91
+ Use `--path` to choose the destination and repeat `--data key=value` to
92
+ preset answers. Run `uvx create-forge new --help` for the default workflow's
93
+ options. Saved author details, GitHub organisation, and preferred template
94
+ are covered in the [CLI guide](https://sandsy09.github.io/create-forge/cli/).
95
+
96
+ ### Choose a template version or source
97
+
98
+ ```bash
99
+ uvx create-forge new "My Library" --template library --ref v0.4.1
100
+ uvx create-forge new "Custom Project" --template-url https://github.com/you/your-template
101
+ ```
102
+
103
+ `--ref` selects a Git revision in the **template repository**. It does not
104
+ select the CLI version. Without it, Copier uses the latest suitable release
105
+ tag. The bundled registry currently offers Library; upgrade the CLI to
106
+ receive registry changes.
107
+
108
+ Templates can execute code through generation and update tasks. Use custom
109
+ sources only when you trust their content; `--yes` also skips the custom
110
+ template confirmation.
111
+
112
+ ### Update a generated project
113
+
114
+ From a clean, committed Copier-generated project:
115
+
116
+ ```bash
117
+ uvx create-forge update --dry-run
118
+ uvx create-forge update
119
+ uv run poe check
120
+ ```
121
+
122
+ Keep `.copier-answers.yml` committed. Review the resulting diff and resolve
123
+ conflicts before committing. A dry run validates the update without applying
124
+ it; it does not produce a file-by-file diff. Use `update --ref v0.4.1` to
125
+ target a particular template version.
126
+
127
+ ## Preview: more project types and capabilities
128
+
129
+ The `0.3.0` CLI also provides an opt-in engine preview using
130
+ `forge-template>=0.4.1,<0.5`. These options are currently hidden from help.
131
+
132
+ | Project type | Use it for |
133
+ | --- | --- |
134
+ | Library | A distributable Python package with a choice of packaging modes. |
135
+ | CLI Application | A Typer application with a console command and tests. |
136
+ | Data Science | A Python package with a starter notebook and Jupyter tooling. |
137
+
138
+ Add **Jupyter** for notebook development or **Scientific Python** for NumPy,
139
+ pandas, Matplotlib, and scikit-learn. Data Science requires Jupyter;
140
+ Scientific Python is optional. These capabilities can also accompany the
141
+ other preview archetypes.
142
+
143
+ ```bash
144
+ uvx --from "create-forge[engine]==0.3.0" create-forge new "My Analysis" --engine-preview --archetype data-science --capability jupyter --yes --data license=mit
145
+ cd my-analysis
146
+ uv run --locked poe check
147
+ uv run poe notebook
148
+ ```
149
+
150
+ For regular preview use, install with `uv tool install "create-forge[engine]"`.
151
+ The [project guide](https://sandsy09.github.io/create-forge/projects/) explains
152
+ each type's output and links to complete recipes.
153
+
154
+ **Preview projects do not support `create-forge update`.** Their shared
155
+ tooling differs from the default Copier template; the preview does not
156
+ generate its CI workflows or install Git hooks. `--template`,
157
+ `--template-url`, and `--ref` apply only to the Copier workflow.
158
+
159
+ ## What's next
160
+
161
+ The Foundation and Data Science roadmaps are complete. Making the engine
162
+ the default generation workflow is a planned direction with no scheduled
163
+ release. Follow [open work](https://github.com/Sandsy09/create-forge/issues)
164
+ and [releases](https://github.com/Sandsy09/create-forge/releases) for updates,
165
+ or suggest a project type, capability, or guide you would find useful.
166
+
167
+ ## Feedback and contributing
168
+
169
+ - [Report a CLI problem or suggest a feature](https://github.com/Sandsy09/create-forge/issues/new/choose).
170
+ - [Request or correct documentation](https://github.com/Sandsy09/create-forge/issues/new?template=documentation.yml).
171
+ - [Report generated-content or capability problems](https://github.com/Sandsy09/forge-template/issues/new/choose).
172
+
173
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for development and PR checks, and
174
+ the [reference index](https://sandsy09.github.io/create-forge/reference/) for
175
+ engine APIs and architecture documents. Report vulnerabilities through
176
+ [SECURITY.md](SECURITY.md).
177
+
178
+ ## License
179
+
180
+ MIT — see [LICENSE](LICENSE).
@@ -36,6 +36,12 @@ format](https://cognitect.com/blog/2011/11/15/documenting-architecture-decisions
36
36
  - [0031 — Adopt the reviewed forge-template 0.4.1 release](0031-adopt-the-reviewed-forge-template-0-4-1-release.md)
37
37
  - [0032 — Validate Data Science through the installed create-forge candidate](0032-validate-installed-data-science-generation.md)
38
38
  - [0033 — Complete the rollout regression and failure matrix at the installed boundary](0033-complete-rollout-regression-validation.md)
39
+ - [0034 — Publish create-forge 0.3.0 and close the Data Science roadmap](0034-publish-0-3-0-and-close-roadmap-v2.md)
40
+ - [0035 — Shared Forge user documentation](0035-shared-forge-user-documentation.md)
41
+ - [0036 — Keep credentials out of template sources and CLI diagnostics](0036-template-source-credentials.md)
42
+ - [0037 — Pin external Actions to reviewed commits and scope permissions per job](0037-immutable-workflow-actions.md)
43
+ - [0038 — Raise the Copier floor past the destination-escape advisories and hold uv](0038-dependency-floor-review.md)
44
+ - [0039 — Diagnose the Copier template cache](0039-copier-cache-diagnostics.md)
39
45
 
40
46
  Add a new record by copying the most recent one and incrementing the number.
41
47
  Records are immutable: supersede them rather than editing.
@@ -31,7 +31,9 @@ Provider Stage 14 is complete and published the reviewed
31
31
  `>=0.4.1,<0.5` lower bound and prepares create-forge `0.3.0`; CF-14.02
32
32
  (ADR 0032) completes installed-console Data Science validation, and CF-14.03
33
33
  (ADR 0033) completes the installed regression and failure matrix. CF-14.04
34
- publishes the client and closes the Stage 14 milestones.
34
+ (ADR 0034) published create-forge `0.3.0` to PyPI, verified the released pair,
35
+ and closed CF-EPIC-14 and both Stage 13 and Stage 14 milestones. **The Data
36
+ Science roadmap is complete in both repositories.**
35
37
 
36
38
  ## Repository roles
37
39
 
@@ -19,8 +19,11 @@ installed create-forge candidate under
19
19
  [ADR 0032](../../../adr/0032-validate-installed-data-science-generation.md).
20
20
  CF-14.03 completes the installed regression and failure matrix under
21
21
  [ADR 0033](../../../adr/0033-complete-rollout-regression-validation.md).
22
- CF-14.04 is the only remaining child: it publishes create-forge `0.3.0` and
23
- closes the Stage 14 milestones.
22
+ CF-14.04 published create-forge `0.3.0` to PyPI and closed CF-EPIC-14 and both
23
+ Stage 13 and Stage 14 milestones under
24
+ [ADR 0034](../../../adr/0034-publish-0-3-0-and-close-roadmap-v2.md). All four
25
+ children are complete; the Data Science roadmap is closed in both
26
+ repositories.
24
27
 
25
28
  ## Child sequence
26
29
 
@@ -60,8 +63,14 @@ create-forge then completes client rollout:
60
63
  [rollout regression and failure validation](https://github.com/Sandsy09/create-forge/blob/main/docs/rollout-regression-validation.md)
61
64
  record.
62
65
  4. [CF-14.04 / create-forge#114](https://github.com/Sandsy09/create-forge/issues/114)
63
- publishes create-forge 0.3.0 and completes roadmap v2; it remains blocked
64
- only by CF-14.03.
66
+ publishes create-forge 0.3.0 and completes roadmap v2. **Complete** under
67
+ [ADR 0034](../../../adr/0034-publish-0-3-0-and-close-roadmap-v2.md):
68
+ `create-forge` and `create-forge[engine]` `0.3.0` are on PyPI, tag `v0.3.0`
69
+ is released, the published pair generates and checks every archetype and the
70
+ engine-less default Copier path, and both Stage 13 and Stage 14 milestones
71
+ are closed. Canonical
72
+ [release 0.3.0 validation](https://github.com/Sandsy09/create-forge/blob/main/docs/release-0-3-0-validation.md)
73
+ record.
65
74
 
66
75
  ## Entry criteria
67
76
 
@@ -7,7 +7,7 @@ build-backend = "hatchling.build"
7
7
 
8
8
  [project]
9
9
  name = "create-forge"
10
- version = "0.3.0"
10
+ version = "0.3.2"
11
11
  description = "Scaffold modern Python projects from maintained templates."
12
12
  readme = "README.md"
13
13
  requires-python = ">=3.11"
@@ -29,12 +29,27 @@ classifiers = [
29
29
 
30
30
  dependencies = [
31
31
  # Pinned to a major: the Python API is public but evolves faster than the
32
- # CLI. runner.py is the only module that touches it.
33
- "copier>=9.4,<10",
34
- "typer>=0.15",
32
+ # CLI. runner.py is the only module that touches it. The lower bound was
33
+ # raised past the destination-escape advisories to 9.15.2 (ADR 0038), then
34
+ # to 9.16 (ADR 0039): 9.16 is the first release with the git-mirror cache
35
+ # and COPIER_CACHE_DIR that runner.py models and `doctor` reports -- a
36
+ # required-behaviour move, not an advisory one. The whole >=9.16 range is
37
+ # advisory-free. See docs/engine-updates.md.
38
+ "copier>=9.16,<10",
39
+ # >=0.16: typer 0.15.0-0.15.3 declare an uncapped click and break against
40
+ # click >=8.2 (TyperArgument.make_metavar), and 0.15.4 pins click <8.2.
41
+ # 0.16.0 is the first release that works with current click. The CI
42
+ # `floor` job (ADR 0038) is what caught the stale >=0.15 bound.
43
+ "typer>=0.16",
35
44
  "questionary>=2.0",
36
45
  "pydantic>=2.10",
37
46
  "rich>=13.9",
47
+ "pyyaml>=6.0",
48
+ # runner.py resolves Copier's cache directory by Copier's own documented
49
+ # rule (COPIER_CACHE_DIR, else the platformdirs user cache). Pinned to the
50
+ # bound Copier itself declares so it adds no resolution pressure and the
51
+ # CI `floor` job sees the version Copier's own floor would (ADR 0039).
52
+ "platformdirs>=4.3.6",
38
53
  ]
39
54
 
40
55
  [project.optional-dependencies]
@@ -47,7 +62,9 @@ dependencies = [
47
62
  # call. src/create_forge/engine.py is the only module that imports it;
48
63
  # src/create_forge/compat.py holds the range itself so cli.py's `doctor` can
49
64
  # report it without importing the engine. ADR 0021 adds bounded uv to finalise
50
- # the engine render's dynamic lockfile.
65
+ # the engine render's dynamic lockfile; ADR 0038 reviewed that `uv` floor
66
+ # against the advisory record and held it -- the whole `>=0.12,<0.13` range is
67
+ # already advisory-free.
51
68
  engine = ["forge-template>=0.4.1,<0.5", "uv>=0.12,<0.13"]
52
69
 
53
70
  [project.scripts]
@@ -60,6 +77,7 @@ Issues = "https://github.com/Sandsy09/create-forge/issues"
60
77
  Changelog = "https://github.com/Sandsy09/create-forge/blob/main/CHANGELOG.md"
61
78
 
62
79
  [dependency-groups]
80
+ docs = ["mkdocs>=1.6,<2", "mkdocs-material>=9.5,<10"]
63
81
  lint = ["ruff>=0.14", "pre-commit>=4.0"]
64
82
  test = [
65
83
  "pytest>=8.3",
@@ -71,6 +89,7 @@ test = [
71
89
  ]
72
90
  typecheck = ["mypy>=1.14", "types-PyYAML>=6.0"]
73
91
  dev = [
92
+ { include-group = "docs" },
74
93
  { include-group = "lint" },
75
94
  { include-group = "test" },
76
95
  { include-group = "typecheck" },
@@ -179,6 +198,8 @@ test = "pytest -m 'not network and not e2e'"
179
198
  "test:e2e" = "pytest -m e2e"
180
199
  check = ["format:check", "lint", "typecheck", "test"]
181
200
  changelog = "git-cliff --output CHANGELOG.md"
201
+ docs = "mkdocs serve"
202
+ "docs:build" = "mkdocs build --strict"
182
203
 
183
204
  # Verifies templates.toml actually ships in the wheel. This is the failure
184
205
  # that passes every local test and breaks on first uvx run. Builds into a
@@ -191,6 +212,12 @@ changelog = "git-cliff --output CHANGELOG.md"
191
212
  # via tests/test_adr.py; this is the standalone entry point.
192
213
  "check:adr" = "python scripts/adr.py"
193
214
 
215
+ # Verifies every workflow pins its external actions to a full commit SHA and
216
+ # keeps write permissions off the workflow level (ADR 0037). Also runs inside
217
+ # the fast test suite via tests/test_workflows.py; this is the standalone
218
+ # entry point -- see scripts/check_workflows.py.
219
+ "check:workflows" = "python scripts/check_workflows.py"
220
+
194
221
  # Reconciles a repo's GitHub labels against .github/labels.toml. Idempotent:
195
222
  # `gh label create --force` creates or updates. Pass extra args after `--`,
196
223
  # e.g. `uv run poe labels:sync --dry-run` or `--repo OWNER/NAME --prune`