zinkee 0.1.44 → 0.1.46

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 (94) hide show
  1. package/README.md +4 -0
  2. package/dist/chunk-MHEVRMDX.js +1230 -0
  3. package/dist/chunk-MHEVRMDX.js.map +1 -0
  4. package/{src/utils/examples.ts → dist/examples-67U5IRBS.js} +866 -1141
  5. package/dist/examples-67U5IRBS.js.map +1 -0
  6. package/dist/index.js +1145 -8456
  7. package/dist/index.js.map +1 -1
  8. package/package.json +6 -3
  9. package/.github/workflows/npm-publish.yml +0 -77
  10. package/.github/workflows/pr-checks.yml +0 -36
  11. package/AGENTS.md +0 -110
  12. package/docs/cli-contract.md +0 -41
  13. package/docs/npm-release.md +0 -64
  14. package/docs/superpowers/plans/2026-03-24-zinkee-cli-implementation.md +0 -837
  15. package/docs/superpowers/plans/2026-03-25-cli-backend-error-contract.md +0 -503
  16. package/docs/superpowers/plans/2026-03-26-display-freeform-create.md +0 -389
  17. package/docs/superpowers/specs/2026-03-24-zinkee-cli-backend-blockers.md +0 -172
  18. package/docs/superpowers/specs/2026-03-24-zinkee-cli-design.md +0 -1576
  19. package/docs/superpowers/specs/2026-03-24-zinkee-cli-e2e-checklist.md +0 -215
  20. package/docs/superpowers/specs/2026-03-24-zinkee-cli-e2e-design.md +0 -492
  21. package/docs/superpowers/specs/2026-03-24-zinkee-cli-e2e-status.md +0 -307
  22. package/docs/superpowers/specs/2026-07-30-cli-pr-checks-design.md +0 -37
  23. package/src/api/automations.ts +0 -404
  24. package/src/api/comments.ts +0 -51
  25. package/src/api/displays.ts +0 -337
  26. package/src/api/document-templates.ts +0 -110
  27. package/src/api/files.ts +0 -50
  28. package/src/api/formulas.test.ts +0 -65
  29. package/src/api/formulas.ts +0 -67
  30. package/src/api/logs.ts +0 -34
  31. package/src/api/navigation.ts +0 -70
  32. package/src/api/records.ts +0 -184
  33. package/src/api/schemas.ts +0 -148
  34. package/src/api/teamspace.ts +0 -110
  35. package/src/cli-examples.ts +0 -130
  36. package/src/cli-runner.ts +0 -95
  37. package/src/client.test.ts +0 -189
  38. package/src/client.ts +0 -269
  39. package/src/command-registry.ts +0 -882
  40. package/src/commands/automations.test.ts +0 -1030
  41. package/src/commands/automations.ts +0 -2102
  42. package/src/commands/comments.test.ts +0 -214
  43. package/src/commands/comments.ts +0 -303
  44. package/src/commands/config.test.ts +0 -81
  45. package/src/commands/config.ts +0 -150
  46. package/src/commands/displays.test.ts +0 -1105
  47. package/src/commands/displays.ts +0 -1442
  48. package/src/commands/document-templates.test.ts +0 -569
  49. package/src/commands/document-templates.ts +0 -563
  50. package/src/commands/files.test.ts +0 -284
  51. package/src/commands/files.ts +0 -280
  52. package/src/commands/formulas.test.ts +0 -194
  53. package/src/commands/formulas.ts +0 -243
  54. package/src/commands/logs.test.ts +0 -123
  55. package/src/commands/logs.ts +0 -159
  56. package/src/commands/navigation.test.ts +0 -211
  57. package/src/commands/navigation.ts +0 -348
  58. package/src/commands/profiles.test.ts +0 -191
  59. package/src/commands/profiles.ts +0 -303
  60. package/src/commands/records.test.ts +0 -860
  61. package/src/commands/records.ts +0 -883
  62. package/src/commands/schemas.test.ts +0 -1252
  63. package/src/commands/schemas.ts +0 -890
  64. package/src/commands/teamspace.test.ts +0 -229
  65. package/src/commands/teamspace.ts +0 -546
  66. package/src/completion/engine.test.ts +0 -138
  67. package/src/completion/engine.ts +0 -168
  68. package/src/completion/install.test.ts +0 -179
  69. package/src/completion/install.ts +0 -260
  70. package/src/completion/runtime.ts +0 -150
  71. package/src/completion/scripts.ts +0 -91
  72. package/src/config.test.ts +0 -362
  73. package/src/config.ts +0 -294
  74. package/src/index.test.ts +0 -217
  75. package/src/index.ts +0 -8
  76. package/src/parsers/expressions.test.ts +0 -95
  77. package/src/parsers/expressions.ts +0 -128
  78. package/src/parsers/kv.test.ts +0 -35
  79. package/src/parsers/kv.ts +0 -49
  80. package/src/parsers/selectors.test.ts +0 -23
  81. package/src/parsers/selectors.ts +0 -29
  82. package/src/program.ts +0 -64
  83. package/src/runtime-context.ts +0 -103
  84. package/src/types.ts +0 -76
  85. package/src/utils/argv-rewrite.test.ts +0 -149
  86. package/src/utils/argv-rewrite.ts +0 -269
  87. package/src/utils/errors.test.ts +0 -85
  88. package/src/utils/errors.ts +0 -191
  89. package/src/utils/examples.test.ts +0 -374
  90. package/src/utils/output.test.ts +0 -65
  91. package/src/utils/output.ts +0 -154
  92. package/src/utils/schema-fields.ts +0 -1016
  93. package/tsconfig.json +0 -20
  94. package/tsup.config.ts +0 -13
