Changelog
What's New
Follow the evolution of Gatewarden Nexus. New features, improvements, and platform updates, from initial launch to the latest release.
Workspace Shadow Mode
Fixed
- Workspace shadow modekeeps
devbox.json,devbox.lockand the devbox scripts out of git after the nextnexus pull; files already tracked stay tracked until removed withgit rm -r --cached -- devbox.json devbox.lock scripts/devbox. The fork still gets upstream-change notices and can sync when ready. The "Ignore & decouple" action is gone.
Current Devbox Scripts
Fixed
- Devbox scriptsthe standard devbox scripts are generated on every
nexus pull, so existing projects get the 0.17 shell summary instead of the old tmux commands. Runnexus pull --forceonce to replace them.
Discreet Projects, Shadow Guard and Release Lines
Discreet Customers and Projects
- Safe for screen sharescustomers and projects marked discreet (formerly "Out of scope") no longer appear in overviews, pickers, search or dashboard widgets. They stay reachable on purpose: direct link, the customer page and the Discreet tab of both lists.
Shadow Guard for Public Repositories
- No AI traces in contentshadow levels ai and nexus now also tell agents not to reveal AI-assisted development in commits, pull requests, code comments and repository docs; nexus additionally keeps out ADR numbers, Nexus IDs and tool names.
- Checked before commit
nexus shadow checkand a commit-msg hook (on by default) block commit messages with these references. Switching shadow on does not clean content that is already committed.
Languages and Release Lines
- Language settingsdocumentation and answer language per platform, project and user; projects without their own value follow the platform default on the next
nexus pull. - One session per release linesessions carry their release line,
/nexus-initresumes the session of the current staging branch, and old staging lines are retired automatically.
Dashboard Refinements
- Clearer lists and errorsone search and filter bar for customers and projects, the customer in project breadcrumbs, user search with avatars, an audit log review queue, and error pages with a reference you can quote to support.
Upgrade
- nexus-cli 0.28.16 or laterrun
nexus upgrade, thennexus pull. 0.28.15 writes plugin variables shell-safe for devbox, and 0.28.16 adds the shadow check and the commit-msg hook.
Customer Context and Member Search
Security
- Dependency patchesNext.js, undici, sharp and DOMPurify are on their patched releases.
Changed
- Customer in project breadcrumbspages of a customer project show the customer, linked to its project list for those who manage the customer.
- Member searchadding members searches users by name or email, with avatars, instead of listing every user.
- Customer detailcontact, billing and invoicing side by side; "Default Assignments" replaces "Team Assignments".
Fixed
- Session calloutsthe next entry point is readable in light mode.
Skill Access
Security
- Skills follow project accessproject skills are visible to members of their projects only. Every signed-in user can browse the global skill catalog; editing it stays with platform admins.
Database Access Hardening
Security
- Server-only database functionsfunctions that only the Nexus server and its scheduled jobs use can no longer be called from outside. Workspaces, skills and search data stay behind the project's access checks.
Workspace Assignment and Access
Fixed
- Pick a workspace in the project formthe blueprint search list in Agent Setup was cut off and could not be used. It now opens fully below the search field.
- Change the workspace of an existing projectthe edit form shows the blueprint of the current workspace. Picking a different one creates the new workspace on save; the previous one is archived.
Security
- Workspace access follows project rolesonly project members and platform admins can see a project's workspaces; only project admins, editors and platform admins can create, change or remove them.
Short Rules and Curated Plugins
Project Directives as Short Rules
- One catalog instead of copiesrules that almost every project shared are now written once in a platform catalog and referenced by projects. Platform rules apply to every project, default rules can be turned off, optional rules can be added, and platform admins edit a rule once for all projects under Platform > Directives.
- Short, binding rulesa project rule is one sentence of at most 240 characters with a level (MUST or SHOULD). The background goes into a rationale that people see in the UI but agents never receive. The project page shows a render budget and a preview of exactly what agents get. Existing directives were converted: copies became catalog references or project settings, long texts were shortened and the old text kept as rationale.
- Project settings instead of rulesartifact and documentation language, Conventional Commits, no em-dashes and personal address are switches in the project form (also
nexus env set policy.*), and each one renders its rule automatically. - Always loaded in Claude Codeclaude-cli projects get their rules as
.claude/rules/15-nexus-directives.md, which Claude Code loads in every session; AGENTS.md and CLAUDE.md only point to it. OpenCode projects get a compact list in AGENTS.md.
Shadow Level for Public Repositories
- Keep agent files out of gitwith the shadow level ai,
nexus pulladds every agent file it writes (.claude/,.nexus/, AGENTS.md, CLAUDE.md,.cursorrules, Copilot instructions, RTK and Taskmaster files) to the local git exclude list, so a new agent file is not committed by accident. Files that are already tracked stay tracked; remove them once withgit rm --cached. The level nexus also tells agents not to mention Nexus in commits, pull requests, comments or docs.
Claude Code Plugins and Capability Routing
- Curated plugins per projectclaude-cli projects pick nexus-core and official Anthropic plugins in the project form: workflow, review and security plugins plus language servers suggested from the Codebase Character.
nexus pull --forceandnexus runinstall them at project scope; your own Claude settings are never touched. - Capability routing rulea managed rule tells the agent which Nexus skill owns each workflow (reviews, ADRs, dispatches, session close) and which plugins or built-in commands must not replace it, so results always land in Nexus. Plugins that duplicate a Nexus skill are no longer offered; a project that already uses one sees it marked as overlapping. The nexus-core plugin now brings only hooks and review agents, no competing workflow skills.
- Headroom for Claude Codethe Headroom context compression can now be configured for claude-cli projects too.
A Cleaner Skill Catalog
- Fewer, clearer skillssix archived skills are removed, the two dispatch sweep skills are merged into one, and the code review skill is split into a short skill with reference resources. Every skill needs a description now, because agents pick skills by it.
- Run only on requestskills can be marked so that the agent runs them only when you ask (for example the grill-me interview). Resource files of multi-file skills now reach your project on
nexus pull.
Security
- Role checks for skills and directiveschanges through the MCP server now require the same roles as in the dashboard: platform admins for core skills, project admins or editors for project skills and directives. Viewers can no longer change them, and every directive change is recorded in the audit trail.
- Safer node connectionscalls to your nodes check every resolved address at connect time and no longer follow redirects, which blocks DNS rebinding.
- Tighter database accesseight more tables no longer allow signed-in users to read rows directly through the database API.
Fixed
- Hook logs stay smallthe Claude Code hook logs in
.nexus/now rotate at 5 MB instead of growing with every session. - Project budgets in USDbudgets are counted in USD, the currency the providers report, so the form no longer offers EUR until currency conversion exists.
- Executioner switch without an agent
nexus env set executioner=...on a project without an agent setup now fails with a clear hint instead of reporting a change that did not happen. - Dark modewhite panels, gray chips and colored badges that stayed light in dark mode now follow the theme.
- Codebase CharacterCost Control explains which presets are active and which RTK filters they add.
Upgrade
- nexus-cli 0.28.9 or laterrun
nexus upgrade, thennexus pull --forceso the new rules file, plugins and git exclude list are written.
Your Claude Code Workspace
Configurable Claude Code Workspace
- Workspace Profilesthe terminal layout that
nexus runopens is now configurable. Pick a preset in My Settings > Workspace Profiles, switch panes and tabs on or off, change sizes and preview the result. Projects can set a team default, platform admins manage the presets, and changes to free-form content are validated before they can be saved. Your layout applies to you only and is never committed. - New default: Standard + TerminalClaude Code takes 75% of the screen; the sidebar shows token usage, the agent observer and a terminal in your devbox session. Git, test and log tabs stay one keystroke away. Focus and Review remain available.
- Agent observer panesee which agents and subagents are working, waiting or done next to Claude Code (
nexus status --agents). The third-party AgentHUD can be chosen instead as an experimental option. - Zellij sessions named after the projectinstead of a random name, the session is called like the project (e.g.
nexus-app). Runningnexus runagain in the same project joins the open workspace. - Personal Zellij settingschoose how copying reaches your clipboard (e.g.
pbcopyon macOS), copy on select, mouse mode and a theme, or add your own keybinds. Nexus writes them to a local config thatnexus runuses for the workspace.
Improved
- Routing changes apply fasterafter a routing policy change Nexus asks the gateway to reload its policy right away. If that request fails, the gateway picks the change up with its regular poll within about 30 seconds.
- Complete tool setup
nexus pulladds Node.js to the devbox when the workspace needs it, next to zellij, lazygit and ccusage. - Cleaner project foldersClaude Code hooks always write to the project root, so no stray
.nexus/folders appear in subdirectories anymore. Agent file exports are stable, sonexus pullno longer reports changes that are not there. - Easier settings navigationSystem Settings and My Settings show the active section with a short description and a section selector.
Security
- Tighter database accessfourteen tables no longer allow signed-in users to read other tenants' rows directly. Next.js is updated to 16.3.6 for two security advisories.
Upgrade
- nexus-cli 0.28.7 or laterrun
nexus upgrade, thennexus pull. Close a running workspace beforenexus runso the new layout is used.
Consistent Executioner Switching
Fixed
- Switching between OpenCode and Claude CLI keeps agent files in synca project switched from Claude CLI to OpenCode previously came back without its OpenCode plugins, and a switch the other way kept exporting them. Every switch path (project edit form,
nexus env set executioner=...and the operator script) now applies the same rule as project creation: switching to OpenCode restores the plugin files, switching to Claude CLI removes them. Existing pins and overrides are kept, and re-running a switch repairs drift. - Preview before switching
nexus env set executioner=...reports which agent files will be assigned or removed, also in dry-run mode, and records the change in the audit trail. - No OpenCode plugins for Claude CLI projectsthe agent file export never delivers OpenCode plugin files to a Claude CLI project, even if an old assignment is left over. Saving the project form no longer drops pinned plugin versions.
Claude Code as a First-Class Runtime
Claude Code Runtime
- One agent executioner per projecta project now runs with either OpenCode (default) or Claude CLI; the "generate configs for both tools" option is removed. The backend tells
nexus runwhich tool, workspace and layout to start, so a single command opens the environment the project is configured for. - Claude Max execution modeselectable per project for users who have been granted the feature (default-deny, with a global kill switch). Nexus stores no Claude credential; Claude Code keeps the login, and cost views hide per-token money figures for this lane since there is no per-request charge.
- Claude Code hook adaptersthe session-guard, headroom-intercept, compaction-plus, routing-guard and cost-control plugins ship as bundled Claude Code hooks, so
nexus pullcan write and wire them into the project's Claude settings. - Runtime-neutral specproject, agent, directive and actor data is exported in a runtime-independent shape next to the existing OpenCode fields.
- Leaner generated agent filesAGENTS.md and CLAUDE.md now point to
directives.mdinstead of repeating every directive, and regenerating them no longer reports an update when only the timestamp changed.
Claude Code Experience (ADR-0117)
- Experience bundlesClaude CLI projects pick a profile (essential, engineering, review, test-ops), a statusline/HUD profile, a terminal workspace and plugins, with a preview of every generated file. Nexus compiles the selection into managed rules, a HUD statusline (project, branch, model, context usage, headroom; never money figures) and a managed CLAUDE.md block.
- Zellij workspace
nexus runopens Claude Code next to lazygit and a Nexus usage panel showing the current 5-hour block, burn rate and daily, weekly and monthly token totals (tokens only, no cost). Ending Claude Code ends the workspace, sonexus runprints its session summary right away. - Devbox ready out of the boxthe exported
devbox.jsonadds zellij, lazygit and ccusage when the project uses the Claude Code workspace, keeping existing pins.
Project Settings from the Terminal (ADR-0118)
nexus env get|seta new project settings API (personal access token only) exposes executioner, execution mode, Claude and Git settings as flat keys with their allowed values. Reads need project membership, writes need project manage rights.- Writes support dry-run and optimistic locking (a conflicting revision is rejected), reuse the web form's validation, are recorded in the audit log and regenerate the agent files.
Git & GitHub
- AI attribution controlClaude Code keeps
Co-Authored-Bytrailers out of commits by default; projects can opt in. - GitHub CLI profiles (ADR-0116)set a default GitHub CLI profile under Settings and override it per project. Sessions started via
nexus runuse that profile; Nexus stores a reference to your existing login, never a token. - Git & GitHub panelcommit identity, signing, GitHub CLI profile and AI attribution grouped in one panel with a status summary and inline validation shared with the API.
Team & Access
- Reworked member assignmentpick a role once (with role descriptions), then add users with one click from a searchable list. Role changes and removals ask for confirmation, and the last project admin can no longer be demoted.
- Invite, role-change and removal emails are now reliably delivered instead of occasionally being dropped after the response was sent.
Security
- Secret scanning restoredthe gitleaks configuration had silently disabled all built-in rules. Default rules are active again, and a full-history secret scan now runs in CI before every build.
- No raw error text in responsesunexpected API failures are logged and reported through a single sanitizing path, and server code uses the structured logger instead of console output.
- Tighter access checksmoving a document between projects requires write access in both; copying a project requires manage rights on the source; AI node compose routes require a platform admin or self-hosted license; skill, agent-file and workspace reads respect project membership; API keys act on the effective user during impersonation.
- Builds without an explicit environment are treated as production, and Git settings are validated server-side.
Performance
- Landing page Lighthouse score 82 → 99sessions are verified locally instead of with a round trip on every request, and static assets skip the session check entirely.
- Smaller client bundlesonly the syntax-highlighting languages in use are loaded, the edit wizard is lazy-loaded, and code generation and crypto code stay out of actor pages.
- Faster agent file exportindependent reads run in parallel and unchanged files are not rewritten: a cold export drops from 5.4 s to 2.6 s, a warm one from about 2.0 s to 1.8 s, with an identical result.
- New composite database indexes for open sessions, session entries, audit events and ingest items.
Fixed
- Pushing generated files (AGENTS.md, CLAUDE.md, Claude Code Experience files and similar) back to Nexus is refused with a hint to use
nexus env setinstead, and each target path now receives exactly one agent file. - Signing settings were dropped when name and email were empty; generated agent files showed the customer's confidentiality level instead of the stricter effective one; generated skills and commands now carry a description in Claude Code's command palette.
- License display in My Settingsevery user previously saw "Community" and was offered a demo license request even after a license was granted. Admins now see the tenant license, other users their own (demo) license, and the card shows the active license.
Security & Data-Integrity Hardening
Security
- Project re-parenting closeda project-level admin (not necessarily a platform admin) could previously reassign a project's billing customer to any customer ID, with no check that it belonged to an organization they had any relationship with. Changing a project's customer now requires platform admin, matching what the edit UI already implied.
- Standardized error handling across the AI Gateway API surfaceevery database-backed route now routes failures through a single sanitizing error path. Raw Postgres/PostgREST error text (column names, constraint names) no longer reaches API responses.
- Search-filter injection closedthe Model Discover search box built a database filter string directly from user input; it is now sanitized first.
- Compliance jurisdiction fixOpenRouter-routed models whose vendor is encoded in the model ID itself (e.g. a Moonshot or Mistral model) were misreported as United-States-jurisdiction on the compliance-facing catalog view. Vendor origin is now resolved from the model ID before falling back to the aggregator's own jurisdiction.
Fixed
- Silent data loss closed across the evidence and billing layerscredential/billing-binding rotation, project skill assignment, and evidence ingestion are now either atomic (backed by a single database transaction) or fail loudly with a real error instead of quietly discarding a write.
- Outbound request timeoutsroughly fifteen outbound calls to providers and evidence sources (OpenRouter, Anthropic, HuggingFace datasets-server, the internal Gateway) previously had no timeout at all. A single hung upstream connection can no longer block a sync job or an API request indefinitely.
- Cache-invalidation race closeda background refresh that started just before an admin mutation could occasionally repopulate the shared model-list cache with the pre-mutation value for the rest of its TTL. The cache now tracks a generation counter per key so a superseded request can never win the race.
- Assorted stuck-loading-spinner and stale-request-race fixes across the AI Gateway dashboard (Registry/Discover tabs, Routing history, Evidence panels, Provider Keys settings) where a network failure previously left a button disabled with no error shown, or a slow response for a previous selection could overwrite the current one.
Gateway Operations: Simulator, Decision Audit & Cost Reconciliation
Added
- Route Simulatordry-run any Model Profile or scenario against the live gateway policy before committing to it, then watch a live confirmation banner once the change is actually observed in production routing, not just accepted by the API.
- Route Decision audit trailevery gateway routing decision (selected deployment, fallback reason, budget state, policy version) is now a queryable, project-scoped history, visible to project members without requiring platform-admin access.
- Cost Reconciliation (platform admin)compares OpenRouter's own account usage and credit balance against Nexus's internal cost ledger side by side, to catch drift between what we track and what the provider actually bills early.
Fixed
- Stale apply confirmationapplying a new model while a previous apply's confirmation was still polling could let the older confirmation report the wrong model as live. The newest apply now always wins.
Routing Lab: Evidence-Based Model Suitability (ADR-0104)
Added
- Evidence Sources registryLiveBench, LMArena, and Nexus's own scenario fixtures now feed a shared evidence layer, each source weighted by trust and precedence rather than blindly averaged together.
- Scenario-based suitability scoringpick a workload (code review, long-context reasoning, etc.) and get a ranked recommendation with quality, cost, and latency shown as separate, honestly-labeled lenses. No fabricated single score: a dimension with no evidence is shown as missing, not as zero.
- Nexus fixture evaluationsdeterministic and LLM-judged test runs against your own configured deployments, so the evidence layer can rate models no public benchmark has heard of yet.
Fixed
- "Best quality" recommendation now reflects actually-measured quality evidence, not overall suitability (which also factors in latency): the two previously showed the same model whenever they happened to agree, silently.
- A scenario weighting an unsupported metric dimension no longer silently vanishes from the confidence calculation instead of being reported as a coverage gap.
Model Catalog Rebuild: Multi-Source Discovery (ADR-0097, ADR-0100)
Added
- Registry & Discoverthe Catalog is now two purposes, two views: Registry is the curated set of models Nexus has explicitly admitted for routing; Discover is the full raw upstream feed you pull new candidates from. One screen no longer tries to be both.
- Automated nightly catalog synca pg_cron job pulls the OpenRouter and models.dev catalogs directly into Postgres, so pricing, context-window, and alias drift is caught automatically instead of by hand.
- Catalog drift logevery upstream price, alias, or context-length change on an active deployment is now recorded before it's applied, so "why did this suddenly cost more" has an answer.
- OpenCode Zen support alongside OpenRouter as a first-class model aggregator.
Fixed
- Discover's "Clear filters" button now also clears the search box and source filter, instead of only the vendor filter.
BYOK: Provider Credentials & Project Billing Bindings (ADR-0096)
Added
- Bring your own keyadd your own OpenRouter, Anthropic, or OpenCode Zen API key under Settings → Provider Keys, encrypted at rest and non-destructively verified against the provider's own key-info endpoint before use.
- Explicit project billing bindingswhich credential a Nexus Gateway project draws from is now a first-class, audited setting, instead of being inferred from whoever happened to create the project's runtime token.
Security
- Atomic credential rotationrevoking a key and binding a new one in its place is now one all-or-nothing operation. A failed write can no longer leave a project with zero active credentials.
- Reading another project's provider-binding metadata (which credential, which billing mode) previously required only a valid session; it now requires project membership or platform admin.
AI Hardware Management & Operational Hardening
Added
- Per-node telemetry retentionconfigurable retention period per AI hardware node (default 30 days, range 1-180). Dropdown with presets plus custom input in the registration wizard and the node detail page. Expired data is pruned automatically by a daily pg_cron job running directly inside PostgreSQL, with no external scheduler dependency.
- Hardened telemetry cleanup endpointthe on-demand cleanup API accepts only platform admin sessions or a dedicated job secret. Normal API keys and node tokens are explicitly rejected so a leaked key cannot delete telemetry across all nodes.
Fixed
- AI hardware node delete failed silentlythe unlink/destroy operation could fail without any feedback. Now displays the error in a centered modal dialog and tracks failures via Sentry and the S3 error log.
- Node deletion timed out on long-running nodesnodes with months of telemetry (~330k rows) caused statement timeouts. Replaced with date-range batch deletion in 1-day windows. Also fixed a PostgREST URL length overflow from large ID-based batch queries.
Security & Data-Integrity Remediation
Security
- Devbox template IDOR closedthe devbox detail page could be read for any tenant by any authenticated user. The lookup is now scoped to the caller's tenant.
- Workspace push authorizationthe CLI ws_push action now requires a write-capable project role; read-only members can no longer replace the active workspace fork.
- Audit-event writes hardened19 routes now await their audit writes so security events can no longer be dropped by a serverless freeze after the response.
Data Integrity
- Atomic workspace pusharchive-and-replace of a workspace fork now runs in a single locked transaction, so a failure can never leave a project without an active fork.
- Extraction jobs claimed atomicallydocument extraction can no longer be double-processed by concurrent poll, SNS, and cron consumers.
- Multi-file skill resources restoredmulti-file skills now export and pull their full resource set instead of silently degrading to a single file.
Workspace Blueprint View & Script Editor Parity
Fixed
- Blueprint script editor upgraded to WorkspaceIDEthe blueprint scripts page was still rendering the legacy script editor while the fork scripts page had been upgraded to the resizable split-pane IDE (ADR-0076). Both routes now use the same WorkspaceIDE with file tree, CodeMirror editor, and file/folder CRUD.
Changed
- Workspace detail view redesignedreplaced the old linear content sections with a tabbed read-only layout: Packages (table + Scripts link card), Environment (meta variables table + post-init script), Commands (read-only code blocks). A collapsible Source toggle shows the raw devbox.json. The neutral gray palette clearly differentiates view mode from the blue-tinted edit mode.
Confidentiality Framework, Feature Flags, Audit Trail, Operational Tooling & Workspace Sync
Pre-Release Hardening
- Feature-flag entitlement bypass closedthe
user_feature_flagsaccess policy is now scoped to the service role. Previously any signed-in user could self-grant gated features, including billable Textract extraction. Verified denied with a real user session. - Audit trail integrityaudit events can no longer be forged or altered by ordinary users; inserts and updates are restricted to the service role while admin reads are preserved.
- SIEM export escapingCEF output now escapes every dynamic field and strips newlines, preventing crafted events from forging entries in a downstream SIEM.
- Fail-closed seeding and secret scanningstaging seed scripts validate the exact target before writing and require HTTPS; a gitleaks pre-commit hook blocks secrets from being committed.
CodeRabbit Review Workflow
- Review-note document typeCodeRabbit review triage summaries are stored as a dedicated
coderabbit_reviewingest-document type with its own badge, icon, and quickfilter in the project documents view. - CodeRabbit task categoryfollow-up tasks created from review findings are tagged as a distinct category, shown with a prefix icon and a “CodeRabbit” quickfilter in the task manager so review-driven work is separable from ordinary tasks.
AWS Textract Document Extraction Pipeline
- Automatic text extractionuploaded PDFs and images are processed by AWS Textract, embedded via
text-embedding-3-small, and indexed for vector search. - PostgreSQL job queueextraction_jobs table with pg_notify trigger replaces unreliable queueMicrotask. Full status lifecycle: pending, processing, completed, failed, skipped.
- Extraction inspectorslide-over panel shows extracted text in dark code view with character count, embedding model, and timestamps. Triggered by magnifying glass icon.
- Confidentiality routingclassified projects show a warning dialog before sending documents to AWS Textract, with Accept/Skip/Cancel options (ADR-0047).
File Content Search
- Full-text search across uploaded filessearches extracted_text content server-side with debounced UI. File matches surfaced as blue-highlighted cards above notes with text snippets and download links.
- Vector search integrationproject_documents added as ‘file’ entity type to MCP kb_search (keyword + semantic) via match_embeddings RPC.
- 9 file categoriesresearch, contract, specification, report, presentation, image, correspondence, template, other.
Document Management Enhancements
- Structured file upload formcategory dropdown, optional description field, matching the “Add link” pattern. Visible in empty state.
- Extraction status badgesper-document indicator with animated pulse during extraction, auto-polling every 8s.
- Optimistic UIfiles appear immediately after upload with pending status.
- Delete confirmationdestructive ConfirmDialog before file deletion, instant close on confirm.
- Tab persistenceactive tab (notes/files/links) preserved via URL hash across page refreshes.
- Zero-count dashboard widgetsgreyed out and non-clickable when count is 0.
RLS Data Visibility
- Stale JWT fixall customer, project, and dashboard pages switched from RLS-bound user client to service client. Permission validated at application level.
ADR File Import with Structure Validation
- Import ADR from file“New ADR” button now offers a dropdown with “Create ADR” (form) and “Import ADR File” (PDF, DOCX, Markdown upload).
- Automatic structure parsingfuzzy section header matching detects Title, Context, Decision, and Consequences in English and German, with subsection aggregation.
- Import Draft statusimported ADRs land in
import_draftwith all sections in an inline markdown code editor for review and editing before finalization. - Finalize confirmationwarns that after finalization the ADR enters governance workflow (submit, accept/reject only). Last chance to edit raw content.
- Rejection diagnosticsinvalid files show per-field validation (found/missing) with expandable detected structure view. Rejected files are auto-deleted.
Project Sub-Page Visibility
- Root cause fix
verifyProjectAccesshelper used RLS-bound client causing all project sub-pages (Decisions, Documents, Settings) to return 404 on staging. Switched to service client with application-level permission checks. - Decisions pageslist, detail, edit, and change-request pages all switched to service client.
Shared Upload Progress Dialog
- Unified progress overlayboth file upload (ingest-docs) and ADR import use the same
UploadProgressDialogcomponent with phased step indicators. - Shared upload library
uploadAndExtract()async generator handles S3 upload, document creation, and Textract polling in a single reusable function.
Staging Branch Automation
make stagingone-command promotion of any staging/* branch. Preflight checks, Supabase auth config via Management API, netlify.toml update, push, and deploy verification.
Confidentiality Action Gating Framework (ADR-0079)
- Extensible gating frameworkall confidentiality-sensitive user actions are evaluated against a policy table with three outcomes: allow, warn_and_override, or block. New action types can be added by registering a policy entry; no schema changes needed.
- Override dialogmedium-severity projects (Confidential, Strictly Confidential) show a reusable
ConfidentialityOverrideDialogbefore sending data to external services. Supports multi-file uploads with scrollable file list. - Automatic audit loggingevery override decision is permanently recorded with actor, IP, timestamp, file names, and confidentiality level. High-severity blocks are also logged.
- Gate check API
POST /api/confidentiality-gateresolves effective confidentiality level and returns a gate decision for client components.
Admin Audit Log
- Audit event browserfull audit log at
/dashboard/admin/audit-logwith search, severity and flag filter pills, card-based event list, and sort by date/severity/type. - Unflagged warning bannerprominent alert when unflagged events exist, clickable to filter for admin triage.
- Event detail viewstructured payload viewer, actor profile with avatar, project/customer context with logos and confidentiality shield badge, flag change timeline.
- Flag managementHeadlessUI dropdown with per-status icons (Unflagged, Acknowledged, Under Review, Resolved, Escalated). Flag changes are themselves audit events, creating a full chain of custody.
SIEM Integration & Audit Export
- External SIEM endpoint
GET /api/siem/eventswith token-based auth (nxs_siem_*prefix). Supports NDJSON (Splunk, Elastic, Datadog) and CEF (ArcSight, QRadar) formats. No session required. - Export buttoncontext menu on the audit log page for direct NDJSON or CEF download.
- SIEM token managementplatform owners can create, view, and revoke SIEM integration tokens with optional expiry. One-time token display with copy and reveal.
Platform Settings
- Management planenew
/dashboard/platformpage with tabbed layout. Security tab for SIEM token management with inline API documentation. DB Connection tab as placeholder for future database configuration.
Component Refinements
- Shared TokenManager componentreusable token management UI extracted from SIEM and PAT implementations. Create with name and expiry pills, one-time token display with copy/reveal, active list with revoke, revoked tokens section. Configurable via props, eliminating ~220 lines of code duplication.
- Tabbed user settingspersonal settings at
/dashboard/settingsreorganized into Profile, Notifications, and Access Tokens tabs matching the platform settings pattern. - Sidebar navigation“Users” group renamed to “User” with personal settings moved in (visible to all). User management and access requests remain admin-only. “Platform Settings” renamed to “Settings” under System.
- Document category dropdownnative select replaced with HeadlessUI Menu dropdown with per-category icons (Beaker, Clipboard, Chart, Envelope, etc.).
- Classification change dialogbrowser
window.confirmreplaced with NexusConfirmDialogfor project confidentiality level changes. - Error messagingproject edit page shows 403/permission info and specific DB error details instead of generic “Failed to load data”.
Editable User Profile
- Inline profile editingFull Name, Display Name, and Nickname are now editable directly in the Profile tab. Each field includes a contextual hint explaining where it is used (commit attribution, dashboard display, agent communication).
- Password changeusers authenticated via email and password can change their password in a dedicated Security section with confirm field, show/hide toggle, and minimum 8-character validation. Blocked for GitHub-authenticated accounts.
- Landing page tree pickerreplaced dual native select dropdowns with a visual navigation tree that mirrors the sidebar structure. Grouped sections with indentation, per-item icons, collapsible project sub-tree with dynamic loading, and scrollable container.
Systematic RLS Audit
- Complete RLS migrationsystematic codebase audit identified and fixed all remaining instances of
createClient().from()for data queries. Final verification confirms zero RLS-bound data queries remain. Affected: decisions detail, votes, letters page, sessions page, PAT token list, and settings page. - PAT token fixestoken revoke (“Key not found”), token list not loading after creation, and stale cache on page refresh all resolved by switching to service client and removing HTTP caching on token endpoints.
- Logo upload for pro-demo users
POST /api/logosrequired platform admin but customer creation only requires platform user. Users who could create customers could not upload logos. Permission aligned.
Environment Isolation
- Env var refactoringsplit monolithic
.env.nexus.localinto.env.shared+.env.staging+.env.production. Dropped_PROD_prefix from all S3/Textract env vars in code.make env-stage/make env-prodfor switching. - Netlify context isolationall environment-specific vars (site URL, Supabase, S3, Textract, service keys) set with context-specific values. Production and staging can no longer cross-contaminate.
- Staging CloudFront CDNdedicated CloudFront distribution for the staging S3 bucket (
d79b0ai5ewu0g.cloudfront.net). Avatars and documents on staging are served through the correct CDN.
Document Upload Drawer Refinement
- Icon-based category dropdownreplaced plain native select with a Headless UI Listbox featuring per-category icons (Research, Contract, Report, etc.).
- Cleaner form stylingremoved overly rounded inputs, increased spacing between form fields for better readability on the classify-documents drawer.
Project Wizard & Document Processing
- Uploaded file now appears immediatelyafter eager upload in the project wizard (step 3), the document is added to the file list without requiring a page refresh.
- Correct extraction statusnewly uploaded documents show “Extracted” (green) instead of “Processing” after successful text extraction.
- Faster extraction pollinginitial poll intervals reduced from 1s/1s/1.5s to 500ms/500ms/1s for quicker feedback on small documents.
Confidentiality Banner & Landing Page
- Confidentiality banner on ingest doc detailthe extraction-awareness banner now also appears on individual document detail pages.
- Project-level confidentiality resolutionbanner checks the project's own
confidentiality_levelfield before falling back to the customer level. - Duplicate banner removedfixed double-rendering of the confidentiality banner on the documents list page.
- Landing page auth placeholderremoved visible pulsing skeleton for the navbar auth button and hero CTA. Loading state is now invisible to prevent flash of incorrect UI for logged-in users.
- Shorter banner copyBYOH extension note is now inlined into the main message paragraph instead of a separate italic block.
User Feature Flag System
- Generic per-user feature flagsnew
user_feature_flagstable with trial periods, grant/revoke lifecycle, and audit trail. Managed via the users 3-dot menu (owner only). - Textract extraction gatedocument uploads check the
textract_extractionflag before queuing extraction jobs. Users without the flag get storage-only uploads. - Trial duration selectorgrant flags for 7, 14, 30, 90, or 365 days. Email notifications sent on grant and revoke.
AlphaNote Component & Dynamic Messaging
- AlphaNote componentdistinctive alpha-phase notification with violet gradient, dashed border, and Greek alpha icon. Used on actors, model routes, and pricing pages.
- Dynamic textract messagingupload dialogs, banners, and success messages adapt based on the user's textract feature flag status.
- Pricing alpha placeholderPro/Enterprise prices shown as banknote icon with €0.00, seat and plugin pricing marked as TBD.
Landing Page & Netlify Build
- Server-side auth resolutionlanding page navbar and hero CTA now resolve auth server-side, eliminating the loading flash for logged-in users.
- Netlify postbuild fixadded missing
.bodyplaceholder artifact for prerendered API routes that caused build failures. - Users table 3-dot menufixed overflow clipping with portal-based dropdown positioning.
Operational Tooling & Deploy Pipeline
- Makefile deploy pipeline
make deploy(staging) andmake deploy-prodrun db-push, build, and Netlify CLI deploy with deploy messages. - S3 error log inspection
make logs,logs-tail,logs-list,s3-ls,s3-sizewith env-aware AWS credential bridge. - Sentry environment + releaseall errors tagged with staging/production environment and commit SHA for release correlation.
- Resend staging safety
safeSend()wrapper prefixes subjects with [STAGING] and blocks emails to non-allowlisted recipients. - Centralized error loggingall 31 API routes migrated from
console.errorto structuredlogError/logWarn. - createClient migrationall data queries moved to
createServiceClient(), eliminating stale JWT failures.
Workspace Sync & Staging Fixtures
- Workspace push API
ws_pushMCP action creates a new workspace fork from pushed devbox.json and scripts. Archives the previous active fork. - File status API
af_statusMCP action compares local file hashes against server content hashes for workspace, agent files, and skills. - Staging fixture system
make seedcreates test users, project directives, skills, workspace baselines, demo customer/project, and uploads SVG logos. - Ingest document favoritesgeneric
user_favoritestable, star button per document, starred quickfilter pill in the notes tab. - Tenant managementGeneral tab in Platform Settings with tenant name and slug editor. Supports selfhosted rebranding.
Workspace Management Redesign, Tabbed Editor, Script IDE & Directive Governance
Tabbed Fork Edit View (ADR-0077)
- Three-tab layoutFork editing split into Packages, Environment, and Commands tabs. Each concern gets its own focused editing surface.
- Package table viewNix packages shown as inline-editable rows (name + version). Toggle between table and raw JSON source view. Bidirectional sync.
- Commands tabShell commands from
devbox.json shell.scriptsrendered as named, editable command blocks withdevbox runhints.
WorkspaceIDE Script Editor (ADR-0076)
- IDE-like file editorResizable split-pane layout with hierarchical file tree (left) and CodeMirror editor (right). Lock icons for protected bootstrap files.
- File operationsCreate, rename, delete, and clone files. Create and manage folders. Dirty-state tracking per file with global save.
- workspace-manager.tsx decomposedMonolithic 1,342-line component split into ForkEditForm, SyncDialog, and AssignModal. Main file reduced by 50%.
Unified Rendering Pipeline (ADR-0072)
- Three renderers extractedOpenCode config, actor profiles, and workspace scripts moved from inline af_export to dedicated library modules. Route reduced from 1,770 to 1,279 lines.
- Script editors unifiedBlueprint and fork editors consolidated into a shared component, reducing 1,106 lines to 655.
Directive Governance
- Global directive baseline8 core directives (English-only, session tracking, no secrets, no em-dashes, metadata, ADR policy, KB usage, project fields) distributed to all 24 projects.
- Directive auditRedundant and overlapping session directives merged. Project-specific directives isolated from global set.
UI Polish
- Workspace fork status“Archived” renamed to “inactive” for clearer semantics. Counter shows only active forks.
- Edit view declutteredShadow mode info condensed, edit mode banner simplified, devbox.json info replaced with inline doc links.
Workspace & Compose
- Empty script_files backfill7 active workspace forks had missing init scripts. Auto-generate defaults now applied at export and in the editor.
- Compose log fetchFixed infinite spinner caused by browser caching on the command poll endpoint.
- Context menu overflowIngest-doc context menu no longer clips at list boundaries (portaled via HeadlessUI anchor).
- ADR renderingFixed escaped newlines in 149 decisions that prevented proper markdown rendering (lists, paragraphs, code blocks).
Document Management
- Move document to projectNew context menu action to move an ingest document to any project you have access to. Includes project search dialog with confirmation.
- Starred projects quick-navFavorite projects shown as submenu in the landing-page “Your Nexus” dropdown for direct navigation.
- Agent files tabsAgent file manager split into Project, Platform, and All tabs for clearer separation.
- Unified confirmation dialogsAll destructive actions (delete, move) now use a consistent Nexus modal instead of browser-native confirm().
Personal Address, Post-Mortem Skill, Workspace Refactoring & Security Hardening
Personal Agent-to-User Address
- Nickname supportAgents address users by their preferred name (nickname or first name) in conversation. Profiles now support a
nicknamefield with automatic first-name fallback fromdisplay_name. - CURRENT USER blockAuto-generated agent files now include a user-specific section with the address name, populated from the authenticated user's profile during
nexus pull. - Per-project opt-inControlled via the “Personal address enabled” project directive (communication category). Disable per-project if not wanted.
Post-Mortem Skill (nx-post-mortem)
- Blameless incident post-mortemsNew baseline skill generates structured post-mortem documents from git history, Nexus KB, and operational artifacts. Google SRE-style template with timeline, root cause analysis, and action items.
- Auto task creationAction items from the post-mortem are automatically created as Nexus tasks with priority mapping.
- Dispatch integrationEvidence gathering searches Dispatch inbox/outbox for related incidents and links them in the appendix.
Workspace Rendering Refactoring (ADR-0072)
- OpenCode config rendererExtracted into dedicated
src/lib/opencode-config-renderer.tsmodule. Actor-to-agent adapter, primary agent tabs, MCP servers, and model route resolution are now isolated and testable. - Actor profile rendererExtracted into
src/lib/actor-profile-markdown.ts. Single source of truth for actor profile markdown generation from raw DB data. - Version stampDevBox init scripts now include the nexus-app version and commit hash as a banner comment.
- Route reduction
af_exportreduced from 1,770 to 1,279 lines (−27.7%).
Compose Log Fetch & UI Polish
- Cache-Control fixCommand poll endpoint no longer caches responses, fixing the “Fetching from device” infinite spinner in the Compose Tab.
- Log panel repositionedLogs panel moved above the compose editor for better visibility.
- OneDark theme alignmentLog viewer colors and font now match the CodeMirror compose editor.
OWASP Audit & Hardening
- DOMPurify XSS patchedUpgraded DOMPurify to fix IN_PLACE hook removal vulnerability (GHSA-55q2-fjhq-7xh7).
- Error detail leak removedPDF export API no longer returns internal error messages to clients. Details stay in S3/Sentry logs only.
Adaptive Command Polling, Compose Caching & PG Wake-Up
Adaptive Device Polling
- X-Poll-Interval headerThe command-pending endpoint now returns a polling hint to the device. Idle nodes poll every 30s instead of 5s, active nodes burst to 2s for responsiveness.
- ~85% noise reductionNetlify function invocations for idle hardware nodes drop from ~720/hr to ~120/hr per node.
PostgreSQL LISTEN/NOTIFY Wake-Up
- Instant command deliveryA database trigger fires
pg_notifyon every new command, waking the device within ~50ms instead of waiting for the next poll cycle. - Universal deploymentWorks identically in Supabase Cloud (SaaS) and self-hosted environments (CNPG/Kubernetes) with no mode variables or feature flags.
- Layered reliabilityPG notification is the fast path; HTTP polling remains as a guaranteed fallback if the connection drops.
Compose Content Caching
- Instant compose displayThe AI Hardware dashboard now shows the last known compose file immediately from cache, eliminating the 5-7s round-trip wait on page load.
- Explicit refreshA “Refresh from device” button triggers a live fetch when the user needs the latest version.
- Auto-cache on writeCompose content is cached automatically whenever a get_file or put_file command completes successfully.
Database
- Migration 0157Adds
compose_content_cached,compose_path_cached, andcompose_cached_atcolumns toai_nodes. - Migration 0158Adds
pg_notifytrigger onnode_compose_commandsfor instant device wake-up viaLISTEN/NOTIFY.
Source/Preview Toggle, Security Fixes & License Management
Source/Preview Toggle
- View mode switchNew segmented Source/Preview toggle in the ingest document detail page actions bar. Switch between rendered markdown and raw source view without entering edit mode.
- Read-only source viewSource mode renders document content in a read-only CodeMirror editor with syntax highlighting.
- Always visibleToggle and download menu are now visible to all users, not gated behind edit permissions.
PR Draft Classification
- New classification typeAdded
pr_draftclassification for ingest documents. Indigo badge color, available in the reclassify dropdown.
Team Member Invitations
- Invite email on project editAdding team members via the project edit wizard now sends invite emails on save. Previously only the direct team widget triggered notifications.
- Compact member selectorWizard members step refactored to use the same compact dropdown pattern as the team widget (user select + role + add button).
- Owner rowProject creator is always shown as first entry in the members list with a fixed “Admin (owner)” badge.
License Management
- Expired license reactivationExtending a license from an expired state now correctly reactivates it. Previously the extend query only matched active licenses, leaving expired ones unchanged.
- Custom expiry dateAdmin license extension now respects the date picker selection instead of always adding a hardcoded 30-day extension.
Platform User Permissions
- Customer creationFixed “Default tenant not found” error when
platform_useraccounts tried to create customers. Tenant lookup now uses the service client to bypass RLS. - New Customer buttonButton was incorrectly hidden for
platform_useraccounts (only shown to admins). Now visible to all users with customer management permissions. - Missing user profilesSome users had no profile row after signup (DB trigger didn't fire). Auth callback now auto-creates profile on login as safety net and generates a DiceBear
bottts-neutralavatar if missing.
Dependency & Code Fixes
- 0 npm audit vulnerabilitiesResolved all dependency CVEs: fast-uri, js-yaml, postcss, undici, sharp (upgraded to 0.35.3). Added overrides for Next.js nested deps.
- Path traversal guardDocument download route now rejects keys containing
..sequences to prevent directory traversal. - Backend classification fixAdded
review_paperandpr_draftto the API validation allow-list for document classification.
Auto-Avatar Generation
- DiceBear bottts-neutralUsers without an avatar automatically receive a deterministic bot-style SVG avatar, cached in S3/CDN. Triggers on login or via admin batch endpoint.
- Unified styleAll auto-generated avatars (user and actor) now use the
bottts-neutralstyle consistently. Legacythumbsfallback removed.
Dispatch & Agent Routing
- Actor suffix matchDispatch routing now supports partial agent name resolution via suffix matching. Sending to “nexus-mcp-agent” correctly resolves even when the registered name has a prefix (e.g. “rf-nexus-mcp-agent”).
- Agent naming standardizedAll Nexus project agents renamed to
nexus-<context>-agentconvention. Dispatch skills assigned to all active projects.
Dashboard ADR Browser, Task Links & Search Improvements
Dashboard ADR Section
- Your last ADRsNew dashboard section showing the 50 most recently updated architecture decisions across all accessible projects. Each entry displays ADR number, title, project name, last updated date, and status badge.
- Search & status filterSearchBar filters by title, project name, or ADR number. Status filter pills (Draft/Under Review/Accepted/Rejected/Superseded/Archived) with counts per status.
- New tab linksAll ADR entries open their detail page in a new browser tab.
Project Decisions Search
- Search barAdded instant client-side search to the project-level decisions list, filtering by title, ADR number, or tag.
Improvements
- Task detail linksDashboard “Open Tasks” titles now link directly to the task detail page, opening in a new tab.
- Customers headingRenamed from “Customers” to “Your Customers” for consistency with other dashboard sections.
Time Investment, Task Management, Devbox Templates, PDF Export & Performance
Project Time Investment
- Time Investment widgetNew memory section card on the project detail page showing total tracked operative time with link to a dedicated detail page.
- Time detail pageKPI breakdown with velocity (tasks/hour), cost per hour, decision throughput per week, contributor time distribution bars, and a recent sessions table with durations.
- Strategic KPIs sectionCost Control, Tokens & Stats, and Time Investment separated into a dedicated section below the operational Project Memory grid.
Task Management Overhaul
- Search inputInstant client-side filter over title and description, matching the documents page search pattern (rounded-2xl, shadow-xs).
- Multi-select & bulk actionsCheckboxes per row, select all, batch status change, batch assign, and batch delete via action bar.
- Quick-filter pillsAll/open/in progress/blocked/unassigned with counts. Click toggles filter, “All” resets. Consistent with documents classification UI.
- Context notificationsAmber warning for 5+ open tasks, blue info for 3+ unassigned tasks. Click to filter.
- Assignee avatarsColumn shows avatar + first name with dropdown for reassignment.
Devbox Workspace Templates
- SecOps / Hacking Lab (
dbx-secops-hacking)nuclei, mitmproxy, ffuf, semgrep, trivy, trufflehog, Python, Rust, Nushell, opentofu, ansible. - Python DevTools (
dbx-python-dev)Python 3.13, poetry, ruff, mypy, pytest, IPython, Nushell. - Rust DevTools (
dbx-rust-dev)cargo-nextest, bacon, cargo-watch, mold, sccache, Nushell. - Golang DevTools (
dbx-golang-dev)Go 1.23, golangci-lint, delve, air, ko, buf, goreleaser, Nushell. - Template searchInstant search across name, description, packages, and scripts. Workspace assign modal redesigned with search and card layout.
Decision comments in exports
- PDF and Markdown exports now include all decision comments with author name, date, agent badge, and formatted body text.
Performance & Fixes
- Lighthouse 92 → 99Dynamic imports for 4 large client components, cache headers on API routes, root loading boundary, white-page flash fix.
- PDF exportFull Unicode font for box-drawing chars, emoji stripping, arrow/symbol ASCII fallbacks, whitespace preservation in code blocks.
- Actor avatarsFixed DiceBear domain in next/image remote patterns.
- Session timelineNext entry point now uses dark terminal-style callout for better readability. Session duration shown in list metadata.
Why Nexus Page, Design System, Security Hardening, FAQ Clarity
/why-nexus product story page
- 11-section editorial pageProblem cards, Without/With comparison, capability grid (BYOH 2-col span), 6-step signature workflow, curated use cases, audience segments, gradual adoption, trust cards, FAQ gateway, and final CTA.
- Landing-page design languageAlternating surfaces, eyebrows, promotion panels, and asymmetric grids. Full dark mode support.
- Route separation/why-nexus persuades and orients. /faq answers and verifies. Landing page “Why Nexus?” CTA now points to /why-nexus.
Living Design System and internal docs
- /dashboard/design-systemInteractive playground with StatusBadge (46 statuses), InfoPanel variants, MetricCounters, format utilities, token swatches, and status color map. Admin-only.
- /dashboard/docsInternal docs hub reusing public DocsTabContent with quick links to Design System, public docs, and API reference. Admin-only.
- Token lint
npm run lint:tokensflags raw dark-mode gray/zinc/slate classes. Enforces ADR-0062 design token usage.
Landing page grid balance
- BYOH promotion cardSpans 2 columns with Private AI Control Plane eyebrow, internal grid layout, and 6-point capability list.
- Content refinementDispatch copy differentiated per occurrence, Actor card strengthened, How It Works refined, Tooling reframed as gradual adoption.
- Footer spacingCompany, version, and attribution properly separated.
FAQ restructured for product clarity
- Team Governance section5 new FAQ items (RBAC, ADR voting, delegated identity, notifications, permissions). Notifications merged in.
- Depth labels and reorderCategory badges on every section. Actors and Dispatch before technical reference.
- Pricing centralizedHardcoded values replaced with TIER_DEFINITIONS imports. Technical answers shortened with docs links.
Component consolidation and dark mode
- StatusBadgeAll 46 status entries now include dark mode classes. 6 local duplicates removed. New statuses: suspended, expired, running, stopped, error, deploying, pending.
- InfoPanel variantsShared banner component supports info, warning, error, and success with full dark mode. 8 inline banners replaced.
- formatNumber/formatCurrencyCentralized number formatting utilities. 26 inline .toLocaleString() calls and 2 formatTokens duplicates consolidated.
Security hardening
- Response headersX-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy, and X-DNS-Prefetch-Control added to all routes.
- Sentry test endpoint removedUnprotected /api/sentry-test route deleted.
- Dependency fixesnpm audit resolved brace-expansion, fast-uri, immutable, and js-yaml (4 high-severity advisories).
SEO and build stability
- noindex regressionNext.js 16 injected noindex on ISR pages. Identified NODE_ENV root cause. patch-package moved to dependencies for build resilience.
Performance & Caching Overhaul, Dark Mode Polish
Performance
- ISR for public pages10 static pages switched from force-dynamic to hourly ISR. CDN-cached responses eliminate 1000ms+ cold-start TTFB.
- Critical CSS inliningExperimental inlineCss eliminates the render-blocking stylesheet fetch, reducing LCP by ~150ms.
- Cache-Control on 68 API routesAll read-only GET endpoints now return private cache headers (60s fresh, 5min stale-while-revalidate).
- next/image migration26 files migrated from raw <img> to next/image for automatic lazy-loading, responsive sizing, and WebP delivery.
- N+1 and waterfall fixesBatched embedding queries in MCP import route. Eliminated nested await in customer detail Promise.all.
Auto-Mitigation Reports & Config Audit
- Automatic generationSession notes with mitigation keywords (commit, fix, patch, resolve) trigger automatic creation of mitigation_report child documents for unmitigated scan reports from the last 7 days.
- Config change audit trailProject settings, links, directives, and agent config changes (plugins, RTK codebase presets, spark models) are tracked as expandable orange timeline cards in all open sessions. Only actual diffs are logged.
- Custom Sentry tunnelReplaced built-in tunnelRoute with edge proxy that never returns errors. Fixes Lighthouse Best Practices on all hosts.
- Nexus control menuAuthenticated users see a “Your Nexus, {name}” pill button in the public navbar that opens a dropdown with Dashboard, Settings, Dark Mode toggle, and Sign out. Replaces the separate Dashboard link and avatar for a cleaner main navigation.
- ISR re-enabledAll public pages switched back to ISR (revalidate: 3600) now that auth state is resolved entirely client-side via Supabase SDK. CDN-cached responses eliminate cold-start TTFB.
- CLS fixFixed-width containers for navbar auth area and hero CTA prevent layout shift during auth state transitions (0.584 → <0.1).
Auth, Agent Config & Dark Mode
- Supabase session refreshMiddleware now refreshes expired auth tokens on every request. Fixes silent logout after token expiry (~1h).
- Auth state on public pagesReplaced server-side /api/auth/me fetch with Supabase client SDK (getSession + onAuthStateChange). Fixes stale auth state after page refresh caused by httpOnly cookies and cached API responses.
- PKCE redirectOAuth code landing on root URL now redirected to /auth/callback via middleware.
- Agent config mergeProject edit no longer overwrites existing agent config keys (RTK presets, spark models, MCP servers). Values are now merged with the existing config instead of replaced.
- Session timelineFull dark mode for all entry types, badges, cost cards, scan cards, compaction blocks, and metadata bars (~95 class strings).
- Markdown renderingprose-invert with explicit dark variants for headings, paragraphs, links, tables, blockquotes, and inline code.
- ADR & document viewsCards, classification badges, section headers, checkboxes, row separators, and dialogs.
- Native checkboxesGlobal color-scheme: dark + accent-color rule for proper dark rendering without Tailwind Forms plugin.
Error Handling
- Unified apiError()All 42 API routes now use a single error wrapper that logs to S3 + Sentry with auto-detected route context. Removed ~40 redundant console.error calls.
Sentry Integration, Mitigation Reports & Dashboard Polish
Sentry Error Monitoring
- Full Sentry SDK@sentry/nextjs integrated across browser, Node, and Edge runtimes. Error monitoring, distributed tracing, and session replay (dashboard only). Source map upload via withSentryConfig. Tunnel route at /monitoring for ad-blocker bypass.
- Error boundariesAll error boundaries (root, project, global) now forward exceptions to Sentry. Server-side errors logged to both S3 and Sentry.
Mitigation Reports
- Parent-child documentsIngest items now support a parent_id relationship (max 1 level). Scan reports can have linked mitigation child documents.
- New classification“mitigation_report” type (teal badge) for documenting scan finding resolutions. Available across UI, API, and MCP endpoints.
- Document detailScan reports show a “Mitigations” subsection. Mitigation reports show a parent report link.
- Tree view in documents listScan reports with mitigations show an expand/collapse chevron. Children render as indented sub-rows with a visual connector and teal classification badge.
Session Timeline Filters
- Filter tabsTimeline entries filterable by type (All, Notes, Cost, ADRs, Tasks, Dispatch, Scans). Tabs positioned above the session start panel.
- Project Improvement Scanner“Improve” CTA on Project Intelligence card with 8 scan categories. Coming in v0.12.0.
- Config change audit trailNew config_change entry type that automatically logs project configuration changes (skill assignments, directives) to the active session timeline with diff details.
Dashboard Polish
- Intelligence cardsProject, Actor, and Customer intelligence cards redesigned from dark to subtle gradient light-mode with dark mode tokens.
- Meta pill badgesUnified rounded-md bg-gray-100 badge pattern applied across session list, project cards (grid + list), actor footers, and nav card sub-counts. Dark mode support included.
- Session list footerEntry breakdown with icon badges (notes, scans, cost, compactions, ADRs, docs, tokens, cache %).
- Session start rowEnriched with agent mode, skills count, repository URL, model badge, machine badge, and multi-project flag.
- Section title badgesADR and document section titles use black badge styling (Context/Decision/Consequences, Content/Version History).
- ADR listSuperseded/rejected titles show strikethrough. Info banners for draft/review ADRs and unclassified docs are now clickable filter links.
- License viewRemoved dummy sub-licenses. AI Hardware Compose Specs merged into AI Hardware page as subsection.
- PerformanceWatermark SVG inlined (LCP fix), queries parallelized on projects page, Sentry Replay lazy-loaded on dashboard only.
OpenCode-First Positioning & Public Content Refresh
OpenCode-First Positioning
- Project wizardAI Tool selection renamed from “CLI flavor”. OpenCode now shows a “Recommended” badge. Claude CLI upgraded from “Limited support” (blue) to “Experimental” (amber) with updated dialog copy referencing the Alpha status and Beta roadmap. “Both” option styled in amber to signal experimental nature.
- RoadmapClaude CLI full support (promoted from experimental) added as a milestone item in the v1.0.0-beta release.
Public Content
- Why Nexus / FAQUpdated to current state: four tools listed (Nexus App, nexus-cli, nexus-mcp, nexus-link), nexus-oc-plugins mentioned, MCP tool count updated to 60+. Enterprise de-emphasized; open-core self-hosted prominently featured.
- Landing page“nexus run” appears in How It Works steps. Tool cards updated to nexus-cli first, nexus-mcp auto-configured second. MCP tool count updated to 60+.
Table Normalization & Shared Component Library
Shared DataTable Component
- DataTableCanonical table component with header, rows, hover, selected, and expandable states. Built-in dark mode tokens. Replaces inline table implementations across 27+ files.
- First migrationsCross-project Decisions, Sessions, and Dispatches pages now use DataTable. Consistent separators, headers, and hover states.
Shared Component Library
- CardGridDual-mode grid/list renderer with integrated ViewToggle. Single component replaces 7 separate implementations.
- StatusBadge / TaxonomyBadge / CapabilityBadgeBadge components replacing 12+ inline badge definitions. TaxonomyBadge uses dark navy chips instead of white pills.
- MetricCountersCompact counter boxes for customer and project cards.
- InfoPanelShared informational banner replacing page-specific blue panels. Neutral body text for dark-mode readability.
- formatTokenCount / formatCostShared formatting utilities consolidating 3 duplicate implementations.
Table Audit
- 52 table/list implementations audited across the entire dashboard: 27 using <table> elements, 25 using div-based lists. Normalization reduces this to 3 canonical patterns: DataTable, CardGrid, TimelineList.
Dark Mode, User Preferences, Document Versioning & Customer Refinement
User UI Preferences (ADR-0061)
- Server-side persistenceView mode preferences (grid/list), theme, and presentation mode are now stored in the database and sync across devices. No more lost preferences when switching browsers.
- Two-tier architecturelocalStorage for instant rendering (zero flash), debounced DB sync (500ms) for cross-device persistence.
Document Versioning
- Version historyBoth ingest documents and ADRs now track content versions. Every edit creates an immutable snapshot with change summary, visible in a version history table.
- Download menu“Export PDF” replaced with a context menu offering PDF, Markdown, or both formats.
- Notification barsOverview pages show warnings for unclassified documents and pending-review ADRs.
NEXUS Dark Mode Color System (ADR-0062)
- Token-based architectureComplete dark mode color system with semantic CSS variables and Tailwind v4 @theme registration. Six-level surface hierarchy, four-level text hierarchy, indigo accent palette, and dedicated semantic status tokens (success/warning/danger/info).
- Reusable component classes
nexus-panel,nexus-button-primary,nexus-button-secondary,nexus-input,nexus-link, pre-styled for both light and dark modes. - Sidebar active stateQuiet style with subtle accent tint and accent-colored text instead of a solid indigo block. Reduces visual noise in dense navigation.
- Dashboard navbarTranslucent secondary background with backdrop-blur, matching the design spec's layered surface approach.
- LogoSelectively inverted (dashboard only), public pages keep the dark logo.
Customer & Project Cards Redesign
- Customer cards3-zone layout with 5 metric counters (Projects, Sessions, Docs, ADRs, Dispatches). Scope & Type panel replaces toggle switches.
- Project cards4 metric counters with confidentiality shield. Dashboard view toggle (grid/list) for both projects and customers.
Cost Control
- Savings metricReplaced misleading 100% cache hit rate with cost-based savings using Anthropic reference pricing (~56–87% per project).
- Widget fixCost Control nav tab no longer shows “0”.
- Panel restructuredHeadroom stats first, RTK filter specs second, token summary third, settings last.
Cross-Project Knowledge Browser & Coordination Dashboard
Cross-Project Decision Browser
- /dashboard/decisionsBrowse all ADRs across your projects in one place. Filterable by status (accepted, under review, draft, rejected, superseded). Inline hybrid vector search (semantic + keyword) via the existing embedding infrastructure.
- API: GET /api/decisionsCross-project listing endpoint, RLS-scoped to the authenticated user's project memberships. Supports status filtering and pagination.
Cross-Project Session Timeline
- /dashboard/sessionsView all agent work sessions across projects. Filterable by status (open/closed). Inline hybrid vector search over session entries surfaces relevant past work regardless of which project it occurred in.
- API: GET /api/sessionsCross-project session listing, ordered by last activity. Includes project context for each session.
Cross-Project Dispatch Overview
- /dashboard/dispatchesGlobal coordination view showing all dispatches routed between your projects. Filterable by status, priority, and type. Shows source→target project routing and blocking indicators.
- API: GET /api/dispatchesLists dispatches where the user has access to either the source or target project. Enriched with project names.
Sidebar Restructured
- Knowledge sectionNow contains Search (Beta), Decisions, Sessions, Ingest (soon), Research (soon). Sessions moved here from Coordination, as they are execution history and belong under knowledge artifacts.
- Coordination sectionNow contains Dispatches and Cross-Project (soon). Focused exclusively on inter-project communication and routing.
Headroom Integration, Cost Control Panel & Named Workspace Forks
Headroom Integration Complete
- nexus-headroom-intercept v0.5.972 compression policies, transform mode active by default. Policy-based context compression (no LLM calls) with deterministic token reduction up to 99% on large MCP tool responses.
- Headroom config in project UImode, preflight, retrieval limits configurable per project via the Agent section. Synced to
.nexus/envvianexus pull. - Preflight API
/api/mcp/projects/:id/preflightvalidates headroom enablement before plugin activation. Aggregates plugins across all project agents. - Headroom enabled for all projectsmigration backfills best-practice defaults (transform mode, preflight required, full retrieval off).
Cost Control Panel
- Headroom stats panelreplaces placeholder with config badges (mode, preflight, retrieval limits) and aggregate cache read/write/savings metrics.
- Token usage summarytotal tokens, estimated cost, and cache savings percentage across tracked sessions.
Named Workspace Forks
- Custom fork namesworkspace forks can now be named independently from the blueprint. Settable at creation time (Assign Modal) and editable afterwards (Fork Edit form).
Actor-Based Mode Experimental
- Experimental badgeActor-based agent mode is marked as alpha with a clickable info dialog explaining limitations and status. Shown in project detail, new/edit form, and actors widget.
MCP Server Deduplication
- Headroom dedupduplicate
headroom/nexus-headroomentries in the Tooling widget collapsed to a single “Nexus Headroom” badge.
Headroom Intercept v0.5.6: Output Contract & Debug Logging
headroom-intercept v0.5.6
- Output contractheader/untrusted/retrieval separation, lower retrieval caps, retrieved data envelope, callback ordering fix.
- Debug logging
HEADROOM_DEBUGverbose trace for integration testing, cache read events, mode in truncation metric.
Headroom Intercept v0.5.5: Trust Boundary & Metrics
headroom-intercept v0.5.5
- Trust boundarydelimiter escaping, footer outside budget, line-boundary truncation, MAX_COMPACT_BUDGET rename.
- Operational metrics
cache_integrity_failed,full_retrieval_denied,output_budget_truncatedcounters.
Headroom Intercept v0.5.4: Cache Integrity & LLM Safety
headroom-intercept v0.5.4
- Cache integritycontent SHA-256 check on disk hydration,
HEADROOM_ALLOW_FULL_RETRIEVALgate. - LLM safetyprompt-injection trust envelope, hard output budgets.
Headroom Intercept v0.5.3: Cache Lifecycle & Preflight
headroom-intercept v0.5.3
- 3-phase cache evictionexpire, count-trim, oldest-byte-trim. In-memory TTL, SDK major cap,
HEADROOM_REQUIRE_PREFLIGHTflag. - Safetyunique tmp names, NaN/Infinity guard, unknown-namespace transform downgrade.
Headroom Intercept v0.5.2: SDK Guard & Atomic Writes
headroom-intercept v0.5.2
- SDK guardreads installed version from
node_modules. Atomic cache writes viawriteFileSync(tmp) + renameSync. - Project-namespaced cache
.nexus/headroom-cache/<projectId>/.
PDF Export
- Font fixespin fontsource CDN versions, register IBM Plex Mono italic variant, structured error handling.
Headroom Intercept v0.5.1: Retrieval Hardening
headroom-intercept v0.5.1
- Retrieval input hardening
max_lines/max_charsclamped to hard limits, hash input validated as 64-char hex before filesystem access.
Headroom Intercept v0.5.0: Release Correctness
headroom-intercept v0.5.0
- Correctness fixeserror responses pass through,
store.set()moved after no-gain guard, TTL enforced at read time, eviction fixed to keep newest entries. - Bounded retrieval defaults
max_lines=100,max_chars=12000,allow_full=false. Zero-match returns metadata, not full original.
Headroom Intercept v0.4.0: Production Hardening
headroom-intercept v0.4.0
- 7 critical/high findings addressed from code-level architecture assessment: safe default mode (observe), full MCP result shape support, retrieval bridge, negative-savings guard, SDK version guard, disk cache hardening, structured JSONL logging.
- Policy additions37 compression policies, write-operation passthroughs, relevance sorting for tasks/dispatches/search results.
MCP Compression
- Plugin now handles raw
CallToolResultMCP shapes (was silently skipping). Retrieval bridge closes the CCR gap between plugin cache and Headroom MCP server.
Email Features, Project Detail Redesign & RTK Fixes
Email Management
- Send direct email to users from the management page. Header branding aligned with Supabase auth templates.
Project Detail Redesign
- 4-column config gridvisibility, tags, runtime, and skills merged into a compact Project Setup widget with sub-category titles.
- Actor UI improvements3-way dropdown split, primary slots in project widget, avatar sorting, persona cards, structured profiles.
- Classic-mode 2-box layout with single-agent hint. Configuration panel collapsed by default.
RTK & Cost Control
- RTKskip native Rust module filters in TOML generation. Headroom triggers sharpened, lazy skill loading in agent config.
- Session timelinecost-control plugin entries now update in-place instead of accumulating (92% noise reduction).
Ingest Documents & Landing
- Ingest doc: HeadlessUI dialog replaces browser confirm, metadata panel flattened, title/action bar separation. Static landing page for performance.
Task MCP Extensions
- task_update supports title/description changes,task_delete for cleanup, task_note fix. nexus-mcp references updated to v0.10.1.
Nexus Actors: Virtual Team Members, Model Routing & Dark Mode
Nexus Actor System
- First-class virtual team members with reusable role profiles, model routing, permission boundaries, DiceBear avatars, and operational workflow instructions (ADR-0053, ADR-0054).
- 11 seed actors7 system templates (Fullstack, Backend, Frontend, Data/DB, Platform, QA, Documentation, Spring Boot) + 3 personalized (Yuri Andropov, Max Well, Marina Meaning) + 1 promoted (Dan Data).
- Actor Management UIList (Named/Templates split with avatar differentiation), detail (dark Runtime Profile capability card), edit (tabbed markdown sections with per-section source/preview).
- Actor promotionDuplicate a generic template into a personalized workspace actor with custom name, unique avatar, enhanced capabilities, and vita/backstory.
Model Route Catalog
- 28 model routes across 5 provider groups (GitHub Copilot, Local/DGX Spark, OpenCode Zen, Direct BYOK, Free/Demo) with lifecycle metadata (active, experimental, deprecated, retired).
- Route alias resolutionactors reference stable aliases instead of volatile provider model IDs. Resolved at export time from the
model_routescatalog. - Admin page (
/dashboard/model-routes)CRUD with inline edit, icon-prefixed dropdowns, search filter, lifecycle management.
Dark Mode
- Class-based dark mode with ThemeProvider, localStorage persistence, and user menu toggle. Dashboard layout, navbar, sidebar, and footer styled.
Generated Files & Export
- Actor profiles in nexus pull
.nexus/actors/*.mdwith YAML frontmatter + operational body sections (When Invoked, Context Assessment, Operating Workflow, Quality Checklist, Return Contract). - OpenCode adapter
opencode_agentsfield in af_export with route resolution, permission mapping, prompt file references. - Scan skillsRecommended Actor sections with
@actor-slugreferences for intelligent Dispatch routing.
Platform Improvements
- Session timeline cleanup
cost_snapshotentry type + server-side dedup guard (92% noise reduction). - Customer Statistics CardDark capability-card-style metrics panel in customer detail view.
- CodeMirror line wrappingFixes horizontal overflow in all markdown editor views.
- Actors FAQ9 common questions about the Actor System.
Documentation Site, Grill Me & Dispatch Skills
Nexus Docs Site
- Dedicated documentation sitedocs.nexus.gatewarden.eu: MDX-based content, FlexSearch full-text search, dark mode, sidebar navigation with scroll-spy. Built on the tailwind-plus-protocol template, deployed as a separate Netlify site.
Grill Me & Dispatch
- Grill Me (
/nexus-grill-me)Upstream-preserving wrapper of the popular mattpocock/skillsgrill-meskill. Adds Nexus context resolution, depth control (quick/standard/deep/exhaustive), output routing to ADRs and Dispatches, loop guard, and anti-pattern documentation. - Dispatch Sweep (
/nexus-dispatch-sweep)Replaces/nexus-vl-sweep. Prioritized inbox processing viadispatch_sweepwith typed action table for all 8 dispatch types. - Dispatch Create (
/nexus-dispatch)Structured dispatch creation with duplicate check, type guide, and output confirmation.
Document Management
- Email & chat message classificationTwo new ingest document types with per-classification icons across the docs list.
- Row context menuHamburger menu on every document row for instant reclassification without opening the detail page.
- Tasks & Skills managersInline
<select>dropdowns replaced with styled Menu dropdowns (consistent with userlist).
Actor Registry & Workspace
- Actor auto-seedNew projects automatically get a
<slug>-agententry inproject_agents, enablingto_actordispatch routing without manual setup. - RUSTFLAGS mold removedWorkspace blueprint fix:
RUSTFLAGS=-C link-arg=-fuse-ld=moldremoved from Rust and nexus-dev flavors, blueprint, and active forks. macOS Cargo builds no longer fail.
Nexus Dispatch: Structured Work Routing for Agents
Nexus Dispatch
- Vault Letters promoted to Nexus DispatchDispatches are the canonical product concept for Nexus-native routed agent work. Individual records are called Dispatches. Legacy
vl_*MCP tools remain as compatibility aliases. - 9-status lifecycle with enforced transitions
open→acknowledged→in_progress→needs_review→resolved→closed. Pluswaiting_for_requester,blocked, andcancelled. Status machine enforces allowed transitions. - 8 Dispatch types
question,bug_report,implementation_request,review_request,decision_notice,blocker,status_update,handover. - Routing fix
source_project_id(sender) vstarget_project_id(recipient) are now explicit and enforced. Cross-project Dispatches land in the correct inbox every time.
MCP Tools (dispatch_*)
- 12 new
dispatch_*toolsdispatch_create,dispatch_reply,dispatch_inbox,dispatch_outbox,dispatch_ack,dispatch_assign,dispatch_forward,dispatch_resolve,dispatch_close,dispatch_sweep,dispatch_get,dispatch_related. Tool count: 48 → 60. - dispatch_sweepSession-start prioritized overview returning blocking, overdue, waiting-on-me, new assignments, and recent updates with recommended next actions.
- Central routing service
resolveDispatchRoute()derives source project from authenticated identity, resolves actors via project registry, and enforces project-link gate for cross-project Dispatches.
Data Model
- Migration 0116Three new tables:
dispatches,dispatch_messages,dispatch_participantswith full RLS, vector embedding column (vector(1536)), and HNSW index. - Letter migrationAll existing Vault Letters migrated to the new
dispatchesschema. Status mapping:new → open,answered → resolved. Legacyletterstable kept for backward compatibility.
UI
- Letters renamed to DispatchNavigation, breadcrumbs, headings, and page copy updated. New routes at
/dispatcheswith permanent redirects from/letters. - New status colors
open(blue),waiting_for_requester(orange),resolved(teal),cancelled(gray) added tostatus-styles.ts. - Landing page Dispatch sectionNew feature section with copy, bullets, and
dispatch_sweepcode example.
Compose Spec Library, YAML Editor & Log Viewer
Compose Spec Library
- Reusable, versioned YAML templatesA new spec library at
/dashboard/ai-hardware/compose-specsstores compose configurations for LLM stacks and model variants. List view, detail editor, and new-spec wizard included. - Opt-in versioningSave dialog offers “Update current” or “Create new version” with a change summary field. Previous versions remain accessible in the version history sidebar, consistent with the agent-files pattern.
- Deploy to DeviceAny spec can be deployed to an online node via a node-selector dialog. The deployment enqueues a
put_filecommand to the node's command queue and works through WireGuard without any direct network access. - Save as SpecThe compose editor on the node detail page now has a “Save as Spec” button that captures the current device YAML as a new spec entry in the library.
YAML Syntax Highlighting
- CodeMirror YAML editorThe plain textarea in the Compose tab is replaced with a full CodeMirror 6 editor: syntax highlighting, line numbers, fold gutter, bracket matching, and One Dark theme.
Validate → Save Flow
- Two-step saveA new Validate button enqueues a
validate_yamlcommand to the device (validated usingserde_yaml, the same parser used when writing the file). Save & Commit is only enabled after validation passes.
Fullscreen Log Viewer
- Expand buttonThe log panel now has an expand icon that opens a fullscreen overlay (Esc to close).
- SearchClient-side filter with match highlighting. Line numbers shown on every row.
- Log formattingContainer name prefixes (purple), ERROR (red), WARN (amber), INFO (blue), timestamps (gray).
Changed
- AI Hardware: Alpha badge removedThe “Alpha” badge has been removed from the AI Hardware sidebar entry. The feature is now considered fully supported.
Compose Management, C&C Security & Node Control
Compose YAML Management (ADR-0002)
- Edit docker-compose.yaml from the dashboardread, edit, and atomically write the DGX LLM stack compose file without SSH access. YAML validation before write, optional git commit on save.
- Activate Config buttonruns
docker compose up -don the device (120s timeout). Returns stdout, stderr, and exit code directly in the UI. - Live SSE log stream
docker compose logs --followstreamed as Server-Sent Events to the browser. Start/Stop controls, 500-line rolling buffer. - Companion files
.env,.conf, and.tomlfiles in the compose directory shown in a collapsible read-only panel alongside the editor.
C&C Channel Security (ADR-0051 v1 + v2)
- Dedicated command tokena second
nxs_cmd_*credential is generated at node registration alongside the telemetry token. Compose management routes exclusively require this token; the telemetry token is never used for write operations. - Ed25519 signed commandsthe Nexus backend signs every write request (PUT compose file, POST activate) with an Ed25519 private key. The device verifies using the public key delivered at registration. Replay protection via ±5-minute timestamp window and nonce.
- AES-256-GCM token encryptionthe raw cmd token is stored encrypted in the database. The proxy decrypts server-side; the token never reaches the browser.
- Rotate-cmd endpoint
POST /api/nodes/[id]/rotate-cmdrotates the command token immediately (no grace period) and returns the new raw token once.
Dual Token Registration Wizard
- Both tokens shown at onceamber panel for the node token (telemetry), blue panel for the command token (compose control). One-click copy for the full
nexus-link register --token … --cmd-token …command. - Auto-detected service endpointnexus-link detects the device private IP at registration and reports it as
public_endpoint. The backend sets the field automatically when empty, so no manual DNS or reverse proxy setup needed for WireGuard / LAN deployments. - Private-network safety noticesinfo box explains WireGuard-first deployment. Amber warning appears when a public endpoint is entered, noting the dual-channel security status and recommending network-level protection.
AI Hardware Info Sidebar
- Sticky right-bar on all hardware pagesvisible on both the node list and node detail pages at the
xlbreakpoint. Explains the two-token credential model, WireGuard deployment guidance, security status, and supported DGX device list. - Documentation placeholderready for the nexus-link documentation URL when available.
Compose Tab on Node Detail
- Telemetry / Compose tab barcompose editor, activate button, and log stream integrated directly on the node detail page. No separate navigation required.
Unified TagChipInput
- Consistent tag entry across all formsEnter key or Add button to confirm a tag. No comma-as-delimiter. Applied to project forms, workspace forms, and hardware wizard. Old plain-text and inline-chip patterns removed.
Registration Name Preservation
- Dashboard name preserved on CLI claimoperator-configured names (e.g. “DGX Spark Primary Node”) are never overwritten by the device hostname when
nexus-link registerruns.
Migration 0112
- cmd_token columns on ai_nodes
cmd_token_hash,cmd_token_prefix,cmd_token_encrypted. Indexed for fast proxy lookup.
nexus-link v0.8.0
- Compose API handlers
get_compose_file,put_compose_file,activate_compose,stream_compose_logsin a newhandlers/composemodule. - refresh-cmd subcommand
nexus-link refresh-cmd --cmd-token <nxs_cmd_*>applies a rotated command token without service restart. - Private IP auto-detection
core::network::detect_private_ip()reports the device endpoint at registration time. - Pre-commit hooks
cargo fmt,cargo fix,cargo check,cargo clippyrun automatically before every commit viapre-commit(installed ondevbox shell).
nexus-link Integration: Live Hardware Telemetry & Device Management
nexus-link Hardware Agent
- Full device lifecycleregister, monitor, rotate tokens, and unlink on-premise AI hardware nodes from the Nexus dashboard. Supports NVIDIA DGX Spark, DGX Station A100, DGX A100, and DGX H100.
- Live telemetry streamingGPU temperature, utilization, power draw, system CPU/RAM/disk, Docker container health, and network I/O pushed every 30 seconds from the device to the Nexus backend.
- Open sourceRust-based agent, Apache-2.0 licensed. Install via
curl -fsSL https://nexus.gatewarden.eu/install-link.sh | bash. Repository: github.com/gwnexus/nexus-link.
Device Registration Wizard
- 3-step guided setupdevice classification (type, name, tags), setup guide with generated token and install commands, connectivity verification with auto-polling for the first heartbeat.
- One-time token displaythe node token is shown once during registration. Copy button and full install commands with the token embedded are displayed for direct SSH terminal use.
Live Telemetry Dashboard
- System metricsCPU usage, memory (used/total), disk, and uptime displayed as metric cards with auto-refresh every 30 seconds.
- GPU monitoringtemperature (color-coded), utilization percentage, power draw (watts), and VRAM usage per GPU device.
- Container tableall Docker containers with name, health status badge, CPU%, memory usage, and network I/O (rx/tx).
Token Rotation with Auto-Rollback
- Safe rotationgenerate a new token while the old one stays valid during a 24-hour grace period. If the device adopts the new token, the old one is automatically invalidated.
- Auto-rollbackif the grace period expires without the device adopting the new token, the rotation is automatically cancelled and the old token is restored. The device never loses connectivity.
Self-Hosted Hardware Management
- selfhosted feature flagPro users with self-hosted infrastructure can manage AI hardware nodes without requiring platform admin access. Controlled via
feature_flags.selfhostedon the tenant license. - Unlink + Destroycombined dialog with checkbox to either unlink (invalidate token, preserve audit trail) or permanently delete the node and all telemetry data.
Vault Letter Redesign (ADR-0050)
- Project-scoped ticketsletters belong to the recipient project. Cross-project delivery requires an explicit project link (link-gated).
- Bidirectional routing
from_project_idtracks the sender project. Both sender and recipient can access the letter thread.
Migrations 0107–0109
- ai_nodes + node_telemetry (0107)hardware node registry with SHA-256 token auth, 30-day telemetry retention, and tenant-scoped RLS policies.
- Vault letter redesign (0108)
from_project_id, project-scoped indexes for inbox/outbox queries. - Token rotation (0109)
token_hash_previous,token_rotation_expires_at, and a cleanup function that rolls back unadopted rotations.
kb_get Entity Resolution
- Per-entity-type column selection
kb_getno longer returns “Entity not found” for sessions, decisions, and letters. Root cause: a single.select()with all columns across entity types caused PostgREST errors for non-existent columns.
Full Vector Search Stack, Session Vectorization & Multi-Model AI
Session Entries Vectorized
- 1,016 session entries embeddedthe complete operational history of every project is now semantically searchable. Agents surface relevant prior work across session boundaries by meaning, not by date.
- Token savings via relevant_contextinstead of loading all ADRs + recent sessions categorically, agents call
include: ['relevant_context']with a query string and receive 8–10 semantically ranked items across all six entity types in a single MCP call. - Auto-embedding on session_appendnote, correction, handoff, and ADR entries are embedded automatically after each append. Historical entries covered by backfill.
Complete Vector Search Foundation
- Six entity types searchabledecisions, ingest items, research notes, planning items, project documents, and session entries all carry 1536-dimensional embedding vectors with HNSW indexes.
- Semantic + hybrid search modes
kb_searchnow supportssemantic(pure cosine similarity) andhybrid(keyword + semantic, 0.4/0.6 re-ranking) in addition to the existingkeywordmode. - All write paths covered7 API routes have async embedding hooks. Every new document, ADR, scan report, CLI import, session entry, and file upload is automatically embedded with zero latency impact on the API response.
Confidentiality-Aware AI Routing
- Code-enforced data classificationOpenAI and AWS Textract are automatically blocked for VS-NfD, GEHEIM, EU-RESTRICTED and higher. No configuration required: the classification is inherited from the customer level.
- Local embedding for classified projectsDGX Spark routes classified content to gte-Qwen2-1.5B-instruct (1536-dim, same as OpenAI). No schema changes. Both providers coexist in the same vector column.
DGX Spark Multi-Model Stack
- Three models, one GB10 (71 GB / 128 GB)Qwen3-14B (code/reasoning, port 8000), gte-Qwen2-1.5B-instruct (embedding, port 8001), Qwen2.5-VL-7B (vision OCR, port 8003). All accessible via a single OpenAI-compatible LiteLLM endpoint.
- Vision OCR for scanned PDFsQwen2.5-VL-7B extracts text from scanned documents for classified projects where AWS Textract is blocked. Result stored in
project_documents.extracted_textand embedded locally.
Migrations 0102–0105
- pgvector extension + 5 embedding tables(0102) and
match_embeddingsRPC with HNSW cosine search (0103). - RLS policy refactor (0104)6 child tables now use
is_project_member()SECURITY DEFINER helper. FK index added oncontracts.customer_id. - session_entries vectorized (0105)embedding column + HNSW index + JOIN-aware
match_embeddingsbranch for project scoping.
Cache-Control + Build Fix
- Cache-Control headers on 8 read-heavy routes: tags (300 s), flavors/baselines (600 s), skills (120 s), profiles (60 s), decisions (60 s), license (no-store), mcp/projects (no-store).
- Build fix
npx next buildcompletes without errors locally. The_global-errorSSG prerender crash (React 19 / Next.js 16 bug) is suppressed.
Cross-Project Search
- Unified knowledge searchthe Search page is now live. Search across decisions, session entries, documents, and research notes, from all your projects in a single view, grouped by project.
- Hybrid mode by defaultcombines keyword (ILIKE) and semantic (pgvector cosine) results for the best relevance. Keyword and semantic-only modes also available.
- Confidentiality-awareVS-NfD and classified projects appear in search results only for team members. On Nexus Cloud, classified projects use keyword search; full semantic search for classified content requires Self-Hosted Nexus with a local AI stack.
Project README, Enriched Agent Context & Security Hardening
Semantic Vector Search (pgvector)
- pgvector-powered semantic searchsearch across ADRs, documents, research notes, and planning items by meaning, not just keywords. Powered by PostgreSQL
pgvectorwith HNSW indexes for fast cosine-similarity queries across 1536-dimensional embedding vectors. - Three search modes
keyword(ILIKE, existing),semantic(pure vector similarity), andhybrid(keyword + semantic with 0.4/0.6 re-ranking). All modes available via thekb_searchMCP tool. - Automatic embedding on writeevery new document, ADR, scan report, CLI import, and file upload is automatically embedded in the background. Updates to existing items trigger re-embedding. Zero latency impact on API responses (fire-and-forget).
- Embed backfill
make embed-backfillprocesses all existing knowledge items. Idempotent, rate-limit-safe, and confidentiality-aware. Initial backfill: 190 items across all projects.
Confidentiality-Aware AI Routing
- Classification-driven routingexternal API calls (OpenAI, AWS Textract) are automatically blocked for VS-NfD, GEHEIM, EU-RESTRICTED and higher classifications. Effective confidentiality is computed as max(project level, customer level).
- Local embedding fallbackclassified projects route to the on-premise DGX Spark embedding model (gte-Qwen2-1.5B-instruct, 1536 dimensions, identical to OpenAI). No data leaves the network for VS-NfD content.
- Dual text extractionuploaded documents are automatically text-extracted: direct read for .txt/.md, pdf-parse for text-native PDFs, AWS Textract for scanned PDFs (blocked for classified projects). Extracted text is stored and embedded for search.
DGX Spark Multi-Model Stack
- Three AI models on one DGX SparkNVIDIA GB10 (128 GB unified memory) now runs three vLLM instances simultaneously: Qwen3-14B for code and reasoning, gte-Qwen2-1.5B-instruct for local embedding, and Qwen2.5-VL-7B for vision OCR, all within 71 GB of the 128 GB budget.
- Unified LiteLLM proxyall three models are accessible via a single OpenAI-compatible API endpoint with automatic model routing. Same API surface for cloud and local inference.
Project Overview (README)
- Markdown README fieldprojects now carry a full Markdown overview document describing purpose, tech stack, architecture, and constraints. Editable via CodeMirror editor with Source/Preview toggle and .md file upload in the project wizard.
- Dashboard widgetread-only Markdown renderer with Source/Preview toggle and PDF export button on the project dashboard, below the memory grid tiles.
- Agent-visible at initREADME is surfaced in
kb_memoryproject block (8 new fields) and rendered as “Project Overview” in auto-generated AGENTS.md.
Security Audit & Fixes
- Full OWASP Top 10 audit6 domains, 46 checks, 42 passed (91% score). Report persisted as knowledge-base scan report.
- SEC-002: Webhook rate limitingdedicated 300 req/min IP-based flood guard on
/api/webhooks/(previously skipped). - SEC-003: SVG validation hardenedstructural root-element check replaces text-based detection.
- SEC-004: Error message leak fixedAPI keys route returns fixed “Unauthorized” instead of raw Supabase error internals.
Dashboard Improvements
- Directives tab layoutCore and Project directives now displayed in a compact tab view instead of stacked panels, saving vertical space on the project dashboard.
- Task assignee selectiontasks can be assigned to project members via dropdown.
Architecture Decisions
- ADR-0044Project-Scoped Skills and Agent-Files.
- ADR-0045Project README Field and Enriched kb_memory Project Context.
- ADR-0046Vector Search Foundation: pgvector Embeddings, OpenAI Embed Backfill, Textract PDF Pipeline, and CNPG Fallback.
- ADR-0047Confidentiality-Aware Embedding and Text Extraction Routing.
- ADR-0048DGX Spark Multi-Model Deployment: Local Embedding + Vision OCR.
DGX Spark, Plugin Marketplace, Licensing Rework & Project Intelligence
DGX Spark Local LLM Provider
- NVIDIA DGX Spark deploymentQwen3-14B running on local NVIDIA GB10 (Grace Blackwell) hardware via vLLM + LiteLLM + Caddy stack. Model routing policy: local by default, cloud only by explicit human escalation. Spark enabled in all 10 projects.
- Performance benchmarks8.05–8.15 tok/s single-request, 125.6 tok/s at 16x concurrency (96.6% efficiency). 48K context confirmed with no measurable penalty. Prefix caching reduces TTFT significantly for warm contexts.
- ADR-0041 / 0042 / 0043architecture decisions for DGX Spark provisioning, single-model consolidation, and Qwen3-14B with Thinking Mode, all accepted.
Plugin Marketplace
- Dedicated plugin catalognew public
/pluginspage with hero, stats bar, plugin cards (icon, highlights, hooks/tools count), and “How Plugins Work” explainer. Each plugin has a full detail page at/plugins/[slug]with key features, hooks, tools, sidebar, and breadcrumb navigation. - Free + Alpha tiers2 free plugins (Compaction+, Cost Control) included with every plan. 4 alpha plugins (€1,99/mo, Pro+Enterprise): Vault Shield, Knowledge Graph, LLM Bridge, CI Bridge. Source code published at beta for all plugins.
- CI Bridgenew alpha plugin connecting CI/CD pipelines to Nexus project intelligence. Validates PRs against ADRs and directives, generates architectural review comments, and reports results into sessions. GitHub Actions + GitLab CI support.
- Navigation & cross-links“Plugins” added to main navbar. Links from pricing page, tools page, and plugin detail sidebars to the catalog. GitHub repos linked for plugin collection and CLI.
Licensing & Self-Hosting
- Self-Hosted = Pro for Freenew pricing model: Cloud SaaS is paid, self-hosted gets the full Pro feature set at no cost. No license key, no phone-home, no artificial limits.
- Pricing page callout“We only charge for the cloud. The product is free.” banner above the tier grid, setting the framing before users see prices.
- Community tier: 1 customerCommunity plan now includes 1 customer organization, enabling real client work from day one.
- Deployment packages announcedDocker Compose, Helm chart, Terraform IaC, and bare-metal deployment options coming soon.
- Funding transparencyCloud revenue funds operational costs and OSS development. No venture capital, no stakeholder dividends.
Project Intelligence Repositioning
- New positioningNexus repositioned as the “project intelligence layer for agentic development”. Updated homepage hero, meta tags, OG/Twitter cards, features section, and FAQ to reflect intelligence-layer framing.
- Competitive analysisOmnigent (Databricks) meta-harness positioning analyzed and ingested as knowledge document. Nexus differentiation: upstream intelligence vs downstream orchestration.
Project-Scoped Skills & Agent Files
- Project-level ownership (ADR-0044)skills and agent files can now be created at project scope (
project_idFK) alongside existing core (platform-wide) entities. Partial unique indexes prevent ID collisions between scopes. - Promotion workflowproject-scoped skills can be promoted to core via the entity review system. Two new email templates for promotion submission and decision notifications (17 total).
- Dual-section managersproject skills and agent-files pages now show two sections: Project (with inline create forms) and Assigned Core. Project badge and scoped edit permissions in detail views.
nx-learnings
- Project learnings capturenew core skill for recording architectural learnings, patterns, and anti-patterns. Assigned to all projects. Total core skills: 13.
UI Improvements
- Read-only bannersGlobal Skills, Agent Files, Workspaces, and Customers pages show a gold “read-only” banner for non-admin users with gated create/edit buttons.
- Projects filter widgetSearchBar, status tabs, collapsible advanced filter panel, and view toggle on the projects listing page.
- Dashboard project filters“My Projects” on the dashboard home now has search, visibility tabs, and customer/starred filters.
- Wizard step circles clickablestep indicators in edit mode are now clickable with hover ring and tooltips for quick navigation between steps.
- Edit → Modifyproject edit page title changed from “Edit” to “Modify <Name> Project” for clarity.
- AI Hardware pagenew mock page under Operations with “Alpha” badge, list + detail views, and coming-soon dialogs for future hardware management features.
- Cost displayall cost values rounded to 2 decimal places ($X.XX) across sessions, cost page, and project overview widget.
- Tools page updatedtool count 56 → 58, new directives and utility sections added. Plugin table shows status badges and handles empty repo URLs for alpha plugins.
Bug Fixes
- Customer-edit team assignmentsfixed team assignment persistence in customer edit form.
- Skills & agent-files edit buttonrestored missing edit buttons on detail pages.
- Session “Unknown” userfixed user display name fallback in session timelines.
- Customer visibilityremoved redundant app-level
created_byfilters; RLS policies handle visibility correctly. - Member-add widgetfixed
auth.usersadmin API lookup,isPlatformUsercheck, and email fallback. - AI Hardware 500 errorextracted
HardwareNodetype into shareddata.tsmodule (no'use client') for server + client import compatibility. - Login page CLSadded
min-h-[70vh]to prevent cumulative layout shift (CLS 0.119 → 0). - Plugin detail hoverfixed “View pricing” button text unreadable on hover in dark CTA section.
Security
- SEC-001: npm audit clean38 packages updated, 0 critical and 0 high vulnerabilities remaining. 2 moderate (postcss/next) unfixable upstream.
- SEC-002: impersonation audit trailall impersonation events logged to
audit_eventswith actor, target user, and IP address. - SEC-005: select('*') removedall 14
select('*')calls replaced with explicit column lists across 12 files. - Security scan auto-ingestscan results automatically persisted as ingest documents via
session_append(migration 0099).
Performance
- Performance scan: 98/100Lighthouse 99/100/100/100, all Core Web Vitals passing.
- Bundle optimizationextracted
pdf-fonts.tsto prevent wizard form from pulling@react-pdf/renderer(~42 KiB saved from initial bundle). - Scan report auto-ingest
session_appendauto-creates ingest documents for security and performance scan entries, persisting results without manual action.
CLI v0.7.0
- Provider passthrough
ProviderConfigchanged toserde_json::Valuefor opaque passthrough.nexus pullwrites provider blocks toopencode.json. DGX Spark auto-mapped. - Init prompt fix
nexus initno longer prompts for API URL when the global config file already exists. - 237 passing tests. GitHub release rebuilt.
Database
0098project_idFK on skills and agent_files, partial unique indexes, full RLS policy rewrite (13 policies), entity_reviews CHECK extended foragent_filetype.0099scan report classification: newscan_reportclassification type for ingest items, auto-created bysession_appendon security/performance scan entries.
Cost Tracking, Documents Merge, Performance & CLI Open-Source
Cost Tracking Dashboard
- Cost detail pagenew
/costroute per project with summary cards (total cost, tokens, messages, sessions), token breakdown, per-model aggregate table, and per-session collapsible detail list. - Project overview widgetcost widget in the Project Memory grid showing estimated USD spend with direct link to the cost detail page.
- Session cost snapshotssession detail pages show cost snapshot entries as green cards with token breakdown and collapsible per-model table. Session close blocks include cost in the stats grid.
- nexus-cost-control plugin v2.0OpenCode plugin that captures token usage and estimated cost from native
AssistantMessage.infodata. Zero external dependencies: no Helicone or third-party API required.
Performance Improvements
- GIN index on session_entries.metadatamigration 0097 adds a
jsonb_path_opsGIN index for fast JSONB containment queries used by cost tracking and plugin filtering. - Bounded MCP memory queriesall 6 unbounded queries in the MCP memory endpoint now have
.limit()to prevent payload blowup as data grows.
CLI Open-Source
- nexus-cli is now open-sourcethe Nexus CLI has been released as an open-source project on GitHub at
gwnexus/nexus-cli. Community contributions welcome.
Unified Documents Page
- Research + Ingest mergedthe separate Research and Ingest sections are now combined into a single “Documents” widget and page with a tabbed interface (Notes, Files, Links).
- ADR cross-referencethe documents page header includes a direct link to the Decisions page, clarifying that ADRs are managed separately.
- Ingest item detailmoved from
/ingest/[itemId]to/documents/[itemId]with updated breadcrumbs and navigation.
Repositories Management
- Repositories widgetreplaced the inline repository list on the project overview with a compact widget in the Project Memory grid showing the count.
- Repositories pagenew
/repositoriesroute with full CRUD: add repository URLs, remove entries, URL detection with external link icons.
Session Timeline
- Plain-text previewstimeline entries now show a stripped plain-text summary (max 200 chars) instead of raw markdown. Tables, code blocks, and headings no longer clutter the timeline view.
- Expandable detailentries longer than 200 characters get a “Show full entry” toggle that reveals the complete content with full markdown rendering.
Bug Fixes
- Setup Guide visibilitythe Setup Guide link on the project overview is now visible to all project members, not just platform admins. The Edit button remains admin-only.
Performance, Plugin Sync & UI Polish
Performance Optimizations
- Font optimizationmigrated Switzer from raw
@font-face+ preload tonext/font/localwith CSS variable for automatic subsetting and zero-layout-shift loading. - N+1 query fixskills export endpoint now batch-fetches pinned versions in a single query instead of per-item sequential queries.
- Parallel queries4 server component pages now use
Promise.all()for independent database queries (tasks, workspace, skills, letters). - Bounded list queriesadded
.limit(200)to 6 unbounded list pages (customers, decisions, letters, sessions, skills, workspace forks). - Explicit column selectionreplaced
select('*')with explicit columns in 3 server component pages to reduce data transfer.
Plugin Assignment Sync
- Project creation
opencode_pluginagent files are now filtered by selected plugins instead of auto-assigning all plugin files regardless of selection. - Project editingplugin changes now sync
project_agent_files: unselected plugins are removed, newly selected plugins are added.
Workspace & Devbox
- Meta variable overrides
C_DBX_META_*overrides now correctly reflected in workspace devbox preview, edit, and export via sharedapplyMetaVarsToBody()utility. - Gitleaksadded
gitleaks: latestto all 4 workspace blueprint packages.
UI Polish
- Confidentiality shieldsproject table and customer list now use
ConfidentialityShieldMiniinstead of generic lock icons. - Customer logos
CustomerAvatarcomponent with logo + tooltip in dashboard project rows and customer list; dark circle fallback for missing logos.
CLI v0.6.12
- Update checkbackground update check via GitHub API with 24h cache and 3s timeout. Never blocks CLI execution.
- Clippy in pre-commitadded clippy lint checks to the pre-commit hook. 223 tests passing.
Demo Licensing, Impersonation & Admin Mail
Demo License Flow
- Platform user rolefull
platform_userimplementation with permissions, API guards, project isolation, sidebar badges, and tests. Demo Pro license: 3 customers, 50 projects, 4 seats, 60-day validity. - Customer ownership isolationdemo users see only own-created customers via
created_bycolumn. Hard-delete restricted to admin only. - Auto-resolve role requestspending
role_requestsare automatically marked approved when a demo license is granted. - License pageuser-facing
/dashboard/licensewith Pro status, “Demo” badge, days-remaining, resource usage bars, tier limits grid, and expiry explanation. - Extension requests“Request license extension” button with rate-limited API endpoint using
role_requeststable.
Impersonation
- App-layer impersonation
platform_ownercan impersonate any user vianx-impersonatecookie. Amber warning banner across all 28+ dashboard pages usinggetEffectiveUser(). Read-only in Phase 1.
Admin Email
- Delivery fixswitched to
admin@gatewarden.eudue to CNAME+MX RFC conflict on nexus subdomain. ProtonMail MX + Resend inbound configured. - Test mail pageadmin page at
/dashboard/admin/mail/testwith all 15 email templates, send individual or all.
Machine Registry
- MCP v0.8.8migration 0094 adds
machinestable for tracking CLI instances with machine ID, hostname, OS, and last-seen timestamp. - Session metadatasessions now display agent model, toolstack, and machine info.
Agent Files & Workspace
- AGENTS.md / CLAUDE.md regenerationalways regenerated on pull regardless of manual overrides. New “CODING DISCIPLINE” section added.
- .env.nexus.local scaffoldincluded in agent file export for local environment setup.
- Ansible/OpenTofu IaC workspacenew workspace flavor and blueprint for infrastructure-as-code projects.
UI Improvements
- Confidentiality shieldenhanced selector with shield icon + level description in customer edit forms. Moved Security & Compliance section to top.
- Customer logo componentrestored
CustomerLogocomponent after accidental removal.
Envelope Encryption, Git Identity Guard & Unified Editor
Envelope Encryption Architecture (ADR-0037)
- Classification-driven encryptionapplication-level envelope encryption with four tiers (
none/standard/elevated/maximum) mapped to the 12-level confidentiality taxonomy across Commercial, German VS, and EU/EUCI frameworks. - AES-256-GCM + HKDF-SHA256per-project DEK for severity 0–5, per-object DEK for severity 6–7 (need-to-know principle). Envelope format with authenticated metadata, content hash, and key version tracking.
- Pluggable Key ProvidersLocal (ENV master key), HashiCorp Vault (Transit), AWS KMS, Azure Key Vault, and GCP Cloud KMS. No vendor lock-in.
- Key rotation lifecycleversioned KEKs with managed transitions, resumable re-encryption jobs, and full audit logging.
- Defense-in-depthencrypted objects stay encrypted on classification downgrade. Upgrades mark existing objects for manual encryption.
Git Identity Guard
- Per-project git identitystore
user.name,user.email,user.signingkey, andcommit.gpgsignper project. Prevents accidental commits with the wrong identity. - Wizard & agent file integrationcollapsible “Git Identity” section in the project wizard, auto-generated
# GIT IDENTITYblock in AGENTS.md / CLAUDE.md. - CLI:
nexus git verify|applycompare and apply project git identity to local repo. Auto-applied onnexus initandnexus pull.
Vault Letter Tickets
- Ticket-like featuresassignee field, resolved-at timestamp (auto-managed via trigger), project-scoped labels with color, and PDF export with confidentiality watermarks.
- Bug fixesletter body persistence (
actorUUID → TEXT), escaped newlines at MCP/UI/PDF layers, lightweight “Add Note” replaces full reply form.
ADR Source Edit Mode
- Inline section editingContext, Decision, and Consequences as separate cards with per-section “Source” button opening a CodeMirror editor. Works for
draftandunder_review.
Unified Code Editor
- Single CodeEditor componentall markdown/content editing now uses CodeMirror 6 (oneDark, line numbers, syntax highlighting). Replaces legacy textarea editors in ingest items, directives, skill resources, and MarkdownDocument source view.
Fixes
- Plugin TUI deadlockmigration 0083 fixes OpenCode startup deadlock caused by awaiting uninitialized TUI in nexus-compaction-plus.
- AGENTS.md directive syncstale directives stripped and re-injected on every export.
- Migration idempotency0067 + 0087 guarded with
DROP IF EXISTS.
Workspace Management & Shadow Mode
Shadow Mode
- Workspace shadow mode togglefork cards now include a toggle switch to enable/disable shadow mode. When active, workspace files (devbox.json, devbox.lock, .devbox/, scripts/devbox/) are excluded from git tracking via
.git/info/exclude. A purple info banner explains what to run locally. - Shadow mode un-deprecatedshadow mode for agentic files is no longer deprecated. Root-level agentic files still need git-exclude management. All deprecation warnings and notes removed.
Workspace Improvements
- Auto-generated script filesnew forks automatically receive boilerplate
script_files(dbx_init.sh, lib/common.sh, tmux launchers, OS overrides, ops scripts) generated from the blueprint or via sensible defaults. - Upstream sync info boxwhen a fork's upstream blueprint has changed, a golden info panel explains the 3-way merge behavior: unchanged fields update automatically, customized fields are preserved.
- Ignore & Decouplenew button in the upstream info box to permanently decouple a fork from its blueprint. Confirmation dialog warns about consequences. Future blueprint updates will no longer trigger sync notifications for decoupled forks.
- New baseline: Minimal K8s/Tiltkubectl, k9s, tilt, kustomize, helm, cosign, syft, grype, trivy, slsa-verifier + DevOps CLI tools.
- New flavor: Go (Expert)go, gofumpt, golangci-lint, goreleaser, gotestsum, mockgen, protobuf, buf, delve, air + extended scripts.
- Fork version badgesdistinct
blueprint v{n}(gray) andfork v{n}(blue) badges always visible on fork cards.
Editor & UI
- Shared LineNumberedEditor
highlightJson,highlightBash, andLineNumberedEditorextracted into a shared component, used by blueprint edit, blueprint detail, fork edit, and fork detail views. - Blueprint edit view upgradeblueprint edit form now uses LineNumberedEditor with JSON and bash syntax highlighting, matching the fork edit experience.
- Blueprint detail view upgradeblueprint read-only detail page now uses LineNumberedEditor with syntax highlighting + line numbers, plus a read-only ScriptsTreeView for shell scripts.
- Tags column removedglobal workspaces table no longer shows the tags column.
- OS overrides & scripts collapsedTreeView sections start collapsed to reduce visual clutter.
Bug Fixes
- Stale data fixresolved three root causes of workspace fork stale reads: Next.js Data Cache disabled,
p_script_filesRPC parameter added, PATCH handler field mapping corrected. - Shell scripts save fixediting via the JSON editor no longer clobbers TreeView changes and vice versa.
- Duplicate line numbers fix
highlightJson()no longer renders inline line numbers (editor gutter handles it). - P10k instant prompt
post_init_scriptdetects Powerlevel10k instant prompt and suppresses console output.
Blueprint API
- PATCH returns affected forksblueprint save now returns an
affected_forkslist and skips shadow-mode forks when settingupstream_changed. - Fork-impact dialogafter saving a blueprint, a dialog shows how many downstream forks are marked “Upstream Changed” and explains the user's options (Sync or Ignore & Decouple).
CLI (nexus-cli v0.6.9)
- nexus workspace shadow on|off|statusnew command to exclude workspace files from git tracking (devbox.json, devbox.lock, .devbox/, scripts/devbox/).
- nexus pullauto-applies workspace git-exclude when fork has
shadow_mode = true. - Shadow un-deprecated
nexus shadow on|off|statusno longer prints deprecation warnings. - 211 passing tests.
Smart Agent File Generation & Sync Protocol
Agent File Auto-Generation (ADR-0036)
- Smart content generationAGENTS.md and CLAUDE.md are now auto-generated with rich, project-specific content during project creation and editing. Includes team members, skills (full body), plugins, MCP servers, customer context, and project directives inline.
- Confidentiality rulesagent files automatically include tiered security rules based on the customer's confidentiality level (internal, confidential, strictly-confidential, and German/NATO/EU classifications).
- Override source trackingnew
body_override_sourcefield tracks whether content is auto-generated, user-uploaded, or manually edited. Regeneration on project edit only occurs for auto-generated files, preserving manual and uploaded overrides. - Directive dedupproject directives embedded in auto-generated files are no longer duplicated at export time.
Sync Protocol
- Content hashingSHA-256 hashes are computed and stored after every
nexus pullexport, enabling drift detection between the platform and developer workspaces. - New MCP actions
af_sync_check(compare local vs remote hashes),af_sync(bidirectional pull/push), andaf_sync_status(bulk sync state query). - Out-of-sync indicatorproject detail page shows an “Out of sync” warning badge when agent files have drifted from the platform version.
- Sync badges in managerthe agent files manager displays per-file sync status (synced, local modified, conflict, remote modified) and last synced timestamp.
UI Improvements
- Plugin visibilityall active plugins (including RTK) now appear in the project detail agent toolbox as amber badges, not just MCP-server-backed plugins.
- Tags separationproject tags are visually separated from K/V metadata in the header with a label prefix and divider.
- Confidentiality dedupremoved duplicate confidentiality badge from header (already shown in Security & Compliance card).
- Team photosproject wizard confirm page now shows avatar photos for the owner and all team members.
- Auto-generated badgeagent file assignments created by the project wizard are marked with an “auto” badge.
CLI (nexus-cli v0.6.8)
- nexus statusnew command to check sync state of all project agent files against the platform.
- nexus pushupload local agent file changes to the platform as manual overrides.
- nexus resetdiscard local changes and pull fresh content from the platform.
Database
0067auto_generatedboolean onproject_agent_files0068body_override_sourcetext column0069content_hash,last_synced_at,sync_statuscolumns with performance index
Workspace Pull Fix: PAT-Authenticated Export
Fixed
- Workspace pull 404 resolvedthe
nexus pullworkspace export now works correctly with PAT token authentication. Previously, the workspace-forks endpoints only accepted cookie-based session auth, causing a 404 for all CLI users. - .env.local.example restoredthe environment template file was tracked in git but missing from the working tree.
API
ws_exportaction in/api/mcp/agent-filesexports the active workspace fork (devbox.json + scripts) for a project using PAT authentication. Automatically finds the active fork without requiring a separate list call.
CLI (nexus-cli v0.6.7)
- Single-call workspace export
nexus pull --scope workspacenow uses the MCP-authenticatedws_exportaction instead of the two-step list + export flow. Falls back to v1 if the endpoint is unavailable. - Graceful handlingwhen no workspace fork is assigned, the CLI shows a clean info message instead of an error.
Developer Tooling
- ws-backup.shnew utility script at
scripts/ws-backup.shto snapshot and restore pull-managed agentic files. Supportsbackup,restore, andstatuscommands.
Workspace 2.0: Blueprint + Fork Architecture
Features
- Workspace Blueprintsworkspaces are now first-class entities composed from a Baseline (core tools) and a Flavor (language toolchain). Create blueprints via a guided 5-step wizard from the new Workspaces dashboard page.
- Project Forksprojects receive deep-copy forks of workspace blueprints. Each fork tracks its source version; upstream changes are detected automatically via database triggers.
- Curated Catalog6 baselines (Minimal, DevOps, AWS/GCP/Azure Cloud, Docker/K8s) and 6 flavors (Node.js/TypeScript, Rust, Python, Go, PHP, Nexus Dev) available out of the box.
- Version Trackingworkspace blueprints are versioned. Updates bump the version and flag all downstream forks with an upstream-changed indicator.
CLI (nexus-cli v0.6.6)
- v2 Fork Export API
nexus pull --scope workspacenow uses the v2 fork-based export endpoint with automatic fallback to v1 for backward compatibility. - Upstream awarenesspull output shows upstream-changed indicator and shadow/direct mode.
API
GET/POST /api/workspaceslist and create workspace blueprints.GET/PATCH/DELETE /api/workspaces/:idmanage individual blueprints with version bumping.GET /api/workspaces/baselinesand/flavorscatalog endpoints.GET/POST /api/projects/:id/workspace-forkslist and create project forks.POST /api/projects/:id/workspace-forks/:forkId/exportCLI export endpoint for devbox.json + scripts.
Import, Shadow Deprecation, Session Metadata
Features
- Import API endpointnew
POST /api/mcp/importbatch endpoint for importing agentic files, directives, and referenced documents into a Nexus project. Imported directives are created as disabled for review. - Dynamic cross-references in af_exportexported agent files (CLAUDE.md, AGENTS.md) now include a “Customer Repository Context” block listing pre-existing agentic files when import data exists.
- Session entry metadata
session_appendnow persists model, toolstack, and machine_id via JSONB metadata column (migration 0072). Dashboard shows colored badges per entry. - Collapsible compaction entriessession detail page uses native
<details>/<summary>for compaction entries (default collapsed). - Setup guide correctedCLI workflow order fixed to login → link → init → pull. References updated for ADR-0029 (.git/info/exclude).
CLI (nexus-cli v0.6.4)
- Unified .git/info/exclude
nexus initnow always writes a unified exclude block to.git/info/exclude(.nexus/, .opencode/, opencode.json, .env.local) for clean repo-local exclusions. - .gitignore migration
nexus initauto-detects and removes Nexus entries from.gitignore, moving them to.git/info/excludeinstead (repo-local, never committed). - deinit cleanup
nexus deinitnow cleans up.git/info/excludeentries (both Nexus CLI and shadow blocks).
CLI (nexus-cli v0.6.3)
- Secret leak fix
build_opencode_entrytranslates${env:VAR}→{env:VAR}(OpenCode syntax) instead of resolving to plaintext values. - MCP server dedup
merge_extra_mcp_serversdetects servers with identical command arrays and skips duplicates with a warning.
Documentation
- ADR-0029.nexus as Local Workspace Cache: .git/exclude Strategy.
- ADR-0028Agentic File Import: Detection, Ingestion, and Cross-Referencing.
Project Tasks, Security Hardening, CLI Machine-ID
Features
- Project-level Tasks (Phase 1)full CRUD dashboard UI with status/priority filters, sortable table, task detail page with MarkdownDocument (source/preview, debounced auto-save), notes timeline, and properties sidebar.
- Tasks APIproject-scoped REST API for tasks CRUD and task notes (GET/POST/PATCH/DELETE).
- CLI v0.6.1: Tasks export
nexus pullexports open tasks as.nexus/TASKS.mdsorted by priority. - CLI v0.6.2: Machine-IDpersistent UUID at
~/.config/nexus/machine.toml, sent asX-Nexus-Machine-Idheader on every API call.
Security
- OWASP Top 10 Audit18 findings identified, 7 fixed: agent_files RLS hardened (migration 0069), open redirect fix, rate limiting middleware (120/20/600 req/min), skills/commands RLS hardened (migration 0071), error message sanitization, PostgREST filter injection fix.
- Ingest bulk-classify fixreplaced
.update().in()withPromise.allSettledfor reliable individual updates.
Improvements
- Tasks removed from global sidebar; they live exclusively at project level with count badge on project detail page.
- CLI v0.6.0:
nexus importcommand (agentic file scan, directive extraction, link resolution).
Documentation
- ADR-0026Skill Resources and Auto-Generated Frontmatter.
- ADR-0027.nexus as Exclusive Agentic Root.
Skill Resources, auto-generated frontmatter, and UI consistency
Features
- Skill Resources (multi-file support)skills can now have multiple resource files alongside the main body. New accordion UI for viewing, adding, editing, and deleting resources, with full versioning via JSONB snapshots.
- Pending Resources in skill creationresource files can be added during skill creation before the skill is saved.
- Auto-generated skill frontmatterskill metadata frontmatter is now generated on-the-fly during MCP export and retrieval, rather than stored in the database body.
- MCP sk_get returns resourcesthe MCP skill retrieval tool now returns a
resourcesarray alongside the auto-frontmattered body.
Improvements
- Source/Preview toggleeditor toolbar toggle now works in all modes with
defaultModerespected. - Unified VersionControlsshared component used by both skill and agent-file detail pages with identical styling and behavior.
- Consistent table designboth skills and agent-files tables now show Files column badges and collapsible archived sections.
- Right-aligned action buttonsEdit, Start Review, and status action buttons are now consistently right-aligned across skills and agent-files detail pages, with the status badge on the left.
- Content-change detection fixskills API uses diff-based detection to prevent phantom version bumps.
OpenCode Plugin (nexus-compaction-plus v1.8.0)
- Stable releasesession context preservation across compaction events with full audit trail recording.
- nexus_show_plugins toolcustom MCP tool showing loaded plugins, versions, API connection status, and registered hooks.
- TUI startup toastconfirms plugin load with name, version, and connection status.
License tier refactoring and per-user licensing
Features
- 3-tier license modelconsolidated from 4 tiers to 3: Community (€0/mo), Pro (€6.95/mo), and Enterprise (€84.95/mo). Additional seats at €2.95/mo each.
- Per-user license tablesnew
user_licensesanduser_license_historytables with RLS, preparing groundwork for per-user billing in v0.7.0. - Community tier gateproject wizard team-members step now shows an upgrade banner and disables member selection for Community tier users.
Improvements
- License page3-column plan comparison with monthly pricing.
- TierBadgeupdated styling for new tier names.
- FAQPro tier description updated with concrete pricing and seat details.
Documentation
- ADR-0025License Tier Refactoring: 3-Tier Model with Per-User Licensing (supersedes ADR-0014).
PDF export for ADRs and agent skill files
Features
- PDF export for ADR/Decisionsexport button on the decision detail page enables one-click PDF generation with S3 caching, completing PDF export coverage for all document-backed entity types.
Improvements
- OpenCode skill filesadded skill definitions for ADR drafting, code review, database migration, performance scanning, security scanning, and plugin inspection workflows.
- Compaction plugin fixsession ID capture from
nexus_session_createresponses now works correctly.
Security hardening, PDF export, performance, and classification UX
Security
- Comprehensive security audit20 files reviewed and hardened. Document download now verifies project membership (IDOR fix), MCP identity scoped to user's projects, auth callback blocks open redirects, SVG uploads sanitized, and 10 API routes no longer leak raw database errors.
- Aggregation function hardeningall RPC functions secured with
SET search_pathand project membership checks. - Markdown XSS protection
rehype-sanitizeadded to all Markdown renderers across the application.
PDF Export
- Export ingest documents as PDFasync Markdown-to-PDF generation with S3 caching and one-click download from the ingest detail page.
Classification & Knowledge Management
- Quick-classifyclassify ingest items directly from the detail page with a grouped dropdown. Supports bulk-classify for multi-select.
- Research tile sub-countsproject overview now shows separate counts for Links, Docs, and Agent-promoted research items.
Performance
- Database aggregation RPCsnew server-side functions replace N+1 client-side counting for projects, letters, and sessions.
- Query parallelizationproject detail, dashboard, letters, sessions, research, and ingest pages all load faster through parallel data fetching.
- Centralized project access checknew shared helper eliminates ~283 lines of duplicated verification code across 11 pages.
UX Improvements
- Indeterminate checkboxselect-all checkbox on the ingest list now shows an indeterminate state for partial selections.
Security hardening, project editing, and UX polish
Security
- Hybrid Supabase client strategy (ADR-0023)all API write operations now use the service client to prevent silent RLS failures. User client retained for authentication and reads as defense-in-depth. Migrated 14 API routes covering 19 database tables.
Project Editing
- Documents in edit modeexisting offers, SOWs, and start documents displayed as inline tables with download and delete per category.
- Agent config persistenceplugin settings, environment confirmation, and auto-generate flags loaded from and saved to the database.
- Tags on detail pageproject tags shown as blue badges on the project overview.
- Skills syncskill assignments persisted during both project creation and update.
- Repositories and contactsnew project fields with dedicated input components in the wizard.
UX Improvements
- Redesigned tag inputtags rendered as inline badges with backspace-delete and focus ring.
- Full-width navbarnavigation bar now spans the full viewport width.
- Setup guideimproved title format and
nexus upgradeas primary install option. - Default agentic rootnew projects default to
.nexusinstead of.claude.
Bug Fixes
- Tags not savingresolved silent RLS failure that prevented tags from being persisted for weeks.
- Agent fields on updatetags, plugins, capabilities, and config now correctly saved when editing a project.
Document management, vector search, and onboarding improvements
Document Management
- Project documentsupload, organize, and version documents per project with S3-backed storage and CloudFront CDN delivery.
- Vector searchsemantic search across uploaded documents using pgvector embeddings for intelligent retrieval.
- OCR and AI analyticsautomatic text extraction from PDFs and images with AI-powered metadata tagging and categorization.
Onboarding
- Demo license requestnew users can request a demo license to explore the full platform before committing.
- Community showcaseread-only sample project with example ADRs, sessions, and documents for onboarding.
- FAQ sectioncomprehensive FAQ and “Why Nexus” page based on real developer survey responses.
Improvements
- Revised pricingconsolidated to Community, Pro, and Enterprise tiers with monthly pricing.
- Early Access landing pageupdated public-facing page reflecting the current development stage.
- Email templatesrebranded and streamlined across all outbound emails.
Devbox integration, skill lifecycle, and entity reviews
Developer Experience
- Devbox integrationinteractive developer shell with module system for local development, diagnostics, and deployment tooling.
- Skill lifecycle managementfull CRUD for reusable agent skills with versioning, review workflow, and project assignment.
Governance
- Entity review systemstructured review workflow for skills and agent files with inline comments, state transitions, and audit trail.
- Notification subscriptionsper-user notification preferences for ADR changes, session summaries, and letter updates.
Improvements
- PerformanceN+1 query elimination, batch loading for project overview widgets.
- Session UIenhanced with user attribution, avatars, timestamps, and markdown rendering.
- CLI stabilizationimproved install.sh, preflight checks, --yes flag for non-interactive usage.
- MCP serverexpanded to 47 tools across 14 endpoints.
Customer billing fields, notification subscriptions, and CLI CDN migration
Customer Management
- Billing fieldsnew
customer_number,vat_id,reverse_charge, andshort_idcolumns on the customers table. - Invoicing fieldsetdedicated section in customer edit form with reverse charge toggle and VAT ID input.
- New customer wizardextended with customer number, short ID, VAT ID, and reverse charge across creation steps.
- Project agent prefixnew projects auto-derive agent prefix from the customer's
short_id.
Notification Subscriptions
- Topic-based subscriptionssubscribe to release updates, feature previews, and beta releases per product (App, CLI, MCP, or all).
- Settings UItoggle-based subscription management in the Settings page.
- GDPR unsubscribepublic
/unsubscribe?token=...page for one-click unsubscribe without login, plusList-Unsubscribeheader in all subscription emails.
CLI & Infrastructure
- CDN installer
install.shmigrated from GitHub raw URLs to S3/CloudFront for reliable access from the private repo. - CLI v0.1.5released with corrected installer URLs.
Fixed
- Dashboard overflowlong descriptions in recent sessions and decisions no longer break layout.
Security hardening, DB indexes, and error sanitization
Security
- MCP project accessadded
checkProjectAccess()to 14 MCP action handlers that were previously accessible to any authenticated user. - SQL injection fixadded
escapeIlike()to decisions search route to prevent injection via unsanitized string interpolation. - Error sanitizationreplaced 38 instances of raw Supabase error leaks with
sanitizeDbError()across all 10 MCP route files. - CLI path traversalreject
..components in agent file write paths. - HTTP timeouts30s fetch timeout on MCP server, 30s request + 10s connect timeout on CLI.
Performance
- DB indexes10 B-tree indexes on FK columns across sessions, tasks, letters, and related tables.
- MCP searchreplaced
select('*')+ JS filtering with DB-level ILIKE filtering and per-type result limits. - Dashboard countscapped unbounded count queries with BATCH_LIMIT (10,000).
Fixed
- force-dynamicadded
export const dynamic = 'force-dynamic'to 59 cookie-dependent API routes to prevent Next.js from statically caching auth-dependent responses.
Community license tier with full quota enforcement
Community Tier
- Hard quota limits1 seat, 1 customer, 10 private-only projects, 50 sessions, 10 decisions, 1 GB storage.
- Quota enforcementsession, decision, storage, skill, and agent file creation blocked when limits are reached across both webapp and MCP APIs.
- Seat checknew user registration blocked when seat quota is exceeded.
- Private-only projectscommunity tier restricted to private project visibility.
License UI
- Community badgenew tier badge styling for community accounts.
- Quota gaugessessions and decisions usage gauges added to the license page.
- Plan comparison4-column grid comparing Community, Professional, Business, and Enterprise tiers.
Landing page preference, agent file assignments, and admin mail
User Experience
- Landing page preferenceconfigure which page to show after login (Settings > Landing Page) with 2-level dropdown supporting direct project navigation.
- Cross-project navigationnew Coordination menu item (placeholder for linked-projects feature).
Agent Files
- Project assignmentsM:N junction table for assigning global agent files to specific projects with version pinning and enable/disable toggle.
- Scoped export
af_exportnow returns project-level assignments instead of all tenant files. Project directives embedded into agent-category files duringnexus pull.
Email & Notifications
- Project membership emailsrich HTML templates for invite, role change, and removal notifications.
- Admin mail inboxfull admin UI for inbound emails from Resend webhooks with search, pagination, bulk delete, and reply functionality.
Security
- Admin mail hardeningILIKE injection prevention, UUID validation, from-address allowlist, iframe sandbox XSS protection.
Skill editor UX overhaul
Editor Improvements
- Source-first editingskill editor now opens in markdown source view by default with a segmented Source/Preview toggle.
- Integrated uploadUpload .md button moved directly into the editor toolbar alongside the source/preview toggle.
- Tags in control panetag picker relocated from the markdown area into the settings panel alongside command name and description.
- Status badgeskill status now appears right-aligned in the actions bar next to Edit / Save / Cancel.
Lifecycle Management
- Danger Zonenew section with archive/unarchive and permanent delete (slug-based confirmation), replacing the top-bar archive button.
- DELETE APInew endpoint for permanent skill deletion with full cascade (tags, commands, versions, assignments, reviews).
Skill Creation
- Blueprint templatedownloadable skill-blueprint.md with all recommended sections, hosted on S3/CloudFront.
- New default tagsWorkflow, Code Quality, DevOps, Testing, Documentation, Agent, and Init added to the tag library.
Code audit, security fixes, and dead code cleanup
Bug Fixes & Security
- MCP auth profile lookupfixed wrong column in profile query causing MCP tokens to always get displayName: null.
- MCP actor identityresolveActor now returns auth user UUID instead of surrogate PK.
- Decision links securityDELETE handler now scopes by decision_id, preventing cross-project link deletion.
- Guarded request.json()7 API routes now catch malformed JSON payloads instead of crashing.
Performance
- Query parallelization6 dashboard pages now run independent queries via Promise.all (settings, customers, sessions, letters, session detail, decision edit).
- License quota check5 independent quota queries parallelized; eliminated wasted query that fired but was never awaited.
- Replaced framer-motionmobile nav animation now uses pure CSS keyframes (~130KB removed from client bundle).
Cleanup
- Removed 4 unused npm depszod, dayjs, react-use-measure, framer-motion.
- Removed ~64 template assetsplaceholder images and SVGs from Radiant/Tailwind UI template across 12 directories.
- Dead code removaldeleted unused proxy.ts, dead CSS keyframe, and no-op useEffect.
- Error boundariesadded root not-found.tsx (branded 404) and error.tsx (root error boundary).
- MCP auth refactordeduplicated token logic by importing shared utilities from api-auth.ts.
Code quality, performance, and consistency fixes
Performance
- N+1 query eliminationletters and sessions list pages now fetch message/entry counts in a single batch query instead of one query per row.
- Query parallelizationcustomer detail page now runs projects, contracts, and profile queries in parallel via Promise.all.
- Loading skeletonnew dashboard loading.tsx provides a shimmer placeholder during RSC navigation.
Code Quality
- Safe error handlingnew shared toApiError() utility replaces 29 unsafe error casts across 13 API routes with proper type checking.
- Unified status stylesconsolidated 7 duplicate STATUS_COLORS maps into a single shared module, fixing color inconsistencies between pages.
- Explicit column selectsskills API GET now uses explicit column lists instead of .select('*').
- Error observability5 silent catch blocks now log warnings for easier debugging.
- Removed debug loggingcleaned up console.log left in project delete endpoint.
Skill versioning, markdown editing, and UI refinements
Skill Versioning
- Version history panelskill detail page now shows all version snapshots with view/switch capability. Older versions display read-only with amber banner.
- Create new versioncheckbox in edit mode saves content as a new version (v{N+1}) and resets status to draft, requiring a new review cycle.
- Version seedingexisting skills with version > 1 now have backfilled snapshots, making all versions selectable in the project skills dropdown.
Skill Editing
- Markdown preview/sourceskill content uses the same MarkdownDocument component as ADRs, with live preview and source toggle.
- File uploadupload .md/.txt files directly in edit mode. Frontmatter extraction for description.
- Custom command slugeditable command name when auto-generate is enabled (default derives from skill ID).
UI/UX
- Clickable skillsskill names and IDs in both the management table and project skills view are now clickable links to the skill detail/edit page.
- Governance widgetredesigned Accept/Reject buttons with icons, joined vote button group, and right-aligned controls.
- Billing fontsplugin prices now match the License Fee row styling.
API
- Versions endpointnew
GET /api/skills/[id]/versionsreturns all version snapshots with metadata and accepted-by profiles. - Enhanced PATCH
PATCH /api/skills/[id]now supportscreate_new_versionandcommand_slugparameters.
Performance hardening, error recovery, and dead code cleanup
Performance
- Query parallelizationdashboard, project detail, and decision detail pages now batch independent Supabase queries into parallel
Promise.allcalls, reducing waterfall latency by 200–400ms per page - N+1 elimination
getProjectsWithStatsreduced from 4N count queries to 4 batch queries;getCustomerSummariesfrom N to 1; skills export version lookup from N to 1 - Explicit column selectionreplaced 10 high-value
.select('*')instances with explicit column lists across pages and API routes
Error recovery
- Error boundariesadded
global-error.tsx,dashboard/error.tsx, andprojects/[id]/error.tsxwith retry buttons and fallback navigation
Cleanup
- Removed 10 unused component files (~3,000 lines of dead code including a 1,050-line keyboard component with framer-motion)
ADR governance, change requests, license UX, and performance audit
ADR governance
- Governance widgetunified panel with status badge, lifecycle buttons (submit, accept, reject), and community voting with required reason on downvotes
- Change request flowaccepted ADRs show a “Request Change” link; the form creates a new ADR with
supersedespointing to the original
Dashboard & navigation
- Projects section moved before Customers; starred projects sort first
- Recent sessions now link directly to session detail pages
- Recent decisions link to ADR detail with full governance context
- Planning feature removed from sidebar and project overview (deferred to v1.0)
- Top progress bar for page transitions via nextjs-toploader
Skills & directives
- Skills table restructured with
skill_idas primary identifier and merged name/description column - Version-pinning dropdown in project skills manager replacing pin/unpin buttons
- Directives priority changed to
high / medium / lowenum with colored badges and client-side sort; body made optional
License & billing
- Enterprise tier badge with black/gold styling and circle icon; “Active” label moved to the right
- Billing restructured as line-item rows with right-aligned amounts
- Three plugin line items: OpenCode Audit, Advanced Sessions, External Encryption Provider
Quality & safety
- Danger zone uses project slug instead of name for delete confirmation
- Fixture letters replace test data with
[Fixture]prefix - Architectural audit: identified 7 categories of improvements including query parallelization, N+1 fixes, missing error boundaries, and dead code cleanup
CLI install pipeline, MCP npm mode, preflight checks
CLI (nexus-cli v0.1.1)
- install.sh oneliner
curl -fsSL .../install.sh | bashwith platform detection, pre-built binary download from GitHub Releases, SHA256 checksum verification, and cargo fallback - GitHub Actions CI/CDtest matrix (ubuntu + macos), clippy, rustfmt, and automated 4-target release builds (aarch64-apple-darwin, x86_64-apple-darwin, x86_64-unknown-linux-gnu, aarch64-unknown-linux-gnu)
- nexus preflightenvironment readiness checks (git, node, npm, npx, config, credentials, API reachability, workspace, MCP configs)
- --shadowed-ai flag on initdeprecated in v0.6.4 (superseded by automatic .git/info/exclude management, ADR-0029)
- --yes / -y global flagnon-interactive mode for CI/CD and scripted usage
MCP Server (nexus-mcp v0.6.1)
- npm distribution
npx @gwdn/nexus-mcpfor zero-install MCP server startup. CLI default switched from local to npm mode viamcp_sourceconfig key - 38 MCP tools total (added task_list, doc_list, session_delete)
Platform
- Updated Tools page with current MCP/CLI versions, npm install instructions, full command reference, and correct tool counts
Project stars, ADR voting, directives, and session filters
Project management
- Star/unstar projects: starred projects appear first in all listings (dashboard, project list, project detail)
- Project directives: configurable rules and guidelines per project with categories, priorities, and enable/disable toggles
ADR governance
- Community voting on architecture decisions: up/down votes with net score display
- ADR linking in session timeline: clickable ADR badges and auto-detection of ADR-XXXX references in notes
Session improvements
- Status tab filter: All / Resumable / Closed with live counters
- Timeline date-range filter with quick presets (today, 7d, 30d, 90d) and custom from/to inputs
Infrastructure
- Cache revalidation endpoint for on-demand Next.js cache flushing via
make revalidate - Three new database migrations: project_stars, decision_votes, project_directives
Session UI, governance actions, and skill reviews
Sessions
- User attribution with avatar display and display names in session timelines
- Markdown rendering for session summaries and entry content
- Formatted timestamps with relative time display
ADR governance
- Governance action buttons: submit for review, accept, and reject with confirmation dialogs
- Decision comments system with append-only chronological thread
- Decision links and file attachments management
- Entity tagging system for decisions
Skills & reviews
- Review workflow for skills: submit, accept, reject, request revision with inline comments
- Skill detail page with full content view and review status
MCP API layer, skill management, and expanded dashboard
MCP integration
- Full MCP API backend: identity resolution, knowledge search, memory retrieval, sessions, tasks, letters, governance, skills, and reviews
- PAT-based authentication with project-scoped permission checks
Skill management
- Skill creation and editing with markdown body, versioning, and auto-generated OpenCode commands
- Project skill assignments with version pinning and enable/disable
- Skill export endpoint for CLI workspace synchronization
Dashboard
- My Work section with pending reviews and open tasks
- Project detail pages for sessions, decisions, tasks, letters, research, planning, and ingest
- Team management page with role assignment
Performance, edit forms, and deployment automation
Performance
- Self-hosted Switzer fonts replacing external fontshare dependency for faster LCP
- Navbar bundle optimization: framer-motion replaced with CSS keyframes, Supabase SDK replaced with lightweight cookie heuristic
- Lazy-loaded Supabase client for sign-out to reduce initial JS payload
Edit forms
- Customer edit page with fieldsets for general info, contact, billing address, and notes
- Project edit page with fieldsets for general info and timeline
- Edit buttons on customer and project detail pages
Landing page
- Redesigned hero with “Gatewarden / Nexus” heading and watermark logo
- Cool Steel gradient replacing the original color scheme
- Footer promotion line with Gatewarden Labs branding
Login
- Restructured login page with email/password above GitHub OAuth
- Forgot password flow with Supabase password reset email
DevOps
- GitHub Actions post-deploy healthcheck verifying site and login page availability after each push to main
Multi-step wizards, agent setup, and document management
Project creation wizard
- Five-step wizard: basics, timeline & budget, document upload, agent setup, and review
- Offer and SOW PDF uploads with S3 storage and CloudFront delivery
- Agent configuration: CLI flavor (OpenCode / Claude CLI) and plugin selection
- Sidebar info panel with step guide and contextual tips
Customer creation wizard
- Four-step wizard: basics, contact & billing, contract upload, and review
- Adaptive flow: internal customers skip contact, billing, and contract steps automatically
- Structured billing address with street, postal code, city, and country fields
Data model
- New project_agents table for agent assignments per project
- New project_offers table for offer/proposal document storage with lifecycle states
- Extended document upload API to support offer, SOW, and contract types
Project visibility, private projects, and RLS fixes
Data model
- Project visibility scopes: private, members only, and team
- Optional customer assignment: private projects no longer require a customer
- Owner tracking on projects for private project access control
- Fixed RLS infinite recursion in project membership policies using SECURITY DEFINER helpers
UI improvements
- Redesigned project creation form with visibility selector and conditional customer field
- Project list shows lock icon for private projects
- Non-private visibility options disabled when no customers exist
Internal customers and tag system
Data model
- Internal customer flag: marks customers like Gatewarden Labs as internal, hiding contact, billing, and contract fields
- Normalized tag system with shared tags table and polymorphic entity_tags junction supporting 11 entity types
UI improvements
- New Customer form: internal customer checkbox that conditionally hides contact fields
Landing page redesign, CRUD forms, and quality improvements
Landing page
- Hero banner with gradient background, version pill, and quick-access buttons
- Public navigation with dark “Get access” sign-up button
- Roadmap page with timeline, status legend, and sidebar
- Roadmap link added to navigation and footer
New features
- New Project form with customer selector, slug auto-generation, and status picker
- New Customer form with industry, contact info, and notes fields
- POST /api/projects endpoint for project creation
- Admin-request widget on Dashboard and Projects empty states
Code quality
- 46 audit findings resolved: DB-backed rate limiter, typed Supabase queries, N+1 fixes, pagination
- Full type safety with generated Supabase types across all API routes and pages
- Fixed column name mismatches exposed by strict Database generic
- Fixed DataInteractive SSG crash in link component
- Dashboard logo alignment fix
Initial platform launch
Initial Launch
- GitHub OAuth authentication with automatic profile creation
- Project-scoped RBAC with admin, editor, reviewer, and viewer roles
- Long-term memory schema: sessions, decisions, research, planning, letters
- MCP server with 11 tools across 3 layers (knowledge, coordination, governance)
- API key system for delegated agent access
- Customer, contract, and SOW management
- S3 document storage with CloudFront delivery
- Transactional email via Resend (nexus.gatewarden.eu domain)
- Netlify deployment with CSP headers, HSTS, and security hardening