@yawlabs/ctxlint 0.25.3 → 0.25.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,7 +4,7 @@
4
4
  # Version-pinned so a checkout at `rev: vX.Y.Z` runs exactly that release
5
5
  # of ctxlint — matches the pinning done by `ctxlint init`. release.sh keeps
6
6
  # this in sync with package.json on each bump.
7
- entry: npx @yawlabs/ctxlint@0.25.3 --strict
7
+ entry: npx @yawlabs/ctxlint@0.25.4 --strict
8
8
  language: node
9
9
  always_run: true
10
10
  pass_filenames: false
package/README.md CHANGED
@@ -234,7 +234,7 @@ Checks whose signal is what the agent did (commands run, files written or read)
234
234
  ## Example Output
235
235
 
236
236
  ```
237
- ctxlint v0.25.0
237
+ ctxlint v0.25.4
238
238
 
239
239
  Scanning /Users/you/my-app...
240
240
 
@@ -258,7 +258,7 @@ Summary: 2 errors, 2 warnings, 1 info
258
258
  ## Options
259
259
 
260
260
  ```
261
- Usage: ctxlint [options] [path]
261
+ Usage: ctxlint [options] [command] [path]
262
262
 
263
263
  Arguments:
264
264
  path Project directory to scan (default: ".")
@@ -287,12 +287,15 @@ Options:
287
287
  --hooks-global Also scan the user-global ~/.claude/settings.json in the
288
288
  dead-hook check (default scans project .claude/ only)
289
289
  --mcp-server Start the MCP server (alias: `serve` subcommand)
290
+ --lsp Start in LSP server mode (JSON-RPC over stdio for editor integration)
291
+ --no-ignore-file Disable .ctxlintignore suppression (see all findings)
290
292
  --watch Re-lint on context file changes
291
293
  -V, --version Output the version number
292
294
  -h, --help Display help
293
295
 
294
296
  Commands:
295
297
  init Set up a git pre-commit hook
298
+ serve Start the MCP server (same as --mcp-server)
296
299
  ```
297
300
 
298
301
  **Available checks:** `paths`, `commands`, `staleness`, `tokens`, `tier-tokens`, `redundancy`, `contradictions`, `frontmatter`, `ci-coverage`, `ci-secrets`, `content-secrets`, `hook-coverage`, `mcp-schema`, `mcp-security`, `mcp-commands`, `mcp-deprecated`, `mcp-env`, `mcp-urls`, `mcp-consistency`, `mcp-redundancy`, `session-missing-secret`, `session-diverged-file`, `session-missing-workflow`, `session-stale-memory`, `session-duplicate-memory`, `session-loop-detection`, `session-memory-index-overflow`, `session-shared-temp-path`, `session-unverified-gate-claimed-clean`, `session-default-branch-accumulation`, `session-unresolvable-sha`, `session-large-read`, `skill-frontmatter`, `skill-broken-ref`, `skill-trigger-collision`, `skill-orphaned`, `skill-dead-tool-restriction`
@@ -377,7 +380,7 @@ Add to your `.pre-commit-config.yaml`:
377
380
  ```yaml
378
381
  repos:
379
382
  - repo: https://github.com/yawlabs/ctxlint
380
- rev: v0.25.0
383
+ rev: v0.25.4
381
384
  hooks:
382
385
  - id: ctxlint
