Skip to content

Add jev-belay, jev-commit and jev.nvim - #7

Open
valentynkit wants to merge 1 commit into
AppitStudio:mainfrom
valentynkit:add-valentynkit-jev-tools
Open

valentynkit wants to merge 1 commit into
AppitStudio:mainfrom
valentynkit:add-valentynkit-jev-tools

Conversation

@valentynkit

@valentynkit valentynkit commented Sep 19, 2026

Copy link
Copy Markdown

Three tools of mine built on Jev, all MIT, each calling the API directly: jev-belay, a Claude Code Stop hook that blocks an unverified done; jev-commit, a pre-commit hook that checks the message against the staged diff; jev.nvim, a Neovim plugin that turns a plain-language question into a quickfix list. Each gets a project page, a Developer tools index entry and a README line per CONTRIBUTING; npm run check passes. AI assistance: an agent drafted the project pages from the repos' own READMEs and ran the checks; I maintain all three and each page's Maintainer field says so. Not run against a live TypeSafe key for this submission.

@valentynkit valentynkit reopened this Sep 19, 2026
@valentynkit

Copy link
Copy Markdown
Author

Closed by mistake, reopened.

@AsafMazuz1 AsafMazuz1 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @valentynkit — thank you for being our first community contributor! 🎉 All three tools fit the Developer tools category and bring useful workflows to the list. We appreciate the project pages, the tests in your repositories, and the clear disclosure of authorship, AI assistance, and what you haven't tested live.

We'd like to get these into the catalog. There are a few concrete fixes to make first, mostly around helping someone follow the setup successfully and understand what leaves their machine. We'll handle the README merge conflict ourselves. You can continue updating this same PR.

Before we merge:

  1. Keep detected credentials out of Jev Commit's outgoing requests. In the reviewed CLI, belt.scan() finds credentials, but judge(states, env) still receives the original diff before the commit is blocked. We reproduced this with a synthetic private-key header and a local fake API: one request contained the header, then the hook exited 20. Please fix this upstream so content flagged by the blocking credential patterns cannot reach the provider, add an offline regression test, and update the catalog's reviewed revision. Skipping inference when one of those patterns matches is a straightforward approach. Also correct the blanket claim that missing-key/API failures always exit 0: the local credential check still blocks without a key.

  2. Use an installation revision that exists. The Jev Commit pre-commit example specifies rev: v0.1.0, but upstream currently has no tags. Please use a valid reviewed commit SHA, or publish the intended tag. Identify the snippet as .pre-commit-config.yaml and state the Python 3.10+ requirement.

  3. Make key setup work for the installed hooks. Both Belay and Commit suggest copying .env.example to .env, but neither entry point reads that file. We verified that a key present only there leaves Belay reporting no key and Commit unable to find it. Please document exporting TYPESAFE_API_KEY into the environment inherited by Claude Code/Git, or another supported loading mechanism. For Belay, explain that Claude Code needs to inherit the variable when launched. The setup should also work for someone who installed through the marketplace or pipx and has no source checkout in their current directory. Please update the upstream instructions and the catalog pages together.

  4. Align the remaining descriptions with the source. Belay sends a redacted, capped task/final-message projection plus file-change counts and check summaries, rather than the entire transcript slice; see buildState(). Mention its optional local decision log. Label Jev Commit's demo probabilities, latency, and costs as simulated/placeholders, as its demo guide explains, and distinguish estimated costs from billing. For jev.nvim, include the Apache-2.0 query files alongside MIT (NOTICE); clarify that quickfix retains below-threshold results while virtual-text marks are filtered. Cost estimates use the configured assumptions and do not establish any alternative endpoint's pricing.

What we checked: at PR commit 2dc88de, npm run check passed. We independently ran Belay's tests at 98f39e0 (69 passed, 5 skipped) and Commit's at 311e163 (98 passed, 1 skipped). We inspected jev.nvim's source at a1577b0 and its successful CI run across four Neovim versions; we did not run Neovim locally. The reproductions used synthetic data and local fake endpoints. No live TypeSafe calls were made, and we're not asking you to pay for live evaluation to address this review.

To make the next pass easier, here's a prompt you can paste into your coding agent. It covers the changes above and asks it to collect the evidence we'll need to re-review.

Copy/paste prompt for your agent
Help me address the maintainer review on:
https://github.com/AppitStudio/awesome-jev/pull/7

