create-forge 0.3.2__tar.gz → 0.4.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 (102) hide show
  1. {create_forge-0.3.2 → create_forge-0.4.0}/CHANGELOG.md +21 -1
  2. {create_forge-0.3.2 → create_forge-0.4.0}/PKG-INFO +66 -67
  3. {create_forge-0.3.2 → create_forge-0.4.0}/README.md +60 -61
  4. create_forge-0.4.0/docs/README.md +77 -0
  5. {create_forge-0.3.2 → create_forge-0.4.0}/docs/adr/README.md +10 -0
  6. create_forge-0.4.0/docs/roadmap-v3/README.md +62 -0
  7. create_forge-0.4.0/docs/roadmap-v3/roadmap/15-engine-default-provider-contracts/README.md +32 -0
  8. create_forge-0.4.0/docs/roadmap-v3/roadmap/16-engine-default-client-contracts/README.md +31 -0
  9. create_forge-0.4.0/docs/roadmap-v3/roadmap/17-engine-default-provider-implementation-and-release/README.md +34 -0
  10. create_forge-0.4.0/docs/roadmap-v3/roadmap/18-engine-default-client-delivery-and-validation/README.md +45 -0
  11. create_forge-0.4.0/docs/roadmap-v4/README.md +57 -0
  12. create_forge-0.4.0/docs/roadmap-v4/roadmap/19-streamlit-architecture-contracts/README.md +33 -0
  13. create_forge-0.4.0/docs/roadmap-v4/roadmap/20-streamlit-provider-implementation-and-release/README.md +32 -0
  14. create_forge-0.4.0/docs/roadmap-v4/roadmap/21-streamlit-client-adoption-and-rollout/README.md +31 -0
  15. {create_forge-0.3.2 → create_forge-0.4.0}/pyproject.toml +29 -24
  16. create_forge-0.4.0/src/create_forge/_engine_worker.py +187 -0
  17. {create_forge-0.3.2 → create_forge-0.4.0}/src/create_forge/cli.py +785 -167
  18. create_forge-0.4.0/src/create_forge/compat.py +183 -0
  19. create_forge-0.4.0/src/create_forge/descriptors.py +189 -0
  20. create_forge-0.4.0/src/create_forge/engine.py +279 -0
  21. create_forge-0.4.0/src/create_forge/engine_source.py +367 -0
  22. create_forge-0.4.0/src/create_forge/lifecycle.py +133 -0
  23. create_forge-0.4.0/src/create_forge/pipeline.py +400 -0
  24. {create_forge-0.3.2 → create_forge-0.4.0}/src/create_forge/prompts.py +12 -12
  25. {create_forge-0.3.2 → create_forge-0.4.0}/src/create_forge/sources.py +12 -4
  26. {create_forge-0.3.2 → create_forge-0.4.0}/src/create_forge/spec.py +2 -23
  27. {create_forge-0.3.2 → create_forge-0.4.0}/src/create_forge/staging.py +32 -3
  28. {create_forge-0.3.2 → create_forge-0.4.0}/src/create_forge/templates.toml +5 -3
  29. create_forge-0.4.0/src/create_forge/update.py +632 -0
  30. {create_forge-0.3.2 → create_forge-0.4.0}/tests/conftest.py +10 -3
  31. {create_forge-0.3.2 → create_forge-0.4.0}/tests/installed_client.py +81 -18
  32. create_forge-0.4.0/tests/legacy_template.py +96 -0
  33. {create_forge-0.3.2 → create_forge-0.4.0}/tests/test_cli.py +711 -172
  34. {create_forge-0.3.2 → create_forge-0.4.0}/tests/test_component_selection.py +29 -37
  35. create_forge-0.4.0/tests/test_cutover_acceptance_contract.py +291 -0
  36. {create_forge-0.3.2 → create_forge-0.4.0}/tests/test_data_science_pipeline.py +43 -25
  37. {create_forge-0.3.2 → create_forge-0.4.0}/tests/test_downstream_reference.py +3 -1
  38. create_forge-0.4.0/tests/test_e2e_engine_generation.py +729 -0
  39. {create_forge-0.3.2 → create_forge-0.4.0}/tests/test_e2e_generation.py +9 -6
  40. create_forge-0.4.0/tests/test_e2e_installed_cutover.py +793 -0
  41. {create_forge-0.3.2 → create_forge-0.4.0}/tests/test_e2e_installed_data_science.py +25 -15
  42. {create_forge-0.3.2 → create_forge-0.4.0}/tests/test_e2e_installed_rollout.py +70 -48
  43. {create_forge-0.3.2 → create_forge-0.4.0}/tests/test_engine_adapter.py +46 -37
  44. {create_forge-0.3.2 → create_forge-0.4.0}/tests/test_engine_contract.py +158 -53
  45. {create_forge-0.3.2 → create_forge-0.4.0}/tests/test_engine_cross_repository.py +15 -12
  46. create_forge-0.4.0/tests/test_engine_default_contract.py +182 -0
  47. create_forge-0.4.0/tests/test_engine_lifecycle_contract.py +242 -0
  48. create_forge-0.4.0/tests/test_engine_source.py +812 -0
  49. create_forge-0.4.0/tests/test_lifecycle.py +218 -0
  50. {create_forge-0.3.2 → create_forge-0.4.0}/tests/test_pipeline.py +114 -238
  51. {create_forge-0.3.2 → create_forge-0.4.0}/tests/test_reference_client_boundary.py +1 -2
  52. create_forge-0.4.0/tests/test_roadmap_packs.py +132 -0
  53. {create_forge-0.3.2 → create_forge-0.4.0}/tests/test_sources.py +16 -4
  54. {create_forge-0.3.2 → create_forge-0.4.0}/tests/test_spec.py +15 -34
  55. {create_forge-0.3.2 → create_forge-0.4.0}/tests/test_staging.py +29 -0
  56. {create_forge-0.3.2 → create_forge-0.4.0}/tests/test_update.py +11 -68
  57. create_forge-0.4.0/tests/test_update_engine.py +733 -0
  58. create_forge-0.4.0/tests/test_update_routing.py +299 -0
  59. create_forge-0.4.0/tests/test_user_guide_recipes.py +68 -0
  60. create_forge-0.3.2/src/create_forge/compat.py +0 -57
  61. create_forge-0.3.2/src/create_forge/engine.py +0 -228
  62. create_forge-0.3.2/src/create_forge/pipeline.py +0 -310
  63. create_forge-0.3.2/tests/test_e2e_engine_generation.py +0 -415
  64. {create_forge-0.3.2 → create_forge-0.4.0}/.gitignore +0 -0
  65. {create_forge-0.3.2 → create_forge-0.4.0}/LICENSE +0 -0
  66. {create_forge-0.3.2 → create_forge-0.4.0}/docs/roadmap-v1/README.md +0 -0
  67. {create_forge-0.3.2 → create_forge-0.4.0}/docs/roadmap-v1/roadmap/00-governance-and-principles/README.md +0 -0
  68. {create_forge-0.3.2 → create_forge-0.4.0}/docs/roadmap-v1/roadmap/01-python-core/README.md +0 -0
  69. {create_forge-0.3.2 → create_forge-0.4.0}/docs/roadmap-v1/roadmap/02-developer-experience/README.md +0 -0
  70. {create_forge-0.3.2 → create_forge-0.4.0}/docs/roadmap-v1/roadmap/03-quality-and-ci/README.md +0 -0
  71. {create_forge-0.3.2 → create_forge-0.4.0}/docs/roadmap-v1/roadmap/04-runtime-and-configuration/README.md +0 -0
  72. {create_forge-0.3.2 → create_forge-0.4.0}/docs/roadmap-v1/roadmap/05-security-and-supply-chain/README.md +0 -0
  73. {create_forge-0.3.2 → create_forge-0.4.0}/docs/roadmap-v1/roadmap/06-extension-and-composition-contract/README.md +0 -0
  74. {create_forge-0.3.2 → create_forge-0.4.0}/docs/roadmap-v1/roadmap/07-forge-cli-integration/README.md +0 -0
  75. {create_forge-0.3.2 → create_forge-0.4.0}/docs/roadmap-v1/roadmap/08-reference-archetype-validation/README.md +0 -0
  76. {create_forge-0.3.2 → create_forge-0.4.0}/docs/roadmap-v1/roadmap/09-blueprint-compatibility/README.md +0 -0
  77. {create_forge-0.3.2 → create_forge-0.4.0}/docs/roadmap-v2/README.md +0 -0
  78. {create_forge-0.3.2 → create_forge-0.4.0}/docs/roadmap-v2/roadmap/10-data-science-architecture-contract/README.md +0 -0
  79. {create_forge-0.3.2 → create_forge-0.4.0}/docs/roadmap-v2/roadmap/11-reusable-data-science-capabilities/README.md +0 -0
  80. {create_forge-0.3.2 → create_forge-0.4.0}/docs/roadmap-v2/roadmap/12-data-science-archetype/README.md +0 -0
  81. {create_forge-0.3.2 → create_forge-0.4.0}/docs/roadmap-v2/roadmap/13-data-science-cli-integration/README.md +0 -0
  82. {create_forge-0.3.2 → create_forge-0.4.0}/docs/roadmap-v2/roadmap/14-data-science-validation-and-rollout/README.md +0 -0
  83. {create_forge-0.3.2 → create_forge-0.4.0}/examples/README.md +0 -0
  84. {create_forge-0.3.2 → create_forge-0.4.0}/src/create_forge/__init__.py +0 -0
  85. {create_forge-0.3.2 → create_forge-0.4.0}/src/create_forge/config.py +0 -0
  86. {create_forge-0.3.2 → create_forge-0.4.0}/src/create_forge/models.py +0 -0
  87. {create_forge-0.3.2 → create_forge-0.4.0}/src/create_forge/registry.py +0 -0
  88. {create_forge-0.3.2 → create_forge-0.4.0}/src/create_forge/runner.py +0 -0
  89. {create_forge-0.3.2 → create_forge-0.4.0}/tests/__init__.py +0 -0
  90. {create_forge-0.3.2 → create_forge-0.4.0}/tests/test_adr.py +0 -0
  91. {create_forge-0.3.2 → create_forge-0.4.0}/tests/test_archetype_parity.py +0 -0
  92. {create_forge-0.3.2 → create_forge-0.4.0}/tests/test_config.py +0 -0
  93. {create_forge-0.3.2 → create_forge-0.4.0}/tests/test_copier_cache.py +0 -0
  94. {create_forge-0.3.2 → create_forge-0.4.0}/tests/test_drift.py +0 -0
  95. {create_forge-0.3.2 → create_forge-0.4.0}/tests/test_labels.py +0 -0
  96. {create_forge-0.3.2 → create_forge-0.4.0}/tests/test_models.py +0 -0
  97. {create_forge-0.3.2 → create_forge-0.4.0}/tests/test_policy_hook.py +0 -0
  98. {create_forge-0.3.2 → create_forge-0.4.0}/tests/test_prompts.py +0 -0
  99. {create_forge-0.3.2 → create_forge-0.4.0}/tests/test_registry.py +0 -0
  100. {create_forge-0.3.2 → create_forge-0.4.0}/tests/test_runner.py +0 -0
  101. {create_forge-0.3.2 → create_forge-0.4.0}/tests/test_update_network.py +0 -0
  102. {create_forge-0.3.2 → create_forge-0.4.0}/tests/test_workflows.py +0 -0
@@ -1,11 +1,31 @@
1
1
  # Changelog
2
2
 
3
3
  Generated by git-cliff from Conventional Commits.
4
+ ## [0.4.0] - 2026-09-14
5
+
6
+ ### Documentation
7
+
8
+ - Reconcile living documentation with the 0.3 release line (#148)
9
+ - Prepare engine-default and Streamlit roadmap packs
10
+ - Record filed cross-repository roadmaps
11
+ - Define engine-default selection and source-resolution UX (#155) (#169)
12
+ - Define update dispatch, migration and filesystem lifecycle (#156) (#170)
13
+ - Approve coordinated cutover acceptance and support policy (#157) (#171)
14
+ - Consolidate CLAUDE.md and CONTRIBUTING.md behind a docs index (#173)
15
+
16
+ ### Features
17
+
18
+ - Make the engine the default new path (CF-18.01)
19
+ - Implement isolated --engine-source overrides (CF-18.02) (#174)
20
+ - Implement engine generation finalisation, Git and hooks (CF-18.03) (#175)
21
+ - Implement engine-native project updates (CF-18.04) (#176)
22
+ - Preserve legacy Copier workflows and reject preview projects (CF-18.05) (#177)
23
+ - Complete installed cutover regressions and migration docs (CF-18.06) (#178)
4
24
  ## [0.3.2] - 2026-09-08
5
25
 
6
26
  ### Features
7
27
 
8
- - Diagnose the Copier template cache
28
+ - Diagnose the Copier template cache (#147)
9
29
  ## [0.3.1] - 2026-09-08
10
30
 
11
31
  ### Bug Fixes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: create-forge
3
- Version: 0.3.2
3
+ Version: 0.4.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
@@ -20,16 +20,16 @@ Classifier: Programming Language :: Python :: 3.14
20
20
  Classifier: Topic :: Software Development :: Code Generators
21
21
  Classifier: Typing :: Typed
22
22
  Requires-Python: >=3.11
23
- Requires-Dist: copier<10,>=9.16
24
- Requires-Dist: platformdirs>=4.3.6
23
+ Requires-Dist: forge-template<0.6,>=0.5
25
24
  Requires-Dist: pydantic>=2.10
26
25
  Requires-Dist: pyyaml>=6.0
27
26
  Requires-Dist: questionary>=2.0
28
27
  Requires-Dist: rich>=13.9
29
28
  Requires-Dist: typer>=0.16
30
- Provides-Extra: engine
31
- Requires-Dist: forge-template<0.5,>=0.4.1; extra == 'engine'
32
- Requires-Dist: uv<0.13,>=0.12; extra == 'engine'
29
+ Requires-Dist: uv<0.13,>=0.12
30
+ Provides-Extra: legacy
31
+ Requires-Dist: copier<10,>=9.16; extra == 'legacy'
32
+ Requires-Dist: platformdirs>=4.3.6; extra == 'legacy'
33
33
  Description-Content-Type: text/markdown
34
34
 
35
35
  # create-forge
@@ -46,11 +46,12 @@ uvx create-forge new
46
46
 
47
47
  Requires [uv](https://docs.astral.sh/uv/getting-started/installation/), Git,
48
48
  and Python 3.11+ (uv can install Python for you). Configure your Git author
49
- name and email before generating a default Library project: generation
50
- creates local commits.
49
+ name and email before generating a project: generation creates local commits.
51
50
 
52
51
  **[Read the Forge user guide](https://sandsy09.github.io/create-forge/)**
53
- for walkthroughs, template choices, and troubleshooting.
52
+ for walkthroughs, project types, and troubleshooting. Coming from a `0.3.x`
53
+ install or project? Start with the
54
+ [migration guide](https://sandsy09.github.io/create-forge/migration/).
54
55
 
55
56
  ## How the repositories fit together
56
57
 
@@ -75,8 +76,11 @@ uv, Ruff, pytest with coverage, mypy and/or pyright, pre-commit hooks, and
75
76
  GitHub Actions CI. Choose your build backend, versioning, license, and
76
77
  dependency-update tooling. MkDocs documentation is optional.
77
78
 
78
- The template is rendered by [Copier](https://copier.readthedocs.io/), which
79
- also supports bringing later template improvements into existing projects.
79
+ `new` discovers project types and capabilities directly from the
80
+ `forge-template` engine, constructs a ProjectSpec, and renders through its
81
+ public facade — no template repository to clone. Generation also runs
82
+ `git init`, an initial commit, and installs any pre-commit hooks the project
83
+ carries.
80
84
 
81
85
  ## Install and manage the tool
82
86
 
@@ -95,8 +99,8 @@ your terminal.
95
99
 
96
100
  ```bash
97
101
  uvx create-forge@latest new
98
- uvx create-forge@0.3.0 new
99
- uv tool install "create-forge==0.3.0"
102
+ uvx create-forge@0.4.0 new
103
+ uv tool install "create-forge==0.4.0"
100
104
  ```
101
105
 
102
106
  Plain `uvx create-forge` can reuse a cached or persistently installed
@@ -110,8 +114,8 @@ See [installation and versions](https://sandsy09.github.io/create-forge/installa
110
114
  | Command | Purpose |
111
115
  | --- | --- |
112
116
  | `uvx create-forge new` | Create a project interactively. |
113
- | `uvx create-forge list` | List the bundled Copier templates. |
114
- | `uvx create-forge update` | Update a Copier-generated project from its directory. |
117
+ | `uvx create-forge list` | List the discovered project types and capabilities. |
118
+ | `uvx create-forge update` | Update a generated project from its directory. |
115
119
  | `uvx create-forge doctor` | Diagnose Python, Git, uv, and package compatibility. |
116
120
  | `uvx create-forge config init` | Create an optional configuration file. |
117
121
  | `uvx create-forge config show` | Show resolved configuration and its sources. |
@@ -122,30 +126,40 @@ For scripts and CI, provide a project name and skip questions with `--yes`:
122
126
  uvx create-forge new "My Library" --yes --data github_org=your-org --data build_backend=hatchling --data versioning=vcs
123
127
  ```
124
128
 
125
- Use `--path` to choose the destination and repeat `--data key=value` to
126
- preset answers. Run `uvx create-forge new --help` for the default workflow's
127
- options. Saved author details, GitHub organisation, and preferred template
128
- are covered in the [CLI guide](https://sandsy09.github.io/create-forge/cli/).
129
+ Use `--path` to choose the destination, `--archetype`/`--capability` to
130
+ preselect a project type, and repeat `--data key=value` to preset answers.
131
+ Run `uvx create-forge new --help` for the default workflow's options. Saved
132
+ author details, GitHub organisation, and preferred archetype are covered in
133
+ the [CLI guide](https://sandsy09.github.io/create-forge/cli/).
129
134
 
130
- ### Choose a template version or source
135
+ ### More project types and capabilities
131
136
 
132
137
  ```bash
133
- uvx create-forge new "My Library" --template library --ref v0.4.1
134
- uvx create-forge new "Custom Project" --template-url https://github.com/you/your-template
138
+ uvx create-forge new "My Analysis" --archetype data-science --capability jupyter --yes --data license=mit
139
+ cd my-analysis
140
+ uv run --locked poe check
141
+ uv run poe notebook
135
142
  ```
136
143
 
137
- `--ref` selects a Git revision in the **template repository**. It does not
138
- select the CLI version. Without it, Copier uses the latest suitable release
139
- tag. The bundled registry currently offers Library; upgrade the CLI to
140
- receive registry changes.
144
+ Available types include Library, CLI Application, and Data Science (a Python
145
+ package with a starter notebook and Jupyter tooling), plus optional
146
+ **Jupyter** and **Scientific Python** capabilities (Data Science requires
147
+ Jupyter; Scientific Python is optional and can accompany any archetype). The
148
+ [project guide](https://sandsy09.github.io/create-forge/projects/) explains
149
+ each type's output.
141
150
 
142
- Templates can execute code through generation and update tasks. Use custom
143
- sources only when you trust their content; `--yes` also skips the custom
144
- template confirmation.
151
+ ### Isolated engine overrides
145
152
 
146
- ### Update a generated project
153
+ ```bash
154
+ uvx create-forge new "Custom" --engine-source https://github.com/you/your-engine-fork --engine-ref v0.5.1
155
+ ```
147
156
 
148
- From a clean, committed Copier-generated project:
157
+ `--engine-source`/`--engine-ref` provision an isolated environment for
158
+ cross-repository development against a fork or unreleased engine revision,
159
+ separate from your ordinary install. Use custom sources only when you trust
160
+ their content; `--yes` also skips the confirmation prompt.
161
+
162
+ ### Update a generated project
149
163
 
150
164
  ```bash
151
165
  uvx create-forge update --dry-run
@@ -153,50 +167,35 @@ uvx create-forge update
153
167
  uv run poe check
154
168
  ```
155
169
 
156
- Keep `.copier-answers.yml` committed. Review the resulting diff and resolve
157
- conflicts before committing. A dry run validates the update without applying
158
- it; it does not produce a file-by-file diff. Use `update --ref v0.4.1` to
159
- target a particular template version.
170
+ `update` runs the engine-native Git-backed three-way merge against the
171
+ project's committed `.forge/generation.json`. Review the resulting diff and
172
+ resolve any conflict markers before committing. `--dry-run` prints the
173
+ per-target classification without writing anything; a failed or interrupted
174
+ update always leaves a recoverable working tree, printed on request:
175
+ `git restore . && git clean -fd`.
160
176
 
161
- ## Preview: more project types and capabilities
162
-
163
- The `0.3.0` CLI also provides an opt-in engine preview using
164
- `forge-template>=0.4.1,<0.5`. These options are currently hidden from help.
165
-
166
- | Project type | Use it for |
167
- | --- | --- |
168
- | Library | A distributable Python package with a choice of packaging modes. |
169
- | CLI Application | A Typer application with a console command and tests. |
170
- | Data Science | A Python package with a starter notebook and Jupyter tooling. |
171
-
172
- Add **Jupyter** for notebook development or **Scientific Python** for NumPy,
173
- pandas, Matplotlib, and scikit-learn. Data Science requires Jupyter;
174
- Scientific Python is optional. These capabilities can also accompany the
175
- other preview archetypes.
177
+ ## The `--legacy` Copier route
176
178
 
177
179
  ```bash
178
- uvx --from "create-forge[engine]==0.3.0" create-forge new "My Analysis" --engine-preview --archetype data-science --capability jupyter --yes --data license=mit
179
- cd my-analysis
180
- uv run --locked poe check
181
- uv run poe notebook
180
+ uv tool install "create-forge[legacy]"
181
+ uvx --from "create-forge[legacy]" create-forge new "My Library" --legacy --template library --ref v0.4.1
182
182
  ```
183
183
 
184
- For regular preview use, install with `uv tool install "create-forge[engine]"`.
185
- The [project guide](https://sandsy09.github.io/create-forge/projects/) explains
186
- each type's output and links to complete recipes.
187
-
188
- **Preview projects do not support `create-forge update`.** Their shared
189
- tooling differs from the default Copier template; the preview does not
190
- generate its CI workflows or install Git hooks. `--template`,
191
- `--template-url`, and `--ref` apply only to the Copier workflow.
184
+ `--legacy` renders directly from the bundled Copier registry instead of the
185
+ engine the original `create-forge` architecture, still fully supported.
186
+ `--template`, `--template-url`, and `--ref` select the template and version
187
+ under this route; `create-forge update` against a `.copier-answers.yml`
188
+ project runs `copier update`. The `legacy` extra installs `copier`; without
189
+ it, `--legacy` exits `3` naming the remedy.
192
190
 
193
191
  ## What's next
194
192
 
195
- The Foundation and Data Science roadmaps are complete. Making the engine
196
- the default generation workflow is a planned direction with no scheduled
197
- release. Follow [open work](https://github.com/Sandsy09/create-forge/issues)
198
- and [releases](https://github.com/Sandsy09/create-forge/releases) for updates,
199
- or suggest a project type, capability, or guide you would find useful.
193
+ The Foundation, Data Science, and Engine-Default Cutover roadmaps are
194
+ complete. The filed [Streamlit Archetype](docs/roadmap-v4/README.md) roadmap
195
+ describes the next project type. Follow
196
+ [open work](https://github.com/Sandsy09/create-forge/issues) and
197
+ [releases](https://github.com/Sandsy09/create-forge/releases) for updates, or
198
+ suggest a project type, capability, or guide you would find useful.
200
199
 
201
200
  ## Feedback and contributing
202
201
 
@@ -12,11 +12,12 @@ uvx create-forge new
12
12
 
13
13
  Requires [uv](https://docs.astral.sh/uv/getting-started/installation/), Git,
14
14
  and Python 3.11+ (uv can install Python for you). Configure your Git author
15
- name and email before generating a default Library project: generation
16
- creates local commits.
15
+ name and email before generating a project: generation creates local commits.
17
16
 
18
17
  **[Read the Forge user guide](https://sandsy09.github.io/create-forge/)**
19
- for walkthroughs, template choices, and troubleshooting.
18
+ for walkthroughs, project types, and troubleshooting. Coming from a `0.3.x`
19
+ install or project? Start with the
20
+ [migration guide](https://sandsy09.github.io/create-forge/migration/).
20
21
 
21
22
  ## How the repositories fit together
22
23
 
@@ -41,8 +42,11 @@ uv, Ruff, pytest with coverage, mypy and/or pyright, pre-commit hooks, and
41
42
  GitHub Actions CI. Choose your build backend, versioning, license, and
42
43
  dependency-update tooling. MkDocs documentation is optional.
43
44
 
44
- The template is rendered by [Copier](https://copier.readthedocs.io/), which
45
- also supports bringing later template improvements into existing projects.
45
+ `new` discovers project types and capabilities directly from the
46
+ `forge-template` engine, constructs a ProjectSpec, and renders through its
47
+ public facade — no template repository to clone. Generation also runs
48
+ `git init`, an initial commit, and installs any pre-commit hooks the project
49
+ carries.
46
50
 
47
51
  ## Install and manage the tool
48
52
 
@@ -61,8 +65,8 @@ your terminal.
61
65
 
62
66
  ```bash
63
67
  uvx create-forge@latest new
64
- uvx create-forge@0.3.0 new
65
- uv tool install "create-forge==0.3.0"
68
+ uvx create-forge@0.4.0 new
69
+ uv tool install "create-forge==0.4.0"
66
70
  ```
67
71
 
68
72
  Plain `uvx create-forge` can reuse a cached or persistently installed
@@ -76,8 +80,8 @@ See [installation and versions](https://sandsy09.github.io/create-forge/installa
76
80
  | Command | Purpose |
77
81
  | --- | --- |
78
82
  | `uvx create-forge new` | Create a project interactively. |
79
- | `uvx create-forge list` | List the bundled Copier templates. |
80
- | `uvx create-forge update` | Update a Copier-generated project from its directory. |
83
+ | `uvx create-forge list` | List the discovered project types and capabilities. |
84
+ | `uvx create-forge update` | Update a generated project from its directory. |
81
85
  | `uvx create-forge doctor` | Diagnose Python, Git, uv, and package compatibility. |
82
86
  | `uvx create-forge config init` | Create an optional configuration file. |
83
87
  | `uvx create-forge config show` | Show resolved configuration and its sources. |
@@ -88,30 +92,40 @@ For scripts and CI, provide a project name and skip questions with `--yes`:
88
92
  uvx create-forge new "My Library" --yes --data github_org=your-org --data build_backend=hatchling --data versioning=vcs
89
93
  ```
90
94
 
91
- Use `--path` to choose the destination and repeat `--data key=value` to
92
- preset answers. Run `uvx create-forge new --help` for the default workflow's
93
- options. Saved author details, GitHub organisation, and preferred template
94
- are covered in the [CLI guide](https://sandsy09.github.io/create-forge/cli/).
95
+ Use `--path` to choose the destination, `--archetype`/`--capability` to
96
+ preselect a project type, and repeat `--data key=value` to preset answers.
97
+ Run `uvx create-forge new --help` for the default workflow's options. Saved
98
+ author details, GitHub organisation, and preferred archetype are covered in
99
+ the [CLI guide](https://sandsy09.github.io/create-forge/cli/).
95
100
 
96
- ### Choose a template version or source
101
+ ### More project types and capabilities
97
102
 
98
103
  ```bash
99
- uvx create-forge new "My Library" --template library --ref v0.4.1
100
- uvx create-forge new "Custom Project" --template-url https://github.com/you/your-template
104
+ uvx create-forge new "My Analysis" --archetype data-science --capability jupyter --yes --data license=mit
105
+ cd my-analysis
106
+ uv run --locked poe check
107
+ uv run poe notebook
101
108
  ```
102
109
 
103
- `--ref` selects a Git revision in the **template repository**. It does not
104
- select the CLI version. Without it, Copier uses the latest suitable release
105
- tag. The bundled registry currently offers Library; upgrade the CLI to
106
- receive registry changes.
110
+ Available types include Library, CLI Application, and Data Science (a Python
111
+ package with a starter notebook and Jupyter tooling), plus optional
112
+ **Jupyter** and **Scientific Python** capabilities (Data Science requires
113
+ Jupyter; Scientific Python is optional and can accompany any archetype). The
114
+ [project guide](https://sandsy09.github.io/create-forge/projects/) explains
115
+ each type's output.
107
116
 
108
- Templates can execute code through generation and update tasks. Use custom
109
- sources only when you trust their content; `--yes` also skips the custom
110
- template confirmation.
117
+ ### Isolated engine overrides
111
118
 
112
- ### Update a generated project
119
+ ```bash
120
+ uvx create-forge new "Custom" --engine-source https://github.com/you/your-engine-fork --engine-ref v0.5.1
121
+ ```
113
122
 
114
- From a clean, committed Copier-generated project:
123
+ `--engine-source`/`--engine-ref` provision an isolated environment for
124
+ cross-repository development against a fork or unreleased engine revision,
125
+ separate from your ordinary install. Use custom sources only when you trust
126
+ their content; `--yes` also skips the confirmation prompt.
127
+
128
+ ### Update a generated project
115
129
 
116
130
  ```bash
117
131
  uvx create-forge update --dry-run
@@ -119,50 +133,35 @@ uvx create-forge update
119
133
  uv run poe check
120
134
  ```
121
135
 
122
- Keep `.copier-answers.yml` committed. Review the resulting diff and resolve
123
- conflicts before committing. A dry run validates the update without applying
124
- it; it does not produce a file-by-file diff. Use `update --ref v0.4.1` to
125
- target a particular template version.
136
+ `update` runs the engine-native Git-backed three-way merge against the
137
+ project's committed `.forge/generation.json`. Review the resulting diff and
138
+ resolve any conflict markers before committing. `--dry-run` prints the
139
+ per-target classification without writing anything; a failed or interrupted
140
+ update always leaves a recoverable working tree, printed on request:
141
+ `git restore . && git clean -fd`.
126
142
 
127
- ## Preview: more project types and capabilities
128
-
129
- The `0.3.0` CLI also provides an opt-in engine preview using
130
- `forge-template>=0.4.1,<0.5`. These options are currently hidden from help.
131
-
132
- | Project type | Use it for |
133
- | --- | --- |
134
- | Library | A distributable Python package with a choice of packaging modes. |
135
- | CLI Application | A Typer application with a console command and tests. |
136
- | Data Science | A Python package with a starter notebook and Jupyter tooling. |
137
-
138
- Add **Jupyter** for notebook development or **Scientific Python** for NumPy,
139
- pandas, Matplotlib, and scikit-learn. Data Science requires Jupyter;
140
- Scientific Python is optional. These capabilities can also accompany the
141
- other preview archetypes.
143
+ ## The `--legacy` Copier route
142
144
 
143
145
  ```bash
144
- uvx --from "create-forge[engine]==0.3.0" create-forge new "My Analysis" --engine-preview --archetype data-science --capability jupyter --yes --data license=mit
145
- cd my-analysis
146
- uv run --locked poe check
147
- uv run poe notebook
146
+ uv tool install "create-forge[legacy]"
147
+ uvx --from "create-forge[legacy]" create-forge new "My Library" --legacy --template library --ref v0.4.1
148
148
  ```
149
149
 
150
- For regular preview use, install with `uv tool install "create-forge[engine]"`.
151
- The [project guide](https://sandsy09.github.io/create-forge/projects/) explains
152
- each type's output and links to complete recipes.
153
-
154
- **Preview projects do not support `create-forge update`.** Their shared
155
- tooling differs from the default Copier template; the preview does not
156
- generate its CI workflows or install Git hooks. `--template`,
157
- `--template-url`, and `--ref` apply only to the Copier workflow.
150
+ `--legacy` renders directly from the bundled Copier registry instead of the
151
+ engine the original `create-forge` architecture, still fully supported.
152
+ `--template`, `--template-url`, and `--ref` select the template and version
153
+ under this route; `create-forge update` against a `.copier-answers.yml`
154
+ project runs `copier update`. The `legacy` extra installs `copier`; without
155
+ it, `--legacy` exits `3` naming the remedy.
158
156
 
159
157
  ## What's next
160
158
 
161
- The Foundation and Data Science roadmaps are complete. Making the engine
162
- the default generation workflow is a planned direction with no scheduled
163
- release. Follow [open work](https://github.com/Sandsy09/create-forge/issues)
164
- and [releases](https://github.com/Sandsy09/create-forge/releases) for updates,
165
- or suggest a project type, capability, or guide you would find useful.
159
+ The Foundation, Data Science, and Engine-Default Cutover roadmaps are
160
+ complete. The filed [Streamlit Archetype](docs/roadmap-v4/README.md) roadmap
161
+ describes the next project type. Follow
162
+ [open work](https://github.com/Sandsy09/create-forge/issues) and
163
+ [releases](https://github.com/Sandsy09/create-forge/releases) for updates, or
164
+ suggest a project type, capability, or guide you would find useful.
166
165
 
167
166
  ## Feedback and contributing
168
167
 
@@ -0,0 +1,77 @@
1
+ # Canonical contracts
2
+
3
+ This is the index of `create-forge`'s living contract documents — the
4
+ `docs/*.md` files that fix behaviour a test or an ADR treats as binding, as
5
+ opposed to prose that merely describes the code. [CLAUDE.md](../CLAUDE.md) and
6
+ [CONTRIBUTING.md](../CONTRIBUTING.md) point here rather than restating this
7
+ list; several entries have their own link-audit test in
8
+ [tests/test_engine_contract.py](../tests/test_engine_contract.py) or
9
+ [tests/test_reference_client_boundary.py](../tests/test_reference_client_boundary.py)
10
+ requiring them to stay linked from here.
11
+
12
+ A contract changes in the same pull request as the behaviour it describes.
13
+ Records are living documents, not immutable like an ADR — but a change to one
14
+ still usually cites the ADR that authorised it.
15
+
16
+ ## CLI surface
17
+
18
+ | Contract | Governs |
19
+ | --- | --- |
20
+ | [cli-conventions.md](cli-conventions.md) | Input precedence, prompt-skipping, interactive/non-interactive parity, validation ownership, exit statuses. |
21
+ | [component-selection.md](component-selection.md) | `--capability`/`--platform`/`--component-option` flags, absent-vs-explicit-empty, precedence, prompt order (ADR 0027). |
22
+ | [engine-default-cli.md](engine-default-cli.md) | The post-cutover command surface: engine as the default `new` path, `--legacy`, `--engine-source`/`--engine-ref` (ADR 0040). |
23
+ | [engine-project-lifecycle.md](engine-project-lifecycle.md) | Post-generation `git init`/commit/hooks, `.forge/generation.json`, and `update` dispatch (ADR 0041). |
24
+ | [engine-cutover-acceptance.md](engine-cutover-acceptance.md) | The cutover release, supported OS/Python/install matrix, acceptance gates, support and deprecation windows (ADR 0042). |
25
+
26
+ ## Engine boundary
27
+
28
+ | Contract | Governs |
29
+ | --- | --- |
30
+ | [integration-contract.md](integration-contract.md) | The evolving package/protocol compatibility rules with `forge-template` (ADR 0010). Its compatibility table is asserted byte-exact by a test. |
31
+ | [engine-resolution.md](engine-resolution.md) | How the engine package is sourced, overridden locally, diagnosed, and rejected when incompatible (ADR 0011). |
32
+ | [engine-updates.md](engine-updates.md) | How a compatibility-line dependency bump is adopted, how a breaking line is crossed, and what Dependabot may never do alone (ADR 0012). |
33
+ | [project-spec-construction.md](project-spec-construction.md) | The CLI-answer-to-ProjectSpec field mapping and validation `spec.py`/`engine.py` implement (ADR 0013). |
34
+ | [component-discovery.md](component-discovery.md) | Protocol negotiation, descriptor ownership, and the no-fallback trust boundary in `engine.py`. |
35
+ | [engine-contract-tests.md](engine-contract-tests.md) | The supported package/protocol range and the sibling-checkout contract-test command. |
36
+ | [downstream-client-reference.md](downstream-client-reference.md) | `examples/downstream_cli.py` — a second, independent client proving no `create-forge` dependency is required (ADR 0023). |
37
+ | [organisation-policy-consumption.md](organisation-policy-consumption.md) | The `SelectionRequest`/`SelectionProvenance` seam, and why `create-forge` ships no policy parser (ADR 0022). |
38
+
39
+ ## Filesystem and tests
40
+
41
+ | Contract | Governs |
42
+ | --- | --- |
43
+ | [filesystem-generation.md](filesystem-generation.md) | Destination-conflict, staging, finalisation, and cleanup rules in `staging.py` (ADR 0015). |
44
+ | [end-to-end-tests.md](end-to-end-tests.md) | The fast/`network`/`e2e` test-tier split and what the real console script is proven to do (ADR 0016). |
45
+
46
+ ## Validation records
47
+
48
+ Acceptance-checklist-to-named-test maps, each closing an epic or a release.
49
+
50
+ | Contract | Governs |
51
+ | --- | --- |
52
+ | [data-science-preview-validation.md](data-science-preview-validation.md) | CF-EPIC-13's acceptance checklist against the Data Science preview pipeline (ADR 0030). |
53
+ | [installed-data-science-validation.md](installed-data-science-validation.md) | Both Data Science compositions through the installed candidate wheel (ADR 0032). |
54
+ | [rollout-regression-validation.md](rollout-regression-validation.md) | Library/CLI Application engine paths, the engine-less default, and the full selection/option/destination/lock/cleanup failure matrix (ADR 0033). |
55
+ | [release-0-3-0-validation.md](release-0-3-0-validation.md) | The published `create-forge 0.3.0` / `forge-template 0.4.1` pair verified against its own artefacts (ADR 0034). |
56
+ | [engine-cutover-validation.md](engine-cutover-validation.md) | The installed-console cutover acceptance matrix's remaining rows, and the rewritten user guide (ADR 0048). |
57
+ | [release-0-4-0-validation.md](release-0-4-0-validation.md) | The published `create-forge 0.4.0` / `forge-template 0.5.0` pair verified against its own artefacts, and the Engine-Default Cutover roadmap close-out (ADR 0049). |
58
+
59
+ ## Process and security
60
+
61
+ | Contract | Governs |
62
+ | --- | --- |
63
+ | [workflow-security.md](workflow-security.md) | SHA-pinning external Actions and per-job `permissions:` scoping (ADR 0037). |
64
+ | [cross-repository-workflow.md](cross-repository-workflow.md) | Validating sibling `create-forge`/`forge-template` checkouts before merge or release. |
65
+ | [ADR 0024](adr/0024-reference-client-not-framework-dependency.md) | `create-forge` is one reference client, not a framework dependency for the engine or generated projects. |
66
+ | [ADR 0037](adr/0037-immutable-workflow-actions.md) | The SHA-pinning and permissions rule `workflow-security.md` records. |
67
+
68
+ ## Elsewhere
69
+
70
+ - [docs/adr/README.md](adr/README.md) — the full Architecture Decision Record
71
+ index, in Nygard format.
72
+ - [docs/roadmap-v1/](roadmap-v1/) through [docs/roadmap-v4/](roadmap-v4/) —
73
+ completed and in-flight cross-repository roadmaps.
74
+ - [docs/user-guide/](user-guide/) — the published
75
+ [Forge user guide](https://sandsy09.github.io/create-forge/) (end-user
76
+ docs; source of `reference.md`'s own technical-reference index for engine
77
+ APIs hosted in `forge-template`).
@@ -42,6 +42,16 @@ format](https://cognitect.com/blog/2011/11/15/documenting-architecture-decisions
42
42
  - [0037 — Pin external Actions to reviewed commits and scope permissions per job](0037-immutable-workflow-actions.md)
43
43
  - [0038 — Raise the Copier floor past the destination-escape advisories and hold uv](0038-dependency-floor-review.md)
44
44
  - [0039 — Diagnose the Copier template cache](0039-copier-cache-diagnostics.md)
45
+ - [0040 — Define engine-default selection and source-resolution UX](0040-engine-default-selection-and-source-resolution.md)
46
+ - [0041 — Define engine project lifecycle and update dispatch](0041-engine-project-lifecycle-and-update-dispatch.md)
47
+ - [0042 — Approve the engine-default cutover acceptance and support policy](0042-engine-cutover-acceptance-and-support-policy.md)
48
+ - [0043 — Consolidate CLAUDE.md and CONTRIBUTING.md behind a docs index](0043-consolidate-contributor-documentation.md)
49
+ - [0044 — Run `--engine-source` overrides out of process](0044-out-of-process-engine-source-overrides.md)
50
+ - [0045 — Run the engine `new` Git/hook lifecycle in a new module, and refuse the excluded targets it makes load-bearing](0045-engine-generation-lifecycle-and-staging-exclusions.md)
51
+ - [0046 — Apply the engine-native update client-side with `git merge-file`, and reproduce the old render with a version-match short-circuit](0046-engine-native-update-application.md)
52
+ - [0047 — Reject a pre-cutover `--engine-preview` project with one diagnostic, add no migration helper, and keep the Copier route reachable without a usable engine](0047-legacy-copier-retention-and-preview-transition.md)
53
+ - [0048 — Complete the installed cutover acceptance evidence and the user guide's post-cutover voice](0048-installed-cutover-acceptance-evidence.md)
54
+ - [0049 — Publish create-forge 0.4.0 and close the Engine-Default Cutover roadmap](0049-publish-0-4-0-and-close-roadmap-v3.md)
45
55
 
46
56
  Add a new record by copying the most recent one and incrementing the number.
47
57
  Records are immutable: supersede them rather than editing.
@@ -0,0 +1,62 @@
1
+ # Engine-Default Cutover roadmap
2
+
3
+ ## Status
4
+
5
+ Filed and open. This pack records 5 repository-owned epics and
6
+ 21 children for Stages 15–18, with verified issue numbers, labels,
7
+ milestones, native parents and direct dependencies. No release or runtime
8
+ implementation is claimed by these planning documents.
9
+
10
+ The `create-forge`-side implementation this pack planned is complete on
11
+ `main`: CF-18.01 through CF-18.06 shipped the engine-default cutover, and
12
+ CF-18.07 ([#164](https://github.com/Sandsy09/create-forge/issues/164), ADR
13
+ 0049) is publishing it as `create-forge 0.4.0`, gated on
14
+ [FT-18.01](https://github.com/Sandsy09/forge-template/issues/156)'s
15
+ provider-side integrated validation. See `docs/release-0-4-0-validation.md`
16
+ for the publication evidence once it lands.
17
+
18
+ Working engine-native updates and continued support for existing Copier
19
+ projects gate the engine-default release. Detailed architecture remains
20
+ subject to the explicit decision children.
21
+
22
+ ## Read this pack
23
+
24
+ - [Stage overview](ROADMAP.md)
25
+ - [Architecture and decision boundaries](ARCHITECTURE.md)
26
+ - [Repository ownership](REPOSITORY-OWNERSHIP.md)
27
+ - [Review traceability](TRACEABILITY.md)
28
+ - [GitHub filing record and reconciliation procedure](github-issues/GITHUB-SETUP.md)
29
+ - [Direct dependency matrix](github-issues/CROSS-REPO-DEPENDENCIES.md)
30
+ - [Client issue index](github-issues/create-forge/ISSUE-INDEX.md)
31
+ - [Provider issue index](github-issues/forge-template/ISSUE-INDEX.md)
32
+ - [Machine-readable filing manifest](github-issues/filing-manifest.json)
33
+
34
+ ## Coordination
35
+
36
+ The two packs are mirrored in both repositories. The reviewed manifest and
37
+ complete bodies record the filed state. GitHub bodies and native relationships
38
+ are authoritative; update both mirrors when decisions alter scope or
39
+ dependencies. Never invent or reuse GitHub numbers.
40
+
41
+ The next [Streamlit roadmap](../roadmap-v4/README.md) shares the contract
42
+ gates. Preserve completed roadmap-v1/v2 records and historical ADRs.
43
+
44
+ ## Filed-state validation
45
+
46
+ From either repository root:
47
+
48
+ ```bash
49
+ uv run python scripts/check_roadmaps.py
50
+ uv run poe check
51
+ uv run pre-commit run --all-files
52
+ ```
53
+
54
+ For a normal sibling layout, compare from create-forge with
55
+ `uv run python scripts/check_roadmaps.py --mirror ../forge-template`,
56
+ or from forge-template with
57
+ `uv run python scripts/check_roadmaps.py --mirror ../create-forge`.
58
+ Use an absolute mirror path when reviewing an isolated worktree.
59
+ The checker reads both packs, validates links/anchors and the filing graph,
60
+ and compares mirrored bytes and shared label manifests when requested.
61
+ It performs no GitHub writes. The create-forge shared guide also requires
62
+ `uv run poe docs:build`; provider technical docs are not a MkDocs site.
@@ -0,0 +1,32 @@
1
+ # Stage 15 — Engine-Default Provider Contracts
2
+
3
+ ## Status and epics
4
+
5
+ Filed and open.
6
+ [FT-EPIC-15](https://github.com/Sandsy09/forge-template/issues/141).
7
+
8
+ ## Entry criteria
9
+
10
+ Follow each child's direct blockers below. Contract approval unblocks design;
11
+ provider publication unblocks adoption. A blocked child must not begin before
12
+ its required decision or immutable hand-off is accepted.
13
+
14
+ ## Child work
15
+
16
+ | Child | Outcome | Direct blockers |
17
+ | --- | --- | --- |
18
+ | [FT-15.01](https://github.com/Sandsy09/forge-template/issues/146) | Account for every supported behaviour, generated concern and explicit exclusion. | None |
19
+ | [FT-15.02](https://github.com/Sandsy09/forge-template/issues/147) | Specify versioned metadata, output ownership and reproducible old/new render requirements. | [FT-15.01](https://github.com/Sandsy09/forge-template/issues/146) |
20
+ | [FT-15.03](https://github.com/Sandsy09/forge-template/issues/148) | Assign concerns to Foundation, archetypes, capabilities and platforms; identify necessary extension points. | [FT-15.01](https://github.com/Sandsy09/forge-template/issues/146) |
21
+ | [FT-15.04](https://github.com/Sandsy09/forge-template/issues/149) | Classify public API/protocol changes and approve the provider acceptance matrix. | [FT-15.02](https://github.com/Sandsy09/forge-template/issues/147), [FT-15.03](https://github.com/Sandsy09/forge-template/issues/148) |
22
+
23
+ ## Exit criteria
24
+
25
+ All stage-owned children have reviewed completion evidence. Resolve acceptance
26
+ criteria through their named owner and keep scope within the approved contracts.
27
+
28
+ ## Non-goals
29
+
30
+ No unrelated operational work, new archetype outside this roadmap, remote
31
+ component registry or plugin system. Contract-only stages make no runtime,
32
+ generated-content, dependency, version or release changes.