@ancleto/spec 0.6.31 → 0.6.33

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.
package/README.md CHANGED
@@ -178,7 +178,7 @@ El registro es tuyo y local: no viaja con el repo ni se comparte. `ANCLETO_PROJE
178
178
  En la primera ejecución, un **wizard interactivo** te guía por los pasos de configuración (agente/IDE y nivel de gasto). También podés pasarlos por flags:
179
179
 
180
180
  ```bash
181
- ancleto init --agent opencode --tier normal
181
+ ancleto init --agent opencode --tier normal --lang es
182
182
  ```
183
183
 
184
184
  | Tier | Qué hace |
@@ -189,6 +189,17 @@ ancleto init --agent opencode --tier normal
189
189
 
190
190
  La configuración se preserva en `.ancletorc` (raíz del proyecto) y `.ancleto-tier` (junto a la configuración instalada).
191
191
 
192
+ ### Idioma de los artifacts
193
+
194
+ El contenido de `proposal.md`, `design.md`, `tasks.md` y `specs/` se escribe en el idioma de tu conversación (`auto`, el default) o en el código que fijes con `--lang`:
195
+
196
+ ```bash
197
+ ancleto init --lang auto # detecta el idioma de tus primeros mensajes y lo guarda
198
+ ancleto init --lang es # fija español para ese proyecto
199
+ ```
200
+
201
+ Con `auto`, el orquestador detecta el idioma en tus primeros hasta 3 mensajes y lo persiste en `.ancletorc` → `language`. Podés volver a `auto` o fijar otro código cuando quieras (`auto | es | en | pt`). Lo que **nunca** se traduce: los keywords (`Requirement`, `Scenario`, `SHALL`, `WHEN`/`THEN`/`AND`) y los nombres de archivos y directorios.
202
+
192
203
  ---
193
204
 
194
205
  ## Uso rápido
@@ -209,7 +220,7 @@ ancleto init # Crea .ancletorc, aspec/, AGENTS.md y PRODUCT.md
209
220
  ### 2. Descubrir contexto técnico
210
221
 
211
222
  ```bash
212
- ancleto discovery --check # Estado del technical seed (READY / STALE)
223
+ ancleto discovery --check # Estado del technical seed (READY / STALE / PARTIAL / MISSING) + config
213
224
  ancleto discovery # Genera .discovery-map.json y empaqueta el repo
214
225
  ```
215
226
 
@@ -226,10 +237,10 @@ ancleto discovery # Genera .discovery-map.json y empaqueta el repo
226
237
  ## Referencia de comandos CLI
227
238
 
228
239
  ```bash
229
- ancleto init [--agent <nombre>] [--tier <nivel>] [--with-azure]
240
+ ancleto init [--agent <nombre>] [--tier <nivel>] [--lang <codigo>] [--with-azure]
230
241
  # Configura el proyecto (interactivo en TTY)
231
242
 
232
- ancleto install [--project <dir>] [--tier <nivel>] [--agent <nombre>] [--no-mcp]
243
+ ancleto install [--project <dir>] [--tier <nivel>] [--agent <nombre>] [--lang <codigo>] [--no-mcp]
233
244
  # Instala agentes, skills y templates
234
245
 
235
246
  ancleto update # Re-instala la última versión sobre lo existente
@@ -117,7 +117,7 @@ Do not treat archive as a blind file move.
117
117
 
118
118
  When a completed change modifies behavior through aspec deltas, `aspec/specs/` must reflect that completed behavior before the change is archived.
119
119
 
120
- **Language**: spec artifacts are written in English. The requirement/scenario keywords (`Requirement`, `Scenario`, `SHALL`, `WHEN`/`THEN`, `ADDED/MODIFIED/REMOVED/RENAMED Requirements`) are literal and MUST NOT be translated. Paths, file names, and identifiers stay unchanged.
120
+ **Language**: write spec content in the user's conversation language (or the project's configured `language` in `.ancletorc`). The requirement/scenario keywords (`Requirement`, `Scenario`, `SHALL`, `WHEN`/`THEN`/`AND`, `ADDED/MODIFIED/REMOVED/RENAMED Requirements`) are literal and MUST NOT be translated. Paths, file names, and identifiers stay unchanged.
121
121
 
