Skip to content

Develop#35

Merged
DannyNs merged 84 commits into
mainfrom
develop
May 19, 2026
Merged

Develop#35
DannyNs merged 84 commits into
mainfrom
develop

Conversation

@DannyNs
Copy link
Copy Markdown
Collaborator

@DannyNs DannyNs commented May 19, 2026

No description provided.

DannyNs added 30 commits March 20, 2026 16:00
Teardown now discovers and removes any devglide-* MCP registrations
not in the current server map, plus cleans legacy ~/.claude/.mcp.json
entries. Prevents stale entries from renamed/removed apps lingering.
- Shell: remove manual auto-scroll tracking (xterm handles it natively),
  focus first visible pane when active pane is hidden by project filter
- Test: reduce noisy SSE reconnect logging
- Voice TTS: replace boolean stop flag with session counter for reliable
  cancellation, add retry on cold WebSocket flake, simplify WSL playback
- Dashboard: stop event propagation on project dropdown arrow keys,
  fix dropdown max-height and overflow
- Dashboard XSS: escape project name/path in innerHTML and attributes
- SVG XSS: remove SVG from allowed MIME types, add nosniff + sandbox headers
- Kanban attachment delete: fix stale __dirname path, use getUploadsDir(),
  add file cleanup to MCP delete tools
- Workflow list: use nodeCount/edgeCount instead of .length on missing arrays
- Workflow update: add Zod validation to PUT route
- Log path semantics: extract shared safeLogPath(), fix MCP tool descriptions
- Markdown XSS: add sanitizeHtml() to ui-utils, wrap all marked.parse()
  outputs, add link/image renderer overrides blocking dangerous protocols
- Symlink traversal: add realpath() resolution to coder safePath() and
  shell preview route, with ancestor walking for write targets
- Whisper integrity: add SHA-256 verification for prebuilt binary downloads
  (placeholder hashes — replace before shipping)
- SSRF: create shared ssrf-guard with DNS resolution check and manual
  redirect following, replace local isBlockedUrl() in http-executor and
  shell proxy
- Priority enums: unify REST VALID_PRIORITIES to [LOW, MEDIUM, HIGH, URGENT]
  matching MCP tools and UI
- TTS: remove CJS require() in ESM context, scope uncaughtException and
  unhandledRejection handlers to TTS-related errors only
- Frontend escaping: add shared escapeHtml/escapeAttr to voice page, remove
  local duplicates; test and shell pages confirmed safe (DOM APIs only)
- Shared domain contracts: add KANBAN_PRIORITIES, KANBAN_ITEM_TYPES,
  KANBAN_DEFAULT_COLUMNS to shared-types; update all consumers
- Centralize helpers: features.ts imports DEFAULT_COLUMNS from mcp-helpers
- Module structure: delete vestigial coder/server.js and keymap/server.js,
  clean up their package.json files
- Error handling: create shared asyncHandler/errorHandler middleware,
  mount in server.ts after all routers
- Type discipline: add AttachmentRow/CountRow/MaxOrderRow to db.ts,
  replace 8 as-any casts in kanban tools with proper types
- Request validation: infrastructure in place, pattern established
- issues.ts: add Zod schemas (create, update, reorder, content) and
  migrate 5 handlers to safeParse; replace 2 as-any casts
- features.ts: add Zod schemas (create, update) and migrate 2 handlers
  to safeParse; replace 5 as-any casts with proper row types
- attachments.ts: replace 2 as-any casts with inline attachment types
- Shell: deduplicate standalone MCP with router modules — add ShellEmitter
  interface, refactor spawnGlobalPty to accept emitter param, rewrite
  standalone index.ts to import from pty-manager/shell-config/shell-state,
  remove duplicated killPty from mcp.ts
- Kanban: add Zod schemas to issues.ts (5 handlers) and features.ts
  (2 handlers), replacing manual validation with safeParse
- Types: replace 9 remaining as-any casts in kanban routes with proper
  row types
