Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions geospatial-spatial-autocorrelation-assistant/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
reports/frames/
47 changes: 47 additions & 0 deletions geospatial-spatial-autocorrelation-assistant/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# Geospatial Spatial-Autocorrelation Review Assistant

Self-contained reviewer utility for SCIBASE issue #16, AI-Powered Research Assistant Suite. It reviews synthetic geospatial manuscript packets before AI peer-review, reproducibility, or research-gap recommendations are released to researchers.

## What It Checks

- Coordinate reference system and analysis projection evidence.
- Invalid or over-precise coordinates for sensitive human-subject or protected-location studies.
- Spatial train/test leakage from nearby train and holdout samples.
- High Moran's I paired with random validation splits.
- Preprocessing fitted on the full dataset for spatial covariates.
- Test-set tuning, missing external spatial validation, stale covariate windows, and missing raster/vector source metadata.
- Reproducibility artifacts: data manifest, code commit, environment spec, and spatial block map.
- Research-gap prompts for under-sampled regions and missing spatial validation benchmarks.

## Why This Is Distinct

Existing #16 work covers broad assistant orchestration, evidence binding, structured abstracts, randomization/blinding, survival analysis, missing-data sensitivity, causal adjustment, genomic/proteomics/single-cell review, and related peer-review checks. Existing #17 geospatial work validates sample-provenance graph edges. This module is a separate #16 peer-review layer for manuscript-method validity: spatial autocorrelation, blocked validation, coordinate/projection evidence, and geography-aware reproducibility.

## Usage

```bash
npm run check
npm test
npm run demo
npm run verify-video
```

Generated reviewer artifacts are written to `reports/`:

- `risky-audit.json`
- `clean-audit.json`
- `risky-review.md`
- `summary.svg`
- `demo.mp4`

## API

```js
const {
evaluateGeospatialReviewPacket,
renderMarkdownReport,
renderSvgSummary
} = require("./index");
```

The evaluator returns a deterministic status (`READY`, `REVIEW`, or `HOLD`), finding counts, manuscript decisions, reproducibility scores, remediation actions, research-gap opportunities, and a stable fingerprint.
47 changes: 47 additions & 0 deletions geospatial-spatial-autocorrelation-assistant/demo.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
"use strict";

const fs = require("node:fs");
const path = require("node:path");
const {
evaluateGeospatialReviewPacket,
renderMarkdownReport,
renderSvgSummary
} = require("./index");
const { riskyPacket, cleanPacket } = require("./sample-data");

const reportsDir = path.join(__dirname, "reports");
fs.mkdirSync(reportsDir, { recursive: true });

const now = "2026-06-01T10:30:00.000Z";
const risky = evaluateGeospatialReviewPacket(riskyPacket, { now });
const clean = evaluateGeospatialReviewPacket(cleanPacket, { now });

fs.writeFileSync(path.join(reportsDir, "risky-audit.json"), `${JSON.stringify(risky, null, 2)}\n`);
fs.writeFileSync(path.join(reportsDir, "clean-audit.json"), `${JSON.stringify(clean, null, 2)}\n`);
fs.writeFileSync(path.join(reportsDir, "risky-review.md"), renderMarkdownReport(risky, riskyPacket));
fs.writeFileSync(path.join(reportsDir, "summary.svg"), renderSvgSummary(risky));
fs.writeFileSync(
path.join(reportsDir, "manifest.json"),
`${JSON.stringify(
{
generatedAt: now,
artifacts: [
"risky-audit.json",
"clean-audit.json",
"risky-review.md",
"summary.svg",
"demo.mp4"
],
riskyStatus: risky.status,
cleanStatus: clean.status,
riskyFingerprint: risky.fingerprint,
cleanFingerprint: clean.fingerprint
},
null,
2
)}\n`
);

console.log(`Risky packet: ${risky.status} (${risky.findings.length} findings)`);
console.log(`Clean packet: ${clean.status} (${clean.findings.length} findings)`);
console.log(`Wrote reports to ${reportsDir}`);
Loading