Skip to content

fix(install): validate git/glibc upfront and tighten Gemini hook checks - #54

Merged
sagnik11 merged 1 commit into
mainfrom
fix/installer-prereqs-and-gemini-hooks
Sep 1, 2026
Merged

fix(install): validate git/glibc upfront and tighten Gemini hook checks#54
sagnik11 merged 1 commit into
mainfrom
fix/installer-prereqs-and-gemini-hooks

Conversation

@sagnik11

@sagnik11 sagnik11 commented Sep 1, 2026

Copy link
Copy Markdown
Member

Summary

  • Installers (install.sh, install.ps1, npm/install.js) now check for git and Linux glibc 2.35+ before downloading, and fail with a clear message when the binary cannot execute (e.g. Ubuntu 20.04 / older WSL2 GLIBC mismatch) instead of reporting success
  • Gemini hook_status now requires tools.enableHooks, BeforeTool, and AfterTool catch-all checkpoints before reporting hooks as up to date
  • install-hooks warns to restart agents even when hooks are already up to date, and surfaces missing git more clearly
  • Documented system requirements and autter doctor vs autter debug in INSTALL.md/README.md

Test plan

  • cargo test gemini:: --lib (32 passed)
  • bash -n install.sh
  • Run curl -fsSL install.sh | bash on Ubuntu 22.04 — succeeds
  • Run installer on Ubuntu 20.04 — fails upfront with glibc guidance
  • Run installer without git — fails with git requirement message
  • autter install-hooks with Gemini running — shows restart warning even when hooks are up to date

Made with Cursor


View code changes stack in Autter

Summary

Summary generated by Autter.
Harden installation by validating required Git and Linux glibc versions before downloading or configuring Autter, and tighten Gemini hook detection so incomplete configurations are repaired rather than reported as current. Documentation now states the supported platform prerequisites and recommended post-install verification commands.

Changes

  • Add upfront Git availability/version checks across the shell, PowerShell, and npm installation paths, requiring Git 2.22+.
  • Add Linux glibc 2.35+ validation for the bash and npm installers, with actionable guidance for unsupported distributions and older WSL environments.
  • Verify that the downloaded npm binary can execute after installation, in addition to release checksum validation.
  • Update Windows installation validation to fail early when Git prerequisites are not met and verify the final executable after installation.
  • Refine install-hooks prerequisite messaging so Git-version warnings are surfaced consistently during hook setup.
  • Strengthen Gemini settings inspection:
    • Treat any existing Autter checkpoint hook as installed for status reporting.
    • Require tools.enableHooks plus Autter hooks in both catch-all ("*") BeforeTool and AfterTool blocks before reporting the integration as up to date.
    • Add regression coverage for partial and legacy Gemini hook configurations.
  • Document Git, glibc, operating-system, and Node.js requirements in README.md and INSTALL.md, including autter doctor and autter debug verification guidance.

Breaking changes: Installations now fail early on Git versions below 2.22 and Linux systems with glibc below 2.35. This intentionally removes support for older Linux distributions and WSL environments that cannot run the distributed binary reliably.

Acceptance Criteria

  • The bash, PowerShell, and npm installers stop with actionable guidance when Git is missing or does not meet the 2.22 minimum.
  • Linux bash and npm installs reject detected glibc versions older than 2.35 before completing installation.
  • The npm bootstrapper verifies release checksums when available and confirms the downloaded native binary can run.
  • Gemini is reported as up to date only when hooks are enabled and both catch-all BeforeTool and AfterTool blocks contain an Autter checkpoint command.
  • Existing Gemini configurations with only a partial, non-catch-all, or legacy Autter hook are identified as needing an update.
  • Installation documentation accurately describes supported platforms, prerequisites, and autter doctor/autter debug verification.

Test Plan

  • Run task test to execute the Rust test suite, including Gemini hook-status regression tests.
  • Run task build to confirm the CLI compiles.
  • Run task fmt and task lint.
  • On a supported Linux host, run the bash installer and confirm Git/glibc checks pass before download and setup.
  • Simulate missing or outdated Git for each installer path and confirm installation exits with the documented remediation message.
  • Run npm install -g @autter/cli with a supported Node.js version and confirm the downloaded binary passes checksum and --version verification.
  • Use Gemini settings containing only one Autter hook or a non-"*" matcher, run autter install-hooks, and confirm both catch-all hook blocks and tools.enableHooks are configured.
  • Run autter doctor after installation to validate the installed CLI, proxy, hooks, and checkpoint round-trip.

Rollback Plan

  • Revert this change to restore the previous installer behavior and Gemini hook-status logic.
  • For users blocked by the new Linux prerequisite check, use a supported distribution or run Autter in an ubuntu:22.04 container as documented.
  • If Gemini hook updates cause unexpected behavior, restore the prior ~/.gemini/settings.json from its backup/version-controlled copy, then rerun the previous Autter release’s hook installer if needed.
  • Republish the prior npm package and release installer artifacts if a regression affects distributed installs.

Related Issues

No linked issue was identified.

Written for commit f93ebd6. Summary will update on new commits.

…not run

Harden installers so Ubuntu 20.04/WSL2 glibc mismatches and missing git are caught before reporting success. Tighten Gemini hook status checks and restart guidance so attribution gaps are easier to diagnose.

Co-authored-by: Cursor <cursoragent@cursor.com>

@autter-dev autter-dev Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔴 Autter review in progress — running security, correctness & dependency checks on this PR. Follow live step-by-step progress on the autter/review-gate check in the merge box. Merge is blocked until the gate completes; Autter approves automatically when the review comes back clean, and releases this hold with a neutral review when it finds non-blocking issues.

@autter-dev autter-dev Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Autter posted 1 finding(s) as review threads below (🟠 1). Each carries a copy-paste AI fix prompt.

Comment thread npm/install.js