- Remove process-level TTS error hooks; rely on try/catch + Node defaults
- Add Zod validation to all remaining HTTP routes (shell, coder, kanban GET, features params, workflow params/queries)
- Replace bare res.status().end() with structured JSON in log routes
- Remove any/as-any in workflow, voice, mcp-utils (typed OpenAI interfaces, McpHttpRequest/ServerResponse)
- Extract shared createShellMcpState() factory and shutdownAllPtys() for shell service boundary
- Extract shared createKanbanItem() helper for kanban executor dedup
- Add HTTPS IP pinning to SSRF guard via custom https.Agent with lookup callback
- Compute real SHA-256 hashes for whisper prebuilt binaries
- Escape modal button data in workflow frontend
- Add server-side graph validation to workflow create/update routes
- Move shell state/config/pty-manager to src/apps/shell/src/runtime/
New chat app (devglide-chat) enabling multiple LLM instances and users to
communicate in a shared room via @mention addressing. Includes MCP server
(5 tools), REST API, JSONL message persistence, PTY injection for message
delivery, automatic pane lifecycle management, and Codex config integration.
…c filtering to chat

Replace @mention-gated delivery with full broadcast — all messages now reach
every participant, with @mentions serving as a semantic signal for who should
act. Introduce per-project Rules of Engagement (returned on join, CRUD via
REST) so LLMs know when to respond vs stay silent. Add detach/reclaim so
participants survive MCP session restarts without losing their assigned name.
Add #topic extraction, storage, filtering (API + dashboard dropdown), and
sequential per-pane PTY delivery queues with epoch-based stale cancellation.

Dashboard: rules editor overlay, topic badges, detached member indicators.
Tests: chat-registry, chat-rules, chat-store, chat router.
…topics

Shared-UI foundation:
- Create src/packages/shared-ui/ with AppPage base class, createApi/createScopedQueries
  composition helpers, shared-ui.css (common primitives), and components (header, modal,
  toast, search-bar)
- Wire /shared-ui static serving and CSS link in index.html

Phase 2 migrations (prompts, vocabulary):
- Replace duplicated api(), search, delete dialogs with shared-ui imports
- Switch to shared CSS classes (group, entry-row, filter-select, search-input)
- ~250 lines duplicated CSS removed

Phase 3 migrations (chat, keymap, log, test):
- Add createHeader() and app-page class to all 4 apps
- Remove duplicated root/header/scrollbar CSS
- Log keeps custom header for clickable brand (data-action)

Chat improvements:
- Replace random name pool with model-paneId naming (e.g. "claude-1")
- Remove topics feature end-to-end (extraction, filtering, UI, API)
- Add claim-confirmation requirement to engagement rules
Add search input (filters by name/description, debounced 150ms) and sort
dropdown (name, issue count, recently updated) to the feature list header.
Shows filtered count when search is active with empty state for no matches.
State resets on unmount and project change.
Move search input from header-actions into a .board-search container below
the header, matching the existing board view's search bar pattern. Adds
clear button (x), reuses .search-bar/.search-input/.search-clear CSS
classes from the board. Sort dropdown sits beside the search bar.
Extend _handleSearchKeydown to find both board and feature-list search
inputs. The / shortcut now focuses whichever search is visible, and
Escape clears the correct search state for each view.
Remove the unrequested sort dropdown. Feature list search now uses the
exact same markup and CSS as the board search — just .board-search >
.search-bar > .search-input + .search-clear. No extra controls.
Phase 4 shared-ui migration (composition pattern):
- Coder: createApi, createHeader, confirmModal; removed custom toolbar + confirm dialog
- Kanban: createHeader, confirmModal, shared-ui toast; replaced delete confirm dialogs
- Shell: createHeader; socket-only app, minimal migration
- Workflow: createApi, showModal/confirmModal, shared-ui toast; replaced custom modal/toast
- Log: restored original root styles (opted out of app-page per user confirmation)
- Fix duplicate const newBtn in workflow-list.js

Chat: sort member list alphabetically in listParticipants()
Server automatically assigns one responder per unaddressed user message
via round-robin. Eliminates claim spam and peer confirmation loops.

- Add assignment state to chat-registry (round-robin, idle reassignment)
- Broadcast assignedTo metadata on user messages
- Show ON DECK / ACTIVE badges in member list and message rows
- Simplify Rules of Engagement (respond if assigned or @mentioned)
- 20s idle timeout with automatic reassignment
- Explicit @mention bypasses auto-assignment
- Add ChatAssignment type and isAssigned field to participants
- Add regression tests for assignment, activation, reassignment
Unaddressed messages: all LLMs can share research (planning mode).
@mentioned LLM: only that LLM executes (execution mode).
No claims, no auto-dispatch, no timers.
Chat registry, store, and PTY delivery now use explicit project IDs
instead of relying on the global active-project singleton. This fixes
cross-project leaks when the dashboard switches projects while LLMs
remain joined to a different project's chat.

