codexspec 0.6.1__tar.gz → 0.6.2__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 (57) hide show
  1. {codexspec-0.6.1 → codexspec-0.6.2}/PKG-INFO +1 -1
  2. {codexspec-0.6.1 → codexspec-0.6.2}/pyproject.toml +1 -1
  3. {codexspec-0.6.1 → codexspec-0.6.2}/src/codexspec/__init__.py +53 -3
  4. {codexspec-0.6.1 → codexspec-0.6.2}/src/codexspec/i18n.py +123 -15
  5. {codexspec-0.6.1 → codexspec-0.6.2}/templates/commands/analyze.md +6 -1
  6. {codexspec-0.6.1 → codexspec-0.6.2}/templates/commands/checklist.md +5 -5
  7. {codexspec-0.6.1 → codexspec-0.6.2}/templates/commands/clarify.md +6 -1
  8. {codexspec-0.6.1 → codexspec-0.6.2}/templates/commands/config.md +12 -8
  9. {codexspec-0.6.1 → codexspec-0.6.2}/templates/commands/constitution.md +5 -4
  10. {codexspec-0.6.1 → codexspec-0.6.2}/templates/commands/generate-spec.md +6 -1
  11. {codexspec-0.6.1 → codexspec-0.6.2}/templates/commands/implement-tasks.md +5 -5
  12. {codexspec-0.6.1 → codexspec-0.6.2}/templates/commands/plan-to-tasks.md +6 -1
  13. {codexspec-0.6.1 → codexspec-0.6.2}/templates/commands/quick.md +6 -1
  14. {codexspec-0.6.1 → codexspec-0.6.2}/templates/commands/review-code.md +5 -5
  15. {codexspec-0.6.1 → codexspec-0.6.2}/templates/commands/review-plan.md +6 -1
  16. {codexspec-0.6.1 → codexspec-0.6.2}/templates/commands/review-spec.md +6 -1
  17. {codexspec-0.6.1 → codexspec-0.6.2}/templates/commands/review-tasks.md +6 -1
  18. {codexspec-0.6.1 → codexspec-0.6.2}/templates/commands/spec-to-plan.md +6 -1
  19. {codexspec-0.6.1 → codexspec-0.6.2}/templates/commands/specify.md +6 -1
  20. {codexspec-0.6.1 → codexspec-0.6.2}/templates/commands/tasks-to-issues.md +5 -5
  21. {codexspec-0.6.1 → codexspec-0.6.2}/.gitignore +0 -0
  22. {codexspec-0.6.1 → codexspec-0.6.2}/LICENSE +0 -0
  23. {codexspec-0.6.1 → codexspec-0.6.2}/README.md +0 -0
  24. {codexspec-0.6.1 → codexspec-0.6.2}/codexspec-icon.svg +0 -0
  25. {codexspec-0.6.1 → codexspec-0.6.2}/codexspec-logo-dark.svg +0 -0
  26. {codexspec-0.6.1 → codexspec-0.6.2}/codexspec-logo-light.svg +0 -0
  27. {codexspec-0.6.1 → codexspec-0.6.2}/scripts/bash/check-i18n-completeness.sh +0 -0
  28. {codexspec-0.6.1 → codexspec-0.6.2}/scripts/bash/check-i18n-structure.sh +0 -0
  29. {codexspec-0.6.1 → codexspec-0.6.2}/scripts/bash/check-prerequisites.sh +0 -0
  30. {codexspec-0.6.1 → codexspec-0.6.2}/scripts/bash/common.sh +0 -0
  31. {codexspec-0.6.1 → codexspec-0.6.2}/scripts/bash/create-new-feature.sh +0 -0
  32. {codexspec-0.6.1 → codexspec-0.6.2}/scripts/powershell/check-prerequisites.ps1 +0 -0
  33. {codexspec-0.6.1 → codexspec-0.6.2}/scripts/powershell/common.ps1 +0 -0
  34. {codexspec-0.6.1 → codexspec-0.6.2}/scripts/powershell/create-new-feature.ps1 +0 -0
  35. {codexspec-0.6.1 → codexspec-0.6.2}/src/codexspec/commands/__init__.py +0 -0
  36. {codexspec-0.6.1 → codexspec-0.6.2}/src/codexspec/commands/installer.py +0 -0
  37. {codexspec-0.6.1 → codexspec-0.6.2}/src/codexspec/idea.md +0 -0
  38. {codexspec-0.6.1 → codexspec-0.6.2}/src/codexspec/translator.py +0 -0
  39. {codexspec-0.6.1 → codexspec-0.6.2}/templates/commands/commit-staged.md +0 -0
  40. {codexspec-0.6.1 → codexspec-0.6.2}/templates/commands/pr.md +0 -0
  41. {codexspec-0.6.1 → codexspec-0.6.2}/templates/docs/checklist-template.md +0 -0
  42. {codexspec-0.6.1 → codexspec-0.6.2}/templates/docs/constitution-template.md +0 -0
  43. {codexspec-0.6.1 → codexspec-0.6.2}/templates/docs/plan-template-detailed.md +0 -0
  44. {codexspec-0.6.1 → codexspec-0.6.2}/templates/docs/plan-template-simple.md +0 -0
  45. {codexspec-0.6.1 → codexspec-0.6.2}/templates/docs/requirements-template.md +0 -0
  46. {codexspec-0.6.1 → codexspec-0.6.2}/templates/docs/spec-template-detailed.md +0 -0
  47. {codexspec-0.6.1 → codexspec-0.6.2}/templates/docs/spec-template-simple.md +0 -0
  48. {codexspec-0.6.1 → codexspec-0.6.2}/templates/docs/tasks-template-detailed.md +0 -0
  49. {codexspec-0.6.1 → codexspec-0.6.2}/templates/docs/tasks-template-simple.md +0 -0
  50. {codexspec-0.6.1 → codexspec-0.6.2}/templates/translations/de.json +0 -0
  51. {codexspec-0.6.1 → codexspec-0.6.2}/templates/translations/en.json +0 -0
  52. {codexspec-0.6.1 → codexspec-0.6.2}/templates/translations/es.json +0 -0
  53. {codexspec-0.6.1 → codexspec-0.6.2}/templates/translations/fr.json +0 -0
  54. {codexspec-0.6.1 → codexspec-0.6.2}/templates/translations/ja.json +0 -0
  55. {codexspec-0.6.1 → codexspec-0.6.2}/templates/translations/ko.json +0 -0
  56. {codexspec-0.6.1 → codexspec-0.6.2}/templates/translations/pt-BR.json +0 -0
  57. {codexspec-0.6.1 → codexspec-0.6.2}/templates/translations/zh-CN.json +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codexspec
