feat: pydoc pincite — structured Zotero citations in docstrings #293

Merged
kert merged 2 commits from feat/pydoc-pincite into main 2026-03-27 04:12:59 +00:00
Owner

Summary

Centerpiece feature: machine-parseable :pincite: directives in function docstrings that link to specific pages, sections, or paragraphs of Zotero bibliography items.

@nw.narwhalify
def pharmacy_claims(core__medical_claim):
    """Filter Part D claims to valid NDCs.

    :pincite:`JX46GQ9L p.14` — NDC validation rules
    :pincite:`9ASETLJ4 §3.2` — exclusion criteria
    """

Architecture

4 layers in src/bib/pincite.py:

  • Parse: regex extraction + AST discovery of @nw.narwhalify functions
  • Store: pincites table in bib.sqlite with upsert/query/tag sync
  • Graph: CitationGraph with mermaid + networkx export
  • Inject: non-destructive docstring modification via AST

New/modified files

  • src/bib/pincite.py — core module (480 lines)
  • src/bib/schema.sql — pincites table
  • src/bib/tag.py — Tag.pin() factory
  • src/bib/store.py — pincite CRUD methods
  • tests/bib/test_pincite.py — 39 tests

refs #246

## Summary Centerpiece feature: machine-parseable `:pincite:` directives in function docstrings that link to specific pages, sections, or paragraphs of Zotero bibliography items. ```python @nw.narwhalify def pharmacy_claims(core__medical_claim): """Filter Part D claims to valid NDCs. :pincite:`JX46GQ9L p.14` — NDC validation rules :pincite:`9ASETLJ4 §3.2` — exclusion criteria """ ``` ## Architecture 4 layers in `src/bib/pincite.py`: - **Parse**: regex extraction + AST discovery of @nw.narwhalify functions - **Store**: pincites table in bib.sqlite with upsert/query/tag sync - **Graph**: CitationGraph with mermaid + networkx export - **Inject**: non-destructive docstring modification via AST ## New/modified files - `src/bib/pincite.py` — core module (480 lines) - `src/bib/schema.sql` — pincites table - `src/bib/tag.py` — `Tag.pin()` factory - `src/bib/store.py` — pincite CRUD methods - `tests/bib/test_pincite.py` — 39 tests refs #246
kert added 1 commit 2026-03-27 03:48:30 +00:00
feat: pydoc pincite — structured Zotero citations in docstrings
Some checks failed
CI / skinny-install (bib) (push) Successful in 34s
CI / skinny-install (cli) (push) Successful in 32s
CI / skinny-install (cms) (push) Successful in 27s
CI / skinny-install (conf) (push) Successful in 29s
CI / skinny-install (opps) (push) Successful in 31s
CI / skinny-install (perf) (push) Successful in 30s
CI / skinny-install (pfs) (push) Successful in 31s
Infra CI / notebooks (push) Successful in 7s
CI / skinny-install (aco) (pull_request) Successful in 52s
CI / lint-test (pull_request) Failing after 1m18s
CI / skinny-install (api) (pull_request) Successful in 26s
CI / skinny-install (bcda) (pull_request) Successful in 38s
CI / skinny-install (bib) (pull_request) Successful in 36s
CI / skinny-install (bls) (pull_request) Successful in 26s
CI / skinny-install (cli) (pull_request) Successful in 34s
CI / skinny-install (cms) (pull_request) Successful in 29s
CI / skinny-install (conf) (pull_request) Successful in 28s
CI / skinny-install (opps) (pull_request) Successful in 30s
CI / skinny-install (perf) (pull_request) Successful in 33s
CI / skinny-install (pfs) (pull_request) Successful in 33s
Infra CI / notebooks (pull_request) Successful in 7s
Infra CI / zotero (pull_request) Successful in 6s
Infra CI / docs (pull_request) Failing after 7s
Infra CI / api (pull_request) Successful in 8s
CI / skinny-install (aco) (push) Successful in 51s
CI / lint-test (push) Failing after 1m16s
CI / skinny-install (api) (push) Successful in 26s
CI / skinny-install (bcda) (push) Successful in 35s
CI / skinny-install (bls) (push) Successful in 23s
CI / skinny-install (ccw) (push) Successful in 32s
Infra CI / zotero (push) Successful in 10s
CI / skinny-install (rex) (push) Successful in 25s
Infra CI / docs (push) Failing after 9s
Infra CI / api (push) Successful in 9s
Infra CI / mc (push) Successful in 6s
CI / skinny-install (ccw) (pull_request) Successful in 32s
CI / skinny-install (rex) (pull_request) Successful in 25s
Infra CI / mc (pull_request) Successful in 7s
5be2749d8f
Centerpiece feature: machine-parseable :pincite: directives in function
docstrings that link to specific pages, sections, or paragraphs of
bibliography items, enabling a knowledge graph from regulatory source
to function to table to column.

