Skip to content

Releases: raktim-mondol/academic-harness

v0.44.0 — Reviewer-response coverage ledger

Choose a tag to compare

@raktim-mondol raktim-mondol released this 04 Nov 14:01

Phase 7: reviewer-response coverage ledger

New rebuttal tool and rebuttal-store.js under .dsh/rebuttal/<slug>/ with nine actions:

  • import — one source per call: a stored deep_review round, ah_review items from an ah.yaml project, or caller-supplied OpenReview reviews. Each point keeps its reviewer identity and evaluator_kind; the tool never fetches, never executes, and never edits a manuscript.
  • plan — a supplementary task stub per point: dataset, one reproduced/reported baseline arm, metric with direction, replicate count from a supplied power_analysis result or a declared basis, and expected evidence type. Growth is capped by REBUTTAL_MAX_TASKS (default 20) — the paper's N_t is never instantiated.
  • link — task to an existing experiment_log run (metrics read live by id) or a hashed analysis_run, pinned to a SHA-256 digest so later reads report verified, drifted, or unreadable.
  • respond / decline — the author's own words, citing link ids and recorded manuscript_diff hunks. A decline is verified against the engine's live declined status or labelled as author-recorded; the tool never declines anything itself.
  • coverage — five states (answered, answered_asserted, declined_verified, declined_recorded, unaddressed) plus closing against a fresh deep_review round. Coverage, not outcome: a bad verdict, spec drift, drifted digest, or non-zero exit stays recorded and reportable.
  • draft — response-letter skeleton citing only recorded evidence; the full letter is kept under drafts/, with an optional caller out. Returns the manuscript_diff items and ah_review_respond handoffs.
  • export / status — Markdown/JSON/CSV and the full ledger read-back.

Fixes found in adversarial review

  • Deep-review native ids are round-scoped, so a later round's positional points are stored as separate rows instead of merging into the first round.
  • Checklist points pair by their stable engine key, so an unchanged still-NO item no longer reads closed.
  • Id-less OpenReview notes get positional ids, so a second reviewer is not silently dropped.
  • Same-millisecond answer/decline ordering uses a monotonic event_seq.
  • draft persists the full letter; out receives the full text.
  • Invalid REBUTTAL_MAX_TASKS warnings reach link/respond; coverage row-cap truncation is disclosed.
  • Documentation claims reconciled with the code (closing applies only to deep-review points, item statuses, review_not_person, power_analysis basis, deep_review_round).

Wiring

openreview.js additively passes signatures, questions, and forum; new rebuttal-experiments skill and rebuttal-plan workflow; REBUTTAL_MAX_TASKS in Settings; preset row, package exports/files/test script, regenerated cordis.patch.yml; skill catalogue 767 → 768.

Verification

  • Full suite: 78/78 test files pass, including regressions for id-less OpenReview notes, cross-round ids, checklist pairing, same-millisecond ordering, retained drafts, and cap warnings.
  • Live DSH Web UI run in a new Academic Harness session: imported 6 points, planned t0001, logged x0001, linked l0001 (digest verified, accuracy 0.74 read live), recorded an answer, coverage 1 answered / 5 unaddressed, retained a 1,885-byte full draft, and exported a 2,228-byte report. Session creation also confirms the preset/package wiring.

Full changelog: docs/CHANGELOG.md

v0.43.1 — Deterministic deep-research run ordering

Choose a tag to compare

@raktim-mondol raktim-mondol released this 04 Nov 04:56

Fix

deep_research listRuns now breaks identical created_at timestamps by descending run id, so runs and status reliably report the newest run first even when two runs start in the same millisecond. CI exposed the tie on v0.43.0: the previous comparator fell back to directory order.

Verification

  • scripts/test-deep-research-store.mjs: 97/97 checks pass, including a new identical-timestamp regression case.
  • Full suite passes in CI (76/76 test files) on the v0.43.1 tag and main.

Full changelog: docs/CHANGELOG.md

v0.43.0 — Ablation, limitations, and grounded novelty

Choose a tag to compare

@raktim-mondol raktim-mondol released this 04 Nov 04:51