122
122
  Handle these delta sections carefully:
123
123
 
@@ -124,7 +124,17 @@ Azure DevOps is optional and **disabled by default**. Before any Work Item intak
124
124
 
125
125
  ### Resolved Context Envelope
126
126
 
127
- Keep this envelope for the entire session. Do not reconstruct it from memory or reduce it to a prose summary. When a Work Item was resolved, it contains its id, title, type, project, full normalized description, and full acceptance criteria. Add the original user request, enumerated requirements, explicit restrictions, and later user decisions or exclusions.
127
+ Keep this envelope for the entire session. Do not reconstruct it from memory or reduce it to a prose summary. When a Work Item was resolved, it contains its id, title, type, project, full normalized description, and full acceptance criteria. Add the original user request, enumerated requirements, explicit restrictions, and later user decisions or exclusions. Carry the resolved artifacts language (`language`) in the envelope as well.
128
+
129
+ ### Artifacts Language
130
+
131
+ Resolve the working language for artifact content once per session:
132
+
133
+ - Read `language` from `.ancletorc` at the repo root.
134
+ - If it is `auto`, detect the language from the user's first up to 3 messages in this session. If the user never deviates, that language governs.
135
+ - Persist it: the first write-capable delegation in the session (`@spec-writer` when spec generation runs, otherwise `@coder`) MUST update `.ancletorc` → `language` with the resolved code, but only when it is currently `auto`. This is silent bookkeeping — never ask the user for it. An explicit configured code is never overwritten.
136
+ - Pass the resolved `language` in the Resolved Context Envelope to every subagent that writes artifacts.
137
+ - Artifact content uses the resolved language; keywords (`Requirement`, `Scenario`, `SHALL`, `WHEN`/`THEN`/`AND`, `ADDED/MODIFIED/REMOVED/RENAMED Requirements`) and file/directory names stay literal English.
128
138
 
129
139
  Pass the relevant envelope verbatim when delegating: `@coder` receives the implementation scope; `@tester` receives it plus the coder's modified files and risks; `@reviewer` receives it plus task-owned files and the Validation Ledger. Do not omit numbered requirements, paths, commands, acceptance criteria, or explicit exclusions. Only `@context-resolver` may fetch a Work Item. If a subagent says it lacks context, supply the envelope or stop; never tell it to query Azure DevOps.
130
140
 
@@ -19,9 +19,9 @@ Read `AGENTS.md` at the repo root for project-specific conventions, tech stack,
19
19
 
20
20
  ## Language Requirement
21
21
 
22
- - All artifact content MUST be written in English
23
- - Keywords are literal and MUST NOT be translated: `Requirement`, `Scenario`, `SHALL`, `WHEN`/`THEN`, `ADDED Requirements`, `MODIFIED Requirements`, `REMOVED Requirements`, `RENAMED Requirements`
24
- - File names and directory names MUST remain in English, following aspec conventions
22
+ - Write artifact content in the user's conversation language (or the project's configured `language` in `.ancletorc`)
23
+ - Keywords are literal and MUST NOT be translated: `Requirement`, `Scenario`, `SHALL`, `WHEN`/`THEN`/`AND`, `ADDED Requirements`, `MODIFIED Requirements`, `REMOVED Requirements`, `RENAMED Requirements`
24
+ - File names and directory names are literal and MUST NOT be translated: English kebab-case, following aspec conventions
25
25
 
26
26
  ## Primary Responsibility
27
27
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ancleto/spec",
3
- "version": "0.6.31",
3
+ "version": "0.6.33",
4
4
  "description": "Orquestador SDD liviano con subagentes optimizados para costo/tokens",
5
5
  "type": "module",
