You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: SKILL.md
+3-2Lines changed: 3 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -160,12 +160,13 @@ Local-library-first rule (applies only when the Zotero check above succeeds):
160
160
- The note must include figure/table placeholders for all major visuals rather than silently skipping them.
161
161
- Every kept figure/table placeholder must appear directly under the most relevant analytical section named by its `建议位置`; do not collect unresolved placeholders in catch-all sections such as `剩余图表占位` or `Remaining figures`.
162
162
- Every kept figure/table placeholder must use the standard `> [!figure]` callout format with `建议位置`, `放置原因`, and `当前状态`; do not use ordinary paragraph markers such as `[图表占位 | Fig. 1]`, `图表占位:Table 2`, or `Figure Placeholder | Fig. 3`.
163
-
- Real images may replace some placeholders, but only if they clearly match the corresponding paper figure/table.
163
+
- Real images replace placeholders when they clearly match the corresponding paper figure/table and pass the visual-usability gate.
164
164
- When inserting a real image, use the `relative_markdown_embed` from `figure_table_decisions.json`; final save with `scripts/write_obsidian_note.py --figure-decisions ...` copies the image into the paper-local `images/` directory.
165
165
- When a real image is inserted, render it as the Obsidian embed or Markdown image embed followed immediately by one italic caption line.
166
166
- Do not keep a redundant `> [!figure]` placeholder callout for the same inserted real figure.
167
167
- Figure captions in the note must preserve the original paper numbering such as `Fig. 1` or `Table 2`.
168
-
- If a figure/table candidate is marked usable, resolve it explicitly: insert the real image, keep the placeholder because of a concrete visual defect, keep it as lower-priority because a more central related figure is already inserted, or keep it because materialization failed.
168
+
- If a figure/table candidate is marked usable and has a real image path, insert the real image. Do not keep a placeholder merely because the figure/table is lower priority, supplemental, already summarized in text, or less central than another inserted figure.
169
+
- A kept placeholder is valid only when the image cannot be safely inserted because of a concrete visual defect, missing candidate, unresolved visual review, identity mismatch, contamination, or materialization/copy/write failure.
169
170
- For `usable_candidate` or `needs_visual_quality_check` / `review` candidates, make the visual decision only after inspecting the actual candidate image file exposed by the pipeline. Record the concrete visual observation behind the decision. Do not claim manual visual review, visual inspection, or "no reliable insertable candidate" unless the candidate image was actually opened and inspected.
170
171
-`reject_visual_quality` and `asset_candidate_missing` are fail-closed script states. They do not require manual visual review before keeping a placeholder or skipping insertion; treat them as automatic extraction outcomes unless you explicitly inspect or re-extract the source asset.
171
172
- Do not misreport missing candidates as materialization failures: `asset_candidate_missing`, empty `source_image_path`, or no independent crop means the placeholder status should say no high-confidence image candidate was extracted. Use materialization/copy/write failure language only after a real chosen image asset failed to copy or write.
Copy file name to clipboardExpand all lines: references/figure-placement.md
+4-3Lines changed: 4 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -47,13 +47,14 @@ Do not let scripts make the final semantic choice; scripts should only prepare c
47
47
48
48
## Usable Candidate Decision Contract
49
49
50
-
`usable_candidate` means the candidate is eligible for final judgment; it is not an automatic insertion command.
50
+
`usable_candidate` means the pipeline found a candidate that is visually eligible to insert.
51
51
For every usable figure/table candidate, resolve the final note into one of these states:
52
52
-`insert`: materialize the image and replace the placeholder with the real image plus one italic caption line
53
53
-`kept_placeholder_visual_defect`: keep the placeholder because manual review found a concrete visual defect, such as contamination, truncation, missing table body, partial subfigure, or caption loss
54
-
-`kept_placeholder_lower_priority`: keep the placeholder because a more central or more direct related figure/table is already inserted
55
54
-`kept_placeholder_materialization_blocked`: keep the placeholder because `materialize_figure_asset.py` or file copy/write permission failed
56
55
56
+
Do not keep a usable candidate as a placeholder merely because it is lower priority, supplemental, already summarized in text, or less central than another inserted figure/table. If a usable candidate is important enough to appear as a callout in the final note, insert the real image. If it is not important enough to appear, omit it or summarize it in prose rather than leaving a placeholder.
57
+
57
58
For `usable_candidate` and `needs_visual_quality_check` / `review` candidates, final visual judgment requires opening and inspecting the actual candidate image file.
58
59
Do not write that manual visual review found no reliable insertable candidate unless that inspection actually happened.
59
60
If no manual inspection happened, name the state as an unresolved visual review requirement or an automatic script outcome, not as a reviewed visual defect.
@@ -63,7 +64,7 @@ Keep missing-candidate cases separate from materialization failures:
63
64
- reserve `materialization blocked` only for a real chosen image asset that failed during `materialize_figure_asset.py`, final copy, permission, or `write_obsidian_note.py`
64
65
- if a crop includes another Figure/Table caption or another figure body, treat it as a visual defect or missing independent candidate; do not call it usable just because it contains the target label
65
66
66
-
`plan_figure_table_decisions.py`may preselect high-priority usable figure crops as `insert`.
67
+
`plan_figure_table_decisions.py`preselects planned usable figure/table crops as `insert`.
67
68
That does not mean `run_pipeline.py` writes into the vault; materialization happens at the final save step, where `write_obsidian_note.py --figure-decisions ...` copies the selected images and refuses a note that does not reference the selected image path.
68
69
69
70
Do not use soft reasons such as keeping the note light, values already transcribed, future lookup, or convenient back-reference as the standalone reason for keeping a usable candidate as a placeholder.
Copy file name to clipboardExpand all lines: references/final-writing.md
+3-1Lines changed: 3 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -242,7 +242,9 @@ If the bundle contains candidate figure pages or candidate image files:
242
242
- still make the final decision yourself rather than trusting the candidate ranking blindly
243
243
- for `usable_candidate` or `needs_visual_quality_check` / `review`, make that final decision only after opening and inspecting the actual candidate image file; do not say manual visual review found no reliable candidate unless that inspection actually happened
244
244
- treat `reject_visual_quality` and `asset_candidate_missing` as automatic fail-closed script outcomes that do not require manual visual review
245
-
- if a candidate is usable, resolve it explicitly as inserted, kept for a concrete visual defect, kept as lower-priority because a more central related figure is already inserted, or kept because materialization/copy/write failed
245
+
- if a candidate is usable and has a real image path, insert it
246
+
- do not keep a usable candidate as a placeholder merely because it is lower priority, supplemental, already summarized in text, or less central than another inserted figure/table
247
+
- keep a placeholder only when there is a concrete visual defect, missing candidate, unresolved visual review, identity mismatch, contamination, or materialization/copy/write failure
246
248
- never describe a missing image asset, empty `source_image_path`, `asset_candidate_missing`, or absent independent crop as a materialization/copy failure
247
249
- if the crop contains a different Figure/Table caption or another figure body, describe that as contamination/visual defect or lack of an independent crop, not as a usable clean candidate
248
250
- do not keep a usable candidate as a placeholder only because the note should stay light, the values were transcribed, the figure can be checked later, or it is convenient as a back-reference
Copy file name to clipboardExpand all lines: references/workflow.md
+4-4Lines changed: 4 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -123,7 +123,7 @@ For a normal single-paper note request, the pipeline below is a required executi
123
123
8.`plan_figure_table_decisions`
124
124
Build a decision row for every detected figure/table caption.
125
125
Each item should have one explicit state: `insert`, `placeholder`, `low_priority`, `visual_defect`, or `skip` with reason.
126
-
High-priority usable figure crops may be marked `insert`, but this is still a final-save obligation, not a pipeline-time vault write.
126
+
Planned usable figure/table crops with real image paths should be marked `insert`; this is still a final-save obligation, not a pipeline-time vault write.
127
127
Completion condition:
128
128
- every major detected figure/table has a recorded decision or skip reason
129
129
@@ -163,7 +163,7 @@ For a normal single-paper note request, the pipeline below is a required executi
163
163
Completion condition:
164
164
- every substantive planned section cites either a valid `section_id` or a valid page range
165
165
- every substantive planned section has a paper-specific `focus`/reading goal, not only a valid anchor
166
-
-high-priority usable figure candidates are not left as vague placeholders
166
+
- usable figure/table candidates with real image paths are not left as vague placeholders or low-priority placeholders
167
167
- old broad bundle references such as `synthesis_bundle.evidence.method_evidence` are rejected
168
168
- truncated source text blocks full-read drafting unless partial reading was explicitly accepted
169
169
@@ -240,8 +240,8 @@ For a normal single-paper note request, the pipeline below is a required executi
240
240
- create a new domain only when no existing domain fits well
241
241
- do not save directly into the bare papers root
242
242
Complete the figure decision before this step:
243
-
- replace high-confidence placeholders with real images
244
-
- keep lower-confidence items as placeholders
243
+
- replace usable matched placeholders with real images
244
+
- keep lower-confidence, missing, contaminated, or blocked items as placeholders
245
245
- pass the figure decision table to `write_obsidian_note.py --figure-decisions ...` so `insert` rows are copied into the paper-local `images/` folder and must be referenced by the final Markdown
246
246
- do not split text writing and figure handling into two separate user turns by default
247
247
If the configured vault or its paper-local `images/` directory cannot currently be written:
0 commit comments