Skip to content

Add laconic product guides for Grimoire 1.x - #207

Open
goniszewski wants to merge 9 commits into
developfrom
docs/product-guides
Open

Add laconic product guides for Grimoire 1.x#207
goniszewski wants to merge 9 commits into
developfrom
docs/product-guides

Conversation

@goniszewski

Copy link
Copy Markdown
Owner

Summary

  • Add laconic product guides under docs/grimoire/ (intro, quick start, usage, development, native install, remote access, FAQ)
  • Point the README Documentation section at those guides and the live site at goniszewski.com/grimoire
  • Set package.json homepage to the published docs URL

Note

This branch is based on release-1.1.0, so the PR also includes the release commits not yet on main. The docs commit itself is docs-only.

Test plan

  • Review docs/grimoire/*.md for accuracy against implemented features
  • Confirm README Documentation links resolve
  • Confirm FAQ pointer and live-site link are correct

goniszewski and others added 7 commits August 3, 2026 11:32
* fix: patch release-blocking inconsistencies

- install.sh: default LITTLEIMP_VERSION to the current release (was 0.1.0-beta)
- extractors: accept www.github.com URLs, restore .git suffix stripping, and
  send Grimoire/1.0.0 User-Agent from all fetchers
- e2e: align mock daemon and specs with the real daemon version and repo URLs
- embedding-repository: rebuild the sqlite-vec index in a single atomic
  transaction instead of thousands of per-row transactions on every boot
- docs: refresh release-checklist.md and update-system.md version strings
  (0.1.0-beta -> 1.0.0) and align test fixtures

* chore(release): publish 1.0.1 patch

- Bump version identity to 1.0.1 across package manifests, install.sh,
  API/MCP contract, docs, e2e mocks, and test fixtures
- Derive the outgoing User-Agent from the packaged version instead of
  hardcoding it, so fetchers stop drifting from the release version
- Build release archives and fill the Homebrew formula and checksum
  baselines with the real 1.0.1 artifact SHAs
- Add a 1.0.1 changelog entry; regenerate API docs
* fix: patch release-blocking inconsistencies

- install.sh: default LITTLEIMP_VERSION to the current release (was 0.1.0-beta)
- extractors: accept www.github.com URLs, restore .git suffix stripping, and
  send Grimoire/1.0.0 User-Agent from all fetchers
- e2e: align mock daemon and specs with the real daemon version and repo URLs
- embedding-repository: rebuild the sqlite-vec index in a single atomic
  transaction instead of thousands of per-row transactions on every boot
- docs: refresh release-checklist.md and update-system.md version strings
  (0.1.0-beta -> 1.0.0) and align test fixtures

* chore(release): publish 1.0.1 patch

- Bump version identity to 1.0.1 across package manifests, install.sh,
  API/MCP contract, docs, e2e mocks, and test fixtures
- Derive the outgoing User-Agent from the packaged version instead of
  hardcoding it, so fetchers stop drifting from the release version
- Build release archives and fill the Homebrew formula and checksum
  baselines with the real 1.0.1 artifact SHAs
- Add a 1.0.1 changelog entry; regenerate API docs
- Bump version identity to 1.1.0 across package manifests, install.sh,
  API/MCP contract, docs, e2e mocks, and test fixtures
- Carry the 1.0.1 release-identity fixes onto the release branch: installer
  version default, Grimoire/<version> user-agents, www.github.com / .git
  handling, atomic sqlite-vec index rebuild
- Build 1.1.0 release archives and fill the Homebrew formula and checksum
  baselines with the real artifact SHAs
- Add a 1.1.0 changelog entry; regenerate API docs

Co-authored-by: Robert Goniszewski <robertgoniszewski@outlook.com>
Signed-off-by: Robert Goniszewski <robertgoniszewski@outlook.com>
Resolve all conflicts in favor of the 1.1.0 release branch (superset of
the 1.0.1 content cherry-picked earlier plus the 1.1.0 version bumps).

Co-authored-by: Robert Goniszewski <robertgoniszewski@outlook.com>
Signed-off-by: Robert Goniszewski <robertgoniszewski@outlook.com>
Signs release/*.tar.gz with a detached gpg signature (key auto-detected
from the repo git user.email), verifies, runs release:validate
--require-signatures, and exports the public key + fingerprint.

Co-authored-by: Robert Goniszewski <robertgoniszewski@outlook.com>
Signed-off-by: Robert Goniszewski <robertgoniszewski@outlook.com>
Keep in-repo Markdown under docs/grimoire for GitHub readers while the published site lives at goniszewski.com/grimoire.
Copilot AI lite review requested due to automatic review settings August 15, 2026 17:19
@cursor

cursor Bot commented Aug 15, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

馃挕 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: ad64c269f8

鈩癸笍 About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 馃憤.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/pages/Index.tsx Outdated
Comment on lines +242 to +244
new Promise<void>((resolve, reject) => {
if (readLater) store.markReadLater(id, { onSuccess: () => resolve(), onError: () => reject(new Error("failed")) });
else store.clearReadLater(id, { onSuccess: () => resolve(), onError: () => reject(new Error("failed")) });

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Use mutateAsync for each bulk read-later update

When two or more bookmarks are selected, these promises wrap consecutive calls to the same updateBookmarkMutation.mutate and depend on its per-call callbacks. TanStack Query only retains the callbacks for the latest consecutive mutate call, so the earlier promises never settle and Promise.all never reaches either branch; the daemon updates may finish, but selection mode never exits and no result toast appears. Expose a mutateAsync-based operation or aggregate completion outside the shared mutation observer.

Useful? React with 馃憤聽/ 馃憥.

Comment thread src/pages/Index.tsx Outdated
});
toast({ title: `Moved ${selectedIds.size} bookmark${selectedIds.size !== 1 ? "s" : ""} to "${category}"` });
exitSelectionMode();
void Promise.all(ids.map((id) => store.deleteBookmark(id)))

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Preserve undo for partial bulk-delete successes

If one delete request fails after other requests have succeeded, Promise.all rejects and skips the only branch that offers Undo. The successfully deleted bookmarks therefore remain in trash while the UI reports only that the bulk operation failed and keeps the stale selection active. Track individual results with Promise.allSettled or otherwise expose the successful subset so users can undo or accurately understand the partial deletion.

Useful? React with 馃憤聽/ 馃憥.

Comment thread daemon/src/update/upgrade.ts Outdated
Comment on lines +254 to +255
const bytes = new Uint8Array(await res.arrayBuffer());
if (bytes.byteLength > MAX_UPGRADE_ARTIFACT_BYTES) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Enforce the upgrade size cap while streaming

When an update server omits or understates Content-Length, arrayBuffer() buffers the complete archive before the byte-limit check runs. Because this occurs before checksum or signature verification, an attacker-controlled custom release endpoint鈥攐r a compromised upstream鈥攃an send an unbounded response and exhaust the CLI process's memory despite the advertised 512 MiB cap. Read and cancel the response stream once the running total exceeds the limit, as the page and model-catalog fetchers already do.

Useful? React with 馃憤聽/ 馃憥.

Use mutateAsync for bulk read-later, preserve undo on partial bulk deletes, and enforce upgrade artifact size limits while streaming.
@sonarqubecloud

Copy link
Copy Markdown

@goniszewski
goniszewski changed the base branch from main to develop August 15, 2026 19:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants