feat: text-layer grounding (extractor authority, guard rescue tier, verifier oracle + hi-DPI crops)
- backend/text_layer.py: PyMuPDF text-layer extraction, fuzzy evidence
bbox matching, 300-DPI crop rendering, coverage-gap signal
- extractor (classic + agent): TEXT LAYER block appended at call sites;
grounding guard gains text-layer rescue tier (grounding=text_layer stamp)
- verifier: {text_layer} oracle excerpt + evidence-located hi-DPI crops
replacing full-page images (fallback preserved, I2 guard intact)
- coverage gaps: text-bearing pages with zero extraction -> failed-scope
gap findings (agent) / log-only (classic)
- config knobs: TEXT_LAYER_ENABLED/MIN_CHARS/MAX_CHARS, VERIFY_TEXT_MAX_CHARS,
VERIFY_HI_DPI_CROPS, VERIFY_CROP_DPI, VERIFY_CROP_MARGIN_PTS
- tests: 22 new (text_layer unit, grounding/render, runner-level flow)
Spec: docs/superpowers/specs/2026-08-12-text-layer-grounding-design.md
This commit is contained in:
@@ -78,3 +78,18 @@ AGENT_VERIFY_MAX_CHECKS=20
|
||||
AGENT_VERIFY_SEVERITIES=critical,high
|
||||
AGENT_VERIFY_REASONING_EFFORT=low
|
||||
VERIFY_MAX_TOKENS=8192
|
||||
|
||||
# Text-layer grounding (deterministic PDF text layer via PyMuPDF)
|
||||
# TEXT_LAYER_ENABLED: master switch for text-layer extraction/grounding
|
||||
# TEXT_LAYER_MIN_CHARS: below this per page the sheet stays vision-only
|
||||
# TEXT_LAYER_MAX_CHARS: cap of text layer injected into the extractor prompt
|
||||
# VERIFY_TEXT_MAX_CHARS: cap of the text-layer excerpt in verify scopes
|
||||
# VERIFY_HI_DPI_CROPS: evidence-located high-DPI crops in the verifier
|
||||
# VERIFY_CROP_DPI / VERIFY_CROP_MARGIN_PTS: crop render DPI / padding (PDF points)
|
||||
TEXT_LAYER_ENABLED=true
|
||||
TEXT_LAYER_MIN_CHARS=20
|
||||
TEXT_LAYER_MAX_CHARS=12000
|
||||
VERIFY_TEXT_MAX_CHARS=8000
|
||||
VERIFY_HI_DPI_CROPS=true
|
||||
VERIFY_CROP_DPI=300
|
||||
VERIFY_CROP_MARGIN_PTS=36
|
||||
|
||||
Reference in New Issue
Block a user