6
6
  "bin": {
@@ -10,7 +10,7 @@ metadata:
10
10
 
11
11
  # aspec Archive
12
12
 
13
- **Artifacts language**: write every artifact in English. Keywords (`Requirement`, `Scenario`, `SHALL`, `WHEN`/`THEN`, `ADDED/MODIFIED/REMOVED/RENAMED Requirements`) are literal and MUST NOT be translated. File and directory names stay English kebab-case.
13
+ **Artifacts language**: write artifact content in the user's conversation language (or the project's configured `language` in `.ancletorc`). Keywords (`Requirement`, `Scenario`, `SHALL`, `WHEN`/`THEN`/`AND`, `ADDED/MODIFIED/REMOVED/RENAMED Requirements`) and file/directory names are literal and MUST NOT be translated.
14
14
 
15
15
  Archive a completed change: check completion, sync delta specs, move the directory. No external binaries.
16
16
 
@@ -10,7 +10,7 @@ metadata:
10
10
 
11
11
  # aspec Bulk Archive
12
12
 
13
- **Artifacts language**: write every artifact in English. Keywords (`Requirement`, `Scenario`, `SHALL`, `WHEN`/`THEN`, `ADDED/MODIFIED/REMOVED/RENAMED Requirements`) are literal and MUST NOT be translated. File and directory names stay English kebab-case.
13
+ **Artifacts language**: write artifact content in the user's conversation language (or the project's configured `language` in `.ancletorc`). Keywords (`Requirement`, `Scenario`, `SHALL`, `WHEN`/`THEN`/`AND`, `ADDED/MODIFIED/REMOVED/RENAMED Requirements`) and file/directory names are literal and MUST NOT be translated.
14
14
 
15
15
  Archive many completed changes at once, resolving spec conflicts against the implementation. No external binaries.
16
16
 
@@ -10,7 +10,7 @@ metadata:
10
10
 
11
11
  # aspec Continue
12
12
 
13
- **Artifacts language**: write every artifact in English. Keywords (`Requirement`, `Scenario`, `SHALL`, `WHEN`/`THEN`, `ADDED/MODIFIED/REMOVED/RENAMED Requirements`) are literal and MUST NOT be translated. File and directory names stay English kebab-case.
13
+ **Artifacts language**: write artifact content in the user's conversation language (or the project's configured `language` in `.ancletorc`). Keywords (`Requirement`, `Scenario`, `SHALL`, `WHEN`/`THEN`/`AND`, `ADDED/MODIFIED/REMOVED/RENAMED Requirements`) and file/directory names are literal and MUST NOT be translated.
14
14
 
15
15
  Continue a change by creating exactly ONE next artifact. No external binaries: state is derived by which artifact files exist.
16
16
 
@@ -10,7 +10,7 @@ metadata:
10
10
 
11
11
  # aspec Explore
12
12
 
13
- **Artifacts language**: write every artifact in English. Keywords (`Requirement`, `Scenario`, `SHALL`, `WHEN`/`THEN`, `ADDED/MODIFIED/REMOVED/RENAMED Requirements`) are literal and MUST NOT be translated. File and directory names stay English kebab-case.
13
+ **Artifacts language**: write artifact content in the user's conversation language (or the project's configured `language` in `.ancletorc`). Keywords (`Requirement`, `Scenario`, `SHALL`, `WHEN`/`THEN`/`AND`, `ADDED/MODIFIED/REMOVED/RENAMED Requirements`) and file/directory names are literal and MUST NOT be translated.
14
14
 
15
15
  Enter explore mode. Think deeply. Visualize freely. Follow the conversation.
16
16
 
@@ -10,7 +10,7 @@ metadata:
10
10
 
11
11
  # aspec FF
12
12
 
13
- **Artifacts language**: write every artifact in English. Keywords (`Requirement`, `Scenario`, `SHALL`, `WHEN`/`THEN`, `ADDED/MODIFIED/REMOVED/RENAMED Requirements`) are literal and MUST NOT be translated. File and directory names stay English kebab-case.
13
+ **Artifacts language**: write artifact content in the user's conversation language (or the project's configured `language` in `.ancletorc`). Keywords (`Requirement`, `Scenario`, `SHALL`, `WHEN`/`THEN`/`AND`, `ADDED/MODIFIED/REMOVED/RENAMED Requirements`) and file/directory names are literal and MUST NOT be translated.
14
14
 
15
15
  Fast-forward artifact creation: generate everything needed to start implementation, writing files directly. No external binaries.
