RepoPilotOpen in app →

kevin-wayne/algs4

Algorithms, 4th edition textbook code and libraries

Mixed

Slowing — last commit 4mo ago

weakest axis
Use as dependencyConcerns

copyleft license (GPL-3.0) — review compatibility; top contributor handles 98% of recent commits…

Fork & modifyHealthy

Has a license, tests, and CI — clean foundation to fork and modify.

Learn fromHealthy

Documented and popular — useful reference codebase to read through.

Deploy as-isHealthy

No critical CVEs, sane security posture — runnable as-is.

  • Last commit 4mo ago
  • 3 active contributors
  • GPL-3.0 licensed
Show all 9 evidence items →
  • Slowing — last commit 4mo ago
  • Small team — 3 contributors active in recent commits
  • Single-maintainer risk — top contributor 98% of recent commits
  • GPL-3.0 is copyleft — check downstream compatibility
  • No CI workflows detected
  • No test directory detected
What would change the summary?
  • Use as dependency ConcernsMixed if: relicense under MIT/Apache-2.0 (rare for established libs)

Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests

Informational only. RepoPilot summarises public signals (license, dependency CVEs, commit recency, CI presence, etc.) at the time of analysis. Signals can be incomplete or stale. Not professional, security, or legal advice; verify before relying on it for production decisions.

Embed the "Forkable" badge

Paste into your README — live-updates from the latest cached analysis.

