sentinel-ci 1.2.0 → 1.3.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1c9ce31656462acc9215c1915b25884158ad03b6c50ba5772f71b048767cb5ce
4
- data.tar.gz: 86d764b299a9df2bd2f02c10b263d0dbf9e679a893ed87192572bcfe67792a99
3
+ metadata.gz: 23aa715c0e322cb64a295126e1c7ea6d799b5e2160b1f9afb6781c70d6d67e74
4
+ data.tar.gz: 4dcef6fdb0ce75cc6df95b875c184bb2eac4664cfaa3cc08c887cba17b01544b
5
5
  SHA512:
6
- metadata.gz: 3b306657cecd361b0649291ff7c62b9e339b0cc6a4c38baaab9cea223b9a5b94952b1c953a95be98c0b7f0cbd71944130e2d625cd94fc4e39c36d215340cfc58
7
- data.tar.gz: 42f6ae9c304e4e87db9c3568f4bcdafa027c9134890f2721c9e7354e5c40122f5e33a49b49f32ca41d063617fcb9d9a8bb92c8dc06eb14459d732728329734e7
6
+ metadata.gz: a73ae7c6c62199f997171d442a4f34b5f8ba01d57606e9b4a95be3841a9b4939860dfeb4f240c6f3e1aa766d8416dc13a9b40aaeef8cd09cad96db3770caf5a2
7
+ data.tar.gz: 7db22bcd42d182031dbb1d2adfa9da5e6073d9655ac58900065afd37be674bc4d477ba9ab775756c067569b0f02ec1a6d7730dfd81f0a87298d49cea796315cb
data/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.3.0 (2026-05-18)
4
+
5
+ ### New Features
6
+ - PR lifecycle tracker (state model, GitHub sync, bootstrap, CLI + web dashboards)
7
+ - jq-arg-escape-sequences rule (rule 32, total now 32)
8
+ - Audit trail wiring (12 audit calls across all bot decision points)
9
+ - Gist-based state backup (--backup/--restore, auto-backup after runs)
10
+
11
+ ### Testing & CI
12
+ - Bot integration tests (19 tests covering decision flow)
13
+ - CI workflow (Ruby 3.2+3.3 matrix, self-scan on all PRs)
14
+ - 646 total tests
15
+
16
+ ### Infrastructure
17
+ - Stable file locking for concurrent bot/web access
18
+ - PST/PDT timezone handling (correct year-round)
19
+
3
20
  ## 1.2.0 (2026-05-18)
4
21
 
5
22
  ### Bot Hardening
data/README.md CHANGED
@@ -7,7 +7,7 @@
7
7
  ![Ruby](https://img.shields.io/badge/ruby-3.2%2B-red)
8
8
  ![License](https://img.shields.io/badge/license-MIT-blue)
9
9
 
10
- Scan GitHub Actions workflows for 31 security vulnerabilities. Optional AI-powered remediation via Claude. Pure Ruby stdlib.
10
+ Scan GitHub Actions workflows for 32 security vulnerabilities. Optional AI-powered remediation via Claude. Pure Ruby stdlib.
11
11
 
12
12
  Documentation: https://sentinel.copilotkit.dev
13
13
 
@@ -102,7 +102,7 @@ medium as warnings, low as notices.
102
102
  | Name | Default | Description |
103
103
  |------|---------|-------------|
104
104
  | `fix` | `false` | Auto-fix findings. Pushes to PR branch, or creates fix PR on main. |
105
- | `anthropic-key` | -- | Anthropic API key -- enables AI-powered fixes for all 31 rules |
105
+ | `anthropic-key` | -- | Anthropic API key -- enables AI-powered fixes for all 32 rules |
106
106
 
107
107
  **Fix mode outputs:**
108
108
 
@@ -208,10 +208,11 @@ sentinel scan --local . --platform bitbucket # Bitbucket only
208
208
  | 29 | `ide-config-injection` | critical | Workflow writes to IDE/AI config files (.claude/, .vscode/tasks.json) |
209
209
  | 30 | `dangerous-lifecycle-scripts` | medium | Package install without --ignore-scripts in workflows with secrets |
210
210
  | 31 | `github-dependency-refs` | medium | Direct GitHub commit/branch ref in package install |
211
+ | 32 | `jq-arg-escape-sequences` | medium | jq `--arg` value contains backslash escape sequences that won't be interpreted |
211
212
 
212
213
  ## Auto-Fix
213
214
 
214
- Sentinel can automatically fix findings -- 6 rules mechanically, all 31 with AI:
215
+ Sentinel can automatically fix findings -- 6 rules mechanically, all 32 with AI:
215
216
 
216
217
  ```bash
217
218
  # Mechanical fixes (free, deterministic)
@@ -0,0 +1,27 @@
1
+ module Rules
2
+ class JqArgEscape < Base
3
+ def name = "jq-arg-escape-sequences"
4
+ def description = "jq --arg value contains backslash escape sequences that won't be interpreted"
5
+ def severity = :medium
6
+
7
+ PATTERN = /jq\s.*--arg\s+\w+\s+"[^"]*\\[nt\\][^"]*"/
8
+
9
+ def check(workflow)
10
+ findings = []
11
+
12
+ workflow.raw_lines.each_with_index do |line, i|
13
+ next if line.strip.start_with?("#")
14
+ next unless line.match?(PATTERN)
15
+
16
+ findings << finding(workflow,
17
+ line: i + 1,
18
+ code: line.strip,
19
+ message: "jq --arg treats values as raw literals — \\n becomes literal backslash-n, not a newline",
20
+ fix: "Use real newlines via $'\\n' or multi-line variable, or use --argjson with pre-escaped JSON"
21
+ )
22
+ end
23
+
24
+ findings
25
+ end
26
+ end
27
+ end
data/lib/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Sentinel
2
- VERSION = "1.2.0"
2
+ VERSION = "1.3.0"
3
3
  end
metadata CHANGED
@@ -1,16 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sentinel-ci
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jordan Ritter
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-05-18 00:00:00.000000000 Z
11
+ date: 2026-05-19 00:00:00.000000000 Z
12
12
  dependencies: []
13
- description: Scan GitHub Actions workflows for 31 security vulnerabilities. SHA pinning,
13
+ description: Scan GitHub Actions workflows for 32 security vulnerabilities. SHA pinning,
14
14
  shell injection, credential exposure, dangerous triggers. Optional AI-powered remediation
15
15
  via Claude. Pure Ruby stdlib.
16
16
  email: jpr5@darkridge.com
@@ -59,6 +59,7 @@ files:
59
59
  - lib/rules/github_script_injection.rb
60
60
  - lib/rules/hardcoded_secrets.rb
61
61
  - lib/rules/ide_config_injection.rb
62
+ - lib/rules/jq_arg_escape.rb
62
63
  - lib/rules/missing_env_protection.rb
63
64
  - lib/rules/missing_frozen_lockfile.rb
64
65
  - lib/rules/missing_permissions.rb