refactor(config): drop unused safeParse wrappers and stale Zod comments in config/schema.ts
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 3/5
- Estimated time
- Half a day
- Newbie friendliness
- 62/100
- Issue type
- Refactor
- Clarity
- Mostly clear
- Activity status
- Active
- Tech stack
- typescript
- Domain
- cli
Research direction
Start by running rg for the five unused exports (ApiKeyAuthSchema, BasicAuthSchema, AuthSchema, ServiceBlockSchema, ConfigFileSchema) in src/config/schema.ts to confirm only tests use them, then run rg -i zod src to find the stale comments in loader.ts, ajv-validate.ts, json-schema-args.ts, namespaces.ts and factory.ts. Done means the wrappers and their tests are removed with a justification, the post-checks live only in ContextSchema, rg -i zod src is empty, and npm test and npx tsc --noEmit pass. Leave the strip* helpers and additionalProperties alone, since #716 covers them.
Written by the indexing model from the issue text.
Description
Summary
src/config/schema.ts exports five ajv-backed safeParse wrappers that nothing in src/ calls. Only tests use them. Several comments across src/ also still describe validation as Zod-based, but zod has been removed from the project.
Unused exports (current main):
ApiKeyAuthSchema(line 306)BasicAuthSchema(line 316)AuthSchema(line 326)ServiceBlockSchema(line 335)ConfigFileSchema(line 402)
Production code uses only StructuralConfigSchema (loader.ts, completion/complete.ts, completers/context-names.ts), ContextSchema (loader.ts, config/commands.ts) and CommandPolicySchema (loader.ts, completion/complete.ts).
ConfigFileSchema also duplicates the three per-context post-checks from ContextSchema, with different wording:
- At least one service block:
ContextSchemaline 382-383 vsConfigFileSchemaline 426-427 ("at least one service block required"). contextUrlErrors: line 385 vs line 429.contextVersionErrors: line 387 vs line 431.
These were around lines 378-385 and 431-440 in an earlier revision.
Stale Zod comments:
src/config/loader.ts:14: "Validate active context with full Zod schemas"src/lib/ajv-validate.ts:7src/lib/json-schema-args.ts:9src/namespaces.ts:107src/factory.ts:737
Proposal
- Delete the five unused wrappers and their tests. Deleting
ConfigFileSchemaremoves the duplicated post-checks, soContextSchemabecomes their single home. - Update the Zod comments so they describe the current ajv/JSON Schema behaviour.
The PR must explicitly justify deleting the tests for the removed wrappers: they cover only code being removed, and the behaviour that remains is still covered through ContextSchema/StructuralConfigSchema.
Out of scope: deferred to #716 (design decision 1)
This issue does not cover replacing the strip* helpers (schema.ts ~238-298, plus the ! assertions on their results) with ValidateFunction<T> type guards, or adding additionalProperties: false. Either change would alter behaviour. Today unknown config keys are silently stripped (schema.ts:137: "no additionalProperties — we strip manually"). A type guard would pass them through, and additionalProperties: false would reject them, which would break existing configs that have extra keys. Both options also overlap with #716's raw-shape plus per-field leaf validator split, which reshapes ContextSchema, contextUrlErrors, contextVersionErrors and the strip* helpers. Decide them there.
Acceptance criteria
-
ConfigFileSchema,AuthSchema,ApiKeyAuthSchema,BasicAuthSchemaandServiceBlockSchemaare removed, or any that stay have a documented reason. - The three per-context post-checks exist only in
ContextSchema. - No comment in
src/refers to Zod (rg -i zod srcis empty). - The PR justifies each deleted test.
- No behaviour change: unknown keys are still stripped, and
npm testandnpx tsc --noEmitpass.
Related
- #716 (design decision 1: the
strip*/type-guard and unknown-key handling is deferred there)
authored by Pi Coding Agent (Claude Opus)
- Dominant language
- TypeScript
- Stars
- 47
- Forks
- 27
- Avg merge
- 2d 6h
- Merged PRs (30d)
- 52
Getting set up
- No Dockerfile or Docker Compose file
- No pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from elastic/cli
-
feat: ship skills/elastic/SKILL.md for agent invocationPossibly taken @onatozmenn claimed this 14 days ago. Openenhancement
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
Maintainers usually reply within 1 day
-
Difficulty 3/5 1-2 days Newbie friendliness 20/100
Maintainers usually reply within 1 day
-
Difficulty 3/5 1-2 days Newbie friendliness 70/100
Maintainers usually reply within 1 day
-
Difficulty 4/5 3-5 days Newbie friendliness 35/100
Maintainers usually reply within 1 day