Skip to content

Commit 68a0e3f

Browse files
Agent IXclaude
andcommitted
spec: configuration -> Scope table (format-walkthrough #12/#22)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 parent 5bf8ee5 commit 68a0e3f

8 files changed

Lines changed: 36 additions & 7 deletions

spec/functional/core/FR-011-per-plugin-file-isolation.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
id: FR-011
33
title: "Per-Plugin File Isolation and Scoped Failure"
44
artifact_type: FR
5-
object: configuration
65
relationships:
76
- target: "ix://agent-ix/ix-cli/spec/stakeholder/StR-005"
87
type: "implements"

spec/functional/core/FR-012-layered-resolution.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
id: FR-012
33
title: "Layered Config Resolution: Env → Plugin File → Defaults"
44
artifact_type: FR
5-
object: configuration
65
relationships:
76
- target: "ix://agent-ix/ix-cli/spec/stakeholder/StR-005"
87
type: "implements"

spec/functional/core/FR-015-keyring-backend.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
id: FR-015
33
title: "OS Keyring Backend (@napi-rs/keyring)"
44
artifact_type: FR
5-
object: configuration
65
relationships:
76
- target: "ix://agent-ix/ix-cli/spec/stakeholder/StR-006"
87
type: "implements"

spec/functional/core/FR-016-encrypted-file-fallback.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
id: FR-016
33
title: "Encrypted-File Fallback for Headless Environments"
44
artifact_type: FR
5-
object: configuration
65
relationships:
76
- target: "ix://agent-ix/ix-cli/spec/stakeholder/StR-006"
87
type: "implements"

spec/functional/core/FR-020-core-plugin-schema.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,19 @@ Cluster-targeting state (which cluster, kubeconfig context) lives in the `local`
7979

8080
Other deferred core fields: proxy settings, default editor, default output format. These can be added as additive non-breaking schema changes in later versions.
8181

82+
## Configuration
83+
84+
| Name | Scope | Type | Default | Description |
85+
|---|---|---|---|---|
86+
| `logLevel` | runtime | enum (debug, info, warn, error) | `info` | Core log level; env binding `IX_LOG_LEVEL`. |
87+
| `secretsBackend` | runtime | enum (auto, keyring, age-file) | `auto` | Secrets backend selection; `auto` picks keyring when the FR-015 probe succeeds, age-file otherwise; env binding `IX_SECRETS_BACKEND`. |
88+
| `auth.serviceUrl` | runtime | string (URL) | `https://auth.ix` | IX auth-service URL; env binding `IX_AUTH_URL`. |
89+
| `auth.expiresAt` | runtime | string (ISO-8601 datetime), optional | (unset) | Token expiry written by `ix login`, read by token-refresh logic; the only core key with no env binding. |
90+
| `telemetry.enabled` | runtime | boolean | `false` | Telemetry opt-in (default off); env binding `IX_TELEMETRY`. |
91+
| `theme` | runtime | enum (auto, light, dark) | `auto` | UI theme; env binding `IX_THEME`. |
92+
| `updateCheck.enabled` | runtime | boolean | `true` | Update-check toggle; env binding `IX_UPDATE_CHECK`. |
93+
| `updateCheck.intervalHours` | runtime | integer (1–168) | `24` | Hours between update checks; env binding `IX_UPDATE_CHECK_INTERVAL_HOURS`. |
94+
8295
## Acceptance
8396

8497
- **FR-020-AC-1**: `ConfigService.forPlugin('core', CoreConfigSchema).get()` against an empty environment and absent `~/.config/ix/config.yaml` returns the full default object: `logLevel: 'info'`, `secretsBackend: 'auto'`, `auth: { serviceUrl: 'https://auth.ix' }`, `telemetry: { enabled: false }`, `theme: 'auto'`, `updateCheck: { enabled: true, intervalHours: 24 }`.

spec/functional/local/FR-009-cluster-default-configuration.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,14 @@ interface ClusterConfig {
3434
- Any field present but not a string array → throw `ConfigValidationError` with the field name.
3535
- Valid sub-fields are merged with defaults for any fields not specified.
3636

37+
## Configuration
38+
39+
| Name | Scope | Type | Default | Description |
40+
|---|---|---|---|---|
41+
| `cluster.defaultTags` | creation | string[] | `["ix-core"]` | Tags selecting the default service set deployed at cluster bring-up. |
42+
| `cluster.extraApps` | creation | string[] | `[]` | Additional apps to deploy beyond the tag-selected default set. |
43+
| `cluster.skipApps` | creation | string[] | `[]` | Apps to exclude from the default set. |
44+
3745
## Acceptance
3846

3947
- **FR-009-AC-1**: Absent config file returns `{ defaultTags: ["ix-core"], extraApps: [], skipApps: [] }`.

spec/functional/local/FR-037-multi-host-ingress-config.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,18 @@ The post-`init-cluster` operator hint emits one
111111
`address=/.<host>/<clusterIp>` directive per entry in `config.hosts`,
112112
joined into a single line.
113113

114+
## Configuration
115+
116+
| Name | Scope | Type | Default | Description |
117+
|---|---|---|---|---|
118+
| `domain.hosts` | runtime | string[] (length >= 1) | `["dev.ix"]` | Ingress base domains; each entry must have >= 2 non-empty dot-separated labels and no whitespace. `hosts[0]` is aliased as `IxConfig.internalBaseDomain`. Edits trigger the wildcard-TLS refresh paths. |
119+
| `domain.enableExternal` | runtime | boolean | `false` | Enables the external host; setting it without `domain.external` fails loudly at `loadConfig()` time (FR-037-CON-3). |
120+
| `domain.external` | runtime | string or null | `null` | External base domain. |
121+
| `domain.publicBaseUrl` | runtime | string or null | `null` | Canonical public URL for user-facing emails; must start with `http://` or `https://`; single-valued by design and NOT derived from `hosts[0]`. |
122+
| `IX_INTERNAL_BASE_DOMAIN` | session | string (env var) | (unset) | Legacy singular override; when set and non-empty, replaces `hosts` with a one-entry list. Highest precedence. |
123+
| `IX_INTERNAL_BASE_DOMAINS` | session | string (env var, comma-separated) | (unset) | Plural override of `hosts`; below the legacy singular env var, above the persisted file. |
124+
| `ingress.exposeExtraHosts` | creation | boolean (chart value) | `false` | Per-service `ix-service` chart default; when `true`, fans out one ingress host per `(fullname, baseDomain)` pair. Deliberate security boundary (see Security). |
125+
114126
## Acceptance
115127

116128
- **FR-037-AC-1**: A missing `domain` group in the persisted YAML

spec/functional/local/FR-039-auth-client-audience-allowlist.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ The local plugin **SHALL** own product-to-auth audience mappings used by local d
1212

1313
## Configuration
1414

15-
| Path | Default | Description |
16-
|---|---|---|
17-
| `local.auth.clientAudienceAllowlist` | `{ "filament-ui": ["filament"] }` | Public client id to allowed JWT audiences |
15+
| Name | Scope | Type | Default | Description |
16+
|---|---|---|---|---|
17+
| `local.auth.clientAudienceAllowlist` | runtime | object (client id to string[] audiences) | `{ "filament-ui": ["filament"] }` | Public client id to allowed JWT audiences; rendered into auth-service Helm values as `AUTH_CLIENT_AUDIENCE_ALLOWLIST` during `ix up`. |
1818

1919
## Behavior
2020

0 commit comments

Comments
 (0)