lint: distinguish existing hidden .raw/captured targets from missing files
Summary
In v2.2.0, an explicit relative Markdown link to an existing .raw/captured/ file is reported as target-not-found. The hidden-directory exclusion introduced for #163 is intentional and useful, but this diagnostic does not distinguish an existing provenance payload from a missing file.
This is a follow-up to #163, not a request to reintroduce hidden archives as basename/wikilink candidates.
Environment
- claude-obsidian v2.2.0, commit 32ac5a0
- lint engine 1.1.1
- Reproduced locally with a temporary vault containing only synthetic data
Minimal reproduction
Create this layout:
vault/
.raw/captured/example.txt
wiki/example.mdPut Synthetic source. in example.txt and the following in wiki/example.md:
---
title: Example
type: source
status: provisional
created: 2026-09-15
updated: 2026-09-15
---
# Example
[Source](../.raw/captured/example.txt)Run from the installed project directory:
python3 scripts/claude-obsidian.py lint --vault /absolute/path/to/vaultEquivalent reproduction using lint_vault(root) returns:
{
"source": "wiki/example.md",
"line": 10,
"target": "../.raw/captured/example.txt",
"syntax": "markdown-link",
"reason": "target-not-found"
}The target exists on disk and the relative path is correct.
Expected behavior / design clarification
Keep hidden files out of ordinary Obsidian wikilink and basename resolution, preserving the fix for #163. For explicit paths into the designated source archive, either:
- Validate the exact confined file path separately as a provenance reference, without adding the file to normal graph candidates; or
- Report a distinct diagnostic such as
hidden-target-not-navigableand document the recommended source-link pattern for generated notes.
If direct links into .raw are intentionally unsupported in Obsidian, please clarify that narrative notes should link to visible source notes, while archive locators stay in ledgers. A documented allowlist workaround would also help, but should explain that allowlisting alone does not verify payload existence.
Workflow impact
capture creates immutable files under .raw/captured, while the provenance contract records vault-relative source/claim locators. This does not by itself require narrative Markdown links into .raw; however, when generated notes include such explicit paths, lint currently gives the same diagnostic as for a genuinely missing source. This makes it difficult to distinguish archive visibility limitations from data loss.
No private vault files or source data are included in this report.
Source: AgriciDaniel/claude-obsidian