Skip to content

Releases: Synectic-Research/research-scan

v0.6.1

Choose a tag to compare

@github-actions github-actions released this 28 Aug 13:47
592f585

Fixed

  • The release workflow's own asset check could not tell a stray file from a missing one.
    It globbed the directory the archives were built into — which, because the builder wrote into
    the repository's tracked assets/, also held the project logo. A file that was never a release
    asset made the check fail, and the v0.6.0 run went red after a wholly successful publish. The
    same glob would also have passed silently had the builder produced nothing: iterating an empty
    directory succeeds. Verification now runs against a manifest the builder emits, so an extra
    file is a non-event and a missing or altered asset is a hard failure, in both directions. The
    archives build into their own directory, which is what the builder's own usage line always
    said. Worth recording alongside it: workflow_dispatch runs the build job only and never
    reaches the release job, so the first time this check ran on a release was the release. It is
    now a script with its own tests, rehearsed by the ordinary suite on every push.

  • doctor reported PubMed as ok when the source is not built. The check probes the
    E-utilities endpoint, and the endpoint answers — but PubMed is routed for biomed and has no
    retrieval adapter, which retrieve has always recorded as unavailable. doctor kept its own
    source list and had no way to say so; it now derives the answer from the same registry, so the
    day PubMed is built the list empties itself. The change is strictly additive: providers keeps
    every key, value and type, including a pubmed that still moves with its probe, and ready,
    ok and the exit code are untouched. A new sources_not_built carries the fact, independent
    of reachability — an unreachable PubMed is still a PubMed that is not built. The human summary
    marks the row rather than ticking it. Whether a routed-but-unbuilt source should affect
    readiness is a separate contract question and is not answered here.

  • The PyPI project page never showed the logo. The README's image path is relative, and a
    published description is served from a URL where that path means nothing. It is now an
    absolute raw URL pinned to v0.6.0, which serves that exact blob — a published description is
    immutable, so a branch pin would let every past release's page re-render with a future logo.

  • The withdrawn quick 6/6 figure is marked inline in AGENTS.md, matching the strike-through
    docs/measurements.md has always carried.

Note

A patch release. No selection, retrieval, screening, expansion, verification, emit, schema or
rubric behaviour changes, and no dependency changes: the shortlist order and the emitted
artefacts are byte-for-byte what 0.6.0 produced. sources/pubmed.py remains a stub — nothing
here builds PubMed retrieval.

v0.6.0

Choose a tag to compare

@github-actions github-actions released this 27 Aug 22:31
b79bdba

Fixed

  • The shortlist tie-break was acting as a recency filter inside large equal-score bands. The
    ordered cut handed to the reranker keyed on score DESC, origin_count DESC, date DESC, and in a
    real pool the first two tiers tie across dozens of papers — so date decided, and the cap dropped
    central papers for being older than their band. On the recorded topic-2 acceptance run a paper
    screened 3 sat at rank 90 of a 289-strong in-window population and never reached the reranker; on
    the golden-topic run the cut fell inside the score-3 band and lost two. Latent since v0.4 and
    present on both eras of artefact — the evidence is in
    docs/measurements.md,
    552f09c462dce07a7c20fa3f30e85c3264f42346:research/experiments/phase12-selection/results/report_tail.md
    §4, and the audit record in
    #1. Fixed in
    1fd1465f413c21104d7af3710ed219ce595ca49a, with the replay that proves it in
    1fd1465f413c21104d7af3710ed219ce595ca49a:research/experiments/phase12-selection/results/src-t1-replay.json.
    Pooled golden survival into the rerank frontier at the shipped cap goes from 8/11 to 10/11,
    which is the finite maximum, with no cap change and no new weights.