I maintain valentynkit/jev-belay, valentynkit/jev-commit, and
valentynkit/jev.nvim. The PR lists those projects in Awesome Jev.
Read the current PR review and inspect the actual implementations before
changing anything. Use the Awesome Jev contributor skill at:
https://github.com/AppitStudio/awesome-jev/blob/main/skills/awesome-jev-contributor/SKILL.md
Read CONTRIBUTING.md, community/PROJECT_TEMPLATE.md, and the PR template
from the current catalog. Use the TypeSafe skill/current official docs
when checking the API integration. Treat these projects as experimental;
do not invent live results, measured accuracy, or billing evidence.

Prepare focused fixes in my upstream projects and my existing catalog
PR branch. Preserve unrelated changes. The maintainers will handle the
catalog README merge conflict; do not rebase or force-push to solve it.

1. In jev-commit, trace scan -> request -> verdict. Prevent content caught
   by blocking credential patterns from reaching any model request.
   Prefer skipping inference when such a pattern matches. Keep the amend
   policy explicit: skipping an upload must not accidentally change the
   documented rule that clean-index amends never block. Add offline tests
   using synthetic credential-shaped content and a recording fake transport
   to prove the sensitive content cannot leave, the normal clean path still
   works, and missing-key/API-error behavior matches the docs. Do not claim
   the scanner can detect every secret.
2. Replace the nonexistent v0.1.0 installation reference with an existing
   reviewed revision. Use the fixed revision once it is available upstream.
   State Python 3.10+, the config filename, and the commit-msg installation
   command. Check the documented installation path in a disposable repo.
3. Fix Belay/Commit API-key instructions upstream and in the catalog.
   Neither currently loads .env automatically. Show a supported environment
   setup for the installed entry point and verify with dummy values; do not
   read real credentials. Ensure Claude Code inherits the variable at launch.
4. Correct Belay's outgoing data and optional local logging description;
   label Commit's demo responses/latency/cost as simulated; identify estimated
   costs as estimates. Correct jev.nvim's MIT/Apache-2.0 license description,
   quickfix versus virtual-text threshold behavior, and pricing assumptions.
   Add direct links to the relevant demos/fixtures and runnable offline checks.
5. Keep each catalog detail page, category listing, and README entry
   consistent. Record the exact revisions actually inspected and tested.
   Update only claims supported by the source or observed results.
6. Run the relevant upstream offline suites and regression tests, then run
   npm ci --ignore-scripts and npm run check in the catalog. Use isolated
   scratch directories for hook installation; do not change my real hooks
   or editor configuration. No paid model calls are required or authorized.
   If a runtime is unavailable, report that honestly and distinguish upstream
   CI evidence from tests you ran yourself.

Finish with a short mapping of each review item to its fix, changed files,
exact tested commits, commands/results (including skipped checks), and any
remaining limitation. Prepare updated PR verification/AI-assistance text
with honest checklist states. Keep drafts, source clones, raw test captures,
and credentials outside the public catalog. Do not push, publish a tag,
post comments, or merge until I review and authorize the prepared changes.

This is a young repository, and contributions like yours help shape it. Thank you for putting the work into all three tools. Once the fixes are up, leave a note here and we'll take another look — happy to help if any part of the feedback needs clarification.

@AsafMazuz1

Copy link
Copy Markdown
Contributor

Following up on the earlier CHANGES_REQUESTED review — there are still no new commits on this branch, and the upstream items remain open:

  1. Credential non-exfiltration in jev-commit (+ offline regression test) so content flagged by belt.scan() cannot reach judge() / the provider
  2. Real install revision instead of missing v0.1.0 (zero tags on valentynkit/jev-commit)
  3. API key env setup that installed hooks actually see (not .env alone)
  4. Belay / Commit / nvim description fixes (outgoing data, simulated demo costs, dual license, quickfix vs virtual-text thresholds), with updated reviewed SHAs on the pages

I re-confirmed the judge-after-scan path at 311e163 and the empty tag list on valentynkit/jev-commit.

