create-forge 0.2.0__tar.gz → 0.3.0__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.2.0 → create_forge-0.3.0}/CHANGELOG.md +49 -1
  2. {create_forge-0.2.0 → create_forge-0.3.0}/PKG-INFO +115 -10
  3. create_forge-0.3.0/README.md +280 -0
  4. {create_forge-0.2.0 → create_forge-0.3.0}/docs/adr/README.md +15 -0
  5. {create_forge-0.2.0 → create_forge-0.3.0}/docs/roadmap-v1/README.md +29 -10
  6. {create_forge-0.2.0 → create_forge-0.3.0}/docs/roadmap-v1/roadmap/07-forge-cli-integration/README.md +8 -2
  7. create_forge-0.3.0/docs/roadmap-v1/roadmap/08-reference-archetype-validation/README.md +85 -0
  8. create_forge-0.3.0/docs/roadmap-v1/roadmap/09-blueprint-compatibility/README.md +62 -0
  9. create_forge-0.3.0/docs/roadmap-v2/README.md +55 -0
  10. create_forge-0.3.0/docs/roadmap-v2/roadmap/10-data-science-architecture-contract/README.md +61 -0
  11. create_forge-0.3.0/docs/roadmap-v2/roadmap/11-reusable-data-science-capabilities/README.md +59 -0
  12. create_forge-0.3.0/docs/roadmap-v2/roadmap/12-data-science-archetype/README.md +60 -0
  13. create_forge-0.3.0/docs/roadmap-v2/roadmap/13-data-science-cli-integration/README.md +97 -0
  14. create_forge-0.3.0/docs/roadmap-v2/roadmap/14-data-science-validation-and-rollout/README.md +92 -0
  15. create_forge-0.3.0/examples/README.md +91 -0
  16. {create_forge-0.2.0 → create_forge-0.3.0}/pyproject.toml +18 -11
  17. {create_forge-0.2.0 → create_forge-0.3.0}/src/create_forge/cli.py +508 -36
  18. {create_forge-0.2.0 → create_forge-0.3.0}/src/create_forge/compat.py +18 -8
  19. create_forge-0.3.0/src/create_forge/pipeline.py +310 -0
  20. create_forge-0.3.0/src/create_forge/prompts.py +601 -0
  21. {create_forge-0.2.0 → create_forge-0.3.0}/src/create_forge/runner.py +25 -11
  22. {create_forge-0.2.0 → create_forge-0.3.0}/src/create_forge/spec.py +169 -1
  23. {create_forge-0.2.0 → create_forge-0.3.0}/src/create_forge/staging.py +40 -3
  24. create_forge-0.3.0/tests/conftest.py +112 -0
  25. create_forge-0.3.0/tests/installed_client.py +307 -0
  26. create_forge-0.3.0/tests/test_archetype_parity.py +215 -0
  27. {create_forge-0.2.0 → create_forge-0.3.0}/tests/test_cli.py +457 -33
  28. create_forge-0.3.0/tests/test_component_selection.py +974 -0
  29. create_forge-0.3.0/tests/test_data_science_pipeline.py +538 -0
  30. create_forge-0.3.0/tests/test_downstream_reference.py +397 -0
  31. create_forge-0.3.0/tests/test_e2e_engine_generation.py +415 -0
  32. {create_forge-0.2.0 → create_forge-0.3.0}/tests/test_e2e_generation.py +24 -56
  33. create_forge-0.3.0/tests/test_e2e_installed_data_science.py +478 -0
  34. create_forge-0.3.0/tests/test_e2e_installed_rollout.py +712 -0
  35. {create_forge-0.2.0 → create_forge-0.3.0}/tests/test_engine_adapter.py +35 -15
  36. {create_forge-0.2.0 → create_forge-0.3.0}/tests/test_engine_contract.py +96 -6
  37. {create_forge-0.2.0 → create_forge-0.3.0}/tests/test_engine_cross_repository.py +90 -9
  38. create_forge-0.3.0/tests/test_pipeline.py +643 -0
  39. create_forge-0.3.0/tests/test_policy_hook.py +177 -0
  40. create_forge-0.3.0/tests/test_prompts.py +497 -0
  41. create_forge-0.3.0/tests/test_reference_client_boundary.py +87 -0
  42. {create_forge-0.2.0 → create_forge-0.3.0}/tests/test_runner.py +66 -0
  43. {create_forge-0.2.0 → create_forge-0.3.0}/tests/test_spec.py +3 -3
  44. {create_forge-0.2.0 → create_forge-0.3.0}/tests/test_staging.py +63 -1
  45. {create_forge-0.2.0 → create_forge-0.3.0}/tests/test_update.py +66 -3
  46. create_forge-0.2.0/README.md +0 -176
  47. create_forge-0.2.0/docs/roadmap-v1/roadmap/08-reference-archetype-validation/README.md +0 -58
  48. create_forge-0.2.0/docs/roadmap-v1/roadmap/09-blueprint-compatibility/README.md +0 -25
  49. create_forge-0.2.0/src/create_forge/pipeline.py +0 -141
  50. create_forge-0.2.0/src/create_forge/prompts.py +0 -231
  51. create_forge-0.2.0/tests/conftest.py +0 -17
  52. create_forge-0.2.0/tests/test_pipeline.py +0 -356
  53. create_forge-0.2.0/tests/test_prompts.py +0 -187
  54. {create_forge-0.2.0 → create_forge-0.3.0}/.gitignore +0 -0
  55. {create_forge-0.2.0 → create_forge-0.3.0}/LICENSE +0 -0
  56. {create_forge-0.2.0 → create_forge-0.3.0}/docs/roadmap-v1/roadmap/00-governance-and-principles/README.md +0 -0
  57. {create_forge-0.2.0 → create_forge-0.3.0}/docs/roadmap-v1/roadmap/01-python-core/README.md +0 -0
  58. {create_forge-0.2.0 → create_forge-0.3.0}/docs/roadmap-v1/roadmap/02-developer-experience/README.md +0 -0
  59. {create_forge-0.2.0 → create_forge-0.3.0}/docs/roadmap-v1/roadmap/03-quality-and-ci/README.md +0 -0
  60. {create_forge-0.2.0 → create_forge-0.3.0}/docs/roadmap-v1/roadmap/04-runtime-and-configuration/README.md +0 -0
  61. {create_forge-0.2.0 → create_forge-0.3.0}/docs/roadmap-v1/roadmap/05-security-and-supply-chain/README.md +0 -0
  62. {create_forge-0.2.0 → create_forge-0.3.0}/docs/roadmap-v1/roadmap/06-extension-and-composition-contract/README.md +0 -0
  63. {create_forge-0.2.0 → create_forge-0.3.0}/src/create_forge/__init__.py +0 -0
  64. {create_forge-0.2.0 → create_forge-0.3.0}/src/create_forge/config.py +0 -0
  65. {create_forge-0.2.0 → create_forge-0.3.0}/src/create_forge/engine.py +0 -0
  66. {create_forge-0.2.0 → create_forge-0.3.0}/src/create_forge/models.py +0 -0
  67. {create_forge-0.2.0 → create_forge-0.3.0}/src/create_forge/registry.py +0 -0
  68. {create_forge-0.2.0 → create_forge-0.3.0}/src/create_forge/templates.toml +0 -0
  69. {create_forge-0.2.0 → create_forge-0.3.0}/tests/__init__.py +0 -0
  70. {create_forge-0.2.0 → create_forge-0.3.0}/tests/test_adr.py +0 -0
  71. {create_forge-0.2.0 → create_forge-0.3.0}/tests/test_config.py +0 -0
  72. {create_forge-0.2.0 → create_forge-0.3.0}/tests/test_drift.py +0 -0
  73. {create_forge-0.2.0 → create_forge-0.3.0}/tests/test_labels.py +0 -0
  74. {create_forge-0.2.0 → create_forge-0.3.0}/tests/test_models.py +0 -0
  75. {create_forge-0.2.0 → create_forge-0.3.0}/tests/test_registry.py +0 -0
  76. {create_forge-0.2.0 → create_forge-0.3.0}/tests/test_update_network.py +0 -0
