zinkee 0.1.44 → 0.1.45
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 +4 -0
- package/dist/chunk-MHEVRMDX.js +1230 -0
- package/dist/chunk-MHEVRMDX.js.map +1 -0
- package/{src/utils/examples.ts → dist/examples-E6FFEVBE.js} +856 -1141
- package/dist/examples-E6FFEVBE.js.map +1 -0
- package/dist/index.js +1145 -8456
- package/dist/index.js.map +1 -1
- package/package.json +6 -3
- package/.github/workflows/npm-publish.yml +0 -77
- package/.github/workflows/pr-checks.yml +0 -36
- package/AGENTS.md +0 -110
- package/docs/cli-contract.md +0 -41
- package/docs/npm-release.md +0 -64
- package/docs/superpowers/plans/2026-03-24-zinkee-cli-implementation.md +0 -837
- package/docs/superpowers/plans/2026-03-25-cli-backend-error-contract.md +0 -503
- package/docs/superpowers/plans/2026-03-26-display-freeform-create.md +0 -389
- package/docs/superpowers/specs/2026-03-24-zinkee-cli-backend-blockers.md +0 -172
- package/docs/superpowers/specs/2026-03-24-zinkee-cli-design.md +0 -1576
- package/docs/superpowers/specs/2026-03-24-zinkee-cli-e2e-checklist.md +0 -215
- package/docs/superpowers/specs/2026-03-24-zinkee-cli-e2e-design.md +0 -492
- package/docs/superpowers/specs/2026-03-24-zinkee-cli-e2e-status.md +0 -307
- package/docs/superpowers/specs/2026-07-30-cli-pr-checks-design.md +0 -37
- package/src/api/automations.ts +0 -404
- package/src/api/comments.ts +0 -51
- package/src/api/displays.ts +0 -337
- package/src/api/document-templates.ts +0 -110
- package/src/api/files.ts +0 -50
- package/src/api/formulas.test.ts +0 -65
- package/src/api/formulas.ts +0 -67
- package/src/api/logs.ts +0 -34
- package/src/api/navigation.ts +0 -70
- package/src/api/records.ts +0 -184
- package/src/api/schemas.ts +0 -148
- package/src/api/teamspace.ts +0 -110
- package/src/cli-examples.ts +0 -130
- package/src/cli-runner.ts +0 -95
- package/src/client.test.ts +0 -189
- package/src/client.ts +0 -269
- package/src/command-registry.ts +0 -882
- package/src/commands/automations.test.ts +0 -1030
- package/src/commands/automations.ts +0 -2102
- package/src/commands/comments.test.ts +0 -214
- package/src/commands/comments.ts +0 -303
- package/src/commands/config.test.ts +0 -81
- package/src/commands/config.ts +0 -150
- package/src/commands/displays.test.ts +0 -1105
- package/src/commands/displays.ts +0 -1442
- package/src/commands/document-templates.test.ts +0 -569
- package/src/commands/document-templates.ts +0 -563
- package/src/commands/files.test.ts +0 -284
- package/src/commands/files.ts +0 -280
- package/src/commands/formulas.test.ts +0 -194
- package/src/commands/formulas.ts +0 -243
- package/src/commands/logs.test.ts +0 -123
- package/src/commands/logs.ts +0 -159
- package/src/commands/navigation.test.ts +0 -211
- package/src/commands/navigation.ts +0 -348
- package/src/commands/profiles.test.ts +0 -191
- package/src/commands/profiles.ts +0 -303
- package/src/commands/records.test.ts +0 -860
- package/src/commands/records.ts +0 -883
- package/src/commands/schemas.test.ts +0 -1252
- package/src/commands/schemas.ts +0 -890
- package/src/commands/teamspace.test.ts +0 -229
- package/src/commands/teamspace.ts +0 -546
- package/src/completion/engine.test.ts +0 -138
- package/src/completion/engine.ts +0 -168
- package/src/completion/install.test.ts +0 -179
- package/src/completion/install.ts +0 -260
- package/src/completion/runtime.ts +0 -150
- package/src/completion/scripts.ts +0 -91
- package/src/config.test.ts +0 -362
- package/src/config.ts +0 -294
- package/src/index.test.ts +0 -217
- package/src/index.ts +0 -8
- package/src/parsers/expressions.test.ts +0 -95
- package/src/parsers/expressions.ts +0 -128
- package/src/parsers/kv.test.ts +0 -35
- package/src/parsers/kv.ts +0 -49
- package/src/parsers/selectors.test.ts +0 -23
- package/src/parsers/selectors.ts +0 -29
- package/src/program.ts +0 -64
- package/src/runtime-context.ts +0 -103
- package/src/types.ts +0 -76
- package/src/utils/argv-rewrite.test.ts +0 -149
- package/src/utils/argv-rewrite.ts +0 -269
- package/src/utils/errors.test.ts +0 -85
- package/src/utils/errors.ts +0 -191
- package/src/utils/examples.test.ts +0 -374
- package/src/utils/output.test.ts +0 -65
- package/src/utils/output.ts +0 -154
- package/src/utils/schema-fields.ts +0 -1016
- package/tsconfig.json +0 -20
- 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
|