16
16
 
@@ -10,7 +10,7 @@ metadata:
10
10
 
11
11
  # aspec New
12
12
 
13
- **Artifacts language**: write every artifact in English. Keywords (`Requirement`, `Scenario`, `SHALL`, `WHEN`/`THEN`, `ADDED/MODIFIED/REMOVED/RENAMED Requirements`) are literal and MUST NOT be translated. File and directory names stay English kebab-case.
13
+ **Artifacts language**: write artifact content in the user's conversation language (or the project's configured `language` in `.ancletorc`). Keywords (`Requirement`, `Scenario`, `SHALL`, `WHEN`/`THEN`/`AND`, `ADDED/MODIFIED/REMOVED/RENAMED Requirements`) and file/directory names are literal and MUST NOT be translated.
14
14
 
15
15
  Start a new change with a filesystem-native, artifact-driven flow. No external binaries: every step is a direct file operation.
16
16
 
@@ -10,7 +10,7 @@ metadata:
10
10
 
11
11
  # aspec Onboard
12
12
 
13
- **Artifacts language**: write every artifact in English. Keywords (`Requirement`, `Scenario`, `SHALL`, `WHEN`/`THEN`, `ADDED/MODIFIED/REMOVED/RENAMED Requirements`) are literal and MUST NOT be translated. File and directory names stay English kebab-case.
13
+ **Artifacts language**: write artifact content in the user's conversation language (or the project's configured `language` in `.ancletorc`). Keywords (`Requirement`, `Scenario`, `SHALL`, `WHEN`/`THEN`/`AND`, `ADDED/MODIFIED/REMOVED/RENAMED Requirements`) and file/directory names are literal and MUST NOT be translated.
14
14
 
15
15
  Walk a first-time user through one complete spec-driven cycle on a real task. No external binaries.
16
16
 
@@ -10,7 +10,7 @@ metadata:
10
10
 
11
11
  # aspec Propose
12
12
 
13
- **Artifacts language**: write every artifact in English. Keywords (`Requirement`, `Scenario`, `SHALL`, `WHEN`/`THEN`, `ADDED/MODIFIED/REMOVED/RENAMED Requirements`) are literal and MUST NOT be translated. File and directory names stay English kebab-case.
13
+ **Artifacts language**: write artifact content in the user's conversation language (or the project's configured `language` in `.ancletorc`). Keywords (`Requirement`, `Scenario`, `SHALL`, `WHEN`/`THEN`/`AND`, `ADDED/MODIFIED/REMOVED/RENAMED Requirements`) and file/directory names are literal and MUST NOT be translated.
14
14
 
15
15
  Create a change and all its artifacts in one step, writing files directly. No external binaries.
16
16
 
@@ -10,7 +10,7 @@ metadata:
10
10
 
11
11
  # aspec Sync
12
12
 
13
- **Artifacts language**: write every artifact in English. Keywords (`Requirement`, `Scenario`, `SHALL`, `WHEN`/`THEN`, `ADDED/MODIFIED/REMOVED/RENAMED Requirements`) are literal and MUST NOT be translated. File and directory names stay English kebab-case.
13
+ **Artifacts language**: write artifact content in the user's conversation language (or the project's configured `language` in `.ancletorc`). Keywords (`Requirement`, `Scenario`, `SHALL`, `WHEN`/`THEN`/`AND`, `ADDED/MODIFIED/REMOVED/RENAMED Requirements`) and file/directory names are literal and MUST NOT be translated.
14
14
 
15
15
  Sync delta specs from a change to main specs.
16
16
 
@@ -19,7 +19,7 @@ metadata:
19
19
 
20
20
  # ancleto-upgrade
21
21
 
22
- **Artifacts language**: write every artifact in English. Keywords (`Requirement`, `Scenario`, `SHALL`, `WHEN`/`THEN`, `ADDED/MODIFIED/REMOVED/RENAMED Requirements`) are literal and MUST NOT be translated. File and directory names stay English kebab-case.
22
+ **Artifacts language**: write artifact content in the user's conversation language (or the project's configured `language` in `.ancletorc`). Keywords (`Requirement`, `Scenario`, `SHALL`, `WHEN`/`THEN`/`AND`, `ADDED/MODIFIED/REMOVED/RENAMED Requirements`) and file/directory names are literal and MUST NOT be translated.
23
23
 
