m1/org/openalice-atlasci failure

openalice-atlas

atlas working here

[Atlas card](https://atlas.blal.pro/repos/openalice-atlas) · Live at **`https://atlas.blal.pro`**

Features
200
Status
·unknown
Last activity
3h ago
Branch
mvp

Architecture rating

D4h ago
docsC

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

data layerC

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

reliabilityD

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

testingD

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

securityD

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

observabilityD

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

consistencyF

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.yml

OpenAlice atlas — the org cockpit + wiki + agent MCP for all 57 openalicelabs repos.

Runtime deps
  • openalice-authshared-jwt
    via SHARED_JWT_SECRET
    Verify oa_session JWTs from the ecosystem SSO for UI access (read endpoints stay anonymous).
Consumed env
  • 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
Exposes
  • 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
Owns tables
  • repos
  • features
  • repo_deps
  • scan_runs
  • health_snapshots
Env drift · manifest ⇄ code

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.

Code reads, manifest omits
  • 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
Observed reads: 71 · declared: 28

Roadmap · what's planned next

50% avg6 goals

Code composition

tokei · loc
99.6kloc
  • 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% codecodecommentsblanksfiles
Rust36.4%36,2633,5433,07870
TSX32.2%32,0436,3552,575132
HTML17.0%16,9648151,18157
TypeScript4.4%4,3462,06749944
Shell2.1%2,12774436121
SQL1.6%1,6211,74857471
YAML1.4%1,4112687762
JavaScript1.4%1,38923611828
Python1.4%1,361611707
CSS1.4%1,3496751623
SVG0.4%364161116
JSON0.2%179007
TOML0.1%1147114
Dockerfile0.1%7241113
Markdown0.0%057,63716,716482
Plain Text0.0%0301

Telemetry ribbon · last 90 days

200 events
MAYJUNJUL2026-06-16 · commit · new commit 27d4414 → d4fbc432026-06-16 · commit · new commit d4fbc43 → 36ab3a52026-06-16 · commit · new commit 36ab3a5 → e21eb542026-06-16 · commit · new commit e21eb54 → 1c9e8a92026-06-16 · commit · new commit 1c9e8a9 → 0057fde2026-06-16 · commit · new commit 0057fde → 68b004c2026-06-16 · commit · new commit 68b004c → 023b8fb2026-06-16 · commit · new commit 023b8fb → c2806982026-06-16 · commit · new commit c280698 → 66504f12026-06-16 · commit · new commit 66504f1 → d5dcc942026-06-16 · commit · new commit d5dcc94 → b1f6b032026-06-16 · commit · new commit b1f6b03 → 7fc9fd22026-06-16 · commit · new commit 7fc9fd2 → c08a4092026-06-16 · commit · new commit c08a409 → cb0866f2026-06-16 · commit · new commit cb0866f → a21d47b2026-06-16 · commit · new commit a21d47b → ff906f02026-06-16 · commit · new commit ff906f0 → 44bd7ea2026-06-16 · commit · new commit 44bd7ea → ecda4dd2026-06-16 · commit · new commit ecda4dd → 325e64d2026-06-17 · commit · new commit 325e64d → 1b4f1fa2026-06-17 · commit · new commit 1b4f1fa → 11d10ee2026-06-17 · commit · new commit 11d10ee → c5207f02026-06-17 · commit · new commit c5207f0 → 53cd4462026-06-17 · commit · new commit 53cd446 → 89c02fd2026-06-17 · commit · new commit 89c02fd → 150591b2026-06-17 · commit · new commit 150591b → 63c51652026-06-17 · commit · new commit 63c5165 → 1734f322026-06-17 · commit · new commit 1734f32 → 1906d722026-06-17 · commit · new commit 1906d72 → d18dfab2026-06-17 · commit · new commit d18dfab → decb6972026-06-17 · commit · new commit decb697 → 61e6dd32026-06-17 · commit · new commit 61e6dd3 → 599d7bf2026-06-17 · commit · new commit 599d7bf → a0c12282026-06-17 · commit · new commit a0c1228 → 01acf2e2026-06-17 · commit · new commit 01acf2e → 2942eaf2026-06-17 · commit · new commit 2942eaf → def00052026-06-17 · commit · new commit def0005 → 6d096462026-06-17 · commit · new commit 6d09646 → 56a66bb2026-06-17 · commit · new commit 56a66bb → 78ab6d62026-06-17 · commit · new commit 78ab6d6 → f8599072026-06-17 · commit · new commit f859907 → 0c058772026-06-17 · commit · new commit 0c05877 → 006a3812026-06-17 · commit · new commit 006a381 → 0683e002026-06-17 · commit · new commit 0683e00 → ea87c192026-06-17 · commit · new commit ea87c19 → 3d0bd602026-06-18 · commit · new commit 3d0bd60 → 6584b392026-06-18 · commit · new commit 6584b39 → 64df9d42026-06-18 · commit · new commit 64df9d4 → 87cd40f2026-06-18 · commit · new commit 87cd40f → 42e2cd62026-06-18 · commit · new commit 42e2cd6 → d235b052026-06-18 · commit · new commit d235b05 → 515e5002026-06-18 · commit · new commit 515e500 → 20079c62026-06-18 · commit · new commit 20079c6 → cffef0b2026-06-18 · commit · new commit cffef0b → 79398102026-06-18 · commit · new commit 7939810 → 9b8a6482026-06-18 · commit · new commit 9b8a648 → 8d8b9e42026-06-18 · commit · new commit 8d8b9e4 → 21ceaa42026-06-18 · commit · new commit 21ceaa4 → 2477ce22026-06-18 · commit · new commit 2477ce2 → 0e4b71f2026-06-18 · commit · new commit 0e4b71f → de403fd2026-06-18 · commit · new commit de403fd → 6ebb36e2026-06-18 · commit · new commit 6ebb36e → b18226c2026-06-19 · commit · new commit b18226c → ca16ae02026-06-19 · commit · new commit ca16ae0 → a034f2e2026-06-19 · commit · new commit a034f2e → 858c3c42026-06-19 · commit · new commit 858c3c4 → 75f53822026-06-19 · commit · new commit 75f5382 → 90414542026-06-19 · commit · new commit 9041454 → 44467aa2026-06-19 · commit · new commit 44467aa → 1bfaf542026-06-19 · commit · new commit 1bfaf54 → 405f2952026-06-20 · commit · new commit 405f295 → f126d9a2026-06-20 · commit · new commit f126d9a → 706b1dd2026-06-20 · commit · new commit 706b1dd → 1bcbefa2026-06-20 · commit · new commit 1bcbefa → 04304492026-06-20 · commit · new commit 0430449 → 43776042026-06-20 · commit · new commit 4377604 → cafadb22026-06-20 · commit · new commit cafadb2 → 4f19c902026-06-20 · commit · new commit 4f19c90 → 69057402026-06-21 · commit · new commit 6905740 → bedf3072026-06-21 · commit · new commit bedf307 → 39e9bb92026-06-21 · commit · new commit 39e9bb9 → 3b92c522026-06-21 · commit · new commit 3b92c52 → 2f2461d2026-06-21 · commit · new commit 2f2461d → 1bfb1682026-06-21 · commit · new commit 1bfb168 → cb0139f2026-06-21 · commit · new commit cb0139f → 8004d7e2026-06-21 · commit · new commit 8004d7e → e51efc82026-06-21 · commit · new commit e51efc8 → b88ac742026-06-21 · commit · new commit b88ac74 → 22e15d52026-06-21 · commit · new commit 22e15d5 → 4b721582026-06-21 · commit · new commit 4b72158 → d6c5ead2026-06-21 · commit · new commit d6c5ead → 0299fe02026-06-21 · commit · new commit 0299fe0 → cd0d5782026-06-21 · commit · new commit cd0d578 → 4d5fdcc2026-06-21 · commit · new commit 4d5fdcc → 75f54c72026-06-21 · commit · new commit 75f54c7 → befe8602026-06-22 · commit · new commit befe860 → bb579612026-06-22 · commit · new commit bb57961 → 32d34e72026-06-22 · commit · new commit 32d34e7 → 37aa4792026-06-22 · commit · new commit 37aa479 → 6220d572026-06-22 · commit · new commit 6220d57 → 9ae92d52026-06-22 · commit · new commit 9ae92d5 → 996d25c2026-06-22 · commit · new commit 996d25c → 2f93ea12026-06-22 · commit · new commit 2f93ea1 → 5d439282026-06-22 · commit · new commit 5d43928 → 22dca962026-06-22 · commit · new commit 22dca96 → a4fbe262026-06-24 · commit · new commit a4fbe26 → 9b6c32b2026-06-24 · commit · new commit 9b6c32b → d708bfb2026-06-24 · commit · new commit d708bfb → 7f398dd2026-06-24 · commit · new commit 7f398dd → b0c42b42026-06-24 · commit · new commit b0c42b4 → 75a518c2026-06-24 · commit · new commit 75a518c → e4f68f52026-06-25 · commit · new commit e4f68f5 → 1db42642026-06-25 · commit · new commit 1db4264 → 37353c62026-06-25 · commit · new commit 37353c6 → 8b71e4b2026-06-25 · commit · new commit 8b71e4b → 3ca84d32026-06-25 · commit · new commit 3ca84d3 → b2c7c4e2026-06-25 · commit · new commit b2c7c4e → c368a5c2026-06-26 · commit · new commit c368a5c → 9fcee512026-06-26 · commit · new commit 9fcee51 → dccc0c02026-06-27 · commit · new commit dccc0c0 → ffd57df2026-06-27 · commit · new commit ffd57df → 06cb4202026-06-27 · commit · new commit 06cb420 → 8f99a622026-06-27 · commit · new commit 8f99a62 → d0cdfeb2026-06-27 · commit · new commit d0cdfeb → d2cec272026-06-27 · commit · new commit d2cec27 → 8b6d1df2026-06-28 · commit · new commit 8b6d1df → 6c972862026-06-29 · commit · new commit 6c97286 → 3d28dc12026-06-29 · commit · new commit 3d28dc1 → f099adb2026-06-29 · commit · new commit f099adb → 19b9b882026-06-29 · commit · new commit 19b9b88 → 976154f2026-06-29 · commit · new commit 976154f → 7baa2172026-06-29 · commit · new commit 7baa217 → 73386fc2026-06-29 · commit · new commit 73386fc → 3211fd02026-06-29 · commit · new commit 3211fd0 → c8f85fa2026-06-29 · commit · new commit c8f85fa → de0054a2026-06-29 · commit · new commit de0054a → 2af05092026-06-29 · commit · new commit 2af0509 → ce0c23b2026-06-30 · commit · new commit ce0c23b → ed694272026-06-30 · commit · new commit ed69427 → 5f4b6c22026-06-30 · commit · new commit 5f4b6c2 → 22357972026-06-30 · commit · new commit 2235797 → 6a3fbd22026-06-30 · commit · new commit 6a3fbd2 → 9370f202026-06-30 · commit · new commit 9370f20 → 320539d2026-06-30 · commit · new commit 320539d → 8750edb2026-06-30 · commit · new commit 8750edb → dbbab0b2026-06-30 · commit · new commit dbbab0b → 29c22c12026-06-30 · commit · new commit 29c22c1 → c3c395e2026-06-30 · commit · new commit c3c395e → 12424052026-06-30 · commit · new commit 1242405 → 9b11ef82026-06-30 · commit · new commit 9b11ef8 → 748137d2026-07-01 · commit · new commit 748137d → 70627412026-07-01 · commit · new commit 7062741 → a4273422026-07-01 · commit · new commit a427342 → 7e5c9e32026-07-01 · commit · new commit 7e5c9e3 → 05f42432026-07-01 · commit · new commit 05f4243 → 86abb982026-07-01 · commit · new commit 86abb98 → e24f0b62026-07-01 · commit · new commit e24f0b6 → c9c32e92026-07-01 · commit · new commit c9c32e9 → 63237862026-07-01 · commit · new commit 6323786 → 060d06e2026-07-01 · commit · new commit 060d06e → c0a4ea32026-07-02 · commit · new commit c0a4ea3 → 7e9acfa2026-07-02 · commit · new commit 7e9acfa → f11861e2026-07-02 · commit · new commit f11861e → dbc8b512026-07-02 · commit · new commit dbc8b51 → 8b539582026-07-02 · commit · new commit 8b53958 → 00417f22026-07-02 · commit · new commit 00417f2 → 5f036cf2026-07-02 · commit · new commit 5f036cf → 665e0b32026-07-02 · commit · new commit 665e0b3 → 47f785c2026-07-04 · commit · new commit 47f785c → 2cf89e92026-07-06 · commit · new commit 2cf89e9 → 05ea8562026-07-06 · commit · new commit 05ea856 → baa0b4e2026-07-09 · commit · new commit baa0b4e → 0e8fe622026-07-09 · commit · new commit 0e8fe62 → 031671f2026-07-09 · commit · new commit 031671f → 516f24b2026-07-10 · commit · new commit 516f24b → c09eec02026-07-10 · commit · new commit c09eec0 → 413af562026-07-10 · commit · new commit 413af56 → 746600b2026-07-11 · commit · new commit 746600b → ac9cb032026-07-11 · commit · new commit ac9cb03 → 9f85f3c2026-07-11 · commit · new commit 9f85f3c → cac64b92026-07-12 · commit · new commit cac64b9 → ac84a622026-07-12 · commit · new commit ac84a62 → 3bac0ed2026-07-12 · commit · new commit 3bac0ed → 0ab924d2026-07-12 · commit · new commit 0ab924d → 2ba40a82026-07-12 · commit · new commit 2ba40a8 → fbcb52c2026-07-12 · commit · new commit fbcb52c → 535446b2026-07-12 · commit · new commit 535446b → 31024172026-07-13 · commit · new commit 3102417 → da9014e2026-07-14 · commit · new commit da9014e → 9e8e8ae2026-07-14 · commit · new commit 9e8e8ae → 87334f92026-07-15 · commit · new commit 87334f9 → 7edc7922026-07-15 · commit · new commit 7edc792 → 1f543812026-07-15 · commit · new commit 1f54381 → b88d7ba2026-07-15 · commit · new commit b88d7ba → 33717c12026-07-15 · commit · new commit 33717c1 → ed857c92026-07-15 · commit · new commit ed857c9 → d8701522026-07-15 · commit · new commit d870152 → 323bf3e2026-07-15 · commit · new commit 323bf3e → df5afeb2026-07-15 · commit · new commit df5afeb → 3b8978a2026-07-18 · commit · new commit 3b8978a → ba66253NOW
commitmanifestlifecyclekind

atlas/api

54 features
  • atlas.api.affected-build
    api/src/routes.rs:6471
    GET /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.affected
    since 0.24.0
  • atlas.api.agents.detail
    api/src/agents.rs:243
    GET /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/:id
    since 0.18.0
  • atlas.api.agents.list
    api/src/agents.rs:191
    GET /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/agents
    since 0.17.0
  • atlas.api.agents.memory
    api/src/agents.rs:50
    GET /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}/memory
    since 0.17.0
  • atlas.api.agents.row
    api/src/agents.rs:74
    AgentRow — 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-state
    api/src/state.rs:21
    Axum 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.board
    api/src/board.rs:13
    Org 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.update
    since 0.27.0
  • atlas.api.code-callees
    api/src/code.rs:462
    GET /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-callers
    api/src/code.rs:382
    GET /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-search
    api/src/code.rs:176
    GET /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-sparks
    api/src/routes.rs:1071
    GET /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-sparks
    since 1.5.0
  • atlas.api.context
    api/src/context.rs:13
    GET /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.context
    since 0.28.0
  • atlas.api.dataflow
    api/src/flow.rs:49
    Layered 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}/dataflow
    since 1.3.0
  • atlas.api.digests.get
    api/src/digests.rs:186
    Returns 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.list
    api/src/digests.rs:108
    Lists 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/digests
    since 0.9.0
  • atlas.api.drift
    api/src/drift.rs:47
    Org-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.open
    api/src/drift.rs:510
    Drift-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.org
    api/src/drift.rs:576
    Org-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/open
    since 0.20.0
  • atlas.api.drift.open.repo
    api/src/drift.rs:658
    Per-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}/drift
    since 0.20.0
  • atlas.api.drift.org
    api/src/drift.rs:233
    Org-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/drift
    since 0.17.0
  • atlas.api.drift.repo
    api/src/drift.rs:324
    Per-repo planning-vs-code drift — same 4 buckets as /api/v1/drift but scoped to one repo.
    route:GET /api/v1/repos/{name}/drift
    since 0.17.0
  • atlas.api.features.create
    api/src/features.rs:76
    POST /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/features
    since 1.5.0
  • atlas.api.goals.create
    api/src/goals.rs:91
    POST /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/goals
    since 1.6.0
  • atlas.api.goals-with-progress
    api/src/routes.rs:275
    GET /api/v1/repos/{name}/goals — manifest goals enriched with heuristic progress% derived from @feature token-overlap matching.
    since 0.2.0
  • atlas.api.grade-regressions
    api/src/grades.rs:395
    GET /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.regressions
    since 1.4.0
  • atlas.api.grades-upsert
    api/src/grades.rs:568
    POST /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/grades
    since 1.5.0
  • atlas.api.grade-trend
    api/src/grades.rs:296
    GET /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-trend
    since 1.4.0
  • atlas.api.hotspots
    api/src/hotspots.rs:53
    GET /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/hotspots
    since 0.22.0
  • atlas.api.image-gen
    api/src/image_gen.rs:25
    POST /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-gen
    since 0.20.0
  • atlas.api.impact-graph
    api/src/routes.rs:5551
    GET /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}/impact
    since 0.18.0
  • atlas.api.marketing-campaigns
    api/src/products.rs:259
    GET /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-moodboards
    api/src/products.rs:344
    GET /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-pitches
    api/src/products.rs:420
    GET /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-positioning
    api/src/products.rs:496
    GET /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-registry
    api/src/routes.rs:2210
    Org-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/mcp
    since 0.10.0
  • atlas.api.metrics
    api/src/routes.rs:4804
    Prometheus 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-goals
    api/src/routes.rs:2447
    GET /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/goals
    since 0.16.0
  • atlas.api.orgs
    api/src/orgs.rs:277
    GET /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/orgs
    since 1.12.0
  • atlas.api.preflight
    api/src/routes.rs:6283
    GET /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.preflight
    since 0.23.0
  • atlas.api.products
    api/src/products.rs:178
    GET /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-brief
    api/src/routes.rs:5669
    GET /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.brief
    since 1.3.0
  • atlas.api.repo-ci
    api/src/routes.rs:2140
    Per-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}/ci
    since 0.10.0
  • atlas.api.repo-file-graph
    api/src/routes.rs:3272
    Returns 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-graph
    since 0.15.0
  • atlas.api.repo-symbols
    api/src/code.rs:300
    GET /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.request
    api/src/rescan.rs:40
    POST /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/rescan
    since 1.5.0
  • atlas.api.roadmap
    api/src/roadmap.rs:18
    Read-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.server
    api/src/main.rs:7
    HTTP 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-api
    since 0.1.0
  • atlas.api.tenant-pool
    api/src/tenant_pool.rs:23
    Per-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.create
    api/src/wiki.rs:585
    POST /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/wiki
    since 1.5.0
  • atlas.api.wiki.get
    api/src/wiki.rs:457
    Returns 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.list
    api/src/wiki.rs:336
    Lists 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/wiki
    since 0.17.0
  • atlas.api.world
    api/src/world.rs:179
    GET /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/world
    since 1.7.0
  • atlas.api.zones
    api/src/routes.rs:3817
    Multi-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}/zone
    since 1.1.0
  • atlas.api.scoped-agent-write
    :0
    M11 agent-key write endpoints
    since 1.5.0