Phase 6: hypothesis limitations, traces, selection, and grounded novelty

coscientist gains three actions:

  • limitation (add / verify / status) — append-only numbered records with the methodological flaw, a verbatim source quote checked against a hypothesis or workspace file, at least two remedy families, and binary sufficient / insufficient readings under a round cap. A spent cap is reported exhausted; it is never an acceptance.
  • trace — read-only evidence from experiment_log ledgers, failed and pruned runs first. An evolution dispatch now carries those traces as constraints.
  • select — freezes an active champion with its compared survivors, rationale, and a SHA-256 digest over the tournament readings, review scores, citation/novelty checks, and matching experiment traces.

add accepts addresses_limitation; coverage appears in status, graph, and both exports. coscientist_verify gains novelty: it retrieves a reference set (2 by default, max 10), stores it, computes the documented lexical prior-art reading, and pins the score to verbatim quote spans. A failed retrieval is not_checked with no score.

Phase 5: component attribution

New ablation tool and ablation-store.js under .dsh/ablation/<slug>/: a frozen component × arm × dataset × metric plan, records linked to existing experiment_log / analysis_run runs (it never executes), paired removal deltas with ties and missing cells, an advisory attribution reading, human good / refine / unattributed verdicts, append-only pruning, and Markdown/JSON/CSV export.

Phase 4: staged experimentation

experiment_log start accepts a benchmark spec (datasets, splits, baseline arm, task rules) and a protocol; log accepts role, baseline_ref, stage, and a sampling rule. The baseline captures a protocol digest, variants must match their reference, drift is stored as spec_drift, verdict records good / engineer / bad with force-bad on an exhausted engineering budget, and best dominance returns the multi-metric Pareto front.

Phase 3: advisory review score

New score action on deep_review: one bounded model call returns soundness, originality, clarity, and significance readings on a declared scale, each citing stored comment ids. Every review round records evaluator_kind: held_out | in_distribution; a dimension without a valid reading or citation is not_checked. The score is an automated reading, never an acceptance decision.

Fixes found during release validation

  • Added the missing ./ablation and ./ablation-store package exports; without them the preset row academic-harness/ablation failed to start, blocking every new Academic Harness session.
  • Normalized Crossref reference titles before novelty quote selection, so a tagged or multi-line title can no longer fail its own verbatim span check.

Verification

  • Full suite: 76/76 test files pass.
  • Live DSH Web UI run in an Academic Harness session: limitation round cap reached exhausted at 2/2 with coverage, a champion selection digest, trace output, and a Markdown export; grounded novelty produced 7.4/10 and 8.5/10 readings with two verbatim quotes each.

Full changelog: docs/CHANGELOG.md

v0.42.0 — Evaluation validity and calibration

Choose a tag to compare

@raktim-mondol raktim-mondol released this 04 Nov 00:20

Phase 2: evaluation-validity checks

deep_review gains an advisory validity action with four deterministic readings over a stored review and the manuscript text:

  • attribution
  • evaluator_drift
  • benchmark_coverage
  • unmeasured_trade_off

Each returns clear, flagged, or not_checked, with a reason, evidence, and tallies. One bounded critic call annotates the result and can never change a state. The pass writes extra_checks.json, meta.validity, a runs.jsonl row, and a notebook entry; show section=validity and status read it back.

Phase 0: real-paper calibration

scripts/deep-review-validity-calibration.mjs (also deep-review-calibration.mjs --validity --corpus) measures the checks over a labeled corpus with the simple PDF-to-Markdown converter and no OCR.

On the 14-paper corpus:

  • 0 false-positive papers
  • 0 false alarms on every check
  • 43/56 overall state agreement (76.8%)
  • 0 determinism mismatches
  • attribution 14/14
  • evaluator_drift 8/14 (one missed clear, four abstentions)
  • benchmark_coverage 10/14 (no flags, four abstentions)
  • unmeasured_trade_off 11/14 (no flags, two abstentions)

The corpus loop fixed references and PDF line numbers being counted as prose/grids, coverage ignoring numeric dataset columns, removal evidence over- and under-firing, and review papers being flagged for a missing ablation. The first pass had 10 false-positive papers and 39.3% agreement.

The Markdown report is at reports/deep-review-validity-20261103T235613.md; the full changelog is docs/CHANGELOG.md.

Verification

  • Live DSH Web UI: Markdown and a real PDF passed review + validity with the critic on; states matched the corpus labels.
  • 72/72 test files pass.

Known caveat: one 13-page PDF hit a vendored review-engine segmentation error ((s.pages ?? []).map is not a function) before validity ran. A second real PDF passed; this is a pre-existing engine model-output shape bug, not the validity code.

v0.40.0

Choose a tag to compare

@raktim-mondol raktim-mondol released this 02 Nov 00:37
330739d

Cleanup release. No tool or skill is removed; the tool list gains nine tools (previously opt-in) and loses two MCP aliases of tools that already exist natively.

  • Optional tools are now always on. author_lookup, openreview, pdf_references (still needs GROBID_BASE_URL), coscientist_verify, stat_audit, figure_audit, repo_audit, grant_search, and patent_search register without AH_ENABLE_OPTIONAL_TOOLS. The flag and optional-tools.js are gone; the tools have a new prompt section and a guide, Identity, funding, and audit tools (formerly OPTIONAL-TOOLS.md).
  • Parallel MCP connector removed. mcp__parallel__web_search (locked to basic) and mcp__parallel__web_fetch duplicated native parallel_search and parallel_extract, which share PARALLEL_API_KEY and support every mode. Firecrawl and Scite connectors are unchanged. A Parallel key now takes effect on the next call with no restart.
  • ResearchCraft-era compatibility removed. scripts/migrate-profile.mjs, scripts/test-rename.mjs, the dsh-researchcraft launcher alias, the RESEARCHCRAFT_* environment fallbacks, the 0.1.x/pre-0.16 API-key import in settings-keys.js, and the notebook-skill rename in seed.js. Upgrading from a pre-0.16 profile now needs a fresh install. Attribution in NOTICE and LICENSE is unchanged.
  • Stale material removed: eight finished plan documents under docs/, academic-harness_docs/ (an old mod archive), .e2e-artifacts/ screenshots, an unrelated run log in reports/, and the committed main.pdf/main.bbl build outputs of paper/rsi-local/ (now git-ignored; make rebuilds them). Comments that pointed at the deleted plans were reworded.
  • Tests and CI. npm test (scripts/run-tests.mjs) runs every scripts/test-*.mjs; CI calls it, which adds the twelve suites CI never ran (the seven test-coscientist-*, test-library, test-power, test-reference-library, test-rsi, test-zg-excludes). test-optional-tools.mjs became test-identity-tools.mjs. CI installs the dsh CLI at 0.2.1-rc.5, matching package.json.

v0.37.0: deep research

Choose a tag to compare

@raktim-mondol raktim-mondol released this 01 Nov 10:28

deep_research runs a bounded, self-driving investigation and keeps its state in an append-only run ledger, so a long research question stops being something an agent improvises and forgets.

How it works. The request is frozen verbatim and re-read by every step, so a run cannot drift onto a different question. It sweeps the literature through the existing literature_search router plus a web lane (Parallel, Exa, Tavily, Brave) for guidance documents, registers, and reporting; builds a contradiction graph; picks the loci where reading deeply would change the answer; drafts from three angles; has four critics attack the draft; and repairs it with capped hunks. After synthesis the report cannot be regenerated, only patched.

Two counts a plain agent gets wrong, enforced mechanically.

  • Voice, not copies — independence clustering groups DOI, exact and near titles, and identical bodies across hosts, so five reprints of one release argue with the weight of one source. Distinct DOIs are never merged.
  • Verified, not plausible — quotes are checked against stored text in PaperMemory, a span nothing read is reported not_checked rather than passed, and an unacknowledged retraction blocks the ship. Fetched pages arrive inside an <untrusted-source> fence whose own tags are escaped.

One scale knob. effort=low|medium|high, inferred from the request when not given. A request that points both ways returns needs_input and creates nothing — no run, no model call — until the caller answers. Runs resume at the step that died; budgets block rather than balloon.