Format: :pincite:`JX46GQ9L p.14` — NDC validation rules

New module src/bib/pincite.py with 4 layers:
- Parse: regex extraction of :pincite: directives, AST-based discovery
  of @nw.narwhalify functions, locator classification (page/section/cfr/
  fr/chapter/paragraph)
- Store: pincites table in bib.sqlite with upsert, query, tag sync
  (pin: and fn: namespaces), foreign key validation
- Graph: CitationGraph with nodes (functions, items), edges (pincite
  rows), functions_citing/items_cited_by queries, mermaid and
  networkx export
- Inject: format_pincite_block for References sections,
  inject_pincites_into_source for AST-located non-destructive
  docstring modification

Schema: new pincites table with unique index on (fn_path, item_key,
locator), FK cascade to items.

Tag: new Tag.pin(key, locator) factory -> pin:KEY/locator

Store: upsert_pincite, list_pincites, delete_pincites on Store class.

39 tests covering parse, classify, store, graph, inject, and check.
kert added 1 commit 2026-03-27 04:02:42 +00:00
feat: fetch Federal Register PDF + TXT for all bib rules
Some checks failed
CI / skinny-install (cms) (push) Successful in 30s
CI / skinny-install (conf) (push) Successful in 37s
CI / skinny-install (opps) (push) Successful in 30s
CI / skinny-install (perf) (push) Successful in 36s
CI / skinny-install (pfs) (push) Successful in 36s
CI / skinny-install (rex) (push) Successful in 34s
CI / skinny-install (aco) (pull_request) Successful in 48s
CI / lint-test (pull_request) Failing after 1m24s
CI / skinny-install (bls) (pull_request) Successful in 30s
CI / skinny-install (ccw) (pull_request) Successful in 25s
Infra CI / notebooks (pull_request) Successful in 9s
CI / skinny-install (aco) (push) Successful in 52s
CI / skinny-install (api) (push) Successful in 27s
CI / lint-test (push) Failing after 1m24s
CI / skinny-install (bib) (push) Successful in 34s
CI / skinny-install (bcda) (push) Successful in 38s
CI / skinny-install (bls) (push) Successful in 28s
CI / skinny-install (ccw) (push) Successful in 34s
CI / skinny-install (cli) (push) Successful in 31s
CI / skinny-install (api) (pull_request) Successful in 33s
CI / skinny-install (bcda) (pull_request) Successful in 48s
CI / skinny-install (bib) (pull_request) Successful in 26s
CI / skinny-install (cli) (pull_request) Successful in 26s
CI / skinny-install (cms) (pull_request) Successful in 30s
CI / skinny-install (conf) (pull_request) Successful in 30s
CI / skinny-install (opps) (pull_request) Successful in 30s
CI / skinny-install (perf) (pull_request) Successful in 32s
CI / skinny-install (pfs) (pull_request) Successful in 33s
Infra CI / zotero (pull_request) Successful in 7s
CI / skinny-install (rex) (pull_request) Successful in 28s
Infra CI / docs (pull_request) Failing after 6s
Infra CI / api (pull_request) Successful in 6s
Infra CI / mc (pull_request) Successful in 6s
8a0992576c
Script downloads the full text (PDF from govinfo.gov, TXT from
federalregister.gov) for all 47 PFS rules in bib.sqlite and attaches
them to their items via store.attach_file().

Constructs URLs from the FR document number embedded in each rule's
federalregister.gov URL.  Falls back to FR API metadata lookup when
the URL is ambiguous.  Skips items that already have attachments.

Usage:
  uv run python dev/scripts/fetch_fr_attachments.py --dry-run
  uv run python dev/scripts/fetch_fr_attachments.py
  uv run python dev/scripts/fetch_fr_attachments.py --key ZJ3YCYYF

refs #246
kert merged commit 037eae10bc into main 2026-03-27 04:12:59 +00:00
Sign in to join this conversation.