Repository navigation
chore(release): merge v0.19.0 to main - #672
Merged
Merged
Conversation
…es (#656) Lockfile-only patch bumps: rustls 0.23.46 and quinn-proto 0.11.19 fix nine advisories; chacha20 0.10.2 replaces a yanked release. Signed-off-by: ajianaz <ajianaz@users.noreply.github.com> Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
Replace six hand-copied versions of severity filtering, should_block, quality gate, exit code, debt snapshot and review history (review single and chunked, commit, scan, MCP, engine fallback) with engine::finalize. MCP review_diff now honors min_severity and gates on the reported findings; commit records its review in the history. Signed-off-by: ajianaz <ajianaz@users.noreply.github.com> Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
…#649) (#651) review::prepare builds a judge::Packet, a Judge returns findings (HttpJudge = today's LLM call, NoJudge = deterministic only), and review::review_with merges, guards paths, post-processes and decides should_block. The pipeline now has end-to-end tests with a fake judge. Spinners move out of the llm module into progress::Spinner. Signed-off-by: ajianaz <ajianaz@users.noreply.github.com> Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
…by the exact prompts (#644) (#652) judge::admit clears rule_id, bounds text and count, drops files and lines the diff does not contain; applied to review and scan. The Packet now carries the finished hardened prompts, and the review cache moves behind HttpJudge keyed by those prompts, storing the raw model answer so ignore.rules, min_severity and rules are applied on cache hits too. Scan batches get an untrusted-data fence. Signed-off-by: ajianaz <ajianaz@users.noreply.github.com> Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
…am (#645) (#653) deterministic::run_files serves whole files (scan, MCP snippet check) the way run serves diffs, so built-in and custom rules now fire in scan. ScanJudge (HttpScanJudge, NoJudge) makes the batch loop testable without a network. DEFAULT_BATCH_TOKEN_BUDGET is renamed to CHAR_BUDGET and the docs state which review flags scan lacks. Signed-off-by: ajianaz <ajianaz@users.noreply.github.com> Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
#646) (#654) A missing API key now selects the deterministic judge instead of failing: checks run, a stderr notice is printed, and the summary (and SARIF invocation) says no LLM judged. --no-llm forces it. The judge is chosen once at the entry point. Signed-off-by: ajianaz <ajianaz@users.noreply.github.com> Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
…w_diff runtime panic (#647) (#655) cora.review_prepare/review_finalize and cora.scan_prepare/scan_finalize let the calling agent be the judge with no LLM configured in cora. Finalize is stateless and validates the agent's findings through judge::admit. cora install also installs a /cora-review skill for Claude Code. Also fixes cora.review_diff panicking with 'Cannot start a runtime from within a runtime': handlers now block via block_in_place. Signed-off-by: ajianaz <ajianaz@users.noreply.github.com> Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
…inks, agent tools (#657) A hostile diff could hide findings: --- / +++ lines inside a hunk were parsed as file headers. A judge issue on the same line could replace a critical scanner finding. Scans followed symlinks out of the project and enclosing-scope reads trusted diff paths. Also: dropped_by_validation, files_fingerprint, should_block/gate on all findings, admit for deleted/renamed files, install --remove keeps edited skills, no clippy for --no-llm, docs/skill/tool-count corrections. Signed-off-by: ajianaz <ajianaz@users.noreply.github.com> Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
* fix(security): SARIF no-judge marker cannot be forged or missed A model-written summary containing the marker sentence is stripped, and the judge-failure fallback now carries the marker. Documents the block_in_place multi-thread requirement of the MCP block_on helper. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Signed-off-by: ajianaz <ajianaz@users.noreply.github.com> * fix(security): strip the no-judge marker until none is left A single replace pass let a nested marker reassemble after removal. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Signed-off-by: ajianaz <ajianaz@users.noreply.github.com> --------- Signed-off-by: ajianaz <ajianaz@users.noreply.github.com> Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
…n) (#659) review_prepare listed all deterministic findings but review_finalize showed only rules_engine.max_findings of them with no explanation, found by running a real agent on a real project. prepare now reports the total and the cap; finalize, scan_finalize and review_diff report not_shown. Signed-off-by: ajianaz <ajianaz@users.noreply.github.com> Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
…r findings (#660) * fix(rules): max_findings defaults to 50 and never hides critical/major findings The default cap of 5 hid serious findings (a module with 7 critical findings showed 5). The cap now limits only Minor/Info noise: it keeps every Critical and Major finding and fills the remaining slots with the most severe noise, still reporting how many were not shown. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Signed-off-by: ajianaz <ajianaz@users.noreply.github.com> * test(mcp): adapt the capped-findings test to the new default cap of 50 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Signed-off-by: ajianaz <ajianaz@users.noreply.github.com> --------- Signed-off-by: ajianaz <ajianaz@users.noreply.github.com> Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
…values (#661) (#664) * fix(rules): secret rules ignore name: value entries with non-literal values (#661) In source files a bare expression after name: (env reads, member access, type annotations, dict values) is a reference or a type, never a secret, and format placeholders are not values. Quoted literals are unchanged. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Signed-off-by: ajianaz <ajianaz@users.noreply.github.com> * fix(rules): harden the non-literal secret filter (fail-open cases) Every name: value entry on a line must be a non-literal (a harmless first entry no longer hides a later real secret), an env read with a literal fallback stays flagged, and braced values containing digits are not format placeholders. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Signed-off-by: ajianaz <ajianaz@users.noreply.github.com> --------- Signed-off-by: ajianaz <ajianaz@users.noreply.github.com> Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
#662) (#665) A SQL keyword in a message is not SQL, and identifiers/SET fragments cannot be bound as parameters. Only a value spliced into real SQL (or string concatenation) stays a finding. Signed-off-by: ajianaz <ajianaz@users.noreply.github.com> Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
* feat(rules): test-code awareness for the built-in rules (#663) Whole test files and Rust #[cfg(test)] modules / #[test] functions (also a diff hunk inside mod tests) are exempt from the noisy rules; secret scanners keep only their high-confidence patterns there. bug-println is skipped in program entry points. rules_engine.include_tests turns it off. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Signed-off-by: ajianaz <ajianaz@users.noreply.github.com> * fix(security): test awareness cannot hide code (unclosed regions, injection in test blocks) An unclosed #[cfg(test)] region in a whole file is dropped instead of exempting the rest of the file, single-line raw strings no longer confuse brace matching, and inline test blocks keep every security pattern except the generic hardcoded-secret one. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Signed-off-by: ajianaz <ajianaz@users.noreply.github.com> * fix(security): test-region detection cannot be steered by comments or strings Block comments are skipped when counting braces, and a test region is dropped when an item starts at or left of its own indentation or its closing brace does not balance the count, so a parser differential cannot exempt production code. Column-0 text that is not a Rust item (TOML fixtures in raw strings) does not abandon a region. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Signed-off-by: ajianaz <ajianaz@users.noreply.github.com> * fix(security): same-line attribute items and block-comment attributes cannot exempt code #[cfg(test)] fn helper() {} decorated the next line instead of its own item, and an attribute inside a block comment counted as one. Comment state is now tracked on every line so it cannot go stale. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Signed-off-by: ajianaz <ajianaz@users.noreply.github.com> --------- Signed-off-by: ajianaz <ajianaz@users.noreply.github.com> Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
* chore(release): v0.19.0 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Signed-off-by: ajianaz <ajianaz@users.noreply.github.com> * chore(release): update the changelog compare links for v0.19.0 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Signed-off-by: ajianaz <ajianaz@users.noreply.github.com> --------- Signed-off-by: ajianaz <ajianaz@users.noreply.github.com> Co-authored-by: ajianaz <ajianaz@users.noreply.github.com> Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
…-help (#669) Signed-off-by: ajianaz <ajianaz@users.noreply.github.com> Co-authored-by: ajianaz <ajianaz@users.noreply.github.com>
## What Rewrite `AGENTS.md` to the fleet baseline structure (public variant): repo-specific notes first (build and test commands, the conventions CI enforces, gotchas), then the session-start ritual and the workflow summary. The "Commits & PRs" section from #667 is removed: it spelled out message-policy text that belongs in the team standard, not in a repo-visible file. ## Why The baseline keeps `AGENTS.md` generic and policy-free (ritual, workflow, continuity) and enforces message hygiene with tooling instead. #667 predates that clarification. ## Testing - Docs-only. Rendered and read through; no internal room names or paths (public repo wording), no credentials. - Branch name, PR body sections and sign-off follow what CI checks; CI results are on this PR. Signed-off-by: ajianaz <ajianaz@users.noreply.github.com> Signed-off-by: ajianaz <ajianaz@users.noreply.github.com> Co-authored-by: ajianaz <ajianaz@users.noreply.github.com>
Signed-off-by: ajianaz <ajianaz@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Merge the v0.19.0 release into
main: everything ondevelopsince v0.18.0 (agent-as-reviewer MCP tools and the/cora-reviewskill, review and scan without an API key,--no-llm, the prepare / judge / finalize seam, validation of judge output,max_findings50 with critical and major never hidden, false-positive fixes for the secret and SQL rules, test-code awareness, audit hardening, help text and env-secret fix) plus the final changelog fold (#671). Version inCargo.toml/Cargo.lockis already 0.19.0 (#668).Why
GitFlow:
developtomainthrough a PR, then the tagv0.19.0onmain(the release workflow checks that the tag is onmain, signs the checksums and publishes).Testing
developCI is green on every merged PR; this PR re-runs the full CI on the release head.cargo test --features tree-sitter(1258 unit + 20 CLI tests), clippy-D warnings, fmt,cora --versionprints 0.19.0, and a real agent run (cora MCP, no API key) reviewed a staged diff end to end.