383
386
  ```
@@ -390,6 +393,9 @@ Create a `.ctxlintrc` or `.ctxlintrc.json` in your project root:
390
393
  {
391
394
  "checks": ["paths", "commands", "tokens", "contradictions", "frontmatter"],
392
395
  "ignore": ["redundancy"],
396
+ "ignoreRules": [
397
+ { "check": "paths", "match": "^docs/archive/", "reason": "archived docs cite removed files" }
398
+ ],
393
399
  "strict": true,
394
400
  "tokenThresholds": {
395
401
  "info": 500,
@@ -416,6 +422,11 @@ The `exclude` array is its counterpart: globs of context files to drop from the
416
422
  | ------------------------------- | ---------- | ---------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
417
423
  | `checks` | `string[]` | all checks | Checks to run. Check names include `paths`, `commands`, `tokens`, `tier-tokens`, `redundancy`, `contradictions`, `frontmatter`, `staleness`, `ci-coverage`, `ci-secrets`, `content-secrets`, `hook-coverage`, plus any `mcp-*` / `session-*` / `skill-*`. |
418
424
  | `ignore` | `string[]` | `[]` | Checks to skip, evaluated after `checks`. |
425
+ | `ignoreRules` | `object[]` | `[]` | Per-finding suppression, finer than `ignore`: each rule drops only the findings it matches, and the first matching rule wins. Rules that never fire, and rules missing a `reason`, are listed in the text report and in JSON `_meta.ignoreReport`. |
426
+ | `ignoreRules[].check` | `string` | required | The check the rule applies to, by exact name (`paths`, `session-stale-memory`, ...). |
427
+ | `ignoreRules[].match` | `string` | none | Regex tested against the finding's message. A rule with neither `match` nor `pathPattern` drops every finding of its check; with both, both must match. |
428
+ | `ignoreRules[].pathPattern` | `string` | none | Regex tested against each path a finding names; the rule fires only when every path matches. Honored only for `session-stale-memory`: on any other check the rule never fires, and loading the config prints a warning. |
429
+ | `ignoreRules[].reason` | `string` | none | Why the finding is suppressed. Optional, but rules without one are listed in the report for review. |
419
430
  | `strict` | `boolean` | `false` | Exit non-zero on any warning or error. |
420
431
  | `tokenThresholds` | `object` | see below | Per-file and cross-file token thresholds. |
421
432
  | `tokenThresholds.info` | `number` | `1000` | Per-file info threshold for `tokens/info`. |
@@ -433,6 +444,7 @@ The `exclude` array is its counterpart: globs of context files to drop from the
433
444
  | `sessionOnly` | `boolean` | `false` | Run only session checks, skip context and MCP checks (same as `--session-only`). |
434
445
  | `skills` | `boolean` | `false` | Enable agent-skill checks (`~/.claude/skills` + `~/.claude/agents`); same as `--skills`. |
435
446
  | `skillsOnly` | `boolean` | `false` | Run only agent-skill checks, skip everything else (same as `--skills-only`). |
447
+ | `hooksGlobal` | `boolean` | `false` | Also scan the user-global `~/.claude/settings.json` in the dead-hook check (same as `--hooks-global`). |
436
448
 
437
449
  Config file resolution order: `.ctxlintrc` → `.ctxlintrc.json` in the project root. Use `--config <path>` to point elsewhere. CLI flags override config fields.
438
450
 
package/dist/index.js CHANGED
@@ -30420,7 +30420,7 @@ import { readFileSync as readFileSync10 } from "node:fs";
30420
30420
  import { resolve as resolve18, dirname as dirname10 } from "node:path";
30421
30421
  import { fileURLToPath as fileURLToPath2 } from "node:url";
30422
30422
  function loadVersion() {
30423
- if (true) return "0.25.3";
30423
+ if (true) return "0.25.4";
30424
30424
  try {
30425
30425
  const __dir = dirname10(fileURLToPath2(import.meta.url));
30426
30426
  const pkgPath = resolve18(__dir, "../package.json");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yawlabs/ctxlint",
3
- "version": "0.25.3",
3
+ "version": "0.25.4",
4
4
  "mcpName": "io.github.YawLabs/ctxlint",
5
5
  "description": "Linter for AI agent context files and MCP configs: CLAUDE.md, AGENTS.md, .cursorrules, .mcp.json - catches broken paths, wrong commands, leaked secrets",
6
6
  "bin": {