Research Assistant
f9b5fb0541
feat(ocr): journal layout generalization — structured boundary, container regime, legend validation
...
- Task 1: TailBoundary namedtuple with body_end/backmatter_start/references_start
- Task 2: _classify_backmatter_form — 'container' (PeerJ) vs 'flat' (Frontiers) regime
- Task 3: _attach_container_bodies, _container_child flag for ### child headings
- Task 4: Style-family classification already complete
- Task 6: _is_formal_legend threshold raised to 100, more axis_words added,
low-confidence fallback with legend_uncertain flag for rejected captions
- 2GN9LMCW: authors correct, furniture suppressed, heading hierarchy,
container child headings, Figure 4 uncertain
- 7C8829BD: 26/26 markers, correct tail order, no regression
- 296/296 tests pass
2026-06-05 23:48:56 +08:00
Research Assistant
7f19dd99ae
feat: integrate legacy OCR backfill into sync runtime
2026-06-05 12:58:12 +08:00
Research Assistant
3f51dc9d82
feat: classify legacy OCR papers without version state
2026-06-05 12:55:19 +08:00
Research Assistant
98ef3b83db
style: fix lint issues in new Phase4.1/Phase5 code
2026-06-05 12:23:55 +08:00
Research Assistant
15cd21b2b7
fix: defer OCR derived rebuilds outside sync critical path
2026-06-05 12:10:32 +08:00
Research Assistant
5efb4435b4
feat: integrate OCR version state into sync runtime
2026-06-05 11:24:05 +08:00
Research Assistant
5a8460aae0
feat: add OCR runtime preflight warnings for auto-rebuild
2026-06-05 11:03:22 +08:00
Research Assistant
b9885f369d
feat: add Gemini CLI agent platform support (.gemini/skills)
2026-06-01 19:46:17 +08:00
Research Assistant
c799ea1df9
fix: indentation in sync_service rebuild path
2026-06-01 13:31:04 +08:00
Research Assistant
3b7fd71925
fix: wire --rebuild-index flag to bypass hash check, enabling ocr_redo regeneration
2026-06-01 13:27:45 +08:00
Research Assistant
3d820ad5c9
fix(sync): avoid prune crash when optional deps are missing
2026-05-31 20:55:17 +08:00
Research Assistant
03ad9ce64f
feat: stabilize paperforge query planning
2026-05-27 21:20:15 +08:00
Research Assistant
02ef2d9b52
feat(sync): auto-detect orphan papers after sync, show modal in Obsidian
...
- prune.py: _enrich_orphan_preview() reads note frontmatter for metadata
- sync_service.py: always run dry-run prune, include in result
- sync.py: write sync-orphan-state.json for plugin consumption
- main.js: add checkOrphanState() + PaperForgeOrphanModal with select/toggle
- styles.css: orphan modal styles (list, tags, dimmed rows)
- cli.py: add --keys to prune command for targeted deletion
2026-05-19 00:31:19 +08:00
Research Assistant
20d07433c5
chore: add phase timing to sync_service logging
2026-05-18 22:33:00 +08:00
Research Assistant
5902f6cd4b
fix(sync): embed triggers async with DEVNULL output; memory rebuild runs once in commands layer; PDF errors are expected for missing Zotero files
2026-05-18 22:13:38 +08:00
Research Assistant
3c770aeee4
fix(sync): memory/vector rebuilds are best-effort, not sync result; fix has_deep_reading_content import in asset_index.py
2026-05-18 22:09:42 +08:00
Research Assistant
d2de2a36bd
style: fix lint issues (F541 f-strings, B007 unused var, F841 unused var)
2026-05-18 22:00:10 +08:00
Research Assistant
214453d69c
feat(prune): integrate prune into sync --prune
2026-05-18 21:57:04 +08:00
Research Assistant
8dc58ce1f5
fix: close review findings for auto-sync, sync PFResult, and global actions
...
Remove invalid sync --key path from OCR auto-refresh, surface memory rebuild
failures in sync PFResult instead of swallowing them, and complete the
persistent Global action group with Status + Repair.
2026-05-16 23:48:34 +08:00
Research Assistant
2b552be9e6
feat: runtime contract hardening + skill/command truth alignment (Package A+B)
...
Atomic snapshots, canonical index mutation serialization, sync post-clean truth,
plugin path config-awareness, embed stop signal honesty, full snapshot bootstrap,
pf_ prefix unification, workflow command/lifecycle/path corrections,
mechanical/cognitive route separation with unknown-command guard.
2026-05-16 22:38:43 +08:00
Research Assistant
ffd4eb7ca2
refactor: unify skills into paperforge compound skill (6 workflows)
2026-05-14 17:56:25 +08:00
Research Assistant
078baa6ded
fix(setup): overwrite skills on wizard re-run, never overwrite AGENTS.md
2026-05-12 02:13:03 +08:00
Research Assistant
c0cc05ab32
refactor(skills): simplify skill deployment — single copytree for all platforms
...
- Remove format dispatch (flat_command/skill_directory/rules_file) — all platforms unified
- skill_deploy.py: 257→81 lines, only AGENT_SKILL_DIRS + copytree + AGENTS.md
- AgentInstaller switches to vault-local paths, removes deploy_commands step
- Remove _deploy_skills dead code in update.py
2026-05-10 23:22:42 +08:00
Research Assistant
f885adae48
feat: skill auto-deploy in update + Copy Context as pure JS + shared skill_deploy service
...
- New services/skill_deploy.py: single source of truth for agent skill deployment
- AGENT_CONFIGS with 9 platforms, all vault-local
- deploy_skills() with install/update mode (overwrite flag)
- Used by both setup wizard and update worker
- update.py: _deploy_all_skills() after pip/git/zip update
- setup_wizard.py: delegates skill deploy to shared service
- config.py: add agent_platform default
- main.js: Copy Context + Copy Collection Context now pure JS
- Uses in-memory _cachedItems / _currentPaperEntry
- No subprocess spawn, no timeout, no JSON parse errors
- testable.js: remove needsKey/needsFilter from context actions
- commands.test.mjs: update assertions for removed flags
2026-05-10 12:33:23 +08:00
Research Assistant
a466a42d32
fix: CI dispatch tests — mock at SyncService level, restore --selection/--index flags
2026-05-09 22:42:53 +08:00
Research Assistant
a30ffd3835
refactor: eliminate frontmatter regex duplication — route everything through adapter
...
- adapters/obsidian_frontmatter: +read_frontmatter_bool(note_path, key) public API
- asset_index: delete private _read_frontmatter_bool/_optional copies, import from adapter
- sync_service cleanup methods: raw regex → read_frontmatter_dict()
- ld_deep: fix private worker import → adapter
- config.py paperforge_paths: +config and index keys (domain-collections, formal-library)
- sync_service.run(): pipeline_paths → self.resolve_paths()
2026-05-09 22:30:59 +08:00
Research Assistant
05629bce82
refactor: v2.1 contract hardening — PFResult unification, ErrorCode expansion, adapter cleanup, SyncService orchestration
...
Core contract:
- ErrorCode: 8→26 with _missing_() graceful degradation for unknown codes
- PFResult: +warnings/next_actions, PFError: +suggestions
- OcrStatus: 4→9 granular states (NONE/QUEUED/BLOCKED/NO_PDF/DONE_INCOMPLETE restored 1:1)
- field_registry.yaml: +owner/deprecated/replacement/enum values/default
Adapter cleanup:
- new core/io.py (read_json/write_json), core/date_utils.py (extract_year)
- new adapters/collections.py (build_collection_lookup)
- adapters/bbt.py: cut worker dependency, _private→public+alias
- worker/_utils.py + _domain.py: re-export from core instead of duplicate defs
Command unification:
- All 6 commands (sync/status/ocr/deep/repair/dashboard) → PFResult
- cli.py --json dest unified to 'json' (was json_output on status/doctor)
- commands/sync.py → SyncService (no more int/dict/PFResult mixing)
Service hardening:
- SyncService.run() orchestrates full sync lifecycle (select→index→clean)
- cleanup loops (orphaned records, flat notes) migrated from worker
- worker/sync.py: freeze line + services→worker one-way dependency
- plugin/main.js: formal-library.json fallback deprecation warning
Verification: 181/181 tests, 0 new lint errors
2026-05-09 22:20:07 +08:00
Research Assistant
bbd39a90d3
v1.4.17rc4
...
Milestone v2.1: Contract-Driven Architecture & Engineering Hardening
- Stop the Bleeding: version sync checker, PyYAML hardening, install docs unification
- Contract Layer: PFResult/PFError dataclasses, ErrorCode enum, --json wrapping
- Service Extraction: sync.py decomposed into 3 adapters + SyncService
- State Machine: PdfStatus/OcrStatus/Lifecycle enums, transitions, field registry
- Setup Modularization: setup_wizard.py decomposed into 6 classes
173 tests passing, 0 regressions.
2026-05-09 17:05:07 +08:00