@@ -1,215 +0,0 @@
1
- # Zinkee CLI E2E Checklist
2
-
3
- Checklist operativo para despachar subagentes que ejecuten pruebas E2E de forma independiente.
4
-
5
- ## Reglas Globales
6
-
7
- - [ ] Usar el perfil `local` de `~/.config/zinkee/config.toml`
8
- - [ ] Confirmar que el workspace es de pruebas antes de mutar nada
9
- - [ ] Ejecutar siempre el binario real: `node dist/index.js ...`
10
- - [ ] Usar un prefijo único por ejecución: `e2e-<timestamp>-<rand>`
11
- - [ ] Registrar todos los recursos creados para cleanup
12
- - [ ] Hacer cleanup en orden inverso al final del bloque
13
- - [ ] Si falla cleanup, reportarlo explícitamente
14
- - [ ] Verificar siempre stdout, stderr y exit code
15
- - [ ] En comandos con `--json`, validar envelope `{ data, meta }` o `{ error, meta }`
16
-
17
- ## Preflight
18
-
19
- - [ ] `zinkee --json config validate`
20
- - [ ] `zinkee --json profiles get local`
21
- - [ ] `zinkee --json schemas list`
22
- - [ ] Verificar que `base_url` y `api_key` están resueltos
23
- - [ ] Verificar que el backend local responde
24
-
25
- ## Contrato Global
26
-
27
- - [ ] `--json` éxito devuelve `{ data, meta }`
28
- - [ ] `--json` error devuelve `{ error, meta }`
29
- - [ ] `--read-only` bloquea escrituras
30
- - [ ] `--example` devuelve ejemplos sin ejecutar el comando real
31
- - [ ] Exit codes básicos son consistentes
32
-
33
- ## Profiles / Config
34
-
35
- - [ ] Probar con config temporal aislado, no con el real
36
- - [ ] `profiles list`
37
- - [ ] `profiles get`
38
- - [ ] `profiles add`
39
- - [ ] `profiles update`
40
- - [ ] `profiles use`
41
- - [ ] `profiles remove`
42
- - [ ] `config path`
43
- - [ ] `config show`
44
- - [ ] `config validate`
45
- - [ ] Verificar redacción de secretos
46
-
47
- ## Schemas
48
-
49
- - [ ] Crear schema
50
- - [ ] Listar schemas
51
- - [ ] Obtener schema
52
- - [ ] Actualizar schema
53
- - [ ] Crear field
54
- - [ ] Obtener field
55
- - [ ] Listar fields
56
- - [ ] Actualizar field
57
- - [ ] Borrar field
58
- - [ ] Borrar schema
59
-
60
- ## Records / Comments
61
-
62
- - [ ] Crear record con `--set`
63
- - [ ] Crear record con `--set-json`
64
- - [ ] Query con `--select`
65
- - [ ] Query con `--where`
66
- - [ ] Query con `--sort`
67
- - [ ] Query con `--limit`
68
- - [ ] Query con `--offset`
69
- - [ ] Obtener record
70
- - [ ] Actualizar record con `--set`
71
- - [ ] Actualizar record con `--set-json`
72
- - [ ] Actualizar record con `--unset`
73
- - [ ] Borrar record
74
- - [ ] Listar comments
75
- - [ ] Crear comment con `--text`
76
-
77
- ## Files
78
-
79
- - [ ] Upload de fichero
80
- - [ ] Storage info
81
- - [ ] Download binario a stdout
82
- - [ ] Download con `--output`
83
- - [ ] Download con `--json --output`
84
- - [ ] Validar que `--json` sin `--output` falla
85
- - [ ] Delete de fichero
86
-
87
- ## Navigation
88
-
89
- - [ ] Crear folder
90
- - [ ] Listar folders
91
- - [ ] Get folder por UUID
92
- - [ ] Get folder por nombre exacto
93
- - [ ] Verificar error por ambigüedad de nombre
94
- - [ ] Actualizar folder
95
- - [ ] Mover resource con `navigation resources move`
96
- - [ ] Borrar folder
97
-
98
- ## Teamspace
99
-
100
- - [ ] Crear folder
101
- - [ ] Listar folders
102
- - [ ] Get folder por UUID
103
- - [ ] Get folder por nombre exacto
104
- - [ ] `--include-resources`
105
- - [ ] Verificar error por ambigüedad de nombre
106
- - [ ] Actualizar folder
107
- - [ ] Publish resource
108
- - [ ] Unpublish resource
109
- - [ ] Borrar folder
110
-
111
- ## Displays
112
-
113
- - [ ] Crear display
114
- - [ ] Listar displays
115
- - [ ] Obtener display
116
- - [ ] Actualizar display
117
- - [ ] Borrar display
118
- - [ ] Get layout
119
- - [ ] Update layout
120
- - [ ] Crear tab
121
- - [ ] Update tab
122
- - [ ] Delete tab
123
- - [ ] List variables
124
- - [ ] Get variable
125
- - [ ] Crear variable
126
- - [ ] Update variable
127
- - [ ] Delete variable
128
- - [ ] List widgets
129
- - [ ] Get widget
130
- - [ ] Crear widget con `--type`
131
- - [ ] Update widget con `--type`
132
- - [ ] Delete widget
133
- - [ ] List navigation-targets
134
- - [ ] Crear navigation-target
135
- - [ ] Update navigation-target
136
- - [ ] Delete navigation-target
137
- - [ ] Get cross-widget-filter
138
- - [ ] Set cross-widget-filter
139
- - [ ] Delete cross-widget-filter
140
-
141
- ## Automations
142
-
143
- - [ ] List folders
144
- - [ ] Create folder
145
- - [ ] Update folder
146
- - [ ] Delete folder
147
- - [ ] Move automation to folder
148
- - [ ] List automations
149
- - [ ] Get automation
150
- - [ ] Create automation
151
- - [ ] Update automation
152
- - [ ] Delete automation
153
- - [ ] Activate automation
154
- - [ ] Deactivate automation
155
- - [ ] Get trigger
156
- - [ ] Set trigger con `--type`
157
- - [ ] List actions
158
- - [ ] Add action con `--type`
159
- - [ ] Update action con `--type`
160
- - [ ] Delete action
161
- - [ ] Get flow
162
- - [ ] Set flow con `--entry` y `--transition`
163
- - [ ] Get webhook
164
- - [ ] Set webhook
165
- - [ ] Delete webhook
166
- - [ ] List plugins
167
- - [ ] Get plugin
168
- - [ ] List connections
169
- - [ ] Get connection
170
- - [ ] Create connection
171
- - [ ] Update connection
172
- - [ ] Delete connection
173
-
174
- ## Flujos Cruzados
175
-
176
- - [ ] Schema -> Record -> Comment
177
- - [ ] Schema -> Navigation -> Teamspace
178
- - [ ] Schema -> Display -> Widget/Variable
179
- - [ ] Schema -> Automation trigger/action/flow
180
-
181
- ## Cleanup
182
-
183
- - [ ] Borrar automations creadas
184
- - [ ] Borrar displays creados
185
- - [ ] Unpublish de teamspace
186
- - [ ] Deshacer moves de navigation si aplica
187
- - [ ] Borrar records creados
188
- - [ ] Borrar files subidos
189
- - [ ] Borrar schemas creados
190
- - [ ] Borrar folders creados
191
- - [ ] Borrar connections creadas
192
-
193
- ## Split Recomendado Para Subagentes
194
-
195
- - [ ] Subagente 1: preflight + contrato global
196
- - [ ] Subagente 2: profiles/config
197
- - [ ] Subagente 3: schemas
198
- - [ ] Subagente 4: records/comments
199
- - [ ] Subagente 5: files
200
- - [ ] Subagente 6: navigation
201
- - [ ] Subagente 7: teamspace
202
- - [ ] Subagente 8: displays
203
- - [ ] Subagente 9: automations
204
- - [ ] Subagente 10: flujos cruzados
205
-
206
- ## Formato De Reporte Esperado
207
-
208
- - [ ] Qué comandos se ejecutaron
209
- - [ ] Qué recursos se crearon
210
- - [ ] Qué recursos se limpiaron
211
- - [ ] Qué assertions pasaron
212
- - [ ] Qué assertions fallaron
213
- - [ ] stdout/stderr relevante
214
- - [ ] exit codes
215
- - [ ] si el fallo es del CLI, del backend o del entorno
@@ -1,492 +0,0 @@
1
- # Zinkee CLI E2E Test Design
2
-
3
- ## Context
4
-
5
- The Zinkee CLI is now implemented as a real TypeScript ESM CLI that targets Zinkee Public API v2.
6
-
7
- The next step is to design a full end-to-end test battery that exercises the real CLI binary against a real test workspace.
8
-
9
- These E2E tests should validate:
10
-
11
- - the real command-line interface, not just internal modules
12
- - real config resolution through the existing config file contract
13
- - real network interactions against the local Zinkee API/backend
14
- - output contracts for human mode and JSON mode
15
- - write safety behavior via `--read-only`
16
- - lifecycle behavior across all implemented domains
17
-
18
- ## Environment Assumptions
19
-
20
- The E2E suite will use the existing `local` profile already present in:
21
-
22
- - `/Users/david/.config/zinkee/config.toml`
23
-
24
- The user explicitly confirmed that:
25
-
26
- - the `local` workspace is a dedicated test workspace
27
- - it is safe for E2E tests to create and destroy real resources there
28
-
29
- ## Design Direction
30
-
31
- The E2E battery will:
32
-
33
- - run against the real CLI entrypoint
34
- - use the `local` profile as the default execution context for tests
35
- - create real resources with isolated test prefixes
36
- - clean up created resources after each scenario or suite
37
- - validate both success and failure contracts
38
-
39
- The preferred design is hybrid:
40
-
41
- - preflight checks
42
- - domain-specific suites
43
- - selected cross-domain flows
44
-
45
- ## Core Principles
46
-
47
- ### Real CLI, Not Internal Function Calls
48
-
49
- E2E tests must execute the built CLI process itself.
50
-
51
- Recommended execution target:
52
-
53
- ```bash
54
- node dist/index.js ...
55
- ```
56
-
57
- This ensures the tests cover:
58
-
59
- - commander parsing
60
- - root/global flag behavior
61
- - stdout and stderr behavior
62
- - exit codes
63
- - config resolution
64
- - JSON envelopes
65
-
66
- ### Real Workspace, Isolated Data
67
-
68
- All write tests should use unique run-scoped identifiers.
69
-
70
- Recommended naming pattern:
71
-
72
- - `e2e-<timestamp>-<random>`
73
-
74
- Examples:
75
-
76
- - schema slug: `e2e-20260324-abc123-contacts`
77
- - display name: `e2e-20260324-abc123-pipeline`
78
- - automation name: `e2e-20260324-abc123-lead-flow`
79
-
80
- This allows:
81
-
82
- - safe repeated runs
83
- - post-failure inspection
84
- - optional future parallelization
85
-
86
- ### Cleanup Is Mandatory
87
-
88
- The suite must track created resources and delete them in reverse dependency order.
89
-
90
- If cleanup fails:
91
-
92
- - the suite should report it explicitly
93
- - the failure should not be silently swallowed
94
-
95
- ## Test Modes
96
-
97
- The battery should support three execution levels.
98
-
99
- ### `e2e:smoke`
100
-
101
- Purpose:
102
-
103
- - verify that the CLI works end-to-end at a shallow level
104
- - catch obvious regressions quickly
105
-
106
- Coverage:
107
-
108
- - preflight
109
- - one or two representative read flows
110
- - one small create/delete lifecycle
111
- - `--json`
112
- - `--read-only`
113
-
114
- ### `e2e:standard`
115
-
116
- Purpose:
117
-
118
- - primary day-to-day E2E suite
119
-
120
- Coverage:
121
-
122
- - preflight
123
- - one lifecycle-focused suite per domain
124
- - cleanup validation
125
-
126
- ### `e2e:full`
127
-
128
- Purpose:
129
-
130
- - exhaustive contract coverage
131
-
132
- Coverage:
133
-
134
- - all standard coverage
135
- - error-path assertions
136
- - output contract assertions
137
- - more `--raw` and `--example` checks
138
- - more cross-domain integration flows
139
-
140
- ## Preflight Suite
141
-
142
- The preflight suite should run before any destructive or mutating test group.
143
-
144
- It should validate:
145
-
146
- - `local` profile exists
147
- - resolved profile has `api_key`
148
- - resolved profile has `base_url`
149
- - backend responds to basic read commands
150
- - CLI binary is built and invokable
151
-
152
- Recommended checks:
153
-
154
- - `zinkee --json config validate`
155
- - `zinkee --json profiles get local`
156
- - one lightweight read command such as `schemas list`
157
-
158
- If preflight fails:
159
-
160
- - stop the test run immediately
161
-
162
- ## Global Contract Suite
163
-
164
- This suite validates CLI-wide behavior independent of domain.
165
-
166
- Coverage:
167
-
168
- - `--json` success envelope is `{ data, meta }`
169
- - `--json` error envelope is `{ error, meta }`
170
- - `--read-only` blocks write/destructive commands
171
- - `--example` returns examples and does not run the command
172
- - exit codes are stable for representative cases
173
- - human output does not break basic expectations
174
-
175
- Representative checks:
176
-
177
- - success: `zinkee --json schemas list`
178
- - failure: invalid selector or invalid config override
179
- - read-only: `zinkee --read-only records create ...`
180
- - example: `zinkee --json --example records query`
181
-
182
- ## Domain Suites
183
-
184
- ### Profiles and Config
185
-
186
- These should run against a temporary isolated config file, not mutate the user’s real config.
187
-
188
- Coverage:
189
-
190
- - config compatibility with current TOML shape
191
- - profile add/update/remove/use
192
- - config show redaction
193
- - config validate
194
- - global overrides
195
-
196
- Purpose:
197
-
198
- - verify compatibility without touching real user state
199
-
200
- ### Schemas
201
-
202
- Coverage:
203
-
204
- - create schema
205
- - list schemas
206
- - get schema
207
- - update schema
208
- - create field
209
- - get field
210
- - list fields
211
- - update field
212
- - delete field
213
- - delete schema
214
-
215
- Assertions:
216
-
217
- - JSON envelope
218
- - read/write lifecycle
219
- - UUID-or-slug selector behavior where applicable
220
-
221
- ### Records and Comments
222
-
223
- Coverage:
224
-
225
- - create record via `--set`
226
- - create record via `--set-json`
227
- - query records with `--select`, `--where`, `--sort`, `--limit`, `--offset`
228
- - get record
229
- - update record with `--set`, `--set-json`, `--unset`
230
- - delete record
231
- - list comments
232
- - create comment via `--text`
233
-
234
- Assertions:
235
-
236
- - values mapping behavior
237
- - pagination metadata in `meta.page`
238
- - comment creation against a real record
239
-
240
- ### Files
241
-
242
- Coverage:
243
-
244
- - upload file
245
- - storage info
246
- - download to stdout
247
- - download with `--output`
248
- - `--json --output`
249
- - delete file
250
-
251
- Assertions:
252
-
253
- - binary behavior
254
- - JSON rule for `files download`
255
- - file cleanup
256
-
257
- ### Navigation
258
-
259
- Coverage:
260
-
261
- - create folder
262
- - list folders
263
- - get folder by UUID
264
- - get folder by exact name
265
- - update folder
266
- - move resource into folder
267
- - delete folder
268
-
269
- Assertions:
270
-
271
- - exact-name resolution
272
- - ambiguity failure on duplicate names
273
- - payload shape for `resources move`
274
-
275
- ### Teamspace
276
-
277
- Coverage:
278
-
279
- - create folder
280
- - list folders
281
- - get folder by UUID
282
- - get folder by exact name
283
- - `--include-resources`
284
- - update folder
285
- - publish resource
286
- - unpublish resource
287
- - delete folder
288
-
289
- Assertions:
290
-
291
- - exact-name resolution
292
- - ambiguity handling
293
- - publish/unpublish payload shape
294
-
295
- ### Displays
296
-
297
- Coverage:
298
-
299
- - create display
300
- - list/get/update/delete display
301
- - get/update layout
302
- - create/update/delete tab
303
- - list/get/create/update/delete variable
304
- - list/get/create/update/delete widget
305
- - create/update/delete navigation target
306
- - get/set/delete cross-widget filter
307
-
308
- Assertions:
309
-
310
- - generic `widgets create/update --type`
311
- - basic widget payload shaping
312
- - display subresource access through the real binary
313
-
314
- ### Automations
315
-
316
- Coverage:
317
-
318
- - folder list/create/update/delete/move
319
- - automation list/get/create/update/delete
320
- - activate/deactivate
321
- - trigger get/set
322
- - actions list/add/update/delete
323
- - flow get/set
324
- - webhook get/set/delete
325
- - plugins list/get
326
- - connections list/get/create/update/delete
327
-
328
- Assertions:
329
-
330
- - generic trigger/action `--type`
331
- - flow transitions payload shape
332
- - connection config/secret behavior
333
-
334
- ## Cross-Domain Scenarios
335
-
336
- These scenarios validate integration between domains, not just isolated endpoints.
337
-
338
- Recommended flows:
339
-
340
- ### Flow 1: Schema to Records to Comments
341
-
342
- - create schema
343
- - create fields
344
- - create record
345
- - query record
346
- - add comment
347
- - delete comment parent resource chain in cleanup
348
-
349
- ### Flow 2: Schema to Navigation to Teamspace
350
-
351
- - create schema
352
- - move schema into navigation folder
353
- - publish schema into teamspace folder
354
- - unpublish schema
355
- - cleanup
356
-
357
- ### Flow 3: Display Built on Schema
358
-
359
- - create schema
360
- - create display
361
- - create variable referencing schema
362
- - create widget using display `--type`
363
- - add navigation target or cross-widget filter
364
- - cleanup
365
-
366
- ### Flow 4: Automation Around Schema
367
-
368
- - create schema
369
- - create automation with record-based trigger
370
- - add action referencing schema
371
- - set flow
372
- - activate/deactivate
373
- - cleanup
374
-
375
- ## Data and Cleanup Strategy
376
-
377
- The E2E harness should maintain a run-scoped resource registry.
378
-
379
- Recommended tracked resource categories:
380
-
381
- - schemas
382
- - records
383
- - comments if necessary
384
- - files
385
- - navigation folders
386
- - teamspace folders
387
- - displays
388
- - automations
389
- - automation folders
390
- - automation connections
391
-
392
- Cleanup order should be dependency-aware:
393
-
394
- 1. automation webhooks / actions / flows if needed
395
- 2. automations
396
- 3. displays
397
- 4. teamspace publications
398
- 5. navigation placements
399
- 6. records
400
- 7. files
401
- 8. schemas
402
- 9. folders / connections
403
-
404
- ## Proposed Test Harness Shape
405
-
406
- Recommended structure:
407
-
408
- ```text
409
- e2e/
410
- helpers/
411
- cli.ts
412
- config.ts
413
- ids.ts
414
- cleanup.ts
415
- json.ts
416
- preflight.test.ts
417
- contract.test.ts
418
- schemas.test.ts
419
- records-comments.test.ts
420
- files.test.ts
421
- navigation.test.ts
422
- teamspace.test.ts
423
- displays.test.ts
424
- automations.test.ts
425
- integration-flows.test.ts
426
- ```
427
-
428
- ### Helper Responsibilities
429
-
430
- `helpers/cli.ts`
431
-
432
- - run `node dist/index.js ...`
433
- - capture stdout, stderr, exit code
434
- - expose helpers for JSON mode and text mode
435
-
436
- `helpers/config.ts`
437
-
438
- - resolve local profile assumptions
439
- - optionally enforce `local` profile for test runs
440
-
441
- `helpers/ids.ts`
442
-
443
- - generate unique test ids and names
444
-
445
- `helpers/cleanup.ts`
446
-
447
- - track created resources
448
- - run cleanup in reverse order
449
-
450
- `helpers/json.ts`
451
-
452
- - parse and assert `{ data, meta }`
453
- - parse and assert `{ error, meta }`
454
-
455
- ## Scripts
456
-
457
- Recommended future scripts:
458
-
459
- ```json
460
- {
461
- "e2e:smoke": "...",
462
- "e2e:standard": "...",
463
- "e2e:full": "..."
464
- }
465
- ```
466
-
467
- The exact runner can be decided during implementation, but it should remain compatible with the current project tooling.
468
-
469
- ## Recommended Implementation Order
470
-
471
- Build the E2E battery in this order:
472
-
473
- 1. preflight helpers and CLI runner
474
- 2. contract/global behavior tests
475
- 3. schemas
476
- 4. records/comments
477
- 5. files
478
- 6. navigation/teamspace
479
- 7. displays
480
- 8. automations
481
- 9. cross-domain flows
482
- 10. smoke/standard/full orchestration
483
-
484
- ## Success Criteria
485
-
486
- The E2E battery is successful when:
487
-
488
- - it runs against the real `local` profile
489
- - it creates and cleans up real test resources
490
- - it validates both success and failure envelopes
491
- - it covers the implemented command surface across all domains
492
- - it can be run in at least smoke and standard modes