Remove the Back button and its sessionStorage return-URL stash
logic. Add UserMenu to the right side of the admin topbar,
providing consistent navigation to all surfaces and eliminating
the infinite-loop problem (Back → / → admin → Back → ...).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Remove System Prompt, Default Model, Policies (BYOK/personas/KB),
Web Search, Auto-Compaction, and Memory Extraction sections — all
chat/AI features gutted in Phase 0. Surviving admin settings:
Default Surface, Registration, Banner, Message Bar, Footer, Vault,
Email.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Remove all chat-era fields from user settings General section
(Default Model, System Prompt, Max Tokens, Temperature, Show
Thinking). Replace with a Default Surface dropdown that lets
users override the global admin-configured landing page.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Mark all v0.2.5 items as complete. Add changelog entry covering
dead code removal, template cleanup, UI fixes, and PoC docs.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Rename "Chat Defaults" heading to "Defaults" in settings general
- Guard sw.api.models.enabled() call (crashes when no providers
are configured since models API returns undefined)
- Verified: admin, settings, login surfaces render correctly in
both light and dark themes at desktop viewport
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add emoji icon field to hello-dashboard, icd-test-runner,
sdk-test-runner, and team-activity-log manifests
- Create README.md for tasks and schedules packages marking them
as Proof of Concept with documented graduation criteria
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Remove seed_helpers.go (SeedTestMessage, SeedTestMessages,
SeedTestCursor — all unused, channel/message features gutted)
- Rename channel- prefixed test paths to test- in storage tests
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Remove "chat" from surface disable guard (only admin needs it)
- Remove "chat" from IsSurfaceEnabled always-on check
- Remove unused fmt.Sprintf references in team stores
- Update stale comments referencing personas and chat surfaces
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Delete unused Grant struct (persona-era, zero references)
- Delete CompositeModelKey (never called)
- Remove dead comment-only type stubs (NoteGraph, ProjectChannel, etc.)
- Remove empty Chat/Channel event sections from route table
- Remove dead chat.typing/channel.typing condition in WS subscriber
- Update bus doc examples and test labels to use real event names
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Delete ~300 lines of dead CSS for gutted chat, channel, project,
notes, and editor-chat features. Also remove router-picker,
sb-folder, and sidebar-bottom classes with zero HTML references.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Remove chat-pane.html (defined but never invoked by any surface).
Update doc comments in pages.go to reflect current surfaces.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Delete references to sw-chat-pane.css, sw-notes-pane.css (base.html)
and chat.css (workflow.html) — none of these files exist on disk.
Remove misleading "removed in v0.37.10" comments.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Phase 0 (Steps 1-10) is done. Codebase gutted from ~800 files/100K+
lines to 462 files/75K lines. K8s deploy live, CI green, login→admin
verified. Main should be protected — all future work via PRs.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Regex cache-header locations (~* \.(css|js)$) used root directive,
which caused 404s when BASE_PATH is set (e.g., /test/css/app.css
looked for /usr/share/nginx/html/test/css/app.css). Moved regex
locations inside the alias block so they inherit the path stripping.
Also added healthz/ prefix match for liveness/readiness probes.
Tested with BASE_PATH=/test: health, login, CSS, JS all return 200.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- nginx: use alias for BASE_PATH fallback so static assets resolve
correctly when deployed under a sub-path (fixes white page on K8s)
- base.html: remove dead template refs (chat, notes, projects) that
caused html/template to fail silently with Content-Length: 0
- login hero: rebrand from "Chat Switchboard" to "Switchboard Core",
update tagline and feature pills to reflect platform pivot
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The chat surface (which owned /) was gutted, leaving no root route.
Now / redirects to /admin as the default surface. Configurable
default surface planned for v0.2.0.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- nginx.conf → nginx.conf.template with ${BASE_PATH} in all locations
- NGINX_ENVSUBST_FILTER=BASE_PATH so nginx vars ($host, $uri) are preserved
- Entrypoint injects BASE_PATH into frontend HTML/JS (%%BASE_PATH%% → actual)
- Fixes: /test routes falling through to static SPA, %%BASE_PATH%% visible in URL
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The unified image uses nginx on port 80 as the entrypoint, which
reverse-proxies to the Go backend on 127.0.0.1:8080 internally.
K8s was exposing 8080 directly, bypassing nginx entirely.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- k8s/backend.yaml → k8s/switchboard.yaml (already renamed)
- Deployment/Service name: switchboard-be → switchboard
- Removed component:backend labels (single image, no component split)
- Ingress: all paths route to switchboard service on :8080
- CI: updated manifest render, apply, and rollout references
- Removed stale extractor sidecar and extraction env vars
- Updated CHANGELOG and ROADMAP with CI fixes and design decisions
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
k8s/backend.yaml referenced ${BE_IMAGE} but the workflow env
defines ${IMAGE}, causing envsubst to produce an empty image
name (InvalidImageName). Also consolidated the summary table
to single image line since FE/BE are merged.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The rollout step referenced deployment/switchboard${SUFFIX} but the
k8s manifest names the deployment switchboard-be${SUFFIX}, causing
a NotFound error during rollout verification.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The k8s/backend.yaml template used BE_-prefixed env vars
(BE_MEMORY_REQUEST, etc.) but the CI workflow outputs them
without the prefix, causing envsubst to produce empty strings
and K8s to reject the deployment.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
CI pipeline: replace separate FE + BE image builds with single unified
Dockerfile. Remove FE_IMAGE, FE_REPLICAS, FE_* resource vars. Simplify
build/push/deploy to single IMAGE. Remove frontend.yaml k8s manifest.
Remove provider integration test env vars (PROVIDER, PROVIDER_KEY,
VENICE_API_KEY). Remove EXTRACTION_CONCURRENCY.
Delete server/Dockerfile (backend-only image, superseded by root
Dockerfile). Delete k8s/frontend.yaml (no separate FE deployment).
Update ROADMAP: steps 5-7 and 9 marked complete. Step 8 (ICD) partial.
Step 10 (smoke test + tag) is all that remains for v0.1.0.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Delete Dockerfile.frontend and docker-entrypoint-fe.sh (single-image
decision per ROADMAP). Remove gutted /chat, /notes, /projects routes
from nginx.conf. Fix Chat Switchboard branding in entrypoint and
.env.example. Update DB names to switchboard_core, remove dead
Extraction config.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>