atlas/api/access

9 features
  • atlas.api.access
    api/src/access.rs:21
    Security 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/check
    since 1.13.0
  • atlas.api.access.approve
    api/src/access.rs:423
    POST /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}/approve
    since 1.13.0
  • atlas.api.access.check
    api/src/access.rs:573
    GET /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/check
    since 1.13.0
  • atlas.api.access.deny
    api/src/access.rs:495
    POST /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}/deny
    since 1.13.0
  • atlas.api.access.file
    api/src/access.rs:282
    POST /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/requests
    since 1.13.0
  • atlas.api.access.list
    api/src/access.rs:361
    GET /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/requests
    since 1.13.0
  • atlas.api.access.room_close
    api/src/access.rs:703
    POST /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}/close
    since 1.14.0
  • atlas.api.access.room_open
    api/src/access.rs:638
    POST /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}/open
    since 1.14.0
  • atlas.api.access.rooms
    api/src/access.rs:746
    GET /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/rooms
    since 1.14.0

atlas/api/assets

1 feature
  • atlas.api.assets.upscale
    api/src/upscale.rs:23
    POST /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.chat
    api/src/chat.rs:21
    Cross-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.post
    since 1.4.0
  • atlas.api.transcribe
    api/src/transcribe.rs:27
    POST /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/transcribe
    since 1.5.0