Key changes:
- Participant map keyed by (name, projectId) instead of just name
- Join resolves project from pane metadata, not global state
- Send, leave, detach, and deliverToPty all accept explicit projectId
- chat-store reads/writes JSONL scoped to the sender's project
- Pane numbering and limits scoped per project
- Added tests for cross-project isolation and project switching
Chat:
- Fix renderMessages() typo to renderAllMessages() for post-marked rerender
- Add Mermaid.js chart rendering with dark DevGlide-themed SVG output
- Mermaid placeholders survive sanitizeHtml, render after DOM insertion
- securityLevel: strict pinned, CDN load failure falls back to code blocks
- Add markdown rendering CSS (headings, tables, code blocks, blockquotes)
- Gitignore articles/ folder for draft content

Kanban:
- Add cross-feature move and full-text search capabilities
- Extend item tools, routes, DB helpers, and MCP helpers
- Add tests for cross-feature moves and FTS search
- Make nowIso() monotonic: track last timestamp, bump by 1ms on collision
  so polling clients always detect mutations
- Add order recalculation to HTTP PATCH cross-feature move path, matching
  the existing MCP tool behavior (append to end of destination column)
- Split large PTY writes into 1KB chunks with 50ms gaps to avoid
  buffer overflow and crossterm paste-burst detection
- Adaptive submit delay: 500ms base + 1ms/char (capped at 5s)
  so long messages get more time before CR
- Revalidate pane/session state between chunks to stop delivery
  if participant detaches or pane closes mid-burst
- Add tests for long-message chunking and mid-burst detach
Investigation, analysis, and discussion do not imply implementation
approval. Participants must wait for explicit execution instructions
before making code changes, even when the fix is obvious.
Replace chat-assignment-only status with PTY output monitoring that
reflects actual terminal activity. Each linked pane's output stream
is watched to detect working state (nontrivial output) and
awaiting-user state (known prompt patterns after quiescence).

Delta-based scanning prevents stale prompts from re-triggering.
Status precedence: reviewing > awaiting-user > working > idle.
Replace the old Planning/Execution two-mode rules with a comprehensive
10-section rules of engagement covering delivery model, discussion vs
execution mode, assignment semantics, ownership, and reporting. Simplify
chat member tag rendering by removing model name from display tags.
…g-user

Merge the reviewing state into working since the distinction added
complexity without actionable benefit. Add detection for LLM messages
that ask @user a question, automatically setting status to awaiting-user.
Allow PTY activity to override former review assignments and let
awaiting-user take precedence when a prompt appears.
…er type error

Update chat-rules test assertions to match the rewritten rules of
engagement text. Remove the unimplemented topic filter test from the
chat router. Fix TS2339 in the kanban PATCH handler where
updateFields.order was assigned outside its inferred schema type.
… src/ layout

Add devglide.manifest.json and scripts/check-structure.mjs to enforce monorepo
structure conventions. The checker validates app entrypoints, package names,
undeclared entries, MCP registry drift, and cross-app import boundaries.
Wired into pnpm build alongside turbo build and build-mcp.

Migrate chat, prompts, vocabulary, and workflow apps from root-level mcp.ts
to canonical src/mcp.ts layout. Update all router and index.ts imports.
Clean up stale artifacts (kanban/.next, server.log files).
Daniel Kutyła and others added 29 commits April 1, 2026 23:13
Introduces two new store modules for the pipe-upgrade feature:

- assignment-store: First-class Assignment entity with 9-state lifecycle
  (assigned→notified→acknowledged→payload_fetched→submitted, plus
  expired/reassigned/superseded/cancelled), state machine enforcement,
  optimistic concurrency, reassignment chains, stale access policy,
  TTL cleanup, event-sourced recovery, and injectable clock.

- payload-store: Authoritative payload storage with SHA-256 integrity
  hashing, content versioning, 2MB size limit, soft-delete with metadata
  preservation, archive/GC lifecycle, bulk pipe archival, storage stats,
  event-sourced recovery, and injectable clock.

Shared types (AssignmentStatus, PayloadStatus, transition rules) added
to types.ts. 70 tests covering both modules.
1. Recovery timestamp fidelity: rehydrateFromEvents() in both
   assignment-store and payload-store now restores original event
   timestamps after replay instead of stamping fresh ones. This
   preserves TTL calculation accuracy, audit trail fidelity, and
   correct recovery semantics.