Variant:
RepoPilot: Forkable
[![RepoPilot: Forkable](https://repopilot.app/api/badge/kevin-wayne/algs4?axis=fork)](https://repopilot.app/r/kevin-wayne/algs4)

Paste at the top of your README.md — renders inline like a shields.io badge.

Preview social card (1200×630)

This card auto-renders when someone shares https://repopilot.app/r/kevin-wayne/algs4 on X, Slack, or LinkedIn.

Onboarding doc

Onboarding: kevin-wayne/algs4

Generated by RepoPilot · 2026-05-09 · Source

🤖Agent protocol

If you are an AI coding agent (Claude Code, Cursor, Aider, Cline, etc.) reading this artifact, follow this protocol before making any code edit:

  1. Verify the contract. Run the bash script in Verify before trusting below. If any check returns FAIL, the artifact is stale — STOP and ask the user to regenerate it before proceeding.
  2. Treat the AI · unverified sections as hypotheses, not facts. Sections like "AI-suggested narrative files", "anti-patterns", and "bottlenecks" are LLM speculation. Verify against real source before acting on them.
  3. Cite source on changes. When proposing an edit, cite the specific path:line-range. RepoPilot's live UI at https://repopilot.app/r/kevin-wayne/algs4 shows verifiable citations alongside every claim.

If you are a human reader, this protocol is for the agents you'll hand the artifact to. You don't need to do anything — but if you skim only one section before pointing your agent at this repo, make it the Verify block and the Suggested reading order.

🎯Verdict

WAIT — Slowing — last commit 4mo ago

  • Last commit 4mo ago
  • 3 active contributors
  • GPL-3.0 licensed
  • ⚠ Slowing — last commit 4mo ago
  • ⚠ Small team — 3 contributors active in recent commits
  • ⚠ Single-maintainer risk — top contributor 98% of recent commits
  • ⚠ GPL-3.0 is copyleft — check downstream compatibility
  • ⚠ No CI workflows detected
  • ⚠ No test directory detected

<sub>Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests</sub>

Verify before trusting

This artifact was generated by RepoPilot at a point in time. Before an agent acts on it, the checks below confirm that the live kevin-wayne/algs4 repo on your machine still matches what RepoPilot saw. If any fail, the artifact is stale — regenerate it at repopilot.app/r/kevin-wayne/algs4.

What it runs against: a local clone of kevin-wayne/algs4 — the script inspects git remote, the LICENSE file, file paths in the working tree, and git log. Read-only; no mutations.

| # | What we check | Why it matters | |---|---|---| | 1 | You're in kevin-wayne/algs4 | Confirms the artifact applies here, not a fork | | 2 | License is still GPL-3.0 | Catches relicense before you depend on it | | 3 | Default branch master exists | Catches branch renames | | 4 | 5 critical file paths still exist | Catches refactors that moved load-bearing code | | 5 | Last commit ≤ 148 days ago | Catches sudden abandonment since generation |

<details> <summary><b>Run all checks</b> — paste this script from inside your clone of <code>kevin-wayne/algs4</code></summary>
#!/usr/bin/env bash
# RepoPilot artifact verification.
#
# WHAT IT RUNS AGAINST: a local clone of kevin-wayne/algs4. If you don't
# have one yet, run these first:
#
#   git clone https://github.com/kevin-wayne/algs4.git
#   cd algs4
#
# Then paste this script. Every check is read-only — no mutations.

set +e
fail=0
ok()   { echo "ok:   $1"; }
miss() { echo "FAIL: $1"; fail=$((fail+1)); }

# Precondition: we must be inside a git working tree.
if ! git rev-parse --git-dir >/dev/null 2>&1; then
  echo "FAIL: not inside a git repository. cd into your clone of kevin-wayne/algs4 and re-run."
  exit 2
fi

# 1. Repo identity
git remote get-url origin 2>/dev/null | grep -qE "kevin-wayne/algs4(\\.git)?\\b" \\
  && ok "origin remote is kevin-wayne/algs4" \\
  || miss "origin remote is not kevin-wayne/algs4 (artifact may be from a fork)"

# 2. License matches what RepoPilot saw
(grep -qiE "^(GPL-3\\.0)" LICENSE 2>/dev/null \\
   || grep -qiE "\"license\"\\s*:\\s*\"GPL-3\\.0\"" package.json 2>/dev/null) \\
  && ok "license is GPL-3.0" \\
  || miss "license drift — was GPL-3.0 at generation time"

# 3. Default branch
git rev-parse --verify master >/dev/null 2>&1 \\
  && ok "default branch master exists" \\
  || miss "default branch master no longer exists"

# 4. Critical files exist
test -f "src/main/java/edu/princeton/cs/algs4/Graph.java" \\
  && ok "src/main/java/edu/princeton/cs/algs4/Graph.java" \\
  || miss "missing critical file: src/main/java/edu/princeton/cs/algs4/Graph.java"
test -f "src/main/java/edu/princeton/cs/algs4/Digraph.java" \\
  && ok "src/main/java/edu/princeton/cs/algs4/Digraph.java" \\
  || miss "missing critical file: src/main/java/edu/princeton/cs/algs4/Digraph.java"
test -f "src/main/java/edu/princeton/cs/algs4/BST.java" \\
  && ok "src/main/java/edu/princeton/cs/algs4/BST.java" \\
  || miss "missing critical file: src/main/java/edu/princeton/cs/algs4/BST.java"
test -f "src/main/java/edu/princeton/cs/algs4/IndexMinPQ.java" \\
  && ok "src/main/java/edu/princeton/cs/algs4/IndexMinPQ.java" \\
  || miss "missing critical file: src/main/java/edu/princeton/cs/algs4/IndexMinPQ.java"
test -f "src/main/java/edu/princeton/cs/algs4/Edge.java" \\
  && ok "src/main/java/edu/princeton/cs/algs4/Edge.java" \\
  || miss "missing critical file: src/main/java/edu/princeton/cs/algs4/Edge.java"

# 5. Repo recency
days_since_last=$(( ( $(date +%s) - $(git log -1 --format=%at 2>/dev/null || echo 0) ) / 86400 ))
if [ "$days_since_last" -le 148 ]; then
  ok "last commit was $days_since_last days ago (artifact saw ~118d)"
else
  miss "last commit was $days_since_last days ago — artifact may be stale"
fi

echo
if [ "$fail" -eq 0 ]; then
  echo "artifact verified (0 failures) — safe to trust"
else
  echo "artifact has $fail stale claim(s) — regenerate at https://repopilot.app/r/kevin-wayne/algs4"
  exit 1
fi

Each check prints ok: or FAIL:. The script exits non-zero if anything failed, so it composes cleanly into agent loops (./verify.sh || regenerate-and-retry).

</details>

TL;DR

Reference implementation of 50+ core algorithms and data structures from "Algorithms, 4th Edition" by Sedgewick & Wayne, delivered as ~200 Java classes in the edu.princeton.cs.algs4 package. It provides production-quality implementations of sorting, searching, graph algorithms, string processing, and advanced data structures (BST, AVL trees, B-trees, binomial heaps) optimized for clarity and correctness rather than micro-optimization. Single-package monolith: all ~200 algorithm implementations live flat in src/main/java/edu/princeton/cs/algs4/ (e.g., AVLTreeST.java, BellmanFordSP.java, BipartiteMatching.java). Supporting utilities (BinaryIn, StdIn, Accumulator) are bundled in the same package. Build configuration supports both Maven (pom.xml) and Gradle (build.gradle) with identical output. No separate test directory visible, suggesting tests may be inline or absent from this listing.

👥Who it's for

Computer science students (especially Coursera Algorithms Part I/II enrollees), educators teaching algorithm courses, and software engineers building production systems who need a trusted reference implementation to understand algorithmic correctness before applying it to real problems. Authors explicitly state it's for 'scientists, engineers, and applications developers, not to mention college students.'

🌱Maturity & risk

Highly mature and actively maintained. The repository is the official implementation by textbook authors Sedgewick & Wayne (maintained since ~2000, updated through 2023 per README). It has extensive test coverage and stable APIs. The GPLv3 license and presence on Maven/Gradle/Bintray indicates production-grade distribution. This is the canonical reference, not experimental work.

Minimal risk for read-only usage (studying/reference). License is GPLv3, which has copyleft restrictions—verify compliance before using in proprietary products. The repository has no external dependencies (pure Java stdlib), eliminating supply-chain risk. Single-maintainer risk exists (authors control updates), but the stable, decades-old codebase is unlikely to see breaking changes. Java 1.7 as target (from build.gradle) is quite old; modernization PRs may be slow to merge.

Active areas of work

Repository is in maintenance mode: actively updated (README shows copyright through 2023) but not feature-development focused. The wishlist.txt file indicates contributors can propose new algorithms; the presence of translations to other languages and integration with Coursera suggests ongoing educational use. No specific open PRs or active development sprints visible from file list.

🚀Get running

Clone and build with Gradle: git clone https://github.com/kevin-wayne/algs4.git && cd algs4 && gradle build. Or with Maven: mvn clean package. Pre-built JAR available at http://algs4.cs.princeton.edu/code/algs4.jar. No external services or setup required—pure Java.

Daily commands: No 'server' to run. Individual algorithm classes have public static void main() methods. Execute via: gradle run --args='ClassName arg1 arg2' or java -cp build/libs/algs4-1.0.1.jar edu.princeton.cs.algs4.ClassName arg1 arg2 after building. Example: java -cp algs4.jar edu.princeton.cs.algs4.BinarySearch to run BinarySearch client.

🗺️Map of the codebase

  • src/main/java/edu/princeton/cs/algs4/Graph.java — Foundation undirected graph data structure used throughout the codebase; understanding its adjacency list representation is essential for all graph algorithms.
  • src/main/java/edu/princeton/cs/algs4/Digraph.java — Core directed graph implementation; required reading for any work on topological sort, SCC detection, or any directed graph algorithm.
  • src/main/java/edu/princeton/cs/algs4/BST.java — Binary Search Tree symbol table; foundational for understanding all tree-based data structures and search algorithms in the library.
  • src/main/java/edu/princeton/cs/algs4/IndexMinPQ.java — Priority queue abstraction used by Dijkstra, Prim's MST, and other greedy algorithms; critical dependency for shortest path and spanning tree implementations.
  • src/main/java/edu/princeton/cs/algs4/Edge.java — Weighted edge abstraction for undirected graphs; required for MST algorithms (Kruskal, Prim, Boruvka).
  • src/main/java/edu/princeton/cs/algs4/DirectedEdge.java — Weighted directed edge abstraction; foundational for shortest path algorithms (Dijkstra, Bellman-Ford, Floyd-Warshall).
  • build.gradle — Build configuration; defines Java 1.7 compatibility, artifact publishing, and test dependencies—essential for local compilation and contribution.

🛠️How to make changes

Implement a New Graph Algorithm

  1. Review the base graph class structure (e.g., Digraph for directed, Graph for undirected) to understand adjacency list representation. (src/main/java/edu/princeton/cs/algs4/Digraph.java)
  2. Create a new file following the naming convention (e.g., YourAlgorithmSP.java for shortest path). (src/main/java/edu/princeton/cs/algs4/YourAlgorithmSP.java)
  3. If your algorithm requires a priority queue (Dijkstra-like), use IndexMinPQ or IndexMaxPQ as the foundation. (src/main/java/edu/princeton/cs/algs4/IndexMinPQ.java)
  4. Implement a constructor that takes the appropriate graph type and a source vertex, then populate results in instance variables (e.g., distTo[], edgeTo[]). (src/main/java/edu/princeton/cs/algs4/DijkstraSP.java)
  5. Provide query methods (e.g., distTo(v), hasPathTo(v)) following the pattern established by existing shortest-path classes. (src/main/java/edu/princeton/cs/algs4/DijkstraSP.java)

Add a New Symbol Table or Search Structure

  1. Examine the BST interface to understand the put(key, value) and get(key) pattern expected by all symbol tables. (src/main/java/edu/princeton/cs/algs4/BST.java)
  2. Create a new file (e.g., YourStructureST.java) and implement get(), put(), delete(), and size() methods. (src/main/java/edu/princeton/cs/algs4/AVLTreeST.java)
  3. If your structure is ordered, add min(), max(), floor(), and ceiling() methods to support range queries. (src/main/java/edu/princeton/cs/algs4/BinarySearchST.java)
  4. Provide a keys() method returning an Iterable to support client iteration. (src/main/java/edu/princeton/cs/algs4/BST.java)

Create a Visualization or Client Program

  1. Import the Draw utility class for graphical output. (src/main/java/edu/princeton/cs/algs4/Draw.java)
  2. Create a client class with a main(String[] args) method that reads input using the In utility. (src/main/java/edu/princeton/cs/algs4/In.java)
  3. Instantiate your algorithm class (e.g., new DijkstraSP(g, s)) and query results. (src/main/java/edu/princeton/cs/algs4/DijkstraSP.java)
  4. Use Draw methods to render graph vertices, edges, and paths on screen. (src/main/java/edu/princeton/cs/algs4/Draw.java)

Add a New Flow or Matching Algorithm

  1. Understand FlowEdge (residual capacity model) and FlowNetwork container structure.

🪤Traps & gotchas

Java 1.7 target (from build.gradle sourceCompatibility=1.7) is ancient; modern Java 8+ features (lambdas, streams) are intentionally absent for pedagogical clarity. Classes like Date, Complex, and String utilities may shadow or conflict with java.util equivalents—always use full package names to avoid confusion. GPLv3 license is a strong copyleft—commercial use requires careful review. No unit test framework visible (JUnit not in pom.xml); testing is manual via client main() methods.

💡Concepts to learn

  • Red-Black Trees (RBSTs and AVLTreeST.java) — Self-balancing BSTs are the foundation of real-world ordered symbol tables (TreeMap in Java); understanding rotations and color invariants is critical for maintaining O(log n) performance
  • Directed Acyclic Graph (DAG) Topological Sort — AcyclicLP.java and AcyclicSP.java depend on topological ordering; essential for dynamic programming on graphs and dependency resolution in build systems
  • Bipartite Matching and Maximum Flow — BipartiteMatching.java and related classes solve assignment problems; fundamental to network flow algorithms used in resource allocation, matching problems, and circuit routing
  • String Search Algorithms (KMP, Boyer-Moore, Rabin-Karp) — BoyerMoore.java, KMP.java, and RabinKarp.java show linear-time string matching; critical for text editors, regex engines, and DNA sequence analysis where naive O(nm) fails
  • Binomial Heap and Priority Queue Variants — BinomialMinPQ.java provides O(1) merge (vs binary heap O(n)), enabling efficient graph algorithms like Boruvka MST where heap merging is bottleneck
  • B-Tree (BTree.java) — Multi-way search tree designed for disk I/O; foundational for databases and filesystems; algs4 B-Tree shows why DBMS use m-ary trees instead of binary
  • Arbitrage Detection via Shortest Paths — Arbitrage.java applies Bellman-Ford to negative-cycle detection in currency exchange; illustrates how to model real problems as graph algorithms and use negative weights to find profitable cycles
  • garyaiki/Scala-Algorithms — Official Scala translation of algs4 (mentioned in README); use if building Scala ecosystem code or need functional programming style
  • reneargento/algorithms-sedgewick-wayne — Community solution set for Coursera Algorithms I/II assignments using algs4; reference for expected algorithm behavior and test patterns
  • Apress/algorithms-illuminated — Modern algorithms textbook with GitHub implementations; complements algs4 with updated pedagogy and C++/Python versions
  • TheAlgorithms/Java — Crowdsourced algorithm implementations; broader coverage but less curated—useful for comparative implementations of same algorithm
  • keon/algorithms — Python translations of classic algorithms; bridges gap if porting algs4 ideas to Python production code

🪄PR ideas

To work on one of these in Claude Code or Cursor, paste: Implement the "<title>" PR idea from CLAUDE.md, working through the checklist as the task list.

Add unit tests for core data structure classes (BST, AVLTreeST, BTree, etc.)

The repo currently has 200+ algorithm implementations but no visible test directory (src/test is absent). Core data structures like BST.java, AVLTreeST.java, BTree.java, and BinarySearchST.java lack unit test coverage. This is critical for an educational algorithms library to verify correctness and serve as usage examples for students.

  • [ ] Create src/test/java/edu/princeton/cs/algs4 directory structure
  • [ ] Add JUnit 4 dependency to build.gradle (currently missing test config)
  • [ ] Write BSTTest.java covering insert, delete, contains, min, max operations
  • [ ] Write AVLTreeSTTest.java verifying balanced tree properties after insertions
  • [ ] Write BinarySearchSTTest.java for edge cases (duplicates, null handling)
  • [ ] Configure build.gradle with test task and add test phase to CI

Create GitHub Actions workflow for automated Java compilation and JAR distribution

The repo uses Gradle 2.6 and deploys to Bintray (jcenter), but has no visible GitHub Actions workflow file. No automated CI checks whether the code compiles, tests pass, or artifacts are built correctly on each push. This is risky for a foundational educational library.

  • [ ] Create .github/workflows/build.yml with Java 8+ matrix testing
  • [ ] Add gradle build, test, and javadoc generation steps
  • [ ] Configure artifact publishing to GitHub Releases on version tags matching pattern 'v*'
  • [ ] Update build.gradle to use modern Gradle wrapper (current 2.6 is from 2015)
  • [ ] Add badge to README.md showing build status

Add missing Graph and EdgeWeightedGraph test data files with documentation

The repo implements 15+ graph algorithms (DijkstraSP, BellmanFordSP, BoruvkaMST, etc.) but lacks concrete small dataset files for testing. Students cannot easily run these algorithms without understanding file format. Create standard test input files and document the expected formats.

  • [ ] Create src/main/resources/graphs/ directory with standard test files
  • [ ] Add tinyCG.txt (undirected graph), tinyDG.txt (directed graph), tinyEWG.txt (edge-weighted undirected), tinyEWD.txt (edge-weighted directed)
  • [ ] Create src/main/java/edu/princeton/cs/algs4/GraphData.java documenting file format and providing example datasets
  • [ ] Add comments to DijkstraSP.java, BellmanFordSP.java, BoruvkaMST.java with example: 'java edu.princeton.cs.algs4.DijkstraSP src/main/resources/graphs/tinyEWD.txt 0'
  • [ ] Update README.md with 'Running Algorithms' section pointing to graph data files

🌿Good first issues

  • Add JUnit 4 test harness for core data structures (BST, Bag, Queue, Stack, etc.) in a new src/test/java/ directory—currently only integration tests via main() methods exist.
  • Document the I/O contract for each algorithm's main() method in src/main/java/edu/princeton/cs/algs4/*.java (e.g., BinarySearch expects sorted input; currently only evident from reading code).
  • Implement missing Suffix Array algorithms (SuffixArray.java, SuffixArrayX.java) listed in wishlist.txt and integrate into string-processing chapter examples.

Top contributors

Click to expand

📝Recent commits

Click to expand
  • 7bb62c3 — rename variables q->queue and G->graph in a few remaining places (kevin-wayne)
  • e3bd398 — replaces variable name 'G' with 'digraph' (kevin-wayne)
  • f95c4b0 — replacing variable name 'G' with 'graph' or 'digraph' (kevin-wayne)
  • 0098769 — replacing variable name 'G' with 'graph' or 'digraph' (kevin-wayne)
  • 7774a4a — replacing variable name 'x' with 'node' (kevin-wayne)
  • cc6bf96 — use 'adjacent with' instead of 'adjacent to' with undirected graphs for clarity (kevin-wayne)
  • 72e4012 — fixes bug in StdPicture.read() when new picture dimensions are different from current picture dimensions (kevin-wayne)
  • 1f29dd2 — adding contains() methods to Interval1D and Interval2D (kevin-wayne)
  • dbfc2ca — added parentheses to expression for clarity (kevin-wayne)
  • 6157ca0 — updating copyright year (kevin-wayne)

🔒Security observations

This is an educational algorithms textbook codebase with significant security concerns primarily related to outdated infrastructure. The most critical issues are: (1) Java 1.7 target - severely outdated with numerous vulnerabilities, (2) Gradle 2.6 - 9+ year old build tool with known vulnerabilities, (3) Deprecated jcenter() repository - sunset in 2021. These reflect the age of the original codebase. For a textbook project, this is understandable, but any derivative work should modernize these components immediately. The codebase itself (algorithms library) has low injection/logic risks due to its nature as educational algorithm implementations without external input processing or database interactions. However, the build

  • High · Outdated Gradle Version — build.gradle (wrapper configuration). The project uses Gradle 2.6, released in 2015. This version contains multiple known security vulnerabilities and lacks modern security features. Current Gradle versions provide better dependency resolution, security checks, and vulnerability scanning capabilities. Fix: Update to the latest stable Gradle version (8.x or higher). Run 'gradle wrapper --gradle-version=8.5' to update the wrapper.
  • High · Deprecated Java Target Version — build.gradle (sourceCompatibility and targetCompatibility). The project targets Java 1.7 (released in 2011), which is long past end-of-life and contains numerous known security vulnerabilities. Java 1.7 lacks modern security features like strong cryptography defaults, improved TLS support, and security manager improvements. Fix: Update to Java 11 LTS or higher. Modify sourceCompatibility and targetCompatibility to at least '11'. Java 17 LTS is recommended for long-term support.
  • Medium · Insecure Repository Configuration — build.gradle (repositories configuration). The build.gradle uses jcenter() as the primary repository. JCenter was deprecated and shut down in 2021. This may cause dependency resolution failures and prevents access to security updates from the main Maven Central repository. Fix: Replace jcenter() with mavenCentral(). Update both buildscript and allprojects repositories sections to use 'mavenCentral()' instead of 'jcenter()'.
  • Medium · Credentials Exposed in Build Configuration — build.gradle (bintray configuration block). The build.gradle file retrieves Bintray credentials from environment variables (BINTRAY_USER, BINTRAY_API_KEY) or project properties. While this is better than hardcoding, these credentials could be logged or exposed in CI/CD logs if not properly configured. Fix: Use secure credential management: 1) For CI/CD, use secrets management (GitHub Secrets, GitLab CI variables, etc.). 2) Ensure CI/CD logs do not print credentials. 3) Consider using local gradle.properties (gitignored) for local development. 4) Rotate API keys regularly.
  • Medium · GPL-3.0 License Compliance Risk — build.gradle (licenses configuration) and LICENSE file. The project uses GPL-3.0 license which has strict copyleft requirements. Any proprietary software linking against this library must also be licensed under GPL-3.0 or compatible licenses, which may not be acceptable for commercial use. Fix: Clearly document license implications in README.md. Consider dual-licensing if commercial use is intended. Ensure all dependencies are GPL-3.0 compatible.
  • Low · Missing Security Headers in Bintray Configuration — build.gradle (bintray publishing configuration). The Bintray configuration does not enforce HTTPS or signature verification for published artifacts, though Bintray itself provides these by default. Fix: Ensure all artifacts are signed using GPG. Configure maven-publish-plugin to sign artifacts. Document the public key for verification.
  • Low · No Dependency Vulnerability Scanning — build.gradle (missing plugins). The build.gradle does not include any plugins for scanning dependencies for known vulnerabilities (e.g., OWASP Dependency-Check, Snyk, etc.). This means security vulnerabilities in transitive dependencies may go unnoticed. Fix: Add OWASP Dependency-Check plugin: apply plugin: 'org.owasp.dependencycheck'. Configure regular scans in CI/CD pipeline.

LLM-derived; treat as a starting point, not a security audit.


Generated by RepoPilot. Verdict based on maintenance signals — see the live page for receipts. Re-run on a new commit to refresh.

Mixed signals · kevin-wayne/algs4 — RepoPilot