24
24
  Generate an aspec change migrating any library/runtime to a new major version; never edit code.
25
25
 
package/src/cli/index.js CHANGED
@@ -32,14 +32,15 @@ Uso:
32
32
  ancleto install --no-mcp Igual que install pero sin tocar config MCP
33
33
  ancleto install --with-engram Ademas configura el MCP externo engram (memoria opcional)
34
34
  ancleto install --tier <nivel> normal | minimo | gratis (wizard interactivo en TTY)
35
+ ancleto install --lang <codigo> auto | es | en | pt (idioma de los artifacts; auto = idioma de la conversacion)
35
36
  ancleto install --agent <nombre> opencode | vscode | antigravity | cursor | roo (wizard si no esta guardado)
36
37
  ancleto update [--project <dir>] Alias de install (re-instala sobre lo existente)
37
38
  Parado en un proyecto con .ancletorc opera sobre ese proyecto;
38
39
  usa --global para forzar el alcance global
39
40
  ancleto upgrade [--agent <nombre>] Re-aplica templates (LOCKED) y skills sobre el proyecto actual
40
- ancleto init [--with-azure] [--agent <nombre>] [--tier <nivel>]
41
- Crea .ancletorc en el repositorio actual
42
- (interactivo en TTY: banner + menu; Azure desactivado por defecto)
41
+ ancleto init [--with-azure] [--agent <nombre>] [--tier <nivel>] [--lang <codigo>]
42
+ Crea .ancletorc en el repositorio actual
43
+ (interactivo en TTY: banner + menu; Azure desactivado por defecto)
43
44
  ancleto discovery --check Estado del seed (READY/STALE/PARTIAL/MISSING)
44
45
  ancleto discovery [--compress] [--include G] [--ignore G] [--token-budget N]
45
46
  Empaca el repo con Repomix y guarda estado
@@ -622,6 +623,22 @@ function scanTierFlag(args) {
622
623
  return t
623
624
  }
624
625
 
