Global copy installs (~/.claude/skills) could not resolve canonical
helpers: no project .aris/tools, no project tools/, no ARIS_REPO env —
paper-writing/review skills aborted with helper-not-found. The chain
gains a 4th layer: when ARIS_REPO is still unset, read the pointer file
~/.aris/repo (one line, absolute repo path) written by every installer
and updater at install/update time.
- integration-contract.md §2 + wiki-helper-resolution.md: canonical
resolver block and prose updated to the 4-layer chain
- 25 SKILL.md callers: pointer stanza inserted into every resolver
block; not-resolved error messages now mention the pointer fix
- skills-codex mirror shared-references kept byte-in-step
- tools/ helper docstrings + OPENROUTER guides: chain descriptions
updated; verify_wiki_coverage.sh gains the runtime pointer check
- tests/test_research_wiki_helper_resolution.py: hermetic $HOME per
test + new test_layer4_global_pointer_file
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
`argument-hint: [foo]` YAML-parses as a flow sequence (array), not a
string. Downstream slash-command loaders that validate `argument-hint`
as a string — notably GitHub Copilot CLI ≥ 1.0.65 — silently reject
the skill on load, and the command disappears from the CLI menu.
Wrap the value in double quotes so it parses as a string. No behaviour
change on Claude Code.
5 fetcher SKILLs migrate from bespoke pre-canonical lookup patterns
(arxiv pathlib candidates, semantic-scholar find tools/, deepxiv
hardcoded tools/, exa-search find tools/, openalex find tools/ +
~/.claude/skills/) to the canonical strict-safe 3-layer chain from
integration-contract.md §2. Each uses a semantic variable name —
$ARXIV_FETCHER, $S2_FETCHER, $DEEPXIV_FETCHER, $EXA_FETCHER,
$OPENALEX_FETCHER — to avoid clobbering when a single SKILL resolves
multiple helpers.
Standalone fetcher SKILLs are Policy D1 (single-source cascade):
- arxiv / semantic-scholar / deepxiv have documented fallbacks
(inline Python or raw deepxiv CLI). Prose updated to "if unresolved
(canonical chain exhausted), fall back to ..." — matches actual
bash behavior (invocation failure is not auto-cascaded).
- exa-search / openalex have no inline fallback (SDKs are required),
so unresolved helper terminates with explicit remediation error.
/research-lit migrates as a Policy D2 multi-source aggregate:
- Each source's bash block independently re-resolves $ARIS_REPO (SKILL
bash blocks may run in separate shells; ARIS_REPO state is not
guaranteed across blocks).
- Each helper invocation wrapped with if/then/else so set -e doesn't
abort the SKILL when one source fails; success emits a
`D2 contribution: <name>` log line.
- Source table updated: each row's activation predicate now matches
the actual bash gate (DeepXiv requires CLI; OpenAlex requires
`requests`; Exa's exa-py is internal to the fetcher).
- D2 finalization (orchestrator-managed in-context tracking, since
bash variables don't survive cross-block): helper-backed sources
contribute on resolver+exit-0; non-helper sources (zotero/obsidian/
local/WebSearch/Gemini) have their own per-source contribution
rules (returned results for MCP/local/Gemini; requested+invoked
for WebSearch).
- D2 empty-aggregate ERROR is raised if zero sources contributed,
blocking Step 2 from operating on an empty paper set.
- arXiv block's "always runs" prose tightened to clarify it is part
of the Priority-4 Web tier and gated on `— sources:` containing
`web`, `all`, or being unset.
- Optional PDF download now re-resolves $ARXIV_FETCHER independently.
/research-wiki/SKILL.md updates the verify_wiki_coverage.sh prose
reference (Policy E diagnostic) to canonical name with §2 reference.
/research-lit/SKILL.md also fixes a critical leftover bug: an
$SCRIPT-named variable from the old code at the Optional PDF download
block — now uses the re-resolved $ARXIV_FETCHER, guarded by
`[ -n "$ARXIV_FETCHER" ]` so it skips silently if the helper is
unresolved.
7 files total. Codex mirror equivalents are deferred to Phase 1.7.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Add Gemini (MCP/CLI) as source 8: AI-powered broad literature discovery
with topic decomposition, alias expansion, and variant retrieval
- Add OpenAlex as source 9: open citation graph with institutional
affiliations, funding data, and 250M+ works (no API key required)
- Add skills/gemini-search/SKILL.md skill definition
- Add skills/openalex/SKILL.md skill definition
- Add tools/openalex_fetch.py for OpenAlex API integration
- Update research-lit source table, source selection docs, and examples
- Document de-duplication rules against arXiv, S2, DeepXiv, and Exa