atlas/api/conventions

1 feature
  • atlas.api.conventions
    api/src/conventions.rs:13
    Scoped 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.decisions
    api/src/decisions.rs:17
    HITL 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}/reply
    since 1.8.0
  • atlas.api.decisions.agents
    api/src/decisions.rs:379
    GET /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/agents
    since 1.8.0
  • atlas.api.decisions.answer
    api/src/decisions.rs:486
    POST /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}/answer
    since 1.8.0
  • atlas.api.decisions.create
    api/src/decisions.rs:198
    POST /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/decisions
    since 1.8.0
  • atlas.api.decisions.defer
    api/src/decisions.rs:718
    POST /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}/defer
    since 1.8.2
  • atlas.api.decisions.get
    api/src/decisions.rs:333
    GET /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.list
    api/src/decisions.rs:289
    GET /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/decisions
    since 1.8.0
  • atlas.api.decisions.mine
    api/src/decisions.rs:430
    GET /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/mine
    since 1.8.0
  • atlas.api.decisions.reply
    api/src/decisions.rs:637
    POST /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}/reply
    since 1.8.0

atlas/api/fleet

1 feature
  • atlas.api.fleet
    api/src/fleet.rs:18
    Read-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}/screen
    since 1.15.0

atlas/api/knowledge

