Skip to content

feat(docs): branch-aware and visibility-scoped wiki docs#303

Merged
efenocchi merged 21 commits into
mainfrom
feat/branch-aware-docs
Jul 11, 2026
Merged

feat(docs): branch-aware and visibility-scoped wiki docs#303
efenocchi merged 21 commits into
mainfrom
feat/branch-aware-docs

Conversation

@efenocchi

@efenocchi efenocchi commented Jul 10, 2026

Copy link
Copy Markdown
Collaborator

What

Makes the wiki-docs corpus branch-aware and visibility-scoped: a doc is never more visible than the code it describes, branches are isolated, and unchanged pages are inherited from main instead of duplicated.

Builds on the shared hivemind_docs cloud table by reusing the existing scope column as the identity dimension: main = canonical/public corpus, b:<branch> = a per-branch overlay.

Behaviour

  • Branch isolation. Reads resolve with precedence my overlay › main › (foreign branch: hidden). Writing a branch overlay never touches main.
  • Copy-on-write overlays. On a branch, a page is only materialized when its files diverge from main (seeded from the trunk merge-base so the first cycle overlays just the branch's own changes, not the whole corpus).
  • Visibility tracks code visibility.
    • uncommitted / detached HEAD → held (never documents uncommitted bytes),
    • committed-but-unpushed branch code → private, written to a local on-disk store (~/.hivemind/docs-private/), readable only on this machine/branch,
    • pushed branch code → shared cloud overlay,
    • main → everyone.
  • Freshness by content fingerprint. Each page stores the git blob-shas it was generated from (source_fp); reads carry a staleness banner naming changed files.
  • Merge promotion. When a branch's changes land in main, its overlay is re-stamped as main (reused, not regenerated) when the fingerprint matches the current membership, and the overlay is archived.
  • Publish-on-push. Private pages keep the refresh cursor from advancing until pushed, so they always publish once the source reaches origin; the local copy is then cleaned up.

Key files

src/docs/branch-scope.ts (identity + precedence resolver), src/docs/fingerprint.ts (blob-sha fingerprint + publish/clean gates), src/docs/private-store.ts (local private store), src/docs/promote.ts (merge promotion), plus threading through read.ts / write.ts / wiki-refresh.ts / wiki-update.ts / wiki-generate.ts / vfs-handler.ts / commands/docs.ts.

Testing

  • 1487 unit tests green, tsc clean. New suites: docs-branch-scope, docs-fingerprint, docs-promote, docs-private-store, plus branch/visibility cases across docs, docs-wiki-refresh, docs-wiki-update, docs-vfs-handler.
  • Two live end-to-end runs against a Deeplake test table: the cloud read resolver (main vs branch overlay precedence) and the two-store read path (local-private shadows cloud on a branch, cloud on main).
  • Three adversarial code-review passes; all Blocker/Major findings fixed (scope-safe upsertDoc delete, timeout-safe scoped-read fallback, working-tree/detached holds, promotion membership guard, private-store isolation + no cloud leak on escalate, cursor-hold so private pages publish after push).

Known limitation

A brand-new subsystem authored on an unpushed branch is held from the cloud until pushed (private materialization currently covers updates to existing pages, not first-generation). A full LLM-pipeline e2e (the real doc generation) is the remaining end-to-end sign-off; component and read-path e2e are done.

Summary by CodeRabbit

  • New Features
    • Documentation browsing now respects branch-specific overlays, showing the latest matching version per page for the active reader scope.
    • Wiki/doc generations now track source freshness and can warn about potentially stale content.
    • Branch wiki updates can be staged privately until the source is pushed, then promoted when appropriate.
  • Bug Fixes
    • Improved isolation between branch overlays and main documentation, with safe fallbacks when older metadata columns are missing.
  • Tests
    • Added/expanded coverage for branch scoping, private staging, freshness hints, promotions, and wiki refresh/update behavior.

@coderabbitai

coderabbitai Bot commented Jul 10, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

Documentation now supports branch-scoped reads and writes, source-fingerprint freshness tracking, private branch storage, overlay promotion after merges, stale-page indicators, and CLI/VFS scope propagation.

Changes

Branch-scoped documentation

Layer / File(s) Summary
Scope and fingerprint contracts
src/docs/branch-scope.ts, src/docs/fingerprint.ts, src/deeplake-schema.ts, tests/shared/docs-branch-scope.test.ts, tests/shared/docs-fingerprint.test.ts
Defines branch scope precedence, Git-derived scope resolution, source fingerprint serialization/comparison, publish checks, and the source_fp schema column.
Scoped storage and reader resolution
src/docs/private-store.ts, src/docs/read.ts, src/docs/write.ts, tests/shared/docs-private-store.test.ts, tests/shared/docs.test.ts
Adds atomic private-document storage, scoped writes, fingerprint persistence, schema-compatible reads, and overlay-over-main reader selection.
Scoped wiki writes and promotion
src/docs/wiki-generate.ts, src/docs/wiki-update.ts, src/docs/promote.ts, tests/shared/docs-wiki-update.test.ts, tests/shared/docs-promote.test.ts
Fingerprints generated pages, writes branch overlays or private pages, and promotes fresh overlays to main while archiving their source rows.
Refresh and reader integration
src/docs/wiki-refresh.ts, src/docs/vfs-handler.ts, src/commands/docs.ts, src/hooks/pre-tool-use.ts, tests/shared/docs-wiki-refresh.test.ts, tests/shared/docs-vfs-handler.test.ts
Propagates reader scopes, seeds branch refresh windows from merge bases, holds unsafe pages, tracks pending publication, serves private pages, and renders stale indicators.
CLI freshness wiring
src/commands/docs.ts, tests/shared/docs-wiki-freshness-hint.test.ts
Detects hook and auto-refresh state, then prompts or prints freshness guidance after manual wiki and document generation.

Estimated code review effort: 5 (Critical) | ~120 minutes

Possibly related PRs

Suggested reviewers: khustup2, kaghni

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Description check ⚠️ Warning The description is detailed and on-topic, but it does not follow the required template sections for Summary, Version Bump, and Test plan. Add the template sections: Summary, Version Bump, and Test plan with checkbox items, including whether a version bump is needed.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main change: branch-aware, visibility-scoped wiki docs.
Docstring Coverage ✅ Passed Docstring coverage is 87.50% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/branch-aware-docs

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

Coverage Report

Scope: files changed in this PR. Enforced threshold: 90% per metric (per file via vitest.config.ts).

Status Category Percentage Covered / Total
🟢 Lines 95.10% (🎯 90%) 1494 / 1571
🟢 Statements 92.77% (🎯 90%) 1693 / 1825
🟢 Functions 93.43% (🎯 90%) 185 / 198
🔴 Branches 84.76% (🎯 90%) 1257 / 1483
File Coverage — 14 files changed
File Stmts Branches Functions Lines
src/commands/docs.ts 🟢 94.3% 🔴 85.6% 🟢 93.5% 🟢 96.8%
src/deeplake-schema.ts 🟢 96.0% 🔴 84.8% 🟢 100.0% 🟢 95.2%
src/docs/branch-scope.ts 🟢 100.0% 🟢 94.1% 🟢 100.0% 🟢 100.0%
src/docs/candidates.ts 🟢 100.0% 🟢 90.9% 🟢 100.0% 🟢 100.0%
src/docs/fingerprint.ts 🟢 100.0% 🟢 100.0% 🟢 100.0% 🟢 100.0%
src/docs/private-store.ts 🟢 96.2% 🟢 92.3% 🟢 100.0% 🟢 100.0%
src/docs/promote.ts 🟢 97.6% 🔴 83.8% 🟢 100.0% 🟢 100.0%
src/docs/read.ts 🔴 89.8% 🔴 75.1% 🟢 100.0% 🟢 93.9%
src/docs/vfs-handler.ts 🟢 98.1% 🟢 93.6% 🟢 100.0% 🟢 100.0%
src/docs/wiki-generate.ts 🟢 96.9% 🟢 92.2% 🟢 100.0% 🟢 99.1%
src/docs/wiki-refresh.ts 🔴 81.3% 🔴 75.1% 🔴 80.0% 🔴 85.1%
src/docs/wiki-update.ts 🟢 94.9% 🔴 86.0% 🟢 100.0% 🟢 98.1%
src/docs/write.ts 🟢 91.4% 🟢 93.2% 🔴 70.6% 🟢 98.7%
src/hooks/pre-tool-use.ts 🟢 92.1% 🔴 86.0% 🟢 90.5% 🟢 91.9%

Generated for commit 9429c03.

@efenocchi efenocchi changed the base branch from fix/docs-scope-existence-checks to main July 10, 2026 17:45
@efenocchi

Copy link
Copy Markdown
Collaborator Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 10, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai 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.

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (5)
src/docs/wiki-refresh.ts (1)

427-455: 🚀 Performance & Scalability | 🟡 Minor | ⚡ Quick win

pendingPublish is incremented even when nothing was written privately.

updateWikiPage returns "no_change" or "failed" via early returns that never reach the privateSink call, yet if (priv) pendingPublish++; here fires regardless of out.action. For "failed" this is harmless (failures already force incomplete), but for "no_change" it needlessly marks the cycle as having pending work, which stalls cursor advancement and causes this page to be re-diffed and re-run through the LLM on every subsequent cycle for as long as the branch stays unpushed — even though nothing about it ever changes.

Consider only incrementing pendingPublish when out.action is "patched" or "mechanics_refreshed" (the cases where privateSink actually wrote).

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/docs/wiki-refresh.ts` around lines 427 - 455, Only increment
pendingPublish in the priv branch when updateWikiPage returns an action
indicating a private write occurred: "patched" or "mechanics_refreshed". Use the
returned out.action from updateWikiPage, while preserving the existing
branchName cleanup behavior.
src/commands/docs.ts (1)

864-876: 🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

docs wiki should block dirty, detached, or unpushed checkouts. generateWikiPages writes directly to Deeplake with scope: currentScope(defaultGit(cwd)), so this manual command can publish docs for uncommitted or unpushed code without the safeguards wiki-refresh applies. If manual generation is meant to be allowed, document that explicitly; otherwise add the same hold check here.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/commands/docs.ts` around lines 864 - 876, The docs wiki command currently
invokes generateWikiPages without validating repository state, allowing dirty,
detached, or unpushed checkouts to publish documentation. Before the
generateWikiPages call in the docs wiki handler, invoke the same hold-check
logic used by wiki-refresh, using the existing cwd/defaultGit context, and abort
with the matching error behavior when the checkout is unsafe.
src/docs/write.ts (1)

217-232: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Landed-check scope filter doesn't mirror insertDoc's own scope default.

insertDoc defaults an omitted scope to "main" when writing the row (Line 164: input.scope ?? "main"), but the resilient wrapper's post-timeout "landed" check passes scope: input.scope (Line 227) unmodified — so when scope is omitted, no scope filter is applied in getDocLatest/buildProjectFilter (read.ts only adds the clause if (opts.scope !== undefined)). If a branch overlay for the same (project, doc_id) already exists (a scenario this PR explicitly supports coexisting), the check can match that overlay's row instead of the just-inserted main row, silently returning the wrong version/content and masking whether the intended write actually landed.

🐛 Proposed fix
-      const landed = await getDocLatest(query, tableName, input.doc_id, { project: input.project, scope: input.scope }).catch(() => null);
+      const landed = await getDocLatest(query, tableName, input.doc_id, { project: input.project, scope: input.scope ?? "main" }).catch(() => null);
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/docs/write.ts` around lines 217 - 232, Ensure the landed-check in the
resilient insert flow uses the same scope default as insertDoc: pass scope:
input.scope ?? "main" to getDocLatest within the retry loop. Update the call
associated with insertDocResilient so omitted scopes cannot match an overlay
row.
src/docs/read.ts (1)

174-204: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Inconsistent dedup-key delimiter can silently drop docs in reader-scoped listDocs.

Line 182 builds the per-key dedup map using a NUL (\u0000) delimiter specifically to avoid ambiguity between project/doc_id boundaries. The scoped-winner write-back at Line 202 instead joins with a plain space, reintroducing exactly the collision the NUL delimiter was chosen to prevent — two distinct (project, doc_id) pairs whose concatenation with a space is identical (plausible since paths with spaces are explicitly supported elsewhere, e.g. tests/shared/docs-fingerprint.test.ts tests spaces in paths) will overwrite each other in latest, silently dropping a document from the branch-scoped listing.

🐛 Proposed fix
   if (scoped) {
     for (const [, list] of candidates) {
       const winner = pickByScopePrecedence(list, opts.readerScope!);
-      if (winner) latest.set(`${winner.project} ${winner.doc_id}`, winner);
+      if (winner) latest.set(`${winner.project}\u0000${winner.doc_id}`, winner);
     }
   }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/docs/read.ts` around lines 174 - 204, Use the same NUL delimiter
consistently for scoped winner write-back: update the key construction in the
scoped loop of listDocs to `${winner.project}\u0000${winner.doc_id}`, matching
the key used when populating candidates and preventing collisions between
distinct project/doc_id pairs.
src/hooks/pre-tool-use.ts (1)

462-483: 🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

Thread readerScope/git through the /docs listing path
src/hooks/pre-tool-use.ts:475-483 still calls handleDocsVfsFn with միայն project, so /docs listings can fall back to scope-agnostic latest-version resolution and surface a foreign branch overlay. Pass the same readerScope/git options used by the direct-read branch here too.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/hooks/pre-tool-use.ts` around lines 462 - 483, The /docs listing branch
omits readerScope and git context, allowing scope-agnostic document resolution.
In the lsDir === "/docs" or "/docs/" block, create docsCwd and docsGit
consistently with the direct-read branch and pass readerScope:
currentScope(docsGit) and git: docsGit alongside project to handleDocsVfsFn.
🧹 Nitpick comments (1)
tests/shared/docs-wiki-refresh.test.ts (1)

186-208: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Assert the held reason message, not just the action.

The sibling "dirty working tree" test asserts the full outcomes array including reasons. This test only checks action === "held", leaving the specific reason message unverified.

🔧 Suggested tightening
-    expect(report.outcomes[0].action).toBe("held");
+    expect(report.outcomes[0]).toEqual({
+      doc_id: "wiki/pkg/core",
+      action: "held",
+      reasons: ["private page needs regeneration — publishes on push"],
+    });
As per path instructions, "Prefer asserting on specific values (paths, messages) over generic substrings."
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tests/shared/docs-wiki-refresh.test.ts` around lines 186 - 208, Strengthen
the test for the held private page by asserting the specific reason message in
report.outcomes, alongside the existing action assertion. Update the
expectations in the test case “private page with no usable diff is HELD, never
regenerated to the cloud (codex r3 leak)” to verify the full outcomes details,
matching the precise held reason used by the refresh cycle.

Source: Path instructions

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/docs/vfs-handler.ts`:
- Around line 121-143: Update the private-document guard in the VFS document
lookup to treat an empty-string project as valid, while still excluding missing
projects and MAIN_SCOPE. Use an explicit undefined/null check for opts.project
alongside the existing readerScope condition before calling readPrivateDoc.

In `@src/docs/wiki-refresh.ts`:
- Around line 323-344: Compute the detached state before the promotion logic,
then update the trunk promotion condition to require both branchName === null
and !detached. Use the existing detached variable and promoteMergedOverlays
block so detached HEADs cannot promote overlays into main.

---

Outside diff comments:
In `@src/commands/docs.ts`:
- Around line 864-876: The docs wiki command currently invokes generateWikiPages
without validating repository state, allowing dirty, detached, or unpushed
checkouts to publish documentation. Before the generateWikiPages call in the
docs wiki handler, invoke the same hold-check logic used by wiki-refresh, using
the existing cwd/defaultGit context, and abort with the matching error behavior
when the checkout is unsafe.

In `@src/docs/read.ts`:
- Around line 174-204: Use the same NUL delimiter consistently for scoped winner
write-back: update the key construction in the scoped loop of listDocs to
`${winner.project}\u0000${winner.doc_id}`, matching the key used when populating
candidates and preventing collisions between distinct project/doc_id pairs.

In `@src/docs/wiki-refresh.ts`:
- Around line 427-455: Only increment pendingPublish in the priv branch when
updateWikiPage returns an action indicating a private write occurred: "patched"
or "mechanics_refreshed". Use the returned out.action from updateWikiPage, while
preserving the existing branchName cleanup behavior.

In `@src/docs/write.ts`:
- Around line 217-232: Ensure the landed-check in the resilient insert flow uses
the same scope default as insertDoc: pass scope: input.scope ?? "main" to
getDocLatest within the retry loop. Update the call associated with
insertDocResilient so omitted scopes cannot match an overlay row.

In `@src/hooks/pre-tool-use.ts`:
- Around line 462-483: The /docs listing branch omits readerScope and git
context, allowing scope-agnostic document resolution. In the lsDir === "/docs"
or "/docs/" block, create docsCwd and docsGit consistently with the direct-read
branch and pass readerScope: currentScope(docsGit) and git: docsGit alongside
project to handleDocsVfsFn.

---

Nitpick comments:
In `@tests/shared/docs-wiki-refresh.test.ts`:
- Around line 186-208: Strengthen the test for the held private page by
asserting the specific reason message in report.outcomes, alongside the existing
action assertion. Update the expectations in the test case “private page with no
usable diff is HELD, never regenerated to the cloud (codex r3 leak)” to verify
the full outcomes details, matching the precise held reason used by the refresh
cycle.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 440ef446-ee98-449a-a8cf-84b2db5be608

📥 Commits

Reviewing files that changed from the base of the PR and between 6334110 and cb15f56.

📒 Files selected for processing (22)
  • src/commands/docs.ts
  • src/deeplake-schema.ts
  • src/docs/branch-scope.ts
  • src/docs/candidates.ts
  • src/docs/fingerprint.ts
  • src/docs/private-store.ts
  • src/docs/promote.ts
  • src/docs/read.ts
  • src/docs/vfs-handler.ts
  • src/docs/wiki-generate.ts
  • src/docs/wiki-refresh.ts
  • src/docs/wiki-update.ts
  • src/docs/write.ts
  • src/hooks/pre-tool-use.ts
  • tests/shared/docs-branch-scope.test.ts
  • tests/shared/docs-fingerprint.test.ts
  • tests/shared/docs-private-store.test.ts
  • tests/shared/docs-promote.test.ts
  • tests/shared/docs-vfs-handler.test.ts
  • tests/shared/docs-wiki-refresh.test.ts
  • tests/shared/docs-wiki-update.test.ts
  • tests/shared/docs.test.ts

Comment thread src/docs/vfs-handler.ts
Comment thread src/docs/wiki-refresh.ts Outdated

@coderabbitai coderabbitai 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.

🧹 Nitpick comments (1)
tests/shared/docs-wiki-freshness-hint.test.ts (1)

14-36: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Prefer full-message equality over generic substring assertions.

Lines 14–36 use generic substring/regex checks (toContain("graph init"), not.toMatch(/NOT stay fresh/), not.toContain("docs auto on")). Per the tests/** path instruction, prefer asserting on specific message values. Using toBe with the full expected string would catch any unintended wording drift in these user-facing hints.

♻️ Proposed refactor for lines 14–20
   it("auto ON, no hook → offers per-commit upgrade, never claims it's stale", () => {
     const h = wikiFreshnessHint({ autoEnabled: true, hookInstalled: false, subject: "This wiki" });
-    expect(h).not.toBeNull();
-    expect(h!).toContain("graph init");
-    expect(h!).not.toMatch(/NOT stay fresh/);
-    expect(h!).not.toContain("docs auto on");
+    expect(h).toBe("Auto refresh is ON (updates on session start). For instant per-commit refresh: hivemind graph init");
   });
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tests/shared/docs-wiki-freshness-hint.test.ts` around lines 14 - 36, Replace
the broad substring and regex assertions in the wikiFreshnessHint tests with
exact full-message equality checks using toBe. For each
autoEnabled/hookInstalled scenario, assert the complete expected string returned
by wikiFreshnessHint, while retaining the null check only if needed.

Source: Path instructions

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@tests/shared/docs-wiki-freshness-hint.test.ts`:
- Around line 14-36: Replace the broad substring and regex assertions in the
wikiFreshnessHint tests with exact full-message equality checks using toBe. For
each autoEnabled/hookInstalled scenario, assert the complete expected string
returned by wikiFreshnessHint, while retaining the null check only if needed.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: ce4dd4cc-9c32-4906-96d3-edf82efe1e27

📥 Commits

Reviewing files that changed from the base of the PR and between cb15f56 and 9947bf0.

📒 Files selected for processing (5)
  • src/commands/docs.ts
  • src/docs/vfs-handler.ts
  • src/docs/wiki-refresh.ts
  • tests/shared/docs-wiki-freshness-hint.test.ts
  • tests/shared/docs-wiki-refresh.test.ts
🚧 Files skipped from review as they are similar to previous changes (2)
  • src/docs/vfs-handler.ts
  • src/docs/wiki-refresh.ts

@efenocchi efenocchi merged commit 2bfee0a into main Jul 11, 2026
11 checks passed
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.

1 participant