626
+ const SUPPORTED_LANGS = ['auto', 'es', 'en', 'pt']
627
+
628
+ function scanLangFlag(args) {
629
+ const l = flagValue(args, '--lang')
630
+ if (!l) return null
631
+ if (!SUPPORTED_LANGS.includes(l)) {
632
+ console.error(`ancleto: idioma invalido: ${l} (${SUPPORTED_LANGS.join('|')})`)
633
+ process.exit(1)
634
+ }
635
+ return l
636
+ }
637
+
638
+ function langLabel(code) {
639
+ return { auto: 'automatico (idioma de la conversacion)', es: 'espanol', en: 'ingles', pt: 'portugues' }[code] || code
640
+ }
641
+
625
642
  async function resolveAgent(args, existing, allowAsk = Boolean(process.stdin.isTTY)) {
626
643
  const flag = scanAgentFlag(args)
627
644
  if (flag) return flag
@@ -820,9 +837,10 @@ async function install(args) {
820
837
  : null
821
838
 
822
839
  let agent = agentFlag || (existingRc?.agent && SUPPORTED_AGENTS.includes(existingRc.agent) ? existingRc.agent : null)
840
+ let language = scanLangFlag(args) || (existingRc?.language && SUPPORTED_LANGS.includes(existingRc.language) ? existingRc.language : null)
823
841
 
824
842
  let bannerShown = false
825
- const isInteractive = Boolean(process.stdout.isTTY) && ((projectDir && !agent) || !tier)
843
+ const isInteractive = Boolean(process.stdout.isTTY) && ((projectDir && !agent) || !tier || !language)
826
844
  if (isInteractive) {
827
845
  await showBanner()
828
846
  bannerShown = true
@@ -833,8 +851,13 @@ async function install(args) {
833
851
  const current = TIERS[storedTier] ? storedTier : ''
834
852
  tier = await selectOption('Tier de costo', Object.keys(TIERS), Math.max(0, Object.keys(TIERS).indexOf(current)))
835
853
  }
854
+ if (!language) {
855
+ const picked = await selectOption('Idioma de los artifacts', SUPPORTED_LANGS.map(langLabel), 0)
856
+ language = SUPPORTED_LANGS[SUPPORTED_LANGS.map(langLabel).indexOf(picked)] || 'auto'
857
+ }
836
858
  stopBanner()
837
859
  }
860
+ if (!language) language = 'auto'
838
861
 
839
862
  if (projectDir && !agent) agent = DEFAULT_AGENT
840
863
  if (!tier) tier = TIERS[storedTier] ? storedTier : 'normal'
@@ -862,6 +885,7 @@ async function install(args) {
862
885
  const agentSkillsDir = await installAgentSkills(projectDir, agent)
863
886
  await writeManifest(projectDir, {
864
887
  agent,
888
+ language,
865
889
  ...(gratisModelChoice ? { gratisModel: gratisModelChoice } : {}),
866
890
  installedPaths: {
867
891
  templates: ['AGENTS.md', 'PRODUCT.md'],
@@ -942,13 +966,15 @@ async function initProject(args) {
942
966
  const withAzure = args.includes('--with-azure')
943
967
  const agentFlag = scanAgentFlag(args)
944
968
  const tierFlag = scanTierFlag(args)
969
+ const langFlag = scanLangFlag(args)
945
970
  const existing = await readAncletorc(projectDir)
946
971
  const azure = existing?.azure ?? { enabled: false }
947
972
  const discovery = existing?.discovery ?? { outputDir: 'docs/technical-discovery', exclude: [] }
948
973
  const tierFile = join(projectDir, '.opencode', '.ancleto-tier')
949
974
 
950
- let agent, tier
951
- const isInteractive = Boolean(process.stdout.isTTY) && (!agentFlag || !tierFlag)
975
+ let agent, tier, language
976
+ language = langFlag || (existing?.language && SUPPORTED_LANGS.includes(existing.language) ? existing.language : null)
977
+ const isInteractive = Boolean(process.stdout.isTTY) && (!agentFlag || !tierFlag || !language)
952
978
  if (isInteractive) {
953
979
  await showBanner()
954
980
  const agentIdx = Math.max(0, SUPPORTED_AGENTS.indexOf(existing?.agent))
@@ -956,6 +982,10 @@ async function initProject(args) {
956
982
  const tierIdx = Math.max(0, Object.keys(TIERS).indexOf(TIERS[storedTier] ? storedTier : ''))
957
983
  agent = agentFlag || await selectOption('Agente/IDE', SUPPORTED_AGENTS, agentIdx)
958
984
  tier = tierFlag || await selectOption('Tier de costo', Object.keys(TIERS), tierIdx)
985
+ if (!language) {
986
+ const picked = await selectOption('Idioma de los artifacts', SUPPORTED_LANGS.map(langLabel), 0)
987
+ language = SUPPORTED_LANGS[SUPPORTED_LANGS.map(langLabel).indexOf(picked)] || 'auto'
988
+ }
959
989
  if (withAzure) {
960
990
  azure.enabled = true
961
991
  } else {
@@ -965,6 +995,7 @@ async function initProject(args) {
965
995
  } else {
966
996
  agent = await resolveAgent(args, existing?.agent, false)
967
997
  tier = tierFlag
998
+ if (!language) language = 'auto'
968
999
  if (withAzure) azure.enabled = true
969
1000
  }
970
1001
 
@@ -973,13 +1004,13 @@ async function initProject(args) {
973
1004
  await writeFile(tierFile, tier + '\n')
974
1005
  }
975
1006
 
976
- const manifest = await writeManifest(projectDir, { azure, discovery, agent })
1007
+ const manifest = await writeManifest(projectDir, { azure, discovery, agent, language })
977
1008
  await copyTemplates(projectDir)
978
1009
  await scaffoldAspec(projectDir)
979
1010
  await refreshWorkingContext(projectDir)
980
1011
  await registerProject(projectDir, { agent, tier: tier || null })
981
1012
  if (azure.enabled) console.log(AZURE_MCP_NOTICE)
982
- console.log(`ancleto: .ancletorc actualizado en ${projectDir} (v${manifest.version})${azure.enabled ? ' (Azure habilitado)' : ' (Azure desactivado)'} (Agente: ${agent})${tier ? ` (Tier: ${tier})` : ''}`)
1013
+ console.log(`ancleto: .ancletorc actualizado en ${projectDir} (v${manifest.version})${azure.enabled ? ' (Azure habilitado)' : ' (Azure desactivado)'} (Agente: ${agent})${tier ? ` (Tier: ${tier})` : ''} (Idioma: ${language})`)
983
1014
  }
984
1015
 
985
1016
  const DEFAULT_IGNORES = ['node_modules', '.git', 'dist']
@@ -1073,7 +1104,9 @@ function flagValue(args, flag) {
1073
1104
  }
1074
1105
 
1075
1106
  async function checkDiscovery() {
1076
- const { outputDir } = await loadDiscoveryConfig()
1107
+ const config = await loadDiscoveryConfig()
1108
+ const { outputDir } = config
1109
+ const tier = readProjectTier(process.cwd())
1077
1110
  const present = await presentDocs(outputDir)
1078
1111
  let state, action, message, missingDocs
1079
1112
  if (present.length === 0) {
@@ -1116,7 +1149,12 @@ async function checkDiscovery() {
1116
1149
  state,
1117
1150
  recommendedAction: action,
1118
1151
  message,
1119
- missingDocs
1152
+ missingDocs,
1153
+ config: {
1154
+ outputDir,
1155
+ exclude: config.exclude,
1156
+ tier
1157
+ }
1120
1158
  }, null, 2))
1121
1159
  }
1122
1160
 
@@ -1175,6 +1213,19 @@ async function discovery(flags) {
1175
1213
  await checkDiscovery()
1176
1214
  return
1177
1215
  }
1216
+ if (flags.includes('--help') || flags.includes('-h')) {
1217
+ console.log(`ancleto discovery [--compress] [--include G] [--ignore G] [--token-budget N]
1218
+ Genera el pack Repomix del repo y guarda el estado del seed.
1219
+
1220
+ --check Estado del seed en JSON (READY/STALE/PARTIAL/MISSING) + config
1221
+ --compress Pack comprimido (tree-sitter)
1222
+ --include <glob> Incluir solo paths que matcheen
1223
+ --ignore <glob> Excluir paths (ademas de los de .ancletorc)
1224
+ --token-budget N Presupuesto de tokens del tier
1225
+
1226
+ El seed en si lo genera la skill ancleto-technical-discovery a partir del pack.`)
1227
+ return
1228
+ }
1178
1229
  await packDiscovery(flags)
1179
1230
  }
1180
1231
 
@@ -71,9 +71,13 @@ comparte.
71
71
  - **Cambios con scope incierto / arquitectura**: Crear artifacts en `aspec/changes/<name>/`.
72
72
  - **Cambios menores / fixes**: Implementación directa.
73
73
  - **Cierre**: Archivar con `/cleto-archive` al finalizar.
74
+
75
+ <!-- LOCKED: artifacts-language -->
74
76
  - **Idioma de los artifacts**: el contenido de `proposal.md`, `design.md`, `tasks.md` y `specs/` se escribe
75
- en **inglés**. Los keywords (`Requirement`, `Scenario`, `SHALL`, `WHEN`/`THEN`, `ADDED/MODIFIED/REMOVED/RENAMED
76
- Requirements`) son literales y **no se traducen**. Nombres de archivos y directorios: inglés kebab-case.
77
+ en el idioma de la conversación con el usuario (o en el `language` configurado en `.ancletorc`).
78
+ Los keywords (`Requirement`, `Scenario`, `SHALL`, `WHEN`/`THEN`/`AND`, `ADDED/MODIFIED/REMOVED/RENAMED
79
+ Requirements`) y los nombres de archivos y directorios son literales en inglés y **no se traducen**.
80
+ <!-- /LOCKED: artifacts-language -->
77
81
 
78
82
  ## Tools de Soporte
79
83