lllin000_PaperForge/paperforge/schema/field_registry.yaml
Research Assistant b1fdbc30eb feat: P0 fixes (ref sort, caption insert) + P1 figure containment render hygiene
P0:
- Fix 2: _ref_number_sort_key handles [N] bracket format (ocr_render.py:481)
- Fix 4: remove figure_caption from _INSERT_CANDIDATE_ROLES (ocr_document.py:3846)
- Fix 5: filter demoted body_paragraph from figure legends (ocr_figures.py:2950)

P1:
- figure containment render-hygiene pass after table inventory writeback
- 6 helpers: _cluster_bboxes_by_proximity, _is_contained,
  _highly_overlaps_any_matched_region, _figure_region_bbox,
  _matched_asset_keys, tag_figure_contained_text
- Wire call site in postprocess_ocr_result() (ocr.py:1891)

Infra:
- Sync workspace fulltext after rebuild (asset_index.py)
- Fix UnboundLocalError on index-refresh (sync_service.py)
- Add missing frontmatter fields to field registry (field_registry.yaml)
- 283 + 19 = 302 tests passing
2026-06-27 22:56:22 +08:00

446 lines
9.1 KiB
YAML

frontmatter:
aliases:
type: list
required: false
public: true
description: "Obsidian wikilink aliases"
owner: obsidian
introduced_in: "1.5"
tags:
type: list
required: false
public: true
description: "Obsidian tags"
owner: obsidian
introduced_in: "1.5"
journal:
type: str
required: false
public: true
description: "Journal name"
owner: sync
introduced_in: "1.0"
first_author:
type: str
required: false
public: true
description: "First author name"
owner: sync
introduced_in: "1.0"
pmid:
type: str
required: false
public: true
description: "PubMed ID"
owner: sync
introduced_in: "1.0"
impact_factor:
type: str
required: false
public: true
description: "Journal impact factor"
owner: sync
introduced_in: "1.0"
abstract:
type: str
required: false
public: true
description: "Paper abstract"
owner: sync
introduced_in: "1.0"
keywords:
type: list
required: false
public: true
description: "Paper keywords"
owner: sync
introduced_in: "1.0"
ocr_time:
type: str
required: false
public: false
description: "OCR completion timestamp"
owner: ocr
introduced_in: "2.1"
zotero_key:
type: str
required: true
public: true
description: "Zotero citation key"
owner: sync
introduced_in: "1.0"
citation_key:
type: str
required: false
public: true
description: "Better BibTeX citation key (e.g. aaronStimulationGrowthFactor2004)"
owner: sync
introduced_in: "1.5"
domain:
type: str
required: true
public: true
description: "Classification domain"
owner: sync
introduced_in: "1.0"
title:
type: str
required: true
public: true
description: "Paper title"
owner: sync
introduced_in: "1.0"
year:
type: str
required: false
public: true
description: "Publication year"
owner: sync
introduced_in: "1.0"
doi:
type: str
required: false
public: true
description: "Digital Object Identifier"
owner: sync
introduced_in: "1.0"
collection_path:
type: list
required: false
public: true
description: "Zotero collection paths (YAML list of full paths)"
owner: sync
introduced_in: "1.5.5"
collection_tags:
type: list
required: false
public: true
description: "Zotero collection tag segments (split by /, no duplicates)"
owner: sync
introduced_in: "1.5.5"
has_pdf:
type: bool
required: true
public: true
description: "Has PDF attachment (DEPRECATED)"
owner: sync
deprecated: true
replacement: lifecycle
introduced_in: "1.0"
pdf_path:
type: str
required: false
public: true
description: "Wikilink to main PDF"
owner: sync
introduced_in: "1.0"
supplementary:
type: list
required: false
public: true
description: "Wikilinks to supplementary PDFs"
owner: sync
introduced_in: "1.0"
fulltext_md_path:
type: str
required: false
public: true
description: "Wikilink to OCR fulltext"
owner: ocr
introduced_in: "1.0"
recommend_analyze:
type: bool
required: false
public: true
description: "System recommends analysis (DEPRECATED)"
owner: sync
deprecated: true
replacement: lifecycle
introduced_in: "1.0"
analyze:
type: bool
required: false
public: true
description: "User requests deep reading"
owner: user
introduced_in: "1.0"
do_ocr:
type: bool
required: false
public: true
description: "User requests OCR (DEPRECATED)"
owner: user
deprecated: true
replacement: ocr_status
introduced_in: "1.0"
ocr_status:
type: enum
values:
- none
- pending
- queued
- processing
- done
- done_incomplete
- failed
- blocked
- nopdf
required: false
public: true
description: "OCR processing status"
owner: ocr
default: "none"
introduced_in: "2.1"
ocr_redo:
type: bool
required: false
public: true
description: "User requests OCR redo"
owner: user
introduced_in: "1.5.14"
deep_reading_status:
type: enum
values:
- pending
- done
required: false
public: true
description: "Deep reading status"
owner: deep_reading
default: "pending"
introduced_in: "1.0"
path_error:
type: str
required: false
public: true
description: "Path resolution error"
owner: sync
introduced_in: "1.0"
index_entry:
file:
type: str
required: true
public: true
description: "Path to formal note"
owner: index
introduced_in: "2.1"
zotero_key:
type: str
required: true
public: true
description: "Zotero citation key"
owner: index
introduced_in: "2.1"
domain:
type: str
required: true
public: true
description: "Classification domain"
owner: index
introduced_in: "2.1"
title:
type: str
required: true
public: true
description: "Paper title"
owner: index
introduced_in: "2.1"
year:
type: str
required: false
public: true
description: "Publication year"
owner: index
introduced_in: "2.1"
doi:
type: str
required: false
public: true
description: "DOI"
owner: index
introduced_in: "2.1"
collection_path:
type: list
required: false
public: true
description: "Zotero collection paths (YAML list of full paths)"
owner: index
introduced_in: "1.5.5"
collection_tags:
type: list
required: false
public: true
description: "Zotero collection tag segments (split by /, no duplicates)"
owner: index
introduced_in: "1.5.5"
has_pdf:
type: bool
required: true
public: true
description: "Has PDF (DEPRECATED)"
owner: index
deprecated: true
replacement: lifecycle
introduced_in: "2.1"
pdf_path:
type: str
required: false
public: true
description: "PDF path"
owner: index
introduced_in: "2.1"
supplementary:
type: list
required: false
public: true
description: "Supplementary PDFs"
owner: index
introduced_in: "2.1"
fulltext_md_path:
type: str
required: false
public: true
description: "Fulltext path"
owner: index
introduced_in: "2.1"
recommend_analyze:
type: bool
required: false
public: true
description: "Recommend analysis (DEPRECATED)"
owner: index
deprecated: true
replacement: lifecycle
introduced_in: "2.1"
analyze:
type: bool
required: false
public: true
description: "Analysis flag"
owner: index
introduced_in: "2.1"
do_ocr:
type: bool
required: false
public: true
description: "OCR flag (DEPRECATED)"
owner: index
deprecated: true
replacement: ocr_status
introduced_in: "2.1"
ocr_status:
type: enum
values:
- none
- pending
- queued
- processing
- done
- done_incomplete
- failed
- blocked
- nopdf
required: false
public: true
description: "OCR status"
owner: index
introduced_in: "2.1"
deep_reading_status:
type: enum
values:
- pending
- done
required: false
public: true
description: "Deep reading status"
owner: index
introduced_in: "2.1"
path_error:
type: str
required: false
public: true
description: "Path error"
owner: index
introduced_in: "2.1"
lifecycle:
type: enum
values:
- pdf_ready
- ocr_ready
- analyze_ready
- deep_read_done
- error_state
required: false
public: true
description: "Derived lifecycle stage"
owner: index
introduced_in: "2.1"
health:
type: dict
required: false
public: true
description: "Derived health dimension scores (dict: pdf_health, ocr_health, note_health, asset_health)"
owner: index
introduced_in: "2.1"
maturity:
type: str
required: false
public: true
description: "Derived maturity score"
owner: index
introduced_in: "2.1"
next_step:
type: str
required: false
public: true
description: "Recommended next action"
owner: index
introduced_in: "2.1"
ocr_meta:
ocr_status:
type: enum
values:
- none
- pending
- queued
- processing
- done
- done_incomplete
- failed
- blocked
- nopdf
required: true
public: true
description: "OCR processing status"
owner: ocr
introduced_in: "2.1"
error:
type: str
required: false
public: true
description: "Error message if failed"
owner: ocr
introduced_in: "1.0"
start_time:
type: str
required: false
public: false
description: "OCR start timestamp"
owner: ocr
introduced_in: "1.0"
completion_time:
type: str
required: false
public: false
description: "OCR completion timestamp"
owner: ocr
introduced_in: "1.0"
page_count:
type: int
required: false
public: false
description: "Number of pages processed"
owner: ocr
introduced_in: "1.0"