Skip to content

Add TypeScript verification skills - #25

Open
leynos wants to merge 1 commit into
mainfrom
typescript-verification-skills
Open

Add TypeScript verification skills#25
leynos wants to merge 1 commit into
mainfrom
typescript-verification-skills

Conversation

@leynos

@leynos leynos commented Jul 5, 2026

Copy link
Copy Markdown
Owner

Summary

This branch adds TypeScript verification guidance so agents can choose the right level of assurance for JavaScript and TypeScript work: sampled property testing with fast-check, machine-checked proof with LemmaScript, and deterministic test layers for ODW workflow scripts. It also carries the ODW testing skill that is present on the local main branch but not yet on origin/main, because the branch was cut from that local commit.

No roadmap task or issue is referenced by the branch. No execplan is present for this branch; the only execplan in the repository, docs/execplans/adopt-vendcurl.md, is a completed historical plan for unrelated vendcurl work.

Review walkthrough

Validation

  • git diff --check origin/main...HEAD: passed.
  • make all 2>&1 | tee /tmp/make-all-agent-helper-scripts-typescript-verification-skills.out: failed after check-fmt, lint, and typecheck passed; pytest reported 79 passed and 1 failed.

Failure detail:

tests/test_rust_entrypoints.py::test_system_phase_uses_temporary_checkout_and_installs_system_packages
AssertionError: system phase should succeed: expected 0 but got 1; stderr='[bootstrap] Using sudo for privileged ops\n.../rust-entrypoint-system: line 73: VERSION_CODENAME: unbound variable\n'

Notes

The failing validation path is unchanged by this branch: rust-entrypoint-system has the same VERSION_CODENAME lookup on origin/main, and the branch diff does not touch tests/test_rust_entrypoints.py.

Summary by Sourcery

Add new skills documentation for testing and formal verification of TypeScript/JavaScript and ODW workflows.

Documentation:

  • Document an odw-testing skill describing layered testing strategies for Open Dynamic Workflows, including parse gates, helper-unit tests, fixture repos, simulations, mock-adapter end-to-end runs, and smoke tests.
  • Document a fast-check skill that explains when and how to use fast-check 4.x for property-based testing in TypeScript/JavaScript, with references on arbitraries, model-based testing, and race-condition detection.
  • Document a lemmascript skill that explains how to apply LemmaScript for formal verification of TypeScript, including annotations, Dafny/Lean workflows, and brownfield adoption guidance, with detailed reference guides.

@coderabbitai

