Commit Graph
18 Commits
Author SHA1 Message Date
potaser de0b9f92be fix(review): EPS batch conversion in zip compile (v2)
- v1 fell through because it required pre-converted PDF in zip
- v2: convert all .eps files post-extract via gs -dSAFER
- 15s timeout per file; fail per-file, not blocking
- Size guards: 20MB per file warning, 100MB total abort
- Conversion log written to output.log
- Verified on real MDPI official zip → 7-page PDF

v1 lesson: test sample had pre-converted PDF but real zip does not
2026-10-14 09:47:49 +08:00
potaser 2797145104 feat(review): P4 two-phase zip compile + XDV→PDF diagnostics + EPS fallback
- inspect/upload zip then compile project (main-file detection, zip safety,
  single-slot queue, failed-envelope carries compile_id + log_url)
- keep failed project/ scene 24h (failed_project_ttl_s; KEEP_FAILED_PROJECTS=1
  forever), success deletes immediately; two-tier compile_jobs sweep
- add tectonic --print and persist full engine chatter to output.log so
  XDV→PDF (xdvipdfmx) errors are visible (MDPI: logo EPS inclusion failure)
- EPS fallback: swap X.eps refs for *-eps-converted-to.pdf when present and
  materialize X.pdf for extension-less graphicx lookup; friendly error when
  no converted PDF exists
- frontend: ReformatPanel zip upload/inspect/run flow; one-off
  scripts/debug_compile.py (gitignored)
- tests: backend 169 passed (22 zip_safety + 34 compile_zip + P3a regression),
  frontend edu vitest 43 passed
2026-10-13 18:42:04 +08:00
potaser 4e19350115 docs: add P3b PR report 2026-10-13 11:23:01 +08:00
potaser e036301e1a feat(review): show format rules summary per target journal
- New summary row: shows the journal's rules (even if no diff applies)
- Fixes user confusion when switching journals yields same diff
- When all rules are null: 'no explicit format requirements'
- Vitest: add case for summary rendering
2026-10-13 11:22:52 +08:00
potaser da84dff9bb fix(review): persist uploaded .tex file in reformat panel
- File now stored in edu.js store (reformatFile)
- Switching target journal no longer requires re-upload
- Explicit reset button clears file
- Vitest: 4 cases
2026-10-13 11:20:33 +08:00
potaser 3a72d3a861 feat(review): P3b enable compile PDF in reformat panel
- ReformatPanel: compile tab state machine (idle/loading/success/error)
- Blob URL for PDF preview; backend path hidden
- First-compile 1-3min hint banner (dismissible)
- QUEUE_FULL 429 with fixed message
- Store: compileStatus/compileResult/compileError + actions
- prewarm_tectonic.sh: minimal .tex compilation to pre-cache TeX bundles
- Vitest: 6 new cases (guide / button / loading / success / error / queue-full)
2026-10-13 10:24:55 +08:00
potaser d077a5b930 test(docs): rebuttal + tracker tests + PR reports 2026-10-12 16:38:28 +08:00
potaser c4dc344a31 feat(edu): presubmit UI + rebuttal assistant + tracker removal
- PresubmitPanel: rationale / conflict chips / file persistence
- RebuttalPanel: Phase 1 UI (3-column, 5-type form, stance pre-check)
- ReformatPanel / ReportPanel: hide internal fields (job id / version)
- EduSideNav: SVG icon, remove tracker menu item
- EduWorkspace: unmount tracker
- edu.js: rebuttal state + presubmitFile + SECTIONS (drop tracker)
2026-10-12 16:38:28 +08:00
potaser cf5ccb3a37 feat(review): presubmit 4-bug fix + rebuttal Phase 1 backend
- 4 bugs: truncation window / keyword scanner / tier heuristic / vocab
- Scanner conflict demotion now truly affects recommendation (major → minor)
- Rebuttal Phase 1: store / parse / draft / 10 endpoints
- max_text_chars 150K + token guard + 400/413 retry
- Journals tier override (13 journals) + jif heuristic (exclude reviews)
2026-10-12 16:38:28 +08:00
potaser d99d5ef74a fix(review): replace presubmit recommendation quota with explainable rule engine
- Remove '3-8 major' quota that made accept/minor_revision unreachable
- Add recommend_engine.py: rule-based R0-R5 + tier-parameterized judgment
- Journal tier (1/2/3) from journals.json review_tier field
- LLM no longer outputs recommendation; engine is single source of truth
- Rationale exposed in API and rendered in PresubmitPanel
- Weak draft still major_revision (R1); strong draft now minor_revision (R5)
2026-10-12 09:55:07 +08:00
potaser 1319328b85 feat(review): auto-seed journal_directory on startup when empty 2026-10-11 20:55:36 +08:00
potaser 55410b663a feat(review): journal format-rule fetch scripts (offline CLI)
- fetch_format_rules.py CLI: robots.txt-aware fetcher (httpx + bs4,
  >=2s per-host throttle) + DeepSeek quote-backed rule extractor