Added

  • A runtime deployment fingerprint: the server logs it at startup and /health reports it, so
    a running deployment can be matched to the commit it was built from. RELEASING.md gained the
    post-release step that exercises it — restart, then verify the fingerprint against the release
    SHA — and a release receipt.
  • An experimental reference cognition driver in drivers/stateless/, repo-only. It screens a
    run's batches through stateless provider calls behind a reconciling CID contract, and every run
    writes a machine-readable engine provenance record. It is not part of the installed package:
    it lives outside src/, is excluded from the sdist, was never in the wheel, carries its own
    pinned dependency contract, and the package's own dependency list is unchanged. It informs the
    provider-neutral engine protocol that has not shipped
    (#4); promotion to a documented
    path requires
    end-to-end golden non-inferiority against a fresh multi-replicate conversational control, and
    cost is not a promotion criterion.

Changed

  • Shortlist ordering is now a total order: score DESC, criteria_supported DESC, origin_count DESC, best_retrieval_rank ASC, date DESC, cid ASC. criteria_supported counts the
    distinct sub-criteria screening attributed to a paper (restricted to the ids queries.json
    defines, when the run has that file); best_retrieval_rank is the best position any source gave
    it. Both are evidence the pipeline already produced. The final cid tier removes the last
    dependence on candidates.json order — on the six frozen inputs it moves four rows, all inside
    fully tied bands, with membership at the shipped caps unchanged. No other selection semantics
    change
    : same caps, same threshold, same two windows, same slot rules at emit.
  • The fields that order reads now have domains narrow enough to trust. score and
    Origin.rank are strict integers: Pydantic's lax coercion turned true into 1 and "3" into
    3, so a malformed screen.json bought a place in the order instead of exiting 2. A run whose
    artefacts carry a score or a rank as a string or a boolean now fails at the stage that reads it,
    with the field named. rank keeps its ≥ 0 floor — ranks are zero-based, and the top hit is
    rank 0. publication_date is unchanged at the schema, where partial dates are legitimate
    metadata, but the date tier resolves through a calendar check, so "2024-13-01" sorts with the
    unknowns instead of outranking "2025-01-01" as a raw string. And shortlist.build refuses a
    screen file that scores one cid twice, which both shipped call paths already refused upstream.

v0.5.2

Choose a tag to compare

@github-actions github-actions released this 21 Aug 12:55

Added

  • A documentation site at https://researchscan.synectic.org, built from
    research-scan-docs. The README and
    the package metadata link to it; server.json carries it as websiteUrl.
  • [project.urls] in pyproject.toml — homepage, documentation, repository, changelog and
    issues — so the PyPI sidebar points somewhere.
  • websiteUrl in server.json, which the MCP registry shows on the server's record. It reaches
    the registry only through the manual publish step; RELEASING.md now says so.
  • CI on every push and pull request: lint, tests, the version guard, and a wheel smoke test that
    installs the built artifact into a clean venv and makes it state its own version. Python 3.11
    and 3.13, since requires-python is >=3.11.
  • scripts/check_versions.py, the five-way version guard as a script instead of Python embedded
    in a workflow. ci.yml and release.yml both call it, and it runs locally the same way.

Changed

  • The README opens on what the tool does and for whom, and one description now runs across the
    package, the plugin, the marketplace entry and the skill, rather than four variants of it. The
    registry record carries that sentence's first clause: the MCP registry caps description at
    100 characters, and the full sentence is 119.
  • SKILL.md's command-not-found hint installs from PyPI (uv tool install research-scan) instead
    of from a git URL. The package has been on PyPI since 0.5.0.
  • The AGENTS.md anti-pattern about pool size now cites the corrected per-100-screened figures.
    It had rested on a topic-2 quick 6/6 that was withdrawn at v0.2.2, when the run behind it
    turned out to have arXiv failing all eight queries.

Removed

  • ok and tool_version from doctor --json. Read ready and version, identical in value.
    doctor --json is a stable interface from 0.5.2 onward: keys are added, never removed or
    repurposed. The two removed keys existed in 0.5.0 and 0.5.1 as undocumented duplicates of
    ready and version; the README has always named ready as the boolean.

v0.5.1

Choose a tag to compare

@andrayxz andrayxz released this 20 Aug 23:02

Packaging patch: PyPI long description (readme metadata) and MCP registry. No code changes. See CHANGELOG.md.

v0.5.0 — Open Source Developer Release

Choose a tag to compare

@andrayxz andrayxz released this 20 Aug 22:36

First public release. research-scan finds the 5–10 recent papers with the highest impact on a research question, ranked against the brief's own criteria, DOI-verified.

Install: uvx research-scan (PyPI: https://pypi.org/project/research-scan/), then research-scan configure and research-scan doctor.

MCP (stdio) for Claude Code, Claude Desktop, and Cursor — see the README for the .mcp.json snippet.

Full details in CHANGELOG.md. Published to PyPI via GitHub Trusted Publishing with PEP 740 attestations.