3
- Version: 0.6.1
3
+ Version: 0.6.2
4
4
  Summary: CodexSpec - A Requirements-First SDD toolkit for Claude Code
5
5
  Project-URL: Homepage, https://github.com/Zts0hg/codexspec
6
6
  Project-URL: Repository, https://github.com/Zts0hg/codexspec
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "codexspec"
3
- version = "0.6.1"
3
+ version = "0.6.2"
4
4
  description = "CodexSpec - A Requirements-First SDD toolkit for Claude Code"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
@@ -30,12 +30,13 @@ from .commands.installer import (
30
30
  from .i18n import (
31
31
  generate_config_content,
32
32
  get_commit_language,
33
+ get_interaction_language,
33
34
  get_language_name,
34
- get_project_language,
35
35
  get_supported_languages,
36
36
  is_supported_language,
37
37
  normalize_locale,
38
38
  update_config_language,
39
+ update_language_field,
39
40
  update_output_language,
40
41
  )
41
42
  from .translator import translate
@@ -185,6 +186,16 @@ def config(
185
186
  "-c",
186
187
  help="Set the commit message language (defaults to output language)",
187
188
  ),
189
+ set_interaction_lang: Optional[str] = typer.Option(
190
+ None,
191
+ "--set-interaction-lang",
192
+ help="Set the interaction language (LLM dialogue + codexspec CLI terminal output)",
193
+ ),
194
+ set_document_lang: Optional[str] = typer.Option(
195
+ None,
196
+ "--set-document-lang",
197
+ help="Set the document language (generated requirements/spec/plan/tasks files)",
198
+ ),
188
199
  list_langs: bool = typer.Option(
189
200
  False,
190
201
  "--list-langs",
@@ -322,6 +333,45 @@ def config(
322
333
  console.print(f"[green]Commit message language set to:[/green] {normalized} ({lang_name})")
323
334
  return
324
335
 
336
+ # Handle set interaction language
337
+ if set_interaction_lang:
338
+ normalized = normalize_locale(set_interaction_lang)
339
+ if not is_supported_language(normalized):
340
+ console.print(
341
+ f"[yellow]Warning: '{set_interaction_lang}' is not in the list of "
342
+ "commonly supported languages.[/yellow]"
343
+ )
344
+ console.print(
345
+ "It may still work if Claude supports it. "
346
+ "Run [cyan]codexspec config --list-langs[/cyan] to see supported languages."
347
+ )
348
+ if update_language_field(config_file, "interaction", normalized):
349
+ lang_name = get_language_name(normalized)
350
+ console.print(f"[green]Interaction language set to:[/green] {normalized} ({lang_name})")
351
+ else:
352
+ console.print("[red]Failed to update interaction language setting[/red]")
353
+ raise typer.Exit(1)
354
+ return
355
+
356
+ # Handle set document language
357
+ if set_document_lang:
358
+ normalized = normalize_locale(set_document_lang)
359
+ if not is_supported_language(normalized):
360
+ console.print(
361
+ f"[yellow]Warning: '{set_document_lang}' is not in the list of commonly supported languages.[/yellow]"
362
+ )
363
+ console.print(
364
+ "It may still work if Claude supports it. "
365
+ "Run [cyan]codexspec config --list-langs[/cyan] to see supported languages."
366
+ )
367
+ if update_language_field(config_file, "document", normalized):
368
+ lang_name = get_language_name(normalized)
369
+ console.print(f"[green]Document language set to:[/green] {normalized} ({lang_name})")
370
+ else:
371
+ console.print("[red]Failed to update document language setting[/red]")
372
+ raise typer.Exit(1)
373
+ return
374
+
325
375
  # Display current configuration
326
376
  console.print(
327
377
  Panel(
@@ -340,8 +390,8 @@ def list_commands() -> None:
340
390
  showing their display names and descriptions.
341
391
  """
342
392
 
343
- # Get user's language preference
344
- language = get_project_language()
393
+ # Get user's language preference (CLI terminal output uses the interaction language)
394
+ language = get_interaction_language()
345
395
 
346
396
  metadata = get_installed_commands_metadata()
347
397
 
@@ -8,6 +8,7 @@ at runtime.
8
8
  """
9
9
 
10
10
  import os
11
+ import re
11
12
  from pathlib import Path
12
13
  from typing import Optional
13
14
 
@@ -194,9 +195,18 @@ version: "1.0"
194
195
 
195
196
  # Language settings for internationalization (i18n)
196
197
  language:
197
- # Output language - Claude will use this language for interactions
198
- # and generated documents. Supports any Claude-supported language.
198
+ # Interaction language - language for conversing with the user (LLM dialogue
199
+ # and codexspec CLI terminal output). Supports any Claude-supported language.
199
200
  # Common values: en, zh-CN, zh-TW, ja, ko, es, fr, de, pt, ru
201
+ interaction: "{language}"
202
+
203
+ # Document language - language for generated artifact files
204
+ # (requirements/spec/plan/tasks). Set this differently from interaction to
205
+ # keep documents in one language while conversing in another.
206
+ document: "{language}"
207
+
208
+ # Output language (legacy) - fallback used when interaction/document are not
209
+ # set. Kept for backward compatibility; prefer setting interaction/document.
200
210
  output: "{language}"
201
211
 
202
212
  # Commit message language - language for git commit messages
@@ -235,31 +245,91 @@ def generate_config_content(language: str = "en", created: str = None) -> str:
235
245
  return CONFIG_TEMPLATE.format(language=normalized_lang, created=created)
236
246
 
237
247
 
238
- def get_project_language() -> str:
239
- """Get the project language from .codexspec/config.yml.
248
+ def _read_language_key(content: str, key: str) -> Optional[str]:
249
+ """Read a `key: value` language setting from config content (YAML-like regex).
240
250
 
241
- Returns:
242
- The configured language code, or "en" if not configured or file doesn't exist.
251
+ Returns the raw value (quotes stripped) or None if the key is absent.
243
252
  """
244
- import re
245
- from pathlib import Path
253
+ match = re.search(rf"^\s*{re.escape(key)}:\s*['\"]?(\S+?)['\"]?\s*$", content, re.MULTILINE)
254
+ return match.group(1) if match else None
255
+
246
256
 
247
- config_file = Path.cwd() / ".codexspec" / "config.yml"
257
+ def _resolve_language(config_file: Path, primary_key: str) -> str:
258
+ """Resolve a language setting: primary_key -> output (legacy) -> 'en'.
259
+
260
+ Args:
261
+ config_file: Path to the project's config.yml.
262
+ primary_key: The primary language key to try first ('interaction' or 'document').
263
+
264
+ Returns:
265
+ The normalized language code, defaulting to 'en'.
266
+ """
248
267
  if not config_file.exists():
249
268
  return "en"
250
-
251
269
  try:
252
270
  content = config_file.read_text(encoding="utf-8")
253
- # Parse the language setting from YAML-like format
254
- match = re.search(r"^\s*output:\s*['\"]?(\S+?)['\"]?\s*$", content, re.MULTILINE)
255
- if match:
256
- return normalize_locale(match.group(1)) or "en"
271
+ for key in (primary_key, "output"):
272
+ value = _read_language_key(content, key)
273
+ if value:
274
+ return normalize_locale(value) or "en"
257
275
  except (OSError, re.error):
258
276
  pass
259
-
260
277
  return "en"
261
278
 
262
279
 
280
+ def _default_config_path() -> Path:
281
+ return Path.cwd() / ".codexspec" / "config.yml"
282
+
283
+
284
+ def get_interaction_language(config_file: Optional[Path] = None) -> str:
285
+ """Resolve the interaction language (user<->LLM conversation and CLI terminal).
286
+
287
+ Resolution order: explicit `language.interaction` -> `language.output`
288
+ (legacy) -> 'en'. Existing configs that only set `output` behave exactly as
289
+ before.
290
+
291
+ Args:
292
+ config_file: Optional explicit path to config.yml; defaults to
293
+ `.codexspec/config.yml` in the current working directory.
294
+
295
+ Returns:
296
+ The normalized interaction language code.
297
+ """
298
+ return _resolve_language(config_file or _default_config_path(), "interaction")
299
+
300
+
301
+ def get_document_language(config_file: Optional[Path] = None) -> str:
302
+ """Resolve the document language (generated artifact files).
303
+
304
+ Resolution order: explicit `language.document` -> `language.output`
305
+ (legacy) -> 'en'. Existing configs that only set `output` behave exactly as
306
+ before.
307
+
308
+ Args:
309
+ config_file: Optional explicit path to config.yml; defaults to
310
+ `.codexspec/config.yml` in the current working directory.
311
+
312
+ Returns:
313
+ The normalized document language code.
314
+ """
315
+ return _resolve_language(config_file or _default_config_path(), "document")
316
+
317
+
318
+ def get_project_language(config_file: Optional[Path] = None) -> str:
319
+ """Get the project language from .codexspec/config.yml.
320
+
321
+ Backward-compatibility alias for the interaction language. Historically this
322
+ returned the `output` language; it now resolves the interaction language,
323
+ which falls back to `output` then `en` — so output-only configs are
324
+ unaffected. Prefer :func:`get_interaction_language` / :func:`get_document_language`
325
+ for new code.
326
+
327
+ Returns:
328
+ The configured language code, or "en" if not configured or file doesn't exist.
329
+ """
330
+ return get_interaction_language(config_file)
331
+
332
+
263
333
  def get_commit_language(config_file: Path) -> Optional[str]:
264
334
  """Get the commit language from a config.yml file.
265
335
 
@@ -286,6 +356,44 @@ def get_commit_language(config_file: Path) -> Optional[str]:
286
356
  return None
287
357
 
288
358
 
359
+ def update_language_field(config_file: Path, key: str, language: str) -> bool:
360
+ """Update a single ``language.<key>`` setting in config.yml.
361
+
362
+ Updates the value in place when ``key`` already exists; otherwise inserts
363
+ ``<indent>{key}: "{language}"`` immediately after the ``language:`` line.
364
+ The value is normalized via :func:`normalize_locale`.
365
+
366
+ Args:
367
+ config_file: Path to the project's config.yml.
368
+ key: Language sub-key to set (e.g. "interaction", "document").
369
+ language: New language code (will be normalized).
370
+
371
+ Returns:
372
+ True if updated or inserted; False if there is no ``language:`` section
373
+ to insert into or the file cannot be written.
374
+ """
375
+ normalized = normalize_locale(language)
376
+ try:
377
+ content = config_file.read_text(encoding="utf-8")
378
+ pattern = rf'^(\s*{re.escape(key)}:\s*)["\']?\S+?["\']?\s*$'
379
+ new_content, count = re.subn(pattern, rf'\g<1>"{normalized}"', content, flags=re.MULTILINE)
380
+ if count:
381
+ config_file.write_text(new_content, encoding="utf-8")
382
+ return True
383
+
384
+ # Key absent: insert under the `language:` section.
385
+ lang_match = re.search(r"^(\s*)language:\s*$", content, re.MULTILINE)
386
+ if not lang_match:
387
+ return False
388
+ indent = lang_match.group(1) + " "
389
+ insert_line = f'{indent}{key}: "{normalized}"'
390
+ end = lang_match.end()
391
+ config_file.write_text(content[:end] + "\n" + insert_line + content[end:], encoding="utf-8")
392
+ return True
393
+ except (OSError, re.error):
394
+ return False
395
+
396
+
289
397
  def update_output_language(config_file: Path, language: str) -> bool:
290
398
  """Update only the output language setting in config.yml.
291
399
 
@@ -7,7 +7,12 @@ argument-hint: "[feature directory]"
7
7
 
8
8
  ## Language Preference
9
9
 
10
- Read `.codexspec/config.yml`. Use `language.output`; default to English.
10
+ Read `.codexspec/config.yml`. Two independent language controls apply (each falls back to `language.output`, then English):
11
+
12
+ - **Interaction language** (`language.interaction`): language for all conversation with the user — questions, explanations, status messages, and `codexspec` CLI terminal output.
13
+ - **Document language** (`language.document`): language for generated artifact files (requirements/spec/plan/tasks).
14
+
15
+ Converse in the interaction language and author artifacts in the document language. Apply the project's translation standard to both: translate by meaning (not word-for-word), keep English for terms with no good native equivalent, and write as if originally in that language.
11
16
 
12
17
  ## User Input
13
18
 
@@ -20,12 +20,12 @@ scripts:
20
20
 
21
21
  ## Language Preference
22
22
 
23
- **IMPORTANT**: Before proceeding, read the project's language configuration from `.codexspec/config.yml`.
23
+ Read `.codexspec/config.yml`. Two independent language controls apply (each falls back to `language.output`, then English):
24
24
 
25
- - If `language.output` is set to a language other than "en", respond and generate all content in that language
26
- - If not configured or set to "en", use English as default
27
- - Technical terms (e.g., API, JWT, OAuth) may remain in English when appropriate
28
- - All user-facing messages, questions, and generated documents should use the configured language
25
+ - **Interaction language** (`language.interaction`): language for all conversation with the user — questions, explanations, status messages, and `codexspec` CLI terminal output.
26
+ - **Document language** (`language.document`): language for generated artifact files (requirements/spec/plan/tasks).
27
+
28
+ Converse in the interaction language and author artifacts in the document language. Apply the project's translation standard to both: translate by meaning (not word-for-word), keep English for terms with no good native equivalent, and write as if originally in that language.
29
29
 
30
30
  ## Checklist Purpose: "Unit Tests for Requirements"
31
31
 
@@ -7,7 +7,12 @@ argument-hint: "[spec.md, requirements.md, or feature directory]"
7
7
 
8
8
  ## Language Preference
9
9
 
10
- Read `.codexspec/config.yml`. Use `language.output`; default to English.
10
+ Read `.codexspec/config.yml`. Two independent language controls apply (each falls back to `language.output`, then English):
11
+
12
+ - **Interaction language** (`language.interaction`): language for all conversation with the user — questions, explanations, status messages, and `codexspec` CLI terminal output.
13
+ - **Document language** (`language.document`): language for generated artifact files (requirements/spec/plan/tasks).
14
+
15
+ Converse in the interaction language and author artifacts in the document language. Apply the project's translation standard to both: translate by meaning (not word-for-word), keep English for terms with no good native equivalent, and write as if originally in that language.
11
16
 
12
17
  ## User Input
13
18
 
@@ -7,12 +7,14 @@ argument-hint: "[--view] View current configuration without modification"
7
7
 
8
8
  ## Language Preference
9
9
 
10
- **IMPORTANT**: Before proceeding, read the project's language configuration from `.codexspec/config.yml`.
10
+ Read `.codexspec/config.yml`. Two independent language controls apply (each falls back to `language.output`, then English):
11
11
 
12
- - If `language.output` is set to a language other than "en", respond and generate all content in that language
13
- - If not configured or set to "en", use English as default
14
- - Technical terms (e.g., API, config.yml) may remain in English when appropriate
15
- - All user-facing messages, questions, and generated documents should use the configured language
12
+ - **Interaction language** (`language.interaction`): language for all conversation with the user — questions, explanations, status messages, and `codexspec` CLI terminal output.
13
+ - **Document language** (`language.document`): language for generated artifact files (requirements/spec/plan/tasks).
14
+
15
+ Converse in the interaction language and author artifacts in the document language. Apply the project's translation standard to both: translate by meaning (not word-for-word), keep English for terms with no good native equivalent, and write as if originally in that language.
16
+
17
+ A fresh or reset config writes only `output`; `interaction` and `document` resolve to it via the fallback above, so an `output`-only config is fully functional (non-blocking). Set `interaction` or `document` individually only to make them differ from `output`. That is why the YAML examples below stay `output`-only.
16
18
 
17
19
  ## Parameter Check
18
20
 
@@ -98,7 +100,9 @@ Display the configuration as in Step 2, then exit.
98
100
  "question": "Which setting would you like to modify?",
99
101
  "header": "Modify",
100
102
  "options": [
101
- {"label": "Output language", "description": "Language for generated content (currently: {current value})"},
103
+ {"label": "Interaction language", "description": "Language for conversing with you (LLM dialogue + codexspec CLI terminal output) (currently: {current value})"},
104
+ {"label": "Document language", "description": "Language for generated artifact files (requirements/spec/plan/tasks) (currently: {current value})"},
105
+ {"label": "Output language (legacy)", "description": "Fallback language used when interaction/document are not set (currently: {current value})"},
102
106
  {"label": "Commit language", "description": "Language for commit messages (currently: {current value})"},
103
107
  {"label": "Back", "description": "Return to main menu"}
104
108
  ]
@@ -182,7 +186,7 @@ Let's configure your language preferences.
182
186
  ```json
183
187
  {
184
188
  "questions": [{
185
- "question": "Select your preferred output language (for generated content, documentation, etc.):",
189
+ "question": "Select your project's base language (sets `output`; interaction and document inherit it unless set individually):",
186
190
  "header": "Output Lang",
187
191
  "options": [
188
192
  {"label": "English (en)", "description": "Default, recommended for international projects"},
@@ -280,6 +284,6 @@ project:
280
284
 
281
285
  ## Output Format
282
286
 
283
- All messages should follow the project's language configuration. If not configured, use English as default.
287
+ Converse in the interaction language and author generated artifacts in the document language. If either is unset, it falls back to `output`, then English.
284
288
 
285
289
  Technical terms and file paths should remain in English for clarity.
@@ -23,11 +23,12 @@ handoffs:
23
23
 
24
24
  ## Language Preference
25
25
 
26
- **IMPORTANT**: Before proceeding, read the project's language configuration from `.codexspec/config.yml`.
26
+ Read `.codexspec/config.yml`. Two independent language controls apply (each falls back to `language.output`, then English):
27
27
 
28
- - If `language.output` is set to a language other than "en", respond and generate all content in that language
29
- - If not configured or set to "en", use English as default
30
- - Technical terms (e.g., API, JWT, OAuth) may remain in English when appropriate
28
+ - **Interaction language** (`language.interaction`): language for all conversation with the user — questions, explanations, status messages, and `codexspec` CLI terminal output.
29
+ - **Document language** (`language.document`): language for generated artifact files (requirements/spec/plan/tasks).
30
+
31
+ Converse in the interaction language and author artifacts in the document language. Apply the project's translation standard to both: translate by meaning (not word-for-word), keep English for terms with no good native equivalent, and write as if originally in that language.
31
32
 
32
33
  ## User Input
33
34
 
@@ -10,7 +10,12 @@ handoffs:
10
10
 
11
11
  ## Language Preference
12
12
 
13
- Read `.codexspec/config.yml`. Use `language.output` for all interaction and generated content; default to English.
13
+ Read `.codexspec/config.yml`. Two independent language controls apply (each falls back to `language.output`, then English):
14
+
15
+ - **Interaction language** (`language.interaction`): language for all conversation with the user — questions, explanations, status messages, and `codexspec` CLI terminal output.
16
+ - **Document language** (`language.document`): language for generated artifact files (requirements/spec/plan/tasks).
17
+
18
+ Converse in the interaction language and author artifacts in the document language. Apply the project's translation standard to both: translate by meaning (not word-for-word), keep English for terms with no good native equivalent, and write as if originally in that language.
14
19
 
15
20
  ## User Input
16
21
 
@@ -10,12 +10,12 @@ handoffs:
10
10
 
11
11
  ## Language Preference
12
12
 
13
- **IMPORTANT**: Before proceeding, read the project's language configuration from `.codexspec/config.yml`.
13
+ Read `.codexspec/config.yml`. Two independent language controls apply (each falls back to `language.output`, then English):
14
14
 
15
- - If `language.output` is set to a language other than "en", respond and generate all content in that language
16
- - If not configured or set to "en", use English as default
17
- - Technical terms (e.g., API, JWT, OAuth) may remain in English when appropriate
18
- - All user-facing messages, questions, and generated documents should use the configured language
15
+ - **Interaction language** (`language.interaction`): language for all conversation with the user — questions, explanations, status messages, and `codexspec` CLI terminal output.
16
+ - **Document language** (`language.document`): language for generated artifact files (requirements/spec/plan/tasks).
17
+
18
+ Converse in the interaction language and author artifacts in the document language. Apply the project's translation standard to both: translate by meaning (not word-for-word), keep English for terms with no good native equivalent, and write as if originally in that language.
19
19
 
20
20
  ## Feature Resolution
21
21
 
@@ -10,7 +10,12 @@ handoffs:
10
10
 
11
11
  ## Language Preference
12
12
 
13
- Read `.codexspec/config.yml`. Use `language.output`; default to English.
13
+ Read `.codexspec/config.yml`. Two independent language controls apply (each falls back to `language.output`, then English):
14
+
15
+ - **Interaction language** (`language.interaction`): language for all conversation with the user — questions, explanations, status messages, and `codexspec` CLI terminal output.
16
+ - **Document language** (`language.document`): language for generated artifact files (requirements/spec/plan/tasks).
17
+
18
+ Converse in the interaction language and author artifacts in the document language. Apply the project's translation standard to both: translate by meaning (not word-for-word), keep English for terms with no good native equivalent, and write as if originally in that language.
14
19
 
15
20
  ## User Input
16
21
 
@@ -7,7 +7,12 @@ argument-hint: "Describe a small requirement"
7
7
 
8
8
  ## Language Preference
9
9
 
10
- Read `.codexspec/config.yml`. Use `language.output`; default to English.
10
+ Read `.codexspec/config.yml`. Two independent language controls apply (each falls back to `language.output`, then English):
11
+
12
+ - **Interaction language** (`language.interaction`): language for all conversation with the user — questions, explanations, status messages, and `codexspec` CLI terminal output.
13
+ - **Document language** (`language.document`): language for generated artifact files (requirements/spec/plan/tasks).
14
+
15
+ Converse in the interaction language and author artifacts in the document language. Apply the project's translation standard to both: translate by meaning (not word-for-word), keep English for terms with no good native equivalent, and write as if originally in that language.
11
16
 
12
17
  ## User Input
13
18
 
@@ -14,12 +14,12 @@ allowed-tools: Read, Grep, Glob, Bash(ruff check:*), Bash(mypy:*), Bash(python -
14
14
 
15
15
  ## Language Preference
16
16
 
17
- **IMPORTANT**: Before proceeding, read the project's language configuration from `.codexspec/config.yml`.
17
+ Read `.codexspec/config.yml`. Two independent language controls apply (each falls back to `language.output`, then English):
18
18
 
19
- - If `language.output` is set to a language other than "en", respond and generate all content in that language
20
- - If not configured or set to "en", use English as default
21
- - Technical terms (e.g., API, Type Hints, PEP 8, Hooks, RAII) may remain in English when appropriate
22
- - All user-facing messages, questions, and generated documents should use the configured language
19
+ - **Interaction language** (`language.interaction`): language for all conversation with the user — questions, explanations, status messages, and `codexspec` CLI terminal output.
20
+ - **Document language** (`language.document`): language for generated artifact files (requirements/spec/plan/tasks).
21
+
22
+ Converse in the interaction language and author artifacts in the document language. Apply the project's translation standard to both: translate by meaning (not word-for-word), keep English for terms with no good native equivalent, and write as if originally in that language.
23
23
 
24
24
  ## User Input
25
25
 
@@ -10,7 +10,12 @@ handoffs:
10
10
 
11
11
  ## Language Preference
12
12
 
13
- Read `.codexspec/config.yml`. Use `language.output`; default to English.
13
+ Read `.codexspec/config.yml`. Two independent language controls apply (each falls back to `language.output`, then English):
14
+
15
+ - **Interaction language** (`language.interaction`): language for all conversation with the user — questions, explanations, status messages, and `codexspec` CLI terminal output.
16
+ - **Document language** (`language.document`): language for generated artifact files (requirements/spec/plan/tasks).
17
+
18
+ Converse in the interaction language and author artifacts in the document language. Apply the project's translation standard to both: translate by meaning (not word-for-word), keep English for terms with no good native equivalent, and write as if originally in that language.
14
19
 
15
20
  ## User Input
16
21
 
@@ -10,7 +10,12 @@ handoffs:
10
10
 
11
11
  ## Language Preference
12
12
 
13
- Read `.codexspec/config.yml`. Use `language.output`; default to English.
13
+ Read `.codexspec/config.yml`. Two independent language controls apply (each falls back to `language.output`, then English):
14
+
15
+ - **Interaction language** (`language.interaction`): language for all conversation with the user — questions, explanations, status messages, and `codexspec` CLI terminal output.
16
+ - **Document language** (`language.document`): language for generated artifact files (requirements/spec/plan/tasks).
17
+
18
+ Converse in the interaction language and author artifacts in the document language. Apply the project's translation standard to both: translate by meaning (not word-for-word), keep English for terms with no good native equivalent, and write as if originally in that language.
14
19
 
15
20
  ## User Input
16
21
 
@@ -10,7 +10,12 @@ handoffs:
10
10
 
11
11
  ## Language Preference
12
12
 
13
- Read `.codexspec/config.yml`. Use `language.output`; default to English.
13
+ Read `.codexspec/config.yml`. Two independent language controls apply (each falls back to `language.output`, then English):
14
+
15
+ - **Interaction language** (`language.interaction`): language for all conversation with the user — questions, explanations, status messages, and `codexspec` CLI terminal output.
16
+ - **Document language** (`language.document`): language for generated artifact files (requirements/spec/plan/tasks).
17
+
18
+ Converse in the interaction language and author artifacts in the document language. Apply the project's translation standard to both: translate by meaning (not word-for-word), keep English for terms with no good native equivalent, and write as if originally in that language.
14
19
 
15
20
  ## User Input
16
21
 
@@ -10,7 +10,12 @@ handoffs:
10
10
 
11
11
  ## Language Preference
12
12
 
13
- Read `.codexspec/config.yml`. Use `language.output`; default to English.
13
+ Read `.codexspec/config.yml`. Two independent language controls apply (each falls back to `language.output`, then English):
14
+
15
+ - **Interaction language** (`language.interaction`): language for all conversation with the user — questions, explanations, status messages, and `codexspec` CLI terminal output.
16
+ - **Document language** (`language.document`): language for generated artifact files (requirements/spec/plan/tasks).
17
+
18
+ Converse in the interaction language and author artifacts in the document language. Apply the project's translation standard to both: translate by meaning (not word-for-word), keep English for terms with no good native equivalent, and write as if originally in that language.
14
19
 
15
20
  ## User Input
16
21
 
@@ -10,7 +10,12 @@ scripts:
10
10
 
11
11
  ## Language Preference
12
12
 
13
- Read `.codexspec/config.yml`. Use `language.output`; default to English.
13
+ Read `.codexspec/config.yml`. Two independent language controls apply (each falls back to `language.output`, then English):
14
+
15
+ - **Interaction language** (`language.interaction`): language for all conversation with the user — questions, explanations, status messages, and `codexspec` CLI terminal output.
16
+ - **Document language** (`language.document`): language for generated artifact files (requirements/spec/plan/tasks).
17
+
18
+ Converse in the interaction language and author artifacts in the document language. Apply the project's translation standard to both: translate by meaning (not word-for-word), keep English for terms with no good native equivalent, and write as if originally in that language.
14
19
 
15
20
  ## User Input
16
21
 
@@ -20,12 +20,12 @@ scripts:
20
20
 
21
21
  ## Language Preference
22
22
 
23
- **IMPORTANT**: Before proceeding, read the project's language configuration from `.codexspec/config.yml`.
23
+ Read `.codexspec/config.yml`. Two independent language controls apply (each falls back to `language.output`, then English):
24
24
 
25
- - If `language.output` is set to a language other than "en", respond and generate all content in that language
26
- - If not configured or set to "en", use English as default
27
- - Technical terms (e.g., API, JWT, OAuth) may remain in English when appropriate
28
- - All user-facing messages, questions, and generated documents should use the configured language
25
+ - **Interaction language** (`language.interaction`): language for all conversation with the user — questions, explanations, status messages, and `codexspec` CLI terminal output.
26
+ - **Document language** (`language.document`): language for generated artifact files (requirements/spec/plan/tasks).
27
+
28
+ Converse in the interaction language and author artifacts in the document language. Apply the project's translation standard to both: translate by meaning (not word-for-word), keep English for terms with no good native equivalent, and write as if originally in that language.
29
29
 
30
30
  ## User Input
31
31
 
File without changes
File without changes
File without changes
File without changes