function checkGit() {
try {
execFileSync('git', ['--version'], { encoding: 'utf8', timeout: 10_000, stdio: 'pipe' });

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟠 [ai] Git prerequisite check does not enforce the minimum supported version — Risk: 74/100

checkGit() runs git --version but does not parse its output or reject versions older than the documented Git 2.22 minimum. A runnable unsupported Git installation therefore passes the installer prerequisite check. Parse the reported version and emit the existing actionable install message when it is below 2.22.

⚠ Downstream affected — if this fails, it cascades to the usage that depends on this file:

  • Functions/symbols: fetchBuffer, ensureBinary, verifyChecksum, reportInstallPing, binaryDest, installDir
  • Dependent files: npm/bin/autter.js, node:crypto, node:fs, node:os, node:path, node:child_process, npm/package.json
  • Scopes: @autter/cli
🛠 AI fix prompt (copy & paste into your coding agent)
Either parse the reported version and compare it against the required minimum, or make the prerequisite check consistent with the rest of the installer by failing fast when the detected version is below 2.22.

Flagged by Autter security & observability checks.

@autter-dev

autter-dev Bot commented Sep 1, 2026

Copy link
Copy Markdown

🚦 Pre-merge checks · ⚠️ 20 warning, ✅ 150 passed

Needs attention

Check Status Explanation
Silent exception swallowing ⚠️ Warning 1 potential issue(s) detected (max risk 68/100): npm/install.js:128.
Idempotency key not detected ⚠️ Warning 1 potential issue(s) detected (max risk 60/100): npm/install.js:242.
Rate limiting not detected ⚠️ Warning 1 potential issue(s) detected (max risk 64/100): npm/install.js:256.
Batch size limit not detected ⚠️ Warning 1 potential issue(s) detected (max risk 56/100): src/commands/install_hooks.rs:489.
Infrastructure missing access logging ⚠️ Warning 1 potential issue(s) detected (max risk 26/100): src/commands/install_hooks.rs:745.
PII in logs ⚠️ Warning 1 potential issue(s) detected (max risk 34/100): src/commands/install_hooks.rs:800.
Missing linked tracker issue ⚠️ Warning 2 potential issue(s) detected (max risk 50/100): npm/install.js:104, README.md:57.
Missing CODEOWNERS reviewer approval ⚠️ Warning 4 potential issue(s) detected (max risk 79/100): npm/install.js:104, install.sh:280, install.ps1:338, src/commands/install_hooks.rs:556.
Source changes without matching tests ⚠️ Warning 7 potential issue(s) detected (max risk 73/100): npm/install.js:104, src/commands/install_hooks.rs:489, src/mdm/agents/gemini.rs:24, install.ps1:338, install.sh:280.
Migration missing rollback / down step ⚠️ Warning 1 potential issue(s) detected (max risk 41/100): install.sh:280.
Inconsistent error handling ⚠️ Warning 1 potential issue(s) detected (max risk 74/100): npm/install.js:151.
Unhandled edge case (null / empty / zero / boundary) ⚠️ Warning 1 potential issue(s) detected (max risk 74/100): npm/install.js:128.
OAuth callback / redirect handling changed ⚠️ Warning 1 potential issue(s) detected (max risk 8/100): src/mdm/agents/gemini.rs:24.
Code correctness issue ⚠️ Warning 1 finding(s) on changed lines.
Runtime error risk ⚠️ Warning 2 finding(s) on changed lines.
Simplifiable code ⚠️ Warning 1 finding(s) on changed lines.
Code duplication / DRY violation ⚠️ Warning 2 finding(s) on changed lines.
Complexity Guard ⚠️ Warning 3 finding(s) on changed lines.
Bundle Size Monitor ⚠️ Warning 2 finding(s) on changed lines.
Release Notes Curator ⚠️ Warning 4 finding(s) on changed lines.
✅ Passed checks (150)
Check Status Explanation
Too many files changed ✅ Passed Changed 7 file(s), within the limit of 50.
Too many lines changed ✅ Passed Changed 353 line(s), within the limit of 1000.
Too many unrelated chapters ✅ Passed 4 chapter(s) detected, within the limit of 6.
Generated files hiding real changes ✅ Passed Generated-file volume (0 lines) does not obscure the 353 hand-written line(s).
Missing PR context ✅ Passed PR context looks sufficient.
Mixed concerns (refactor + behavior change) ✅ Passed This PR is a cohesive installer/hook hardening change: prerequisite validation, binary execution checks, Gemini hook-status tightening, and docs updates all align around making installation and setup fail earlier and more accurately. It does not look like a refactor bundled with an unrelated behavior change.
Migration + app logic + UI combined in one PR ✅ Passed No database migration is present, so this guard cannot trip.
Sensitive data in logs ✅ Passed No sensitive data in logs issues detected.
Log injection ✅ Passed No log injection issues detected.
Missing audit logging ✅ Passed No missing audit logging issues detected.
Removed observability ✅ Passed No removed observability issues detected.
Unhandled promise rejection ✅ Passed No unhandled promise rejection issues detected.
Circuit breaker not detected ✅ Passed No circuit breaker not detected issues detected.
Stack trace leakage ✅ Passed No stack trace leakage issues detected.
Multi-write without detected transaction ✅ Passed No multi-write without detected transaction issues detected.
Possible TOCTOU in critical path ✅ Passed No possible toctou in critical path issues detected.
Possible non-atomic read-modify-write ✅ Passed No possible non-atomic read-modify-write issues detected.
Optimistic locking not detected ✅ Passed No optimistic locking not detected issues detected.
Rate limiting removed ✅ Passed No rate limiting removed issues detected.
Pagination not detected ✅ Passed No pagination not detected issues detected.
Publicly exposed storage ✅ Passed No publicly exposed storage issues detected.
Over-permissive IAM policy ✅ Passed No over-permissive iam policy issues detected.
Security group open to the internet ✅ Passed No security group open to the internet issues detected.
Unencrypted storage at rest ✅ Passed No unencrypted storage at rest issues detected.
Hardcoded secret in IaC ✅ Passed No hardcoded secret in iac issues detected.
Infrastructure misconfiguration ✅ Passed No infrastructure misconfiguration issues detected.
Deprecated Kubernetes API version ✅ Passed No deprecated kubernetes api version issues detected.
Compound IaC attack chain ✅ Passed No compound iac attack chain issues detected.
Prompt injection risk ✅ Passed No LLM/AI-integration code touched by this diff.
LLM output used in a dangerous sink ✅ Passed No LLM/AI-integration code touched by this diff.
Sensitive data in prompt or system-prompt leakage ✅ Passed No LLM/AI-integration code touched by this diff.
Over-privileged LLM tool / excessive agency ✅ Passed No LLM/AI-integration code touched by this diff.
Missing validation on an LLM-driven decision ✅ Passed No LLM/AI-integration code touched by this diff.
Unbounded LLM usage (denial-of-wallet) ✅ Passed No LLM/AI-integration code touched by this diff.
Table exposed without row-level security ✅ Passed No row-level-security-related code touched by this diff.
Over-broad row-level security policy ✅ Passed No row-level-security-related code touched by this diff.
Code path that bypasses row-level security ✅ Passed No row-level-security-related code touched by this diff.
Privileged database credential reachable from the client ✅ Passed No row-level-security-related code touched by this diff.
Privileged query without row-level scoping ✅ Passed No row-level-security-related code touched by this diff.
Template-default gradient styling ✅ Passed No added frontend pages or design-slop markers in this diff.
Interchangeable AI marketing copy ✅ Passed No added frontend pages or design-slop markers in this diff.
Placeholder content shipped to users ✅ Passed No added frontend pages or design-slop markers in this diff.
Emoji standing in for an icon system ✅ Passed No added frontend pages or design-slop markers in this diff.
Call-to-action that goes nowhere ✅ Passed No added frontend pages or design-slop markers in this diff.
Templated page composition ✅ Passed No added frontend pages or design-slop markers in this diff.
Merge-blocking marker left in the change ✅ Passed No pending-work markers added by this diff.
Known-defect marker shipped in code ✅ Passed No pending-work markers added by this diff.
Untracked TODO without an issue reference ✅ Passed No pending-work markers added by this diff.
Test disabled or left pending ✅ Passed No pending-work markers added by this diff.
PII or internals leaked in error response ✅ Passed No pii or internals leaked in error response issues detected.
PII stored without application-level encryption ✅ Passed No pii stored without application-level encryption issues detected.
User data stored without retention controls ✅ Passed No user data stored without retention controls issues detected.
PII sent to external / cross-border destination ✅ Passed No pii sent to external / cross-border destination issues detected.
Lockfile resolution / integrity tampered ✅ Passed No lockfile resolution / integrity tampered issues detected.
Dependency runs install-time lifecycle script ✅ Passed No dependency runs install-time lifecycle script issues detected.
Possible dependency-confusion attack ✅ Passed No possible dependency-confusion attack issues detected.
Lockfile resolves a dependency the manifest does not declare ✅ Passed No lockfile resolves a dependency the manifest does not declare issues detected.
Checked-in build artefact modified without source change ✅ Passed No checked-in build artefact modified without source change issues detected.
Dockerfile build-step is insecure ✅ Passed No dockerfile build-step is insecure issues detected.
External artefact pulled in without integrity pinning ✅ Passed No external artefact pulled in without integrity pinning issues detected.
Changed export, importer not updated ✅ Passed No changed export with an un-updated importer detected.
Missing security-team review on sensitive path ✅ Passed No missing security-team review on sensitive path issues detected.
Frontend importing database client directly ✅ Passed No frontend importing database client directly issues detected.
Route handler bypassing service layer ✅ Passed No route handler bypassing service layer issues detected.
Backend service importing UI module ✅ Passed No backend service importing ui module issues detected.
Cross-context internals import ✅ Passed No cross-context internals import issues detected.
Workspace package rule violation ✅ Passed No workspace package rule violation issues detected.
Inconsistent logging pattern ✅ Passed No inconsistent logging pattern issues detected.
Endpoint missing input validation ✅ Passed No endpoint missing input validation issues detected.
Multi-write without transaction wrapper ✅ Passed No multi-write without transaction wrapper issues detected.
New feature shipped without feature flag ✅ Passed No new feature shipped without feature flag issues detected.
Module placed in the wrong workspace package ✅ Passed No module placed in the wrong workspace package issues detected.
Direct env-var access bypasses config module ✅ Passed No direct env-var access bypasses config module issues detected.
Hallucinated import (package not installed) ✅ Passed No hallucinated import (package not installed) issues detected.
Nonexistent package (not found in registry) ✅ Passed No nonexistent package (not found in registry) issues detected.
Call to function that does not exist ✅ Passed No call to function that does not exist issues detected.
Generic placeholder identifier in production logic ✅ Passed No generic placeholder identifier in production logic issues detected.
Repetitive boilerplate (duplicated block) ✅ Passed No repetitive boilerplate (duplicated block) issues detected.
Overbroad try/catch swallowing all exceptions ✅ Passed No overbroad try/catch swallowing all exceptions issues detected.
TODO / FIXME on critical path ✅ Passed No todo / fixme on critical path issues detected.
Comment contradicts or fabricates code behaviour ✅ Passed No comment contradicts or fabricates code behaviour issues detected.
Abstraction defined but never used ✅ Passed No abstraction defined but never used issues detected.
Code style differs from rest of codebase ✅ Passed No code style differs from rest of codebase issues detected.
Established pattern ignored ✅ Passed No established pattern ignored issues detected.
Doc-copy code with insecure defaults ✅ Passed No doc-copy code with insecure defaults issues detected.
Dead code (defined but never referenced) ✅ Passed No dead code (defined but never referenced) issues detected.
Deprecated API call ✅ Passed No deprecated api call issues detected.
API pattern from wrong library version ✅ Passed No api pattern from wrong library version issues detected.
API endpoint removed ✅ Passed No api endpoint removed issues detected.
HTTP method changed (GET ↔ POST etc.) ✅ Passed No http method changed (get ↔ post etc.) issues detected.
New required field added to request ✅ Passed No new required field added to request issues detected.
Field removed from response schema ✅ Passed No field removed from response schema issues detected.
Response field type changed ✅ Passed No response field type changed issues detected.
HTTP status code changed ✅ Passed No http status code changed issues detected.
Auth requirement added / removed / changed ✅ Passed No auth requirement added / removed / changed issues detected.
Error response shape changed ✅ Passed No error response shape changed issues detected.
Pagination behaviour changed ✅ Passed No pagination behaviour changed issues detected.
Outbound webhook payload schema changed ✅ Passed No outbound webhook payload schema changed issues detected.
GraphQL field removed without deprecation ✅ Passed No graphql field removed without deprecation issues detected.
GraphQL enum value removed ✅ Passed No graphql enum value removed issues detected.
SQL injection ✅ Passed No sql injection issues detected.
Cross-site scripting (XSS) ✅ Passed No cross-site scripting (xss) issues detected.
Path traversal ✅ Passed No path traversal issues detected.
Command injection ✅ Passed No command injection issues detected.
Insecure deserialization ✅ Passed No insecure deserialization issues detected.
Weak cryptography ✅ Passed No weak cryptography issues detected.
Hardcoded secret ✅ Passed No hardcoded secret issues detected.
Insecure randomness for security material ✅ Passed No insecure randomness for security material issues detected.
Unsafe file upload ✅ Passed No unsafe file upload issues detected.
Missing input validation ✅ Passed No missing input validation issues detected.
Unsafe CORS configuration ✅ Passed No unsafe cors configuration issues detected.
Unsafe / open redirect ✅ Passed No unsafe / open redirect issues detected.
Missing CSRF protection ✅ Passed No missing csrf protection issues detected.
Unsafe cookie / session settings ✅ Passed No unsafe cookie / session settings issues detected.
Sensitive data exposure ✅ Passed No sensitive data exposure issues detected.
API key in source ✅ Passed No api key in source detected.
Access token in source ✅ Passed No access token in source detected.
Private key in source ✅ Passed No private key in source detected.
Database connection URL with embedded credentials ✅ Passed No database connection url with embedded credentials detected.
Cloud credential in source ✅ Passed No cloud credential in source detected.
Webhook signing secret in source ✅ Passed No webhook signing secret in source detected.
OAuth client secret in source ✅ Passed No oauth client secret in source detected.
JWT signing secret in source ✅ Passed No jwt signing secret in source detected.
Hardcoded password ✅ Passed No hardcoded password detected.
Auth middleware removed from route ✅ Passed No auth middleware removed from route issues detected.
Route protection changed (protected → public) ✅ Passed No route protection changed (protected → public) issues detected.
Permission / RBAC check removed ✅ Passed No permission / rbac check removed issues detected.
Required role weakened ✅ Passed No required role weakened issues detected.
Admin-only route exposed to lower privilege ✅ Passed No admin-only route exposed to lower privilege issues detected.
Token validation skipped in middleware chain ✅ Passed No token validation skipped in middleware chain issues detected.
JWT verification weakened or changed ✅ Passed No jwt verification weakened or changed issues detected.
Session expiration / TTL changed ✅ Passed No session expiration / ttl changed issues detected.
Password reset flow changed ✅ Passed No password reset flow changed issues detected.
Webhook endpoint missing signature verification ✅ Passed No webhook endpoint missing signature verification issues detected.
Public route touches private/PII data ✅ Passed No public route touches private/pii data issues detected.
Frontend performance issue ✅ Passed No additional explanation was reported.
Frontend security issue ✅ Passed No additional explanation was reported.
Frontend correctness issue ✅ Passed No additional explanation was reported.
Accessibility issue ✅ Passed No additional explanation was reported.
Frontend maintainability issue ✅ Passed No additional explanation was reported.
Resource leak risk ✅ Passed No additional explanation was reported.
Data integrity risk ✅ Passed No additional explanation was reported.
Maintainability issue ✅ Passed No additional explanation was reported.
Co-change coupling ✅ Passed No additional explanation was reported.
Redundant alias / duplicate import ✅ Passed No additional explanation was reported.
Redundant type construct ✅ Passed No additional explanation was reported.
Unnecessary type assertion ✅ Passed No additional explanation was reported.
Module smell ✅ Passed No additional explanation was reported.
Excessive complexity ✅ Passed No additional explanation was reported.
Dead export (no callers) ✅ Passed No additional explanation was reported.

This comment is updated automatically whenever Autter reviews a new PR revision.

@autter-dev

autter-dev Bot commented Sep 1, 2026

Copy link
Copy Markdown
⚠️ 2 unconfirmed finding(s) — flagged by a detector but not proven by Autter's verification pass

Inline comments are reserved for findings that survived verification. These are plausible but could not be confirmed from the available context, so they are listed here as FYIs instead — review the ones that look real to you.

  • 🟡 Missing CODEOWNERS reviewer approval (risk 49/100) — install.ps1:338 — No CODEOWNERS file, branch-protection configuration, or PR approval metadata is provided. The supplied source graph cannot establish whether a CODEOWNERS-backed review is required or whether it occurred.
  • 🟡 Missing CODEOWNERS reviewer approval (risk 49/100) — src/commands/install_hooks.rs:556 — No CODEOWNERS file, pull-request approval state, or repository branch-protection configuration is provided, so it is not possible to determine whether a required code-owner approval is missing.
🔇 35 finding(s) suppressed as likely false positives by Autter's verification pass

These were flagged by a detector but a second, full-file verification judged them not to be real issues. Listed here for transparency — review if you disagree.

  • 🟡 Infrastructure missing access logging (risk 26/100) — src/commands/install_hooks.rs:745 — This is a local CLI user-facing restart warning, not infrastructure access logging. Replacing the GitHub issue URL with autter doctor/autter debug does not remove hook-install error handling, telemetry, or an audit trail. The full installer flow still records per-tool install results and errors for metrics, prints hook setup failures directly, and the documented diagnostics commands are the in
  • 🟡 PII in logs (risk 34/100) — src/commands/install_hooks.rs:800 — The changed warning writes only fixed, generic text stating that git was not found and instructing the user to install git 2.22+. It includes no user-controlled values, paths, command output, identifiers, or other PII.
  • 🟠 Idempotency key not detected (risk 60/100) — npm/install.js:242 — reportInstallPing is reached only after a successful fresh download. On a normal retry after the binary has been installed, ensureBinary() detects the existing destination and returns downloaded: false before the ping path. The ping also catches and suppresses its own network failures, so a failed telemetry request does not cause the installer to retry that path. No idempotency key is requir
  • 🟠 Silent exception swallowing (risk 68/100) — npm/install.js:128 — checkLinuxGlibc intentionally treats an unavailable or unparsable ldd as inconclusive rather than supported. A detected glibc version below 2.35 is rethrown and stops this install attempt, while an inconclusive probe proceeds to verifyBinaryRuns(dest) after download. That verification executes the binary, removes it if it cannot run, and emits a specific incompatible-glibc error when the run
  • 🟠 Batch size limit not detected (risk 56/100) — src/commands/install_hooks.rs:489 — agents_for_restart is populated only while iterating get_all_installers(), the fixed built-in installer registry, and each entry contributes its static process_names(). It does not accept a user-supplied or remotely supplied batch/list, so an item-count limit is not applicable.
  • 🟠 Rate limiting not detected (risk 64/100) — npm/install.js:256 — This is a locally invoked npm postinstall script, not a network-facing service that accepts untrusted requests. Its network activity is bounded to a user-initiated install: ensureBinary() returns without downloading or pinging when the requested binary version is already present, including all existing installs for the latest tag. Repeated invocations therefore do not repeatedly perform downlo
  • 🟠 Inconsistent error handling (risk 74/100) — npm/install.js:151 — _npm/install.js is a standalone Node.js postinstall bootstrapper, not Rust application code using AutterError. Its existing functions consistently throw native Error values, and main() intentionally catches and reports all failures because the documented postinstall contract is to never fail npm install and defer retrying to bin/autter.js. The new checks follow that established file-local pattern; _
  • 🟠 Unhandled edge case (null / empty / zero / boundary) (risk 74/100) — npm/install.js:128 — checkLinuxGlibc() explicitly distinguishes its own unsupported-version error from probe failures: the catch rethrows whenever err.message includes Unsupported glibc. Therefore a parsed glibc version below 2.35 aborts the postinstall preflight path and is not swallowed. Only failures to invoke or parse ldd are intentionally deferred to verifyBinaryRuns() after download.
  • 🟡 OAuth callback / redirect handling changed (risk 8/100) — src/mdm/agents/gemini.rs:24 — The stricter status criteria are intentional and necessary: the installer now configures tools.enableHooks plus catch-all BeforeTool and AfterTool checkpoints, and the code explicitly documents that post-edit AfterTool is required for AI attribution. Existing BeforeTool-only configurations are correctly identified as incomplete; install_hooks_at migrates them by adding the missing catch-
  • 🔴 Runtime error risk (risk 83/100) — npm/install.js:259 — The handler does not silently swallow the error: it emits the specific failure via console.warn and intentionally returns before ensureBinary or downstream installation work can proceed. This is the documented postinstall contract in main: npm postinstall must never fail the surrounding npm install, with the launcher retrying binary installation on first use.
  • 🟠 Runtime error risk (risk 73/100) — src/commands/install_hooks.rs:800 — warn_if_git_version_too_old returns (), so the new early return only exits the warning helper and cannot abort install-hooks. Also, Command::output() returns Err only when spawning git fails; an unparseable git --version stdout is handled by parse_git_version in the successful-output arm as None, reaching the existing fallback warning path.
  • 🟠 Code correctness issue (risk 73/100) — src/mdm/agents/gemini.rs:42 — The changed behavior is intentional and required by the installer’s current contract: installation explicitly enables tools.enableHooks and installs attribution checkpoint commands in both BeforeTool and AfterTool catch-all blocks. The code comment and dedicated test (c2b_before_tool_only_not_up_to_date) establish that a BeforeTool-only configuration is deliberately considered incomplete b
  • 🟡 Code duplication / DRY violation (risk 26/100) — src/mdm/agents/gemini.rs:49 — The functions intentionally implement different predicates: any_block_has_autter checks all matcher blocks, while catch_all_has_autter must first restrict the search to matcher == "*". The shared JSON access is small and keeping each complete predicate local avoids a more generic traversal abstraction for only two call sites.
  • 🟡 Simplifiable code (risk 24/100) — npm/install.js:128 — The broad catch is intentional fallback behavior: an unavailable or unparseable ldd is not treated as authoritative, and ensureBinary() immediately calls verifyBinaryRuns(dest) after every download. That execution check removes an unusable binary and reports glibc/runtime failures. The shell installer follows the same pattern by returning when ldd is unavailable or yields no parseable vers
  • 🟡 Code duplication / DRY violation (risk 22/100) — src/commands/install_hooks.rs:559 — The three collections occur in distinct installation outcomes with intentionally different eligibility and deduplication semantics: a hook update always records the agent, an already-current hook avoids duplicate insertion, and extras only record an agent when an extra changed. Extracting the small process-name conversion would not remove those necessary branch-specific checks and is not a demonst
  • 🟠 Missing linked tracker issue (risk 50/100) — npm/install.js:104 — The repository convention requires referencing related issues only when applicable. No evidence establishes that this installation fix has a related tracker issue, so the absence of an issue reference is not a policy violation.
  • 🟠 Source changes without matching tests (risk 66/100) — npm/install.js:104 — No repository rule requires every source change to add or modify a sibling test. The installer changes are guarded by non-fatal postinstall error handling and mirror the validation behavior implemented in the shell and PowerShell installers; absence of a changed test file alone is not a demonstrable defect.
  • 🟠 Source changes without matching tests (risk 73/100) — src/commands/install_hooks.rs:489 — This is a process-policy observation rather than a reachable code defect. The provided coding rules require running the test suite but do not require a sibling test file for every source change, and the PR also changes related agent integration code. No behavioral failure is demonstrated.
  • 🟠 Source changes without matching tests (risk 73/100) — src/mdm/agents/gemini.rs:24 — The changed source file contains an in-file #[cfg(test)] module, and the diff explicitly modifies the existing catch-all test and adds tests for the two new conditions: missing AfterTool and tools.enableHooks=false.
  • 🟠 Missing linked tracker issue (risk 50/100) — README.md:57 — The repository convention requires referencing related issues only when applicable; the provided evidence neither identifies a related tracker issue nor establishes that one exists. The README documentation change does not itself require a linked issue.
  • 🟠 Missing CODEOWNERS reviewer approval (risk 79/100) — npm/install.js:104 — The repository rules do not require CODEOWNERS or CODEOWNERS approval. The provided context identifies npm/install.js as a single-owner file deserving extra care, but establishes no mandatory ownership-review policy that this PR violates.
  • 🟠 Missing CODEOWNERS reviewer approval (risk 70/100) — install.sh:280 — The provided repository rules do not require CODEOWNERS approval for installer changes, and no CODEOWNERS configuration or PR-review metadata is provided that could establish such a requirement. Single-owner status is noted as an extra-care signal, not an approval policy violation.
  • 🟠 Source changes without matching tests (risk 64/100) — install.ps1:338 — The repository rules provided require running the test suite but do not require a test update for every source change, and no PowerShell installer test convention or harness is shown. The new checks follow the corresponding installer behavior already implemented in install.sh and npm/install.js, so the absence of a sibling PowerShell test alone is not a demonstrated defect.
  • 🟠 Source changes without matching tests (risk 63/100) — install.sh:280 — The provided coding rules require running the test suite by default but do not require a sibling test-file change for every source change. The absence of a shell-test update is not, by itself, a confirmed defect or policy violation.
  • 🟠 Source changes without matching tests (risk 61/100) — src/commands/install_hooks.rs:556 — The finding identifies only an alleged lack of a sibling test-file modification, not a defect in the restart-warning logic. The repository rules supplied do not mandate sibling tests for each source edit, and the provided code does deduplicate agents before adding extras-only restart tracking. No missed or duplicate warning is demonstrated.
  • 🟠 Source changes without matching tests (risk 58/100) — src/mdm/agents/gemini.rs:1 — The matcher tightening is directly covered by modified and newly added unit tests in src/mdm/agents/gemini.rs: the up-to-date case requires both catch-all hooks with enableHooks=true, while BeforeTool-only and disabled-enableHooks configurations are asserted not up to date.
  • 🟡 Migration missing rollback / down step (risk 41/100) — install.sh:280 — This is an installer prerequisite/runtime validation change, not a schema or data migration. A migration-style down/rollback step is not applicable; reverting the installer version restores the prior behavior.
  • 🔴 warn: verifyBinaryRuns adds a 15+ path by combining process exec, cleanup, and GLIBC-specific error handling (risk 84/100) — npm/install.js:134 — verifyBinaryRuns has a small, linear responsibility: execute the downloaded binary, remove it on failure, and provide a more actionable GLIBC error when applicable. The cleanup is deliberately best-effort and the control flow is limited; no evidence shows this violates a repository complexity threshold or creates a functional defect.
  • 🔴 warn: checkLinuxGlibc uses nested try/catch and version parsing in one function (risk 84/100) — npm/install.js:114 — checkLinuxGlibc is a short, purpose-specific installer guard. It intentionally permits unavailable or unparseable ldd output and relies on verifyBinaryRuns as the definitive post-download compatibility check. The platform check, parsing, and selective rethrow are necessary parts of that behavior, not evidence of a defect.
  • 🔴 Glibc check can be silently swallowed (risk 84/100) — npm/install.js:128 — The catch explicitly rethrows errors whose message includes "Unsupported glibc". The old-version branch throws exactly such an Error, so it is not swallowed; only ldd execution/parsing failures are intentionally deferred to the post-download binary verification.
  • 🟠 warn: restart-warning block now spans multiple responsibilities in install_hooks (risk 73/100) — src/commands/install_hooks.rs:701 — The restart logic remains a localized, linear post-install reporting block. Runtime detection, de-duplication, and message selection are necessary parts of issuing an accurate restart notice, and the code keeps the collection/update logic adjacent to each install outcome. No functional defect or violated project convention is shown.
  • 🟠 Hook status now depends on enableHooks even for installed hooks (risk 55/100) — src/mdm/agents/gemini.rs:42 — The changed definition of hooks_up_to_date is intentional and necessary: hooks configured while tools.enableHooks is false will not run, so they are not functionally up to date. install_hooks_at explicitly enables this setting alongside installing both BeforeTool and AfterTool catch-all hooks, and the dedicated c2c_enable_hooks_disabled_not_up_to_date test documents and enforces this behav
  • 🟠 Restart warning now triggers for already-installed hooks without checking whether they changed (risk 52/100) — src/commands/install_hooks.rs:556 — This is intentional behavior, explicitly documented in the code: hooks that are already current on disk may not have been loaded by an agent that was open during setup. The warning is emitted only for non-dry-run installs and only if a relevant configured agent process is actually found running; the fallback guidance likewise states the condition ('If any coding agent was open during hook setup').
  • 🟡 Synchronous ldd --version glibc probe in install path (risk 34/100) — npm/install.js:114 — The synchronous probe is a bounded, one-time postinstall prerequisite check with a 10-second timeout. Missing or failing ldd is intentionally non-fatal—the catch falls through to verifyBinaryRuns after download—so minimal distros are not rejected merely because ldd is absent. No meaningful performance or brittleness defect is established.
  • 🟡 Added git-missing stderr path is runtime-only (risk 13/100) — src/commands/install_hooks.rs:800 — The finding itself establishes that this is a runtime stderr message in Rust and does not affect any shipped frontend JS/CSS bundle. It is not a frontend payload or performance regression.

@autter-dev autter-dev Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Autter completed PR review for #54: 3 finding(s) remain below the merge-blocking bar, so this review stays neutral rather than approving. (Also detected: 35 finding(s) dismissed as likely false positives by verification.) See the findings below; the task checklist follows as the review's final comment.

@autter-dev

autter-dev Bot commented Sep 1, 2026

Copy link
Copy Markdown

🤖 Release Notes Curator

Impact: patch — Improves installation prerequisite checks and ensures Gemini hook setup is correctly detected.

Changelog: Improved installer compatibility validation and Gemini hook detection to prevent unsupported setups and ensure required hooks are active.

Custom agent · runs after review · configured in Autter

@autter-dev autter-dev Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Autter posted 6 finding(s) as review threads below (🔴 3 · 🟠 3). Each carries a copy-paste AI fix prompt.

Comment thread install.sh
fi

# Verify the binary runs before reporting success (catches glibc mismatches, etc.).
INSTALLED_VERSION=$(verify_binary_runs "${INSTALL_DIR}/autter")

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔴 [ai] Preserve the prior CLI when runtime validation fails — Risk: 88/100

The installer atomically replaces ~/.autter/bin/autter before running the new executable. If --version then fails (for example, an OS/CPU loader incompatibility not identified by the glibc preflight, a corrupt local-binary override, or a quarantine/signing failure), verify_binary_runs deletes that newly installed path and exits. This also removes the only prior working CLI and leaves the existing ~/.local/bin/autter symlink dangling, so a failed upgrade converts a usable installation into a broken one. Validation needs to happen on the temporary artifact, or the displaced binary must be retained and restored on failure.

⚠ Downstream affected — if this fails, it cascades to the usage that depends on this file:

  • Dependent files: install.sh
🛠 AI fix prompt (copy & paste into your coding agent)
Before replacing the installed executable, validate the downloaded temporary artifact (including executable mode) or move the existing executable to a backup. If validation fails, remove only the candidate and restore the backup; only update the installed path and symlinks after successful validation.

Flagged by Autter security & observability checks.

Comment thread install.ps1
$installedVersion = & $finalExe --version 2>&1 | Out-String
$installedVersion = $installedVersion.Trim()
if ($LASTEXITCODE -ne 0 -or [string]::IsNullOrWhiteSpace($installedVersion)) {
Remove-Item -Force -ErrorAction SilentlyContinue $finalExe

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔴 [ai] Restore the previous Windows executable on validation failure — Risk: 88/100

Move-Item -Force overwrites the prior autter.exe before the new --version validation. When that command fails or returns blank output, both failure branches delete $finalExe and exit rather than rolling back. Thus an incompatible or otherwise non-runnable release removes a functioning Autter CLI; moreover, when a git.exe shim already exists it is not refreshed because execution stops, leaving the install directory with the old shim but no autter.exe. The failure is detected but the multi-step replacement is not recovered.

⚠ Downstream affected — if this fails, it cascades to the usage that depends on this file:

  • Dependent files: install.ps1
🛠 AI fix prompt (copy & paste into your coding agent)
Validate the candidate file before replacing `$finalExe`, or rename the previous `$finalExe` to a backup and restore it in both validation-failure branches. Do not remove the old executable until the candidate has run successfully; update `git.exe` only after that successful commit point.

Flagged by Autter security & observability checks.

Comment thread npm/install.js
}
}

verifyBinaryRuns(dest);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔴 [ai] Do not delete the installed npm binary after a failed upgrade check — Risk: 86/100

ensureBinary replaces dest before invoking the new runtime check. On validation failure, verifyBinaryRuns unconditionally removes bin, then throws; main deliberately catches that error to keep npm install successful and tells the user that first run will retry. A prior working CLI has nevertheless been deleted. The npm launcher sees the missing file and attempts a network download on every invocation, so an offline user cannot run the previously installed version. The Windows rename fallback has the same destructive window: it removes dest before the replacement rename and does not restore it if that rename fails.

⚠ Downstream affected — if this fails, it cascades to the usage that depends on this file:

  • Dependent files: npm/install.js, npm/bin/autter.js
🛠 AI fix prompt (copy & paste into your coding agent)
Keep the old destination until a candidate has passed `--version`: validate a temporary executable before renaming, or retain and restore a backup when validation/replacement fails. In the Windows fallback, restore the old destination if the second rename fails. Only report success/defer-to-first-run after preserving a usable prior binary.

Flagged by Autter security & observability checks.

Comment thread install.sh
MIN_GLIBC_MINOR=35

# Require git before downloading — autter wraps git and cannot function without it.
check_git() {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟠 [ai] Enforce the documented minimum Git version before installing — Risk: 72/100

The new preflight only checks that git can be found, then the installer downloads, replaces, and reports success for any Git version. This accepts Git 2.21 or older even though this PR documents Git 2.22+ as a requirement and the CLI's own install-hooks path states that versions below 2.22 lack functionality Autter relies on. Thus a user with an old but executable Git gets a successful installation of a CLI that cannot operate correctly with its required trace/worktree behavior, rather than the intended upfront failure and remediation guidance.

⚠ Downstream affected — if this fails, it cascades to the usage that depends on this file:

  • Dependent files: install.sh, src/commands/install_hooks.rs
🛠 AI fix prompt (copy & paste into your coding agent)
Parse `git --version` in install.sh and reject versions below 2.22.0 before downloading or replacing the installed binary; retain the existing not-found error path.

Flagged by Autter security & observability checks.

Comment thread install.ps1

# git is required — autter wraps git and cannot function without it.
try {
$null = & git --version 2>&1

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟠 [ai] Reject old Git versions in the PowerShell installer — Risk: 72/100

The PowerShell preflight treats a successful git --version process as sufficient and never reads or compares its version. Consequently Windows users with Git older than 2.22 proceed through download and installation as successful, despite the requirement added by this PR and the CLI's explicit statement that Git below 2.22 will not work correctly. This makes the advertised upfront validation ineffective on the Windows install path.

⚠ Downstream affected — if this fails, it cascades to the usage that depends on this file:

  • Dependent files: install.ps1, src/commands/install_hooks.rs
🛠 AI fix prompt (copy & paste into your coding agent)
Capture and parse `git --version` in install.ps1, and invoke `Write-ErrorAndExit` when it is below 2.22.0, before any download or replacement.

Flagged by Autter security & observability checks.

Comment thread npm/install.js

function checkGit() {
try {
execFileSync('git', ['--version'], { encoding: 'utf8', timeout: 10_000, stdio: 'pipe' });

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟠 [ai] Make the npm Git preflight validate the minimum version — Risk: 72/100

checkGit only verifies that the git --version command exits successfully; its output is discarded. main relies on that check as its new up-front gate, so npm installation continues for Git 2.21 or older and can install a binary that the CLI later identifies as incompatible with required functionality. This is reachable both during postinstall and through the launcher fallback, because ensureBinary itself has no Git-version gate.

⚠ Downstream affected — if this fails, it cascades to the usage that depends on this file:

  • Dependent files: npm/install.js, npm/bin/autter.js, src/commands/install_hooks.rs
🛠 AI fix prompt (copy & paste into your coding agent)
Have `checkGit` parse the output from `git --version` and throw unless the version is at least 2.22.0. Apply the check to the launcher fallback as well, or put it in `ensureBinary`, so skipped postinstall cannot bypass it.

Flagged by Autter security & observability checks.

@autter-dev autter-dev Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Autter posted 2 finding(s) as review threads below (🟠 2). Each carries a copy-paste AI fix prompt.

Comment thread npm/install.js
const minor = Number(match[2]);
if (major < 2 || (major === 2 && minor < 35)) {
throw new Error(
`Unsupported glibc version (${major}.${minor}). autter requires glibc 2.35+ (Ubuntu 22.04+, Debian 12+, Fedora 36+). ` +

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟠 [deterministic] Biome: lint/style/useTemplate — Risk: 55/100

Template literals are preferred over string concatenation.

🛠 AI fix prompt (copy & paste into your coding agent)
Fix the Biome `lint/style/useTemplate` issue at npm/install.js:124: Template literals are preferred over string concatenation.

Flagged by Autter security & observability checks.

Comment thread npm/install.js
}
if (process.platform === 'linux' && detail.includes('GLIBC')) {
throw new Error(
`The autter binary could not run on this system (incompatible glibc).\n${detail}\n\n` +

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟠 [deterministic] Biome: lint/style/useTemplate — Risk: 55/100

Template literals are preferred over string concatenation.

🛠 AI fix prompt (copy & paste into your coding agent)
Fix the Biome `lint/style/useTemplate` issue at npm/install.js:147: Template literals are preferred over string concatenation.

Flagged by Autter security & observability checks.

@autter-dev autter-dev Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Autter posted 3 finding(s) as review threads below (🟡 3). Each carries a copy-paste AI fix prompt.

Comment thread INSTALL.md
### System requirements

- **git** 2.22 or newer (required)
- **Linux**: glibc 2.35 or newer (Ubuntu 22.04+, Debian 12+, Fedora 36+). Ubuntu 20.04 and older WSL2 distros are not supported natively — use a newer WSL distro or run inside an `ubuntu:22.04` Docker container

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 [deterministic] markdownlint: MD013 — Risk: 30/100

Line length: Expected: 80; Actual: 210

🛠 AI fix prompt (copy & paste into your coding agent)
Fix the markdownlint `MD013` issue at INSTALL.md:43: Line length: Expected: 80; Actual: 210

Flagged by Autter security & observability checks.

Comment thread INSTALL.md
autter debug # full support dump (always exits 0)
```

`autter doctor` runs end-to-end checks (git proxy, hooks, checkpoint round-trip). On v1.6.9 and earlier, use `autter debug` instead.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 [deterministic] markdownlint: MD013 — Risk: 30/100

Line length: Expected: 80; Actual: 132

🛠 AI fix prompt (copy & paste into your coding agent)
Fix the markdownlint `MD013` issue at INSTALL.md:62: Line length: Expected: 80; Actual: 132

Flagged by Autter security & observability checks.

Comment thread README.md

The npm package is a thin bootstrapper: it downloads the same release binary into `~/.autter/bin` and verifies its checksum, so hooks and self-updates work identically to the script installs.

**System requirements:** git 2.22+, Linux glibc 2.35+ (Ubuntu 22.04+), macOS 11+, Windows 10+, Node.js 18+ for the npm path. See [INSTALL.md](INSTALL.md) for details including Docker-based setup on older Linux distros.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 [deterministic] markdownlint: MD013 — Risk: 30/100

Line length: Expected: 80; Actual: 218

🛠 AI fix prompt (copy & paste into your coding agent)
Fix the markdownlint `MD013` issue at README.md:57: Line length: Expected: 80; Actual: 218

Flagged by Autter security & observability checks.

@autter-dev autter-dev Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Autter blocked this PR after its agentic checks (build/test/deep scans) completed: 3 confirmed correctness/runtime finding(s). See the findings below and the full PR review for details.

@autter-dev

autter-dev Bot commented Sep 1, 2026

Copy link
Copy Markdown

Autter task list

  • @sagnik11 Make shell and PowerShell upgrades rollback-safe (install.sh, install.ps1) - Stage the downloaded executable, retain the existing Autter binary until the staged binary passes --version, and restore the prior binary on every validation or replacement failure path.
  • @sagnik11 Preserve npm-installed binaries when upgrade validation fails (npm/install.js, npm/bin/autter.js) - Change the npm bootstrapper to validate a staged download before replacing dest, or atomically restore the prior binary when checksum or runtime verification fails, without deleting an existing installation.
  • @sagnik11 Enforce Git 2.22 or newer in every installer (install.sh, install.ps1, npm/install.js) - Parse git --version and reject missing, malformed, or versions below 2.22 with consistent actionable remediation in the bash, PowerShell, and npm installation paths.
  • @sagnik11 Add installer regression coverage and run platform validation (install.sh, install.ps1, npm/install.js) - Add automated tests or script-level fixtures for Git-version rejection and rollback after failed executable validation, then run task test, task build, task fmt, task lint, and supported Linux/Windows/npm installer smoke tests.
  • @sagnik11 Resolve documentation and review-gate follow-ups (README.md, INSTALL.md, install.ps1) - Wrap the reported overlong prerequisite and verification lines and obtain the required CODEOWNERS approvals for the Windows installer and hook-install behavior changes before merge.

Generated from PR diff, blast radius, and context.

Issues found

  1. Preserve the prior CLI when runtime validation fails · risk 88/100 · install.sh:531
  2. Restore the previous Windows executable on validation failure · risk 88/100 · install.ps1:622
  3. Do not delete the installed npm binary after a failed upgrade check · risk 86/100 · npm/install.js:242
  4. Git prerequisite check does not enforce the minimum supported version · risk 74/100 · npm/install.js:106
  5. Enforce the documented minimum Git version before installing · risk 72/100 · install.sh:285
  6. Reject old Git versions in the PowerShell installer · risk 72/100 · install.ps1:340
  7. Make the npm Git preflight validate the minimum version · risk 72/100 · npm/install.js:106
  8. Biome: lint/style/useTemplate · risk 55/100 · npm/install.js:124
  9. Biome: lint/style/useTemplate · risk 55/100 · npm/install.js:147
  10. Missing CODEOWNERS reviewer approval · risk 49/100 · install.ps1:338
  11. Missing CODEOWNERS reviewer approval · risk 49/100 · src/commands/install_hooks.rs:556
  12. markdownlint: MD013 · risk 30/100 · README.md:57
  13. markdownlint: MD013 · risk 30/100 · INSTALL.md:43
  14. markdownlint: MD013 · risk 30/100 · INSTALL.md:62

Also detected but not listed above: 35 finding(s) dismissed as likely false positives by verification — see the Autter review dashboard for their verdicts.

🛠 Fix options

Check one option and Autter will start a fix run for the unresolved issues above.

  • One PR with all unresolved fixes
  • One independent PR per unresolved issue

Checking a box triggers the fix run immediately — Autter comments back with the issues being fixed and the branch created for each.

@sagnik11
sagnik11 merged commit 97739c1 into main Sep 1, 2026
1 of 3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant