Skip to content

0.9.1

Latest

Choose a tag to compare

@pekral pekral released this 22 Jun 12:46
· 200 commits to master since this release
  • Added: Laravel Security Audit workflow (7 areas) for the athena security agent (#668) — Authorization/IDOR-BOLA, Authentication, Validation, XSS, File upload, Secrets/config, and Dependencies, each with a per-finding regression-test sketch and a defensive (authorized-auditor) framing, mapped onto the repo's 3-level CR convergence scale. Added under skills/laravel-security/ and referenced from agents/athena.md.

  • Added: Malicious File Upload Content security rule covering the CONTENT/RENDER layer of uploads (#680) — stored XSS from file content, SVG with active content, CSV/Excel formula injection, HTML/JS in filename and metadata, polyglots, and missing nosniff/Content-Disposition. Added to @rules/security/backend.md (canonical) plus the frontend.md / mobile.md mirrors, with review walks in @skills/code-review/SKILL.md and @skills/security-review/SKILL.md and an inert malicious-upload payload dataset (skills/security-review/datasets/malicious-uploads/, 6 categories) for writing tests. Deduped against the existing TYPE/TRANSPORT upload rule so each violation raises exactly one finding.

  • Added: new Variable Ordering & Lazy Evaluation code-review category (#681) — flags an expensive operation (DB query / HTTP call / collection materialization / heavy computation) bound to a variable before it is needed on a path (early-return / guard / continue / break) where the value is never used, steering toward just-in-time evaluation near first use. Lives in @rules/code-review/general.mdc + @skills/code-review/SKILL.md with severity Minor (default) / Moderate (hot path, loop, per-request entry point), an IS-NOT boundary, and a gating clause; CR wrappers inherit automatically.

  • 📝 Changed: bug-fix resolution now mandates strict TDD — a failing test first (#682). @skills/resolve-issue/SKILL.md ### If bug rewrites steps 8–10 to RED (write the reproducing failing test) → verify the test fails for the right reason (blocking) → GREEN (fix), driven by @skills/test-driven-development/SKILL.md.

  • 📝 Changed: code-review now flags caching of objects as a Moderate finding (#683) — @skills/code-review/SKILL.md gains a detection bullet that reports any cache write storing an object (Eloquent model, DTO, Collection of models, serialized object); only scalar / array / non-object payloads stay allowed. Carries the mandatory reproduction fields and a gating clause symmetric with the existing inline-Eloquent rule so no severity collision is raised; inherited automatically by code-review-github / -jira / -bugsnag.

  • 📝 Changed: code-review Coverage gate now reuses CI results when available instead of re-running every checker locally. @skills/code-review/SKILL.md Validation → Coverage gate gains a Reuse CI results rule: before running any local check, the CR reads statusCheckRollup[] from the PR JSON and — when needed — fetches the run log via gh run view to determine which checks already ran on the exact PR head commit; green checks are reused directly, and only missing or non-green checks are executed locally. The most common case is that CI already ran the full test suite but did not publish a changed-files coverage report, so the CR runs only the coverage tooling. A staleness guard ensures CI results are accepted only when the run's head SHA matches the current PR headRefOid; failing / in-progress checks are always treated as missing. All three CR wrappers (code-review-github, code-review-jira, code-review-bugsnag) gain a CI coverage of checks step in Pre-checks that extracts the check map from the loaded PR JSON and forwards it to the Coverage gate. The 100% changed-files coverage requirement stays mandatory — only the source (CI vs local) changes. Per user request — uprav skilly pro code review tak, že když je při CR k dispozici výstup z CI a v něm už proběhly testy, CR je nemá spouštět znovu — lokálně se spustí jen to, co v CI chybí.

  • 📝 Changed: JIRA CR comments are now always-new per CR run, consistent with GitHub. skills/code-review-jira/scripts/upsert-comment.sh previously searched for a prior comment by the same acli actor and edited it in place; the script now always calls acli jira workitem comment create so every CR iteration appends a fresh comment at the bottom of the JIRA thread — visible without scrolling through edit history. The hidden {anchor:cr-comment-actor-<slug>} marker is still appended to the body for traceability but no longer drives any lookup or update. SKILL.md wording updated across code-review-jira, code-review, pr-summary, and process-code-review to reflect the always-new convention. Per user request — skilly pro report-summary do issue trackerů mají při každé iteraci CR founded NOVÝ komentář, ne editovat jeden v místě.

  • 📝 Changed: code-review skills now always require checking out the change branch and reviewing against the actual working tree, not a remote diff in isolation. The soft "ensure you are on the branch" / "switch to the PR branch" line in @skills/code-review/SKILL.md, @skills/code-review-github/SKILL.md, @skills/code-review-jira/SKILL.md, and @skills/code-review-bugsnag/SKILL.md is replaced by a mandatory Branch checkout gate: before any analysis step the review runs git fetch + git checkout <branch> + git pull, confirms local HEAD matches the PR head SHA, and stops and reports instead of reviewing from the diff when the checkout fails (missing ref, detached HEAD, or local changes that would be overwritten). The read-only constraint is tightened in lockstep — checking out the branch is now required (not merely "allowed") while working-tree mutation and pushing stay forbidden. Per user request — uprav skilly pro code review tak, aby vyžadovali vždy přepnutí na větev se změnami a CR se dělal nad aktuálním codebase.

  • Added: SECURITY.md at the repository root (#664) — documents the plugin trust model (allow-plugins, the standard Composer opt-in), the two security-sensitive installer flags (--allow-bundled-scripts and --allow-subagent-writes) with their exact behaviour, safety guarantees, and implementation references (src/InstallerClaudeSettings.php), a table of every path the installer writes, and a responsible-disclosure channel (GitHub Security Advisory preferred). Cross-linked with README.md (CLI Switches), docs/agents.md (Troubleshooting — subagent file writes blocked), and docs/plans/agent-sandbox-write-blocked.md.

  • Added: public editor compatibility matrix in README.md documenting support status across editors — Cursor ✅ (rules + skills), Claude ✅ (rules + skills + agents), Codex skills ✅ / rules experimental (unverified until confirmed) (#663).

  • 📝 Changed: README and composer.json package metadata reposition the project explicitly as a PHP/Laravel Composer plugin (installs Cursor/Claude/Codex rules + agent skills), not a generic AI-rules bundle (#662).

  • 🗑️ Removed: bundled launcher cursor-rules-resolve-loop.sh and its Composer bin registration — no longer needed. The script, the README Autonomous issue loop section, and the agents/daidalos.md / docs/agents.md references to it are dropped. Consumers that invoked vendor/bin/cursor-rules-resolve-loop.sh should drive the loop directly via claude --permission-mode auto "/loop …" instead.

  • 🐛 Fixed: JIRA skills/code-review-jira/scripts/load-issue.sh now correctly unwraps a Java/Groovy toString custom field whose json={…} payload is followed by trailing content (the outer map's closing brace). tryParseTrimEnd fed an invalid candidate to fromjson?, whose suppressed error yields empty in jq, and .parsed = (empty) collapsed the whole until iteration to empty — so the fallback returned null on the first non-parsing trim instead of trimming down to the valid JSON prefix. As a result devSummary (PR / branch / commit counts from the dev panel) silently degraded to null for every such field. Coalescing fromjson? to null keeps the iteration alive until it trims to a parseable prefix.