Reuses, does not duplicate. The scholarly router, paper-download open-access resolution, pdf-to-markdown, integrity_check retraction signals, ledger-kit/store-lock, PaperMemory, and the host LLM and jobs services. No new search client, no second vault, no new runtime. Fetched full text is deposited into PaperMemory, so a run's reading outlives it.

Verified live. A real session on a clinical question swept 477 scholarly records plus 10 web pages, fetched four open-access full texts, and deposited them into PaperMemory (pap_b4ffbb5dc3e3 for DOI 10.1056/NEJMoa2307563 and three others). Publisher 403s are recorded per record with their reason rather than swallowed.

Also in this release

  • runSource exported from literature-search.js; runParallelSearch, runTavilySearch, runBraveSearch, runExaSearch, runPerplexitySearch extracted from their tools so the web lane calls one implementation each.
  • quoteCheck() added to papermemory-cli.js.
  • New docs/RESEARCH.md#deep-research section, README diagram, and skills/deep-research/references/run-ledger.md.
  • 333 deep-research checks across four suites, all wired into CI. Design adapted from hyperresearch (MIT); attribution in NOTICE, no upstream code vendored.

v0.36.0: study conduct, ethics, and grants

Choose a tag to compare

@raktim-mondol raktim-mondol released this 31 Oct 23:52
  • Phase 5 — study conduct, ethics, and grants. Seven new preset-only tools. State lives under .dsh/{preregister,causal,design,ethics,deidentify,dmp,budget}/<slug>/; none submits anywhere, invents an approval/rate/repository, or issues a compliance or causality verdict.
  • preregister (preregister.js, preregister-store.js) freezes a study plan into write-once, hashed versions: start, import (review protocol, coscientist design protocol, analysis_run plan, causal_dag, or workspace JSON; a stateless power_analysis result is supplied as an object), freeze (required fields; a data-collection guard requires a reason), status, verify (re-hashes every version and reports verified/changed/tampered), export (Markdown, JSON with OSF/AsPredicted-shaped fields, or PDF when LaTeX is available), and an explicitly disabled submit. No OSF call is made. Tests: scripts/test-preregister.mjs.
  • causal_dag (causal-dag.js, causal-dag-store.js, causal-graph.js) stores a user-specified DAG and derives d-separation, minimal backdoor and front-door sets, collider/M-bias and adjustment warnings, instrument candidates, topological order, local-Markov testable implications, and VanderWeele E-values. DOT/Mermaid/edge-list import and Mermaid/DOT/edge-list/JSON export; edits are versioned with a reason. No model is fitted and no effect is estimated. Tests: scripts/test-causal-dag.mjs (known DAG adjustment/front-door/instrument/latent/collider fixtures and E-value arithmetic).
  • design (design.js, design-store.js) generates reproducible schedules from a required seed: simple, permuted-block, stratified, cluster, crossover, and minimization randomization, allocation/blinding codes, realized-balance diagnostics (numeric SMD and categorical shares), full and fractional factorial, Plackett–Burman (8/12/16 runs), central composite, and Box–Behnken designs with defining relation/resolution, aliasing, and a randomized run sheet. Balance is reported, never guaranteed; DOE is a design, not an analysis. Tests: scripts/test-design.mjs.
  • ethics_protocol (ethics-protocol.js, ethics-protocol-store.js) keeps an append-only protocol, consent drafts, and a concept checklist (consent, risk/benefit, privacy, retention, sharing, compensation, incidental findings, vulnerable populations, GDPR/HIPAA, animal welfare, institutional requirements). It is not legal advice; approvals are recorded, never verified or invented, and manual items stay manual. Tests: scripts/test-ethics-deidentify.mjs.
  • deidentify (deidentify.js, deidentify-store.js) scans text/JSON/CSV/TSV for PHI/PII locally with regex/heuristics, stores only masked reports (custom terms are HMAC-hashed with a workspace-local .dsh/deidentify/.term-key), redacts to a separate file with per-type/per-column actions, and rescans the output for residual matches. Overlapping matches are merged, a file with more than 1000 candidate matches is refused rather than partially redacted, and verify detects an output changed after the redaction record. No model/network call, no reversible mapping, and no HIPAA/GDPR certification; a human must review. Tests cover synthetic PHI, CSV column actions, JSON, custom-term hash handling, residual verification, truncation refusal, and changed-output detection.
  • dmp (dmp.js, dmp-store.js) drafts NIH DMS, NSF DMP, Horizon Europe, Wellcome, ERC, and generic plans with append-only sections and a checklist; templates are paraphrased concepts, and repository/embargo/cost/official requirements stay manual_check. grant_budget (grant-budget.js, grant-budget-store.js, python-helpers/grant_budget.py) builds a multi-year budget from explicit salaries, effort/person-months, fringe, escalation, line items, subawards, cost share, indirect rate/caps, with arithmetic checks, a justification, staleness detection, and CSV/Markdown/JSON/XLSX export. It never invents a rate or decides allowability. Tests: scripts/test-dmp-budget.mjs.
  • Added five skills (causal-dag, experimental-design, research-ethics, data-management-plan, grant-budget; catalogue now 762), updated preregistering-analysis, new prompt section ## Study conduct, ethics, and grants, docs/RESEARCH.md sections, docs/TOOLS.md rows, preset rows, regenerated cordis.patch.yml, test:phase5, and the five suites in CI.
  • Live DSH Web UI verification. A real Academic Harness agent session exercised all seven ledgers, exports (including LaTeX PDF and XLSX), and failure paths. The live run exposed two defects that unit tests had missed: block randomization put an in-memory n: undefined in design.strata[], so DSH rejected the successful schedule as non-lossless JSON, and design list spread a joined string and printed one character per line. Both are fixed, causal-to-preregistration import no longer carries an undefined adjustment property, and causal_dag create validates before creating its ledger directory.
  • Deviations from the plan: causal graph algorithms, DOE construction, and de-identification are dependency-free JavaScript rather than networkx, pyDOE3, and Presidio helpers; OSF submission stays disabled (export JSON/Markdown for manual submission); causal_dag exports Mermaid/DOT/edge-list/JSON (GraphML and SVG were not added); PDF export is implemented for preregister only (via LaTeX), while DMP/ethics/budget export Markdown/JSON, budget also CSV/XLSX, and DOCX/PDF remain deferred; provenance_audit does not index the new preregister ledger yet and continues to report it as unknown.

v0.35.0: submission and communication

Choose a tag to compare

@raktim-mondol raktim-mondol released this 31 Oct 12:52
  • Phase 4 — submission and communication. Five new preset-only tools, one extended search tool, and custom CSL support. Nothing submits, emails, or logs into a journal portal; drafts stay drafts and unknown requirements stay manual_check.
  • submission_pack (submission-pack.js, submission-store.js) plans and builds a journal bundle under .dsh/submission/<slug>/: word/abstract/reference/figure/table limits, figure format/DPI/color/size/naming, citation style and manuscript_citations, reporting_check evidence, numbers_audit candidates, required statements/sections, suggested reviewers, and a manuscript PDF; then copies/compiles the PDF and sources, figures, supplementary files, author statements, cover letter, highlights, checklist, and a SHA-256 manifest into a zip reproducible from that manifest. Cover letter/highlights are author-supplied or explicit drafts; reviewers are only user entries. status and export inspect/copy the result. Tests: scripts/test-submission-pack.mjs.
  • journal_search action: "match" ranks venues for a manuscript using the existing OpenAlex/DOAJ/Crossref pipeline plus keyword/topic/title overlap and returned metrics. It filters only known constraints (OA, max APC, indexation), reports missing data, labels fit advisory, and returns DOAJ listing, publisher membership, ISSN, APC transparency, and homepage as manual-check due-diligence signals. Custom CSL styles can now be loaded in citation with style_file or style_url; they are validated (CSL namespace/version/citation block, size/DTD limits), URL styles are cached under .dsh/styles/, and local/private hosts are refused. Tests: scripts/test-journal-match.mjs.
  • manuscript_diff (manuscript-diff.js) offers diff (latexdiff for .tex, unified diff for .md/.txt; not_installed when latexdiff is absent), changes (changed blocks with ids and source hashes), docx (tracked insertions/deletions, comments, Zotero/CSL field text; no rewrite), and letter (an ah_review id delegates to the engine; generic items must map to recorded change ids, and addressed items without a hunk are flagged/unresolved). Source files are never edited. Tests: scripts/test-manuscript-diff.mjs.
  • numbers_audit (numbers-audit.js plus a numbers mode in python-helpers/stat_audit.py) reports p-values recomputed from test statistics, out-of-range/zero p-values, reversed/zero-width CIs, estimates outside their CI, non-positive ratio measures, total-N inconsistency, subgroup/flow count problems, fraction/percentage mismatches, and label-matched table/text values. Everything it cannot recompute or match is listed as not_checked; it never claims statistical validity. Tests: scripts/test-numbers-audit.mjs.
  • presentation_build (presentation-build.js, python-helpers/presentation_helper.py) builds tikzposter/beamerposter/baposter posters and Beamer or python-pptx slide decks from explicit sections or a manuscript, copies only existing figures, compiles PDFs, writes PNG previews when pdftoppm exists, tracks missing figures/compile failures, and returns a visual-QA checklist for subagent_vision; it never claims the visual check passed. Tests: scripts/test-presentation-build.mjs.
  • authorship (authorship.js, authorship-store.js) records authors, CRediT roles, and ICMJE criteria in an append-only ledger under .dsh/authorship/<slug>/, generates Markdown/JSON statements, and exports Markdown/CSV/JSON. It never assigns order or qualification, never invents affiliations/ORCIDs/funding/conflicts, and reports duplicate positions/ORCIDs and changed values as unresolved disagreements. Tests: scripts/test-authorship.mjs.
  • Five new skills (submission-package, manuscript-revision, numbers-audit, presentation-build, authorship-credit) bring the catalogue to 757; new prompt section ## Submission and communication; new guide sections in docs/WRITING.md; preset rows and regenerated cordis.patch.yml; npm run test:phase4 and the six suites added to CI.
  • Deviations recorded in docs/SCIENTIFIC-EXPANSION-PLAN.md: PowerPoint uses a small python-pptx helper (the slide skills ship no deck generator), match does not call journal_policy per result, generic letters use recorded change ids while ah_review delegates to the engine, and table/text matching is deliberately conservative; GRIMMER remains unimplemented.

