Skip to content

Tags: richlander/shelf

Tags

v0.3.1

Toggle v0.3.1's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Add relate command for freeform unary relationships, bump to 0.3.1 (#7)

v0.3.0

Toggle v0.3.0's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Add --url option to put command (#6)

* Add --url option to put command

Items can now store a URL — the most natural metadata for articles,
posts, and web content. Shown in query output and stored in the
markdown table.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Add find command for partial text search

Searches across name, ID, keywords, and URL with case-insensitive
substring matching. Supports --domain filter. Deduplicates across
books.

From usability testing: `shelf query "Agent"` and
`shelf query "github identity"` both failed because query requires
exact ID. `shelf find "Agent"` now works.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Bump version to 0.3.0

New features: --url on put, find command.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

v0.2.1

Toggle v0.2.1's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Use GeneratedRegex, SearchValues, and span-based parsing (#4)

* Use GeneratedRegex, SearchValues, and span-based parsing

- ItemStore.Canonicalize: GeneratedRegex replaces Regex.Replace
  for AOT-friendly, zero-startup-cost pattern matching
- SimHash: SearchValues<char> for whitespace tokenization
- MarkdownTableStore.ParseRow: span-based pipe splitting avoids
  ToString().Split() intermediate allocation

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Bump version to 0.2.1

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

v0.2.0

Toggle v0.2.0's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Shard storage by source: books on the shelf (#3)

* Shard storage by source: books on the shelf

Each source is a "book" — items/journal.md for personal preferences,
items/musicbrainz.md for enrichment data, etc. The same entity can
exist in multiple books without clobbering.

- ShelfItems/ShelfRelationships: composite stores that lazy-load
  per-source shards following the SeenStore pattern
- Default source renamed from "user" to "journal"
- Query merges keywords from all books, shows source provenance
- Reset deletes a book's files atomically; refuses to reset journal
- ShelfMigration: one-time migration from legacy single-file layout
- New verbs: member-of (for band membership traversal)
- Status shows per-shard counts

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Bump version to 0.2.0

Breaking: storage layout changed from single files to per-source shards.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Fix markdownlint errors in design doc

Wrap long lines, add language to fenced code blocks.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

v0.1.0

Toggle v0.1.0's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Add shelf implementation: phases 1-6 (#1)

* Add seen-set (bloom filter), SimHash, and rename remove → pull

Phase 3: per-domain bloom filter seen-set with binary persistence
and metadata JSON. `shelf seen` command checks/marks items.
Phase 5: SimHash for future fuzzy matching.
Rename `remove` to `pull` as the natural opposite of `put`.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Enable Native AOT publishing

3.7 MB self-contained binary, <1ms startup.
~13x faster than managed global tool, ~370x faster than dotnet run.
Zero AOT trim/compile warnings.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Fix ID generation, name resolution, and rename remove → pull

- Canonicalize produces clean short IDs: truncate at 30 chars with
  4-char hash suffix for long names (e.g. "show-hn-i-built-a-personal-6e13")
- Get/Remove accept either display names or IDs without double-canonicalizing
- Query view resolves target IDs to display names
- Link command output shows display names instead of IDs

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Add CI/release workflows, install.sh, and NuGet packaging

CI workflow: change detection, markdownlint, multi-platform build
with NAOT publish (5 RIDs), smoke tests, pack (pointer + any +
RID-specific AOT + Shelf.Core library package).

Release workflow: download CI artifacts, publish to NuGet.org and
GitHub Packages via OIDC, create GitHub Release with binaries.

install.sh: prefers dotnet-install if available, otherwise downloads
pre-built NAOT binary from GitHub Releases.

Shelf.App: added ToolPackageRuntimeIdentifiers and AOT size opts.
Shelf.Core: added NuGet packaging properties.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Fix markdownlint errors in SKILL.md

Line length, fenced code language, blank line before list.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>