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 CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ All notable changes to Get Physics Done are documented here.

## vNEXT

- Bound the `mcp` dependency to `>=1.27.0,<2`. mcp 2.x removed `mcp.server.fastmcp`, so fresh installs without the `arxiv` extra, including `npx -y get-physics-done`, resolved mcp 2.x and seven built-in MCP servers failed to import (#273).
- Add pandoc-driven markdown→LaTeX pipeline for the paper writer. Sections can opt in via `Section.content_format="markdown"`; raw-LaTeX payloads still pass through unchanged. Pandoc is probed once per `render_paper` call and shared across sections. When pandoc is missing the markdown path raises `PandocNotAvailable` with a recovery hint; legacy `maybe_convert_to_latex` callers degrade to pass-through. `--natbib` is the default so `@key` / `[@k1; @k2]` emit `\citet`/`\citep` for the template's `\bibliography{…}` to resolve; `pandoc-crossref` is auto-enabled when installed and `pandoc-citeproc` is intentionally excluded from auto-detection.
- Fix Nature template citation rendering: switch from `naturemag.bst` to `unsrtnat` with `\usepackage[numbers,super,sort&compress]{natbib}`. `naturemag.bst` predates natbib and has no author-name macro, so pandoc's `\citet` rendered as "(author?)" in the final PDF while passing every string-level `.tex` assertion.
- Fix PRL template cite-command resolution under revtex4-2: pass `natbib` as a class option (`\documentclass[…,natbib]{revtex4-2}`) instead of `\usepackage{natbib}`, which would otherwise option-clash with revtex's internal natbib load.
Expand Down
4 changes: 3 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,9 @@ dependencies = [
"rich>=15.0.0",
"pydantic>=2.13.3",
"PyYAML>=6.0.3",
"mcp>=1.27.0",
# mcp 2.x removed `mcp.server.fastmcp`, which seven of the built-in
# servers import. Keep the 1.x API until they are ported.
"mcp>=1.27.0,<2",
# Utilities
"pybtex>=0.25.1",
"Pillow>=12.1.1",
Expand Down
4 changes: 2 additions & 2 deletions tests/test_release_consistency.py
Original file line number Diff line number Diff line change
Expand Up @@ -1475,7 +1475,7 @@ def test_public_runtime_dependency_surface_stays_curated() -> None:
optional = project.get("optional-dependencies", {})

assert _normalized_dependency_names(dependencies) == _expected_runtime_dependency_names()
assert "mcp>=1.27.0" in dependencies
assert "mcp>=1.27.0,<2" in dependencies
assert not any(item.startswith("mcp[") for item in dependencies)
assert optional == _EXPECTED_OPTIONAL_DEPENDENCIES

Expand All @@ -1493,7 +1493,7 @@ def test_uv_lock_tracks_runtime_dependency_extras() -> None:

assert [item for item in dependencies if isinstance(item, dict) and item.get("name") == "mcp"] == [{"name": "mcp"}]
assert [item for item in requires_dist if isinstance(item, dict) and item.get("name") == "mcp"] == [
{"name": "mcp", "specifier": ">=1.27.0"}
{"name": "mcp", "specifier": ">=1.27.0,<2"}
]


Expand Down
2 changes: 1 addition & 1 deletion uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading