feat: pivot to TS test harness via dryvist/cc-edge-pack-template#5
Open
JacobPEvans-personal wants to merge 2 commits into
Open
feat: pivot to TS test harness via dryvist/cc-edge-pack-template#5JacobPEvans-personal wants to merge 2 commits into
JacobPEvans-personal wants to merge 2 commits into
Conversation
Adopts the proven TS test harness from the pack template (Vitest +
Biome + nix-devenv shell + reusable workflows). Inherits the template's
demo passthrough pipeline + fixture so CI runs end-to-end on day one.
Pack identity (load-bearing, distinguishes this pack from the template):
- package.json: name=cc-edge-claude-code-io, displayName, description, tags
- release-please-config.json: package-name=cc-edge-claude-code-io
- CLAUDE.md: pack-flavored, points to template + dryvist/.github
- README.md: Cribl Edge pack for Claude Code telemetry collection
Inherited from template (do-not-modify-here):
- tests/{cribl-client,parse-filter,global-setup,test-helpers}.ts
- tests/{routes,pipelines}.test.ts + tsconfig + vitest config + lockfile
- biome.jsonc, lefthook.yml, .editorconfig, .yamllint.yml, flake.nix, .envrc
- Makefile, .gitignore
- scripts/{build-crbl,validate-pack-structure}.sh
- docs/{file-boundary,test-harness,development,release-process,validator-rules}.md
- .github/workflows/{test,release,release-please}.yml + .github/README.md
- default/pipelines/passthrough/conf.yml + route.yml (demo passthrough)
- tests/fixtures/passthrough/sample.{json,expected.json}
Removed: Python harness (conftest.py, cribl_client.py, test_*.py,
requirements.txt) — replaced by TS Vitest equivalent.
Real claude-code-otel and claude-code-session-logs pipelines + fixtures
are deferred to follow-up PRs (out of scope for this minimal harness-
consumption PR).
There was a problem hiding this comment.
Pull request overview
This PR pivots the repository from the legacy Python/pytest harness to the shared TypeScript/Vitest harness from dryvist/cc-edge-pack-template, updates CI to run end-to-end, and refreshes pack identity/docs to match a real pack repo (not a template scaffold).
Changes:
- Replace the Python test harness with a Vitest-based TypeScript harness (including pnpm lockfile + fixtures).
- Add shared tooling/ops scaffolding (Biome, lefthook, nix flake, validation/build scripts, release-please config).
- Update pack identity and baseline “demo passthrough” route/pipeline/fixtures so CI can validate + test end-to-end immediately.
Reviewed changes
Copilot reviewed 42 out of 44 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| tests/vitest.config.ts | Adds Vitest configuration + global setup wiring |
| tests/tsconfig.json | Adds TS config for the test harness |
| tests/test_routes.py | Removes Python route tests (superseded by TS) |
| tests/test_pipelines.py | Removes Python pipeline fixture tests (superseded by TS) |
| tests/test-helpers.ts | Adds helpers for per-test-file Cribl client + pack id |
| tests/routes.test.ts | Adds TS route structural + dynamic flow tests |
| tests/requirements.txt | Removes Python test dependencies |
| tests/pnpm-lock.yaml | Adds pnpm lockfile for harness dependencies |
| tests/pipelines.test.ts | Adds TS fixture-driven pipeline tests |
| tests/parse-filter.ts | Adds simple route-filter parser used by dynamic tests |
| tests/package.json | Adds isolated pnpm workspace for tests tooling |
| tests/global-setup.ts | Adds Vitest globalSetup to install pack once per run |
| tests/fixtures/passthrough/sample.json | Adds demo input fixture to exercise pipeline |
| tests/fixtures/passthrough/sample.expected.json | Adds expected output fixture for demo pipeline |
| tests/cribl_client.py | Removes Python Cribl API client |
| tests/conftest.py | Removes pytest session fixtures (install/cleanup) |
| tests/README.md | Removes Python-harness documentation |
| tests/cribl-client.ts | Adds TS Cribl management API client for harness |
| scripts/validate-pack-structure.sh | Adds pack structural validation script used by CI |
| scripts/build-crbl.sh | Adds release/build script for .crbl artifacts |
| release-please-config.json | Adds release-please configuration for this pack |
| package.json | Updates pack identity fields (name/description/tags/etc.) |
| lefthook.yml | Adds pre-commit Biome hook configuration |
| flake.nix | Adds Nix dev shell for consistent TS toolchain |
| docs/validator-rules.md | Documents validator rules + what CI enforces |
| docs/test-harness.md | Documents the TS/Vitest harness + fixtures workflow |
| docs/release-process.md | Documents release-please driven release process |
| docs/file-boundary.md | Documents “generic vs pack-specific” file boundary |
| docs/development.md | Documents local dev workflow for the TS harness |
| default/pipelines/route.yml | Replaces placeholder route with demo passthrough route |
| default/pipelines/passthrough/conf.yml | Adds demo pipeline stamping canonical fields |
| biome.jsonc | Adds shared Biome configuration |
| README.md | Replaces template README with pack-specific README |
| Makefile | Switches from Python targets to pnpm/vitest/biome targets |
| CLAUDE.md | Updates repo guidance to reflect pack (not template) + new harness |
| .yamllint.yml | Adds yamllint configuration for CI/local linting |
| .release-please-manifest.json | Adds release-please manifest for version tracking |
| .gitignore | Updates ignores from Python venv to Node/TS + nix/direnv |
| .github/workflows/test.yml | Points CI test workflow to template reusable workflow; removes template-skip gating |
| .github/workflows/release.yml | Points release workflow to template reusable workflow |
| .github/workflows/release-please.yml | Adds release-please caller workflow wiring |
| .github/README.md | Documents reusable workflows + caller behavior in this repo |
| .envrc | Adds direnv integration for Nix flake |
| .editorconfig | Adds shared editor formatting settings |
Files not reviewed (1)
- tests/pnpm-lock.yaml: Language not supported
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
3 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
Pilot main is a stale scaffold from before the template was real:
Python harness, placeholder pack name (
REPLACE-WITH-PACK-NAME),placeholder route, CLAUDE.md that incorrectly claims the pilot itself
is a template repository. CI on every push has been a no-op skip due
to
if: github.event.repository.is_template == false(which evaluatesto false on consumers too — bug in the previous template scaffold).
This PR is the minimum needed for the pilot to consume the proven
TS test harness from
dryvist/cc-edge-pack-templateand have its CI actually run end-to-end.What's in scope
pattern: dryvist exposes generic
GH_APP_IDonly)cc-edge-claude-code-io,release-please-config package-name match, slim pack-flavored CLAUDE.md +
README replacing the stale "this is a template" content)
template so CI runs end-to-end on day one
conftest.py,cribl_client.py,test_*.py,requirements.txt)What's deliberately NOT in scope
claude-code-otelandclaude-code-session-logspipelinesThose are pack-content authorship and belong in follow-up PRs once the
harness is proven on the pilot. This PR is about consuming the harness,
not building out the pack.
Replaces
#4 — same
intent (TS pivot) but ballooned to 64 files with substantial pack
content I authored to make the harness happy. Closing #4 in favor of
this one which is a clean rebuild from the now-proven template baseline.