2. Add retryAssignment() that creates a new attempt for the same
   assignee, marking the old assignment as 'superseded'. This is
   distinct from reassignAssignment (which changes the assignee).
   The 'superseded' status is now reachable in the implementation.

5 new tests covering retry, superseded lifecycle, and timestamp
fidelity during recovery. All 75 tests pass.
…cement

Task q4enb4g6 — Enforce lease-aware submit/read authorization:
- PIPE_LEASE_EXPIRED error code for expired-deadline rejection
- isLeaseExpired() using injectable clock
- submitStage() rejects submissions after lease deadline
- readPipeOutput() rejects reads from expired-lease holders

Task iwixg6lh — Client/tool contracts for assignment-based pipes:
- pipe-assignment-queries.ts: getAssignmentsForParticipant(), getAssignmentForPipe()
  with lease status (active/expired/none), deadline, role visibility
- pipe_list_assignments + pipe_get_assignment MCP tools (in mcp.ts)
- GET /pipes/assignments + GET /pipes/:id/assignment REST endpoints (in chat.ts)
- pipe_submit updated with optional assignmentId parameter

6 new tests covering lease expiry and assignment queries, all passing.
Remove duplicate ParticipantAssignment/getAssignmentsForParticipant from
pipe-assignment-queries.ts — re-export from pipe-store.ts (authoritative).
Only getAssignmentForPipe remains as new logic in the queries module.
…endpoints

Review fixes for q4enb4g6 and iwixg6lh:
- chat-registry.ts: lease-aware read guard in readPipeOutput() rejects
  expired-lease reads; listAssignments/getAssignment wrapper functions;
  import for pipe-assignment-queries
- mcp.ts: pipe_list_assignments + pipe_get_assignment MCP tools;
  pipe_submit updated with optional assignmentId parameter
- chat.ts router: GET /pipes/assignments + GET /pipes/:id/assignment
  REST endpoints; assignmentId added to submit schema

Note: includes claude-13's delivery integration changes (storePayload,
pipeDelivery hooks) and claude-11's reconnect recovery that were in the
working tree at commit time.
…reminder

- Add mobile FAB + bottom drawer for pipe monitoring on small screens
- Extract removeDevglideSectionsFromToml into bin/codex-config.js with tests
- Remove PTY_INTERACTION_REMINDER from chat delivery to LLM participants
- Add listAssignments mock to chat router tests
Move mobile FAB/drawer render calls above desktop collapse guard so
the mobile surface refreshes independently. Extract getMobilePipeFabState
as a testable pure function and add 7 focused tests for FAB badge state
and drawer data independence.
- Typography: introduce IBM Plex Mono as display font for brand, headings,
  modal titles — adds visual hierarchy distinct from JetBrains Mono body text
- Sidebar: enhanced active indicator with inset glow, better hover states
  with border accent, CSS tooltips for truncated service names
- Animations: page transition (df-view-enter) for app content, shimmer
  loading skeleton (df-skeleton), staggered list entrance (df-stagger),
  spinner for app loading state
- Accessibility: skip-to-content link, ARIA labels on sidebar/main,
  focus-visible ring on service items for keyboard navigation
- Mobile: 44px min touch targets on service items, project selector,
  project list items
- Token enforcement: fix z-index values to use design tokens, replace
  hardcoded modal overlay color with token-based color-mix, remove
  fallback hex values from toast notification styles
- Scrollbar: thin styled scrollbars on sidebar, service nav, dropdown
User requested removal of the mobile pipe monitoring drawer.
Removes FAB button, overlay, drawer markup, all associated CSS,
JS functions (renderMobilePipeFab, renderMobilePipeDrawerContent,
openPipeDrawer, closePipeDrawer), getMobilePipeFabState helper,
and 7 related tests.
Invite Agent:
- Add "+" button in members toolbar to open invite modal
- Fetches available CLIs from /invite/available API
- Shows agent cards with permission mode launch buttons
- Calls POST /invite to launch agent into chat room
- Glassmorphism modal matching df-modal design system

Rules of Engagement modal restyling:
- Replace hardcoded colors with design tokens
- Add glassmorphism (backdrop-filter blur), rounded corners
- Use df-font-display for header typography
- Add slide-up entrance animation
- Fix z-index to use --df-z-index-overlay token
- Align focus states with df-input patterns
…uto-accept

The previous -a never flag only disabled Codex's own approval prompts
but did not bypass the sandbox layer, preventing real file changes.
Remove invite-agent modal from chat UI and consolidate agent launching
under shell's "Add LLM" button. Reorder shell mount() to wire UI events
before xterm.js load so interactions work even if CDN fetch fails.
…ckground