1 feature
  • atlas.api.knowledge-broken-links
    api/src/routes.rs:3905
    GET /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.broken
    since 1.3.0

atlas/chat

7 features
  • atlas.api.chat.pin.add
    api/src/chat.rs:1843
    POST /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}/pin
    since 1.7.0
  • atlas.api.chat.pin.remove
    api/src/chat.rs:1894
    DELETE /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}/pin
    since 1.7.0
  • atlas.api.chat.pins.list
    api/src/chat.rs:1784
    GET /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}/pins
    since 1.7.0
  • atlas.api.chat.presence.list
    api/src/chat_live.rs:151
    GET /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/presence
    since 1.6.0
  • atlas.api.chat.presence.set
    api/src/chat_live.rs:92
    POST /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/presence
    since 1.6.0
  • atlas.api.chat.reaction.add
    api/src/chat_live.rs:203
    POST /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}/reactions
    since 1.6.0
  • atlas.api.chat.reaction.list
    api/src/chat_live.rs:268
    GET /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}/reactions
    since 1.6.0

atlas/compliance

1 feature
  • atlas.api.compliance.coordination
    api/src/compliance.rs:29
    GET /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/coordination
    since 1.12.0

atlas/coordination

1 feature
  • atlas.api.work-claims
    api/src/routes.rs:6058
    POST/GET/DELETE /api/v1/claims — agents register edit intent
    route:POST /api/v1/claimsroute:GET /api/v1/claimsroute:DELETE /api/v1/claims
    since 0.20.0

