schema-e2e-validation
Earthly E2E validation for YAML schema contracts. TRIGGERS - schema validation, YAML schema, schema contracts, regenerate types.
Best use case
schema-e2e-validation is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Earthly E2E validation for YAML schema contracts. TRIGGERS - schema validation, YAML schema, schema contracts, regenerate types.
Teams using schema-e2e-validation should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/schema-e2e-validation/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How schema-e2e-validation Compares
| Feature / Agent | schema-e2e-validation | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Earthly E2E validation for YAML schema contracts. TRIGGERS - schema validation, YAML schema, schema contracts, regenerate types.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Schema E2E Validation
> **Self-Evolving Skill**: This skill improves through use. If instructions are wrong, parameters drifted, or a workaround was needed — fix this file immediately, don't defer. Only update for real, reproducible issues.
## When to Use This Skill
Use this skill when:
- Validating schema changes before commit
- Verifying YAML schema matches live ClickHouse Cloud
- Regenerating Python types, DDL, or docs
- Running full schema workflow validation
## Prerequisites
### Docker Runtime (Required)
Earthly requires Docker. Start Colima before running:
```bash
colima start
```
**Check if running:**
```bash
docker ps # Should not error
```
### Doppler Access (For validation targets)
Required for `+test-schema-validate` and `+test-schema-e2e`:
```bash
doppler configure set token <token_from_1password>
doppler setup --project gapless-network-data --config prd
```
### Earthly Installation
```bash
brew install earthly
```
---
## Quick Commands
### Generation only (no secrets)
```bash
cd ~/eon/gapless-network-data
colima start # If not already running
earthly +test-schema-generate
```
### Full E2E with validation (requires Doppler)
```bash
cd ~/eon/gapless-network-data
colima start # If not already running
./scripts/earthly-with-doppler.sh +test-schema-e2e
```
### All non-secret targets
```bash
cd ~/eon/gapless-network-data
earthly +all
```
---
## Artifacts
After running `+test-schema-generate` or `+test-schema-e2e`, check `./earthly-artifacts/`:
| Path | Contents |
| -------------------------- | --------------------------- |
| `types/blocks.py` | Pydantic + TypedDict models |
| `types/__init__.py` | Package init |
| `ddl/ethereum_mainnet.sql` | ClickHouse DDL |
| `docs/ethereum_mainnet.md` | Markdown documentation |
For E2E, artifacts are under `e2e/types/`, `e2e/ddl/`, `e2e/docs/`.
---
## Earthfile Targets Reference
| Target | Secrets | Purpose |
| ----------------------- | ------- | -------------------------- |
| `+deps` | No | Install uv + dependencies |
| `+build` | No | Copy source files |
| `+test-unit` | No | Run pytest |
| `+test-schema-generate` | No | Generate types/DDL/docs |
| `+test-schema-validate` | Yes | Validate vs ClickHouse |
| `+test-schema-e2e` | Yes | Full workflow + artifacts |
| `+all` | No | Run all non-secret targets |
---
## Troubleshooting
### "could not determine buildkit address - is Docker or Podman running?"
**Cause**: Docker/Colima not running
**Fix**:
```bash
colima start
# Wait for "done" message, then retry
earthly +test-schema-generate
```
### "unable to parse --secret-file argument"
**Cause**: Wrong flag name or malformed secrets file
**Fix**: The correct flag is `--secret-file-path` (NOT `--secret-file`). The wrapper script handles this, but if running manually:
```bash
# WRONG
earthly --secret-file=/path/to/secrets +target
# CORRECT
earthly --secret-file-path=/path/to/secrets +target
```
Also ensure secrets file has no quotes around values:
```bash
# WRONG format
CLICKHOUSE_HOST="host.cloud"
# CORRECT format
CLICKHOUSE_HOST=host.cloud
```
### "OSError: Readme file does not exist: README.md"
**Cause**: hatchling build backend requires README.md in container
**Fix**: Ensure Earthfile copies README.md in deps target:
```earthfile
deps:
COPY pyproject.toml uv.lock README.md ./ # README.md required!
```
### "missing secret" during validation
**Cause**: Doppler not configured or secrets not passed
**Fix**:
```bash
# Verify Doppler has the secrets
doppler secrets --project gapless-network-data --config prd | grep CLICKHOUSE
# Use the wrapper script (handles secret injection)
./scripts/earthly-with-doppler.sh +test-schema-validate
```
### Cache Issues
Force rebuild without cache:
```bash
earthly --no-cache +test-schema-e2e
```
---
## Implementation Details
### Doppler Secret Injection
The wrapper script `scripts/earthly-with-doppler.sh`:
1. Downloads secrets from Doppler
2. Filters for `CLICKHOUSE_*` variables
3. Strips quotes (Doppler outputs `KEY="value"`, Earthly needs `KEY=value`)
4. Passes via `--secret-file-path` flag
5. Cleans up temp file on exit
### Secrets Required
| Secret | Purpose |
| ------------------------------ | --------------------- |
| `CLICKHOUSE_HOST_READONLY` | ClickHouse Cloud host |
| `CLICKHOUSE_USER_READONLY` | Read-only user |
| `CLICKHOUSE_PASSWORD_READONLY` | Read-only password |
---
## Related Files
| File | Purpose |
| ---------------------------------------------------------------------- | ------------------------ |
| `~/eon/gapless-network-data/Earthfile` | Main build file |
| `~/eon/gapless-network-data/scripts/earthly-with-doppler.sh` | Secret injection wrapper |
| `~/eon/gapless-network-data/schema/clickhouse/ethereum_mainnet.yaml` | SSoT schema |
| `~/eon/gapless-network-data/docs/adr/2025-12-03-earthly-schema-e2e.md` | ADR |
---
## Validation History
- **2025-12-03**: Created and validated with full E2E run against ClickHouse Cloud
- **Lessons Learned**:
- `--secret-file-path` not `--secret-file` (Earthly v0.8.16)
- Doppler `--format env` outputs quotes, must strip with `sed 's/"//g'`
- README.md must be copied for hatchling build backend
- Colima must be started before Earthly runs
---
## Design Authority
<!-- ADR: 2025-12-10-clickhouse-skill-delegation -->
This skill validates schemas but does not design them. For schema design guidance (ORDER BY, compression, partitioning), invoke **`quality-tools:clickhouse-architect`** first.
## Related Skills
| Skill | Purpose |
| ------------------------------------------ | ------------------------------- |
| `quality-tools:clickhouse-architect` | Schema design before validation |
| `devops-tools:clickhouse-cloud-management` | Cloud credentials for E2E tests |
| `devops-tools:clickhouse-pydantic-config` | Client configuration |
## Post-Execution Reflection
After this skill completes, check before closing:
1. **Did the command succeed?** — If not, fix the instruction or error table that caused the failure.
2. **Did parameters or output change?** — If the underlying tool's interface drifted, update Usage examples and Parameters table to match.
3. **Was a workaround needed?** — If you had to improvise (different flags, extra steps), update this SKILL.md so the next invocation doesn't need the same workaround.
Only update if the issue is real and reproducible — not speculative.Related Skills
multi-agent-e2e-validation
Multi-agent parallel E2E validation for database refactors. TRIGGERS - E2E validation, schema migration testing, database refactor validation.
link-validation
Universal link validation using lychee for Claude Code sessions. Detect broken links and path policy violations on demand.
ml-failfast-validation
POC validation patterns to catch issues before committing to long-running ML experiments. TRIGGERS - fail-fast, POC validation, preflight check, experiment validation, schema validation, gradient check, sanity check, smoke test.
doppler-secret-validation
Validate and test Doppler secrets. TRIGGERS - add to Doppler, store secret, validate token, test credentials.
voice-quality-audition
Audition Kokoro TTS voices to compare quality and grade. TRIGGERS - audition voices, kokoro voices, voice comparison, tts voice, voice quality, compare voices.
settings-and-tuning
Configure TTS voices, speed, timeouts, queue depth, and bot settings. TRIGGERS - configure tts, change voice, tts speed, queue depth, tts timeout, bot config, tune settings, adjust parameters.
full-stack-bootstrap
One-time bootstrap for Kokoro TTS engine, Telegram bot, and BotFather setup. TRIGGERS - setup tts, install kokoro, botfather, bootstrap tts-tg-sync, configure telegram bot, full stack setup.
diagnostic-issue-resolver
Diagnose and resolve TTS and Telegram bot issues. TRIGGERS - tts not working, bot not responding, kokoro error, audio not playing, lock stuck, telegram bot troubleshoot, diagnose issue.
component-version-upgrade
Upgrade Kokoro model, bot dependencies, or TTS components. TRIGGERS - upgrade kokoro, update model, upgrade bot, update dependencies, version bump, component update.
clean-component-removal
Remove TTS and Telegram sync components cleanly. TRIGGERS - uninstall tts, remove telegram bot, uninstall kokoro, clean tts, teardown, component removal.
send-message
Use when user wants to send a text message on Telegram as their personal account via MTProto, text someone, or message a contact by username, phone, or chat ID.
send-media
Use when user wants to send or upload a file, photo, video, voice note, or document on Telegram via their personal account.