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.
- {create_forge-0.2.0 → create_forge-0.3.0}/CHANGELOG.md +49 -1
- {create_forge-0.2.0 → create_forge-0.3.0}/PKG-INFO +115 -10
- create_forge-0.3.0/README.md +280 -0
- {create_forge-0.2.0 → create_forge-0.3.0}/docs/adr/README.md +15 -0
- {create_forge-0.2.0 → create_forge-0.3.0}/docs/roadmap-v1/README.md +29 -10
- {create_forge-0.2.0 → create_forge-0.3.0}/docs/roadmap-v1/roadmap/07-forge-cli-integration/README.md +8 -2
- create_forge-0.3.0/docs/roadmap-v1/roadmap/08-reference-archetype-validation/README.md +85 -0
- create_forge-0.3.0/docs/roadmap-v1/roadmap/09-blueprint-compatibility/README.md +62 -0
- create_forge-0.3.0/docs/roadmap-v2/README.md +55 -0
- create_forge-0.3.0/docs/roadmap-v2/roadmap/10-data-science-architecture-contract/README.md +61 -0
- create_forge-0.3.0/docs/roadmap-v2/roadmap/11-reusable-data-science-capabilities/README.md +59 -0
- create_forge-0.3.0/docs/roadmap-v2/roadmap/12-data-science-archetype/README.md +60 -0
- create_forge-0.3.0/docs/roadmap-v2/roadmap/13-data-science-cli-integration/README.md +97 -0
- create_forge-0.3.0/docs/roadmap-v2/roadmap/14-data-science-validation-and-rollout/README.md +92 -0
- create_forge-0.3.0/examples/README.md +91 -0
- {create_forge-0.2.0 → create_forge-0.3.0}/pyproject.toml +18 -11
- {create_forge-0.2.0 → create_forge-0.3.0}/src/create_forge/cli.py +508 -36
- {create_forge-0.2.0 → create_forge-0.3.0}/src/create_forge/compat.py +18 -8
- create_forge-0.3.0/src/create_forge/pipeline.py +310 -0
- create_forge-0.3.0/src/create_forge/prompts.py +601 -0
- {create_forge-0.2.0 → create_forge-0.3.0}/src/create_forge/runner.py +25 -11
- {create_forge-0.2.0 → create_forge-0.3.0}/src/create_forge/spec.py +169 -1
- {create_forge-0.2.0 → create_forge-0.3.0}/src/create_forge/staging.py +40 -3
- create_forge-0.3.0/tests/conftest.py +112 -0
- create_forge-0.3.0/tests/installed_client.py +307 -0
- create_forge-0.3.0/tests/test_archetype_parity.py +215 -0
- {create_forge-0.2.0 → create_forge-0.3.0}/tests/test_cli.py +457 -33
- create_forge-0.3.0/tests/test_component_selection.py +974 -0
- create_forge-0.3.0/tests/test_data_science_pipeline.py +538 -0
- create_forge-0.3.0/tests/test_downstream_reference.py +397 -0
- create_forge-0.3.0/tests/test_e2e_engine_generation.py +415 -0
- {create_forge-0.2.0 → create_forge-0.3.0}/tests/test_e2e_generation.py +24 -56
- create_forge-0.3.0/tests/test_e2e_installed_data_science.py +478 -0
- create_forge-0.3.0/tests/test_e2e_installed_rollout.py +712 -0
- {create_forge-0.2.0 → create_forge-0.3.0}/tests/test_engine_adapter.py +35 -15
- {create_forge-0.2.0 → create_forge-0.3.0}/tests/test_engine_contract.py +96 -6
- {create_forge-0.2.0 → create_forge-0.3.0}/tests/test_engine_cross_repository.py +90 -9
- create_forge-0.3.0/tests/test_pipeline.py +643 -0
- create_forge-0.3.0/tests/test_policy_hook.py +177 -0
- create_forge-0.3.0/tests/test_prompts.py +497 -0
- create_forge-0.3.0/tests/test_reference_client_boundary.py +87 -0
- {create_forge-0.2.0 → create_forge-0.3.0}/tests/test_runner.py +66 -0
- {create_forge-0.2.0 → create_forge-0.3.0}/tests/test_spec.py +3 -3
- {create_forge-0.2.0 → create_forge-0.3.0}/tests/test_staging.py +63 -1
- {create_forge-0.2.0 → create_forge-0.3.0}/tests/test_update.py +66 -3
- create_forge-0.2.0/README.md +0 -176
- create_forge-0.2.0/docs/roadmap-v1/roadmap/08-reference-archetype-validation/README.md +0 -58
- create_forge-0.2.0/docs/roadmap-v1/roadmap/09-blueprint-compatibility/README.md +0 -25
- create_forge-0.2.0/src/create_forge/pipeline.py +0 -141
- create_forge-0.2.0/src/create_forge/prompts.py +0 -231
- create_forge-0.2.0/tests/conftest.py +0 -17
- create_forge-0.2.0/tests/test_pipeline.py +0 -356
- create_forge-0.2.0/tests/test_prompts.py +0 -187
- {create_forge-0.2.0 → create_forge-0.3.0}/.gitignore +0 -0
- {create_forge-0.2.0 → create_forge-0.3.0}/LICENSE +0 -0
- {create_forge-0.2.0 → create_forge-0.3.0}/docs/roadmap-v1/roadmap/00-governance-and-principles/README.md +0 -0
- {create_forge-0.2.0 → create_forge-0.3.0}/docs/roadmap-v1/roadmap/01-python-core/README.md +0 -0
- {create_forge-0.2.0 → create_forge-0.3.0}/docs/roadmap-v1/roadmap/02-developer-experience/README.md +0 -0
- {create_forge-0.2.0 → create_forge-0.3.0}/docs/roadmap-v1/roadmap/03-quality-and-ci/README.md +0 -0
- {create_forge-0.2.0 → create_forge-0.3.0}/docs/roadmap-v1/roadmap/04-runtime-and-configuration/README.md +0 -0
- {create_forge-0.2.0 → create_forge-0.3.0}/docs/roadmap-v1/roadmap/05-security-and-supply-chain/README.md +0 -0
- {create_forge-0.2.0 → create_forge-0.3.0}/docs/roadmap-v1/roadmap/06-extension-and-composition-contract/README.md +0 -0
- {create_forge-0.2.0 → create_forge-0.3.0}/src/create_forge/__init__.py +0 -0
- {create_forge-0.2.0 → create_forge-0.3.0}/src/create_forge/config.py +0 -0
- {create_forge-0.2.0 → create_forge-0.3.0}/src/create_forge/engine.py +0 -0
- {create_forge-0.2.0 → create_forge-0.3.0}/src/create_forge/models.py +0 -0
- {create_forge-0.2.0 → create_forge-0.3.0}/src/create_forge/registry.py +0 -0
- {create_forge-0.2.0 → create_forge-0.3.0}/src/create_forge/templates.toml +0 -0
- {create_forge-0.2.0 → create_forge-0.3.0}/tests/__init__.py +0 -0
- {create_forge-0.2.0 → create_forge-0.3.0}/tests/test_adr.py +0 -0
- {create_forge-0.2.0 → create_forge-0.3.0}/tests/test_config.py +0 -0
- {create_forge-0.2.0 → create_forge-0.3.0}/tests/test_drift.py +0 -0
- {create_forge-0.2.0 → create_forge-0.3.0}/tests/test_labels.py +0 -0
- {create_forge-0.2.0 → create_forge-0.3.0}/tests/test_models.py +0 -0
- {create_forge-0.2.0 → create_forge-0.3.0}/tests/test_registry.py +0 -0
- {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.
|
|
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.
|
|
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
|
|
167
|
-
`>=0.
|
|
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
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
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
|
+
[](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
|
|
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
|
|
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
|
|
51
|
-
|
|
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.
|
|
64
|
-
|
|
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
|
|
{create_forge-0.2.0 → create_forge-0.3.0}/docs/roadmap-v1/roadmap/07-forge-cli-integration/README.md
RENAMED
|
@@ -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
|
|
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
|
|
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
|