@@ -1,6 +1,54 @@
1
1
  # Changelog
2
2
 
3
3
  Generated by git-cliff from Conventional Commits.
4
+ ## [0.3.0] - 2026-09-05
5
+
6
+ ### Bug Fixes
7
+
8
+ - Handle template clone failures
9
+
10
+ ### Documentation
11
+
12
+ - Link canonical organisation policy model
13
+ - Sync canonical Stage 09 contracts
14
+ - Validate the reference-client boundary
15
+ - Add Data Science CLI roadmap
16
+ - Add Data Science CLI issue plan
17
+ - Link canonical Data Science project shape
18
+ - Link canonical Data Science capability contracts
19
+ - Link production Jupyter capability
20
+ - Link production Scientific Python capability
21
+ - Record forge-template 0.4.0 release
22
+ - Define generic component-selection CLI conventions (#122)
23
+
24
+ ### Features
25
+
26
+ - Define the downstream policy-consumption hook (#97)
27
+ - Add a downstream CLI integration reference (#98)
28
+ - Add dry-run support to update
29
+ - Prompt engine options from discovery, not the registry (#102)
30
+ - Adopt the forge-template 0.4 compatibility line (#121)
31
+ - Select capabilities and platforms from discovery (#123)
32
+ - Collect options for every selected component (#124)
33
+
34
+ ### Testing
35
+
36
+ - Validate the Data Science preview pipeline (#125)
37
+ - Validate installed Data Science generation (#127)
38
+ - Complete the rollout regression and failure matrix (#128)
39
+ ## [0.2.1] - 2026-08-31
40
+
41
+ ### Bug Fixes
42
+
43
+ - Generate engine project lockfiles
44
+
45
+ ### Refactor
46
+
47
+ - Derive component options from discovery, not an archetype list (#92)
48
+
49
+ ### Testing
50
+
51
+ - Extend end-to-end generation to the public engine (#93)
4
52
  ## [0.2.0] - 2026-08-30
5
53
 
6
54
  ### Documentation
@@ -36,7 +84,7 @@ Generated by git-cliff from Conventional Commits.
36
84
  - Implement the shared create pipeline behind an opt-in engine flag (#83)
37
85
  - Stage and finalise generation without leaving partials (#84)
38
86
  - Expose the CLI Application archetype through the engine path (#89)
39
- - Publish to PyPI and assign the first bounded engine range
87
+ - Publish to PyPI and assign the first bounded engine range (#90)
40
88
 
41
89
  ### Testing
42
90
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: create-forge
3
- Version: 0.2.0
3
+ Version: 0.3.0
4
4
  Summary: Scaffold modern Python projects from maintained templates.
5
5
  Project-URL: Homepage, https://github.com/Sandsy09/create-forge
6
6
  Project-URL: Repository, https://github.com/Sandsy09/create-forge
@@ -26,7 +26,8 @@ Requires-Dist: questionary>=2.0
26
26
  Requires-Dist: rich>=13.9
27
27
  Requires-Dist: typer>=0.15
28
28
  Provides-Extra: engine
29
- Requires-Dist: forge-template<0.4,>=0.3.1; extra == 'engine'
29
+ Requires-Dist: forge-template<0.5,>=0.4.1; extra == 'engine'
30
+ Requires-Dist: uv<0.13,>=0.12; extra == 'engine'
30
31
  Description-Content-Type: text/markdown
31
32
 
32
33
  # create-forge
@@ -88,6 +89,9 @@ uvx create-forge new "My Lib" --yes \
88
89
  --data build_backend=hatchling \
89
90
  --data versioning=vcs \
90
91
  --data type_checking=both
92
+
93
+ # Validate an update without changing project files
94
+ uvx create-forge update --dry-run
91
95
  ```
92
96
 
93
97
  | Command | What it does |
@@ -101,6 +105,9 @@ uvx create-forge new "My Lib" --yes \
101
105
  Useful flags on `new`: `--template/-t`, `--path/-p`, `--data/-d`, `--yes/-y`,
102
106
  `--ref`, `--dry-run`.
103
107
 
108
+ Useful flags on `update`: `--ref`, `--dry-run`. An update dry run validates the
109
+ requested template update but does not apply it or produce a file-by-file diff.
110
+
104
111
  ## Configuration
105
112
 
106
113
  Optional. Saves retyping the same answers:
@@ -145,6 +152,27 @@ and [component manifest protocol v1](https://github.com/Sandsy09/forge-template/
145
152
  are now implemented behind the canonical
146
153
  [stable template-engine API](https://github.com/Sandsy09/forge-template/blob/main/docs/template-engine-api.md)
147
154
  ([ADR 0029](https://github.com/Sandsy09/forge-template/blob/main/docs/adr/0029-stable-template-engine-api.md)).
155
+ The canonical
156
+ [organisation-policy protocol v1](https://github.com/Sandsy09/forge-template/blob/main/docs/organisation-policy.md)
157
+ defines how downstream clients resolve component-selection defaults and
158
+ constraints before constructing that effective ProjectSpec. CF-09.01
159
+ ([ADR 0022](docs/adr/0022-downstream-organisation-policy-hook.md)) delivered
160
+ the client-side consumption hook — this repository still resolves no policy
161
+ itself; see the canonical
162
+ [downstream policy-consumption contract](docs/organisation-policy-consumption.md).
163
+ The canonical
164
+ [safe extension contract](https://github.com/Sandsy09/forge-template/blob/main/docs/extension-points.md),
165
+ [organisation-policy fixture](https://github.com/Sandsy09/forge-template/blob/main/docs/organisation-policy-fixtures.md),
166
+ [compatibility policy](https://github.com/Sandsy09/forge-template/blob/main/docs/compatibility-policy.md),
167
+ and [no-copy proof](https://github.com/Sandsy09/forge-template/blob/main/docs/no-copy-inheritance.md)
168
+ complete forge-template's Stage 09 boundary. They deny arbitrary file
169
+ replacement and prove that a client can retain policy/orchestration concerns
170
+ without copying engine content or importing private engine modules. The
171
+ decisions are recorded by forge-template
172
+ [ADRs 0039](https://github.com/Sandsy09/forge-template/blob/main/docs/adr/0039-deny-policy-file-overrides.md),
173
+ [0040](https://github.com/Sandsy09/forge-template/blob/main/docs/adr/0040-organisation-policy-reference-fixture.md),
174
+ [0041](https://github.com/Sandsy09/forge-template/blob/main/docs/adr/0041-forge-blueprint-compatibility-policy.md),
175
+ and [0042](https://github.com/Sandsy09/forge-template/blob/main/docs/adr/0042-validate-no-copy-downstream-inheritance.md).
148
176
  The accepted
149
177
  [Library archetype contract](https://github.com/Sandsy09/forge-template/blob/main/docs/library-archetype.md)
150
178
  defines the first production component, implemented on `forge-template/main`
@@ -158,13 +186,26 @@ it in the same `0.3.0` release, and
158
186
  archetypes behind the hidden `new --engine-preview` flag's `--archetype`
159
187
  option. Neither change alters this CLI's default `new` answers, registry, or
160
188
  released dependency surface.
189
+ The Stage 08
190
+ [composition architecture review](https://github.com/Sandsy09/forge-template/blob/main/docs/composition-architecture-review.md)
191
+ is released in `forge-template 0.3.2`. On the engine-preview path,
192
+ `create-forge 0.2.1` now finalises the validated in-memory render with
193
+ `uv lock --directory <staging-directory>` before the atomic rename. The
194
+ result contains `uv.lock` and uses `uv run --locked poe check`, while the
195
+ default Copier path remains unchanged; see
196
+ [ADR 0021](docs/adr/0021-client-finalises-engine-lockfiles.md).
161
197
  The engine now also defines in-memory
162
198
  [generated-project validation](https://github.com/Sandsy09/forge-template/blob/main/docs/generated-project-validation.md)
163
199
  ([ADR 0030](https://github.com/Sandsy09/forge-template/blob/main/docs/adr/0030-generated-project-validation.md))
164
200
  before rendered output is returned; `render_project` already calls it before
165
201
  `--engine-preview` receives a result.
166
- This repository now depends on a real, released `forge-template` range —
167
- `>=0.3.1,<0.4`, published to PyPI as the optional `engine` extra
202
+ This repository depends on a real, released `forge-template` range —
203
+ `>=0.4.1,<0.5`. [ADR 0026](docs/adr/0026-adopt-the-0-4-engine-compatibility-line.md)
204
+ moved it from the first assigned `>=0.3.1,<0.4`, and
205
+ [ADR 0031](docs/adr/0031-adopt-the-reviewed-forge-template-0-4-1-release.md)
206
+ adopted the reviewed `0.4.1` release as its lower bound. It is published to
207
+ PyPI with
208
+ `uv>=0.12,<0.13` as the optional `engine` extra
168
209
  (`pip install 'create-forge[engine]'`; [#9](https://github.com/Sandsy09/create-forge/issues/9),
169
210
  [ADR 0018](docs/adr/0018-pypi-distribution-and-the-first-engine-range.md)) —
170
211
  rather than a development-only pin. That range is reachable only behind
@@ -190,12 +231,76 @@ issue.
190
231
 
191
232
  ## Using this at work
192
233
 
193
- In v0.1.x, organisations needing custom executable templates can fork this
194
- repository, point the bundled registry at their own templates, and maintain it
195
- internally. The accepted target makes a downstream client of the
196
- `forge-template` public engine the preferred route for organisation defaults
197
- and constraints. Forks remain appropriate for genuinely custom executable
198
- template content; see the [integration contract](docs/integration-contract.md).
234
+ The preferred route for organisation defaults, required selections, and
235
+ forbidden selections is a downstream client of the public `forge-template`
236
+ engine, resolving the canonical
237
+ [organisation-policy protocol](https://github.com/Sandsy09/forge-template/blob/main/docs/organisation-policy.md)
238
+ before constructing a ProjectSpec see the canonical
239
+ [downstream policy-consumption contract](docs/organisation-policy-consumption.md)
240
+ and [ADR 0022](docs/adr/0022-downstream-organisation-policy-hook.md).
241
+ [`examples/downstream_cli.py`](examples/downstream_cli.py) is a runnable,
242
+ second, independent client demonstrating exactly this — no dependency on
243
+ `create-forge` at all — see the canonical
244
+ [downstream client reference](docs/downstream-client-reference.md) and
245
+ [ADR 0023](docs/adr/0023-downstream-client-reference.md).
246
+ [ADR 0024](docs/adr/0024-reference-client-not-framework-dependency.md)
247
+ completes the Stage 09 boundary: `create-forge` is one reference client, not a
248
+ framework dependency for that client, the engine, or generated projects.
249
+
250
+ Forking this repository remains appropriate only for genuinely custom
251
+ executable template content that has no equivalent in the reviewed public
252
+ engine — point the bundled registry at your own templates and maintain the
253
+ fork internally, as v0.1.x always supported. See the
254
+ [integration contract](docs/integration-contract.md) for the full boundary.
255
+
256
+ The [accepted Data Science shape](https://github.com/Sandsy09/forge-template/blob/main/docs/data-science-archetype.md)
257
+ is an independent, package-backed, notebook-oriented third archetype. The
258
+ [initial capability contracts](https://github.com/Sandsy09/forge-template/blob/main/docs/data-science-capabilities.md)
259
+ define its required reusable Jupyter tooling and independently optional
260
+ Scientific Python stack. FT-11.02 implements Jupyter under [ADR
261
+ 0050](https://github.com/Sandsy09/forge-template/blob/main/docs/adr/0050-production-jupyter-capability.md),
262
+ and FT-11.03 implements Scientific Python under [ADR
263
+ 0051](https://github.com/Sandsy09/forge-template/blob/main/docs/adr/0051-production-scientific-python-capability.md).
264
+ Stage 11 then validated their production composition, and Stage 12 added and
265
+ validated the `data-science` archetype. The complete five-component catalogue
266
+ is published as
267
+ [`forge-template 0.4.0`](https://github.com/Sandsy09/forge-template/releases/tag/v0.4.0)
268
+ on [PyPI](https://pypi.org/project/forge-template/0.4.0/); its
269
+ [published acceptance evidence](https://github.com/Sandsy09/forge-template/blob/main/docs/data-science-validation.md#published-040-release-verification)
270
+ was the immutable provider hand-off to Stage 13.
271
+ [CF-13.01](https://github.com/Sandsy09/create-forge/issues/106)
272
+ ([ADR 0026](docs/adr/0026-adopt-the-0-4-engine-compatibility-line.md)) adopted
273
+ `forge-template>=0.4,<0.5`, so the engine-preview path now discovers all five
274
+ components, and CF-13.02
275
+ ([ADR 0027](docs/adr/0027-generic-component-selection-conventions.md)) fixed
276
+ how they are selected in the canonical
277
+ [component selection contract](docs/component-selection.md). CF-13.03
278
+ ([ADR 0028](docs/adr/0028-discovery-driven-component-selection.md)) implemented
279
+ capability and platform selection behind `--engine-preview`, and CF-13.04
280
+ ([ADR 0029](docs/adr/0029-per-component-option-collection.md)) per-component
281
+ option collection and `--component-option`. CF-13.05
282
+ ([ADR 0030](docs/adr/0030-data-science-preview-pipeline-validation.md))
283
+ validated the Data Science composition through the shared pipeline against the
284
+ released engine, closing **Stage 13**; Stage 14 then takes the released client
285
+ and engine pair through installed-console validation and rollout. CF-14.01
286
+ ([ADR 0031](docs/adr/0031-adopt-the-reviewed-forge-template-0-4-1-release.md))
287
+ adopts the reviewed `forge-template 0.4.1` release as the new
288
+ `>=0.4.1,<0.5` lower bound and prepares create-forge `0.3.0`. CF-14.02
289
+ ([ADR 0032](docs/adr/0032-validate-installed-data-science-generation.md))
290
+ validates both Data Science compositions through the installed candidate
291
+ wheel, and CF-14.03
292
+ ([ADR 0033](docs/adr/0033-complete-rollout-regression-validation.md)) reuses it
293
+ for the Library / CLI Application engine paths, the engine-less default Copier
294
+ path, a real out-of-range engine, and the full failure matrix; CF-14.04 owns
295
+ publication. See the canonical
296
+ [installed Data Science validation](docs/installed-data-science-validation.md)
297
+ and
298
+ [rollout regression and failure validation](docs/rollout-regression-validation.md)
299
+ records. The
300
+ [Data Science roadmap](docs/roadmap-v2/README.md) runs Stages 10–14.
301
+ All 24 child issues are filed and attached across both repositories; GitHub
302
+ issue bodies and native relationships are authoritative. The default Copier
303
+ path remains unchanged.
199
304
 
200
305
  ## Contributing
201
306
 
@@ -0,0 +1,280 @@
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
+
5
+ Scaffold modern Python projects from maintained templates — and pull template
6
+ improvements back into projects you generated months ago.
7
+
8
+ ```bash
9
+ uvx create-forge new
10
+ ```
11
+
12
+ No install step. Requires [uv](https://docs.astral.sh/uv/) and git.
13
+
14
+ ## Why
15
+
16
+ Most project generators are fire-and-forget: you scaffold once, and from that
17
+ moment your project drifts away from the template. Six months later the template
18
+ has better lint rules, a security fix in CI, and a newer toolchain — and no path
19
+ to get any of it into projects already in the wild.
20
+
21
+ create-forge is built on [Copier](https://copier.readthedocs.io/), which does a
22
+ three-way merge between the template version your project was generated from and
23
+ the latest one. Local edits survive; template changes arrive.
24
+
25
+ ```bash
26
+ uvx create-forge update
27
+ ```
28
+
29
+ ## What you get
30
+
31
+ Every generated project ships with:
32
+
33
+ - **[uv](https://docs.astral.sh/uv/)** for packaging and dependency management
34
+ - **[Ruff](https://docs.astral.sh/ruff/)** for linting and formatting
35
+ - **mypy** or **pyright** (or both) for type checking
36
+ - **pytest** with coverage
37
+ - **pre-commit** hooks, including Conventional Commits enforcement
38
+ - **GitHub Actions** CI, with a test matrix across your supported Python versions
39
+ - **Renovate** or **Dependabot** for dependency updates
40
+ - `README`, `CONTRIBUTING`, `SECURITY`, `CHANGELOG`, issue and PR templates
41
+ - Optionally: a MkDocs documentation site and ADR scaffolding
42
+
43
+ Choices you make at scaffold time — build backend, versioning strategy, license,
44
+ type checker — are remembered, so updates respect them.
45
+
46
+ ## Usage
47
+
48
+ ```bash
49
+ # Interactive
50
+ uvx create-forge new
51
+
52
+ # Named up front
53
+ uvx create-forge new "Credit Risk Utils"
54
+
55
+ # Non-interactive, for scripts and CI
56
+ uvx create-forge new "My Lib" --yes \
57
+ --data build_backend=hatchling \
58
+ --data versioning=vcs \
59
+ --data type_checking=both
60
+
61
+ # Validate an update without changing project files
62
+ uvx create-forge update --dry-run
63
+ ```
64
+
65
+ | Command | What it does |
66
+ | --- | --- |
67
+ | `new` | Create a project |
68
+ | `list` | Show available templates |
69
+ | `update` | Pull template changes into an existing project |
70
+ | `doctor` | Check your environment can scaffold and update |
71
+ | `config` | Inspect or initialise your saved configuration |
72
+
73
+ Useful flags on `new`: `--template/-t`, `--path/-p`, `--data/-d`, `--yes/-y`,
74
+ `--ref`, `--dry-run`.
75
+
76
+ Useful flags on `update`: `--ref`, `--dry-run`. An update dry run validates the
77
+ requested template update but does not apply it or produce a file-by-file diff.
78
+
79
+ ## Configuration
80
+
81
+ Optional. Saves retyping the same answers:
82
+
83
+ ```toml
84
+ # ~/.config/create-forge/config.toml
85
+ author_name = "Your Name"
86
+ author_email = "you@example.com"
87
+ github_org = "your-org"
88
+ default_template = "library"
89
+ ```
90
+
91
+ `create-forge config init` writes a commented starter file at that path
92
+ without overwriting one that already exists. `create-forge config show`
93
+ prints the resolved values and where each came from.
94
+
95
+ `github_org` pre-fills its prompt — you're still asked, just with the answer
96
+ already typed in. `author_name` and `author_email` aren't prompted for at all,
97
+ so a configured value is applied directly. `default_template` picks which
98
+ template `new` offers first, interactively or under `--yes`.
99
+
100
+ Every key can be overridden with an environment variable —
101
+ `FORGE_GITHUB_ORG` and so on — or a command line flag. Precedence is
102
+ config < environment < `--data` < an interactive answer.
103
+
104
+ ## Templates
105
+
106
+ Run `create-forge list` for what your installed version offers. The registry is
107
+ bundled with each release, so new templates arrive when you update the tool.
108
+
109
+ To use your own template:
110
+
111
+ ```bash
112
+ uvx create-forge new --template-url https://github.com/you/your-template
113
+ ```
114
+
115
+ This describes the released v0.1.x architecture. Forge has accepted a future
116
+ [public-engine integration contract](docs/integration-contract.md) in which a
117
+ versioned `forge-template` package owns discovery and rendering. Its strict
118
+ [ProjectSpec protocol v1](https://github.com/Sandsy09/forge-template/blob/main/docs/project-spec.md)
119
+ and [component manifest protocol v1](https://github.com/Sandsy09/forge-template/blob/main/docs/component-manifests.md)
120
+ are now implemented behind the canonical
121
+ [stable template-engine API](https://github.com/Sandsy09/forge-template/blob/main/docs/template-engine-api.md)
122
+ ([ADR 0029](https://github.com/Sandsy09/forge-template/blob/main/docs/adr/0029-stable-template-engine-api.md)).
123
+ The canonical
124
+ [organisation-policy protocol v1](https://github.com/Sandsy09/forge-template/blob/main/docs/organisation-policy.md)
125
+ defines how downstream clients resolve component-selection defaults and
126
+ constraints before constructing that effective ProjectSpec. CF-09.01
127
+ ([ADR 0022](docs/adr/0022-downstream-organisation-policy-hook.md)) delivered
128
+ the client-side consumption hook — this repository still resolves no policy
129
+ itself; see the canonical
130
+ [downstream policy-consumption contract](docs/organisation-policy-consumption.md).
131
+ The canonical
132
+ [safe extension contract](https://github.com/Sandsy09/forge-template/blob/main/docs/extension-points.md),
133
+ [organisation-policy fixture](https://github.com/Sandsy09/forge-template/blob/main/docs/organisation-policy-fixtures.md),
134
+ [compatibility policy](https://github.com/Sandsy09/forge-template/blob/main/docs/compatibility-policy.md),
135
+ and [no-copy proof](https://github.com/Sandsy09/forge-template/blob/main/docs/no-copy-inheritance.md)
136
+ complete forge-template's Stage 09 boundary. They deny arbitrary file
137
+ replacement and prove that a client can retain policy/orchestration concerns
138
+ without copying engine content or importing private engine modules. The
139
+ decisions are recorded by forge-template
140
+ [ADRs 0039](https://github.com/Sandsy09/forge-template/blob/main/docs/adr/0039-deny-policy-file-overrides.md),
141
+ [0040](https://github.com/Sandsy09/forge-template/blob/main/docs/adr/0040-organisation-policy-reference-fixture.md),
142
+ [0041](https://github.com/Sandsy09/forge-template/blob/main/docs/adr/0041-forge-blueprint-compatibility-policy.md),
143
+ and [0042](https://github.com/Sandsy09/forge-template/blob/main/docs/adr/0042-validate-no-copy-downstream-inheritance.md).
144
+ The accepted
145
+ [Library archetype contract](https://github.com/Sandsy09/forge-template/blob/main/docs/library-archetype.md)
146
+ defines the first production component, implemented on `forge-template/main`
147
+ and released at `0.3.0`. The accepted
148
+ [CLI Application archetype contract](https://github.com/Sandsy09/forge-template/blob/main/docs/cli-application-archetype.md)
149
+ selects the optionless engine-owned `cli` archetype and derives its console
150
+ command from `ProjectSpec.project.repository_name`;
151
+ [FT-08.04](https://github.com/Sandsy09/forge-template/issues/4) implemented
152
+ it in the same `0.3.0` release, and
153
+ [CF-08.02](https://github.com/Sandsy09/create-forge/issues/10) exposes both
154
+ archetypes behind the hidden `new --engine-preview` flag's `--archetype`
155
+ option. Neither change alters this CLI's default `new` answers, registry, or
156
+ released dependency surface.
157
+ The Stage 08
158
+ [composition architecture review](https://github.com/Sandsy09/forge-template/blob/main/docs/composition-architecture-review.md)
159
+ is released in `forge-template 0.3.2`. On the engine-preview path,
160
+ `create-forge 0.2.1` now finalises the validated in-memory render with
161
+ `uv lock --directory <staging-directory>` before the atomic rename. The
162
+ result contains `uv.lock` and uses `uv run --locked poe check`, while the
163
+ default Copier path remains unchanged; see
164
+ [ADR 0021](docs/adr/0021-client-finalises-engine-lockfiles.md).
165
+ The engine now also defines in-memory
166
+ [generated-project validation](https://github.com/Sandsy09/forge-template/blob/main/docs/generated-project-validation.md)
167
+ ([ADR 0030](https://github.com/Sandsy09/forge-template/blob/main/docs/adr/0030-generated-project-validation.md))
168
+ before rendered output is returned; `render_project` already calls it before
169
+ `--engine-preview` receives a result.
170
+ This repository depends on a real, released `forge-template` range —
171
+ `>=0.4.1,<0.5`. [ADR 0026](docs/adr/0026-adopt-the-0-4-engine-compatibility-line.md)
172
+ moved it from the first assigned `>=0.3.1,<0.4`, and
173
+ [ADR 0031](docs/adr/0031-adopt-the-reviewed-forge-template-0-4-1-release.md)
174
+ adopted the reviewed `0.4.1` release as its lower bound. It is published to
175
+ PyPI with
176
+ `uv>=0.12,<0.13` as the optional `engine` extra
177
+ (`pip install 'create-forge[engine]'`; [#9](https://github.com/Sandsy09/create-forge/issues/9),
178
+ [ADR 0018](docs/adr/0018-pypi-distribution-and-the-first-engine-range.md)) —
179
+ rather than a development-only pin. That range is reachable only behind
180
+ `--engine-preview`; the current registry and `--template-url` behaviour
181
+ remain unchanged until the complete, tested cutover is released — at which
182
+ point `--engine-source`/`--engine-ref` (see the
183
+ [engine resolution contract](docs/engine-resolution.md)) take over this role,
184
+ not `--template-url`.
185
+
186
+ ## Security
187
+
188
+ **create-forge executes code from the template it clones.** Copier templates can
189
+ declare post-generation tasks, and this tool runs them — that is how a generated
190
+ project arrives already git-initialised with hooks installed.
191
+
192
+ The template addresses are compiled into each release rather than fetched at
193
+ runtime or read from user configuration, so the only code trusted by default is
194
+ code published alongside the tool. `--template-url` bypasses that, and prompts
195
+ for confirmation before doing so. Point it only at repositories you trust.
196
+
197
+ Report vulnerabilities per [SECURITY.md](SECURITY.md) rather than in a public
198
+ issue.
199
+
200
+ ## Using this at work
201
+
202
+ The preferred route for organisation defaults, required selections, and
203
+ forbidden selections is a downstream client of the public `forge-template`
204
+ engine, resolving the canonical
205
+ [organisation-policy protocol](https://github.com/Sandsy09/forge-template/blob/main/docs/organisation-policy.md)
206
+ before constructing a ProjectSpec — see the canonical
207
+ [downstream policy-consumption contract](docs/organisation-policy-consumption.md)
208
+ and [ADR 0022](docs/adr/0022-downstream-organisation-policy-hook.md).
209
+ [`examples/downstream_cli.py`](examples/downstream_cli.py) is a runnable,
210
+ second, independent client demonstrating exactly this — no dependency on
211
+ `create-forge` at all — see the canonical
212
+ [downstream client reference](docs/downstream-client-reference.md) and
213
+ [ADR 0023](docs/adr/0023-downstream-client-reference.md).
214
+ [ADR 0024](docs/adr/0024-reference-client-not-framework-dependency.md)
215
+ completes the Stage 09 boundary: `create-forge` is one reference client, not a
216
+ framework dependency for that client, the engine, or generated projects.
217
+
218
+ Forking this repository remains appropriate only for genuinely custom
219
+ executable template content that has no equivalent in the reviewed public
220
+ engine — point the bundled registry at your own templates and maintain the
221
+ fork internally, as v0.1.x always supported. See the
222
+ [integration contract](docs/integration-contract.md) for the full boundary.
223
+
224
+ The [accepted Data Science shape](https://github.com/Sandsy09/forge-template/blob/main/docs/data-science-archetype.md)
225
+ is an independent, package-backed, notebook-oriented third archetype. The
226
+ [initial capability contracts](https://github.com/Sandsy09/forge-template/blob/main/docs/data-science-capabilities.md)
227
+ define its required reusable Jupyter tooling and independently optional
228
+ Scientific Python stack. FT-11.02 implements Jupyter under [ADR
229
+ 0050](https://github.com/Sandsy09/forge-template/blob/main/docs/adr/0050-production-jupyter-capability.md),
230
+ and FT-11.03 implements Scientific Python under [ADR
231
+ 0051](https://github.com/Sandsy09/forge-template/blob/main/docs/adr/0051-production-scientific-python-capability.md).
232
+ Stage 11 then validated their production composition, and Stage 12 added and
233
+ validated the `data-science` archetype. The complete five-component catalogue
234
+ is published as
235
+ [`forge-template 0.4.0`](https://github.com/Sandsy09/forge-template/releases/tag/v0.4.0)
236
+ on [PyPI](https://pypi.org/project/forge-template/0.4.0/); its
237
+ [published acceptance evidence](https://github.com/Sandsy09/forge-template/blob/main/docs/data-science-validation.md#published-040-release-verification)
238
+ was the immutable provider hand-off to Stage 13.
239
+ [CF-13.01](https://github.com/Sandsy09/create-forge/issues/106)
240
+ ([ADR 0026](docs/adr/0026-adopt-the-0-4-engine-compatibility-line.md)) adopted
241
+ `forge-template>=0.4,<0.5`, so the engine-preview path now discovers all five
242
+ components, and CF-13.02
243
+ ([ADR 0027](docs/adr/0027-generic-component-selection-conventions.md)) fixed
244
+ how they are selected in the canonical
245
+ [component selection contract](docs/component-selection.md). CF-13.03
246
+ ([ADR 0028](docs/adr/0028-discovery-driven-component-selection.md)) implemented
247
+ capability and platform selection behind `--engine-preview`, and CF-13.04
248
+ ([ADR 0029](docs/adr/0029-per-component-option-collection.md)) per-component
249
+ option collection and `--component-option`. CF-13.05
250
+ ([ADR 0030](docs/adr/0030-data-science-preview-pipeline-validation.md))
251
+ validated the Data Science composition through the shared pipeline against the
252
+ released engine, closing **Stage 13**; Stage 14 then takes the released client
253
+ and engine pair through installed-console validation and rollout. CF-14.01
254
+ ([ADR 0031](docs/adr/0031-adopt-the-reviewed-forge-template-0-4-1-release.md))
255
+ adopts the reviewed `forge-template 0.4.1` release as the new
256
+ `>=0.4.1,<0.5` lower bound and prepares create-forge `0.3.0`. CF-14.02
257
+ ([ADR 0032](docs/adr/0032-validate-installed-data-science-generation.md))
258
+ validates both Data Science compositions through the installed candidate
259
+ wheel, and CF-14.03
260
+ ([ADR 0033](docs/adr/0033-complete-rollout-regression-validation.md)) reuses it
261
+ for the Library / CLI Application engine paths, the engine-less default Copier
262
+ path, a real out-of-range engine, and the full failure matrix; CF-14.04 owns
263
+ publication. See the canonical
264
+ [installed Data Science validation](docs/installed-data-science-validation.md)
265
+ and
266
+ [rollout regression and failure validation](docs/rollout-regression-validation.md)
267
+ records. The
268
+ [Data Science roadmap](docs/roadmap-v2/README.md) runs Stages 10–14.
269
+ All 24 child issues are filed and attached across both repositories; GitHub
270
+ issue bodies and native relationships are authoritative. The default Copier
271
+ path remains unchanged.
272
+
273
+ ## Contributing
274
+
275
+ See [CONTRIBUTING.md](CONTRIBUTING.md). Issues and pull requests welcome.
276
+ Significant design decisions are recorded in [docs/adr/](docs/adr/).
277
+
278
+ ## License
279
+
280
+ MIT — see [LICENSE](LICENSE).
@@ -21,6 +21,21 @@ format](https://cognitect.com/blog/2011/11/15/documenting-architecture-decisions
21
21
  - [0016 — Test the reference client end to end against the released template](0016-end-to-end-reference-client-tests.md)
22
22
  - [0017 — Expose the CLI Application archetype through discovery-driven selection](0017-cli-application-archetype-exposure.md)
23
23
  - [0018 — Publish to PyPI and assign the first bounded engine range](0018-pypi-distribution-and-the-first-engine-range.md)
24
+ - [0019 — CLI archetype-parity review](0019-cli-archetype-parity-review.md)
25
+ - [0020 — Test the public engine path end to end](0020-engine-path-end-to-end-tests.md)
26
+ - [0021 — Finalise engine-generated lockfiles in the client](0021-client-finalises-engine-lockfiles.md)
27
+ - [0022 — Downstream organisation-policy consumption hook](0022-downstream-organisation-policy-hook.md)
28
+ - [0023 — Downstream client reference](0023-downstream-client-reference.md)
29
+ - [0024 — Keep create-forge a reference client, not a framework dependency](0024-reference-client-not-framework-dependency.md)
30
+ - [0025 — Prompt the engine path from discovery, not the Copier registry](0025-engine-native-prompt-flow.md)
31
+ - [0026 — Adopt the forge-template 0.4 compatibility line](0026-adopt-the-0-4-engine-compatibility-line.md)
32
+ - [0027 — Select components from discovery, with owner-qualified options](0027-generic-component-selection-conventions.md)
33
+ - [0028 — Select capabilities and platforms from one discovered catalogue](0028-discovery-driven-component-selection.md)
34
+ - [0029 — Collect and serialise options for every selected component](0029-per-component-option-collection.md)
35
+ - [0030 — Validate the Data Science preview pipeline against the released engine](0030-data-science-preview-pipeline-validation.md)
36
+ - [0031 — Adopt the reviewed forge-template 0.4.1 release](0031-adopt-the-reviewed-forge-template-0-4-1-release.md)
37
+ - [0032 — Validate Data Science through the installed create-forge candidate](0032-validate-installed-data-science-generation.md)
38
+ - [0033 — Complete the rollout regression and failure matrix at the installed boundary](0033-complete-rollout-regression-validation.md)
24
39
 
25
40
  Add a new record by copying the most recent one and incrementing the number.
26
41
  Records are immutable: supersede them rather than editing.
@@ -1,5 +1,9 @@
1
1
  # Forge Foundation Roadmap Pack — Two-Repository Edition
2
2
 
3
+ > **Completed historical roadmap.** Stages 00–09 are closed. Paths remain
4
+ > stable as decision and issue evidence. New Data Science work continues in
5
+ > the [Stage 10–14 roadmap](../roadmap-v2/README.md).
6
+
3
7
  This revision models Forge as two independent repositories that work together through an explicit contract:
4
8
 
5
9
  - **`forge-template`** owns generated content, component metadata and the template/composition engine.
@@ -13,13 +17,17 @@ define the mandatory generated-project outcomes, while the
13
17
  defines which concerns may belong in that baseline. The
14
18
  [Library archetype contract](https://github.com/Sandsy09/forge-template/blob/main/docs/library-archetype.md)
15
19
  defines the first production archetype, implemented on
16
- `forge-template/main` and released at `0.3.0`. The
20
+ `forge-template/main`, released at `0.3.0`, and included in the completed
21
+ two-archetype [composition review](https://github.com/Sandsy09/forge-template/blob/main/docs/composition-architecture-review.md)
22
+ released at `0.3.2`. The
17
23
  [CLI Application archetype contract](https://github.com/Sandsy09/forge-template/blob/main/docs/cli-application-archetype.md)
18
24
  selects the engine-owned, optionless `cli` archetype and derives its command
19
25
  from `ProjectSpec.project.repository_name`; FT-08.04 implemented it, and
20
26
  CF-08.02 exposes both archetypes behind `create-forge`'s hidden
21
27
  `--engine-preview` flag. Neither contract changes this repository's default
22
- `new` path or unassigned released engine range. The
28
+ `new` path. `create-forge 0.2.1` keeps the released engine range unchanged and
29
+ adds client-owned lock finalisation under
30
+ [ADR 0021](../adr/0021-client-finalises-engine-lockfiles.md). The
23
31
  [Python support policy](https://github.com/Sandsy09/forge-template/blob/main/docs/python-support.md)
24
32
  defines the generated-project CPython window, defaults, and release lifecycle.
25
33
  The [editor integration strategy](https://github.com/Sandsy09/forge-template/blob/main/docs/editor-integration.md)
@@ -47,8 +55,23 @@ workflows, which remain independently owned and unchanged.
47
55
  The canonical
48
56
  [ProjectSpec protocol v1](https://github.com/Sandsy09/forge-template/blob/main/docs/project-spec.md)
49
57
  defines the strict effective generation request owned by `forge-template`.
50
- `create-forge` retains construction and user-facing orchestration, which remain
51
- unimplemented until the supported engine cutover.
58
+ `create-forge` retains construction and user-facing orchestration. The canonical
59
+ [organisation-policy protocol v1](https://github.com/Sandsy09/forge-template/blob/main/docs/organisation-policy.md)
60
+ defines how downstream clients resolve component-selection policy before
61
+ constructing that effective request. CF-09.01
62
+ ([ADR 0022](https://github.com/Sandsy09/create-forge/blob/main/docs/adr/0022-downstream-organisation-policy-hook.md))
63
+ delivered the client hook; `create-forge` still consumes no policy itself.
64
+ Forge-template Epic 09 is complete through its canonical
65
+ [extension contract](https://github.com/Sandsy09/forge-template/blob/main/docs/extension-points.md),
66
+ [policy fixture](https://github.com/Sandsy09/forge-template/blob/main/docs/organisation-policy-fixtures.md),
67
+ [compatibility policy](https://github.com/Sandsy09/forge-template/blob/main/docs/compatibility-policy.md),
68
+ and [no-copy proof](https://github.com/Sandsy09/forge-template/blob/main/docs/no-copy-inheritance.md).
69
+ Forge-template [ADRs 0039–0042](https://github.com/Sandsy09/forge-template/blob/main/docs/adr/README.md)
70
+ record those four decisions.
71
+ Create-forge Epic #40 and #53–#55 are complete under
72
+ [ADR 0024](../adr/0024-reference-client-not-framework-dependency.md), which
73
+ validates the client-owned half without making `create-forge` a shared
74
+ framework dependency.
52
75
  The canonical
53
76
  [component manifest protocol v1](https://github.com/Sandsy09/forge-template/blob/main/docs/component-manifests.md)
54
77
  defines engine-owned bundled component metadata and compatibility. The
@@ -60,12 +83,8 @@ The canonical
60
83
  [generated-project validation contract](https://github.com/Sandsy09/forge-template/blob/main/docs/generated-project-validation.md)
61
84
  and [ADR 0030](https://github.com/Sandsy09/forge-template/blob/main/docs/adr/0030-generated-project-validation.md)
62
85
  complete the `forge-template` side of Stage 07 by validating rendered output
63
- in memory. The shared stage remains open for `create-forge` CLI orchestration,
64
- filesystem safety, and end-to-end coverage.
65
- `forge-template/main` now contains the Library production catalogue, while
66
- this repository's exact development pin still sees the earlier empty
67
- catalogue. CLI Application implementation and coordinated CLI discovery remain
68
- later work.
86
+ in memory. Stage 07 and Stage 08 are now complete across both repositories;
87
+ the default Copier-to-engine cutover remains separate future work.
69
88
  This roadmap links to the canonical sources rather than maintaining second
70
89
  definitions.
71
90
 
@@ -60,9 +60,15 @@ the *public engine* against a *released* engine-and-assets unit -- because
60
60
  neither exists yet: `forge-template` has no `0.2.x` release and its
61
61
  production catalogue stays empty until
62
62
  [FT-08.02 / forge-template#41](https://github.com/Sandsy09/forge-template/issues/41).
63
- Those two criteria carry forward verbatim to **CF-08.04**, filed under
63
+ Those two criteria carried forward verbatim to **CF-08.04**, filed under
64
64
  [CF-EPIC-08](https://github.com/Sandsy09/create-forge/issues/39) and blocked
65
- on the same two things. See the canonical
65
+ on the same two things at the time. Both blockers have since resolved --
66
+ [FT-08.02 / forge-template#41](https://github.com/Sandsy09/forge-template/issues/41)
67
+ shipped the production catalogue, and
68
+ [#9](https://github.com/Sandsy09/create-forge/issues/9) published a released
69
+ engine range -- and CF-08.04 is complete
70
+ ([ADR 0020](https://github.com/Sandsy09/create-forge/blob/main/docs/adr/0020-engine-path-end-to-end-tests.md)).
71
+ See the canonical
66
72
  [end-to-end tests contract](https://github.com/Sandsy09/create-forge/blob/main/docs/end-to-end-tests.md).
67
73
  The atomic cutover that replaces both the v0.1.x registry seam and
68
74
  `--engine-preview` stays gated on