coderabbitai Bot commented Jul 5, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Summary

  • Added a fast-check documentation skill covering property-based testing in TypeScript/JavaScript, including arbitraries, model-based testing (fc.Command, fc.commands, fc.modelRun), scheduler-driven race detection (fc.scheduler), failure replay, 3.x→4.x migration guidance, and practical integration/escalation advice.
  • Added supporting fast-check reference docs for common arbitraries/combinators and global/per-test configuration (fc.configureGlobal, fc.assert options), including guidance to avoid the filtering trap.
  • Added a lemmascript documentation skill for formal verification of TypeScript with LemmaScript, including annotation syntax (//@ verify, //@ requires///@ ensures, loop invariants/decreases), handling unmodellable calls, and the Dafny/Lean workflows (including the edit loop), proof techniques, CI integration, and brownfield adoption strategy.
  • Added supporting LemmaScript reference docs for annotation semantics and end-to-end verification workflow.
  • Validation passed for formatting, linting, and type checking. make all reported 79 passing tests; its single failure was an unchanged Rust entrypoint test caused by an unbound VERSION_CODENAME variable.

Walkthrough

Add two documentation skill sets: fast-check property-based testing guidance and LemmaScript formal-verification guidance, each with reference pages covering usage, workflows, limitations, and integration.

Changes

fast-check documentation

Layer / File(s) Summary
Property-testing foundations
skills/fast-check/SKILL.md
Define fast-check installation, applicability, property structure, filtering guidance, and core testing concepts.
Arbitrary composition and configuration
skills/fast-check/references/arbitraries.md
Document common arbitraries, composition patterns, recursive generation, valid-input construction, configuration, and replay.
Stateful testing and adoption
skills/fast-check/SKILL.md, skills/fast-check/references/model-based-testing.md
Document model-based testing, scheduler race exploration, migration from 3.x, anti-patterns, project integration, and escalation to formal verification.

LemmaScript documentation

Layer / File(s) Summary
Verification workflow
skills/lemmascript/SKILL.md
Introduce LemmaScript, its prerequisites, annotation-driven verification workflow, backend handling, and integration practices.
Annotation and language reference
skills/lemmascript/references/annotations.md
Define annotation forms, specification expressions, supported TypeScript constructs, purity rules, and modelling caveats.
Tooling and adoption operations
skills/lemmascript/references/workflow.md
Document CLI commands, generated-file conventions, proof techniques, brownfield adoption, CI checks, and trust boundaries.

Poem

Properties dance through shrinking space,
Proofs trace contracts line by line;
Schedulers shuffle every race,
While Dafny guards the design.
Tests replay the failures found—
Two sturdy skills, one clearer ground.

🚥 Pre-merge checks | ✅ 20
✅ Passed checks (20 passed)
Check name Status Explanation
Title check ✅ Passed Keep the title aligned with the added TypeScript verification skills.
Description check ✅ Passed Keep the description aligned with the added fast-check and LemmaScript guidance.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Testing (Overall) ✅ Passed Treat this as PASS: the diff only adds documentation skill files, so there is no new behavioural change that needs guarding by tests.
User-Facing Documentation ✅ Passed PASS: this PR only adds agent skill docs; it does not change runtime user-facing behaviour, and docs/users-guide.md already covers the bootstrap, not these guides.
Developer Documentation ✅ Passed PASS: The PR only adds self-contained skill docs; no internal APIs, architecture, roadmap, or execplan content changed, and there are no locale siblings to sync.
Module-Level Documentation ✅ Passed PASS: the PR only adds Markdown skill pages; no code modules changed, and each new page already states purpose and relationships clearly.
Testing (Unit And Behavioural) ✅ Passed PASS: This PR only adds documentation skill pages; no code, test, or behavioural surfaces changed, so unit/behavioural coverage is not applicable.
Testing (Property / Proof) ✅ Passed PASS — fast-check recommends properties for algebraic/stateful invariants and LemmaScript for universally quantified, load-bearing properties; LemmaScript docs reinforce invariant-preservation proofs.
Testing (Compile-Time / Ui) ✅ Passed Docs-only markdown changes; no Rust/TS compile-time or UI code paths changed, so trybuild/snapshot tests are not applicable.
Unit Architecture ✅ Passed Docs-only changes add guidance for fast-check and LemmaScript; no code paths, side-effects, or dependency wiring changed, so unit architecture is unaffected.
Domain Architecture ✅ Passed Only Markdown skill docs changed; no domain, adapter, persistence, or transport code was touched, and the guidance reinforces clear boundaries.
Observability ✅ Passed PASS: the diff only adds Markdown skill docs; no runtime code, logging, metrics, tracing, or alerts changed, so observability requirements do not apply.
Security And Privacy ✅ Passed No new secrets, credentials, sensitive data, or unsafe auth/permission changes appear; the PR adds docs-only guidance and examples.
Performance And Resource Use ✅ Passed Only Markdown skill docs changed; no executable code, loops, I/O, allocations, or hot-path logic were introduced.
Concurrency And State ✅ Passed Documentation-only PR; no shared mutable state or runtime async code was added, and the fast-check docs explicitly cover model-based and scheduler-driven interleavings.
Architectural Complexity And Maintainability ✅ Passed Docs-only Markdown changes; no new runtime abstractions, layers, registries, or dependency edges were introduced.
Rust Compiler Lint Integrity ✅ Passed No Rust files changed; the PR only adds Markdown docs, so it cannot hide Rust lints or ownership issues.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch typescript-verification-skills

Comment @coderabbitai help to get the list of available commands.

@sourcery-ai

sourcery-ai Bot commented Jul 5, 2026

Copy link
Copy Markdown

Reviewer's Guide

Adds three new TypeScript verification-related skills (fast-check property-based testing, LemmaScript formal verification, and ODW workflow testing) along with reference documents, giving agents structured guidance on when and how to use sampled property testing, machine-checked proof, and deterministic workflow tests for JavaScript/TypeScript and ODW scripts.

Flow diagram for selecting TypeScript verification skills

flowchart TD
  user_request["User asks about verifying JS/TS or ODW workflows"]

  decision_kind{"What needs verification?"}
  js_ts_logic["JS/TS function or library behavior"]
  critical_property["Load-bearing property that must always hold"]
  odw_workflow["ODW workflow script behavior"]

  fast_check_skill["Use fast-check sampled property tests"]
  lemmascript_skill["Use LemmaScript formal verification"]
  odw_testing_skill["Use ODW deterministic workflow tests"]

  user_request --> decision_kind

  decision_kind --> js_ts_logic
  decision_kind --> critical_property
  decision_kind --> odw_workflow

  js_ts_logic --> fast_check_skill
  critical_property --> lemmascript_skill
  odw_workflow --> odw_testing_skill

  fast_check_skill -->|"Escalate when sampled testing is insufficient"| lemmascript_skill
  lemmascript_skill -->|"Keep broad regression net"| fast_check_skill

  odw_testing_skill --> odw_layers{"Pick test layer 0-6"}
Loading

File-Level Changes

Change Details Files
Introduce an ODW workflow testing skill describing a layered strategy for testing ODW JavaScript workflows with deterministic local techniques and mock adapters.
  • Add a new odw-testing skill with trigger description and usage guidance for testing ODW workflow scripts executed by the odw CLI.
  • Define a multi-layer test strategy (parse gate, helper-surface unit tests, schema contract tests, git/filesystem fixtures, source invariants, control-loop simulation, mock-adapter end-to-end, and live smoke runs).
  • Provide concrete Node.js and shell snippets for parsing workflows, slicing helper regions, constructing fixture repositories, simulating control loops with scripted primitives, and running odw with mock adapters.
  • Document anti-patterns and a checklist to keep tests deterministic, hermetic, and decoupled from prompt wording.
skills/odw-testing/SKILL.md
Introduce a fast-check skill for property-based testing in TypeScript/JavaScript, plus detailed references for arbitraries, model-based testing, and race-condition detection.
  • Add a fast-check SKILL document explaining when to use fast-check, core concepts (arbitraries, properties, async properties), and how to configure runs and integrate into projects.
  • Highlight 4.x-specific guidance and migration notes from 3.x, including new string APIs, scheduler changes, and deprecated helpers.
  • Add an arbitraries reference covering common arbitraries, composition patterns with map/chain/record/letrec, and guidance on avoiding the filtering trap.
  • Add a model-based testing reference that defines commands, shows a worked example, explains replay via replayPath, and demonstrates using fc.scheduler for race-condition detection.
skills/fast-check/SKILL.md
skills/fast-check/references/model-based-testing.md
skills/fast-check/references/arbitraries.md
Introduce a LemmaScript skill for formal verification of TypeScript along with references for annotations and workflow/backends.
  • Add a LemmaScript SKILL document describing when to escalate from sampled testing to formal proofs, installation and backend prerequisites, core annotation concepts (requires/ensures/invariants/decreases), and project integration patterns.
  • Document anti-patterns around misuse of assume, erasing .dfy work, or verifying parallel models instead of production functions, plus lessons learned from case studies.
  • Add an annotations reference detailing the LemmaScript annotation surface (file-level directives, function/loop contracts, declaration/statement-level annotations), the spec expression language, supported TS subset, purity rules, and common gotchas.
  • Add a workflow reference explaining backend choices (Dafny vs Lean), the lsc CLI, file/artefact layout per backend, the Dafny regen-based edit loop, proof techniques, brownfield strategy, and CI integration via LemmaScript-files.txt.
skills/lemmascript/SKILL.md
skills/lemmascript/references/annotations.md
skills/lemmascript/references/workflow.md

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

Add two agent skills covering verification of TypeScript and
JavaScript:

- `fast-check` — property-based testing with fast-check 4.x:
  arbitrary design and the filtering trap, model-based (stateful)
  testing with commands, race-condition detection with the
  scheduler, failure replay, and 3.x-to-4.x migration notes.
- `lemmascript` — formal verification with LemmaScript (tech
  preview): the `//@` annotation surface and spec expression
  language, the Dafny `regen` three-way-merge edit loop, the Lean
  four-file scheme, recurring proof techniques, brownfield
  strategy, and CI wiring.

Each skill follows the progressive-discovery layout: a SKILL.md
overview with detail split into `references/` files. The skills
cross-reference each other so sampled properties escalate to proof
where the property is load-bearing, and proofs keep a fast-check
regression net beneath them.

Content is grounded in the upstream sources as of July 2026:
fast-check 4.8.0 (fast-check.dev docs and migration guide) and
LemmaScript SPEC.md v0.5.x, DESIGN.md, and GETTING_STARTED.md.
@leynos
leynos force-pushed the typescript-verification-skills branch from 6085981 to c2e3559 Compare July 24, 2026 21:37
@leynos
leynos marked this pull request as ready for review July 24, 2026 23:32

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Sorry @leynos, you have reached your weekly rate limit of 500000 diff characters.

Please try again later or upgrade to continue using Sourcery

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c2e3559ee0

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +22 to +23
the TypeScript source *is* the production code; there is no erasure and no
verified-model/production gap. Think "Verus is to Rust as LemmaScript is to

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Acknowledge the verification abstraction gap

Remove the claim that there is no verified-model/production gap, or qualify it to mean only that the same source file is verified. The new annotation reference itself documents semantic differences from production JavaScript—including mathematical rather than IEEE-754 numbers (annotations.md, lines 128-129), lost short-circuiting (lines 136-137), and axiomatized cross-file calls (lines 144-147)—so a proof can succeed while the shipped runtime behaves differently. The absolute claim is especially unsafe because this skill recommends LemmaScript for security and other load-bearing properties.

Useful? React with 👍 / 👎.

Comment on lines +69 to +70
//@ ensures \result >= -1 && \result < arr.length
//@ ensures \result >= 0 ==> arr[\result] === target

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Specify the full first-index contract

Strengthen this introductory contract to require completeness and minimality. As written, an implementation that always returns -1 satisfies both postconditions for every permitted input, and one returning any matching index also passes even when an earlier match exists. That makes the flagship verification example demonstrate exactly the underspecified-proof failure warned about later in the skill rather than proving firstIndexOf correct.

Useful? React with 👍 / 👎.

// Drive everything the scheduler currently knows about
await s.waitIdle();

expect(q.drain()).toHaveLength(2);

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Make the FIFO example assert ordering

Assert the queue's ordering rather than only its length. For any queue implementation that retains both items—including a LIFO queue or one that reverses concurrent writes—this property passes, so the scheduler example cannot detect the race condition named by the test. Capture the expected order established by the scheduled operations and compare the drained values to it, or rename this as a no-loss property.

Useful? React with 👍 / 👎.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 6

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
skills/lemmascript/references/annotations.md (1)

489-489: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Remove the second-person pronoun.

Replace “a value you just havoced” with impersonal wording such as “a value immediately assigned by //@ havoc”.

Triage: [type:docstyle]

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/lemmascript/references/annotations.md` at line 489, Update the wording
in the annotations documentation to remove the second-person pronoun, replacing
“a value you just `havoc`ed” with impersonal wording such as “a value
immediately assigned by `//@ havoc`.”

Source: Path instructions

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@skills/fast-check/references/model-based-testing.md`:
- Around line 142-146: Update the scheduler guidance in the model-based testing
reference to state that s.waitIdle() drains all scheduled and recursively
scheduled work until the scheduler is idle. Retain waitAll as deprecated, and
clarify that s.waitFor(finalPromise) is only for awaiting a specific completion
condition rather than general idle draining.

In `@skills/fast-check/SKILL.md`:
- Line 10: Update the wording in the TypeScript/generated-input description to
use “handwritten” instead of “hand-written,” preserving the surrounding text and
meaning.
- Around line 113-115: Remove second-person phrasing at all three documented
sites: in skills/fast-check/SKILL.md lines 113-115, replace “async operations
you hand it” with “async operations supplied to it”; in lines 181-182, replace
“when you can compose” with “when composition is possible”; and in
skills/fast-check/references/model-based-testing.md lines 112-114, replace
“async work you hand it” with “async work supplied to it”.
- Line 46: Update the latest-version statement in the fast-check documentation
to reflect version 4.9.0, or rephrase it to avoid pinning a specific latest
version while preserving the Node.js compatibility information.

In `@skills/lemmascript/references/workflow.md`:
- Line 42: Replace “hand-written” with “handwritten” at both occurrences in
skills/lemmascript/references/workflow.md lines 42 and 53.

In `@skills/lemmascript/SKILL.md`:
- Around line 18-23: Update the LemmaScript description around the “no
verified-model/production gap” claim to qualify it: retain that TypeScript
source is the production code, but state that verification applies only within
the supported fragment and documented trust boundaries. Acknowledge the
runtime/model mismatches, JavaScript numeric semantics, and short-circuit
behavior limitations described in annotations.md without implying unconditional
equivalence.

---

Outside diff comments:
In `@skills/lemmascript/references/annotations.md`:
- Line 489: Update the wording in the annotations documentation to remove the
second-person pronoun, replacing “a value you just `havoc`ed” with impersonal
wording such as “a value immediately assigned by `//@ havoc`.”
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 61eb7328-4676-455d-9ff5-14b2bfff5951

📥 Commits

Reviewing files that changed from the base of the PR and between 14950f3 and c2e3559.

📒 Files selected for processing (6)
  • skills/fast-check/SKILL.md
  • skills/fast-check/references/arbitraries.md
  • skills/fast-check/references/model-based-testing.md
  • skills/lemmascript/SKILL.md
  • skills/lemmascript/references/annotations.md
  • skills/lemmascript/references/workflow.md
🔗 Linked repositories identified

CodeRabbit considers these linked repositories for cross-repo context during reviews:

  • leynos/cuprum (auto-detected)

Comment on lines +142 to +146
`waitOne` and `waitAll` are deprecated. Note the 4.x semantics: a task
scheduled *after* `waitIdle`/`waitAll` began its final drain stays pending —
tasks created behind intermediate `await`s are not magically picked up as they
sometimes were in 3.x. When the code under test schedules follow-up work
asynchronously, prefer `s.waitFor(finalPromise)`.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Inspect the relevant section of the document with line numbers.
sed -n '130,155p' skills/fast-check/references/model-based-testing.md

# Locate any other references to waitIdle/waitAll/waitFor in the repository.
rg -n "waitIdle|waitAll|waitFor" skills/fast-check -S || true

Repository: leynos/agent-helper-scripts

Length of output: 1933


🌐 Web query:

fast-check Scheduler waitIdle waitAll waitFor semantics 4.x site:fast-check.dev

💡 Result:

In fast-check 4.x, the Scheduler API has been updated to provide more predictable and consistent behavior [1][2]. Notably, waitOne and waitAll are deprecated as of version 4.2.0 in favor of newer, more granular primitives [1][2]. The current semantics for these methods are as follows: waitIdle This method replaces waitAll [2][3]. It waits until the scheduler becomes idle, meaning all scheduled tasks and any tasks recursively scheduled by them have completed [4][3]. Unlike the older waitAll, which could have inconsistent behavior depending on micro-task timing and task scheduling latency, waitIdle provides a more predictable and reliable way to wait for the entire queue to clear [1][2]. It cannot, however, await tasks triggered by uncontrolled external sources (e.g., fetch or external events) [4][3]. waitFor(promise) This method waits for a specific, potentially unscheduled task to resolve [4][3]. It is highly useful when the task you are waiting for has not yet been scheduled, or when using testing frameworks (like supertest) that trigger queries only upon specific interactions [4][3]. It will wait as many scheduled tasks as needed—but only the minimal amount—to resolve the provided promise [4]. In version 4.1.0, waitFor was improved to exhaust all resolved micro-tasks before proceeding, ensuring better task capture and more effective reordering [5]. Deprecated Methods (waitOne, waitAll) These methods are deprecated as of version 4.2.0 [1][2]. - waitAll: Previously used to wait for all scheduled tasks, its behavior was often inconsistent due to dependencies on micro-task counts [1][2]. It is now replaced by waitIdle [4][2]. - waitOne: Previously used to wait for a single task, it is now effectively replaced by waitNext(1) [3]. When testing, it is recommended to use waitIdle for waiting for full completion and waitFor for specific, targeted synchronization [4][3]. For more granular control over task execution, consider using waitNext [1][3].

Citations:


Correct the waitIdle() semantics in skills/fast-check/references/model-based-testing.md.
State that s.waitIdle() drains all scheduled and recursively scheduled work until the scheduler is idle. Keep waitAll as deprecated, and use s.waitFor(finalPromise) only for a specific completion condition.

🧰 Tools
🪛 LanguageTool

[uncategorized] ~144-~144: Possible missing comma found.
Context: ...diate awaits are not magically picked up as they sometimes were in 3.x. When the...

(AI_HYDRA_LEO_MISSING_COMMA)


[style] ~144-~144: The adverb ‘sometimes’ is usually put after the verb ‘were’.
Context: ...t`s are not magically picked up as they sometimes were in 3.x. When the code under test schedu...

(ADVERB_WORD_ORDER)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/fast-check/references/model-based-testing.md` around lines 142 - 146,
Update the scheduler guidance in the model-based testing reference to state that
s.waitIdle() drains all scheduled and recursively scheduled work until the
scheduler is idle. Retain waitAll as deprecated, and clarify that
s.waitFor(finalPromise) is only for awaiting a specific completion condition
rather than general idle draining.

scheduler, replay of failures, and CI tiering. Trigger whenever the user
mentions fast-check, property-based testing in TypeScript or JavaScript,
fc.assert, fc.property, arbitraries, model-based testing, fuzzing a
TypeScript function, or wants generated inputs instead of hand-written

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Use the spelling accepted by the CI gate.

Replace hand-written with handwritten; the spelling check currently fails this line.

Triage: [type:spelling]

Proposed fix
-  test cases.
+  test cases.
🧰 Tools
🪛 GitHub Actions: CI / 0_Makefile gates.txt

[error] 10-10: Typos/spelling check suggested replacement: 'hand-written' -> 'handwritten' (reported at :61).

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/fast-check/SKILL.md` at line 10, Update the wording in the
TypeScript/generated-input description to use “handwritten” instead of
“hand-written,” preserving the surrounding text and meaning.

Source: Pipeline failures

npm install --save-dev fast-check
```

The current major is 4.x (latest: 4.8.0). It requires Node ≥ 12.17 and, for

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '--- FILE SNIPPET ---\n'
sed -n '40,52p' skills/fast-check/SKILL.md | cat -n

printf '\n--- NPM METADATA ---\n'
python3 - <<'PY'
import json, urllib.request
url = 'https://registry.npmjs.org/fast-check'
with urllib.request.urlopen(url, timeout=20) as r:
    data = json.load(r)
print('dist-tags.latest =', data.get('dist-tags', {}).get('latest'))
versions = sorted(data.get('versions', {}).keys(), key=lambda s: [int(x) if x.isdigit() else x for x in __import__('re').split(r'(\d+)', s)])
print('newest_version =', versions[-1] if versions else None)
PY

Repository: leynos/agent-helper-scripts

Length of output: 256


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo '--- FILE SNIPPET ---'
sed -n '40,52p' skills/fast-check/SKILL.md | cat -n

echo
echo '--- NPM METADATA ---'
python3 - <<'PY'
import json, urllib.request
url = 'https://registry.npmjs.org/fast-check'
with urllib.request.urlopen(url, timeout=20) as r:
    data = json.load(r)
print('dist-tags.latest =', data.get('dist-tags', {}).get('latest'))
print('version_count =', len(data.get('versions', {})))
print('latest_version_object_exists =', data.get('dist-tags', {}).get('latest') in data.get('versions', {}))
PY

Repository: leynos/agent-helper-scripts

Length of output: 3278


🏁 Script executed (no clone):

#!/bin/bash
set -euo pipefail

python3 - <<'PY'
import json, ssl, urllib.request
url = 'https://registry.npmjs.org/fast-check'
ctx = ssl._create_unverified_context()
with urllib.request.urlopen(url, context=ctx, timeout=20) as r:
    data = json.load(r)
print('dist-tags.latest =', data.get('dist-tags', {}).get('latest'))
print('latest_version_exists =', data.get('dist-tags', {}).get('latest') in data.get('versions', {}))
PY

Length of output: 179


Update the latest-version claim. fast-check now reports 4.9.0 as latest, so latest: 4.8.0 is stale. Change it to 4.9.0 or rephrase the sentence to avoid pinning a moving target.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/fast-check/SKILL.md` at line 46, Update the latest-version statement
in the fast-check documentation to reflect version 4.9.0, or rephrase it to
avoid pinning a specific latest version while preserving the Node.js
compatibility information.

Comment on lines +113 to +115
`fc.scheduler()` produces a scheduler arbitrary that reorders scheduled
promises to explore interleavings. Wrap the async operations under test with
`s.schedule(...)` (or `s.scheduleFunction`), then drive the run with

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Remove second-person pronouns from the documentation.

Rewrite these phrases to comply with the Markdown path instruction.

  • skills/fast-check/SKILL.md#L113-L115: replace “async operations you hand it” with “async operations supplied to it”.
  • skills/fast-check/SKILL.md#L181-L182: replace “when you can compose” with “when composition is possible”.
  • skills/fast-check/references/model-based-testing.md#L112-L114: replace “async work you hand it” with “async work supplied to it”.

Triage: [type:docstyle]

🧰 Tools
🪛 LanguageTool

[style] ~114-~114: Consider using the typographical ellipsis character here instead.
Context: ...ap the async operations under test with s.schedule(...) (or s.scheduleFunction), then drive...

(ELLIPSIS)

📍 Affects 2 files
  • skills/fast-check/SKILL.md#L113-L115 (this comment)
  • skills/fast-check/SKILL.md#L181-L182
  • skills/fast-check/references/model-based-testing.md#L112-L114
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/fast-check/SKILL.md` around lines 113 - 115, Remove second-person
phrasing at all three documented sites: in skills/fast-check/SKILL.md lines
113-115, replace “async operations you hand it” with “async operations supplied
to it”; in lines 181-182, replace “when you can compose” with “when composition
is possible”; and in skills/fast-check/references/model-based-testing.md lines
112-114, replace “async work you hand it” with “async work supplied to it”.

Source: Path instructions


The diff `foo.dfy.gen` → `foo.dfy` must be **additions only**; `lsc check`
enforces it. Large proof developments often move the bulk of lemmas to a
separate hand-written file (`domain.proofs.dfy`).

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Replace “hand-written” with “handwritten”.

The repository spelling gate rejects both occurrences.

Triage: [type:spelling]

🧰 Tools
🪛 GitHub Actions: CI / 0_Makefile gates.txt

[error] 42-42: Typos/spelling check suggested replacement: 'hand-written' -> 'handwritten' (reported at :10).

🪛 LanguageTool

[misspelling] ~42-~42: This word is normally spelled as one.
Context: ...n move the bulk of lemmas to a separate hand-written file (domain.proofs.dfy). ### Lean (...

(EN_COMPOUNDS_HAND_WRITTEN)

📍 Affects 1 file
  • skills/lemmascript/references/workflow.md#L42-L42 (this comment)
  • skills/lemmascript/references/workflow.md#L53-L53
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/lemmascript/references/workflow.md` at line 42, Replace “hand-written”
with “handwritten” at both occurrences in
skills/lemmascript/references/workflow.md lines 42 and 53.

Source: Pipeline failures

Comment on lines +18 to +23
LemmaScript is a verification toolchain for TypeScript. You write ordinary
TypeScript with `//@` specification comments; the `lsc` CLI generates formal
artefacts that a backend prover (Dafny, or Lean via Velvet/Loom) checks. The
annotations are comments — invisible to tsc, bundlers, and the runtime — and
the TypeScript source *is* the production code; there is no erasure and no
verified-model/production gap. Think "Verus is to Rust as LemmaScript is to

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Qualify the “no verified-model/production gap” guarantee.

The claim overstates the assurance provided by this toolchain. skills/lemmascript/references/annotations.md documents runtime/model mismatches, JavaScript numeric semantics, lost short-circuit behaviour, and trusted boundaries. State that the TypeScript source remains production code, but verification is conditional on the supported fragment and explicitly documented trust boundaries.

🧰 Tools
🪛 SkillSpector (2.3.11)

[warning] 56: [RP1] null: npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Remediation: Pin the version: npx @scope/server@1.2.3

(MCP Rug Pull (RP1))


[warning] 83: [RP1] null: npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Remediation: Pin the version: npx @scope/server@1.2.3

(MCP Rug Pull (RP1))


[warning] 84: [RP1] null: npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Remediation: Pin the version: npx @scope/server@1.2.3

(MCP Rug Pull (RP1))


[warning] 85: [RP1] null: npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Remediation: Pin the version: npx @scope/server@1.2.3

(MCP Rug Pull (RP1))

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/lemmascript/SKILL.md` around lines 18 - 23, Update the LemmaScript
description around the “no verified-model/production gap” claim to qualify it:
retain that TypeScript source is the production code, but state that
verification applies only within the supported fragment and documented trust
boundaries. Acknowledge the runtime/model mismatches, JavaScript numeric
semantics, and short-circuit behavior limitations described in annotations.md
without implying unconditional equivalence.

@pandalump

Copy link
Copy Markdown
Collaborator

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 26, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 3

♻️ Duplicate comments (3)
skills/fast-check/SKILL.md (2)

10-10: 📐 Maintainability & Code Quality | 🟡 Minor

Use the spelling accepted by the CI gate.

Replace “hand-written” with “handwritten” so the spelling check passes.

Triage: [type:spelling]

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/fast-check/SKILL.md` at line 10, Update the wording near the
TypeScript function reference in SKILL.md by replacing “hand-written” with
“handwritten”; leave the surrounding guidance unchanged.

Source: Pipeline failures


46-46: 🎯 Functional Correctness | 🟡 Minor

Update or remove the latest: 4.8.0 claim.

As of July 26, 2026, the package registry lists fast-check 4.9.0 as the latest release. Rephrase this as the documented target version or update the claim. (npmjs.com)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/fast-check/SKILL.md` at line 46, Update the fast-check version
statement in the dependency requirements section to replace the stale “latest:
4.8.0” claim with 4.9.0, or rephrase it as the documented target version without
asserting latest. Preserve the existing Node compatibility requirement.
skills/fast-check/references/model-based-testing.md (1)

135-146: 🎯 Functional Correctness | 🟠 Major

Correct the scheduler waiting semantics.

State that s.waitIdle() drains currently scheduled tasks and any tasks they recursively schedule. Do not claim that such follow-up work remains pending; reserve s.waitFor(promise) for waiting on a specific completion condition, including an unscheduled promise. The current wording conflicts with the guidance in skills/fast-check/SKILL.md lines 116-118 and the fast-check API documentation. (fast-check.dev)

Proposed correction
-`s.waitIdle()` — run until no scheduled task remains.
+`s.waitIdle()` — drain currently scheduled tasks and any additional tasks they recursively schedule until idle.
...
-`waitOne` and `waitAll` are deprecated. Note the 4.x semantics: a task
- scheduled *after* `waitIdle`/`waitAll` began its final drain stays pending —
- tasks created behind intermediate `await`s are not magically picked up as they
- sometimes were in 3.x. When the code under test schedules follow-up work
- asynchronously, prefer `s.waitFor(finalPromise)`.
+`waitOne` and `waitAll` are deprecated. Use `s.waitFor(finalPromise)` when
+waiting for a specific completion condition, especially when that promise was
+not yet scheduled when the call began.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/fast-check/references/model-based-testing.md` around lines 135 - 146,
Correct the waiting semantics in the “Waiting primitives (4.2+)” section:
describe s.waitIdle() as recursively draining currently scheduled tasks and
tasks they schedule until idle. Remove the claim that follow-up tasks remain
pending, and retain s.waitFor(finalPromise) only for waiting on a specific
completion condition, particularly an unscheduled promise.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@skills/fast-check/SKILL.md`:
- Around line 13-15: Remove the blank line between the closing frontmatter
delimiter and the level-1 heading in SKILL.md, placing the title immediately
after the frontmatter block as required by the skill loader.

In `@skills/lemmascript/SKILL.md`:
- Around line 18-19: Remove second-person wording at all three documented sites:
rewrite “You write” in skills/lemmascript/SKILL.md lines 18-19, “what you wrote”
and “what you meant” in skills/lemmascript/SKILL.md lines 158-159, and “your
proof additions” in skills/lemmascript/references/workflow.md line 38 using
impersonal phrasing while preserving the original meaning.
- Around line 51-56: Pin all published LemmaScript CLI examples to a specific
release or lockfile-backed invocation. Update skills/lemmascript/SKILL.md lines
51-56 and 82-85, plus skills/lemmascript/references/workflow.md lines 16-21 and
24-28, including the npm install and npx lsc commands; preserve npx tsx
../LemmaScript/tools/src/lsc.ts as the brownfield live-edit path.

---

Duplicate comments:
In `@skills/fast-check/references/model-based-testing.md`:
- Around line 135-146: Correct the waiting semantics in the “Waiting primitives
(4.2+)” section: describe s.waitIdle() as recursively draining currently
scheduled tasks and tasks they schedule until idle. Remove the claim that
follow-up tasks remain pending, and retain s.waitFor(finalPromise) only for
waiting on a specific completion condition, particularly an unscheduled promise.

In `@skills/fast-check/SKILL.md`:
- Line 10: Update the wording near the TypeScript function reference in SKILL.md
by replacing “hand-written” with “handwritten”; leave the surrounding guidance
unchanged.
- Line 46: Update the fast-check version statement in the dependency
requirements section to replace the stale “latest: 4.8.0” claim with 4.9.0, or
rephrase it as the documented target version without asserting latest. Preserve
the existing Node compatibility requirement.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 41adf9b9-63e3-4392-88f9-1ed198e3b7c1

📥 Commits

Reviewing files that changed from the base of the PR and between 14950f3 and c2e3559.

📒 Files selected for processing (6)
  • skills/fast-check/SKILL.md
  • skills/fast-check/references/arbitraries.md
  • skills/fast-check/references/model-based-testing.md
  • skills/lemmascript/SKILL.md
  • skills/lemmascript/references/annotations.md
  • skills/lemmascript/references/workflow.md
🔗 Linked repositories identified

CodeRabbit considers these linked repositories for cross-repo context during reviews:

  • leynos/cuprum (auto-detected)

Comment on lines +13 to +15
---

# fast-check property-based testing for TypeScript and JavaScript

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Move the title directly after the frontmatter.

Delete the blank line between the closing --- and the level-1 heading. The skill loader requires the title to follow the frontmatter immediately.

Based on learnings, every SKILL.md file must place its level-1 heading immediately after the frontmatter block closes.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/fast-check/SKILL.md` around lines 13 - 15, Remove the blank line
between the closing frontmatter delimiter and the level-1 heading in SKILL.md,
placing the title immediately after the frontmatter block as required by the
skill loader.

Source: Learnings

Comment on lines +18 to +19
LemmaScript is a verification toolchain for TypeScript. You write ordinary
TypeScript with `//@` specification comments; the `lsc` CLI generates formal

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Remove second-person language from the documentation.

  • skills/lemmascript/SKILL.md#L18-L19: rewrite “You write” impersonally.
  • skills/lemmascript/SKILL.md#L158-L159: rewrite “what you wrote” and “what you meant” impersonally.
  • skills/lemmascript/references/workflow.md#L38-L38: rewrite “your proof additions” impersonally.

Triage: [type:docstyle]

🧰 Tools
🪛 SkillSpector (2.3.11)

[warning] 56: [RP1] null: npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Remediation: Pin the version: npx @scope/server@1.2.3

(MCP Rug Pull (RP1))


[warning] 83: [RP1] null: npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Remediation: Pin the version: npx @scope/server@1.2.3

(MCP Rug Pull (RP1))


[warning] 84: [RP1] null: npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Remediation: Pin the version: npx @scope/server@1.2.3

(MCP Rug Pull (RP1))


[warning] 85: [RP1] null: npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Remediation: Pin the version: npx @scope/server@1.2.3

(MCP Rug Pull (RP1))

📍 Affects 2 files
  • skills/lemmascript/SKILL.md#L18-L19 (this comment)
  • skills/lemmascript/SKILL.md#L158-L159
  • skills/lemmascript/references/workflow.md#L38-L38
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/lemmascript/SKILL.md` around lines 18 - 19, Remove second-person
wording at all three documented sites: rewrite “You write” in
skills/lemmascript/SKILL.md lines 18-19, “what you wrote” and “what you meant”
in skills/lemmascript/SKILL.md lines 158-159, and “your proof additions” in
skills/lemmascript/references/workflow.md line 38 using impersonal phrasing
while preserving the original meaning.

Source: Path instructions

Comment on lines +51 to +56
```sh
npm install lemmascript
```

For brownfield work, clone LemmaScript as a **sibling** of the target project
and invoke it from source (`npx tsx ../LemmaScript/tools/src/lsc.ts ...`) — it

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🔒 Security & Privacy | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

for f in skills/lemmascript/SKILL.md skills/lemmascript/references/workflow.md; do
  echo "===== $f ====="
  nl -ba "$f" | sed -n '1,220p'
  echo
done

Repository: leynos/agent-helper-scripts

Length of output: 245


🏁 Script executed:

#!/bin/bash
set -euo pipefail

python3 - <<'PY'
from pathlib import Path

paths = [
    Path("skills/lemmascript/SKILL.md"),
    Path("skills/lemmascript/references/workflow.md"),
]

for path in paths:
    print(f"===== {path} =====")
    for i, line in enumerate(path.read_text().splitlines(), 1):
        print(f"{i:4d}: {line}")
    print()
PY

Repository: leynos/agent-helper-scripts

Length of output: 18131


🏁 Script executed:

#!/bin/bash
set -euo pipefail

rg -n "npm install lemmascript|npx lsc|tsx ../LemmaScript/tools/src/lsc.ts|LemmaScript-files.txt" skills README.md .

Repository: leynos/agent-helper-scripts

Length of output: 3279


Pin the published CLI examples.

  • skills/lemmascript/SKILL.md#L51-L56 and #L82-L85: pin npm install lemmascript and the npx lsc examples to a specific release or lockfile-backed command.
  • skills/lemmascript/references/workflow.md#L16-L28: do the same for the documented lsc commands; keep npx tsx ../LemmaScript/tools/src/lsc.ts as the brownfield live-edit path.
🧰 Tools
🪛 LanguageTool

[style] ~56-~56: Consider using the typographical ellipsis character here instead.
Context: ...rget project and invoke it from source (npx tsx ../LemmaScript/tools/src/lsc.ts ...) — it is a tech preview, and the clean...

(ELLIPSIS)

🪛 SkillSpector (2.3.11)

[warning] 56: [RP1] null: npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Remediation: Pin the version: npx @scope/server@1.2.3

(MCP Rug Pull (RP1))


[warning] 83: [RP1] null: npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Remediation: Pin the version: npx @scope/server@1.2.3

(MCP Rug Pull (RP1))


[warning] 84: [RP1] null: npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Remediation: Pin the version: npx @scope/server@1.2.3

(MCP Rug Pull (RP1))


[warning] 85: [RP1] null: npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Remediation: Pin the version: npx @scope/server@1.2.3

(MCP Rug Pull (RP1))

📍 Affects 2 files
  • skills/lemmascript/SKILL.md#L51-L56 (this comment)
  • skills/lemmascript/SKILL.md#L82-L85
  • skills/lemmascript/references/workflow.md#L16-L21
  • skills/lemmascript/references/workflow.md#L24-L28
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/lemmascript/SKILL.md` around lines 51 - 56, Pin all published
LemmaScript CLI examples to a specific release or lockfile-backed invocation.
Update skills/lemmascript/SKILL.md lines 51-56 and 82-85, plus
skills/lemmascript/references/workflow.md lines 16-21 and 24-28, including the
npm install and npx lsc commands; preserve npx tsx
../LemmaScript/tools/src/lsc.ts as the brownfield live-edit path.

Source: Linters/SAST tools

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