proofpath 0.0.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,15 @@
1
+ root = true
2
+
3
+ [*]
4
+ charset = utf-8
5
+ end_of_line = lf
6
+ insert_final_newline = true
7
+ trim_trailing_whitespace = true
8
+ indent_style = space
9
+ indent_size = 4
10
+
11
+ [*.{yml,yaml,json,toml}]
12
+ indent_size = 2
13
+
14
+ [*.md]
15
+ trim_trailing_whitespace = false
@@ -0,0 +1,31 @@
1
+ name: Bug report
2
+ description: Something behaves differently than documented
3
+ labels: ["bug"]
4
+ body:
5
+ - type: textarea
6
+ id: what
7
+ attributes:
8
+ label: What happened
9
+ description: Include the exact command and the output.
10
+ validations:
11
+ required: true
12
+ - type: textarea
13
+ id: expected
14
+ attributes:
15
+ label: What you expected
16
+ validations:
17
+ required: true
18
+ - type: input
19
+ id: version
20
+ attributes:
21
+ label: proofpath version
22
+ placeholder: "output of: proofpath --version"
23
+ validations:
24
+ required: true
25
+ - type: dropdown
26
+ id: os
27
+ attributes:
28
+ label: Operating system
29
+ options: [Linux, macOS, Windows]
30
+ validations:
31
+ required: true
@@ -0,0 +1 @@
1
+ blank_issues_enabled: true
@@ -0,0 +1,23 @@
1
+ name: Feature request
2
+ description: Suggest a capability
3
+ labels: ["enhancement"]
4
+ body:
5
+ - type: textarea
6
+ id: problem
7
+ attributes:
8
+ label: The problem
9
+ description: What are you unable to do today?
10
+ validations:
11
+ required: true
12
+ - type: textarea
13
+ id: proposal
14
+ attributes:
15
+ label: What you propose
16
+ validations:
17
+ required: true
18
+ - type: checkboxes
19
+ id: spec
20
+ attributes:
21
+ label: Design check
22
+ options:
23
+ - label: I have read the design spec and this is not already covered or explicitly ruled out
@@ -0,0 +1,39 @@
1
+ name: Wrong verdict
2
+ description: A claim was judged incorrectly
3
+ labels: ["accuracy"]
4
+ body:
5
+ - type: markdown
6
+ attributes:
7
+ value: |
8
+ Accuracy reports are the most valuable issues this project receives.
9
+ They become regression cases in the evaluation set.
10
+ - type: textarea
11
+ id: claim
12
+ attributes:
13
+ label: The claim
14
+ validations:
15
+ required: true
16
+ - type: input
17
+ id: source
18
+ attributes:
19
+ label: The cited source (DOI or URL)
20
+ validations:
21
+ required: true
22
+ - type: dropdown
23
+ id: reported
24
+ attributes:
25
+ label: What proofpath reported
26
+ options: [SUPPORTED, REFUTED, NEI, GHOST REFERENCE, AMBIGUOUS, RETRACTED, UNVERIFIED]
27
+ validations:
28
+ required: true
29
+ - type: dropdown
30
+ id: correct
31
+ attributes:
32
+ label: What it should have reported
33
+ options: [SUPPORTED, REFUTED, NEI, GHOST REFERENCE, AMBIGUOUS, RETRACTED, UNVERIFIED]
34
+ validations:
35
+ required: true
36
+ - type: textarea
37
+ id: passage
38
+ attributes:
39
+ label: The passage that settles it
@@ -0,0 +1,16 @@
1
+ ## What this changes
2
+
3
+ <!-- One or two sentences. -->
4
+
5
+ ## Why
6
+
7
+ <!-- Link the issue, or explain the problem this solves. -->
8
+
9
+ ## Checklist
10
+
11
+ - [ ] `ruff check` and `ruff format --check` are clean
12
+ - [ ] `pytest` passes
13
+ - [ ] Type annotations on every new function signature
14
+ - [ ] No network access in unit tests
15
+ - [ ] If a new reported state was added, spec section 15 is updated too
16
+ - [ ] This change does not make the tool sound more confident than its evidence
@@ -0,0 +1,41 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ workflow_dispatch:
8
+
9
+ concurrency:
10
+ group: ${{ github.workflow }}-${{ github.ref }}
11
+ cancel-in-progress: true
12
+
13
+ jobs:
14
+ lint:
15
+ runs-on: ubuntu-latest
16
+ steps:
17
+ - uses: actions/checkout@v4
18
+ - uses: astral-sh/setup-uv@v5
19
+ with:
20
+ enable-cache: true
21
+ - run: uv sync --extra dev
22
+ - run: uv run ruff check
23
+ - run: uv run ruff format --check
24
+
25
+ test:
26
+ # The tool promises identical behaviour on all three platforms, so all three
27
+ # are tested on every change.
28
+ strategy:
29
+ fail-fast: false
30
+ matrix:
31
+ os: [ubuntu-latest, macos-latest, windows-latest]
32
+ python-version: ["3.10", "3.13"]
33
+ runs-on: ${{ matrix.os }}
34
+ steps:
35
+ - uses: actions/checkout@v4
36
+ - uses: astral-sh/setup-uv@v5
37
+ with:
38
+ enable-cache: true
39
+ python-version: ${{ matrix.python-version }}
40
+ - run: uv sync --extra dev
41
+ - run: uv run pytest
@@ -0,0 +1,35 @@
1
+ name: Release
2
+
3
+ # Publishes to PyPI via Trusted Publishing (OIDC). No API token is stored
4
+ # anywhere in this repository or its secrets.
5
+ on:
6
+ push:
7
+ tags: ["v*"]
8
+ workflow_dispatch:
9
+
10
+ jobs:
11
+ build:
12
+ runs-on: ubuntu-latest
13
+ steps:
14
+ - uses: actions/checkout@v4
15
+ - uses: astral-sh/setup-uv@v5
16
+ with:
17
+ enable-cache: true
18
+ - run: uv build
19
+ - uses: actions/upload-artifact@v4
20
+ with:
21
+ name: dist
22
+ path: dist/
23
+
24
+ publish:
25
+ needs: build
26
+ runs-on: ubuntu-latest
27
+ environment: pypi
28
+ permissions:
29
+ id-token: write # required for Trusted Publishing
30
+ steps:
31
+ - uses: actions/download-artifact@v4
32
+ with:
33
+ name: dist
34
+ path: dist/
35
+ - uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,33 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ .venv/
5
+ venv/
6
+ *.egg-info/
7
+ dist/
8
+ build/
9
+ .pytest_cache/
10
+ .ruff_cache/
11
+ .mypy_cache/
12
+
13
+ # Secrets
14
+ .env
15
+ .env.*
16
+ !.env.example
17
+ *.pem
18
+ *.key
19
+ secrets/
20
+ config.local.*
21
+
22
+ # proofpath local state
23
+ .proofpath/
24
+ *.sqlite
25
+ *.sqlite3
26
+ data/cache/
27
+ models/
28
+
29
+ # OS / editors
30
+ .DS_Store
31
+ Thumbs.db
32
+ .idea/
33
+ .vscode/
@@ -0,0 +1,23 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project are documented here. The format follows
4
+ [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and this project adheres to
5
+ [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
+
7
+ ## [Unreleased]
8
+
9
+ ## [0.0.1] - 2026-09-10
10
+
11
+ First release. The verification pipeline is not implemented; this reserves the name
12
+ and establishes the interface, packaging and CI that later phases build on.
13
+
14
+ ### Added
15
+ - Design specification with measured source-access data (spec §6), the fetch ladder
16
+ and its permission model (§7), and corrected reference resolution (§8).
17
+ - Phased implementation plan, ordered by risk retired rather than user-visible
18
+ progress.
19
+ - `proofpath` command. A bare invocation is a first-class entry point rather than a
20
+ help screen, which is where the TUI will attach. Exit codes are fixed: `0` clean,
21
+ `1` findings, `2` the run itself failed.
22
+ - Cross-platform CI on Linux, macOS and Windows, and PyPI publishing through trusted
23
+ publishing rather than a stored API token.
@@ -0,0 +1,52 @@
1
+ # proofpath — project instructions
2
+
3
+ `proofpath` verifies that the sources behind a claim actually say what the claim
4
+ says. Read `docs/superpowers/specs/2026-09-10-proofpath-design.md` before making
5
+ design decisions; it is the source of truth and records *why* things are the way
6
+ they are.
7
+
8
+ ## Non-negotiable product rules
9
+
10
+ These are not style preferences. Breaking one breaks the product's reason to exist.
11
+
12
+ 1. **Never assert without a passage.** A `SUPPORTED` or `REFUTED` verdict must carry
13
+ the quoted evidence it is based on. No passage, no verdict.
14
+ 2. **Never present absence of evidence as evidence of absence.** Unreachable,
15
+ blocked, paywalled and ambiguous are distinct reported states (spec §15), never
16
+ silently collapsed into a verdict.
17
+ 3. **Never call a real reference a ghost.** Uncertainty resolves to `AMBIGUOUS`, not
18
+ `GHOST REFERENCE` (spec §8). The false-ghost rate is a release gate.
19
+ 4. **Never prompt without a TTY.** In CI or when piped, an `ask` permission is
20
+ treated as `deny` and reported (spec §7.1).
21
+ 5. **Never install anything large without explicit consent** (spec §7.1).
22
+ 6. **Every report states its own coverage.** A low-coverage run must not look like a
23
+ clean one.
24
+
25
+ ## Stack
26
+
27
+ | Concern | Choice | Why |
28
+ |---|---|---|
29
+ | CLI / TUI | `typer` + `textual` | bare `proofpath` opens the TUI via `invoke_without_command=True` |
30
+ | HTTP | `httpx`, then `curl_cffi`, then browser on consent | fetch ladder, spec §7 |
31
+ | PDF | `pymupdf` | pure Python, no Java/Docker |
32
+ | Vector store | `sqlite-vec` | per-document corpora are small; no server |
33
+ | Embeddings / NLI | ONNX runtime by default, `torch` only via the `[gpu]` extra | keeps base install small |
34
+ | Config / cache paths | `platformdirs` | Windows/macOS/Linux parity |
35
+
36
+ ## Conventions
37
+
38
+ - Python 3.10+. **Type annotations are mandatory** on every function signature.
39
+ - `ruff check` and `ruff format --check` must be clean.
40
+ - `pytest` must pass on Linux, macOS and Windows.
41
+ - Device preference order is always **CUDA → MPS → CPU** (and the ONNX equivalent:
42
+ CUDA → CoreML → CPU).
43
+ - `pathlib` everywhere. Every file read/write passes `encoding="utf-8"` explicitly.
44
+ - Code, identifiers and comments in English.
45
+
46
+ ## Hard constraints
47
+
48
+ - **No Docker or Java requirement** in any default path. GROBID stays opt-in.
49
+ - **No hardcoded secrets, tokens or emails.** The Crossref/OpenAlex contact address
50
+ comes from config or `PROOFPATH_CONTACT_EMAIL` and is optional.
51
+ - No network access in unit tests. Provider responses are fixtures.
52
+ - `cli` and `tui` contain no logic; both call the same `verify()` entry point.
@@ -0,0 +1,34 @@
1
+ # Contributing
2
+
3
+ Thanks for considering a contribution.
4
+
5
+ ## Before you start
6
+
7
+ Read `docs/superpowers/specs/2026-09-10-proofpath-design.md`. It records the design
8
+ decisions and, more importantly, the measurements behind them. Several obvious-looking
9
+ approaches were tested and rejected — the spec says which and why.
10
+
11
+ For anything beyond a small fix, open an issue first so we can agree on the approach.
12
+
13
+ ## Setup
14
+
15
+ ```bash
16
+ uv sync --all-extras
17
+ uv run pytest
18
+ uv run ruff check
19
+ uv run ruff format --check
20
+ ```
21
+
22
+ ## Standards
23
+
24
+ - Type annotations on every function signature.
25
+ - `ruff check` and `ruff format --check` clean.
26
+ - Tests pass on Linux, macOS and Windows.
27
+ - No network access in unit tests — use fixtures.
28
+ - New reported states go in the table in spec §15, not just in code.
29
+
30
+ ## The rules that matter most
31
+
32
+ A pull request that makes the tool sound more confident than the evidence supports
33
+ will be rejected, however good the code is. See the non-negotiable rules in
34
+ `CLAUDE.md`.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Yigit Erdogan
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,112 @@
1
+ Metadata-Version: 2.5
2
+ Name: proofpath
3
+ Version: 0.0.1
4
+ Summary: Check whether the sources behind a claim actually say what the claim says.
5
+ Project-URL: Homepage, https://github.com/Yigtwxx/proofpath
6
+ Project-URL: Repository, https://github.com/Yigtwxx/proofpath
7
+ Project-URL: Issues, https://github.com/Yigtwxx/proofpath/issues
8
+ Project-URL: Changelog, https://github.com/Yigtwxx/proofpath/blob/main/CHANGELOG.md
9
+ Author: Yigit Erdogan
10
+ License: MIT License
11
+
12
+ Copyright (c) 2026 Yigit Erdogan
13
+
14
+ Permission is hereby granted, free of charge, to any person obtaining a copy
15
+ of this software and associated documentation files (the "Software"), to deal
16
+ in the Software without restriction, including without limitation the rights
17
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
18
+ copies of the Software, and to permit persons to whom the Software is
19
+ furnished to do so, subject to the following conditions:
20
+
21
+ The above copyright notice and this permission notice shall be included in all
22
+ copies or substantial portions of the Software.
23
+
24
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
25
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
26
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
27
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
28
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
29
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30
+ SOFTWARE.
31
+ License-File: LICENSE
32
+ Keywords: citation,cli,entailment,fact-checking,nli,rag,research-integrity,retrieval-augmented-generation
33
+ Classifier: Development Status :: 2 - Pre-Alpha
34
+ Classifier: Environment :: Console
35
+ Classifier: Intended Audience :: Science/Research
36
+ Classifier: License :: OSI Approved :: MIT License
37
+ Classifier: Operating System :: OS Independent
38
+ Classifier: Programming Language :: Python :: 3.10
39
+ Classifier: Programming Language :: Python :: 3.11
40
+ Classifier: Programming Language :: Python :: 3.12
41
+ Classifier: Programming Language :: Python :: 3.13
42
+ Classifier: Topic :: Scientific/Engineering
43
+ Classifier: Topic :: Text Processing :: Linguistic
44
+ Classifier: Typing :: Typed
45
+ Requires-Python: >=3.10
46
+ Requires-Dist: curl-cffi>=0.16.1
47
+ Requires-Dist: fastembed>=0.5
48
+ Requires-Dist: httpx>=0.28
49
+ Requires-Dist: orjson>=3.11
50
+ Requires-Dist: platformdirs>=4.3
51
+ Requires-Dist: pymupdf>=1.25
52
+ Requires-Dist: python-docx>=1.1
53
+ Requires-Dist: scrapling>=0.4.15
54
+ Requires-Dist: sqlite-vec>=0.1.6
55
+ Requires-Dist: textual>=1.0
56
+ Requires-Dist: typer>=0.15
57
+ Provides-Extra: browser
58
+ Requires-Dist: scrapling[fetchers]>=0.4.15; extra == 'browser'
59
+ Provides-Extra: dev
60
+ Requires-Dist: mypy>=1.14; extra == 'dev'
61
+ Requires-Dist: pytest-cov>=6.0; extra == 'dev'
62
+ Requires-Dist: pytest>=8.3; extra == 'dev'
63
+ Requires-Dist: respx>=0.22; extra == 'dev'
64
+ Requires-Dist: ruff>=0.9; extra == 'dev'
65
+ Provides-Extra: gpu
66
+ Requires-Dist: sentence-transformers>=3.3; extra == 'gpu'
67
+ Requires-Dist: torch>=2.5; extra == 'gpu'
68
+ Description-Content-Type: text/markdown
69
+
70
+ # proofpath
71
+
72
+ > Don't guess. Show the evidence.
73
+
74
+ `proofpath` checks whether the sources behind a claim actually say what the claim
75
+ says. Point it at a paper, a draft, or a link — it verifies every citation on three
76
+ levels and shows you the passage behind each verdict.
77
+
78
+ 1. **Does the source exist?** — resolved against Crossref, OpenAlex, PubMed, arXiv.
79
+ 2. **Is it still valid?** — checked against Retraction Watch.
80
+ 3. **Does it support the claim?** — retrieval + entailment against the source text.
81
+
82
+ Most tools stop at step 1. Step 3 is the point.
83
+
84
+ Runs offline and free by default: no API key, no Docker, no server. Windows, Linux
85
+ and macOS.
86
+
87
+ ## What it will not do
88
+
89
+ It does not pretend to be certain. Full text is openly available for well under half
90
+ of published citations, so many verdicts will honestly be *not enough information*,
91
+ and every report ends with its own coverage figures. A tool that sounds sure about
92
+ everything is the problem this one exists to fight.
93
+
94
+ ```bash
95
+ uv tool install proofpath
96
+
97
+ proofpath # interactive TUI
98
+ proofpath check paper.pdf # one-shot report
99
+ proofpath check draft.md --format sarif
100
+ ```
101
+
102
+ ## Status
103
+
104
+ 🚧 Design stage — no working code yet.
105
+
106
+ - [Design specification](docs/superpowers/specs/2026-09-10-proofpath-design.md) — what it does and the measurements behind each decision
107
+ - [Implementation plan](docs/superpowers/plans/2026-09-10-proofpath-implementation-plan.md) — phases, ordered by risk retired
108
+ - [Open items](docs/superpowers/OPEN-ITEMS.md) — what is unresolved, and what has not been verified yet
109
+
110
+ ## License
111
+
112
+ MIT
@@ -0,0 +1,43 @@
1
+ # proofpath
2
+
3
+ > Don't guess. Show the evidence.
4
+
5
+ `proofpath` checks whether the sources behind a claim actually say what the claim
6
+ says. Point it at a paper, a draft, or a link — it verifies every citation on three
7
+ levels and shows you the passage behind each verdict.
8
+
9
+ 1. **Does the source exist?** — resolved against Crossref, OpenAlex, PubMed, arXiv.
10
+ 2. **Is it still valid?** — checked against Retraction Watch.
11
+ 3. **Does it support the claim?** — retrieval + entailment against the source text.
12
+
13
+ Most tools stop at step 1. Step 3 is the point.
14
+
15
+ Runs offline and free by default: no API key, no Docker, no server. Windows, Linux
16
+ and macOS.
17
+
18
+ ## What it will not do
19
+
20
+ It does not pretend to be certain. Full text is openly available for well under half
21
+ of published citations, so many verdicts will honestly be *not enough information*,
22
+ and every report ends with its own coverage figures. A tool that sounds sure about
23
+ everything is the problem this one exists to fight.
24
+
25
+ ```bash
26
+ uv tool install proofpath
27
+
28
+ proofpath # interactive TUI
29
+ proofpath check paper.pdf # one-shot report
30
+ proofpath check draft.md --format sarif
31
+ ```
32
+
33
+ ## Status
34
+
35
+ 🚧 Design stage — no working code yet.
36
+
37
+ - [Design specification](docs/superpowers/specs/2026-09-10-proofpath-design.md) — what it does and the measurements behind each decision
38
+ - [Implementation plan](docs/superpowers/plans/2026-09-10-proofpath-implementation-plan.md) — phases, ordered by risk retired
39
+ - [Open items](docs/superpowers/OPEN-ITEMS.md) — what is unresolved, and what has not been verified yet
40
+
41
+ ## License
42
+
43
+ MIT
@@ -0,0 +1,24 @@
1
+ # Security Policy
2
+
3
+ ## Reporting a vulnerability
4
+
5
+ Please **do not** open a public issue for a security problem.
6
+
7
+ Use GitHub's private vulnerability reporting on this repository
8
+ (Security → Report a vulnerability). You should get an initial response within a
9
+ week.
10
+
11
+ ## Scope
12
+
13
+ `proofpath` fetches remote content and can, with explicit consent, download and run a
14
+ browser engine. Reports about the following are especially welcome:
15
+
16
+ - Fetched content escaping its parsing boundary.
17
+ - The permission prompt being bypassed, or a large install happening without consent.
18
+ - Secrets or the configured contact address leaking into reports, logs or caches.
19
+ - Path traversal through a crafted document or archive.
20
+
21
+ ## Out of scope
22
+
23
+ - A wrong verdict on a claim. That is an accuracy issue — open a normal issue.
24
+ - Rate limiting or availability of third-party APIs.
@@ -0,0 +1,120 @@
1
+ # Open items
2
+
3
+ Everything left unresolved as of **2026-09-10**, written down so none of it has to be
4
+ reconstructed from memory. Each entry says enough to be picked up cold.
5
+
6
+ Spec: `specs/2026-09-10-proofpath-design.md` · Plan: `plans/2026-09-10-proofpath-implementation-plan.md`
7
+
8
+ ---
9
+
10
+ ## 1. Blocked — needs an action outside this repo
11
+
12
+ | # | Item | What to do |
13
+ |---|---|---|
14
+ | 1.1 | **CI workflow is not in the repo.** The file is written and working locally but the GitHub token lacks the `workflow` scope, so the push was rejected. | Run `gh auth refresh -h github.com -s workflow`, complete the device flow, then commit `.github/workflows/ci.yml` on its own. The file already exists on disk, untracked. |
15
+ | 1.2 | PyPI name `proofpath` is free but **not reserved**. | Publish `0.0.1` once there is a working skeleton. Publishing an empty placeholder is against PyPI policy, so this waits for Phase 0 to finish. |
16
+
17
+ ---
18
+
19
+ ## 2. Decisions taken but not confirmed by the author
20
+
21
+ Recorded with the recommendation that was made, so they can be accepted or reversed
22
+ deliberately rather than by default.
23
+
24
+ | # | Decision | Recommended | Why it might change |
25
+ |---|---|---|---|
26
+ | 2.1 | `install_browser` default (spec §7.1) | `ask` | `deny` is safer but hides from the user that a blocked source was recoverable |
27
+ | 2.2 | Reddit in v0.4 | include, optional | needs a user-registered OAuth app; Bluesky and HN work without one, so Reddit is never blocking |
28
+ | 2.3 | `spiyweb` keeps its name | yes | the spider-web-as-graph metaphor fits; every clean alternative on PyPI was worse |
29
+ | 2.4 | `reasonhound` keeps its name | yes | already a good name |
30
+ | 2.5 | Turkish sources | after v0.4 | OpenAlex/Crossref coverage is much weaker for Turkish; half-supporting it would damage trust |
31
+ | 2.6 | `--summarize` in the TUI | off by default there too | keeping "offline unless asked" true in both front-ends |
32
+
33
+ ---
34
+
35
+ ## 3. Unvalidated assumptions — test before building on them
36
+
37
+ These were asserted during design without being checked. Each one, if wrong, changes
38
+ a phase.
39
+
40
+ | # | Assumption | How to check | If wrong |
41
+ |---|---|---|---|
42
+ | 3.1 | **A usable NLI cross-encoder exists as ONNX.** The whole "no torch in the base install" decision rests on this and it was never verified. | Search the ONNX model zoo / HF for a DeBERTa-MNLI or similar exported model; measure it on SciFact dev | either export one with `optimum`, or make `[gpu]`/torch the default and accept the install size |
43
+ | 3.2 | `sqlite-vec` ships working wheels for Windows and macOS arm64 | install on all three in CI during Phase 0 | fall back to numpy brute force; per-document corpora are small enough |
44
+ | 3.3 | `textual` renders the §13.1 layout correctly in Windows Terminal at 80 columns | render a fixture screen in CI on Windows | simplify the box drawing to ASCII |
45
+ | 3.4 | SciFact, AVeriTeC and PubHealth are still downloadable and pinnable | fetch each once, record the revision | substitute a comparable set and note it in the spec |
46
+ | 3.5 | X Community Notes dumps are still published and parseable | download one day's file, inspect the columns | drop the X path entirely; Bluesky and HN already carry the social provider |
47
+ | 3.6 | `fastembed` model quality is sufficient for passage ranking | compare recall@k against a sentence-transformers baseline in Phase 1 | move embeddings to the `[gpu]` extra as well |
48
+
49
+ ---
50
+
51
+ ## 4. Design details deliberately left to implementation
52
+
53
+ Not oversights — they need real data to set, and guessing now would be false
54
+ precision. Each must end up written into the spec once measured.
55
+
56
+ | # | Detail | Set during |
57
+ |---|---|---|
58
+ | 4.1 | Title token-set Jaccard threshold for reference matching (spec §8) | Phase 3, tuned on the ghost test set |
59
+ | 4.2 | Year tolerance beyond ±1 for online-first publications | Phase 3 |
60
+ | 4.3 | Numeric comparison tolerance, and how to treat ranges vs point values (spec §10) | Phase 2 |
61
+ | 4.4 | Confidence threshold that routes a verdict to the judge | Phase 1 calibration |
62
+ | 4.5 | Chunk size and `k` for retrieval. Abstracts are trivial; a 12,000-word full text is not, and the two may need different settings | Phase 1, re-checked in Phase 4 |
63
+ | 4.6 | Which embedding model and which NLI model, by name and revision | Phase 1 |
64
+
65
+ ---
66
+
67
+ ## 5. Genuinely unsolved problems
68
+
69
+ Known gaps with no chosen answer yet. These are the ones worth thinking about away
70
+ from the keyboard.
71
+
72
+ **5.1 — A citation that supports a paragraph, not a sentence.**
73
+ Spec §5.1 mentions a paragraph-level fallback but does not define when it triggers.
74
+ Attaching a paragraph-wide claim to one sentence produces confident nonsense. Needs a
75
+ rule, and probably a distinct reported state.
76
+
77
+ **5.2 — Author-year citation styles.**
78
+ `(Smith et al., 2020)` is much harder than `[12]`: the marker does not index the
79
+ bibliography directly, several works share an author-year, and `ibid.`/`op. cit.`
80
+ exist. Phase 5 currently treats both styles as one task; they are not.
81
+
82
+ **5.3 — Coverage is the real product ceiling.**
83
+ Measured: direct full text for well under half of sampled citations (spec §6.1). Every
84
+ abstract-only verdict is a weak verdict. Worth investigating whether Semantic Scholar,
85
+ CORE, or OpenAIRE meaningfully raise this before accepting the number.
86
+
87
+ **5.4 — What "confidence" means to a user.**
88
+ A `0.91` is a model score, not a probability of being right. Showing it as-is invites
89
+ misreading, hiding it removes signal. No decision yet on how to present it.
90
+
91
+ **5.5 — Caching fetched full text.**
92
+ Spec §16 says cached locally, not redistributed, clearable. Retention period and
93
+ whether publisher content should be cached at all are unresolved.
94
+
95
+ ---
96
+
97
+ ## 6. Deferred by choice
98
+
99
+ Not problems, just not now. Recorded so they are not rediscovered as new ideas.
100
+
101
+ | Item | Revisit when |
102
+ |---|---|
103
+ | Landing site: one Astro site, four pages (`evidencelab.dev/`, `/proofpath`, `/reasonhound`, `/spiyweb`) | after v0.1 ships something runnable |
104
+ | GitHub org `evidencelab` (free at time of checking) | when the landing site is built |
105
+ | `evidencelab.dev` domain (free at time of checking) | same |
106
+ | `spiyweb` as an alternative retrieval backend for `proofpath` | after Phase 6; the real tie between the three projects |
107
+ | GROBID parser as an opt-in `--parser` | if Phase 5 citation pairing accuracy proves inadequate |
108
+ | Turkish sources | after v0.4 |
109
+
110
+ ---
111
+
112
+ ## 7. Next session starts here
113
+
114
+ 1. Finish item **1.1** — CI is a prerequisite for every "works on three platforms" claim.
115
+ 2. Check assumption **3.1** — if no usable ONNX NLI model exists, the packaging story
116
+ changes and it is better to know before Phase 1 than during it.
117
+ 3. Begin **Phase 1**: pin SciFact, build `scripts/eval.py`, get a first number.
118
+
119
+ Phase 1 carries a kill criterion on purpose. Getting to a real number quickly is the
120
+ point of the whole ordering.