diff --git a/README2.md b/README2.md index 2e192b5..93c81dc 100644 --- a/README2.md +++ b/README2.md @@ -271,3 +271,9 @@ cargo test # Build release cargo build --release --features gui ``` + +## Reviewing And Contributing + +- See `AGENTS.md` for repository-specific coding guidance. +- See `REVIEWING.md` for a reviewer-oriented map of the codebase and recommended commands. +- If you have `just` installed, run `just --list` for common review and validation commands. diff --git a/REVIEWING.md b/REVIEWING.md new file mode 100644 index 0000000..e7b0b47 --- /dev/null +++ b/REVIEWING.md @@ -0,0 +1,163 @@ +# Reviewing Geolog + +This guide is for humans reviewing the codebase, especially when you want to answer: + +- where a behavior lives, +- which commands to run first, +- and which modules are most likely to matter for a given bug or change. + +## Quick Start + +If you have `just` installed: + +```bash +just review +just review-gui +``` + +Without `just`: + +```bash +cargo check +cargo test +cargo check --features gui --bin geolog-gui +cargo test --features gui +``` + +## Best Reading Order + +For most reviews, this order gives the fastest mental model: + +1. `README.md` + - User-facing behavior and examples. +2. `docs/ARCHITECTURE.md` + - High-level subsystem map. +3. `src/lib.rs` + - Top-level module layout. +4. Syntax pipeline + - `src/ast.rs` + - `src/lexer.rs` + - `src/parser.rs` + - `src/pretty.rs` +5. Semantic core + - `src/core.rs` + - `src/id.rs` + - `src/universe.rs` +6. Elaboration + - `src/elaborate/mod.rs` + - `src/elaborate/theory.rs` + - `src/elaborate/instance.rs` +7. Runtime and persistence + - `src/repl.rs` + - `src/store/mod.rs` + - `src/store/theory.rs` + - `src/store/instance.rs` +8. Query and chase + - `src/query/mod.rs` + - `src/query/chase.rs` + - `src/query/compile.rs` + - `src/query/backend.rs` +9. Optional layers + - `src/solver/` + - `src/gui/` + +## How To Map A Change + +Use this shortcut table: + +- Parse error or syntax ambiguity + - Start in `src/lexer.rs` and `src/parser.rs`. +- Pretty-print or round-trip bug + - Start in `src/pretty.rs`, then `tests/unit_pretty.rs` and `tests/unit_parsing.rs`. +- Wrong theory or instance semantics + - Start in `src/elaborate/` and `src/core.rs`. +- Persistence or workspace bug + - Start in `src/repl.rs` and `src/store/`. +- Chase/query behavior bug + - Start in `src/query/chase.rs`, `src/query/compile.rs`, and related tests. +- GUI-only behavior bug + - Start in `src/gui/state.rs`, then `src/gui/panels/` or `src/gui/visualizations/`. + +## Important Invariants + +- `parser` should stay syntax-focused. + - Semantic decisions generally belong in elaboration, not parsing. +- `core` should remain GUI-free. + - GUI code should consume existing semantics, not define them. +- GUI must remain feature-gated. + - GUI code lives behind the `gui` feature. +- Persistence changes need extra care. + - `src/store/` and related runtime flows should preserve expected workspace behavior. +- Chase/query changes need explicit tests. + - These regressions are often subtle and easy to miss in manual review. + +## Best Review Commands + +Start narrow, then go broad. + +### Core checks + +```bash +cargo check +cargo test +``` + +### GUI checks + +```bash +cargo check --features gui --bin geolog-gui +cargo test --features gui +``` + +### Focused checks + +```bash +cargo test unit_parsing +cargo test unit_elaborate +cargo test unit_chase +cargo test unit_workspace +cargo test gui_ +``` + +## Test File Guide + +- `tests/unit_parsing.rs` + - Parser and syntax behavior. +- `tests/unit_pretty.rs` + - Pretty-printing and round-trip expectations. +- `tests/unit_elaborate.rs` + - Theory/instance elaboration semantics. +- `tests/unit_chase.rs` + - Chase behavior. +- `tests/unit_workspace.rs` + - Persistence/workspace behavior. +- `tests/examples_integration.rs` + - End-to-end examples. +- `tests/proptest_*.rs` + - Property-based coverage. + +## What Usually Deserves Extra Scrutiny + +- Changes that cross parser → elaboration boundaries. +- Changes in `src/core.rs` because they affect many layers. +- Anything in `src/query/chase.rs`, `src/query/backend.rs`, or `src/store/`. +- GUI changes that mutate runtime state rather than only presenting it. +- Feature-gated code that may compile less often than the default build. + +## Useful Missing Context To Watch For + +If a patch is hard to review, it often needs one of these: + +- a smaller regression test, +- a more focused example in `examples/geolog/`, +- a note in `docs/ARCHITECTURE.md`, +- or a short comment explaining a non-obvious invariant. + +## Reviewer Checklist + +- Does the change live in the right layer? +- Are semantics changed intentionally, or just presentation? +- Is there a narrow test for the bug or behavior? +- If GUI code changed, is the same state transition safe from the REPL path too? +- If store/query/chase code changed, do existing tests still cover the affected behavior? +- Is any documentation now stale? diff --git a/justfile b/justfile new file mode 100644 index 0000000..c907ce6 --- /dev/null +++ b/justfile @@ -0,0 +1,42 @@ +set shell := ["bash", "-lc"] + +default: + @just --list + +check: + cargo check + +test: + cargo test + +gui-check: + cargo check --features gui --bin geolog-gui + +gui-test: + cargo test --features gui + +review: + cargo check + cargo test + +review-gui: + cargo check --features gui --bin geolog-gui + cargo test --features gui + +focus-parsing: + cargo test unit_parsing + +focus-elaborate: + cargo test unit_elaborate + +focus-chase: + cargo test unit_chase + +focus-workspace: + cargo test unit_workspace + +focus-gui: + cargo test --features gui gui_ + +test-one NAME: + cargo test {{NAME}}