atlas/ingestor

30 features
  • atlas.ingestor.achievements
    ingestor/src/achievements.rs:6
    Parses achievement annotations + docs/seed-achievements.yml, upserts into the `achievements` table. Powers the museum-ribbon /timeline page + agent queries.
    module:ingestor::achievements
    since 0.8.0
  • atlas.ingestor.alerter
    ingestor/src/alerter.rs:17
    Forwards new health_transitions rows to a Telegram channel via Bot API. Idempotent via the alerted_at column (set on success).
    module:ingestor::alerter
    since 0.5.0
  • atlas.ingestor.body-fingerprint
    ingestor/src/inspector.rs:712
    Computes a normalized structural fingerprint (sha256 of the
    route:GET /api/v1/duplicationroute:GET /api/v1/repos/{name}/duplicationmcp:atlas.duplication.orgmcp:atlas.duplication.repo
    since 1.2.0
  • atlas.ingestor.ci-signal
    ingestor/src/ci.rs:27
    Per-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.classify
    ingestor/src/classify.rs:3
    Rule-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.config
    ingestor/src/config.rs:10
    Shared env-var parsing helpers for atlas-ingestor. Today: `is_enabled` for boolean toggles like ATLAS_GIT_PULL.
    since 0.13.0
  • atlas.ingestor.crate
    ingestor/src/lib.rs:7
    Org-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-ingestor
    since 0.1.0
  • atlas.ingestor.db-writer
    ingestor/src/db.rs:8
    Per-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.drift
    ingestor/src/drift.rs:5
    Polyglot 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.embed
    ingestor/src/embed.rs:14
    OpenRouter BGE-M3 embedding client used to refresh feature+repo vectors during scan when their source text changes (sha-keyed delta).
    module:ingestor::embed
    since 0.6.0
  • atlas.ingestor.embed.achievements
    ingestor/src/embed.rs:394
    Embeds @achievement annotations + curated seed entries so /api/v1/search returns timeline rows alongside features.
    module:ingestor::embed
    since 0.10.0
  • atlas.ingestor.embed.digests
    ingestor/src/embed.rs:863
    Walks knowledge/digests/*.md, parses frontmatter, embeds each digest so /api/v1/search returns weekly digest hits.
    module:ingestor::embed
    since 0.10.0
  • atlas.ingestor.embed.goals
    ingestor/src/embed.rs:444
    Materialises manifest_goals JSONB into goal_embeddings (repo_id, goal_id) and embeds them so roadmap entries are searchable alongside @feature blocks.
    module:ingestor::embed
    since 0.10.0
  • atlas.ingestor.embed.knowledge
    ingestor/src/embed.rs:630
    Walks knowledge/**/*.md, parses frontmatter, embeds the body, and indexes notes for /api/v1/search.
    module:ingestor::embed
    since 0.10.0
  • atlas.ingestor.file-graph
    ingestor/src/file_graph.rs:34
    Intra-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-enrichment
    ingestor/src/github.rs:3
    GitHub 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-pull
    ingestor/src/git_pull.rs:26
    Opt-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.health
    ingestor/src/health.rs:16
    Per-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-bridge
    ingestor/src/inspector.rs:30
    Shells 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.lifecycle
    ingestor/src/lifecycle.rs:3
    Free-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-stats
    ingestor/src/loc.rs:22
    Per-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.manifest
    ingestor/src/manifest.rs:10
    Parses `.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-infer
    ingestor/src/manifest_infer.rs:17
    Best-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-discovery
    ingestor/src/mcp_discovery.rs:34
    Per-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.milestones
    ingestor/src/milestones.rs:10
    Parses openalice-atlas/milestones.yml on each scan and upserts rows into the `milestones` table. Powers the mission-control panel + agent MCP queries.
    module:ingestor::milestones
    since 0.7.0
  • atlas.ingestor.products-marketing
    ingestor/src/products_marketing.rs:27
    Parses 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::refresh
    since 0.8.0
  • atlas.ingestor.prometheus-targets
    ingestor/src/prometheus_targets.rs:36
    Writes `/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.quality
    ingestor/src/quality.rs:4
    0-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-orchestrator
    ingestor/src/main.rs:11
    One-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:print
    since 0.1.0
  • atlas.ingestor.tenant-writers
    ingestor/src/tenant.rs:45
    Per-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-extract
    ingestor/src/embed.rs:48
    Parse kb:// cross-references out of a markdown body so the ingestor can validate them against the live knowledge_notes index.
    function:extract_kb_refs
    since 0.11.0

atlas/web

82 features
  • atlas.web.activity
    web/src/app/activity/page.tsx:15
    Full org activity feed — every commit, manifest edit, lifecycle flip in the last 14 days.
    page:/activity
    since 0.2.0
  • atlas.web.agent-capabilities
    web/src/app/_components/AgentCapabilities.tsx:13
    Dashboard 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.agents
    web/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:/agents
    since 0.17.0
  • atlas.web.agents.detail
    web/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/:id
    since 0.17.0
  • atlas.web.approvals
    web/src/app/approvals/page.tsx:12
    Security 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:/approvals
    since 1.13.0
  • atlas.web.board
    web/src/app/board/page.tsx:14
    Org 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:/board
    since 0.27.0
  • atlas.web.board-filters
    web/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:BoardClient
    since 0.34.0
  • atlas.web.board-task-row
    web/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:TaskRowItem
    since 0.30.0
  • atlas.web.chat
    web/src/app/chat/page.tsx:11
    Cross-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:/chat
    since 1.4.0
  • atlas.web.cockpit
    web/src/app/cockpit/page.tsx:11
    Lab 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:/cockpit
    since 1.11.0
  • atlas.web.cockpit.coordination-compliance
    web/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:/cockpit
    since 1.12.0
  • atlas.web.conventions
    web/src/app/conventions/page.tsx:12
    Conventions 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:/conventions
    since 1.5.0
  • atlas.web.dashboard
    web/src/app/page.tsx:26
    Atlas 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.decisions
    web/src/app/decisions/page.tsx:14
    HITL 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:/decisions
    since 1.8.0
  • atlas.web.digest-detail
    web/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.digests
    web/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:/digests
    since 0.9.0
  • atlas.web.dock-nav
    web/src/app/_components/Dock.tsx:33
    macOS-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.docs
    web/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:/docs
    since 0.34.0
  • atlas.web.drift
    web/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:/drift
    since 0.17.0
  • atlas.web.eval
    web/src/app/eval/page.tsx:13
    Dedicated /eval page hosting the EvalCockpit panel — the merged canary + bench + lab result view (source-filterable run table, computed rollup, per-stage drill-down).
    page:/eval
    since 1.7.0
  • atlas.web.eval-cockpit
    web/src/app/_components/EvalCockpit.tsx:24
    Self-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:/eval
    since 1.7.0
  • atlas.web.features-index
    web/src/app/features/page.tsx:20
    Atlas 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:/features
    since 0.1.0
  • atlas.web.feature-status-coverage-tile
    web/src/app/features/page.tsx:188
    Data-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:/features
    since 0.2.0
  • atlas.web.file-graph-canvas
    web/src/app/graph/[name]/_FileForceGraph.tsx:30
    Force-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]/files
    since 0.15.0
  • atlas.web.file-graph-page
    web/src/app/graph/[name]/page.tsx:22
    Intra-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]/files
    since 0.15.0
  • atlas.web.fleet
    web/src/app/fleet/page.tsx:11
    Read-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:/fleet
    since 1.15.0
  • atlas.web.flow
    web/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:/flow
    since 1.2.0
  • atlas.web.flow-clusters
    web/src/app/flow/ClusterList.tsx:15
    Shared /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:ClusterList
    since 1.2.0
  • atlas.web.flow-dataflow-graph
    web/src/app/flow/[repo]/_DataflowGraph.tsx:19
    Layered 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:DataflowGraph
    since 1.3.0
  • atlas.web.flow-dataflow-panel
    web/src/app/flow/[repo]/_DataflowPanel.tsx:13
    Client 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:DataflowPanel
    since 1.3.0
  • atlas.web.flow-repo
    web/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/[repo
    since 1.2.0
  • atlas.web.flow-repo-tabs
    web/src/app/flow/[repo]/_FlowRepoTabs.tsx:16
    Client 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:FlowRepoTabs
    since 1.3.0
  • atlas.web.galaxy
    web/src/app/galaxy/page.tsx:9
    3D 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:/galaxy
    since 1.5.0
  • atlas.web.graph-3d
    web/src/app/graph/page.tsx:12
    Atlas 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:/graph
    since 0.1.0
  • atlas.web.graph-brief-panel
    web/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:BriefPanel
    since 0.30.0
  • atlas.web.icon
    web/src/app/_shared/Icon.tsx:27
    Shared 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-graph
    web/src/app/impact/[repo]/page.tsx:23
    Focus-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/[repo
    since 0.18.0
  • atlas.web.incidents
    web/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:/incidents
    since 0.3.0
  • atlas.web.lang-bar
    web/src/app/_components/LangBar.tsx:20
    GitHub-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-donut
    web/src/app/_components/LanguageDonut.tsx:21
    Pure-SVG arc donut chart for per-language LOC — used on repo detail + org dashboard.
    page:/page:/repos/[name
    since 0.10.0
  • atlas.web.layout
    web/src/app/layout.tsx:17
    Atlas 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-body
    web/src/app/_components/MarkdownBody.tsx:19
    Zero-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:MarkdownBody
    since 0.9.0
  • atlas.web.marketing
    web/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:/marketing
    since 0.19.0
  • atlas.web.marketing-asset-passthrough
    web/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-detail
    web/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-detail
    web/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-moodboards
    web/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/moodboards
    since 0.22.0
  • atlas.web.marketing-pitch-detail
    web/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-pitches
    web/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/pitches
    since 0.22.0
  • atlas.web.marketing-pitch-viewer
    web/src/app/marketing/pitches/[slug]/_PitchDeckViewer.tsx:15
    Client pitch-deck viewer with 16:9 frame, arrow/home/end/space/escape keyboard controls, dot pagination, and ?slide deep-link updates.
    component:PitchDeckViewer
    since 0.22.0
  • atlas.web.mobile-nav
    web/src/app/_components/MobileNav.tsx:22
    Mobile-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-toggle
    web/src/app/_shared/NavToggle.tsx:35
    Unified 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-strip
    web/src/app/_components/NowStrip.tsx:11
    Dashboard hive-pulse strip — per-agent in-progress tasks + live claims + queue head + done-today, from GET /api/v1/board.
    component:NowStrip
    since 0.27.0
  • atlas.web.observed-at
    web/src/app/_components/ObservedAt.tsx:22
    Client-only minute-precision UTC stamp for the cockpit footer; replaces the SSR-time render that caused React #418 hydration warnings.
    component:ObservedAt
    since 0.11.0
  • atlas.web.org-goals-aggregate
    web/src/app/_components/OrgGoalsAggregate.tsx:15
    Dashboard panel showing org-wide goals aggregate — done count, in_progress count, average heuristic progress% across active goals.
    page:/
    since 0.2.0
  • atlas.web.orgs
    web/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:/orgs
    since 1.12.0
  • atlas.web.product-detail
    web/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.products
    web/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:/products
    since 0.19.0
  • atlas.web.progress
    web/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:/progress
    since 0.16.0
  • atlas.web.provider-usage
    web/src/app/_components/ProviderUsage.tsx:26
    Self-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:ProviderUsage
    since 0.12.0
  • atlas.web.repo-detail
    web/src/app/repos/[name]/page.tsx:31
    Atlas repo-detail page — magnification of a single repo with magnitude, status, README excerpt, full feature ledger grouped by category, source-file pointers.
    page:/repos/[name
    since 0.1.0
  • atlas.web.repos-index
    web/src/app/repos/page.tsx:14
    Atlas repos-index — alphabetical chart-style table of every observed repo. Counterpart to the dashboard's by-activity grid.
    page:/repos
    since 0.1.0
  • atlas.web.roadmap
    web/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:/roadmap
    since 1.16.0
  • atlas.web.roadmap.proxy
    web/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/[...path
    since 1.16.0
  • atlas.web.roadmap.types
    web/src/app/roadmap/_components/types.ts:7
    Defensive 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:RoadmapClient
    since 1.16.0
  • atlas.web.search
    web/src/app/search/page.tsx:17
    Multi-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:/search
    since 0.6.0
  • atlas.web.show-more-list
    web/src/app/_components/ShowMoreList.tsx:30
    Reusable 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:ShowMoreList
    since 0.18.0
  • atlas.web.site-chrome
    web/src/app/_components/SiteChrome.tsx:26
    Route-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.sparkline
    web/src/app/_components/Sparkline.tsx:9
    Shared 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:Sparkline
    since 0.30.0
  • atlas.web.telegram-rail
    web/src/app/_shared/TelegramRail.tsx:38
    Shared 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.timeline
    web/src/app/timeline/page.tsx:14
    Museum-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:/timeline
    since 0.8.0
  • atlas.web.usage
    web/src/app/usage/page.tsx:13
    Dedicated /usage page hosting the ProviderUsage panel (Claude + Codex live quota readout). Single-purpose surface so the dashboard hero stays focused.
    page:/usage
    since 0.12.1
  • atlas.web.voice-note
    web/src/app/_shared/VoiceNote.tsx:28
    Telegram-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.wiki
    web/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:/wiki
    since 0.17.0
  • atlas.web.wiki-detail
    web/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.world
    web/src/app/world/page.tsx:13
    THE 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:/world
    since 1.6.0
  • atlas.web.world.celSinCityKit
    web/src/app/world/celSinCityKit.ts:49
    Instanced 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:/world
    since 1.6.0
  • atlas.web.world.data
    web/src/app/world/worldData.ts:20
    THE 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:/world
    since 1.6.0
  • atlas.web.world.infocard
    web/src/app/world/components/InfoCard.tsx:23
    THE 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:/world
    since 1.7.0
  • atlas.web.world.InstancedTowers
    web/src/app/world/components/InstancedTowers.tsx:29
    The 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:/world
    since 1.7.0
  • atlas.web.world.selection
    web/src/app/world/selectionStore.ts:16
    THE 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:/world
    since 1.7.0
  • atlas.web.world.touch-input
    web/src/app/world/touchInputStore.ts:29
    THE 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:/world
    since 1.8.0

atlas/web/auth

1 feature
  • atlas.web.telegram-login
    web/src/lib/telegramAuth.ts:11
    Passwordless 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