Communitygithub.com

Iabstergo1/pdf-to-study-kb

对话式 agent(Claude Code / Codex)驱动的本地知识库编译器:把 PDF/DOCX/PPTX/Markdown 增量编译进一个去重、互联、可复现的 Obsidian 学习知识库。

What is pdf-to-study-kb?

pdf-to-study-kb is a Claude Code agent skill that 对话式 agent(Claude Code / Codex)驱动的本地知识库编译器:把 PDF/DOCX/PPTX/Markdown 增量编译进一个去重、互联、可复现的 Obsidian 学习知识库。.

Works withClaude CodeCodex CLI~Cursor
npx skills add Iabstergo1/pdf-to-study-kb

Ask in your favorite AI

Open a new chat with this agent skill pre-loaded.

Documentation

kb-qa — post-publish / pre-save QA report

Run broad QA over the published vault or a pre-save candidate: coverage, evidence spot-checks, formula screenshot spot-checks, concept pollution, an ljg-qa-style Q-chain. Produces a report and Review-Queue proposals only; it does not edit content pages.

1. Triggers / Non-triggers

  • Triggers: "run a KB QA", "audit coverage", "spot-check evidence", "run the Q-chain", "check for concept pollution", "pre-save QA".
  • Non-triggers: "semantic health check", "find contradictions", "does the comparison cover the key dimensions", "Q2 added value" belong to wiki-lint-semantic; handling an existing Review-Queue uses kb-review; read-only Q&A uses kb-query; a new source uses ingest. kb-qa and wiki-lint-semantic are mutually exclusive on triggers.

2. Inputs

  • Scope: whole vault, a domain, a source, a query-session, or a proposed write candidate.
  • Read: wiki/index.generated.md, wiki/concepts/_registry.yaml, and the relevant source/concept/topic/comparison/synthesis/lesson pages.
  • May read: pipeline-workspace/query-sessions/<run_id>/, wiki/Review-Queue/, the deterministic lint result.

3. Outputs

  • pipeline-workspace/reports/kb-qa/<run_id>.md: the QA report.
  • For actionable findings, write wiki/Review-Queue/kb-qa-<YYYY-MM-DD>.md proposals; no direct content-page edits.
  • The report covers scope, the Q-chain, sampled items, findings, risk level, and the suggested follow-up skill (usually kb-review).

4. Dependencies

  • CLI: python scripts/pipeline.py status; if needed python scripts/pipeline.py lint --source <source_id>.
  • Protocols: docs/skill-runtime/schema.md, save-back-policy.md, concept-resolution.md.
  • Triggers mutually exclusive with wiki-lint-semantic: semantic-health words are not handled here.

5. Persisted artifacts

  • pipeline-workspace/reports/kb-qa/<run_id>.md.
  • wiki/Review-Queue/kb-qa-<YYYY-MM-DD>.md (only when an actionable finding exists).
  • The spot-check list: sampled pages, evidence refs, and Q-chain conclusions recorded in the report.

6. CLI commands

python scripts/pipeline.py status
python scripts/pipeline.py lint --source <source_id>

This skill never promotes, rolls back, or edits content pages; fixes go to kb-review or the matching write skill.

7. Workflow

Sub-unitInputOutputAcceptancePersistedFailure stop
QA1 scoperequest + indexscope and samplesdoes not hijack wiki-lint-semantic triggersreport draftscope unclear
QA2 status backgroundsource/status/lintdeterministic backgrounddoes not re-implement deterministic lintreportlint already blocked
QA3 Q-chainin-scope materialquestion→evidence→judgement→actionevery Q has an evidence pathreportevidence thin
QA4 spot-checkpage/formula/evidence samplesspot-check resultssamples and conclusions traceablereportsample missing
QA5 file findingsactionable findingsReview-Queue proposalno content-page editskb-qa proposalduplicate proposal

Evidence discipline (two rules that cost real rework when broken)

A "not in the source" verdict requires an exhaustive search, and the search must be shown. Before writing that a term/number/mechanism is absent, search the source for the Chinese rendering, the English name, the abbreviation, and case/hyphen variants — then record every search term in the finding. A single-language search is the documented way this goes wrong: a 2026-07-19 audit declared "the book never mentions History 链表" after searching only history list, while the book used the Chinese form four times. The cost is asymmetric — a missed finding leaves one clause unfixed, but a false finding triggers a rewrite of a correct page, and every rewrite is a fresh chance to introduce an error.

Normalize five PDF extraction deformations before you conclude a term is absent. A page's word can be verbatim in the source yet fail a naive string search because the extracted source.md mangled it. The 2026-07-21 llm-fundamentals audit hit the first three at once (20 false "not in source" candidates), then the full page-by-page read surfaced two more — each of which, if believed, would have rewritten a correct page. Apply all five before the search, not after:

  1. Ligatures — the PDF stores /// (single code points, e.g. U+FB03) so Efficiency is Efficiency, Parameter-Efficient is Parameter-Efficient. Expand ligatures to their ASCII letters.
  2. Line-break hyphenation — a word split across a line break keeps its hyphen: Accurately becomes Ac-curately, Prefixes becomes Pre-fixes. Rejoin -⏎ before searching.
  3. CJK–Latin spacing — the extractor inserts a space between CJK and Latin runs, so Encoder-only架构 is stored as Encoder-only 架构. Collapse all whitespace (this also covers the plain Chinese/English/abbreviation/case/hyphen variants above).
  4. Thousands separator — the page writes 1000 but the source prints the grouped form 1,000 (ROME's "1000 条知识" is 1,000 in the source). Strip , from digit runs before matching numbers.
  5. Chinese numerals — the page writes an Arabic digit but the source uses the Chinese numeral (T5's "连续 3 个" is 连续三个 in the source). Try the 一/二/三… form of any small integer.

Record the normalized form you searched, not just the raw term.

A sampling PASS is not a clean bill for the page. When you spot-check assertions rather than reading the page whole, the verdict covers only the assertions actually sampled — say so in the report, and later rounds must never inherit it as evidence that the page is clean. Three consecutive rounds on one source overturned pages that an earlier sampling round had marked clean; only an integral, per-assertion pass supports a page-level conclusion.

8. Failure stops / recovery

vault/index missing; scope unclear; the request is really a semantic-health check (switch to wiki-lint-semantic); deterministic lint already failed with no stable QA scope; an evidence path is missing; the user asks to edit content pages directly (switch to kb-review and wait for confirmation). Recovery: the report + proposals are the durable output; re-run after the scope is clarified.

9. Acceptance criteria

  • The QA report is written under pipeline-workspace/reports/kb-qa/.
  • Every Q-chain item has a question, evidence, judgement, and a follow-up action.
  • Actionable findings are written as Review-Queue proposals.
  • No wiki content page was edited directly.
  • None of wiki-lint-semantic's exclusive triggers were handled.

Related Skills