- Update design tokens: darker neutral scale (near-black base) + sky blue (#7dd3fc) replacing teal
- Swap IBM Plex Mono fonts for Orbitron (headings) + Exo 2 (UI text)
- Add animated aurora ambient blobs behind app shell
- Delivery now resolves recipients from `to` param plus body @mentions
  combined; `@all` is the explicit broadcast token
- LLM messages with no recipients in either field are persisted but not
  PTY-delivered (token noise reduction)
- `expandToRecipients` tracks unresolved @mention tokens (unknown names,
  offline agents, unsupported @team-* until Phase 2)
- Dashboard shows inline warning on user messages when @mentions don't
  resolve: ⚠ @name not found — message not delivered via PTY
- Status side-effects use concreteAssignees only — @ALL does not mark
  all agents as working
- Option B migration: unaddressed user messages still broadcast
- Updated MCP tool descriptions, Rules of Engagement (rule 11), and
  CLAUDE.md template to reflect new delivery semantics
- Added @ALL to mention autocomplete with broadcast hint
- Reduced font-size of empty pipes hint text
…nt UI

Adds the full team orchestration layer to the chat app:

Backend:
- team-store: durable per-project team with member/role assignments
- team-roles: built-in role templates (Tech Lead, Implementer, Reviewer, Tester, Kanban)
- team-command-parser: /team slash command parser (create, run, add, remove, status, ...)
- team-run-store/playbook: playbook dispatch and run tracking
- team-safeguards: execution guard rails
- team-pty-briefings: role briefing injection on chat_join
- team-assist-router: intercept unaddressed imperatives in assist mode
- chat.ts: /team REST endpoints, MCP team tools wired up

UI (page.js / page.css):
- Team panel: roster, proposals, run chip, pause/resume/disband controls
- Members dialog: role assignment dropdown, × remove button on roster rows
- Fixed participantName field lookup (was checking name/participant/member, missing participantName)
- Added /team to slash-command hint popup
- Members dialog: removed redundant Done button, moved Close to bottom-right footer
- Reduce member list and team roster density; remove row dividers
- Flatten team proposals to inline rows with subtle separators
- Normalize role/status chips to lighter token-based styling
- Roles popup: remove Done button, move Close to bottom-right
- disbandTeam: clear members array on disband
- renderTeam: treat disbanded teams as no-team (hide card/badge/meta)
Removes the full team orchestration layer (team-assist-router,
team-command-parser, team-pty-briefings, team-roles, team-run-playbook,
team-run-store, team-safeguards, team-store) and replaces it with a
lightweight capability-based role system.

- roles.ts: new catalog with exclusive/multi cardinality, no handoff/delegation
  semantics
- chat-registry: assignRole now validates the target is a connected LLM
  participant, preventing phantom holder assignments
- mcp.ts: updated role tool descriptions to match new catalog (tech-lead, not planner)
- page.js/css: Team panel removed, role assignment wired into Members list
- 71/71 tests pass
Snapshot of in-flight work captured as a recoverable checkpoint
before the role/team-orchestration layer is stripped:

- chat: role expansion (queueRoleBriefing, deliverRoleBriefing,
  getParticipantRoleTemplate, role briefing reminder throttling,
  rule of engagement #12 "Stay in role scope", expanded #2/#3,
  scoped projectId on chat REST endpoints, mcp-session-id header
  on /roles/assign)
- chat tests: new roles.test.ts, expanded chat-registry tests,
  expanded routers/chat tests
- ui: design-tokens updates, src/public/style.css, page.css/js
- docs/old/: 36 styleguide demo HTML pages
- CLAUDE.md: scoped projectId chat REST documentation
Strips the persistent participant role layer from the chat system,
restoring the chat surface to its pre-roles shape. The replacement
coordination model will be designed in a follow-up brainstorm.

Removed (role-only):
- src/apps/chat/services/roles.ts
- src/apps/chat/services/roles.test.ts
- src/apps/chat/services/chat-registry.roles.test.ts

Surgically stripped from shared files (non-role behavior preserved):
- chat-registry.ts: removed assignRole/unassignRole, rolesByProject map,
  getParticipantRoleSlug/Template, queueRoleBriefing + deliverRoleBriefing
  + buildRoleBriefingBody, role briefings on join/reclaim/leave,
  Your role/Assigned by:user PTY header tags, role lookup in
  listParticipants. Lease watchdog, per-stage deadline timers, pipe
  machinery, targeted PTY delivery, and session unification all
  preserved.
- chat-rules.ts: dropped rule #12 "Stay in role scope", removed
  Tech Lead / @Implementer references from rules #2/#3.
- mcp.ts: removed role_assign / role_unassign / role_list_roles tools,
  removed role help text from instructions block, removed unused
  getChatMcpHttpSessionEntry helper.
- pipe-delivery.ts: removed chatRole parameter and "| Your role: X"
  header suffix from formatCompactNotification.
- types.ts: removed role field from ChatParticipant.
- routers/chat.ts: removed /roles/templates, /roles/assign, and
  /roles/:participantName REST endpoints + listRoles/isValidRoleSlug
  imports.
- public/page.js: removed _roleTemplates state, role select dropdown
  in member list, /roles/templates fetch on init, role assignment
  change handler.
- public/page.css: removed .chat-member-role-select styles.

Tests updated:
- chat-registry.test.ts: removed role-related tests, simplified pty()
  helper to drop role/tech-lead authority options.
- chat-rules.test.ts: removed Rule 12 / role-boundary contract test.
- mcp.test.ts: removed role_list_roles + MCP-session-id role assign
  tests.
- routers/chat.test.ts: removed self-role-assignment rejection test
  + role mock helpers.
- pipe-delivery.test.ts: removed assignee-role compact-header test.

Untouched:
- All pipe primitives (pipe_submit, pipe_read_output, pipe_get_assignment,
  pipe_list_assignments) and pipe-stage role labels (fan-out, stage-output,
  final, etc. — pipe mechanism, not user persona).
- Targeted PTY delivery + unresolved-target warning.
- Lease watchdog + per-stage deadline enforcement in chat-registry.ts.
- REST/MCP session unification, pane collision handling.
- Per-project chat history JSONL and per-pipe JSONL.
- Per-project rules-of-engagement override mechanism.

Verification:
- pnpm build: passes (type-check clean, all MCP bundles built).
- chat test suite: 539 passing, 1 failing (the failing test —
  pipe-store.test.ts isLeaseExpired returns true when past deadline —
  is pre-existing on the WIP checkpoint and unrelated to roles).

Migration:
- Run `devglide teardown && devglide setup` after upgrade to refresh
  ~/.claude/CLAUDE.md if it carries stale role-coordination text.
- Address by name (@claude-n, @codex-N) — no @Reviewer / @Implementer /
  @Tech-lead until the replacement design lands.
Defensive checkpoint so the upcoming KB removal is git-recoverable.
Captures the untracked compose-lane work before deletion.
Removes the entire knowledge-base app, its routers, server mounts, MCP
registration, dashboard nav, manifest entries, and structural cleanup
machinery. The compose-lane wiki builder is gone with it.

Files deleted:
  - src/apps/knowledge-base/ (entire app tree, 24 files)
  - src/routers/knowledge-base.ts + 2 router test files

Files updated (line ending normalization or already restored to HEAD):
  - src/server.ts: drop KB router import, static mount, API mount, MCP mount
  - bin/devglide.js: drop knowledge-base from mcpServers
  - bin/claude-md-template.js: drop devglide-knowledge-base + KB v2 sections
  - devglide.manifest.json: drop knowledge-base app entry
  - scripts/build-mcp.mjs: drop knowledge-base from servers list
  - scripts/check-structure.mjs: keep hyphenated-key parser, drop KB example
  - src/packages/paths.ts: drop KNOWLEDGE_BASE_DIR
  - src/public/index.html: drop /app/knowledge-base/page.css link
  - src/public/app.js: drop knowledge-base nav entry
  - CLAUDE.md: drop Knowledge Base bullet, scoping table row, dir tree node
  - pnpm-lock.yaml: regenerated after workspace removal

Verified post-removal:
  - pnpm build (typecheck, structure check, MCP bundle build) — clean
  - dist/mcp/knowledge-base.mjs stale bundle removed
  - repo-wide grep across src/, bin/, scripts/, CLAUDE.md, manifest, package.json
    — zero residual references
  - global ~/.claude/CLAUDE.md devglide-knowledge-base section removed

The compose-lane work is preserved in checkpoint commit c752310 in case
recovery is wanted.
@DannyNs DannyNs merged commit a2584ee into main May 19, 2026
1 check failed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant