Skip to content

Releases

v1.0.3 — working Foundry install links

Choose a tag to compare

@KochiTusker KochiTusker released this 08 Sep 21:26

Mostly documentation, but one of the corrections is a broken install.

Fixed

  • The Foundry install instructions pointed at a repository that does not
    exist.
    The setup page gave a manifest URL under an old repository name,
    and that name 404s — so anyone who followed the instructions pasted a dead
    link into Foundry and got nothing. The same dead name appeared in the README
    and the integration reference.

    The correct manifest URL is:

    https://github.com/KochiTusker/Tusks-Vault-Foundry/releases/latest/download/module.json
    

    Better still, the module is
    listed on the Foundry package registry
    — searching Tusk's Vault in Foundry's own Install Module browser is
    shorter than pasting anything, and updates then arrive through Foundry's own
    update check. That is now the first route the docs offer.

  • The Foundry companion module was described as useless on its own. It is
    not. The module runs in two modes, chosen in its settings:

    • Lite needs nothing else installed. It answers from the journal entries
      in one Foundry folder, cites the entry it used, and honours your journal
      permissions, so a GM-only note stays GM-only.
    • Bridge points the module at Vault running on the GM's machine, so
      answers come from everything you keep — Word, PDF, Markdown, an Obsidian
      vault — instead of one journal folder, with your choice of model and an
      API key that never sits in a browser.

    The previous wording told anyone who wanted the two-minute journals-only
    trial to go and install a self-hosted application first. Both modes are now
    described in the README, on the site and in the setup guide.

  • A test asserted platform-specific wording unconditionally. The port
    fallback's diagnostic differs between Windows and POSIX, and the test only
    checked the Windows form. It passed everywhere it was run before release,
    which turned out to mean everywhere it was run was Windows, and the Linux CI
    leg failed. Both branches are now exercised on either host.

Changed

  • Several test-hygiene fixes of the same family: a helper that discarded an
    async callback's result, a skip written as an early return (which reports as
    a pass without asserting anything), and a sentinel value one edit away from
    becoming a silent pass.

Nothing to do when upgrading. If you tried to install the Foundry module
before this release and it failed, the manifest URL above is why.

v1.0.2 — PDF ingest fix, and three platform failures

Choose a tag to compare

@KochiTusker KochiTusker released this 08 Sep 21:26

Four platform fixes, one of which affected every install.

Fixed

  • PDF documents were never actually read. Since the first release, every
    code path that parsed a PDF called pdf-parse with its v1 calling
    convention against a v2 package, which is not callable. The lore loader
    catches per-file ingest errors and logs them, so nothing crashed — PDFs
    simply contributed nothing to the corpus, and an answer that should have
    cited one said it had no source instead. The type checker could not see it,
    because the module was loaded through createRequire and typed any.

    If you keep lore as PDFs, they are being read for the first time after
    this update.
    Nothing to do beyond updating; the next question re-ingests
    the folder. Extraction is now covered by a test that parses a real PDF
    rather than a mock — a mock agrees with whichever convention the code uses
    and stays green through exactly this kind of break.

  • Windows on ARM could not start the server at all. pdf-parse depends on
    @napi-rs/canvas for the DOM globals PDF.js expects, and the pinned version
    ships no win32-arm64 binary; the failed load surfaced as
    DOMMatrix is not defined during boot, before anything could report it.
    Fixed twice over: the dependency is pinned forward to a version that ships
    the binary, and PDF support now loads lazily, so a platform without one
    loses PDF reading rather than the whole application.

  • A reserved port range stopped the server instead of being stepped over.
    The launcher walks 3000–3019 when a port is busy, but only retried on
    EADDRINUSE. Windows reserves blocks of TCP ports for Hyper-V, WSL2 and
    Docker Desktop, and binding inside one fails with EACCES — so a machine
    whose reservation covered 3000 failed on the first attempt and never tried
    the other nineteen. Both are retried now, and if the whole range is
    exhausted the error names the reservation list and how to check it.

  • Lore was not migrated across drives. On first boot with an external lore
    folder, documents in the repository's own Lore/ are moved into it. That
    used a rename, which cannot cross a filesystem — an install on C: with a
    lore folder on D: is an ordinary setup. The move failed, the app read the
    new folder while the documents sat unread in the old one, and only a log
    line said so. It now falls back to a copy, staged and published atomically,
    with the source left untouched if anything goes wrong.

Changed

  • Continuous integration now starts the application. The suite had 1,488
    tests and none of them booted the server, which is how two of the defects
    above shipped green. Every commit now launches the real server on both
    Windows and Linux and checks it answers.

  • Platform support is stated plainly in the README, the installation guide
    and the known-issues page. 64-bit Windows is the supported platform. Windows
    on ARM, macOS and Linux are expected to work and have not been proven to —
    reports from any of them are welcome.

v1.0.1 — cross-platform path-guard fix

Choose a tag to compare

@KochiTusker KochiTusker released this 07 Sep 21:48

A same-day patch on top of the first public release.

Fixed

  • safeVaultPath now answers the same on every platform. The Obsidian
    vault's path guard rejected a backslash path on Windows (where \ is a
    separator and the path escaped the vault) and accepted it on Linux (where
    \ is an ordinary filename character, so the path stayed inside the vault).
    Neither behaviour disclosed anything outside the vault, but a guard whose
    answer depends on the host OS has to be reasoned about twice. A
    vault-relative path is POSIX by contract, so backslashes are now refused
    outright, ahead of any path resolution.

  • Test-suite timeouts sized for real machines. The vault suite writes ~120
    notes and builds a vault map in a per-test hook, which could exceed the
    default 10-second hook budget on a loaded machine or a slower CI runner.

No behaviour changes for normal use, and nothing to do when upgrading.

v1.0.0 — first public release

Choose a tag to compare

@KochiTusker KochiTusker released this 07 Sep 21:37

Tusk's Vault is a local-first lore assistant for tabletop campaigns. Drop your
notes into a folder, then ask questions about them from Discord, from Foundry
VTT, or from any MCP client — and get back an answer with a citation on every
claim.

The whole design is one idea: the assistant may only tell you what your
documents say, and it must show you where it got it.
A canonical seven-rule
block is appended to every prompt at assembly time, so citation discipline and
the no-invention contract are structural rather than configurable — you cannot
turn them off by editing a system prompt. When the answer genuinely is not in
your sources, it says so in a fixed phrase and files the question as a lore gap
for you to answer once, properly.

What's in it

  • Ask from where you already are — a Discord bot, a Foundry VTT module, an
    MCP bridge, and a local dashboard.
  • Four ways to connect a model — Google Gemini or OpenRouter with your own
    key, an existing Claude Code subscription, or Ollama with no key at all.
  • Three citation flavours — [filename], [clarification: ID] and
    [D&D 5e] — so you can always see whether a claim came from your canon, from
    a ruling you made earlier, or from the rules.
  • Lore gaps — questions the documents cannot answer are collected in the
    dashboard. Your answer is matched semantically, so it still applies when a
    player phrases the same question differently months later.
  • Obsidian vaults as a lore source, read strictly read-only.
  • Eight personas — the same citation discipline in a different voice.
  • Local by default — the dashboard binds to loopback, embeddings run on
    your own CPU, and there is no telemetry.

Getting started

You need Node 20 or newer. The
installation walkthrough
covers setup, connecting a model, and pointing Vault at your lore.

Full documentation: https://kochitusker.github.io/Tusks-Vault/

MIT licensed. Issues and feedback are welcome.