v0.34.0 — review synthesis, reproducible analysis, and provenance audit

Choose a tag to compare

@raktim-mondol raktim-mondol released this 31 Oct 11:56
  • Phase 0 foundations. Added ledger-kit.js (stable JSON hashing, JSONL/write-once helpers, overwrite-safe text export), provenance.js (typed link/ID conventions), example schemas under schemas/, and a shared test workspace fixture. Existing ledgers are unchanged and do not import the new helpers yet.
  • Structured extraction in review. New extract and extract_status actions, a write-once extraction template (generic, pico, peco, diagnostic_accuracy, prognostic, qualitative, or inline), field-level reconcile scope=extraction, multi-row extraction via row_id, and extraction-table/extraction-matrix/extraction-json exports. Values are reviewer-supplied and recorded, never inferred; missing required fields are counted, and field-level quotes are checked through PaperMemory when paper is supplied. The Markdown report and JSON ledger include extraction output when a template is frozen.
  • PRISMA flow export. review export format=prisma-flow writes prisma-flow.svg and a counts JSON sidecar through a dependency-free python-helpers/prisma_flow.py. Counts come from the ledger; missing counts stay not recorded, and the diagram is labelled PRISMA-style, never a compliance statement.
  • Pairwise meta-analysis (meta_analysis). New preset-only ledger under .dsh/meta/<slug>/ with effect-size conversion (2×2, continuous, correlation, HR, diagnostic 2×2, generic effect+CI/SE), fixed/random pooling using DerSimonian–Laird, Paule–Mandel, or REML τ², normal or Hartung–Knapp CIs, Q/I²/H²/τ²/prediction intervals, subgroup analysis, numeric-covariate meta-regression, leave-one-out, Egger/Begg/funnel publication-bias diagnostics, univariate diagnostic-accuracy pooling, forest/funnel/SROC SVG plots, Markdown/CSV/JSON exports, and import_review from a completed extraction table. The protocol is write-once; every result echoes the model and warns below 5 studies or 10 studies for funnel tests. Trim-and-fill, network meta-analysis, dose-response, and bivariate/HSROC diagnostic models are explicitly not implemented in this release. The pairwise core is validated against the published BCG example (fixed, DL, PM, REML, subgroup Q-between) in scripts/test-meta-analysis.mjs.
  • GRADE certainty and summary of findings (review). New grade_start, grade_judge, grade_overall, and grade_status actions on the existing review ledger. Outcomes are write-once (grade.json); domain ratings and overall certainties are append-only (grade.jsonl). Downgrade domains are risk of bias, inconsistency, indirectness, imprecision, and publication bias; observational upgrade domains are large effect, dose-response, and plausible confounding. Every rating needs a reason; optional quotes can be verified through PaperMemory; dual reviewers produce missing-reviewer and conflict states. The tool derives a suggestion from the domains but stores the human overall certainty; differing overalls export as conflict. New grade-profile (Markdown/CSV) and sof-table (Markdown/CSV/LaTeX) exports. scripts/test-grade.mjs covers single/dual reviewers, conflicts, overrides, quote verification, and all export formats.
  • More appraisal instruments. The review appraise library grew from four templates to eleven: amstar-2 (16 items, critical items flagged), probast (risk-of-bias plus applicability cells), quips, syrcle, and consolidated casp-cohort, casp-case-control, and casp-qualitative checklists. Each ships as a paraphrased, versioned JSON template under appraisal/ linking to the official source; only RoB 2 and ROBINS-I derive an overall, matching the instruments' own guidance. Decisive ratings (checklist yes/no) require verbatim quotes like existing instruments; completeness, reconciliation, agreement, and the rob-table/rob-summary/rob-figure paths work unchanged.
  • Phase 2 — reproducible analysis and data layer. Five new preset-only tools. analysis_run freezes an analysis plan (question, inputs/outputs, methods, alpha, seed; changes need new_version plus a reason) and executes argv commands — never a shell — under an environment allowlist with explicit-env redaction, hashed inputs/outputs, a hard timeout, notebook execution via jupyter/papermill, run-vs-run and run-vs-plan diffs, lab-notebook entries, and Markdown/JSON run reports; a nonzero exit or timeout is recorded, not hidden. experiment_log registers sweeps and model comparisons as append-only runs (params, metrics, hashed artifacts, seeds, parents) with compare, best-by-named-metric-and-direction, links, and CSV/JSON/Markdown/MLflow-compatible export; missing metrics stay blank and reruns are never deduplicated. dataset_get resolves DOIs through DataCite/Zenodo/Figshare and downloads into data/<slug>/ with size caps and checksum verification (mismatches recorded verification_failed, files kept), plus verify/status against a provenance manifest; dataset_search stays search-only. data_profile profiles local files through pandas — schema, missingness, duplicates, ID/date heuristics, target balance, split overlap, small cells, and leakage-risk findings with explicit not_checked items and a data dictionary. repro_package builds a reader-facing package (manifest with SHA-256, environment snapshot, generated Dockerfile, README, CITATION.cff, codemeta.json, RO-Crate 1.1, checksums) from the other ledgers, verifies it by re-hashing, and offers a two-step, confirm-gated, draft-only Zenodo deposit that never publishes. New skills reproducible-analysis and experiment-tracking (catalogue now 751); new guide docs/ANALYSIS.md with a lifecycle diagram; prompt section ## Reproducible analysis; tests scripts/test-analysis-run.mjs, test-experiment-log.mjs, test-dataset-get.mjs, test-data-profile.mjs, and test-repro-package.mjs in CI; helper environment gains pandas and openpyxl. Live verification also fixed dataset_search files for Zenodo's newer API (the record payload now inlines the file list and /files can 404) and made dataset_get get surface a failed file listing as unavailable with the reason instead of an empty list.
  • Phase 3 — cross-ledger provenance audit (provenance_audit). One new preset-only tool, strictly read-only: provenance-store.js builds an index by joining the ledgers that already exist — review records, screening, evidence, extraction rows and field quotes, appraisals and GRADE events, reporting_check verdicts with their manuscript snapshot, stored deep_review claim–evidence maps and citation verdicts, notebook entries and their artifact links, analysis_run plans/manifests with hashed inputs and outputs, experiment_log runs and links, dataset_get downloads and checksums, meta_analysis studies with their record_id provenance, and Academic Harness cited-clause sidecars (claims/*.yaml) when the workspace has ah.yaml — using the shared paper:/quote:/unit:/claim:/record:/run:/result:/review:/export: id conventions from provenance.js. Actions: index, coverage, unsupported (split into no_link, not_checked, unverified, stale, not_found), stale (recorded vs current hashes, plus the state a claim held before the ripple), unverified, impact (transitive dependents of a paper, quote, file, or run), and export to Markdown, CSV, JSON, GraphML, and Mermaid. Support is never inferred: a deep_review engine verdict is recorded as unverified, a quote with no PaperMemory paper is no_link, a broken link is not_found naming the missing end, and a ledger that cannot be read is unknown with its reason — scientific_result (not persisted) and preregister (Phase 5A) are reported that way. Live quote re-verification through papermemory_quote_check is opt-in (verify_quotes: true); PaperMemory's SQLite store is never opened directly. Every write is funnelled through assertAuditWrite, which refuses any target outside .dsh/provenance/<audit>/; source ledgers are opened with their own read functions only. Deviations from the plan: the cache is keyed by an audit name rather than a content hash (consistent with every other ledger, with the index hash recorded inside it), and AH unit authorship stays with ah_provenance rather than being re-derived. New skill provenance-audit (catalogue now 752), new guide docs/PROVENANCE.md, prompt section ## Provenance audit, yaml added as a direct dependency for the claim-sidecar reader, and scripts/test-provenance-audit.mjs in CI (test:provenance) — it hashes every file outside the cache before and after indexing and exporting to prove no source ledger was written, and asserts that write attempts to one are refused. Live verification through the DSH Web UI (a throwaway profile linking this tree, a fixture workspace, and a real agent turn) reproduced the packaged index exactly — 22 nodes / 19 edges, claims no_link 3 · not_checked 1 · stale 2, with the stale AH claim showing its recorded and current source hashes — and found one usability gap that is now fixed: tool output includes node ids, so the agent can pass them straight to impact.
  • Phase 1 end-to-end verification in the DSH Web UI. A scripted review-plus-meta-analysis run through the browser agent found and fixed three defects: extract_status no longer reports every required field as missing when a rostered reviewer has not extracted yet (the row now reads awaiting human:<name>, exports gained a missing_reviewers column, and only genuinely absent fields are listed); meta_analysis start accepts a protocol object in addition to flat arguments (flat wins on conflict); and the Markdown report and studies CSV now show per-study weights from the pooled analysis instead of an empty Weight column. The effect_measure description no longer mentions DOR, which is not a pooling measure.
  • Tests: scripts/test-ledger-kit.mjs, scripts/test-review-extract.mjs, `scripts/test-prism...
Read more

v0.33.0 — Academic search parity tools

Choose a tag to compare

@raktim-mondol raktim-mondol released this 31 Oct 05:18

Academic search parity tools

  • Added journal_search, paper_get, paper_context, and database_catalog.
  • Extended literature_search with DOAJ and keyless publisher Crossref deposits; added Springer/IEEE keyed sources.
  • Added OpenCitations fallback and a both direction to openalex_citations.
  • Added identifier BibTeX resolution to citation and paper-scoped snippets to s2_search.
  • Added the academic-search skill and reference bundle, plus the complete README Search tools table.
  • Updated the search-routing, capability-map, paper-pipeline, and request-lifecycle diagrams.

Free providers are fixture-tested and live-smoke-tested. The paid/keyed tiers (Elsevier Serial/ScienceDirect, WoS JCR, Wiley TDM, Springer, IEEE) are implemented but intentionally not live-tested; use your own credentials to verify them.