diff --git a/.env.example b/.env.example index 9d780549cb..7b34a2ae76 100644 --- a/.env.example +++ b/.env.example @@ -509,12 +509,12 @@ REDIS_URL=redis://redis:6379 # REQUIRED for the self-host review # GRAFANA_REPORTING_EXPORT_INTERVAL_SECONDS=30 # refresh cadence for the redacted reporting SQLite export # LOOPOVER_REPORTING_SOURCE_DB=/appdb/loopover.sqlite # if DATABASE_PATH=/data/custom.sqlite, set /appdb/custom.sqlite # -# AMS (gittensory-miner) ledger dashboards — only useful when a miner ALSO runs on this same host (see +# AMS (loopover-miner) ledger dashboards — only useful when a miner ALSO runs on this same host (see # packages/gittensory-miner/docs/observability.md). Requires --profile ams-observability, separate from the # general observability profile above: an engine-only deployment has nothing for this exporter to read. # Grafana never mounts the live ledgers directly — this exporter reads them read-only and writes a redacted # snapshot (free-form attempt_log_events.reason/.payload_json dropped) into the same reporting volume. -# LOOPOVER_MINER_CONFIG_DIR=~/.config/gittensory-miner # host dir the exporter mounts read-only at /ams-ledgers +# LOOPOVER_MINER_CONFIG_DIR=~/.config/loopover-miner # host dir the exporter mounts read-only at /ams-ledgers # LOOPOVER_AMS_REPORTING_EXPORT_INTERVAL_SECONDS=30 # refresh cadence for the redacted AMS ledger exports # # Claude usage telemetry → OTEL collector → Prometheus → the Claude usage dashboard. OFF by default. diff --git a/.gitignore b/.gitignore index faf6ce49fa..6fd180e0f6 100644 --- a/.gitignore +++ b/.gitignore @@ -35,10 +35,10 @@ alertmanager/*_url alertmanager/*_url_file # Private self-host operator config. Root AGENTS.md/CLAUDE.md are public project docs; # repo-scoped review instructions live under this ignored mount. -gittensory-config/ -gittensory-config.backup-*/ +loopover-config/ +loopover-config.backup-*/ # Operator deploy-backup snapshots -- contains raw .env/.yml backups and config tarballs, same -# exposure class as gittensory-config/ above (secrets + private review rules), just under a +# exposure class as loopover-config/ above (secrets + private review rules), just under a # different directory name that the pattern above does not match. .deploy-backups/ # Codex/CLI auth state must only live in runtime volumes or operator home dirs. @@ -55,7 +55,7 @@ apps/gittensory-ui/public/downloads/loopover-extension.zip .worker-configuration.gen-check.d.ts # Ad-hoc operator backup files (e.g. `cp file.yml file.yml.bak-notes-20260707`) -- general # catch-alls so a stray manual snapshot never dirties `git status` on a Git-backed self-host -# checkout. Trailing on purpose: the narrower gittensory-config.backup-*/ and .deploy-backups/ +# checkout. Trailing on purpose: the narrower loopover-config.backup-*/ and .deploy-backups/ # rules above already cover their specific directories, and nothing tracked in the repo matches # either pattern (verified via `git ls-files | grep -E '\.bak-|\.backup-'`) (#1660). *.bak-* diff --git a/Dockerfile b/Dockerfile index cba48c683b..0dc7e341c9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -# Self-host image for gittensory-api (#980). Runs the SAME Worker handlers on Node via src/server.ts — +# Self-host image for loopover-api (#980). Runs the SAME Worker handlers on Node via src/server.ts — # the Cloudflare bindings become self-host adapters (D1 -> node:sqlite, Queue -> in-process). The hosted # Cloudflare Worker (wrangler) deploy is unaffected. SECRETS ARE NEVER BAKED: supply them at run time via # the .env file or mounted *_FILE secrets (see docker-compose.yml + .env.example). @@ -13,7 +13,7 @@ WORKDIR /app # (workspaces: apps/*, packages/*), and `npm ci` only symlinks node_modules/ to a workspace whose # directory already exists on disk. Copying just the root package*.json first (the usual dependency-layer # caching trick) left every workspace package.json missing at `npm ci` time, so npm silently skipped every -# internal symlink -- @loopover/engine (a workspace dependency of gittensory-miner's checked-in +# internal symlink -- @loopover/engine (a workspace dependency of loopover-miner's checked-in # lib/*.js artifacts, #2281) then couldn't be resolved by esbuild no matter how/when its own dist/ was built. COPY . . # --ignore-scripts: no native builds are needed (SQLite is the built-in node:sqlite; @hono/node-server is @@ -32,7 +32,7 @@ ARG LOOPOVER_VERSION= ENV NODE_ENV=production \ PLATFORM=self-hosted \ PORT=8787 \ - DATABASE_PATH=/data/gittensory.sqlite \ + DATABASE_PATH=/data/loopover.sqlite \ MIGRATIONS_DIR=/app/migrations \ NPM_CONFIG_PREFIX=/home/node/.npm-global \ LOOPOVER_VERSION=${LOOPOVER_VERSION} @@ -96,7 +96,7 @@ FROM runtime-base AS runtime-prebuilt COPY --chown=node:node dist/server.mjs ./dist/server.mjs COPY --chown=node:node migrations ./migrations # Generic, safe self-host private-config templates (config/examples/, #layered-private-config) — reference only. -# GITTENSORY_REPO_CONFIG_DIR still points at the operator-mounted /config, so shipping these activates nothing. +# LOOPOVER_REPO_CONFIG_DIR still points at the operator-mounted /config, so shipping these activates nothing. COPY --chown=node:node config/examples ./config/examples # Default local/operator builds still build the bundle inside Docker, but only the JS bundle reaches runtime. diff --git a/apps/gittensory-miner-ui/README.md b/apps/gittensory-miner-ui/README.md index f2b0039587..affe89877d 100644 --- a/apps/gittensory-miner-ui/README.md +++ b/apps/gittensory-miner-ui/README.md @@ -35,9 +35,9 @@ fleet/bare-host operator who wants the dashboard durably available, `npm run bui `vite-*-api.ts` plugins register for both `configureServer` and `configurePreviewServer`, so nothing extra is needed beyond the build step) on port `4174` by default. -[`systemd/gittensory-miner-ui.service.example`](../../systemd/gittensory-miner-ui.service.example) at +[`systemd/loopover-miner-ui.service.example`](../../systemd/loopover-miner-ui.service.example) at the repo root is a ready-to-adapt persistent unit for this — a companion to -`gittensory-miner.service.example` (the loop daemon), not a replacement for it. Its header comment +`loopover-miner.service.example` (the loop daemon), not a replacement for it. Its header comment carries the full install steps. Like the loop daemon, this is a `Type=simple` service, not a `.timer` job — the dashboard is a long-running HTTP server, not a periodic batch task. diff --git a/apps/gittensory-ui/src/routes/docs.maintainer-self-hosting.tsx b/apps/gittensory-ui/src/routes/docs.maintainer-self-hosting.tsx index 9d506bc9e5..059cc16999 100644 --- a/apps/gittensory-ui/src/routes/docs.maintainer-self-hosting.tsx +++ b/apps/gittensory-ui/src/routes/docs.maintainer-self-hosting.tsx @@ -223,9 +223,9 @@ function MaintainerSelfHosting() { Checks: write included — re-approve on existing Apps after permission bumps).
  • - Mount ./gittensory-config and copy{" "} + Mount ./loopover-config and copy{" "} config/examples/global.loopover.yml →{" "} - gittensory-config/.loopover.yml for a centralized private default (per-repo + loopover-config/.loopover.yml for a centralized private default (per-repo files deep-merge on top).
  • @@ -245,12 +245,12 @@ function MaintainerSelfHosting() { { title: "Single-command repo onboarding", description: - "Today: edit .env allowlist, copy YAML templates, sign into the panel, click activate. Proposed: one CLI/API command that adds owner/repo to LOOPOVER_REVIEW_REPOS, seeds gittensory-config/owner__repo/.loopover.yml from global.loopover.yml, and POSTs activation — idempotent, dry-run aware.", + "Today: edit .env allowlist, copy YAML templates, sign into the panel, click activate. Proposed: one CLI/API command that adds owner/repo to LOOPOVER_REVIEW_REPOS, seeds loopover-config/owner__repo/.loopover.yml from global.loopover.yml, and POSTs activation — idempotent, dry-run aware.", }, { title: "Centralized private default only", description: - "Most fleets need one gittensory-config/.loopover.yml with optional per-repo overrides — docs now treat that as the default story instead of implying every repo needs its own file.", + "Most fleets need one loopover-config/.loopover.yml with optional per-repo overrides — docs now treat that as the default story instead of implying every repo needs its own file.", }, { title: "Advisory-by-default on first install", diff --git a/apps/gittensory-ui/src/routes/docs.self-hosting-configuration.tsx b/apps/gittensory-ui/src/routes/docs.self-hosting-configuration.tsx index f3d747fb7c..afb2acab7b 100644 --- a/apps/gittensory-ui/src/routes/docs.self-hosting-configuration.tsx +++ b/apps/gittensory-ui/src/routes/docs.self-hosting-configuration.tsx @@ -135,8 +135,8 @@ function SelfHostingConfiguration() { cp config/examples/loopover.minimal.yml .loopover.yml # Self-host private mount (operator-only policy) -mkdir -p gittensory-config -cp config/examples/global.loopover.yml gittensory-config/.loopover.yml`} +mkdir -p loopover-config +cp config/examples/global.loopover.yml loopover-config/.loopover.yml`} /> Keep anti-abuse thresholds, maintainer allowlists, and autonomy dials in the{" "} @@ -144,7 +144,7 @@ cp config/examples/global.loopover.yml gittensory-config/.loopover.yml`} read. config/examples/TEMPLATES.md documents the public-vs-private split and how to apply the templates to gittensory, awesome-claude, and{" "} metagraphed without committing private policy. Lint before deploy:{" "} - npx tsx scripts/gittensory-config-lint.ts path/to/.loopover.yml. + npx tsx scripts/loopover-config-lint.ts path/to/.loopover.yml.

    Authoritative copies in git: