4.38.0 (2026-09-17)
- gitlab: add code quality reports and managed CI uploads (#851) (480faa4)
- sca: add Poetry and Yarn scanning with offline SBOM export (#854) (fad21b3)
- sca: scan pnpm lockfiles with workspace context (#850) (d9d9405)
- sca: scan uv and npm lockfiles with advisory details (#847) (6bb2d05)
- grep-verify: keep rescue evidence inside the analyzer scan boundary (#858) (93b69dd)
- java: detect security issues across helper files and properties (#856) (2a814d1)
- sca: resolve CI security scan warnings (#849) (a54b5c6)
- security: recognize literal pytest path parameters (#859) (afc6c6a)
- typescript: fold static esbuild entry points (#853) (a94808f)
4.37.0 (2026-09-13)
- deadcode: detect unreachable nested python functions and closures (#840) (b3e27e2)
- deadcode: detect unreachable python function groups, also harden grep verification (#830) (e893ffd)
- deadcode: detect unreachable python methods using receiver resolution (#831) (37b8d86)
- review: remember reviewed findings across scans (#842) (635bc35)
- verification: add explicit local and branch comparison baselines (#829) (d99e238)
- verify: compare Python working changes with HEAD (#827) (79756f8)
- ai-defects: resolve nested local Python imports (#843) (7545406)
- circular: make cycle selection independent of iteration order (#838) (5124f28)
- circular: skip fallback self-cycles (#834) (08a6542)
- deadcode: handle SKY-E003 references and reporting (#846) (be5d67f)
- typescript: honor inline skylos ignore comments (#845) (c23dbff)
4.36.1 (2026-09-08)
- ai-defect: avoid API warnings when package metadata is unavailable (#819) (f80c5a3)
- ai-defect: reject keywords for APIs with no parameters (#823) (5eb60f0)
- analyzer: skip unsupported files before worker dispatch (#815) (f28a34a)
- analyzer: track m3u8 client callbacks from live callers (#813) (0aa9ce0)
- deps: use published dependency minimums (#825) (900459a)
- quality: check all lock pairs in compound with statements (#824) (dd17dae)
- remediation: correct dependency graph sorting (#821) (1dbf929)
- rules: drop phantom SKY-D214 rule (#785) (a8ca42e)
- typescript: recognize VitePress and Windows script entries (#822) (fc2a954)
- typescript: resolve package entries outside src (#820) (25f64cf)
4.36.0 (2026-09-07)
- ai-defect: continue checks after failed Python files (#796) (b1d0ad7)
- ai-defect: make SKY-A103 findings complete and deterministic (#793) (7536054)
- ai-defect: report CI permission signals reliably (#792) (1172878)
- ai-defect: resolve imported JS barrel exports (#799) (2983f8f)
- analyzer: deterministic module name for multi source-root paths (#780) (0e96fdb)
- analyzer: preserve scan context in Git hooks (#795) (38124e7)
- analyzer: recognize declaration-only Python stubs (#801) (06b7fc3)
- analyzer: reduce Django and Celery false positives (#800) (bc9ee49)
- catalog: swap SKY-F101/F102 rule descriptions (#782) (009931b)
- cicd: correct workflow rule locations and runner checks (#807) (43c9025)
- cli: report circular dependencies consistently (#804) (825717e)
- cwe: correct 10 misaligned CWE mappings (#784) (9f1fbc1)
- jwt: detect decode calls through import aliases and direct imports (#783) (f1184b1)
- security: prevent false SKY-D212 warnings on RegExp.exec() (#806) (975a3ad)
- analysis: share parsed ASTs across rule passes (#779) (f99402e)
- analyzer: index export lookups (#771) (65bd38c)
4.35.0 (2026-08-26)
- quality: detect generated-code mistakes (#762) (b59dbab)
- typescript: detect type evidence bypasses (#761) (e5d7236)
- ai-defect: recognize control-flow module exports (#759) (a1055d8)
- ai-defect: support PEP 735 dependency groups (#764) (46d21dc)
- analyzer: tighten dead-code and SQL matching (#770) (7d71ee2)
- analyzer: batch engine-sensitive space patterns (#763) (8a03fa4)
- analyzer: index abstract override lookups (#767) (8c07ef9)
- analyzer: index qualified reference lookups (#769) (b0fbfdb)
4.34.0 (2026-08-23)
- ai-defect: avoid oversized registry responses (#751) (0ffd3ce)
- analyzer: complete batched unicode verification (#729) (3f2cc94)
- analyzer: fail closed on incomplete grep verification (#727) (d2510c2)
- analyzer: scope diff verification to changed files (#731) (db51203)
- ci: restrict Codecov coverage uploads (#755) (2361d68)
- danger: fail closed on incomplete MCP analysis (#726) (448b433)
- dead-code: preserve signature contract parameters (#750) (57606cc)
- grep: stream oversized verification results (#757) (9b3f2de)
- quality: break SKY-C401 clone-type ties deterministically (#756) (e7044e8)
- quality: detect concrete ellipsis defaults (#728) (d4a047d)
- quality: handle positional-only boolean traps and setters (#719) (c6364bd)
- quality: handle positional-only defaults (#709) (d4a1c65)
- sca: handle npm dependency sections safely (#752) (cc57c69)
- sca: scope npm dependency line anchoring to its declaring section (#748) (aa56ed3)
- secrets: avoid computed checksum false positives (#724) (9b8264b)
- secrets: avoid ordered character set false positives (#753) (d9e4077)
- secrets: skip untracked generated grep cache (#725) (0228225)
- security: handle positional-only MCP defaults (#712) (94f2596)
- ai-defect: batch API surface cache I/O (#746) (e300469)
- analyzer: batch grep verification searches (#721) (03aa768)
- dead-code: index documented method references (#744) (5c35c10)
4.33.2 (2026-08-09)
- java: correct session trust boundary rule ID (#703) (3c1eca3)
- secrets: validate lockfile checksums (#701) (e8bf0ee)
- typescript: ignore null guards in timing comparison rule (#704) (56f666f)
4.33.1 (2026-08-06)
- go: fail closed when native analysis is incomplete (#696) (e7dc79e)
- secrets: scan lockfiles for high-entropy secrets (#695) (b3c980b)
4.33.0 (2026-08-05)
- ai-defect: recognize module dunder attributes in phantom refs (#691) (d626772), closes #684
- cli: enable SKY-D223 when explicitly selected (#689) (9235c0d)
- dependencies: parse pyproject metadata with TOML (#690) (97815ff)
4.32.0 (2026-07-30)
- ai-defect: handle imported submodule references (#671) (d9ca4b8)
- analyzer: honor rule-specific inline ignores (#674) (f0ad568)
- cli: render AI defects in rich output (#676) (34f696c)
- security: bind keyword filesystem path arguments (#675) (b475414)
4.31.1 (2026-07-29)
- ai-defect: recognize PEP 695 type aliases (#664) (2a645df)
- analyzer: fail closed on compile-time syntax errors (#657) (ab8c249)
- container: prevent false-clean Python scans (#654) (4d2a502)
- dead-code: honor underscore discard bindings (#655) (fe908b6)
- dead-code: invalidate grep cache on evidence changes (#661) (2277788)
- dead-code: prevent unrelated parameter rescues (#658) (93e7ddb)
- dead-code: wire evidence into reporting decisions (#652) (ae6936c)
- quality: exempt Protocol method stubs (#663) (84e1ce4)
- quality: exempt underscore exception discard (#662) (a0c2ede)
4.31.0 (2026-07-27)
- audit: add deep audit investigator (#637) (967de71)
- audit: harden Deep Audit evidence, CI, and benchmarks (#643) (050abd1)
- analyzer: recognize VS Code and JavaFX FXML callbacks (#645) (bc7eb42)
- analyzer: track PEP 695 type parameter refs (#644) (96f97d6)
4.30.0 (2026-07-18)
- agent: add deterministic behavior testing (#635) (90594d8)
- verify: add cross-language API verification coverage (#632) (89b4c99)
- verify: add language-aware verification coverage (#630) (7b0d9d6)
4.29.0 (2026-07-09)
- defend: add agent verification evidence (#625) (f3155e4)
- defend: expand agent verification checks (#628) (f185cf3)
- dead-code: recognize numba overload implementations (df7a2d3)
4.28.0 (2026-07-04)
- ai-defect: add AI hallucination contracts (#618) (6aa87d1)
- ai-defect: harden AI code defect detection (#623) (2459ea2)
- analyzer: improve fastapi framework liveness (#622) (5e172db)
- analyzer: recognize django and gunicorn liveness (#621) (135677d)
- scanner: reduce go and java false positives (#616) (ef5b069)
- verify: surface AI contract diff findings (#620) (b56d543)
4.27.0 (2026-06-29)
- ai-defect: add ci and cli diff signals (#615) (a9fb259)
- ai-defect: add test impact signal (#614) (22d2d8a)
- ai-defect: split hallucination rules (#609) (943d0e0)
- ai-defect: wire dedicated scan category (#611) (6a30225)
- quality: add reliability checks (#613) (15e74ed)
4.26.1 (2026-06-25)
4.26.0 (2026-06-25)
- agent: add harness replay CLI (#604) (3081522)
- dead-code: explain unused-code evidence in output (#597) (4457cdc)
- llm: add agent review routing (#592) (c60f7f9)
- llm: add replayable verification harness (#599) (fb0cf5d)
- cli: remove run web dashboard (#603) (093c79d)
- cli: unify exclude options (#602) (1d812aa)
- security: move vulnerable app into fixture (#594) (a8255dc)
4.25.0 (2026-06-19)
- clean: add deterministic apply mode (#581) (5544437)
- dead-code: add configurable entrypoints (#572) (dae8e96)
- reporting: add directory rollups (#582) (9087bc0)
- security: add Python security rule gaps (#587) (34aac34)
- analyzer: harden noqa import suppression lines (#585) (61f9c1a)
- analyzer: make noqa suppressions code-specific (#584) (0effa8e)
- analyzer: scope suppression state correctly (#586) (830ba43)
4.24.2 (2026-06-15)
- dead-code: handle literal plugin registries (#566) (f5ecd25)
- dead-code: reduce TS and Go false positives (#565) (92431bc)
- java: reduce annotation dead-code false positives (#567) (ca06053)
- release: retry GHCR image publish (#562) (4858863)
4.24.1 (2026-06-09)
4.24.0 (2026-06-07)
- corpus: add pinned framework corpus runner (#559) (ad00c62)
- dead-code: add Kotlin grep verification support (#554) (4352ab6)
- dead-code: add Kotlin thin scanner layer (#553) (583a723)
- kotlin: wire workflow registries (#556) (b8ae490)
- llm: add critical AI security rules (#544) (dd6963a)
- llm: detect excessive agent tool privilege (#545) (1df383a)
- llm: detect unbounded LLM consumption (#546) (59e9d64)
- llm: detect unsafe LLM app flows (#543) (f953830)
- secrets: scan Kotlin source files (#555) (7624b6d)
- analyzer: reduce quality scan false positives (#536) (c414818)
- cloud: split sync setup helpers (#540) (7bbf4c4)
- dead-code: qualify Java static call graph refs (#552) (4e79aeb)
- dead-code: recognize stdlib callback hooks (#549) (0e69311)
- dead-code: reduce language false positives (#551) (55e9ced)
- dead-code: reduce Python framework false positives (#558) (40a94a4)
- dead-code: resolve Go receiver method refs (#550) (b4813dd)
- dead-code: track browser handler liveness (#547) (0961f30)
- llm: harden security finding explanations (#541) (6855f73)
- quality: reduce quality scan false positives (#538) (72172c5)
- security: reduce browser scanner noise (#548) (253f6ae)
- upload: require explicit scan uploads (#539) (6a00673)
4.23.1 (2026-06-04)
- verify: catch api and stale-reference hallucinations (#530) (7c9d0e2)
- verify: handle manifest-only dependency cases (#525) (9f3393c)
4.23.0 (2026-06-03)
- agent: add skylos verify workflow (#517) (ec57048)
- bench: add ai code defect benchmark (#518) (676d872)
- corpus: capture local structural signals (#522) (83f6dcc)
- index: persist reference graph cache (#520) (f7c5646)
- remediate: add verification proof tests (#523) (e694656)
- verify: detect API and dependency hallucinations (#519) (dea81c5)
- vscode: route idle analysis through verify (#521) (a6be270)
4.22.1 (2026-05-30)
4.22.0 (2026-05-29)
- cicd: gate dependency vulnerabilities by default (#512) (7619b0b)
- security: harden repo-controlled IO surfaces (#509) (b7cbce1)
4.21.0 (2026-05-29)
- cli: support explicit config files (#506) (55f1671)
- security: export threat traces in deep audit (#503) (004b36d)
- security: harden CI workflow permissions (#508) (b29ca43)
- security: harden config policy and MCP credits (#507) (56b3dbb)
4.20.0 (2026-05-27)
- analyzer: harden cross-language security and quality checks (#491) (7b3d62c)
- cli: add security agent aliases (#500) (aeaeefa)
- config: add edge deployment scanners (#497) (4fc098a)
- security: add static threat traces (#501) (e18885f)
- shell: add shell security scanning (#495) (8c764a0)
- analyzer: reduce vscode extension dead-code false positives (#499) (6848ab9)
- docs: avoid repo map line churn (#496) (df08da4)
4.19.0 (2026-05-24)
- csharp: add C# analyzer support (#485) (1422f41)
- docs: add agent skills for Skylos (#481) (aeb4c5a)
- docs: add Skylos security agent skill (#483) (97edb33)
- debt: harden debt persistence file handling (#484) (d34a3d7)
- gate: avoid terminal probe output during concise gate checks (#489) (9c718f9)
- static: preserve security findings in parallel scans (#487) (f12a66f)
4.18.0 (2026-05-22)
- docs: add Claude Code skill and CLAUDE.md (#480) (4e0b14c)
- docs: add generated repo map (#473) (c6a8ece)
- docs: document repo map entrypoints (#477) (d5094bd)
- docs: improve repo map guidance (#476) (d63c51c)
- ci: enable repo map pages (#475) (8a3aa48)
- cli: avoid eager terminal prompt import (#479) (c6a644c)
- docs: repair repo map navigation (#478) (a5ab066)
4.17.0 (2026-05-21)
- dead-code: add evidence ledger (#462) (0d82ef1)
- debt: cap uploaded hotspot samples (#466) (14652fa)
- llm: add grounded verification benchmarks (#467) (a900f14)
- quality: add opaque identifier readability rule (#468) (1d0c5c8)
- security: add symlink safety rules (#465) (f7b28a9)
- ci: harden generated workflows (#464) (cd1789e)
- llm: require literal subprocess allowlists (#470) (1e0960c)
4.16.2 (2026-05-19)
- ci: guard defense sidecar reads (#457) (c8fd80b)
- debt: guard history reads (#458) (64fce26)
- scan: fail concise on reported findings (#456) (0a4e978)
- ui: guard nudge config reads (#459) (d257579)
4.16.1 (2026-05-19)
- config: validate whitelist settings (#443) (1734ec0)
- danger: track SQL and SSRF receiver aliases (#446) (99cf457)
- excludes: honor absolute scan-root paths (#452) (627d763)
- gate: allow non-critical threshold tuning (#449) (6fe6fe9)
- precommit: block high severity quality findings (#451) (6306d61)
- pytest: guard fixture report writes (#453) (19f5613)
- scanner: bound language assignment scans (#448) (650e018)
- typescript: bound duplicate condition scan (#450) (cc97185)
- typescript: constrain glob expansion (#447) (28fee5b)
- web: normalize analyze excludes (#445) (6cc31bf)
4.16.0 (2026-05-19)
- cli: add cache stats and rules catalog JSON (#438) (cd1e5df)
- cli: add cache stats and rules catalog JSON (#439) (03bd425)
- cli: improve terminal scan output (#420) (f9582d4)
- analyzer: escape dynamic reference patterns (#435) (e10916a)
- audit: scope deep processing to current scan (#419) (b9df22e)
- ci: avoid PR-controlled scanner execution (#428) (13e2f87)
- cicd: quote generated PR base refs (#417) (7d9e6b9)
- ci: configure parity venv path at runtime (72b588a)
- ci: keep parity venv outside checkout (#415) (6eedb7e)
- cli: redact secrets in llm reports (#433) (af64e1f)
- cli: sanitize pretty report text (#427) (176c0e2)
- config: validate skylos project config (#436) (6e1d988)
- llm: minimize changed-file review context (#432) (056a072)
- login: avoid printing saved api token (#434) (f000851)
- pipeline: review ordinary files in llm-only scans (e21696a)
- remediation: reject edits outside scan root (#424) (c48a8b5)
- secrets: avoid quadratic generic scan (#410) (8dd05af)
- secrets: restore generic value export (#412) (08bd492)
- secrets: scope hash suppression to candidates (#437) (2de8e2a)
- security: bound prompt injection candidate collection (#429) (5f41874)
- security: bound prompt injection scans (#423) (aee6754)
- security: parse markdown fences linearly (#430) (81525ee)
- security: prioritize prompt docs within scan cap (#426) (c22a004)
- security: tolerate non-utf8 taskflow files (#416) (41e72d7)
- sql: invalidate mutated static queries (#418) (d9765bc)
- ssrf: flag uppercase f-string URL bases (#425) (acf6ee3)
- sync: reject symlinked repo link (#413) (4b046c3)
- typescript: detect child_process exec aliases (#414) (221e783)
4.15.2 (2026-05-17)
- actions: bound yaml graph traversal (#406) (749f060)
- action: validate max comments input (#403) (52c8524)
- api: redact secret upload snippets (#387) (d03562c)
- api: validate artifact upload destinations (#385) (fca964b)
- cicd: validate workflow scan path (#407) (f31e1bf)
- ci: pin codecov action (#404) (4c933ec)
- cli: sanitize pyproject addopts (#394) (e849a19)
- debt: contain advisor excerpts to project root (#390) (bbb4ec9)
- defend: require explicit policy files (#389) (b566e21)
- go: detect variable shell exec flags (#401) (3326276)
- java: bound flow constant folding (#399) (c18cc29)
- llm: require explicit prompt templates (#409) (f55ba96)
- llm: require trust for repo prompt templates (#408) (1847471)
- login: require callback state (#386) (4d80996)
- precommit: avoid module shadowing (#388) (de6b137)
- quality: redact duplicate secret literals (#402) (9dd309f)
- typescript: avoid recursive nesting scan (#405) (d57c965)
- vscode: gate dead-code preview by workspace trust (#397) (a091330)
- vscode: harden hover markdown (#383) (f7a593c)
- vscode: make scan-on-open trusted opt-in (#398) (c32eaef)
- vscode: trust AI endpoint configuration (#396) (d16ae15)
- vscode: trust executable configuration (#395) (d403a95)
- webhook: bound verification pattern scans (#400) (6783103)
4.15.1 (2026-05-16)
- audit: contain audit file discovery (#379) (a95c246)
- cache: harden grep cache writes (#377) (22afc24)
- cli: gate coverage test execution (#382) (3a2077c)
- cli: harden trace subprocess imports (#376) (47224d4)
- go: enforce scan-root containment (#373) (a88ddc3)
- llm: avoid importing scanned repo code (#369) (b4e62f5)
- llm: contain cleanup file access (#374) (2821158)
- llm: contain source file discovery (#375) (ea7140e)
- mcp: harden remediation test execution (#372) (69eafe5)
- mcp: require client auth for network transport (#370) (322a532)
- pipeline: contain LLM file inputs (#381) (19a5941)
- release: gate PyPI publish provenance (#367) (23f943b)
- release: scope PyPI token to upload (#371) (2a4a5e7)
- secrets: contain config file scans (#378) (5cbba67)
- sync: keep pre-push hook static (#380) (f293c6a)
4.15.0 (2026-05-16)
- cache: add opt-in trace phase cache (#355) (9c35cbb)
- cli: show grep verification summary (#362) (f53dbb2)
- config: add GitLab CI scanner (#350) (b8ed22b)
- debt: explain score breakdown (#364) (a6fd980)
- security: scan GitHub Actions workflows (#348) (c05e242)
- cli: scope grades to scanned categories (#363) (5b57a77)
- cli: write rich output reports to file (#360) (baef30e)
- core: tighten exception handling and split grep verifier (#359) (511d71a)
- dead-code: resolve package-root imports (#361) (ffb82c9)
- security: harden VS Code webview surfaces (#345) (b15e29b)
- upload: harden Cloud report uploads (#352) (39cd7fc)
4.14.0 (2026-05-11)
- security: add Deep Mode audit foundation (#339) (d4a89d2)
- security: add SSRF evidence packets (#336) (2990d2c)
- security: complete deep audit workflow phases (#341) (3e3702b)
- cli: prevent help from creating artifacts (#340) (72af4f0)
- security: disable arbitrary pip install in verifier (#344) (8307280)
- security: polish Deep Mode audit states (#343) (9b229ee)
4.13.1 (2026-05-10)
- python: detect no-effect statements (#332) (7ffa1c9)
- python: detect unreachable loop code (#334) (676a414)
- python: keep same-name wrappers dead (#330) (7d4d32c)
- security: harden agent service and API surfaces (#335) (05393ea)
4.13.0 (2026-05-09)
- languages: add Dart support and harden PHP scanning (#327) (681e754)
- languages: harden Java and Go security flows (#323) (4f02b69)
- quality: add architecture policy and placeholder checks (#318) (15e6be4)
- analyzer: keep scanner caches at project root (#324) (294a03c)
- architecture: add Q802 Q803 remediation hints (#326) (2f0f3f0)
- gate: make file-level IAD architecture findings advisory (#325) (1df7ee1)
- python: keep pyproject GUI scripts live (#328) (151b7e2)
- python: suppress override method parameters (#329) (2a5cba3)
4.12.1 (2026-05-08)
- architecture: repair Q802/Q803 audit defects (#316) (633e911)
- architecture: suppress private helper Q803 false positives (#315) (8ec8799)
- cli: quiet LLM scan output (#313) (f13fff2)
4.12.0 (2026-05-07)
- architecture: rename misleading healthy zone fallback (#308) (3eba72c)
- architecture: suppress library re-export false positives (#307) (117142d)
4.11.1 (2026-05-06)
4.11.0 (2026-05-05)
- cicd: add AI PR risk passport (#294) (750faa4)
- cicd: add PR evidence cards (#291) (10b21fd)
- debt: show saved history (#287) (8b4a4c1)
- defend: add versioned OWASP coverage (#295) (355b4f2)
- quality: add standards-backed practice enforcement (#283) (c432260)
- security: flag mixed-script paths (#288) (8689902)
- security: flag unverified webhook handlers (#289) (4127578)
- architecture: preserve submodule coupling targets (#296) (90a1e1d)
- cli: repair display severity filtering (#280) (0c3b929)
- contributing: add contributor roadmap (#292) (d398b8a)
- security: document webhook signature rule (#290) (3024850)
- Document SKY-D282 webhook signature verification coverage.
4.10.0 (2026-05-02)
- analyzer: add configurable vibe guardrails (b789334)
- analyzer: add Python liveness evidence for dead-code detection (#272) (f5c53b3)
- cli: add concise IDE-friendly output (#279) (07d22cc)
- analyzer: cover rust and workspace edge cases (721235b)
- analyzer: harden rust and monorepo resolution (565fc8f)
- analyzer: restore configurable vibe guardrails (#271) (61aa187)
- ci: harden enterprise workflow generation (#268) (8568bc0)
- cli, quality: honor gate exits and ignore annotation strings (#275) (5a8d3f6)
- cli: honor strict scan exit codes (#278) (b98db50)
- sync: block direct main pushes (#269) (9ed6fe6)
4.9.0 (2026-04-30)
- analyzer: add rust scanner and monorepo support (d2cb1b7)
4.8.0 (2026-04-28)
- cli: add upload session metadata (0758f77)
- ci: add tokenless CI workflow example (723ec78)
- readme: add validation results and trust badge (f359184)
4.7.0 (2026-04-26)
- cloud: support tokenless CI auth (60b3273)
- release: restore release-please metadata flow (f4e233c)
4.6.0 (2026-04-26)
- languages: add js-jsx support and strengthen java-go security c… (#237) (c082fcf)
- languages: add php foundation support (#243) (4a137cc)
- languages: deepen go java and js-ts security checks (#238) (fde84e3)
- languages: deepen js-ts reachability and entry discovery (#240) (6ea96a2)
- languages: harden go archive symlink checks (#241) (4d37f14)
- languages: harden java canonical path guard checks (#242) (d3958bf)
- security: add security contract regression detection (#236) (1b48e52)
- upload: add family-aware cloud uploads and debt reporting (#239) (55b75ea)
- upload: add monorepo routing and sonar import (#244) (dc473d7)
- dead-code: improve frozen benchmark precision and recall (#254) (4fd170c)
- java: make security flow analysis structured (#253) (5d3a946)
- python: fix critical logic gaps (#245) (96712b9)
- python: improve security flow precision and recall (#250) (8af25d2)
- quality: detect duplicate branch logic (#255) (8e76e9d)
- security: improve typescript ssrf and go command precision (#251) (1218c9d)
- readme: refresh GHCR image release notes (#232) (bea165c)
- readme: streamline landing pages and benchmark scorecard (#256) (f2af8c2)
4.5.0 (2026-04-22)
- docker: publish official GHCR image for Skylos CLI (#230) (0300f87)
- docker: publish official GHCR image for Skylos CLI (#231) (96cc2b7)
- security: add challenge pass for uncertain findings (#226) (a2b2927)
- security: add review evidence for llm security findings (#218) (1670cde)
- security: add security taskflow foundation and relax local pre-commit gate (#221) (1fa404b)
- security: add taskflow candidate ledger (#222) (2459fb6)
- security: add taskflow file facts (#223) (78cc52c)
- security: persist taskflow run artifacts (#225) (3338eef)
- cli: improve pre-commit UX and harden large upload flow (#210) (30fa686)
- cli: reduce false positives in local pre-commit gating (#213) (e0b3a3e)
- cli: reduce false positives in local pre-commit gating (#214) (5959fa8)
- cli: scan staged test files for secrets only (#215) (9b1f199)
- readme: add security taskflow example (#227) (6434f2a)
- readme: update security taskflow docs (#224) (251fe4d)
4.4.0 (2026-04-16)
- cli: add suite command for the full local bundle (#209) (1989905)
- py: add repo-aware vibe reference detection (#208) (797b1ab)
- ts: add AI defense beta for direct LLM integrations (#207) (dfb4fda)
- ts: report monorepo workspace inventory (#202) (610c53b)
- ci: publish releases from tags (#196) (be5e6ee)
- ts: keep monorepo package entrypoints reachable (#205) (f0cb594)
- ts: resolve direct project references in monorepos (#204) (c2b4c69)
- ts: use declared workspaces for monorepo resolution (#203) (5a28512)
4.3.2 (2026-04-10)
- sync: support top-level cloud pull config (#194) (8abe838)
- ts: resolve workspace exports and local imports maps (#181) (322466c)
4.3.1 (2026-04-08)
4.3.0 (2026-04-08)
- core: honor root ignores and actionable clean edits (#165) (358dd1f)
- release: align release-please bootstrap with 4.2.1 (8fb330f)
- summary: include Java in language analysis summary (#175) (433c0e8)
- ts: align Next.js convention coverage (#164) (05264b2)
- Added a Simplified Chinese README (
README_CN.md) - Added configurable web UI port support for
skylos runvia--portorSKYLOS_PORT - Added monorepo workspace inventory reporting for TypeScript projects. Skylos now reports root packages, child workspaces from
package.json/pnpm-workspace.yaml,tsconfig.jsonreferences, and undeclared workspace package diagnostics in analysis and MCP output - Added TypeScript AI defense beta support to
skylos discover/skylos defendfor direct Node / Next-style LLM integrations, reusing the existing guardrail engine and report format - Added
skylos suite <path>as a single local command for static analysis, technical debt, AI defense, and provenance summary
- SKY-L030: Lint rule for
except Exception/except BaseExceptionwith trivial handler (CWE-396) - Continue CLI cleanup by extracting command boundaries, lazy-loading heavy analysis paths.Expanded regression guardrails around dispatch, output, and exit-code behavior
- TypeScript monorepo resolution now uses declared workspaces as the package boundary, resolves root package self-imports, and honors JSONC-style
tsconfigpath inheritance - TypeScript resolution now supports importer-local direct
tsconfig.jsonproject references for composite monorepos without leaking those references into global package resolution - TypeScript dead-file and unnecessary-export analysis now treats workspace package entrypoints as reachability roots, including packages kept alive through direct local
tsconfig.jsonproject references - AI defense file discovery for
discover/defendnow scans direct TypeScript and JavaScript source files in addition to Python - Docs, help, and tour now steer new users toward a smaller command set centered on
skylos suite .,skylos .,skylos cicd init, and the agent commands
- Browser login callback now validates
stateand verifies the returned token metadata viawhoami - Fixed local web UI rendering to avoid unsafe HTML insertion patterns
- Sync credentials are written with stricter file and dir permissions
skylos agent scannow defaults to the fast review path. Slow dead-code verification is opt-in via--verify-dead-code- Agent review is more repo-aware, with better file selection and context for quality, security, and debt-style issues
- Added agent benchmarks and Codex comparison runs with token reporting
- Agent scans now fail cleanly on missing API keys instead of crashing
- Review output is clearer when dead-code verification is still running
- LLM provider and runtime settings now propagate correctly through the agent path
- Added
skylos debt <path>for technical debt hotspot analysis - Added separate structural debt scoring and hotspot
priority_score
- Refactored the CLI entrypoint by extracting
baseline,badge,doctor,credits,init,whitelist,clean,whoami,login,sync,city,discover,defend,debt,ingest,provenance, andcicdinto dedicated command modules. - CLI refactor guardrails to catch dispatch, output, and exit-code regressions during future
cli.pycleanup skylos debt --topnow will overridereport.top- Changed-file debt scans now resolve git diffs from the repository root and include
.js/.jsx - Debt baseline and history writes require project-root scans
- Debt baseline comparisons no longer count unseen hotspots as resolved
- Sync-installed pre-push hooks now run only the fast Rust/Python parity guard instead of a full
skylos .scan, and checked-in Skylos hooks are limited to thepre-commitstage
skylos agent watch --learnnow forwards the learning flag into the watch loop
skylos --llmnow shows populatedProblem:descriptions for dead code findings instead of blank lines (fixes #118)- Dead code findings in
--llmoutput now include rule IDs (SKY-DC001–SKY-DC006) and proper severity levels uvx skyloscrash on Windows due to litellm's.pthfile exceeding MAX_PATH (260 chars) in uvx cache paths (fixes #120)- Skylos now honors project
.gitignoreentries during file discovery, so ignored worktrees, custom virtualenvs, and other excluded paths are no longer scanned - Flask, FastAPI, Starlette, and Sanic imperative route or lifecycle registration (
add_url_rule,add_api_route,add_route,register_listener,register_middleware) is now treated as a live framework entrypoint instead of dead code - Pytest and Pluggy hook implementations (
@pytest.hookimpl,@hookimpl) are now treated as live plugin entrypoints instead of dead code - Grep cache saves now fail open on non-writable roots instead of aborting analysis
litellmmoved from required to optional dependency — install withpip install skylos[llm]for LLM features. Core static analysis no longer pulls in litellm.litellmversion capped at<1.82.8to avoid known supply chain compromise- Agent scans are faster on changed-file workflows, and fix generation is now opt-in
- Phase 2b LLM audits now focus on high-signal files instead of scanning the full Python set
- Static
grep_verifynow reuses.skylos/cache/grep_results.jsonacross repeated local scans
- Configurable duplicate string threshold —
duplicate_stringsin[tool.skylos](default: 3) - CLI table now prints a brief explanation of what each column means
- CLI discoverability overhaul —
skyloswith no args shows grouped command overview of all 30+ commands skylos commands— flat alphabetical listing of every commandskylos tour— guided 6-step walkthrough for new users- README Command Reference section with grouped tables
nudgesconfig key in[tool.skylos]to suppress post-scan suggestions- Java language support. Dead code, security and quality
- Spring/JUnit framework awareness —
@Override,@Bean,@Test,@GetMapping,@Scheduled, lifecycle methods are suppressed
- Django/DRF false positives:
Metainner classes,urlpatterns,serializer_class,permission_classes,filterset_class, migration attrs, andAppConfigsubclasses are fixed (fixes #115) - Added
django_filtersto framework detection
- Quality table column renamed from "Function" to "Name"
- Duplicate string findings now show
repeated 5× (max 3)instead of cryptic5 (target ≤ 3) - Complexity findings now show
Complexity: 14 (max 10)instead of bare14 (target ≤ 10) skylos inittemplate now includesduplicate_stringsoption- Post-scan hints replaced with context-aware nudges (1 per scan, based on results)
- Argparse epilog simplified — points to
skylos commandsandskylos tour
- MCP
validate_code_change— diff-level validation with security regression detection, dangerous pattern scanning, secret leak detection, and SQL injection checks - CI/CD review integration with security regression detection from diffs
- Upload payload now includes
definitionsfor Code City dashboard - Auto-detect changed files from git for quality checks when no explicit diff base is provided
- Crash on systems without clipboard mechanism (Docker, headless Linux) —
pyperclip.PyperclipExceptionis now caught - False positive on framework methods in nested classes
- Removed unused
DJANGO_SIGNAL_METHODSimport in penalties module
- Security regression detection — SKY-L021 expanded to 13 categories: input validation, security headers, encryption, logging/audit, sanitization, permission checks. Findings include
control_typefield - Web scanner — public scan page at
skylos.dev/scan, paste a GitHub URL, get a vibe code risk score. No signup, rate-limited (10/IP/hr) - MCP guardrails —
validate_code_change(diff validation for regressions, dangerous patterns, secrets) andget_security_context(project security posture for agents) - Community rules —
skylos rules install|list|remove|validatefor YAML rule packs fromduriantaco/skylos-rulesor any URL. Taint-flow pattern support in YAML rules - AI provenance —
--provenanceflag annotates findings with AI authorship (cursor, copilot, claude, etc.). Per-agent and per-severity breakdowns - TypeScript dead code detection — cross-file analysis with SKY-E003 (unused files with transitive propagation), SKY-E004 (unnecessary exports), wildcard re-export chain resolution,
.js→.tspath resolution - TypeScript export graph — aliased imports, default re-exports, namespace re-exports all tracked correctly
- Python vibe detection — phantom security calls/decorators now resolve imported local modules and package re-exports like
security.require_auth()and@guards.require_auth - Next.js security — SKY-D280 (missing auth in API routes), SKY-S102 (server secrets in
"use client"files), SKY-D281 (SQL injection in"use server"actions) - SKY-S102: Client-side secret exposure in
static/,public/,.next/,dist/,build/paths - D230 enhanced: catches
redirect(request.args.get("next", "/"))withurlparse/startswithguard suppression - SKY-Q306: Cognitive complexity (SonarQube S3776)
- SKY-L027 (duplicate strings), SKY-L028 (too many returns), SKY-L029 (boolean trap)
- Go quality rules (Q301, Q302, C303, C304) via tree-sitter-go
skylos[fast]— optional Rust acceleratorskylos provenance— detect AI-authored code in PRs- Agent-aware quality gate (
[tool.skylos.gate.agent]) skylos agent watch,agent pre-commit,agent verify --fix --pr- Grep-based verification pass with parallel workers, GrepCache, CWE tagging + SARIF taxonomy
- Agent CLI consolidated from 16 to 8 commands
- TS definitions use
filename:nameas dict key (prevents collisions)
Definition.to_dict()now includesis_exportedflag- TS def key collisions and cross-file import resolution
-a/--allflag — enables--danger,--secrets,--quality, and--scain one shotaddoptsconfig — set default CLI flags inpyproject.tomlunder[tool.skylos]- LLM verification agent —
skylos agent verify <path>with 3-pass dead code verification - Batch LLM calls — up to 8 findings per call
- Confidence feedback loop — auto-tunes heuristic weights across runs (
~/.skylos/feedback.json) - MCP
verify_dead_codetool --verification-modeflag —judge_allandproductionmodes- AI defense cloud dashboard —
skylos defend . --uploadsends results to Skylos Cloud skylos cicd init --defendandskylos-defendpre-commit hook- Public API detection — documented API symbols suppressed without LLM calls
- Dead-code verifier defaults to
judge_allmode - Deterministic suppressors attached as verifier evidence
- Quality Gate step runs with
if: always() --uploadon empty project prints "skipping upload"
- Breaking: Removed
skylos . --fix,skylos agent fix,skylos agent analyze --fix— useskylos agent remediate
LiteLLMAdapter.complete()forwardsresponse_formatto litellmcreate_llm_adapter()passesbase_urlfromAgentConfig- Attribute context matching bug,
_mark_refs()O(n) fallback replaced with lookup - Narrowed broad
except Exceptionblocks to specific types - Git subprocess calls now have timeouts
skylos cicd initno longer crashes withTypeErrorongenerate_workflow()
- SKY-D260: multiline HTML comment duplicates, overly broad patterns, fenced code block exclusion, homoglyph false positives, single-line string regex
- SKY-Q301: counts comprehension
for/ifand match case guards; threshold>=10→>10
skylos cicd init --uploadfor cloud dashboard workflows- SKY-L016 (undefined config), SKY-L023 (phantom decorator), SKY-L024 (stale mock), SKY-L026 (unfinished generation)
- SKY-D260: AI supply chain security — multi-file prompt injection scanner
- Vibe confidence metadata (
vibe_category,ai_likelihood) --llmflag for LLM-optimized reports
- SKY-C401 clone detection false positives reduced
--diff [BASE_REF]— line-level precision filtering using unified diff hunk headers- Git blame attribution on findings
- Auto-upload for linked projects (
--no-uploadto skip) - SKY-L010 (security TODOs), SKY-L011 (disabled security controls), SKY-L012 (phantom calls), SKY-L013 (insecure randomness), SKY-L014 (hardcoded credentials), SKY-L017 (error info disclosure), SKY-L020 (overly broad permissions)
- Dynamic signal tracking (
inspect.getmembers,dir()) - Expanded default exclude folders for Go, TypeScript, VCS, IDE
--exclude-folderwith trailing slashes and CWD-relative paths
- Table output is now the default (TUI opt-in via
--tui) - MCP credit checks fail-open on network errors
- Claude Code Security integration —
skylos ingest claude-securityCLI subcommand skylos cicd init --claude-securitygenerates 3-job GitHub Actions workflow- Blue "Claude Security" badges on dashboard
- Credit deduction is format-aware (2 credits for Claude Security, 1 for native)
- LLM-generated code-level fix suggestions with before/after snippets
- PR inline comments with fenced code blocks, collapsible
<details>in summary - Rule-based text suggestion fallback when LLM not used
- Phase 3 matching for findings without
rule_id _merge_llm_findingspasses throughvulnerable_codeandfixed_code
- CVE reachability analysis via ca9 engine — proves whether vulnerable deps are actually reachable
skylos whoamicommand
--json -o <file>writes to file instead of only stdout- CI/CD workflow:
agent reviewuses--format json, auto-addsANTHROPIC_API_KEY - PR review inline comments: absolute vs relative path mismatch fixed
- Go dead code detection
engines/__init__.pymissing
- TypeScript analysis 6.7x faster via batched tree-sitter queries
- 11 new TypeScript security rules: SKY-D245 through SKY-D253, SKY-D270, SKY-D271, SKY-D510
- SKY-Q305 (duplicate condition), SKY-Q402 (await in loop), SKY-UC002 (unreachable code)
- Shannon entropy-based secret detection
- Smarter attribute resolution,
__init__.pyre-export tracking - Expanded Django/DRF framework dictionaries
- Go language support
- TUI category list focusable again
- Multi-path CLI support (
skylos app/ tests/) @abstractmethodsuppression, framework dictionaries for Starlette, Flask-RESTful, Tornado, Marshmallow, SQLAlchemy, Celery, Click
- Pattern tracker double-counting,
private_namepenalty 80→60
- Next.js/React TypeScript dead code detection (convention exports, route handlers, hooks)
- Dynamic dispatch:
getattr(module, f"prefix_{var}")andglobals()f-string detection __init_subclass__registry pattern detection, indirect enum inheritance
- Pattern tracker regex compilation, inline f-string handling, enum method/class variable detection
- BFS from entry points through import graph for false positive elimination
__getattr__package handling, relative import resolutionskylos creditscommand, MCP server auth + rate limiting + credit deduction
--trace --jsonand--pytest-fixtures --jsonproducing invalid JSON
- TypeScript: interface, enum, and type alias dead code detection
- TUI language display and severity bar chart
- CI/CD visibility:
skylos badgecommand, "30-second setup" in README - CBO coupling (SKY-Q701) and LCOM cohesion (SKY-Q702)
- Architecture metrics: SKY-Q802 (distance from Main Sequence), SKY-Q803 (Zone of Pain/Uselessness), SKY-Q804 (Dependency Inversion violations)
- TypeScript class name capture,
regex.exec()false positives, lifecycle method exclusion export default function,export { name },extends Basetracking- Callbacks, array storage, object shorthand, return values, spread, type annotations as references
- TypeScript scanner uses
Query()constructor instead of deprecatedTS_LANG.query()
- Remediation agent —
skylos agent remediatewith--dry-run,--max-fixes,--auto-pr,--test-cmd,--severity - CI/CD integration —
skylos cicd init|gate|annotate|review - MCP server —
analyze,security_scan,quality_check,secrets_scan,remediatetools - SKY-D230 (open redirect), SKY-D231 (CORS), SKY-D232 (JWT), SKY-D233 (deserialization), SKY-D234 (mass assignment)
- Sanitizer framework for taint analysis (XSS, CMD, URL, PATH)
- TypeScript security: SKY-D503 through SKY-D507, SKY-D240 through SKY-D244
- SKY-L005 (unused exception var), SKY-L006 (inconsistent return), SKY-Q501 (god class)
- TypeScript quality: SKY-Q601 through SKY-Q604
- Go language support via pluggable engine architecture
- Secrets scanning expanded to
.env,.yaml,.json,.toml,.ini,.cfg,.ts,.tsx,.js,.go
import jsoninsidemain()shadowing module-level import- LLM false-aliving all
_-prefixed dead code
- Taint-flow scanners accept context-specific sanitizer sets
danger.pyshares parsed AST tree across scanners
exclude_folderswired throughrun_pipelineandrun_static_on_files
- Agent analyze/review refactored from parallel execution to pipeline architecture (static analysis as source of truth, LLM verifies)
- LLM no longer independently discovers dead code
DeadCodeVerifierAgentwith call graph evidence and defs_map contextpipeline.pywithrun_pipelineandrun_static_on_files
- Circular dependency checker feeding
.ts/.gofiles toast.parse()
- Hallucination detection PyPI "missing" status
- Dependency parsing for pyproject.toml and setup.py (extras, project name inclusion)
- Import usage counting: aliases no longer mark the wrong module as used
graph.pyfor taint analysis, data flow, and context slicingFalsePositiveFilterAgentfor LLM-based static finding verification- CI auto-detection (GitHub Actions, Jenkins, CircleCI, GitLab CI) with PR number extraction
- Type2 clone detection, circular dependency display
- CLI entrypoint decorator patterns, post-scan upload CTA, upload prompt with "don't remind me" preference
- SKY-Q401 (async blocking)
visitor.pywith call graph construction and dynamic string reference detectionanalyzer.pyusesCodeGraphfor deep security audits- Hardened SKY-L001 (catches
list(),dict(),set()constructors, comprehensions)
- Parent dir search for pyproject.toml/requirements.txt, dist-info name parsing, Python 3.13 AST compat
- Centralized LLM runtime resolver with auto-detection from
--model - Symbol context tracking in taint visitors
skylos keycommand
- Two-level dependency hallucination: SKY-D222 (CRITICAL, confirmed hallucinated) and SKY-D223 (MEDIUM, exists but undeclared)
- Console entrypoint parsing from
pyproject.toml[project.scripts] --pytest-fixturesflag for unused fixture detection- Dependency hallucination detection
- Custom rules and compliance from web app (beta)
- CLI displays paths relative to CWD
- Switched to
uvin CI workflows,litellmadapter, upload made optional
cache.py(unstable outputs), anthropic/openai adapters (replaced by litellm)
--provider,--base-urlflags and env variable support for LLM providers- Auto API key bypass for local endpoints
- LLM-assisted detection agent
--gateuploads before exiting, pre-commit hook exit codes, Protocol interface false positives
OpenAIAdapteruses Chat Completions API, provider resolution priority chain
- Protocol and ABC detection with duck typing (≥70% method overlap)
- Mixin, base class, and framework lifecycle method confidence penalties
- Data class field detection (dataclass, NamedTuple, Enum, attrs, Pydantic)
- Optional dependency import handling (
try/except ImportError)
# noqacomment support for line-level suppression
--traceflag for runtime call tracing viasys.settrace()- Progress indicator during analysis
- SKY-U002: dead file detection for empty Python files
- AST body masking, framework-aware entrypoint detection
- Config-based dead code suppression (
pyproject.tomlwhitelists with patterns, reasons, expiration dates) skylos whitelistcommand- Confidence column in output
- Expanded soft patterns (visitor, pytest hooks, plugins)
- Replaced
--coveragewith--trace - Penalty system: hard entrypoints (confidence=0), framework entrypoints (with context), soft patterns (proportional)
- Flask route detection,
@login_requiredhandling, Pydantic route type hints ComplexityRulevisitor, Python 3.13 compat,skylos initduplicate config sections
- Missing
skylos.visitors.languagesin package,--versioncrash, pre-commit gate script
- Instance attribute type tracking, expanded dunder methods
- SKY-L004 (nested try blocks), SKY-U001 (unreachable code)
--coverageflag,ImplicitRefTrackerfor dynamic patterns
Class(1).method(),self.attr.method(),super().method()patterns- Flask/FastAPI route false positives
- TypeScript support (dead code, security, quality) via tree-sitter
- Language-specific config overrides in
pyproject.toml - Multi-provider AI adapters (OpenAI, Anthropic) with keyring credential storage
- AI-powered code repair (
--fix)
- Exclusion patterns ignored in analyzer, nested directory exclusion support
- Quality gate (
--gate) for CI/CD pipeline blocking - Config support via
pyproject.toml[tool.skylos] - SKY-C303 (too many args), SKY-C304 (function too long), SKY-L001 (mutable default), SKY-L002 (bare except), SKY-L003 (dangerous comparison)
- Python 3.13 AST crash, JSON serialization of
pathlib.Path,DangerousComparisonRulefalse positives
--treeflag for ASCII tree output- Relative file paths in CLI
- Code quality scanner: cyclomatic complexity and nesting depth rules
- Dataclass schema class false positives, multi-part module import detection
- SKY-D211 (SQL injection), SKY-D217 (SQL raw API), SKY-D216 (SSRF), SKY-D215 (path traversal), SKY-D212 (command injection)
- VSCode extension on marketplace
- Dangerous patterns scanner (SKY-D201 through D210),
--dangerflag,--tableoutput
- Non-JSON prints breaking CI/CD, secrets regex false positives
- Interactive remove/comment for dotted imports and class/async methods
- Secrets scanning (SKY-S101): provider patterns + high entropy detection,
--secretsflag - GitHub Actions CI workflow
- Dataclass field detection,
first_read_linenotracking,visit_Globalbinding
- Missing
_dataclass_stackinit, dataclass/global singleton false positives
- Pre-commit hooks
- CST-based safe edits for import/function removal via
libcst
- Visitor improvements: locals and types per function scope, constants handling
self.attr/cls.attrfalse positives
- Framework-aware pass: route endpoints no longer clamped to low confidence
_mark_refs()rewritten for clarity
- Front end integration (Skylos Cloud dashboard)
self.ignored_linesoverwrite in loop
- Comment directives:
# pragma: no skylos,# pragma: no cover,# noqa proc_file()returns 7-tuple with ignored lines set
- Framework detection (Flask, Django, FastAPI) with confidence scoring
--confidenceflag
- Flask/Django routes incorrectly flagged, test file exclusion improvements
- Test file auto-detection (patterns, imports, decorators)
- Private item (
_-prefix) and__future__import false positives
--exclude-folder,--include-folder,--no-default-excludes,--list-default-excludes
- Test class identification false positives
- Unused parameter and variable detection
- Rewritten from Rust to Python (faster), benchmark infrastructure, confidence system