8a9de94d24
* feat: complete the group model (god_admin, site groups, aggregates), enforce naming, fix docs 500s + status dots (v1.26.0)
- seed god_admin + nest into app_super_admin; auto-provision site groups (S_super_admin, S_hosts_*/S_apps_* aggregates, S_everyone) on site create + self-heal on Directory load
- map service resources to the app kind (site_local_app_<slug>_*); nest per-resource groups into site aggregates (physical inheritance lattice)
- enforce the group naming convention server-side on POST /groups; surface god_admin + site groups on the site resource modal
- fix in-app /docs/<slug> 500s (Dockerfile never copied docs/); serve doc images at /docs/images
- fix Directory status dots (neutral grey when agent endpoint unreachable); align Profile/API cards full-width
- group resolver: keep the site slug verbatim (site_local not re-slugified)
- bump to 1.26.0
* fix: use verbatim resource slugs in group names (matches access-request tests + live convention)
The group naming inserts a kind segment (resourceGroupCns(site, kind, slug, level)),
but the access-request tests + the live directory convention are verbatim
({site}_{slug}_{level} -- the kind is carried in the resource slug, e.g. host_theta-env).
For bare test slugs this produced site_x_host_artest-host_x_access instead of the
expected site_x_artest-host_x_access, so the requester was never removed from the
auto-provisioned access group and every request 409'd. resourceGroupCns is now
(site, slug, level) with the verbatim slug; the kind is used only to pick the
aggregate the group nests into.
62 lines
1.5 KiB
Plaintext
62 lines
1.5 KiB
Plaintext
# Git
|
|
# NOTE: .git is intentionally NOT excluded — the gitinfo build stage in
|
|
# Dockerfile.openldap reads it to bake the commit hash into the image (see
|
|
# nodejs/utils/build_info.js), then it's discarded before the final stage.
|
|
# It never ends up in the final image.
|
|
.gitignore
|
|
|
|
# Development
|
|
.claude
|
|
*.md
|
|
# README.md and tos.md are both read at runtime (tos.md is loaded by
|
|
# routes/index.js at boot). DEPLOYMENT.md/API.md/directory_spec.md/docs/*.md
|
|
# are read at runtime too, by routes/docs.js -- all must stay in the build
|
|
# context.
|
|
!README.md
|
|
!tos.md
|
|
!CHANGELOG.md
|
|
!DEPLOYMENT.md
|
|
!API.md
|
|
!directory_spec.md
|
|
!docs/**/*.md
|
|
# The screenshots the README (served at /docs/overview) links. `COPY docs /docs`
|
|
# in Dockerfile.openldap needs these present in the build context.
|
|
!docs/images/**
|
|
|
|
# Tests (excluded from production builds; test-runner Dockerfile copies them explicitly)
|
|
# nodejs/tests/
|
|
# nodejs/*.test.js
|
|
|
|
# Host dependency tree — let the image run a clean `npm ci`. Also avoids
|
|
# copying platform-wrong native modules (e.g. bcrypt built for the host OS).
|
|
nodejs/node_modules
|
|
|
|
# IDE
|
|
.vscode
|
|
.idea
|
|
*.swp
|
|
*.swo
|
|
|
|
# Logs
|
|
*.log
|
|
logs/
|
|
|
|
# OS
|
|
.DS_Store
|
|
Thumbs.db
|
|
|
|
# Docker (prevent recursive copy)
|
|
Dockerfile*
|
|
docker-compose.yml
|
|
.dockerignore
|
|
|
|
# Ops scripts (not needed in container) — except the custom LDAP schema files,
|
|
# which Dockerfile.openldap COPYs into the image for the bundled slapd.
|
|
ops/
|
|
!ops/schema/
|
|
!ops/schema/*.schema
|
|
|
|
# Secrets (mount at runtime instead)
|
|
nodejs/conf/secrets.js
|
|
secrets.js
|