GitNexus shipped a CatalogHome grid, DropZone local analyze, onboarding phases, and server-connect wizards. Beskid Nexus is a hosted public explorer for pre-indexed repos — visitors arrive to browse graphs, not to analyze local folders or configure LLM providers.
Beskid Nexus
Platform spec feature
Beskid Nexus
Spec standingStandard
-
Nexus opens the first indexed repo graph on / instead of a catalog grid or onboarding flows.
Context
Decision
/must load the graph explorer, selecting the first enabled catalog entry withindexed: trueordered bysortOrder.- Deep link
?repo=<catalog-id>selects an explicit entry when present. - CatalogHome, DropZone, QueryFAB, Graph RAG chat, and hosted OnboardingGuide are removed from public UI.
- Repo switching happens via navbar
<Select>, not a separate home phase. - When no indexed repo exists, show empty state + sign-in CTA for repo owners — not a marketing catalog grid.
Admin actions (add repo, re-index) must be overlays (dialog/sheet), not full-page route phases.
Consequences
gitnexus-webApp phases reduce toboot | setup | server-down | explorer.- E2E tests target graph canvas visibility and repo selector — not onboarding wizards.
- Cached LadybugDB exports remain the only graph source for public visitors.
Status
Accepted — supersedes GitNexus CatalogHome as the default Nexus entry experience.
-
Per-repo CRUD and analyze triggers require GitHub-verified ownership via hub token — not env admin rosters.
Context
GitNexus used a static admin roster for catalog mutations. Beskid Nexus indexes public graphs for many repositories — administration should follow GitHub ownership, not a deployment-time username list that does not scale across contributors and org repos.
Instance operators still need bootstrap authority for auth hub pairing and secrets — distinct from day-to-day repo administration.
Decision
POST/PATCH/DELETE /api/admin/catalog*andPOST .../analyzeandPOST .../refresh-docsrequire the session user to be owner or admin of the entry'sgitUrlper GitHub API (GET /repos/{owner}/{repo}with hub user token).GET /api/auth/memust exposeownedRepoIds— catalog ids the user may administer — for UI gating.requireAdmin(env roster) is retained only forPOST /api/admin/auth/pairand first-run setup endpoints.- Ownership verification may be cached up to 15 minutes per
(login, gitUrl). - Non-owners receive
403on mutating routes.
Consequences
github-ownership.tscentralizes URL parsing and API checks.- Frontend admin sheet gates on
ownedRepoIds.includes(activeEntry.id). - Public catalog and graph routes remain unauthenticated.
Status
Accepted — reference implementation in
beskid_nexus/gitnexus/src/server/nexus/github-ownership.ts. -
AI-generated codeDoc describes repository code only; platform spec body text never inlined — specLinks are validated hrefs from a read-only index.
Context
Nexus runs a hidden doc-maintenance worker after analyze. Without a hard boundary, generated node text could duplicate or paraphrase normative platform-spec MDX — creating two sources of truth and stale copies when spec changes.
Platform spec on
site/websiteleads code per project policy. Nexus is a reader of spec URLs, not a publisher of spec prose.Decision
codeDocis repo-scoped AI documentation — generated from graph metadata and short file snippets only.- Platform spec MDX bodies are never fed into code-doc prompts as source material.
- A read-only spec link index (
spec-index.json) stores titles, slugs, and headings for link discovery only. resolve_spec_linkstool returns candidate{ title, href }from the index; unknown hrefs must be rejected at commit.specLinksare 0–3 validated pointers — not summaries of spec content.code-doc-validatoranti-copy guard rejects records containing ≥40 consecutive characters matching spec index excerpts.- Graph API and UI must expose
codeDocandspecLinksas separate fields/sections.
When a topic is fully covered by platform spec,
codeDocstays brief and defers viaspecLinks.Consequences
- Two-phase doc pipeline: Phase A writes
codeDocfrom graph context; Phase B attaches links via index search. - Public API and UI must not mention OpenRouter, prompts, or AI vendors.
- Spec deploys require Nexus restart or index rebuild to pick up new link targets.
Status
Accepted — normative contracts in design model and contracts.
-
Signed-in users connect MCP clients to same-origin /api/mcp using deployment Bearer token; UI documents endpoint without exposing secrets.
Context
Nexus exposes graph query tools over MCP Streamable HTTP for IDE and agent integrations. Operators deploy a shared
NEXUS_MCP_AUTH_TOKENsecret. Users need a discoverable, copy-friendly surface — without embedding secrets in client bundles or public pages.Decision
- MCP must be mounted at
/api/mcpon the Nexus deployment origin. - All MCP requests must require
Authorization: Bearer $NEXUS_MCP_AUTH_TOKEN. - Header button Connect MCP must appear for signed-in users (any authenticated session).
- ConnectMcpDialog shows:
- Endpoint URL (
{window.location.origin}/api/mcp) - Auth header template with placeholder token guidance
- Copy buttons for URL and header format
- Link to MCP contracts
- Endpoint URL (
- The live Bearer token must not be returned by public or session API routes — operators supply it via deployment env (Coolify, etc.).
Consequences
gitnexus-webshipsconnect-mcp-dialog.tsxwired intoNexusAppShell.- MCP shares the cached graph data plane with public
/api/graph— no parallel index. - Platform spec documents the contract; Nexus UI links here for operator and integrator reference.
Status
Accepted — complements GitNexus MCP engine retention under Beskid Nexus product shell.
- MCP must be mounted at
0 revisions (git unavailable at build; counts may be empty)
No commits recorded for this path.
| Section id | Required | Found |
|---|---|---|
what-this-feature-specifies | yes | yes |
implementation-anchors | yes | yes |
Full tree: run pnpm verify:platform-spec-layout (writes src/generated/platform-spec-layout-report.json).
What this feature specifies
Beskid Nexus is the hosted graph explorer at nexus.beskid-lang.org. The server maintains cached knowledge graphs for a global public registry of Beskid repositories. Visitors land on a graph-first experience — not a catalog grid — and read repo-scoped code documentation on nodes and clusters. Platform spec content stays on this site; Nexus stores only validated links into platform-spec pages, never spec body text.
Repo owners (GitHub-verified) administer their entries: add, re-index, refresh docs, delete. AI documentation runs server-side only and is invisible in public API responses and UI copy.
Access model
| Actor | Capabilities |
|---|---|
| Public visitor | View any indexed repo graph; switch repos via navbar selector; read codeDoc and specLinks on entities |
| Signed-in GitHub user | Same as public; unlock admin actions for repos they own on GitHub |
| Repo owner (per repo) | Catalog CRUD, trigger analyze and doc refresh, delete from Nexus, view MCP connect URL |
| Instance operator | First-run auth hub pairing (NEXUS_SETUP_TOKEN), deployment secrets, webhook HMAC |
All indexed graphs are public read. Per-repo private graphs are not in scope.
Removed product surfaces
The following GitNexus-derived flows must not ship in Beskid Nexus public UI:
- DropZone, local analyze, CatalogHome grid
- Cypher QueryFAB, LLM settings, Graph RAG chat
- OnboardingGuide (hosted), advanced server connect from the browser
The analyze engine (LadybugDB, tree-sitter, MCP tools) remains; product chrome is replaced by the graph-first shell aligned with tracker and site.
Implementation anchors
beskid_nexus/gitnexus/— Express server, catalog, graph API, MCP, code-doc pipelinebeskid_nexus/gitnexus-web/— React shell, repo selector, graph explorer layoutsite/website/src/content/docs/platform-spec/— normative contracts (this section); read-only spec link index at deploy time viaNEXUS_SPEC_ROOT
Articles
- Graph-first landing replaces catalog homeNexus opens the first indexed repo graph on / instead of a catalog grid or onboarding flows.
- Contracts and edge casesNexus REST API contracts, CodeDocRecord rules, spec link validation, auth/me ownedRepoIds, and MCP Bearer requirements.
- Design modelGraph-first landing, navbar shell, global registry, code-doc vs platform-spec separation, and MCP connect surface.