Separately (new since the first review): the catalog layout has moved on. Project pages must live under community/projects/tools/ (or apps/), with the tools index in community/projects/tools/README.md. Flat community/projects/*.md pages are rejected by current check:community. Please migrate the three pages and README / Project guide links accordingly when you push the next revision. Merge conflicts also need resolving (CONFLICTING / behind main); we can still help with the root README conflict once paths are correct.

Once upstream fixes + path migration + updated reviewed SHAs are up, leave a note and we’ll re-review. Thank you again for the three tools — we still want them in the list after these blockers clear.

@AsafMazuz1

Copy link
Copy Markdown
Contributor

Follow-up on the earlier CHANGES_REQUESTED review — there are still no new commits on this branch, and the upstream items (credential non-upload in jev-commit, real install revision instead of missing v0.1.0, API key env setup that installed hooks actually see, and the Belay/Commit/nvim description fixes) remain open. I re-confirmed the judge-after-scan path at 311e163 and the empty tag list on valentynkit/jev-commit.

Separately, the catalog layout has moved on: project pages must live under community/projects/tools/ (or apps/), with the tools index in community/projects/tools/README.md. Flat community/projects/*.md pages are rejected by current check:community. Please migrate the three pages and README links accordingly when you push the next revision (we can still help with the root README conflict).

Once upstream fixes + path migration + updated reviewed SHAs are up, leave a note and we’ll re-review. Thank you again for the three tools — we still want them in the list after these blockers clear.

@AsafMazuz1

Copy link
Copy Markdown
Contributor

Catalog Curator phase-1 hourly check (~10:50 Europe/Sofia 2026-09-20)

Still leaving open — no force-merge.

Reconfirmed:

  • Head still 2dc88de (ahead 1 / behind 128 vs main); mergeable=CONFLICTING / DIRTY
  • Review decision remains CHANGES_REQUESTED
  • Offline CI on the stale head previously passed, but the branch has not moved and conflicts with current main
  • Diff still places pages under community/projects/*.md (pre-tools/ migration) without tools-index + README three-part wiring

Unchanged blockers from prior reviews:

  1. Credential non-exfiltration in jev-commit (+ offline regression) so belt.scan()-flagged content cannot reach judge() / the provider (reconfirmed path at 311e163 historically)
  2. Real install revision instead of missing v0.1.0 tags
  3. API key / .env hook setup that installed hooks actually see
  4. Belay / Commit / nvim description + SHA / path fixes for the current community/projects/tools/ layout

When upstream items land, please rebase onto current main, migrate the three pages into community/projects/tools/, wire the tools index + README Project guide links, and ping for re-review.

@AsafMazuz1

Copy link
Copy Markdown
Contributor

Catalog Curator phase-1 hourly check (~11:48 Europe/Sofia 2026-09-20)

Still leaving open — no force-merge.

Reconfirmed:

  • Head still 2dc88de (ahead 1 / behind 136 vs main tip 1939301); mergeable=CONFLICTING / DIRTY
  • Review decision remains CHANGES_REQUESTED
  • Offline CI on the stale head previously passed (35435688748), but the branch has not moved and is not rebased onto current main
  • Paths still flat (community/projects/jev-*.md); current catalog expects community/projects/tools/ + index wiring

Upstream blockers unchanged:

  1. Credential non-exfiltration in jev-commit (+ offline regression) so belt.scan()-flagged content cannot reach judge() / the provider
  2. Real install revision instead of missing v0.1.0 tags
  3. API key / .env setup that installed hooks actually inherit
  4. Belay / Commit / nvim description + SHA / path migration fixes

We'll handle the README merge conflict once the upstream items land on this same PR. Happy to re-review when you push.

@AsafMazuz1

Copy link
Copy Markdown
Contributor

Catalog Curator phase-1 hourly check (~12:46 Europe/Sofia 2026-09-20)

Still leaving open — no force-merge.

Reconfirmed:

  • Head still 2dc88de (ahead 1 / behind 141 vs main tip 650fe3d); mergeable=CONFLICTING / DIRTY
  • Review decision remains CHANGES_REQUESTED
  • Offline CI on the stale head previously passed (35435688748), but the branch has not moved and is not rebased onto current main
  • Paths still flat (community/projects/jev-*.md); current catalog expects community/projects/tools/ + index wiring
  • Upstream: valentynkit/jev-commit still has 0 tags; tip still 311e163 with belt.scan() then judge(states, env) (lines ~262–271)

Upstream blockers unchanged:

  1. Credential non-exfiltration in jev-commit (+ offline regression) so belt.scan()-flagged content cannot reach judge() / the provider
  2. Real install revision instead of missing v0.1.0 tags
  3. API key / .env setup that installed hooks actually inherit
  4. Belay / Commit / nvim description + SHA / path migration fixes

We'll handle the README merge conflict once the upstream items land on this same PR. Happy to re-review when you push.

@AsafMazuz1

Copy link
Copy Markdown
Contributor

Catalog Curator phase-1 hourly check (~14:48 Europe/Sofia 2026-09-20)

Still leaving open — no force-merge.

Reconfirmed:

  • Head still 2dc88de (ahead 1 / behind 158 vs main tip b731e61); mergeable=CONFLICTING / DIRTY
  • Review decision remains CHANGES_REQUESTED
  • Offline CI on the stale head previously passed (35435688748), but the branch has not moved and is not rebased onto current main
  • Paths still flat (community/projects/jev-*.md); current catalog expects community/projects/tools/ + index wiring
  • Upstream: valentynkit/jev-commit still has 0 tags; tip still 311e163 with belt.scan() then judge(states, env) (lines ~262–271)

Upstream blockers unchanged:

  1. Credential non-exfiltration in jev-commit (+ offline regression) so belt.scan()-flagged content cannot reach judge() / the provider
  2. Real install revision instead of missing v0.1.0 tags
  3. API key / .env setup that installed hooks actually inherit
  4. Belay / Commit / nvim description + SHA / path migration fixes

We'll handle the README merge conflict once the upstream items land on this same PR. Happy to re-review when you push.

@AsafMazuz1 AsafMazuz1 mentioned this pull request Sep 20, 2026
5 tasks
@AsafMazuz1

Copy link
Copy Markdown
Contributor

Catalog Curator hourly check (~15:45 Europe/Sofia 2026-09-20)

Still leaving open — no force-merge.

Reconfirmed:

  • Head still 2dc88de (ahead 1 / behind 168 vs main tip c074200); mergeable=CONFLICTING / DIRTY
  • Review decision remains CHANGES_REQUESTED
  • Offline CI on the stale head previously passed (35435688748), but the branch has not moved and is not rebased onto current main
  • Paths still flat (community/projects/jev-*.md); current catalog expects community/projects/tools/ + index wiring
  • Upstream: valentynkit/jev-commit still has 0 tags; tip still 311e163. jev-belay tip moved to ef719db (was 98f39e0 on the PR page); jev.nvim tip still a1577b0

Upstream blockers unchanged:

  1. Credential non-exfiltration in jev-commit (+ offline regression) so belt.scan()-flagged content cannot reach judge() / the provider
  2. Real install revision instead of missing v0.1.0 tags
  3. API key / .env setup that installed hooks actually inherit
  4. Belay / Commit / nvim description + SHA / path migration fixes (and refresh Belay reviewed SHA if adopting the newer tip)

We'll handle the README merge conflict once the upstream items land on this same PR. Happy to re-review when you push.

@AsafMazuz1

Copy link
Copy Markdown
Contributor

Catalog Curator phase-1 hourly check (~16:48 Europe/Sofia 2026-09-20)

Still leaving open — no force-merge.

Reconfirmed:

  • Head still 2dc88de (ahead 1 / behind 173 vs main tip 6c9e09f); mergeable=CONFLICTING / DIRTY
  • Review decision remains CHANGES_REQUESTED
  • Offline CI on the stale head previously passed (35435688748), but the branch has not moved and is not rebased onto current main
  • Paths still flat (community/projects/jev-*.md); current catalog expects community/projects/tools/ + index wiring
  • Upstream: valentynkit/jev-commit still has 0 tags; tip still 311e163 with belt.scan() then judge(states, env) (lines ~262–271). jev-belay tip ef719db; jev.nvim tip still a1577b0

Upstream blockers unchanged:

  1. Credential non-exfiltration in jev-commit (+ offline regression) so belt.scan()-flagged content cannot reach judge() / the provider
  2. Real install revision instead of missing v0.1.0 tags
  3. API key / .env setup that installed hooks actually inherit
  4. Belay / Commit / nvim description + SHA / path migration fixes for community/projects/tools/

We'll handle the README merge conflict once the upstream + layout fixes land. Leave a note when ready and we'll re-review.

@AsafMazuz1

Copy link
Copy Markdown
Contributor

Curator hourly 2026-09-20 ~18:56 Europe/Sofia: leaving open (still CONFLICTING + CHANGES_REQUESTED). Please rebase onto current main and split to one resource per PR per CONTRIBUTING when ready.

@AsafMazuz1

Copy link
Copy Markdown
Contributor

Curator note (2026-09-20 ~19:58–20:10 Europe/Sofia): Still CONFLICTING + CHANGES_REQUESTED. Leaving open this hour — not trivially mergeable (needs author rebase onto current main; also bundles three resources). Hourly curation continued with separate one-resource PRs (#124#128). Happy to re-review after a conflict-free update.

@AsafMazuz1

Copy link
Copy Markdown
Contributor

Catalog Curator hourly check (~22:47 Europe/Sofia 2026-09-20)

Still leaving open — no force-merge.

Reconfirmed:

  • Head still 2dc88de; mergeable=CONFLICTING / DIRTY; review CHANGES_REQUESTED
  • No new commits since prior hourly notes; still behind current main (tip aab3baf)
  • Paths still flat (community/projects/jev-*.md); catalog expects community/projects/tools/ + index wiring

Upstream blockers unchanged (credential non-exfiltration in jev-commit, real install revision / tags, API key env inheritance, Belay/Commit/nvim description + SHA + path migration).

Happy to re-review after a conflict-free update on this PR. Hourly curation continues with separate one-resource PRs.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants