Skip to content

v0.2.0

Latest

Choose a tag to compare

@github-actions github-actions released this 24 Oct 18:53
· 1 commit to main since this release

Code vocabulary routing for auto

auto, the default search mode, now also runs hybrid (vector plus keyword search) when a query names something from the repo's code, even a name with no _ or digit, such as psycopg or PageFetcher. Before, auto caught only words with a _ or digit, such as SCREE_FIRST_SYNC_MB or R7-Q2.

Each sync builds a vocabulary of names from the repo:

  • Dependency names from requirements*.txt, pyproject.toml, package.json, go.mod and Cargo.toml.
  • Mixed-case names from imports and declarations in Python, JavaScript, TypeScript and Go, such as PageFetcher and useState.

Privacy

  • Code is read for names only, under the same .gitignore, .screeignore, size and symlink rules as markdown.
  • Only the lowercased names are stored, in the repo's local index. Code is never chunked, embedded, sent to the API or returned by read_doc.
  • Names come only from where code declares or imports them, never from values, strings, comments or docstrings.
  • Code under hidden folders such as .claude/ and .github/ adds no names, and vendored folders such as node_modules and vendor are skipped.
  • A symlink must point to a file of its own kind: a .md link to a source file is refused.

Routing quality

  • A stoplist of about 350 common words keeps plain questions on semantic. It covers question words, packages named after ordinary words (requests, markdown, sync) and mixed-case plain words (setUp, FileName).
  • On two repos with code and docs, most questions naming code switched to hybrid, and no plain question did.
  • A word the stoplist misses can still send a plain question to hybrid. -mode semantic is always available.

Limits

  • At most 20,000 source files are read per sync. Each file adds at most 2,000 names, and the vocabulary holds at most 100,000.
  • Unchanged files aren't parsed again. Names are rebuilt when the extractor changes.
  • The vocabulary refreshes on a full sync: at startup, on takeover, on reindex, or on a resync. The file watcher doesn't re-read code between syncs.

scree doctor

doctor reports the vocabulary size and how many names also appear in the notes. doctor -v prints a sample, showing only names that also appear in the notes.

Upgrading

  • The index schema moves to v4. It upgrades automatically when an index is opened, and the next sync fills in the vocabulary.
  • Restart Claude Code sessions, or reconnect scree with /mcp, so they run the new binary. An older binary can still open a v4 index, but it doesn't keep the vocabulary.

Other

  • A test that timed out on slow macOS runners now has a longer deadline.
  • The docs at https://scree.jrpko.dev are updated for this release.

Full changelog: v0.1.0...v0.2.0

Changelog

  • f00d335 Docs: v0.1.0 is cut; drop it from the registry to-do
  • 5dc9a9c Route auto to hybrid on names from the repo's code
  • cc10a9c Tests: give the stale-path writer test 15s
  • eda5346 Vocab: close the markdown-symlink leak and tighten the vocabulary
  • b38c04c Vocab: count a code name only when the notes mention it
  • 27903f2 Vocab: route on the vocabulary alone; gate only doctor's sample
  • 756baa9 Vocab: take names only from name positions