Skip to content

crimes 0.28.0

Reliable context, quieter defaults, and an evaluation that checks completed edits. This release implements the accepted September product review.

JSON schema remains 0.8.0. No finding identity format changes in this release. Optional context status/coverage and scan ranking-policy fields are documented in JSON schema.

Four detector ids move off by default: boolean_naming_drift, boolean_naming_drift.py, accessible_interaction_risk and design_token_escape. Enable them explicitly when useful; adding only optional ids retains other defaults. parallel_destination stays optional. Optional defaults are reported through coverage instead of repeated stderr messages. Findings and gates can change because defaults and hotpath calibration changed; review the new results before updating CI decisions.

For pins orphaned by earlier claim/discriminator changes, preview crimes migrate-pins --format json, review the proposed destinations and apply the reviewed file with --apply. Reasons, owners, dates, dispositions and feedback expiry are preserved. Missing or ambiguous subjects are not silently deleted or re-decided. Migration guide.

context now uses the same repository analysis as scan, including correctness/authority, manifests, agent configuration, asset detectors, claim disables and score inputs. It includes findings anchored elsewhere that explicitly name the target in related_files. Resolved importing tests and incoming/outgoing imports lead context discovery; filename and source-text matching remain fallback hints.

analysis_status and coverage diagnostics distinguish completed, partial and unanalysed briefings. An empty list is not evidence of safety. Use the same explicit --root ., configuration and clock for comparable reports. Full corpus analysis precedes working-set selection, so scoping output does not promise a cheaper analysis. Regression tests cover every authority and agent-hygiene finding on risky-service, claim disables, alias-importing tests, excluded targets and incomplete parsing.

Human file ranking uses the strongest finding plus diminishing support from distinct (type, claim) pairs, replacing an unbounded sum. Thirty instances of one mild claim no longer win through count alone. Scores are computed in core; --no-recency is respected by human file grouping too. Individual observations remain available in JSON and --all.

JS synchronous I/O requires request/render evidence; Python also accepts an async function where event-loop blocking is evidenced. An ordinary domain function is insufficient. swallowed_error remains visible while prioritizing sensitive consequences over documented/generic fallback. Tests retain deliberate fallback observations and distinguish them from failed writes. Scoring gives the actual formula and limits.

The stable type design_token_escape now has the honest charge Raw Style Concentration. It does not claim to have found a token system. Naming and accessibility checks remain available for explicit reviews.

Measurement0.27 build0.28 build
Mean ranking nDCG, all 57 scored scenarios0.45730.4770
Mean ranking nDCG, same 32 deep scenarios0.36820.3895
Paired edit acceptance, three tasks per armWithout crimes: 3/3With crimes: 3/3
Paired runs with unrelated edits00

Ranking comparisons use the same revised scenarios, fixture sources and reference clock. Six scenarios now label exact claims/subjects; two obsolete default scenarios are retired and the frontend task is narrowed. Those are measurement changes, not passes. Most remaining labels are still type-only; the deep aggregate is dominated by the messy-app fixture and one fixture sits close to its depth threshold. Lower finding counts partly reflect intentional default removals and do not alone prove better precision.

The actual-edit trial uses isolated source copies, alternating arms and acceptance tests installed after editing. The tasks reject unedited source. The result is a tie, from one run per pair on simple tasks using the installed Codex CLI’s default model. It does not demonstrate a general agent-performance gain. More representative tasks, repetitions and a pinned model are needed. Methods and committed results.

README and agent instructions focus on the current workflow; release history lives in release notes. Current command/default/schema facts and landing output examples are generated from the built CLI and a source-only fixture (independent of clone depth), then checked by pnpm verify. The scoring guide documents actual fallback and blast-radius math. Strategy and roadmap now distinguish current implementation from unmet historical plans and unproven adoption goals.

init installs aligned skills and stops creating the inert Codex hook settings placeholder. Existing local files are untouched. The pack smoke handles npm’s array and keyed-object pack --json formats and exercises the new migration command as well as the packaged Python WASM path.

Context still analyzes the repository for each call. A single timing pair on crimes itself (context packages/core/src/scan.ts --root .) took 3.52s on 0.27 versus 8.99s on 0.28. The complete briefing has a real latency cost; this is an observation, not a controlled performance estimate. Caching and shared parsed-input reuse need separate design and measurement. Import/test discovery is not behavioral coverage. Homebrew, standalone binaries, crimes ask and further weak-test granularity remain deferred. Recency remains enabled with an explicit opt-out, not a claim of proven causal value.

  • pnpm verify on Node 26.7.0: format, lint, build, generated docs, typecheck and 2,458 tests pass.
  • Website builds 77 documentation pages; release metadata, schema, language/family claims and required pages pass the build verifier.
  • Clean-tree package smoke passes on Node 26.7.0: npm pack, temporary install, command execution and the packaged Python WASM/import-graph path.
  • All 60 current scenarios reconcile against 16 fixture scans.
  • Historical replay re-scores 98 responses. Four responses to the two retired scenarios are explicitly skipped; its percentage is not directly comparable to the prior population.
  • The self-scan introduces no new high-severity findings compared with the pre-edit scan. 54 triage fingerprints are migrated; metadata is verified unchanged. Ten unreported pins are retained rather than declared fixed.