openalice-atlas
atlas working here[Atlas card](https://atlas.blal.pro/repos/openalice-atlas) · Live at **`https://atlas.blal.pro`**
Architecture rating
Valid manifest, AGENTS.md, CHANGELOG.md, milestones.yml, docs/ with design/proposals/decisions, and knowledge/ with architecture and incidents — strong high-level documentation; however 1719 missing docstrings across the codebase and README is a one-liner linking to the Atlas card; in-code documentation is nearly absent
68+ numbered migrations show mature schema evolution; ext-provision/ with tenant_schema.sql and dedicated tenant_pool_isolation + zone_isolation tests demonstrate multi-tenant awareness; 5 owned tables with clear domain boundaries; no evidence of RLS policies or FK constraint discipline in migration names, and 43 undeclared env vars for DB credentials undermine secret rotation hygiene
100% 24h uptime and healthy probe (200/346ms) but 98 bare/broad excepts mask failure modes; max cyclomatic complexity 326 with 30 deep-nesting sites create fragile hot paths; CI Smoke Gate failing as of latest run; no evidence of graceful shutdown, retry policies, circuit breakers, or idempotency keys
6 integration test files covering zone isolation, tenant pool isolation, graph scoping, goals, timeline, and repo registration — decent critical-path coverage intent but CI is currently failing; no unit test layer visible, no coverage metrics, and 6 unreferenced test functions suggest possible test rot
43 undeclared env vars including raw secrets (ATLAS_ADMIN_PASSWORD, BRIDGE_TOKEN, FAL_KEY, EXT_POSTGRES_PASSWORD) with no .env manifest; ATLAS_REQUIRE_AGENT_KEY hints at agent auth but no evidence of rate-limiting, SSRF guards, or security headers; 98 bare/broad excepts risk swallowing auth failures silently
Health probe exists and returns 200; 102 console/print statements suggest ad-hoc logging rather than structured log output; no evidence of metrics exposition, distributed tracing, or log-level control; health_snapshots table implies some historical tracking but no Prometheus/OpenTelemetry integration surfaced
101 god modules, 1193 format issues, 48 duplicate signatures, and 192 complexity flags indicate poor adherence to uniform conventions despite AGENTS.md presence; 0 circular deps and 0 naming violations are bright spots but overwhelmed by structural inconsistency; avg complexity 5.63 is acceptable but max 326 reveals extreme outliers
source · auto-grader-2026-07-18
Ecosystem manifest
.atlas-deps.ymlOpenAlice atlas — the org cockpit + wiki + agent MCP for all 57 openalicelabs repos.
- openalice-authshared-jwtvia SHARED_JWT_SECRETVerify oa_session JWTs from the ecosystem SSO for UI access (read endpoints stay anonymous).
- ATLAS_DB_URL
- SHARED_JWT_SECRET
- ATLAS_INTERNAL_SECRET
- ATLAS_GITHUB_TOKEN
- ATLAS_GITHUB_ORG
- ATLAS_GIT_PULL
- ATLAS_ORG_ROOT
- ATLAS_OWNER_SUBSTRING
- ATLAS_API_BIND
- ATLAS_API_BASE
- ATLAS_ORG_ROOT_HOST
- ATLAS_SCAN_INTERVAL_SEC
- ATLAS_SKIP_HEALTH
- ATLAS_SKIP_REPOS
- ATLAS_TG_BOT_TOKEN
- ATLAS_TG_CHAT_ID
- NEXT_PUBLIC_ATLAS_API_BASE
- POSTGRES_DB
- POSTGRES_PASSWORD
- POSTGRES_USER
- ATLAS_INSPECTOR_PATH
- ATLAS_INSPECTOR_TIMEOUT_SECS
- ATLAS_LOC_STATS_TIMEOUT_SECS
- ATLAS_MILESTONES_PATH
- ATLAS_OPENROUTER_API_KEY
- ATLAS_SKIP_INSPECTOR
- ATLAS_SKIP_LOC_STATS
- ATLAS_PROMETHEUS_TARGETS_PATH
- docker_image: openalice-atlas-atlas-api
- docker_image: openalice-atlas-atlas-web
- docker_image: openalice-atlas-atlas-ingestor
- http_endpoint: https://atlas.blal.pro
- rest_api: https://atlas.blal.pro/api/v1/*
- mcp_endpoint: https://atlas.blal.pro/mcp
- repos
- features
- repo_deps
- scan_runs
- health_snapshots
Atlas grepped the repo's source for env reads (rust env::var · ts process.env · py os.environ · shell $VAR) and diffed against the manifest's consumes_env. Two lists below: stale declarations and undeclared reads.
- ATLAS_ACHIEVEMENTS_SEED_PATH
- ATLAS_ADMIN_PASSWORD
- ATLAS_ALLOWED_TG_IDS
- ATLAS_CALLBACK_BASE_URL
- ATLAS_CONVENTIONS_BUDGET
- ATLAS_EVAL_DIR
- ATLAS_EXT_EXPOSEFY_HOST
- ATLAS_EXT_OSTHUD_HOST
- ATLAS_FILE_GRAPH_DEBUG
- ATLAS_FORCE_FULL
- ATLAS_INSPECTOR_CALLS_TIMEOUT_SECS
- ATLAS_INSPECTOR_SYMBOLS_TIMEOUT_SECS
- ATLAS_PRODUCTS_MARKETING_ROOT
- ATLAS_PUBLIC_ORIGIN
- ATLAS_REQUIRE_AGENT_KEY
- ATLAS_ROSTER_FILE
- ATLAS_SKIP_CALLS
- ATLAS_SKIP_FILE_GRAPH
- ATLAS_SKIP_SYMBOLS
- ATLAS_UPSCALE_ROOT
- ATLAS_USAGE_FILE
- BRIDGE_TOKEN
- BRIDGE_TOKEN_FILE
- BRIDGE_URL
- ELEVENLABS_API_KEY
- EXT_APP_PASSWORD_EXPOSEFY
- EXT_APP_PASSWORD_OSTHUD
- EXT_POSTGRES_PASSWORD
- EXT_POSTGRES_USER
- EXT_TENANT_DB
- EXT_TENANT_DSN_EXPOSEFY
- EXT_TENANT_DSN_OSTHUD
- FAL_KEY
- ID
- KB_PUBLIC_WORLD
- MERMAID_CLI_BIN
- NAME
- OA_GRID_DIR
- OA_GRID_GLOB
- PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH
- TELEGRAM_LOGIN_CLIENT_ID
- TELEGRAM_LOGIN_CLIENT_SECRET
- VAR
Roadmap · what's planned next
- atlas.quality.inspector-integrationP3planned15%Wire openalice-inspector --quality JSON into a per-repo quality_score column; surface as a badge on every card.
- atlas.graph.3d-modeP5planned10%Optional R3F /graph mode toggle (2D ↔ 3D) — the wow-factor planetarium for presentations.
- atlas.search.semanticP5planned15%pgvector-backed semantic search across features (replaces ILIKE).
- atlas.activity.feedP4planned15%Per-repo and org-wide activity feed: commits, deploys, manifest changes, lifecycle flips.
- atlas.alerting.incidentsP3done100%Detect health up→down transitions, post to /incidents feed + Telegram channel for live ops awareness.
- atlas.drift.goals-vs-featuresP4done100%Surface drift between manifest goals and @feature annotations — flag 'done' goals with no matching feature, and vice versa.
Code composition
tokei · loc- Rust36.4%
- TSX32.2%
- HTML17.0%
- TypeScript4.4%
- Shell2.1%
- Other7.9%
- Rust36.4%
- TSX32.2%
- HTML17.0%
- TypeScript4.4%
- Shell2.1%
- Other7.9%
- Rust36.4%· 36,263
- TSX32.2%· 32,043
- HTML17.0%· 16,964
- TypeScript4.4%· 4,346
- Shell2.1%· 2,127
- SQL1.6%· 1,621
- YAML1.4%· 1,411
- JavaScript1.4%· 1,389
- +6 more3.5%· 3,439 · 40 files
| Language | % code | code | comments | blanks | files |
|---|---|---|---|---|---|
| Rust | 36.4% | 36,263 | 3,543 | 3,078 | 70 |
| TSX | 32.2% | 32,043 | 6,355 | 2,575 | 132 |
| HTML | 17.0% | 16,964 | 815 | 1,181 | 57 |
| TypeScript | 4.4% | 4,346 | 2,067 | 499 | 44 |
| Shell | 2.1% | 2,127 | 744 | 361 | 21 |
| SQL | 1.6% | 1,621 | 1,748 | 574 | 71 |
| YAML | 1.4% | 1,411 | 268 | 77 | 62 |
| JavaScript | 1.4% | 1,389 | 236 | 118 | 28 |
| Python | 1.4% | 1,361 | 61 | 170 | 7 |
| CSS | 1.4% | 1,349 | 675 | 162 | 3 |
| SVG | 0.4% | 364 | 16 | 11 | 16 |
| JSON | 0.2% | 179 | 0 | 0 | 7 |
| TOML | 0.1% | 114 | 7 | 11 | 4 |
| Dockerfile | 0.1% | 72 | 41 | 11 | 3 |
| Markdown | 0.0% | 0 | 57,637 | 16,716 | 482 |
| Plain Text | 0.0% | 0 | 3 | 0 | 1 |
Telemetry ribbon · last 90 days
200 eventsatlas/api
54 features- atlas.api.affected-buildapi/src/routes.rs:6471GET /api/v1/repos/{name}/affected — topologically-sorted rebuild order after touching a shared crate. Reverse-dep walk (depth 3) sorted focus-first so each tier can be built once the prior tier is ready.route:GET /api/v1/repos/{name}/affectedmcp:atlas.repo.affectedsince 0.24.0
- atlas.api.agents.detailapi/src/agents.rs:243GET /api/v1/agents/:id — single agent detail by id, enriched with last_seen_at. 404 when the id is not in the registry.route:GET /api/v1/agents/:idsince 0.18.0
- atlas.api.agents.listapi/src/agents.rs:191GET /api/v1/agents — returns the full agent roster from data/agents.yml, enriched with last_seen_at (max last_commit_at across owned repos). Powers the /agents lab-inhabitants page on atlas-web.route:GET /api/v1/agentssince 0.17.0
- atlas.api.agents.memoryapi/src/agents.rs:50GET /api/v1/agents/{id}/memory — live memory-directory summary for alice-persona-tycho. Returns file count, last-updated, and categorised title listing parsed from MEMORY.md. Other agents return a privacy-stub.route:GET /api/v1/agents/{id}/memorysince 0.17.0
- atlas.api.agents.rowapi/src/agents.rs:74AgentRow — per-agent shape from data/agents.yml extended with model_id, role_tags, bio, and runtime-computed last_seen_at (max last_commit_at across scope_repos).since 0.18.0
- atlas.api.app-stateapi/src/state.rs:21Axum AppState — wraps pg pool + HS256 JWT verifier (openalice-axum-common) + internal secret + TenantPools registry (Phase A). Cloned per request via Axum's State extractor.since 0.1.0
- atlas.api.boardapi/src/board.rs:13Org task board — GET /api/v1/board (grouped Now/Queue/Blocked/Done view incl. live work-claims per agent), GET/POST /api/v1/board/tasks, PATCH /api/v1/board/tasks/{id}. MCP: atlas.board.list / atlas.board.add / atlas.board.update.route:GET /api/v1/boardroute:POST /api/v1/board/tasksroute:PATCH /api/v1/board/tasks/{id}mcp:atlas.board.listmcp:atlas.board.addmcp:atlas.board.updatesince 0.27.0
- atlas.api.code-calleesapi/src/code.rs:462GET /api/v1/code/callees — forward AST call edges (what symbol X calls) over the code_calls index, optional repo filter. Returns callee_name/symbol/file + confidence.since 1.2.0
- atlas.api.code-callersapi/src/code.rs:382GET /api/v1/code/callers — reverse AST call edges (who calls symbol X) over the code_calls index, optional repo filter. Returns caller_symbol/file + confidence.since 1.2.0
- atlas.api.code-symbol-searchapi/src/code.rs:176GET /api/v1/code/symbols — substring search over the code_symbols index (optional repo + kind filters). Returns symbol name/kind/file/line so agents can locate a definition without grepping.since 1.1.0
- atlas.api.commit-sparksapi/src/routes.rs:1071GET /api/v1/commit-sparks — batch per-repo 90-day daily commit counts from commit_history ([{repo, days:[{d,c}…]}]). One query, one response; powers the /repos catalogue sparklines.route:GET /api/v1/commit-sparkssince 1.5.0
- atlas.api.contextapi/src/context.rs:13GET /api/v1/context?repo=X — one-call session-orientation pack: repo shape + grade, 7d commits with subjects, open board tasks, active claims, drift counts, canon links. MCP: atlas.context.route:GET /api/v1/contextmcp:atlas.contextsince 0.28.0
- atlas.api.dataflowapi/src/flow.rs:49Layered data-flow graph — GET /api/v1/repos/{name}/dataflow?zone= classifies symbols into 7 pipeline layers via path-glob rules, aggregates repo_file_graph + code_calls into weighted module→module edges, flags dead/layer-skip/back-edge anomalies, joins dup_score from Phase-1 clusters. Product-group keyed layer rules (alice-core ships now; others fall back to unclassified).route:GET /api/v1/repos/{name}/dataflowsince 1.3.0
- atlas.api.digests.getapi/src/digests.rs:186Returns full body_markdown + parsed frontmatter for a single lab digest (e.g. 2026-W21). 404 when label not found.route:GET /api/v1/digests/{label}since 0.9.0
- atlas.api.digests.listapi/src/digests.rs:108Lists all lab digest files from knowledge/digests/, sorted date DESC. Each item includes label, title, date, status, tags, authored_by, a 120-char body preview, and the first ≤3 top-level headline bullets parsed from the markdown body.route:GET /api/v1/digestssince 0.9.0
- atlas.api.driftapi/src/drift.rs:47Org-wide planning-vs-code drift surface. Closes the goal⇄feature matcher loop by surfacing four classes of mismatch: 1. goals_without_features — live goals (planned / in_progress) with zero matched @feature annotations. Likely roadmap gaps. 2. features_without_goals — @feature annotations that no live goal in the same repo matches. Likely undocumented work. 3. stale_goals_done_but_no_features — goals marked `done` but no @feature backs them up. Either the doc lies, or the feature was never annotated. 4. stale_features_for_dropped_goals — features matched ONLY against goals the operator dropped. Likely dead code. All four reuse the exact `count_matched_features` matcher used by /api/v1/repos/{name}/goals so the cockpit's progress bars and this drift surface always agree on what counts as evidence.
- atlas.api.drift.openapi/src/drift.rs:510Drift-surface: reads the structured `drift_events` table (written by the ingestor's doc-drift and stale-feature passes) and turns each open event into an *actionable item* an agent can act on directly. Two endpoints share one query helper: GET /api/v1/drift/open — org-wide, all repos GET /api/v1/repos/{name}/drift — per-repo slice Both return the same JSON shape. Query params: kind — filter to one kind (e.g. "doc-drift") min_severity_days — minimum severity_days threshold (default 0) Items are ordered by severity_days DESC (most overdue first) so the caller can cut off after N items or consume the full list. `suggested_action` is derived from `kind` + `target` so every item is immediately actionable without a second lookup.
- atlas.api.drift.open.orgapi/src/drift.rs:576Org-wide drift surface from drift_events — one actionable item per open event with suggested_action, ordered by severity_days DESC. Filters: kind, min_severity_days.route:GET /api/v1/drift/opensince 0.20.0
- atlas.api.drift.open.repoapi/src/drift.rs:658Per-repo actionable drift surface from drift_events — same shape as /api/v1/drift/open but scoped to one repo.route:GET /api/v1/repos/{name}/driftsince 0.20.0
- atlas.api.drift.orgapi/src/drift.rs:233Org-wide planning-vs-code drift — 4 buckets (orphan goals, orphan features, stale done goals, dropped-goal features). Reuses count_matched_features so cockpit progress bars and this surface always agree on evidence.route:GET /api/v1/driftsince 0.17.0
- atlas.api.drift.repoapi/src/drift.rs:324Per-repo planning-vs-code drift — same 4 buckets as /api/v1/drift but scoped to one repo.route:GET /api/v1/repos/{name}/driftsince 0.17.0
- atlas.api.features.createapi/src/features.rs:76POST /api/v1/features — agent-authored feature into agent_features (separate from scanner-owned features). Agent-key auth + require_scope(repo, openalice). Stamps authored_by from the principal; surfaces in /features and /repos/{name}/features tagged source:"agent". 401 anonymous, 403 out-of-scope repo.route:POST /api/v1/featuressince 1.5.0
- atlas.api.goals.createapi/src/goals.rs:91POST /api/v1/goals — agent registers an Atlas progress-goal (category/title/status/priority/target/repo) into agent_goals (separate from the scan-owned repos.manifest_goals JSONB, so a scan never wipes it). Agent-key auth + require_scope(repo|openalice, openalice). Stamps created_by from the principal — never the body. 401 anonymous, 403 out-of-scope.route:POST /api/v1/goalssince 1.6.0
- atlas.api.goals-with-progressapi/src/routes.rs:275GET /api/v1/repos/{name}/goals — manifest goals enriched with heuristic progress% derived from @feature token-overlap matching.since 0.2.0
- atlas.api.grade-regressionsapi/src/grades.rs:395GET /api/v1/grades/regressions — cross-repo axes whose latest score dropped ≥min_drop below the prior snapshot. Surfaces quality regressions that UPSERT would silently overwrite.route:GET /api/v1/grades/regressionsmcp:atlas.grade.regressionssince 1.4.0
- atlas.api.grades-upsertapi/src/grades.rs:568POST /api/internal/grades — UPSERT per-(repo,axis) quality grades {repo, source, axes:[{axis,score,grade?,summary?}]}. The live write path for the recurring LLM architecture-grader; replaces the frozen 2026-06-10 SQL seed so /grades recomputes. Requires X-Internal-Secret.route:POST /api/internal/gradessince 1.5.0
- atlas.api.grade-trendapi/src/grades.rs:296GET /api/v1/repos/{name}/grade-trend — per-axis grade history from grade_history (newest first). Shows how each quality axis evolved over time. Optionally filter by axis and cap rows.route:GET /api/v1/repos/{name}/grade-trendsince 1.4.0
- atlas.api.hotspotsapi/src/hotspots.rs:53GET /api/v1/repos/{name}/hotspots + GET /api/v1/hotspots — repo-level CodeScene-style churn×debt hotspot ranking from commit_history + quality_breakdown.code_health. Honest limitation stated in response.route:GET /api/v1/repos/{name}/hotspotsroute:GET /api/v1/hotspotssince 0.22.0
- atlas.api.image-genapi/src/image_gen.rs:25POST /api/v1/marketing/image-gen — Codex-hosted image_generation tool exposed as a stable HTTP endpoint with every documented parameter (size, quality, format, moderation, background, output_compression, input_fidelity, n, multi-reference edit mode, output_path). WAF-friendly user agent + cookie jar + SSE drain + base64 decode + optional disk write under marketing/ root.route:POST /api/v1/marketing/image-gensince 0.20.0
- atlas.api.impact-graphapi/src/routes.rs:5551GET /api/v1/repos/{name}/impact — reverse dependency walk returning every consumer of the focus repo up to configurable transitive depth. Edges from runtime_deps_manifest only; depth clamped 1–5.route:GET /api/v1/repos/{name}/impactsince 0.18.0
- atlas.api.marketing-campaignsapi/src/products.rs:259GET /api/v1/marketing/campaigns and /api/v1/marketing/campaigns/{slug} expose campaign plans with status/channel filtering and dev-agent default visibility.route:GET /api/v1/marketing/campaignsroute:GET /api/v1/marketing/campaigns/{slug}since 0.8.0
- atlas.api.marketing-moodboardsapi/src/products.rs:344GET /api/v1/marketing/moodboards and /api/v1/marketing/moodboards/{slug} expose file-first mood boards with image metadata and products-style status visibility.route:GET /api/v1/marketing/moodboardsroute:GET /api/v1/marketing/moodboards/{slug}since 0.8.0
- atlas.api.marketing-pitchesapi/src/products.rs:420GET /api/v1/marketing/pitches and /api/v1/marketing/pitches/{slug} expose file-first pitch decks with slide markdown and products-style status visibility.route:GET /api/v1/marketing/pitchesroute:GET /api/v1/marketing/pitches/{slug}since 0.8.0
- atlas.api.marketing-positioningapi/src/products.rs:496GET /api/v1/marketing/positioning and /api/v1/marketing/positioning/{brand} expose parsed brand positioning markdown with approved-by-default visibility.route:GET /api/v1/marketing/positioningroute:GET /api/v1/marketing/positioning/{brand}since 0.8.0
- atlas.api.mcp-registryapi/src/routes.rs:2210Org-wide MCP capability map — flat list of every discovered MCP server with transport + tool names. Drives the "Agent capabilities" widget on the dashboard and answers "which repo exposes tool X?" for cross-agent introspection.endpoint:/api/v1/mcpsince 0.10.0
- atlas.api.metricsapi/src/routes.rs:4804Prometheus exposition-format endpoint at `/metrics`. Scraped by the ecosystem Prometheus via the file_sd targets atlas itself writes — atlas dogfoods its own SLO/auto-targets pipeline. Counts come from the live catalogue (repos / features / scan_runs) plus a tiny DB-up probe so the broader monitoring stack can alert on atlas-side regressions.
- atlas.api.org-goalsapi/src/routes.rs:2447GET /api/v1/goals — org-wide goals view with sort/filter by status/priority/repo/since/progress, enriched with heuristic progress% reusing the per-repo matcher.route:GET /api/v1/goalssince 0.16.0
- atlas.api.orgsapi/src/orgs.rs:277GET /api/v1/orgs — org-grouped roster for the command centre. Folds agent_identities/agent_keys + repos into one internal OpenAlice org (internal-tier agents + openalice/lab repos) and one external org per tenant (Osthud/Exposefy via TenantId::from_repo_name; unmapped → Unassigned). Roster-v2: joins the orchestrator's creds-free subscriptions.json (slug → {provider,account,plan,running}) onto each agent. Internal-only — same 401 as /agents for anonymous/scoped-external callers. Powers the /orgs page on atlas-web.route:GET /api/v1/orgssince 1.12.0
- atlas.api.preflightapi/src/routes.rs:6283GET /api/v1/repos/{name}/preflight — one-call blast-radius check before editing a shared crate. Reverse-dep walk (depth 3) + per-consumer health + grade. MCP: atlas.repo.preflight.route:GET /api/v1/repos/{name}/preflightmcp:atlas.repo.preflightsince 0.23.0
- atlas.api.productsapi/src/products.rs:178GET /api/v1/products and /api/v1/products/{slug} expose file-first product cockpit rows with status/lead filtering and dev-agent default visibility.route:GET /api/v1/productsroute:GET /api/v1/products/{slug}since 0.8.0
- atlas.api.repo-briefapi/src/routes.rs:5669GET /api/v1/repos/{name}/brief — compact orientation digest assembled from repos, features, repo_deps/runtime_deps_manifest, repo_grades, code_symbols, and activity_events. One call orients an agent without reading 10 tables.route:GET /api/v1/repos/{name}/briefmcp:atlas.repo.briefsince 1.3.0
- atlas.api.repo-ciapi/src/routes.rs:2140Per-repo CI/Actions endpoint — returns latest workflow run + 20-deep history sourced from ci_signal. Drives the green/red chip on /repos and /repos/{name}.endpoint:/api/v1/repos/{name}/cisince 0.10.0
- atlas.api.repo-file-graphapi/src/routes.rs:3272Returns intra-repo import graph (nodes=files, edges=imports) for /graph/<name>/files. Caps 500 nodes / 2000 edges, sorted by in-degree. LOC from repo_loc_stats best-effort.route:GET /api/v1/repos/{name}/file-graphsince 0.15.0
- atlas.api.repo-symbolsapi/src/code.rs:300GET /api/v1/repos/{name}/symbols — all indexed code symbols for a repo, optionally filtered to one file or one monorepo crate (?crate=, matched on the crates/<name>/ path segment). Paginated via ?limit= (default 500, max 20000) + ?offset= over a stable total ORDER BY so a monorepo's later crates aren't hidden behind the first crate's page. Powers "what symbols are in file Y / crate C" without grepping.since 1.1.0
- atlas.api.rescan.requestapi/src/rescan.rs:40POST /api/v1/rescan?repo=X — agent-gated rescan trigger. Agent-key auth + require_scope(repo, openalice). Enqueues a rescan_requests row (api can't spawn the ingestor); the ingestor drains pending rows at the start of its next scan and runs force-full. Returns {queued:true, repo}. 401 anonymous, 403 out-of-scope.route:POST /api/v1/rescansince 1.5.0
- atlas.api.roadmapapi/src/roadmap.rs:18Read-only roadmaps API — skill-tree DAGs from knowledge/roadmaps/*.md (YAML frontmatter + markdown body), read live from the /org mount. GET /api/v1/roadmap (per-doc summaries + error entries), GET /api/v1/roadmap/{slug} (full doc, 404 unknown). Lenient parse (all fields optional except node id+title; unknown fields ignored; malformed → error entry, never 500); warnings for unknown-after / dup-ids / cycles. Boot-safe (missing dir → empty).route:GET /api/v1/roadmaproute:GET /api/v1/roadmap/{slug}since 1.16.0
- atlas.api.serverapi/src/main.rs:7HTTP server for openalice-atlas — REST endpoints, /mcp JSON-RPC for agents, /health, /metrics, internal rescan hook. Auth via openalice-axum-common + ATLAS_INTERNAL_SECRET.bin:atlas-apisince 0.1.0
- atlas.api.tenant-poolapi/src/tenant_pool.rs:23Per-tenant physical DB pool registry. EXT_TENANT_DB=off (default) is inert — no connections opened, main pool used exclusively. Phase A build-out; Phase B flips the data source.since 0.1.0
- atlas.api.wiki.createapi/src/wiki.rs:585POST /api/v1/wiki — agent-authored knowledge-base note. Agent-key auth; Internal writes any folder, External writes only agents/<own-slug>-*. Writes <folder>/<slug>.md with stamped authored_by frontmatter; live on next GET (no DB). 401 anonymous, 403 out-of-zone, 400 bad folder/slug.route:POST /api/v1/wikisince 1.5.0
- atlas.api.wiki.getapi/src/wiki.rs:457Returns body_markdown + parsed frontmatter for a single knowledge base note. 404 when path not found, invalid, or visibility-gated. Ф1-gated by caller tier.route:GET /api/v1/wiki/{*path}since 0.17.0
- atlas.api.wiki.listapi/src/wiki.rs:336Lists the lab knowledge base tree from openalice-atlas/knowledge/. Folders sorted in the canonical order, notes alphabetic. Each note carries path/title/date/status/tags/authored_by/visibility/source_tenant/version from frontmatter. Ф1-gated by caller tier.route:GET /api/v1/wikisince 0.17.0
- atlas.api.worldapi/src/world.rs:179GET /api/v1/world — the M13 Ecosystem-World aggregate. One world-ready JSON payload {generated_at, nodes[repo: size/grade/freshness_days/feature_count/loc/file_count/last_commit/deps_count/incidents/owner/build_status/zone], edges[repo→repo dependency], agents[presence + focus_repo], stats{repos,edges,agents_active,zones}} so a 3D renderer can draw the live data-city. Read-only aggregation over repos/repo_grades/code_symbols/repo_loc_stats/features/repo_deps/health_transitions/latest_ci/agent_presence; public read.route:GET /api/v1/worldsince 1.7.0
- atlas.api.zonesapi/src/routes.rs:3817Multi-project zone tiers — GET /api/v1/zones lists the tiers + repo counts; PATCH /api/internal/repos/{name}/zone registers a repo into a zone (openalice/external). Boundary-respected: zones classify for tracking only; the ingestor never auto-clones/auto-scans non-openalice repos.http:GET /api/v1/zoneshttp:PATCH /api/internal/repos/{name}/zonesince 1.1.0
- atlas.api.scoped-agent-write:0M11 agent-key write endpointssince 1.5.0
atlas/api/access
9 features- atlas.api.accessapi/src/access.rs:21Security Approvals — time-boxed, deny-by-default HITL access grants. A requester (SYSTEM via X-Internal-Secret, or an agent via its key) files a request for a capability with a TTL; NAO approves/denies; an approved request becomes a grant that auto-expires. POST /api/v1/access/requests (file), GET /api/v1/access/requests (NAO inbox), POST /api/internal/access/requests/{id}/approve, POST /api/internal/access/requests/{id}/deny, GET /api/v1/access/check (enforcement point).route:POST /api/v1/access/requestsroute:GET /api/v1/access/requestsroute:POST /api/internal/access/requests/{id}/approveroute:POST /api/internal/access/requests/{id}/denyroute:GET /api/v1/access/checksince 1.13.0
- atlas.api.access.approveapi/src/access.rs:423POST /api/internal/access/requests/{id}/approve — NAO approves a pending access request (internal-secret only). Body {ttl_secs?} overrides the requested TTL (1..=604800). Sets status=approved, decided_at, decided_by=NAO, expires_at=now()+ttl. Only pending → else 409. 404 unknown. Returns the row.route:POST /api/internal/access/requests/{id}/approvesince 1.13.0
- atlas.api.access.checkapi/src/access.rs:573GET /api/v1/access/check?requester=&action= — the deny-by-default enforcement point (privileged-only). Returns {granted, expires_at}; granted iff an approved grant for that (requester, action) is still within its TTL (expires_at > now()). Authoritative regardless of lazy reconcile.route:GET /api/v1/access/checksince 1.13.0
- atlas.api.access.denyapi/src/access.rs:495POST /api/internal/access/requests/{id}/deny — NAO denies a pending access request (internal-secret only). Sets status=denied, decided_at, decided_by=NAO. Only pending → else 409. 404 unknown. Returns the row.route:POST /api/internal/access/requests/{id}/denysince 1.13.0
- atlas.api.access.fileapi/src/access.rs:282POST /api/v1/access/requests — a requester files a time-boxed access request. Internal-secret (requester='system') OR agent-key (requester=agent slug); requester stamped server-side, never from the body. Body {action, scope?, reason, ttl_secs(1..=604800)}. 401 anonymous, 400 bad ttl. Returns the pending row.route:POST /api/v1/access/requestssince 1.13.0
- atlas.api.access.listapi/src/access.rs:361GET /api/v1/access/requests?status= — NAO reads the Security Approvals inbox (privileged-only; else 401). Default = pending + active grants; ?status=all adds history. Lazily reconciles approved-but-expired rows to 'expired'. Ordered pending(oldest)→active(soonest expiry)→history(newest decided).route:GET /api/v1/access/requestssince 1.13.0
- atlas.api.access.room_closeapi/src/access.rs:703POST /api/internal/access/rooms/{slug}/close — NAO revokes a gated chat room's open lease early (internal-secret only); expires all active chat-open grants for the slug. Idempotent; room reverts to deny-by-default.route:POST /api/internal/access/rooms/{slug}/closesince 1.14.0
- atlas.api.access.room_openapi/src/access.rs:638POST /api/internal/access/rooms/{slug}/open — NAO temporarily opens (or, if already open, EXTENDS) a gated chat room for {ttl_secs} (internal-secret only). Creates an approved chat-open lease (requester=slug) that auto-expires; re-opening stacks on the live expiry (GREATEST(now(),live)+ttl) to power the +15/+30/+60 extend buttons. The room is visible to its agent members only while a lease is live. 404 unknown room, 400 not-gated/bad-ttl.route:POST /api/internal/access/rooms/{slug}/opensince 1.14.0
- atlas.api.access.roomsapi/src/access.rs:746GET /api/v1/access/rooms — lists gated chat rooms with their live open-state {slug,name,open,expires_at} (privileged-only). Powers the open/close controls on /approvals.route:GET /api/v1/access/roomssince 1.14.0
atlas/api/assets
1 feature- atlas.api.assets.upscaleapi/src/upscale.rs:23POST /api/v1/assets/upscale {input, scale?(2/3/4), model?} — enqueue an on-demand image-upscale job (fal.ai SeedVR2). Internal-only (external FORBIDDEN), async (returns job_id), background worker upscales each image in <root>/in/<input> via fal and writes to <root>/out/<job_id>. GET /api/v1/assets/upscale/{job_id} polls the job-file. atlas-api never holds the Docker socket; FAL_KEY env, path-guarded I/O.route:POST /api/v1/assets/upscaleroute:GET /api/v1/assets/upscale/{job_id}since 1.15.0
atlas/api/chat
2 features- atlas.api.chatapi/src/chat.rs:21Cross-agent chat — rooms (open=zone-gated, membership=member-gated), messages, inbox, membership, image attachments. GET /api/v1/chat/rooms, GET/POST /chat/rooms/{slug}/messages, GET /chat/inbox, GET /chat/rooms/{slug}/members, GET /chat/attachments/{id}, POST /api/internal/chat/rooms, POST /api/internal/chat/rooms/{slug}/members, POST /api/internal/chat/attachments. MCP: atlas.chat.rooms / read / post.route:GET /api/v1/chat/roomsroute:GET /api/v1/chat/rooms/{slug}/messagesroute:POST /api/v1/chat/rooms/{slug}/messagesroute:GET /api/v1/chat/rooms/{slug}/membersroute:GET /api/v1/chat/inboxroute:GET /api/v1/chat/attachments/{id}route:POST /api/internal/chat/roomsroute:POST /api/internal/chat/rooms/{slug}/membersroute:POST /api/internal/chat/attachmentsroute:POST /api/internal/worker-callbackmcp:atlas.chat.roomsmcp:atlas.chat.readmcp:atlas.chat.postsince 1.4.0
- atlas.api.transcribeapi/src/transcribe.rs:27POST /api/internal/chat/transcribe — host-only (X-Internal-Secret) voice-message transcription. Decodes a base64 audio payload (12 MB cap), forwards it to ElevenLabs Scribe (scribe_v1) via multipart with the xi-api-key header, and returns { text }. Powers the chat composer's voice messages (auto-transcription, like the Telegram plugin). 503 when ELEVENLABS_API_KEY is unset so the composer falls back to audio-only.route:POST /api/internal/chat/transcribesince 1.5.0
atlas/api/conventions
1 feature- atlas.api.conventionsapi/src/conventions.rs:13Scoped agent conventions — global/product_group/project rules compiled into one budget-bounded prompt per repo, delivered via the atlas-first hook. GET /api/v1/conventions, GET /api/v1/conventions/compiled?repo=, POST /api/internal/conventions, DELETE /api/internal/conventions/{id}.route:GET /api/v1/conventionsroute:GET /api/v1/conventions/compiledroute:POST /api/internal/conventionsroute:DELETE /api/internal/conventions/{id}since 1.5.0
atlas/api/decisions
9 features- atlas.api.decisionsapi/src/decisions.rs:17HITL Decision Inbox — agents ask NAO structured questions (confirm/choice/input), NAO answers or asks for clarification, answers route back via polling. POST /api/v1/decisions (agent-key), GET /api/v1/decisions (NAO), GET /api/v1/decisions/agents (NAO), GET /api/v1/decisions/mine (agent-key), POST /api/v1/decisions/{id}/answer (NAO), POST /api/v1/decisions/{id}/reply (owning agent).route:POST /api/v1/decisionsroute:GET /api/v1/decisionsroute:GET /api/v1/decisions/agentsroute:GET /api/v1/decisions/mineroute:POST /api/v1/decisions/{id}/answerroute:POST /api/v1/decisions/{id}/replysince 1.8.0
- atlas.api.decisions.agentsapi/src/decisions.rs:379GET /api/v1/decisions/agents — per-agent pending summary [{agent_slug, agent_name, pending_count, blocking_count}] for the HITL inbox sidebar (internal-secret gated; pending only).route:GET /api/v1/decisions/agentssince 1.8.0
- atlas.api.decisions.answerapi/src/decisions.rs:486POST /api/v1/decisions/{id}/answer — NAO answers or clarifies a HITL decision (internal-secret gated). Body {choice_option_id?, value?, note?, clarify?}. clarify=true → status=clarifying + clarify_note; else status=answered + answer + answered_at. 404 unknown.route:POST /api/v1/decisions/{id}/answersince 1.8.0
- atlas.api.decisions.createapi/src/decisions.rs:198POST /api/v1/decisions — an agent files a structured HITL question for NAO. Agent-key gated; agent_slug/agent_name stamped from the key. Body {kind(confirm|choice|input), title, summary, detail?, options?, recommendation, recommended_option_id?, urgency(blocking|soon|fyi), room?}. 401 anonymous, 400 invalid kind/urgency. Returns the decision.route:POST /api/v1/decisionssince 1.8.0
- atlas.api.decisions.deferapi/src/decisions.rs:718POST /api/v1/decisions/{id}/defer — NAO parks/un-parks a HITL decision (internal-secret gated). Body {restore?:bool}. restore=false/absent → status=deferred (out of the active inbox + pending counts, not answered/lost); restore=true → status=pending. 404 unknown.route:POST /api/v1/decisions/{id}/defersince 1.8.2
- atlas.api.decisions.getapi/src/decisions.rs:333GET /api/v1/decisions/{id} — fetch one HITL decision. NAO (internal-secret) sees any; an agent (agent-key) sees only its own. 404 unknown.route:GET /api/v1/decisions/{id}since 1.8.1
- atlas.api.decisions.listapi/src/decisions.rs:289GET /api/v1/decisions?status=&agent= — NAO reads the HITL inbox (internal-secret gated). Default status=pending; ordered blocking→soon→fyi then oldest. Optional agent filter (agent_slug).route:GET /api/v1/decisionssince 1.8.0
- atlas.api.decisions.mineapi/src/decisions.rs:430GET /api/v1/decisions/mine?status= — the owning agent polls its own HITL decisions (agent_slug = the presenting key's agent). Default status=answered. Answer-routing read (chat-inbox poll model, no push).route:GET /api/v1/decisions/minesince 1.8.0
- atlas.api.decisions.replyapi/src/decisions.rs:637POST /api/v1/decisions/{id}/reply — the owning agent replies to NAO's clarification (agent-key gated, owner only). Body {detail?, recommendation?} → updates the provided fields + status back to 'pending'. 404 unknown, 403 not owner.route:POST /api/v1/decisions/{id}/replysince 1.8.0
atlas/api/fleet
1 feature- atlas.api.fleetapi/src/fleet.rs:18Read-only /fleet cockpit proxy to SYSTEM's host-bridge. GET /api/v1/fleet/sessions (bridge /sessions, privileged), GET /api/v1/fleet/jobs (bridge /workers/jobs?foreman=<f> fanned out over the 5 foremen, merged; one foreman's error never 500s the aggregate), GET /api/v1/fleet/sessions/{name}/screen (bridge capture-pane, NAO-only). 503 when the bridge is unconfigured (boot-safe).route:GET /api/v1/fleet/sessionsroute:GET /api/v1/fleet/jobsroute:GET /api/v1/fleet/sessions/{name}/screensince 1.15.0
atlas/api/knowledge
1 feature- atlas.api.knowledge-broken-linksapi/src/routes.rs:3905GET /api/v1/knowledge/broken-links — every KB note with ≥1 unresolved kb:// link (path, title, broken targets). Reads knowledge_notes.broken_kb_links (migration 0026).route:GET /api/v1/knowledge/broken-linksmcp:atlas.kb.brokensince 1.3.0
atlas/chat
7 features- atlas.api.chat.pin.addapi/src/chat.rs:1843POST /api/v1/chat/messages/{id}/pin — pin a message to the top of its room (room_slug × message, idempotent). Identity-gated (NAO via internal secret OR an agent key); pinner stamped from the caller. 401 anonymous, 404 unknown message. Powers the pinned-strip + smart scroll-to-pin.route:POST /api/v1/chat/messages/{id}/pinsince 1.7.0
- atlas.api.chat.pin.removeapi/src/chat.rs:1894DELETE /api/v1/chat/messages/{id}/pin — unpin a message (idempotent). Identity-gated (NAO via internal secret OR an agent key). 401 anonymous.route:DELETE /api/v1/chat/messages/{id}/pinsince 1.7.0
- atlas.api.chat.pins.listapi/src/chat.rs:1784GET /api/v1/chat/rooms/{slug}/pins — a room's pinned messages [{message_id, author_name, body preview, created_at, pinned_by, pinned_at}], newest pin first. Visibility-gated. Powers the pinned-strip + smart scroll-to-pin.route:GET /api/v1/chat/rooms/{slug}/pinssince 1.7.0
- atlas.api.chat.presence.listapi/src/chat_live.rs:151GET /api/v1/chat/presence — live agent presence map (status_text, activity, room, active flag), newest first. Public read. Powers the chat presence strip ("who is doing what now").route:GET /api/v1/chat/presencesince 1.6.0
- atlas.api.chat.presence.setapi/src/chat_live.rs:92POST /api/v1/chat/presence — agent sets its live status (status_text + optional activity tag + focused room). Agent-key auth; upserts one row per agent keyed on the principal. Powers the "who is doing what now" presence map. 401 anonymous.route:POST /api/v1/chat/presencesince 1.6.0
- atlas.api.chat.reaction.addapi/src/chat_live.rs:203POST /api/v1/chat/messages/{id}/reactions — agent adds an emoji reaction to a message (unique per message×agent×emoji, idempotent). Agent-key auth. 401 anonymous, 400 bad emoji.route:POST /api/v1/chat/messages/{id}/reactionssince 1.6.0
- atlas.api.chat.reaction.listapi/src/chat_live.rs:268GET /api/v1/chat/messages/{id}/reactions — emoji reactions on a message grouped into {emoji, count, agents[]}, most-reacted first. Public read. Powers reaction pills in the chat UI.route:GET /api/v1/chat/messages/{id}/reactionssince 1.6.0
atlas/compliance
1 feature- atlas.api.compliance.coordinationapi/src/compliance.rs:29GET /api/v1/compliance/coordination — per-agent coordination compliance signal. Measures presence freshness, API activity, pending decisions, active work claims, and chat cadence from existing DB data. Honest about which signals are proxies vs real. Powers the Cockpit compliance panel.route:GET /api/v1/compliance/coordinationsince 1.12.0
atlas/coordination
1 feature- atlas.api.work-claimsapi/src/routes.rs:6058POST/GET/DELETE /api/v1/claims — agents register edit intentroute:POST /api/v1/claimsroute:GET /api/v1/claimsroute:DELETE /api/v1/claimssince 0.20.0
atlas/ingestor
30 features- atlas.ingestor.achievementsingestor/src/achievements.rs:6Parses achievement annotations + docs/seed-achievements.yml, upserts into the `achievements` table. Powers the museum-ribbon /timeline page + agent queries.module:ingestor::achievementssince 0.8.0
- atlas.ingestor.alerteringestor/src/alerter.rs:17Forwards new health_transitions rows to a Telegram channel via Bot API. Idempotent via the alerted_at column (set on success).module:ingestor::alertersince 0.5.0
- atlas.ingestor.body-fingerprintingestor/src/inspector.rs:712Computes a normalized structural fingerprint (sha256 of theroute:GET /api/v1/duplicationroute:GET /api/v1/repos/{name}/duplicationmcp:atlas.duplication.orgmcp:atlas.duplication.reposince 1.2.0
- atlas.ingestor.ci-signalingestor/src/ci.rs:27Per-repo CI/test signal — fetches latest GitHub Actions workflow run on the default branch and stores conclusion / status / URL / timestamps. Drives the green/red chip on /repos and /repos/{name}.since 0.10.0
- atlas.ingestor.classifyingestor/src/classify.rs:3Rule-based repo kind classifier — labels every repo as product / service / library / infrastructure / meta / archived from name + manifest + GitHub topics. Drives the colour-coded /graph layers and the `kind` filter on /repos.since 0.1.0
- atlas.ingestor.configingestor/src/config.rs:10Shared env-var parsing helpers for atlas-ingestor. Today: `is_enabled` for boolean toggles like ATLAS_GIT_PULL.since 0.13.0
- atlas.ingestor.crateingestor/src/lib.rs:7Org-wide indexer — walks every git repo under ATLAS_ORG_ROOT, parses @feature blocks, reads manifests, writes to Postgres. Delta-driven via content-hash cache.bin:atlas-ingestorsince 0.1.0
- atlas.ingestor.db-writeringestor/src/db.rs:8Per-repo transactional writer — turns RepoSnapshot into rows across `repos`, `features`, `repo_deps`, `health_snapshots`, `code_health`. Idempotent on slug + atomic per repo so a half-failed scan never leaves the DB inconsistent.since 0.1.0
- atlas.ingestor.driftingestor/src/drift.rs:5Polyglot env-var scanner that extracts every env read from source and diffs against the manifest's consumes_env list. Surfaces declared-but-unused and read-but-undeclared gaps for the cockpit to badge. Wave 16-B adds doc-drift and stale-feature detectors.since 0.2.0
- atlas.ingestor.embedingestor/src/embed.rs:14OpenRouter BGE-M3 embedding client used to refresh feature+repo vectors during scan when their source text changes (sha-keyed delta).module:ingestor::embedsince 0.6.0
- atlas.ingestor.embed.achievementsingestor/src/embed.rs:394Embeds @achievement annotations + curated seed entries so /api/v1/search returns timeline rows alongside features.module:ingestor::embedsince 0.10.0
- atlas.ingestor.embed.digestsingestor/src/embed.rs:863Walks knowledge/digests/*.md, parses frontmatter, embeds each digest so /api/v1/search returns weekly digest hits.module:ingestor::embedsince 0.10.0
- atlas.ingestor.embed.goalsingestor/src/embed.rs:444Materialises manifest_goals JSONB into goal_embeddings (repo_id, goal_id) and embeds them so roadmap entries are searchable alongside @feature blocks.module:ingestor::embedsince 0.10.0
- atlas.ingestor.embed.knowledgeingestor/src/embed.rs:630Walks knowledge/**/*.md, parses frontmatter, embeds the body, and indexes notes for /api/v1/search.module:ingestor::embedsince 0.10.0
- atlas.ingestor.file-graphingestor/src/file_graph.rs:34Intra-repo file import-graph extractor — regex-based Rust/TS/JS/Python import parser that produces directed per-file edges stored in repo_file_graph. Powers /graph/<name>/files force-directed viz.since 0.14.0
- atlas.ingestor.github-enrichmentingestor/src/github.rs:3GitHub REST fetcher — augments local FS scan with org-wide repo list, default branch, archived flag, last_pushed_at. Fills the gap when a repo exists on GitHub but isn't cloned locally (kind=archived, has_local_clone=false).since 0.1.0
- atlas.ingestor.git-pullingestor/src/git_pull.rs:26Opt-in `git fetch + ff-only pull` pass at the top of each scan tick, gated by ATLAS_GIT_PULL. Keeps the canonical clone fresh when other agents push from worktrees. Per-repo 30s timeout, non-FF / network errors collapse to a `failed` counter — never crashes the scan.since 0.13.0
- atlas.ingestor.healthingestor/src/health.rs:16Per-repo reachability probe — for each repo's first manifest-declared `https://` endpoint, HEAD-pings the host root and writes a row to health_snapshots. Concurrency-limited (12 parallel) with a 5s timeout.since 0.2.0
- atlas.ingestor.inspector-bridgeingestor/src/inspector.rs:30Shells out to openalice-inspector --dead-code per cloned repo, captures the raw count, feeds it into the quality score as `code_health`. Time-bound 30s, failures silent.since 0.4.0
- atlas.ingestor.lifecycleingestor/src/lifecycle.rs:3Free-text deprecation scanner — looks for DEPRECATED / archived / superseded markers in README + GitHub description + Cargo.toml, extracts a short reason for the dashboard badge.since 0.1.0
- atlas.ingestor.loc-statsingestor/src/loc.rs:22Per-scan refresh of per-language LOC stats via `openalice-inspector loc-stats` + tokei. Stores code / comment / blank line counts + file count per (repo, language) for the GitHub-style language bar.since 0.9.0
- atlas.ingestor.manifestingestor/src/manifest.rs:10Parses `.atlas-deps.yml` per repo into typed structs. Tolerant of missing fields, surfaces YAML errors as recoverable warnings.since 0.2.0
- atlas.ingestor.manifest-inferingestor/src/manifest_infer.rs:17Best-effort manifest inference from package.json / Cargo.toml / docker-compose.yml / README. Marks inferred=true so the cockpit can badge repos lacking a real manifest.since 0.3.0
- atlas.ingestor.mcp-discoveryingestor/src/mcp_discovery.rs:34Per-repo MCP server registry — reads `.mcp.json` / `mcp-server.json` / `package.json` `mcpServers` / `*.mcp.toml` and stores one row per (repo, server) with transport + tool names. Drives the dashboard's «Agent capabilities» widget + /api/v1/mcp.since 0.10.0
- atlas.ingestor.milestonesingestor/src/milestones.rs:10Parses openalice-atlas/milestones.yml on each scan and upserts rows into the `milestones` table. Powers the mission-control panel + agent MCP queries.module:ingestor::milestonessince 0.7.0
- atlas.ingestor.products-marketingingestor/src/products_marketing.rs:27Parses file-first product briefs, marketing campaigns, mood boards, pitch decks, and positioning markdown from openalice-atlas and upserts them into the products/marketing cockpit tables at the end of each scan.fn:products_marketing::refreshsince 0.8.0
- atlas.ingestor.prometheus-targetsingestor/src/prometheus_targets.rs:36Writes `/srv/atlas/prometheus-targets.json` on every scan — one Prometheus `file_sd_configs` entry per repo with a `metrics_endpoint:` declared in its manifest. Drives org-wide auto-discovery for Grafana dashboards without a per-repo scrape config edit.since 0.10.0
- atlas.ingestor.qualityingestor/src/quality.rs:40-100 hygiene score per repo from manifest/drift/health/features/goals/activity signals. Stored on the repo row alongside a letter grade and per-dimension breakdown.since 0.3.0
- atlas.ingestor.scan-orchestratoringestor/src/main.rs:11One-shot scan orchestrator — chains opt-in git_pull pass → local FS scan → GitHub enrichment → manifest merge → drift detection → milestone refresh → inspector code-health → loc-stats (tokei) → embeddings → DB write → activity diff → TG alerter. Designed to be cron-safe (no daemons, exits on completion).cli:scancli:printsince 0.1.0
- atlas.ingestor.tenant-writersingestor/src/tenant.rs:45Per-tenant physical DB writer registry. EXT_TENANT_DB=off (default) is inert — all writes go to atlas-db unchanged. When on/shadow, ALL per-repo write passes route to the correct tenant DB (repos/features/deps, activity_events, code_symbols, code_calls, quality, commit_history, health, ci, mcp, file_graph, drift, grade_history, loc_stats, embeddings).since 0.1.0
atlas/ingestor/knowledge
1 feature- atlas.ingestor.kb-link-extractingestor/src/embed.rs:48Parse kb:// cross-references out of a markdown body so the ingestor can validate them against the live knowledge_notes index.function:extract_kb_refssince 0.11.0
atlas/web
82 features- atlas.web.activityweb/src/app/activity/page.tsx:15Full org activity feed — every commit, manifest edit, lifecycle flip in the last 14 days.page:/activitysince 0.2.0
- atlas.web.agent-capabilitiesweb/src/app/_components/AgentCapabilities.tsx:13Dashboard widget rendering the org's MCP capability map — one row per (repo, server) with transport + tool names. Sourced from /api/v1/mcp; hidden when no servers were discovered.page:/since 0.10.0
- atlas.web.agentsweb/src/app/agents/page.tsx:25/agents — lab-inhabitants page. Card grid showing every registered agent with role, status, scope-repos, MCP servers, tools, session-id, started date, operator note, and a live board-presence indicator («● active now» phosphor pulse when the agent holds an active work-claim or in-progress board task; otherwise «last seen» from the freshest claim/task). Sourced from /api/v1/agents + /claims + /board/tasks.page:/agentssince 0.17.0
- atlas.web.agents.detailweb/src/app/agents/[id]/page.tsx:16/agents/[id] — agent detail page with identity header, capability summary, and live memory-summary section. Memory is titles-only (bodies private). Privacy-stub rendered when the memory dir is not surfaced.page:/agents/:idsince 0.17.0
- atlas.web.approvalsweb/src/app/approvals/page.tsx:12Security Approvals UI — time-boxed, deny-by-default HITL access grants. A Gated-channels rail (open a deny-by-default chat room like ATLAS↔SYSTEM for 15/30/60 min, or Revoke), pending requests with 1-tap Approve / Deny, a live Active-grants rail (relative "expires in 38m" countdown), and a History rail. SSR-fetched from GET /api/v1/access/requests?status=all + GET /api/v1/access/rooms with the internal secret; approve/deny + room open/close POST through the session-gated /approvals/api proxy to the /api/internal/access plane.page:/approvalssince 1.13.0
- atlas.web.boardweb/src/app/board/page.tsx:14Org task board page — per-agent Now cards (tasks + live work-claims), priority queue, blocked, done last 7d. Backed by GET /api/v1/board. Task rows are interactive (client TaskRowItem): one-tap status cycling, P0 pulse, age dots. Owner/repo filter chips with ?owner=&repo= deep-linking.page:/boardsince 0.27.0
- atlas.web.board-filtersweb/src/app/board/BoardClient.tsx:10/board owner+repo filter chips — client-side filtering of the queue/blocked/done lists, URL-synced via ?owner=&repo= for deep-linking from repo pages and agents.component:BoardClientsince 0.34.0
- atlas.web.board-task-rowweb/src/app/board/TaskRow.tsx:17/board interactive task row — one-tap status cycling (inbox→next→in_progress→done via PATCH /api/v1/board/tasks/{id}, optimistic), .oa-p0-pulse on P0 rows, and a created-at age dot (phosphor <24h / muted <7d / ember older, exact age in tooltip).component:TaskRowItemsince 0.30.0
- atlas.web.chatweb/src/app/chat/page.tsx:11Cross-agent chat UI — two-pane (room switcher + message stream + composer), color-coded agent identity, live polling, posts as NAO. Backed by the chat API via the server-side /chat/api proxy.page:/chatsince 1.4.0
- atlas.web.cockpitweb/src/app/cockpit/page.tsx:11Lab Productivity Cockpit — NAO's single-glance instrument panel. P0: "Waiting on you" (pending decisions) + "Who's doing what" (agent presence). P1: active claims registry, memory strip (answered decisions + incidents), lab-pulse (velocity / spend / north-star). SSR presence + board + roster + claims + pulse; client polls every 12 s.page:/cockpitsince 1.11.0
- atlas.web.cockpit.coordination-complianceweb/src/app/cockpit/CockpitClient.tsx:1849§ 6 coordination compliance panel on /cockpit — per-agent green/amber/red matrix for presence freshness, API/MCP activity, pending decisions, work claims, and chat cadence. Fetches /api/v1/compliance/coordination client-side; refreshed on every 12 s poll cycle.page:/cockpitsince 1.12.0
- atlas.web.conventionsweb/src/app/conventions/page.tsx:12Conventions authoring UI — scope-ladder cards (global/group/project), create/edit/delete, and a live compiled-prompt preview per repo with a token gauge + truncation warning. Backed by the conventions API via the server-side /conventions/api proxy.page:/conventionssince 1.5.0
- atlas.web.dashboardweb/src/app/page.tsx:26Atlas dashboard — hero constellation, stats readout, full repo grid sorted by last activity. Server-rendered against atlas-api with 60s revalidate.page:/since 0.1.0
- atlas.web.decisionsweb/src/app/decisions/page.tsx:14HITL Decision Inbox UI — recommendation-first decision cards (confirm/choice/input) with a 1-tap "Accept recommendation" hero, per-kind controls, an always-present clarify field, an agent rail with pending+blocking badges, an all-pending blocking-first view, "accept all recommendations from <agent>" batch, mobile swipe triage + desktop keyboard blitz (J/K/A/1-9/R///Enter). Backed by GET /api/v1/decisions, GET /api/v1/decisions/agents, POST /api/v1/decisions/{id}/answer via the server-side /decisions/api proxy.page:/decisionssince 1.8.0
- atlas.web.digest-detailweb/src/app/digests/[label]/page.tsx:19/digests/[label] — full markdown detail view for a single lab digest. Centered scientific-paper layout with frontmatter sidebar, Fraunces headings, zero-dep markdown renderer.page:/digests/{label}since 0.9.0
- atlas.web.digestsweb/src/app/digests/page.tsx:14/digests — archive listing of weekly lab digest .md files. Cards show label, title, date, status chip, tag chips, and the first 2-3 headline bullets parsed server-side from each body; the header carries the automation trust stamp (Codex cron, Mondays 06:10 UTC). Observatory aesthetic — formal, scientific, not a blog.page:/digestssince 0.9.0
- atlas.web.dock-navweb/src/app/_components/Dock.tsx:33macOS-style glass dock navigation — bottom-centre desktop dock with pointer-distance icon magnification, hover labels, a sakura active-route dot and a gentle entrance; mobile has a dedicated bottom tab-bar (MobileNav). Reuses the Sakura-Noir .glass utility and respects prefers-reduced-motion.since 1.5.0
- atlas.web.docsweb/src/app/docs/page.tsx:21/docs — human-readable API reference rendered live from GET /api/v1/help. REST endpoint table grouped by area with method chips (GET phosphor, POST ember, PATCH/DELETE vermilion), MCP tools table with arg signatures, env vars, and the agent-orientation principle block.page:/docssince 0.34.0
- atlas.web.driftweb/src/app/drift/page.tsx:6/drift — org-wide planning-vs-code drift cockpit. 4 cards with count + preview, expandable to full list grouped by repo. Filter by repo + category; ?repo= preselects the repo filter for deep-links from repo pages. Empty buckets get a positive «no drift here» phosphor confirmation.page:/driftsince 0.17.0
- atlas.web.evalweb/src/app/eval/page.tsx:13Dedicated /eval page hosting the EvalCockpit panel — the merged canary + bench + lab result view (source-filterable run table, computed rollup, per-stage drill-down).page:/evalsince 1.7.0
- atlas.web.eval-cockpitweb/src/app/_components/EvalCockpit.tsx:24Self-refreshing consolidated eval/test cockpit (60s poll + visibility/focus refetch). Merges canary + bench + lab result-JSON into one source-filterable run table with a computed pass/fail/degraded rollup, per-source pass-rate + freshness, an Atelier severity ramp, and a click-to-expand per-stage trace with the failing stage highlighted.component:EvalCockpitpage:/evalsince 1.7.0
- atlas.web.features-indexweb/src/app/features/page.tsx:20Atlas feature ledger — searchable / filterable index of every @feature in the org. Filters serialize to query params; server-rendered. Rows carry a deterministic category-prefix accent hairline (hash → 6 observatory colours); spectrum bars carry per-category status mini-stacks from stats.by_category_status.page:/featuressince 0.1.0
- atlas.web.feature-status-coverage-tileweb/src/app/features/page.tsx:188Data-quality tile on the /features ledger page showing overall @feature status-annotation coverage (known/total/pct) and top worst-offender repos. Colour-coded via sakura-noir tokens (good/ember/vermilion).page:/featuressince 0.2.0
- atlas.web.file-graph-canvasweb/src/app/graph/[name]/_FileForceGraph.tsx:30Force-directed canvas rendering of intra-repo file import graph. Nodes coloured by language, sized by in-degree, with pan/zoom/hover/click interactions. Mirrors org /graph aesthetic.page:/graph/[name]/filessince 0.15.0
- atlas.web.file-graph-pageweb/src/app/graph/[name]/page.tsx:22Intra-repo file/module graph page at /graph/[name]/files. Force-directed canvas viz, language colour legend, search filter, side panel on click/hover. Mobile shows a "best on desktop" notice + simple list.page:/graph/[name]/filessince 0.15.0
- atlas.web.fleetweb/src/app/fleet/page.tsx:11Read-only /fleet cockpit — worker/reviewer sessions grid + job board + capture-pane peek over SYSTEM's host-bridge (proxied by atlas-api). SSR sessions+jobs; client polls every 5 s; click a session to peek its capture-pane (NAO-only). No control (send-keys + lease are Phase 2).page:/fleetsince 1.15.0
- atlas.web.flowweb/src/app/flow/page.tsx:27/flow "Data Flow & DRY" landing — per-product card grid over EVERY active repo (GET /api/v1/repos?zone=openalice minus archived + dead-port denylist), GROUPED BY product family (repos.product_group), with each repo's org-wide duplication roll-up (GET /api/v1/duplication) merged in. Families order by total dup mass; clean repos carded as ✓ DRY. Each card deep-links to /flow/[repo]. Server-rendered (force-dynamic).page:/flowsince 1.2.0
- atlas.web.flow-clustersweb/src/app/flow/ClusterList.tsx:15Shared /flow duplication cluster list (ClusterList) — mass heatmap bar per cluster (occurrences × loc), expandable to the N occurrences (repo · file:line · symbol). Reused by /flow/[repo]. Repo badges deep-link to /repos/{name}.component:ClusterListsince 1.2.0
- atlas.web.flow-dataflow-graphweb/src/app/flow/[repo]/_DataflowGraph.tsx:19Layered SVG swimlane renderer for the Phase-2 data-flow graph. Modules as nodes in horizontal layer bands (Ingress→Stores), directional edges (thickness ∝ weight), anomaly highlighting (dead/skip/back-edge/dup). Client component — receives DataflowPayload from the server page.component:DataflowGraphsince 1.3.0
- atlas.web.flow-dataflow-panelweb/src/app/flow/[repo]/_DataflowPanel.tsx:13Client data-fetching wrapper for the Phase-2 data-flow tab. Fetches GET /api/v1/repos/{name}/dataflow, manages loading/error state, renders DataflowGraph on success. Lazy — only fetches when the "Data-flow" tab is first activated.component:DataflowPanelsince 1.3.0
- atlas.web.flow-repoweb/src/app/flow/[repo]/page.tsx:17/flow/[repo] per-product Data Flow & DRY page — two tabs: (1) Duplication clusters from GET /api/v1/repos/{name}/duplication (Phase 1, server-rendered); (2) Layered data-flow graph from GET /api/v1/repos/{name}/dataflow (Phase 2, client-fetched). Tab state in ?tab= URL param. Back-link to /flow.page:/flow/[reposince 1.2.0
- atlas.web.flow-repo-tabsweb/src/app/flow/[repo]/_FlowRepoTabs.tsx:16Client tab switcher for /flow/[repo] — "Duplication" (Phase 1 cluster list) and "Data-flow" (Phase 2 SVG pipeline graph). Tab state reflects to URL via pushState; dataflow panel fetches lazily on first activate.component:FlowRepoTabssince 1.3.0
- atlas.web.galaxyweb/src/app/galaxy/page.tsx:93D repo galaxy — canvas star-cloud of every repo, clustered by product_group, sized by features, toned by grade; auto-rotates, orbits on drag, labels on hover, navigates on click. Dependency-free (no three.js).page:/galaxysince 1.5.0
- atlas.web.graph-3dweb/src/app/graph/page.tsx:12Atlas 3D module-graph viewer — force-directed React Three Fiber rendering of repos as nodes, deps as edges. Hover surfaces detail card; click navigates to /repos/[name].page:/graphsince 0.1.0
- atlas.web.graph-brief-panelweb/src/app/graph/_BriefPanel.tsx:19/graph click-to-brief side panel — clicking a node opens a 360px observatory card with the repo brief (grade, weakest axes, deps, consumers, top features) from GET /api/v1/repos/{name}/brief instead of navigating away; double-click or the panel link opens the repo page.component:BriefPanelsince 0.30.0
- atlas.web.iconweb/src/app/_shared/Icon.tsx:27Shared single-stroke (1.75) line-icon set for the Atlas web surface — one monochrome currentColor `<Icon name>` system consumed by the Dock, the chat composer/rail and the decisions cards, replacing the old per-component inline SVGs + emoji + Unicode dingbats. 24×24 grid, rounded caps, aria-hidden by default.since 1.10.0
- atlas.web.impact-graphweb/src/app/impact/[repo]/page.tsx:23Focus-repo impact graph — concentric ring SVG/canvas showing every consumer up to 3 hops out, colour-coded by criticality (critical=amber, important=cyan, minor=dim). Side panel lists dependents with protocol, depth, and purpose.page:/impact/[reposince 0.18.0
- atlas.web.incidentsweb/src/app/incidents/page.tsx:12/incidents — chronological feed of repo health up↔down transitions. Last 7 days, 200 rows max, server-rendered against /api/v1/incidents.page:/incidentssince 0.3.0
- atlas.web.lang-barweb/src/app/_components/LangBar.tsx:20GitHub-style per-language LOC bar + legend. Used on the repo detail page and the dashboard org-wide widget.since 0.9.0
- atlas.web.language-donutweb/src/app/_components/LanguageDonut.tsx:21Pure-SVG arc donut chart for per-language LOC — used on repo detail + org dashboard.page:/page:/repos/[namesince 0.10.0
- atlas.web.layoutweb/src/app/layout.tsx:17Atlas root layout — loads Fraunces + IBM Plex Mono (observatory) plus the Sakura-Noir Glass chat trio (Bricolage Grotesque display, Hanken Grotesk body, Geist Mono mono), mounts the persistent observatory frame (starfield, grain, top eyebrow, compass nav), applies security headers via next.config.layout:/since 0.1.0
- atlas.web.markdown-bodyweb/src/app/_components/MarkdownBody.tsx:19Zero-dep markdown-to-React renderer for atlas markdown views. Supports headings h1-h3, lists, tables, code blocks, server-rendered Mermaid SVG cache, relative marketing asset image rewriting, inline bold/italic/code/links/images, and blockquotes.component:MarkdownBodysince 0.9.0
- atlas.web.marketingweb/src/app/marketing/page.tsx:10/marketing — positioning cards for OpenAlice and OpenAliceLabs plus a campaign grid filtered by lifecycle status and channel. Specific product / persona brands (alice the persona, lab, etc.) are seeded later by NAO + the marketing agent, not the cockpit.page:/marketingsince 0.19.0
- atlas.web.marketing-asset-passthroughweb/src/app/api/marketing/asset/[...path]/route.ts:4/api/marketing/asset/* streams git-tracked marketing assets from openalice-atlas/marketing with traversal protection, extension content-type sniffing, and short public media caching.route:GET /api/marketing/asset/{path}since 0.8.0
- atlas.web.marketing-campaign-detailweb/src/app/marketing/campaigns/[slug]/page.tsx:12/marketing/campaigns/[slug] — campaign detail page with rendered plan markdown, status sidebar, channels, related products, assets, and run dates.page:/marketing/campaigns/{slug}since 0.19.0
- atlas.web.marketing-moodboard-detailweb/src/app/marketing/moodboards/[slug]/page.tsx:12/marketing/moodboards/[slug] — mood-board detail page with markdown narrative, lead/status metadata, and masonry image grid with captions and credits.page:/marketing/moodboards/{slug}since 0.22.0
- atlas.web.marketing-moodboardsweb/src/app/marketing/moodboards/page.tsx:11/marketing/moodboards — mood-board grid with lifecycle filters, cover images, lead chips, image counts, and status-since metadata.page:/marketing/moodboardssince 0.22.0
- atlas.web.marketing-pitch-detailweb/src/app/marketing/pitches/[slug]/page.tsx:14/marketing/pitches/[slug] — server-fetched pitch deck detail with 16:9 client slide viewer, deep-link slide state, and markdown-rendered slides with marketing asset resolution.page:/marketing/pitches/{slug}since 0.22.0
- atlas.web.marketing-pitchesweb/src/app/marketing/pitches/page.tsx:11/marketing/pitches — pitch deck list with lifecycle badges, audience/brand chips, slide counts, and duration metadata.page:/marketing/pitchessince 0.22.0
- atlas.web.marketing-pitch-viewerweb/src/app/marketing/pitches/[slug]/_PitchDeckViewer.tsx:15Client pitch-deck viewer with 16:9 frame, arrow/home/end/space/escape keyboard controls, dot pagination, and ?slide deep-link updates.component:PitchDeckViewersince 0.22.0
- atlas.web.mobile-navweb/src/app/_components/MobileNav.tsx:22Mobile-only fixed bottom tab-bar (md:hidden) with 5 primary tabs, sakura active accent, safe-area inset, and a "More" slide-in drawer showing all ALL_LINKS destinations. Replaces the old hamburger nav. Uses Sakura-Noir glass tokens.since 1.6.0
- atlas.web.nav-toggleweb/src/app/_shared/NavToggle.tsx:35Unified chat⇄decisions navigation toggle shared by both the chat and decisions rails — one component, one slot, both directions, with a live pending-decisions badge (sum of GET /decisions/api/agents pending_count, ~15s poll, red dot on blocking, hidden at 0). Sakura-Noir glass, ≥44px target, safe-area aware.since 1.9.0
- atlas.web.now-stripweb/src/app/_components/NowStrip.tsx:11Dashboard hive-pulse strip — per-agent in-progress tasks + live claims + queue head + done-today, from GET /api/v1/board.component:NowStripsince 0.27.0
- atlas.web.observed-atweb/src/app/_components/ObservedAt.tsx:22Client-only minute-precision UTC stamp for the cockpit footer; replaces the SSR-time render that caused React #418 hydration warnings.component:ObservedAtsince 0.11.0
- atlas.web.org-goals-aggregateweb/src/app/_components/OrgGoalsAggregate.tsx:15Dashboard panel showing org-wide goals aggregate — done count, in_progress count, average heuristic progress% across active goals.page:/since 0.2.0
- atlas.web.orgsweb/src/app/orgs/page.tsx:14/orgs — organization-grouped roster. Card sections: internal OpenAlice org (internal agents + openalice/lab repos) + one external org per tenant (Osthud/Exposefy; unmapped → Unassigned). Each section lists its agents (tier, active dot, scope repos, and the LLM subscription — account/plan + live dot from roster-v2) and repos (grade chip, zone, freshness). SSR-fetched from /api/v1/orgs with the internal secret.page:/orgssince 1.12.0
- atlas.web.product-detailweb/src/app/products/[slug]/page.tsx:12/products/[slug] — product detail page with rendered brief, audience, pricing, related repos, lead, metrics, and lifecycle status.page:/products/{slug}since 0.19.0
- atlas.web.productsweb/src/app/products/page.tsx:12/products — product cockpit list with status filters, lead chips, brief excerpts, related-repo chips (linked, grade-lettered), a compact goals roadmap block (status glyphs via org-goal cross-reference), and dim which-file-to-add hints for missing fields.page:/productssince 0.19.0
- atlas.web.progressweb/src/app/progress/page.tsx:15/progress — org-wide goal portfolio with status grouping, multi-repo filter chips, sort dropdown, by-repo/by-status views. The by-repo view groups goals into per-repo <details> accordions (repo + n goals + %-done ring) so 100+ goals stay scannable. Uses GET /api/v1/goals for enriched progress%.page:/progresssince 0.16.0
- atlas.web.provider-usageweb/src/app/_components/ProviderUsage.tsx:26Self-refreshing dashboard panel (60s poll + visibility/focus refetch) showing live Claude Code + Codex subscription utilisation. Hairline bars per provider for the primary (5h) and secondary (7-day) windows with reset-at timestamps, Atelier colour-ramp by used-pct, an 80% threshold tick, and a linear burn-rate projection — shown only when derivable, never invented.component:ProviderUsagesince 0.12.0
- atlas.web.repo-detailweb/src/app/repos/[name]/page.tsx:31Atlas repo-detail page — magnification of a single repo with magnitude, status, README excerpt, full feature ledger grouped by category, source-file pointers.page:/repos/[namesince 0.1.0
- atlas.web.repos-indexweb/src/app/repos/page.tsx:14Atlas repos-index — alphabetical chart-style table of every observed repo. Counterpart to the dashboard's by-activity grid.page:/repossince 0.1.0
- atlas.web.roadmapweb/src/app/roadmap/page.tsx:11/roadmap — product roadmap as a tech-tree DAG + lab constellation + detail drawer. SSR list (session-gated); client polls + fetches per-product trees; ?fixture=1 dev demo. Mono-sakura ink-canvas, the golden break-even path in gold.page:/roadmapsince 1.16.0
- atlas.web.roadmap.proxyweb/src/app/roadmap/api/[...path]/route.ts:12/roadmap/api/* → /api/v1/roadmap/* session-gated proxy (X-Internal-Secret, NAO-only). GET only. Mirrors /fleet/api.route:/roadmap/api/[...pathsince 1.16.0
- atlas.web.roadmap.typesweb/src/app/roadmap/_components/types.ts:7Defensive TypeScript contract for the /roadmap surfaces (constellation + tech-tree + drawer). Every field optional — the UI tolerates partial/null payloads from the markdown-derived roadmap.component:RoadmapClientsince 1.16.0
- atlas.web.searchweb/src/app/search/page.tsx:17Multi-domain semantic search page across features, repos, goals, achievements, knowledge notes, and digests. ?q= query; ?kinds=... narrows the domain; results re-ranked client-and-server side by pgvector cosine similarity.page:/searchsince 0.6.0
- atlas.web.show-more-listweb/src/app/_components/ShowMoreList.tsx:30Reusable client-side progressive-disclosure list — renders an initial slice of a pre-fetched array and reveals more on each button press. Zero extra network calls; filter-key reset; accessible real <button> with aria-label; 44px tap target; on-brand Sakura-noir tokens. Lower-level useShowMore hook + ShowMoreTableButton handle table layouts in the callers.component:ShowMoreListsince 0.18.0
- atlas.web.site-chromeweb/src/app/_components/SiteChrome.tsx:26Route-aware chrome gate — hides the persistent header/footer frame on full-screen immersive routes (/chat, /decisions, /world), keeps it on every other route.since 1.4.0
- atlas.web.sparklineweb/src/app/_components/Sparkline.tsx:9Shared inline-SVG sparkline primitive (~120×20, polyline, aria-hidden, zero dependencies) — powers the /repos 90-day commit sparklines and the repo-detail grade-trend miniatures.component:Sparklinesince 0.30.0
- atlas.web.telegram-railweb/src/app/_shared/TelegramRail.tsx:38Shared Telegram-style sidebar used by BOTH /chat (rooms) and /decisions (agents) — round monogram avatar, display name, a dim one-line sub-line, right-side meta (relative time or count pill), sakura unread/active state, recency/priority sort. Header carries the unified NavToggle (chat⇄decisions) + Atlas home. Sakura-Noir glass, ≥44px rows.since 1.9.0
- atlas.web.timelineweb/src/app/timeline/page.tsx:14Museum-ribbon /timeline page — horizontal scroll of hand-curated org achievements coloured by category and sized by impact. Category/impact filter chips, click-to-expand cards with evidence links.page:/timelinesince 0.8.0
- atlas.web.usageweb/src/app/usage/page.tsx:13Dedicated /usage page hosting the ProviderUsage panel (Claude + Codex live quota readout). Single-purpose surface so the dashboard hero stays focused.page:/usagesince 0.12.1
- atlas.web.voice-noteweb/src/app/_shared/VoiceNote.tsx:28Telegram-style voice-note player for chat 🎙 messages — circular play/pause, a seekable sakura-filled waveform scrubber (pointer-drag + tap + keyboard), elapsed/total time, a 1×/1.5×/2× speed toggle, and room-wide single-playback (starting one note pauses any other). Replaces the bare native <audio controls>. Sakura-noir, ≥44px controls, reduced-motion-safe, SSR-safe (registry is a module-level ref Set; all Audio/DOM access in effects/handlers).since 1.11.0
- atlas.web.wikiweb/src/app/wiki/page.tsx:20/wiki — folder tree landing for the lab knowledge base. Lists every note in openalice-atlas/knowledge/ grouped by folder, sorted in the canonical order from knowledge/README.md. Tag filter chips above the tree (multi-select OR via ?tags=, recurring tags only) and a per-note freshness dot (phosphor <14d · muted <60d · ember older, from the note's date). Observatory aesthetic; reuses the digests card styling.page:/wikisince 0.17.0
- atlas.web.wiki-detailweb/src/app/wiki/[...path]/page.tsx:16/wiki/[...path] — single knowledge-base note detail. Scientific-paper layout (70ch + frontmatter sidebar). Cross-links resolve in-app via MarkdownBody's kb:// handling.page:/wiki/{path}since 0.17.0
- atlas.web.worldweb/src/app/world/page.tsx:13THE RABBIT HOLE — flagship navigable 3D data-city (R3F) live-mirroring /api/v1/world. The FLOOR IS A FLAT CIRCUIT-BOARD plane (microchip PCB grid, reflective glass), the SKY IS THE MANDELBROT cosmos (logo-centred on the cusp -0.5,0; boundary glows sakura), and the WELL IS THE RABBIT HOLE — a fractal-zoom well-portal cut into the floor at the core descending into the fractal-verse. Towers=repos stand on the floor (height∝size, glow∝freshness, windows∝features, integrity∝grade, billboard health-bar above), dependencies=PCB Manhattan bus-traces with data-pulse beads (importance∝thickness/brightness), phantoms=agents on the floor, billboarded labels always face camera; sakura-noir palette, bloom + ASCII-rain ambient, spectator free-fly nav, 15s live poll, reduced-motion aware.page:/worldsince 1.6.0
- atlas.web.world.celSinCityKitweb/src/app/world/celSinCityKit.ts:49Instanced cel-shaded Sin City ink tower kit — collapses ~4300 per-tower draw-calls into one InstancedMesh + procedural fwidth white-ink (edges/slabs/windows) shader; mobile-cheap, bloom-tier-disciplined.page:/worldsince 1.6.0
- atlas.web.world.dataweb/src/app/world/worldData.ts:20THE RABBIT HOLE world feed — wire types, 15s de-duped live poll of /api/v1/world, and deterministic zone-clustered tower/phantom layout seeded by node id.page:/worldsince 1.6.0
- atlas.web.world.infocardweb/src/app/world/components/InfoCard.tsx:23THE RABBIT HOLE repo info-card — an out-of-Canvas sakura-noir overlay showing the clicked tower's name/grade/size/loc/file_count/last_commit/deps/owner/build/incidents/coverage/zone/features/freshness from the enriched /world node, fed by the selectionStore bridge; closeable via ×, Escape, or backdrop.page:/worldsince 1.7.0
- atlas.web.world.InstancedTowersweb/src/app/world/components/InstancedTowers.tsx:29The single instanced cel-Sin-City BODY layer for /world — one InstancedMesh + procedural fwidth white-ink shader replaces ~4300 per-tower body/edge/window draw-calls; mobile-solid, bloom-tier-disciplined (ink toneMapped under threshold, glow stays on per-tower overlays).page:/worldsince 1.7.0
- atlas.web.world.selectionweb/src/app/world/selectionStore.ts:16THE RABBIT HOLE selection store — a useSyncExternalStore-backed module store holding the clicked tower's repo node, bridging the in-Canvas Tower click to the out-of-Canvas InfoCard overlay without threading through Scene.page:/worldsince 1.7.0
- atlas.web.world.touch-inputweb/src/app/world/touchInputStore.ts:29THE RABBIT HOLE touch-input store — a framework-free module store bridging on-screen mobile controls (virtual joystick, drag-look, pinch-zoom, ascend/descend, dive) to the in-Canvas camera rig, so /world is fully navigable on a touch phone without pointer-lock.page:/worldsince 1.8.0
atlas/web/auth
1 feature- atlas.web.telegram-loginweb/src/lib/telegramAuth.ts:11Passwordless admin login via Telegram (OIDC code-flow+PKCE, JWKS-verified id_token, TG-id allowlist). Mints the same atlas_admin session; password kept as fallback. Server-only secret.since 0.1.0