diff --git a/docs/deployment.md b/docs/deployment.md
index 76d92a2..19b371b 100644
--- a/docs/deployment.md
+++ b/docs/deployment.md
@@ -179,3 +179,9 @@ Installation links use the configured App identity. For authoring deployments wi
Run the existing schema initialization command before starting updated API and worker processes. The upgrade adds GitHub repository IDs and a deployment activation flag. Existing repository records keep deployments enabled; new discovery records start disabled. Settings and grants follow repository renames by GitHub ID. Revoked repositories retain their settings for restoration.
See [database migrations](database-migrations.md) for migration authoring, debug Adminer, drift checks, and the fresh-baseline transition.
+
+## Repository layouts
+
+Use Single deployment (`single`), Environment files (`env-files`), or Environment directories (`folders`). Automatic discovery rejects mixed environment-file and environment-directory layouts; select an explicit mode or reorganize the repository. Obsolete mode values must be replaced in Deployment settings before execution. Platform still configures one root per repository.
+
+Follow [the application example](https://github.com/ci-sourcerer/stacksmith-example-app) for deployment onboarding and its pinned [managed configuration](https://github.com/ci-sourcerer/stacksmith-example-platform). The bundled Lambda example demonstrates Composer authoring and policy, independently of deployment setup.
diff --git a/pyproject.toml b/pyproject.toml
index b985ce7..60c85c1 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -23,7 +23,7 @@ dependencies = [
"kubernetes>=32,<36",
"python-dotenv>=1,<2",
"alembic>=1.18,<2",
- "stacksmith @ git+https://github.com/ci-sourcerer/stacksmith@b113deb524078e31ce4dbc44ce3ce0f61411f32e",
+ "stacksmith @ git+https://github.com/ci-sourcerer/stacksmith@e34e3d26287165e12a3f6653f74c2194a5634462",
]
dynamic = ["version"]
diff --git a/src/stacksmith_platform/control.py b/src/stacksmith_platform/control.py
index c237d37..b24a602 100644
--- a/src/stacksmith_platform/control.py
+++ b/src/stacksmith_platform/control.py
@@ -96,9 +96,7 @@ class DeploymentDiscoveryInput(Input):
"""Repository deployment discovery options."""
gitops_root: str | None = None
- discovery_mode: Literal["auto", "single", "folders", "flat-files", "env-files"] = (
- "auto"
- )
+ discovery_mode: Literal["auto", "single", "folders", "env-files"] = "auto"
@field_validator("gitops_root")
@classmethod
@@ -111,9 +109,7 @@ class DeploymentConfigurationInput(Input):
revision: str = Field(pattern=r"^[0-9a-f]{40}$")
gitops_root: str = ""
- discovery_mode: Literal["auto", "single", "folders", "flat-files", "env-files"] = (
- "auto"
- )
+ discovery_mode: Literal["auto", "single", "folders", "env-files"] = "auto"
lock_key: str = Field(default="", max_length=200)
locked: bool
automatic: bool
@@ -144,9 +140,7 @@ class EnvironmentInput(Input):
name: str = Field(default="default", pattern=r"^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$")
gitops_root: str = "."
- discovery_mode: Literal["auto", "single", "folders", "flat-files", "env-files"] = (
- "auto"
- )
+ discovery_mode: Literal["auto", "single", "folders", "env-files"] = "auto"
lock_key: str = Field(default="", max_length=200)
locked: bool = True
automatic: bool = True
diff --git a/tests/test_authoring_inspection.py b/tests/test_authoring_inspection.py
index 7dd3e72..e6dcbb0 100644
--- a/tests/test_authoring_inspection.py
+++ b/tests/test_authoring_inspection.py
@@ -129,7 +129,7 @@ def test_environment_inputs_substitute_draft_without_changing_stack_layer_order(
)
-@pytest.mark.parametrize("mode", ["single", "folders", "flat-files", "env-files"])
+@pytest.mark.parametrize("mode", ["single", "folders", "env-files"])
def test_inspection_uses_selected_discovery_mode(context_runtime, mode):
context_runtime.inspection["context"]["settings"]["discovery_mode"] = mode
if mode == "single":
diff --git a/uv.lock b/uv.lock
index fc2d4d4..a7dde33 100644
--- a/uv.lock
+++ b/uv.lock
@@ -1542,8 +1542,8 @@ wheels = [
[[package]]
name = "stacksmith"
-version = "0.0.0.post1.dev0+b113deb"
-source = { git = "https://github.com/ci-sourcerer/stacksmith?rev=b113deb524078e31ce4dbc44ce3ce0f61411f32e#b113deb524078e31ce4dbc44ce3ce0f61411f32e" }
+version = "0.0.0.post10.dev0+e34e3d2"
+source = { git = "https://github.com/ci-sourcerer/stacksmith?rev=e34e3d26287165e12a3f6653f74c2194a5634462#e34e3d26287165e12a3f6653f74c2194a5634462" }
dependencies = [
{ name = "cryptography" },
{ name = "deepmerge" },
@@ -1616,7 +1616,7 @@ requires-dist = [
{ name = "python-dotenv", specifier = ">=1,<2" },
{ name = "ruamel-yaml", specifier = ">=0.18,<0.19" },
{ name = "sqlalchemy", specifier = ">=2.0,<3" },
- { name = "stacksmith", git = "https://github.com/ci-sourcerer/stacksmith?rev=b113deb524078e31ce4dbc44ce3ce0f61411f32e" },
+ { name = "stacksmith", git = "https://github.com/ci-sourcerer/stacksmith?rev=e34e3d26287165e12a3f6653f74c2194a5634462" },
{ name = "uvicorn", extras = ["standard"], specifier = ">=0.34,<1" },
]
diff --git a/web/src/PlatformApp.tsx b/web/src/PlatformApp.tsx
index 5e46d79..8863f0d 100644
--- a/web/src/PlatformApp.tsx
+++ b/web/src/PlatformApp.tsx
@@ -2044,8 +2044,7 @@ function deploymentModeLabel(mode: string) {
return (
{
single: "Single deployment",
- folders: "Environment folders",
- "flat-files": "Environment files in one directory",
+ folders: "Environment directories",
"env-files": "Environment files",
}[mode] ?? mode
);
@@ -2330,10 +2329,7 @@ function DeploymentSetup({
>
-
-
+
@@ -2444,10 +2440,7 @@ function DeploymentSetup({
>
-
-
+