- Status: OUP/Wiley/Cell return 403 from this environment; the five
  featured journals' format_rules in journals.json were manually
  verified against official sites instead. Tooling kept for future
  re-runs; data/format_cache/ is runtime output and gitignored
- Service code never imports this toolchain (standalone CLI only)
2026-10-11 12:19:18 +08:00
potaser dddb70ff6f fix(review): directory partition source shown as constant note
Stop sending partition_source_url; respond with a fixed explanatory
note instead. DB values untouched (dropped after SELECT).
2026-10-11 12:19:18 +08:00
potaser 649e66f41d feat(review): tectonic PDF compile API (P3a) + rename journals panel
- POST/GET /api/review/compile[/{id}[/pdf|/log]]: isolated workdir,
  --untrusted, 60s timeout with process-group kill, single-slot queue
  (429 QUEUE_FULL), 7-day retention sweep
- tools/install_tectonic.sh: pinned tectonic 0.17.0 (sha256) + README
- Rename menu/panel title to 学术期刊情报
- Compile UI stays a placeholder per product decision (P3 deferred)
2026-10-11 12:19:18 +08:00
potaser 42aeb8fa4c feat(review): paper auto-reformat P1 (.tex rule engine + diff panel)
- Rule engine: font/margin/line-spacing/bib-style transformers,
  tighten-only + structural guard + idempotency
- POST/GET /api/review/reformat with 200-envelope errors and job store
- ReformatPanel: journal dropdown (featured + directory search),
  source/diff tabs; compile tab is a dev placeholder for now
- journals.json format_rules_default kept as generic fallback
2026-10-11 12:19:17 +08:00
potaser c747ebd77a feat(review): official format rules for 5 featured journals
- Replace featured list with accessible journals: Genome Biology,
  BMC Plant Biology, Molecular Plant, Frontiers in Plant Science, Rice
- Per-journal format_rules verified against official author guidelines
  (rules_source=official, source_url, last_verified=2026-10-10)
- Update recommend tests to the new seed set
2026-10-11 12:19:17 +08:00
potaser 5a71e29cf7 feat(edu): complete 7-panel academic assistant + journals v4 dataset
Backend:
- review_service: presubmit / recommend / journals / journals/directory /
  format-check / conferences endpoints
- journals.json 5 精选种子 + journal_directory 1056 条全量(v4 数据)
- v4 数据集:2025 JIF(2026 JCR 发布)+ 2025 中科院分区 + 1053 条官网 URL
- format_check 行距 bug 修复(基线 y + 物理过滤 + docx EMU)

BFF:
- review_proxy 反代(修复 httpx build_request await bug)
- REVIEW_ENABLED 开关(默认关闭,零痕部署)

Frontend:
- 教育科研工作台(7 面板 + 菜单 + 状态管理)
- TopBar 教育科研入口(v-show 覆盖层语义,RAG 会话不丢)
- 期刊情报:Tab 切换 / 搜索 / 筛选 / 分页 / 官网列 / 展开凭证
- 智能推荐 / AI预审稿 / 专业报告 / 投稿台账 / 排版规范 / 会议日历
2026-10-10 16:05:08 +08:00
potaser d43d30ee3f feat: add review_service with plant genomics presubmit, journals endpoint, and BFF proxy 2026-10-09 16:54:03 +08:00