From 0cbee660f6aca54e06e7ccf84c3891bb42e4dc96 Mon Sep 17 00:00:00 2001 From: JSONbored <49853598+JSONbored@users.noreply.github.com> Date: Mon, 13 Jul 2026 23:48:44 -0700 Subject: [PATCH 1/2] feat(github)!: rename the @gittensory bot mention command to @loopover Phase 2 of the gittensory -> loopover rebrand epic (#5705). Full cutover, no dual-recognition: the @gittensory mention trigger, help text, and every generated PR-comment/API string mentioning "Gittensory" by name across the dispatch stack now say "@loopover"/"LoopOver". - src/github/commands.ts's dispatch regex + entire command catalog, src/queue/processors.ts, src/api/routes.ts, and 20 other src/ files with live dispatch logic or generated public-facing text. - A duplicate sanitizePublicComment() implementation in packages/gittensory-engine/src/github/sanitize-public-comment.ts had its own independent copy of the same "@gittensory "-prefix safelist check -- fixed in place; the two implementations should eventually be consolidated into one (follow-up, not done here). - scripts/gen-command-reference.mjs and scripts/check-docs-drift.mjs had their own hardcoded "@gittensory " templates, regenerated apps/gittensory-ui/src/lib/command-reference.ts accordingly. - 17 apps/gittensory-ui doc/site pages with their own @gittensory command examples (docs.beta-onboarding, docs.maintainer-workflow, command-palette, etc.) -- these needed fixing for command-syntax accuracy, distinct from general product-name prose (deferred to a later phase). - .loopover.yml.example + config/examples/*.yml comments. - Renamed 6 config-example files whose names still said "gittensory": config/examples/{gittensory.full,gittensory.minimal,global.gittensory, repo-override.gittensory,shared.gittensory}.yml and root .gittensory.minimal.yml, plus every file referencing them by name. - REGRESSION FIX caught mid-sweep: a blind rename in test/unit/queue-5.test.ts and src/github/app.ts had accidentally renamed references to the DELIBERATELY-preserved legacy check-run names ("Gittensory Gate" / "Gittensory Orb Review Agent", src/review/check-names.ts's GITTENSORY_LEGACY_* constants) into a nonsense "LoopOver Gate" string that collided with the real current check-run name -- reverted those specific legacy-detection references back to their correct historical values; check-names.ts itself and its own dedicated test were never touched. Explicitly NOT in scope here (tracked separately in #5705): the MCP server's own "gittensory"-branded identity/96 tool names (Phase 4), directory names (Phase 5), internal code identifiers like parseGittensoryMentionCommand (Phase 6), and general bare-prose "Gittensory" mentions scattered across ~40 additional src/ files that don't affect the mention command itself (found during this sweep but out of scope for this PR -- will need its own phase). BREAKING CHANGE: the bot no longer recognizes @gittensory as a command trigger anywhere -- only @loopover works. Any saved PR-comment template, bookmark, or muscle-memory referencing @gittensory must be updated to @loopover . Refs #5705 --- ...nsory.minimal.yml => .loopover.minimal.yml | 6 +- .loopover.yml.example | 30 +- .../site/app-panels/maintainer-settings.tsx | 4 +- .../site/app-panels/playground-panel.tsx | 2 +- .../src/components/site/command-palette.tsx | 2 +- .../src/lib/command-reference.ts | 50 +-- .../src/lib/selfhost-docs-audit.ts | 2 +- .../gittensory-ui/src/routes/app.commands.tsx | 2 +- apps/gittensory-ui/src/routes/app.index.tsx | 6 +- apps/gittensory-ui/src/routes/app.runs.tsx | 2 +- .../src/routes/app.workbench.tsx | 4 +- .../src/routes/docs.beta-onboarding.tsx | 18 +- .../src/routes/docs.gittensory-commands.tsx | 18 +- apps/gittensory-ui/src/routes/docs.index.tsx | 2 +- .../routes/docs.maintainer-self-hosting.tsx | 4 +- .../src/routes/docs.maintainer-workflow.tsx | 14 +- .../src/routes/docs.miner-workflow.tsx | 4 +- .../src/routes/docs.privacy-security.tsx | 2 +- .../docs.self-hosting-configuration.tsx | 30 +- .../routes/docs.self-hosting-quickstart.tsx | 4 +- apps/gittensory-ui/src/routes/docs.tuning.tsx | 14 +- apps/gittensory-ui/src/routes/index.tsx | 10 +- apps/gittensory-ui/src/routes/maintainers.tsx | 22 +- config/examples/README.md | 6 +- config/examples/TEMPLATES.md | 32 +- ...bal.gittensory.yml => global.loopover.yml} | 6 +- ...{gittensory.full.yml => loopover.full.yml} | 36 +- ...nsory.minimal.yml => loopover.minimal.yml} | 6 +- ...tensory.yml => repo-override.loopover.yml} | 4 +- ...red.gittensory.yml => shared.loopover.yml} | 4 +- .../gittensory-engine/src/focus-manifest.ts | 2 +- .../src/github/sanitize-public-comment.ts | 4 +- scripts/check-docs-drift.mjs | 16 +- scripts/gen-command-reference.mjs | 8 +- src/api/routes.ts | 64 +-- src/db/repositories.ts | 4 +- src/db/schema.ts | 4 +- src/env.d.ts | 4 +- src/github/app.ts | 2 +- src/github/command-suggest.ts | 4 +- src/github/commands.ts | 168 ++++---- src/github/configuration-command.ts | 2 +- src/github/footer.ts | 4 +- src/github/pr-command-request.ts | 4 +- src/github/resolve-command.ts | 4 +- src/openapi/schemas.ts | 6 +- src/openapi/spec.ts | 16 +- src/queue/processors.ts | 82 ++-- src/review/e2e-test-gen-render.ts | 4 +- src/review/planner.ts | 14 +- src/review/review-memory-wire.ts | 2 +- src/services/agent-orchestrator.ts | 6 +- src/services/ai-chat-qa.ts | 14 +- src/services/ai-intent-router.ts | 4 +- src/services/maintainer-noise.ts | 4 +- src/services/weekly-value-report.ts | 2 +- src/settings/agent-actions.ts | 16 +- src/settings/effective-config-summary.ts | 2 +- src/signals/engine.ts | 42 +- src/signals/registration-readiness.ts | 14 +- src/types.ts | 22 +- test/integration/api.test.ts | 14 +- test/unit/agent-actions.test.ts | 6 +- test/unit/agent-orchestrator.test.ts | 12 +- test/unit/ai-chat-qa.test.ts | 4 +- test/unit/check-docs-drift-script.test.ts | 6 +- test/unit/command-suggest.test.ts | 4 +- test/unit/config-templates.test.ts | 54 +-- test/unit/configuration-command.test.ts | 4 +- test/unit/docs-beta-onboarding.test.ts | 6 +- .../docs-selfhost-activation-paths.test.ts | 4 +- test/unit/focus-manifest-validation.test.ts | 2 +- test/unit/focus-manifest.test.ts | 4 +- .../unit/gen-command-reference-script.test.ts | 10 +- test/unit/github-commands.test.ts | 396 +++++++++--------- test/unit/planner.test.ts | 22 +- test/unit/pr-command-request.test.ts | 10 +- .../predicted-gate-engine-coverage.test.ts | 2 +- .../unit/public-safe-manifest-finding.test.ts | 4 +- test/unit/queue-2.test.ts | 8 +- test/unit/queue-3.test.ts | 106 ++--- test/unit/queue-4.test.ts | 62 +-- test/unit/queue-5.test.ts | 218 +++++----- test/unit/queue-lifecycle-guards.test.ts | 10 +- test/unit/queue.test.ts | 2 +- test/unit/registration-readiness.test.ts | 8 +- test/unit/review-memory-store.test.ts | 4 +- test/unit/selfhost-config-examples.test.ts | 22 +- test/unit/signals-coverage.test.ts | 10 +- test/unit/signals-v2.test.ts | 2 +- test/unit/unified-comment-parity.test.ts | 30 +- test/unit/weekly-value-report.test.ts | 2 +- 92 files changed, 969 insertions(+), 969 deletions(-) rename .gittensory.minimal.yml => .loopover.minimal.yml (83%) rename config/examples/{global.gittensory.yml => global.loopover.yml} (95%) rename config/examples/{gittensory.full.yml => loopover.full.yml} (97%) rename config/examples/{gittensory.minimal.yml => loopover.minimal.yml} (84%) rename config/examples/{repo-override.gittensory.yml => repo-override.loopover.yml} (95%) rename config/examples/{shared.gittensory.yml => shared.loopover.yml} (88%) diff --git a/.gittensory.minimal.yml b/.loopover.minimal.yml similarity index 83% rename from .gittensory.minimal.yml rename to .loopover.minimal.yml index a1cb9b50b3..eecbb0b4d7 100644 --- a/.gittensory.minimal.yml +++ b/.loopover.minimal.yml @@ -1,12 +1,12 @@ # ============================================================================ -# .gittensory.minimal.yml — smallest safe starter config for a new repo +# .loopover.minimal.yml — smallest safe starter config for a new repo # ============================================================================ # # Copy this file to your repo root as `.loopover.yml` and customize from here. # (This filename is not read directly — only `.loopover.yml` / `.github/loopover.yml` are.) -# Also shipped at config/examples/gittensory.minimal.yml for self-host operators. +# Also shipped at config/examples/loopover.minimal.yml for self-host operators. # For every supported field, defaults, and examples see `.loopover.yml.example` or -# config/examples/gittensory.full.yml. +# config/examples/loopover.full.yml. # # Safe by default: # - Gate off (enable explicitly when you are ready) diff --git a/.loopover.yml.example b/.loopover.yml.example index a7c17e742f..e7cf0d59f6 100644 --- a/.loopover.yml.example +++ b/.loopover.yml.example @@ -7,9 +7,9 @@ # config-as-code, versioned alongside the project it governs. # # STARTER TEMPLATES (also shipped under config/examples/ for self-host operators): -# config/examples/gittensory.minimal.yml — smallest safe starter (gate off, observe-only autonomy) -# config/examples/gittensory.full.yml — exhaustive reference (body synced with this file) -# .gittensory.minimal.yml — same minimal starter at repo root +# config/examples/loopover.minimal.yml — smallest safe starter (gate off, observe-only autonomy) +# config/examples/loopover.full.yml — exhaustive reference (body synced with this file) +# .loopover.minimal.yml — same minimal starter at repo root # .loopover.yml.example — this file # # WHERE IT LIVES (first match wins): @@ -405,7 +405,7 @@ gate: # # SELF-HOST ONLY (`review.shared_config`, #2046): when `GITTENSORY_REPO_CONFIG_DIR` is mounted, # place a shared review base at `${GITTENSORY_REPO_CONFIG_DIR}/_shared/.loopover.yml` (see -# `config/examples/shared.gittensory.yml`). Per-repo `review:` keys overlay it field-by-field — +# `config/examples/shared.loopover.yml`). Per-repo `review:` keys overlay it field-by-field — # repo value wins when set, shared fills gaps, defaults stay byte-identical. Absent shared base is # the common case and changes nothing. A malformed shared base warns and is ignored (never blocks a # review). The loader records provenance at runtime in `review.sharedConfigSource` (not a YAML key). @@ -515,7 +515,7 @@ review: # quiet | normal | detailed. Default: null/normal (byte-identical). # comment_verbosity: normal - # How a `@gittensory generate-tests` result is delivered, once features.e2eTests is on (#4197, part of + # How a `@loopover generate-tests` result is delivered, once features.e2eTests is on (#4197, part of # the #4189 E2E-test-generation epic). `comment` (default, null/absent) posts the generated test as a # reply comment only. `commit` pushes it as a real commit onto the PR's own head branch instead -- a # bigger blast radius, so it stays opt-in even with e2eTests already enabled. `commit` mode is ALSO @@ -527,7 +527,7 @@ review: # Opts THIS repo into the manifest_missing_tests AUTO-TRIGGER (#4196, part of the #4189 epic) -- an # unprompted generation run whenever a PR looks like it needs tests. Separate from features.e2eTests, which - # only unlocks the maintainer-initiated paths (the `@gittensory generate-tests` command and the PR-panel + # only unlocks the maintainer-initiated paths (the `@loopover generate-tests` command and the PR-panel # checkbox). Bool | null. Default: null/false -- the auto-trigger never fires, even with e2eTests already # on; a maintainer who wants unprompted generation opts in here explicitly, per repo. # e2e_test_auto_trigger: false @@ -797,7 +797,7 @@ settings: # contributorCapCancelCi: true # Review-request nagging cooldown (#2463, anti-abuse): throttle a non-owner/non-admin/non-bot - # contributor who repeatedly pings @gittensory for review on the same PR/issue. "hold" replies with a + # contributor who repeatedly pings @loopover for review on the same PR/issue. "hold" replies with a # cooldown notice and takes no further action; "close" closes the PR (issues degrade to "hold" until # a dedicated closeIssue primitive lands) with a clear reason. Off by default. # reviewNagPolicy: off # off | hold | close. Default: off. @@ -809,9 +809,9 @@ settings: # Maintainer-mention nag moderation (#label-scoping): GitHub logins ALSO throttled under the SAME # reviewNagPolicy/reviewNagMaxPings/reviewNagCooldownDays/reviewNagLabel cooldown above, on top of the - # bot's own @gittensory handle — e.g. a contributor who keeps tagging a specific maintainer for review - # instead of (or in addition to) pinging @gittensory. Counted independently per mentioned login and - # independently of the @gittensory counter. Only fires for the thread's OWN author, never a third party + # bot's own @loopover handle — e.g. a contributor who keeps tagging a specific maintainer for review + # instead of (or in addition to) pinging @loopover. Counted independently per mentioned login and + # independently of the @loopover counter. Only fires for the thread's OWN author, never a third party # commenting on someone else's thread; owner/admin/automation-bot/autoCloseExemptLogins are always exempt. # List of GitHub logins. Default: [] (no logins watched). # reviewNagMonitoredMentions: [your-maintainer-login] @@ -828,8 +828,8 @@ settings: # accountAgeThresholdDays: null # Positive integer, or null/omitted to disable. Default: null (off). # newAccountLabel: new-account # Label applied to a below-threshold-age account's PR. Default: new-account. - # Per-command @gittensory rate limit (#2560, anti-abuse): generalizes review-nag's cooldown pattern to - # EVERY @gittensory command (help/ask/preflight/blockers/... and the maintainer queue-digest commands), + # Per-command @loopover rate limit (#2560, anti-abuse): generalizes review-nag's cooldown pattern to + # EVERY @loopover command (help/ask/preflight/blockers/... and the maintainer queue-digest commands), # not just review-request pings — independent of review-nag's own thread-author-only scope. "hold" # replies with a cooldown notice and skips the command's own dispatch. Off by default. # commandRateLimitPolicy: off # off | hold. Default: off. @@ -917,11 +917,11 @@ settings: # advisoryAiRouting: # slop: false # gate.slop.aiAdvisory's second opinion. Default: false. # e2eTestGen: false # Auto-generated E2E test scaffolding. Default: false. - # planner: false # The @gittensory plan / issue-planner completion. Default: false. + # planner: false # The @loopover plan / issue-planner completion. Default: false. # summaries: false # AI summaries/rewrite text. Default: false. - # chatQa: false # @gittensory chat grounded LLM Q&A. Ollama-first (never the frontier env.AI unless chatQaFrontierFallback below is also true); needs env.AI_ADVISORY set. Co-requisite: commandRateLimitPolicy: hold (defaults off). Default: false. + # chatQa: false # @loopover chat grounded LLM Q&A. Ollama-first (never the frontier env.AI unless chatQaFrontierFallback below is also true); needs env.AI_ADVISORY set. Co-requisite: commandRateLimitPolicy: hold (defaults off). Default: false. # chatQaFrontierFallback: false # Opt-in only: falls back to the frontier env.AI chain if env.AI_ADVISORY is unconfigured, instead of declining. Meaningless unless chatQa is also true. Default: false. - # intentRouting: false # Closed-set intent classifier for unrecognized @gittensory mentions -> existing Q&A commands only. Ollama-ONLY, same as chatQa (never uses chatQaFrontierFallback). Co-requisite: commandRateLimitPolicy: hold. Default: false. + # intentRouting: false # Closed-set intent classifier for unrecognized @loopover mentions -> existing Q&A commands only. Ollama-ONLY, same as chatQa (never uses chatQaFrontierFallback). Co-requisite: commandRateLimitPolicy: hold. Default: false. # Maintainer AI review tuning (`.loopover.yml` top-level `review:` block). These knobs shape the advisory AI # review prompt and file selection only — gate/slop/secret-scan are unaffected. diff --git a/apps/gittensory-ui/src/components/site/app-panels/maintainer-settings.tsx b/apps/gittensory-ui/src/components/site/app-panels/maintainer-settings.tsx index 1e3e7ee5f8..fd8136dcae 100644 --- a/apps/gittensory-ui/src/components/site/app-panels/maintainer-settings.tsx +++ b/apps/gittensory-ui/src/components/site/app-panels/maintainer-settings.tsx @@ -304,7 +304,7 @@ export function MaintainerSettings({ reviewability }: { reviewability: Array<{ p Repository settings

- Configure exactly what Gittensory enforces and surfaces on this repo — gate modes, + Configure exactly what LoopOver enforces and surfaces on this repo — gate modes, anti-slop, labels, public output, and who can run each command. Changes are audited.

@@ -389,7 +389,7 @@ export function MaintainerSettings({ reviewability }: { reviewability: Array<{ p

Command authorization

- Default roles allowed to run any @gittensory{" "} + Default roles allowed to run any @loopover{" "} command. Per-command overrides (edited via the focus manifest) are shown below.

diff --git a/apps/gittensory-ui/src/components/site/app-panels/playground-panel.tsx b/apps/gittensory-ui/src/components/site/app-panels/playground-panel.tsx index d42b34ae2e..d43449130c 100644 --- a/apps/gittensory-ui/src/components/site/app-panels/playground-panel.tsx +++ b/apps/gittensory-ui/src/components/site/app-panels/playground-panel.tsx @@ -574,7 +574,7 @@ function formatOutputForClipboard(tool: Tool, result: unknown): string { "Thanks for the PR.", "", "This branch links to issue #1204 and passes basic preflight.", - "Maintainers can run `@gittensory blockers` for non-public context.", + "Maintainers can run `@loopover blockers` for non-public context.", ].join("\n"); } const header = `// gittensory · ${tool} · preview`; diff --git a/apps/gittensory-ui/src/components/site/command-palette.tsx b/apps/gittensory-ui/src/components/site/command-palette.tsx index 1dc7dcaabc..4e7f7d7827 100644 --- a/apps/gittensory-ui/src/components/site/command-palette.tsx +++ b/apps/gittensory-ui/src/components/site/command-palette.tsx @@ -24,7 +24,7 @@ const DEFAULT_ITEMS: PaletteItem[] = [ { label: "Repo owner workspace", to: "/app/owner", group: "App" }, { label: "Agent runs", to: "/app/runs", group: "App" }, { label: "Agent playground", to: "/app/playground", group: "App" }, - { label: "@gittensory command simulator", to: "/app/commands", group: "App" }, + { label: "@loopover command simulator", to: "/app/commands", group: "App" }, { label: "Product analytics", to: "/app/analytics", group: "App" }, { label: "Maintainer digest", to: "/app/digest", group: "App" }, { label: "Skipped PR audit", to: "/app/audit", group: "App" }, diff --git a/apps/gittensory-ui/src/lib/command-reference.ts b/apps/gittensory-ui/src/lib/command-reference.ts index 4eed8e63eb..01ec44a5c3 100644 --- a/apps/gittensory-ui/src/lib/command-reference.ts +++ b/apps/gittensory-ui/src/lib/command-reference.ts @@ -3,116 +3,116 @@ export const PUBLIC_COMMAND_ENTRIES = [ { id: "help", - title: "Gittensory command help", - description: "Show public-safe @gittensory command help.", + title: "LoopOver command help", + description: "Show public-safe @loopover command help.", }, { id: "ask", - title: "Gittensory contribution context Q&A", + title: "LoopOver contribution context Q&A", description: "Answer contribution-quality questions from connected cached sources with citations.", }, { id: "chat", - title: "Gittensory grounded chat Q&A", + title: "LoopOver grounded chat Q&A", description: "Answer a question in natural prose from cached decision-pack facts via local Ollama (maintainer/collaborator; read-only).", }, { id: "preflight", - title: "Gittensory preflight", + title: "LoopOver preflight", description: "Summarize public PR hygiene and validation readiness.", }, { id: "blockers", - title: "Gittensory readiness blockers", + title: "LoopOver readiness blockers", description: "Explain public-safe readiness blockers.", }, { id: "duplicate-check", - title: "Gittensory duplicate & WIP check", + title: "LoopOver duplicate & WIP check", description: "Summarize duplicate and in-progress overlap caution.", }, { id: "miner-context", - title: "Gittensory miner context", + title: "LoopOver miner context", description: "Confirm public Gittensor miner context when available.", }, { id: "next-action", - title: "Gittensory next step", + title: "LoopOver next step", description: "Suggest the next public-safe action.", }, { id: "reviewability", - title: "Gittensory PR readiness", + title: "LoopOver PR readiness", description: "Summarize maintainer-friendly PR readiness without private review internals.", }, { id: "repo-fit", - title: "Gittensory repository fit", + title: "LoopOver repository fit", description: "Summarize public-safe repository fit signals.", }, { id: "packet", - title: "Gittensory public packet", + title: "LoopOver public packet", description: "Prepare public-safe PR packet guidance.", }, ] as const; export const PUBLIC_COMMAND_LIST = - "@gittensory help\n@gittensory ask\n@gittensory chat\n@gittensory preflight\n@gittensory blockers\n@gittensory duplicate-check\n@gittensory miner-context\n@gittensory next-action\n@gittensory reviewability\n@gittensory repo-fit\n@gittensory packet"; + "@loopover help\n@loopover ask\n@loopover chat\n@loopover preflight\n@loopover blockers\n@loopover duplicate-check\n@loopover miner-context\n@loopover next-action\n@loopover reviewability\n@loopover repo-fit\n@loopover packet"; export const MAINTAINER_COMMAND_ENTRIES = [ { id: "queue-summary", - title: "Gittensory maintainer queue summary", + title: "LoopOver maintainer queue summary", description: "Post a maintainer-only queue digest from cached GitHub metadata.", }, { id: "confirmed-miners", - title: "Gittensory confirmed-miner PRs", + title: "LoopOver confirmed-miner PRs", description: "List open PRs whose authors are confirmed in the official-miner cache.", }, { id: "review-now", - title: "Gittensory review-now queue", + title: "LoopOver review-now queue", description: "List cached PRs that look ready for maintainer review.", }, { id: "needs-author", - title: "Gittensory needs-author queue", + title: "LoopOver needs-author queue", description: "List cached PRs that need author cleanup before detailed review.", }, { id: "duplicate-clusters", - title: "Gittensory duplicate clusters", + title: "LoopOver duplicate clusters", description: "List duplicate or WIP clusters visible from cached GitHub metadata.", }, { id: "burden-forecast", - title: "Gittensory burden forecast", + title: "LoopOver burden forecast", description: "Project maintainer review load and queue-growth risk from cached metadata.", }, { id: "intake-health", - title: "Gittensory intake health", + title: "LoopOver intake health", description: "Summarize contributor-intake health from cached queue and config signals.", }, { id: "outcome-patterns", - title: "Gittensory outcome patterns", + title: "LoopOver outcome patterns", description: "Summarize what this repo actually merges vs closes from cached PR outcomes.", }, { id: "noise-report", - title: "Gittensory noise report", + title: "LoopOver noise report", description: "Highlight queue noise sources maintainers should triage first.", }, ] as const; export const MAINTAINER_COMMAND_LIST = - "@gittensory queue-summary\n@gittensory confirmed-miners\n@gittensory review-now\n@gittensory needs-author\n@gittensory duplicate-clusters\n@gittensory burden-forecast\n@gittensory intake-health\n@gittensory outcome-patterns\n@gittensory noise-report"; + "@loopover queue-summary\n@loopover confirmed-miners\n@loopover review-now\n@loopover needs-author\n@loopover duplicate-clusters\n@loopover burden-forecast\n@loopover intake-health\n@loopover outcome-patterns\n@loopover noise-report"; export const ACTION_COMMAND_ENTRIES = [ { @@ -125,7 +125,7 @@ export const ACTION_COMMAND_ENTRIES = [ id: "review", title: "Request review", description: - "Request an auto-review run on the current PR head (`@gittensory re-review` is an alias).", + "Request an auto-review run on the current PR head (`@loopover re-review` is an alias).", }, { id: "pause", @@ -165,4 +165,4 @@ export const ACTION_COMMAND_ENTRIES = [ ] as const; export const ACTION_COMMAND_LIST = - "@gittensory gate-override\n@gittensory review\n@gittensory pause\n@gittensory resume\n@gittensory resolve\n@gittensory configuration\n@gittensory explain\n@gittensory generate-tests"; + "@loopover gate-override\n@loopover review\n@loopover pause\n@loopover resume\n@loopover resolve\n@loopover configuration\n@loopover explain\n@loopover generate-tests"; diff --git a/apps/gittensory-ui/src/lib/selfhost-docs-audit.ts b/apps/gittensory-ui/src/lib/selfhost-docs-audit.ts index fe26798995..bf9a44fd1e 100644 --- a/apps/gittensory-ui/src/lib/selfhost-docs-audit.ts +++ b/apps/gittensory-ui/src/lib/selfhost-docs-audit.ts @@ -118,7 +118,7 @@ export const SELFHOST_SOURCE_OF_TRUTH_ROWS: readonly SelfHostSourceOfTruthRow[] }, { topic: "Activation and onboarding paths", - runtimeSources: ["src/server.ts", "config/examples/global.gittensory.yml"], + runtimeSources: ["src/server.ts", "config/examples/global.loopover.yml"], docsPath: "/docs/self-hosting-configuration", driftGuard: "docs-selfhost-activation-paths.test.ts", }, diff --git a/apps/gittensory-ui/src/routes/app.commands.tsx b/apps/gittensory-ui/src/routes/app.commands.tsx index 0356fd4a48..419f302903 100644 --- a/apps/gittensory-ui/src/routes/app.commands.tsx +++ b/apps/gittensory-ui/src/routes/app.commands.tsx @@ -12,7 +12,7 @@ function CommandsRoute() {
diff --git a/apps/gittensory-ui/src/routes/app.index.tsx b/apps/gittensory-ui/src/routes/app.index.tsx index ea6518227a..ce4e5aad63 100644 --- a/apps/gittensory-ui/src/routes/app.index.tsx +++ b/apps/gittensory-ui/src/routes/app.index.tsx @@ -49,7 +49,7 @@ const CARDS = [ { to: "/app/runs", title: "Agent runs", - desc: "Unified feed of MCP, API, and @gittensory runs with evidence and boundary tags.", + desc: "Unified feed of MCP, API, and @loopover runs with evidence and boundary tags.", icon: Activity, roles: ["miner", "maintainer", "owner", "operator"], }, @@ -154,7 +154,7 @@ function AppOverview() { } title={<>Welcome back, {session.login}} - description="Live control-panel metrics from the Gittensory API. Missing backend data renders as empty states instead of demo records." + description="Live control-panel metrics from the LoopOver API. Missing backend data renders as empty states instead of demo records." /> @@ -338,7 +338,7 @@ function QuickActions({ lastRunId, roles }: { lastRunId?: string; roles: AppRole { to: "/app/workbench", search: { tab: "commands" }, - label: "@gittensory commands", + label: "@loopover commands", icon: TerminalSquare, roles: ["maintainer", "owner", "operator"], }, diff --git a/apps/gittensory-ui/src/routes/app.runs.tsx b/apps/gittensory-ui/src/routes/app.runs.tsx index 154e054b3f..0862f4af1c 100644 --- a/apps/gittensory-ui/src/routes/app.runs.tsx +++ b/apps/gittensory-ui/src/routes/app.runs.tsx @@ -230,7 +230,7 @@ function AgentRuns() { Agent runs

- Unified feed of MCP, API, and @gittensory runs. Each entry carries a ruleset snapshot + Unified feed of MCP, API, and @loopover runs. Each entry carries a ruleset snapshot and a public/private boundary.

diff --git a/apps/gittensory-ui/src/routes/app.workbench.tsx b/apps/gittensory-ui/src/routes/app.workbench.tsx index 5c4d438fc0..b66b7a5f22 100644 --- a/apps/gittensory-ui/src/routes/app.workbench.tsx +++ b/apps/gittensory-ui/src/routes/app.workbench.tsx @@ -23,7 +23,7 @@ export const Route = createFileRoute("/app/workbench")({ const LABELS: Record = { miner: "Miner", playground: "Playground", - commands: "@gittensory", + commands: "@loopover", digest: "Digest", }; @@ -50,7 +50,7 @@ function Workbench() {
  • Preview the public surface. Dry-run what would be written to GitHub - without mutating state. Keep Gittensory Context advisory; require{" "} - Gittensory Orb Review Agent only after blocking rules are explicitly + without mutating state. Keep LoopOver Context advisory; require{" "} + LoopOver Orb Review Agent only after blocking rules are explicitly configured. Use maintainer commands. On-demand context in the PR thread — output stays maintainer-scoped when appropriate.
  • diff --git a/apps/gittensory-ui/src/routes/docs.gittensory-commands.tsx b/apps/gittensory-ui/src/routes/docs.gittensory-commands.tsx index 890683f6d7..6044834679 100644 --- a/apps/gittensory-ui/src/routes/docs.gittensory-commands.tsx +++ b/apps/gittensory-ui/src/routes/docs.gittensory-commands.tsx @@ -11,17 +11,17 @@ import { export const Route = createFileRoute("/docs/gittensory-commands")({ head: () => ({ meta: [ - { title: "@gittensory command reference — LoopOver docs" }, + { title: "@loopover command reference — LoopOver docs" }, { name: "description", content: - "Every @gittensory PR and issue comment command: syntax, default authorization roles, and the hard boundary between auto-review and the one-shot gate.", + "Every @loopover PR and issue comment command: syntax, default authorization roles, and the hard boundary between auto-review and the one-shot gate.", }, - { property: "og:title", content: "@gittensory command reference — LoopOver docs" }, + { property: "og:title", content: "@loopover command reference — LoopOver docs" }, { property: "og:description", content: - "Every @gittensory PR and issue comment command: syntax, default authorization roles, and the hard boundary between auto-review and the one-shot gate.", + "Every @loopover PR and issue comment command: syntax, default authorization roles, and the hard boundary between auto-review and the one-shot gate.", }, { property: "og:url", content: "/docs/gittensory-commands" }, ], @@ -82,7 +82,7 @@ function CommandTable({ {entries.map((entry) => ( - @gittensory {entry.id} + @loopover {entry.id} {entry.description} @@ -101,7 +101,7 @@ function GittensoryCommandsReference() { return ( @@ -113,11 +113,11 @@ function GittensoryCommandsReference() {

    Syntax

    - Post a comment on a pull request (or issue thread) mentioning @gittensory{" "} + Post a comment on a pull request (or issue thread) mentioning @loopover{" "} followed by a verb. Trailing free text becomes the command argument where noted (for example{" "} - @gittensory ask what should I fix first?). + @loopover ask what should I fix first?).

    - [argument or reason]`} /> + [argument or reason]`} /> diff --git a/apps/gittensory-ui/src/routes/docs.index.tsx b/apps/gittensory-ui/src/routes/docs.index.tsx index 03f4cdbd79..b2711c2075 100644 --- a/apps/gittensory-ui/src/routes/docs.index.tsx +++ b/apps/gittensory-ui/src/routes/docs.index.tsx @@ -76,7 +76,7 @@ const AUDIENCES: Audience[] = [ { to: "/docs/maintainer-install-trust", label: "Install & trust guide" }, { to: "/docs/github-app", label: "GitHub App configuration" }, { to: "/docs/maintainer-workflow", label: "Maintainer workflow" }, - { to: "/docs/gittensory-commands", label: "@gittensory commands" }, + { to: "/docs/gittensory-commands", label: "@loopover commands" }, { to: "/docs/self-hosting-rees-analyzers", label: "REES analyzers" }, { to: "/docs/upstream-drift", label: "Upstream drift" }, { to: "/docs/ai-summaries", label: "AI summaries policy" }, 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 badd95b885..9d506bc9e5 100644 --- a/apps/gittensory-ui/src/routes/docs.maintainer-self-hosting.tsx +++ b/apps/gittensory-ui/src/routes/docs.maintainer-self-hosting.tsx @@ -224,7 +224,7 @@ function MaintainerSelfHosting() {
  • Mount ./gittensory-config and copy{" "} - config/examples/global.gittensory.yml →{" "} + config/examples/global.loopover.yml →{" "} gittensory-config/.loopover.yml for a centralized private default (per-repo files deep-merge on top).
  • @@ -245,7 +245,7 @@ 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.gittensory.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 gittensory-config/owner__repo/.loopover.yml from global.loopover.yml, and POSTs activation — idempotent, dry-run aware.", }, { title: "Centralized private default only", diff --git a/apps/gittensory-ui/src/routes/docs.maintainer-workflow.tsx b/apps/gittensory-ui/src/routes/docs.maintainer-workflow.tsx index 06a12973b4..1d7fe44b26 100644 --- a/apps/gittensory-ui/src/routes/docs.maintainer-workflow.tsx +++ b/apps/gittensory-ui/src/routes/docs.maintainer-workflow.tsx @@ -12,13 +12,13 @@ export const Route = createFileRoute("/docs/maintainer-workflow")({ { name: "description", content: - "How to use LoopOver in a repo: confirmed-miner labels, sticky sanitized comments, on-demand @gittensory commands.", + "How to use LoopOver in a repo: confirmed-miner labels, sticky sanitized comments, on-demand @loopover commands.", }, { property: "og:title", content: "Maintainer workflow — LoopOver docs" }, { property: "og:description", content: - "How to use LoopOver in a repo: confirmed-miner labels, sticky sanitized comments, on-demand @gittensory commands.", + "How to use LoopOver in a repo: confirmed-miner labels, sticky sanitized comments, on-demand @loopover commands.", }, { property: "og:url", content: "/docs/maintainer-workflow" }, ], @@ -83,9 +83,9 @@ function MaintainerWorkflow() { <> You can ask for the same reviewability view in the PR thread. ), @@ -136,7 +136,7 @@ GET /v1/repos/:owner/:repo/registration-readiness`} self-hosting setup, then{" "} GitHub App configuration: install on one repo, verify installation health, preview the public panel, then decide whether{" "} - Gittensory Orb Review Agent should become a required check. + LoopOver Orb Review Agent should become a required check.

    For syntax, default roles, PR action verbs, and the gate vs auto-review boundary, see the{" "} - @gittensory command reference. + @loopover command reference.

    diff --git a/apps/gittensory-ui/src/routes/docs.miner-workflow.tsx b/apps/gittensory-ui/src/routes/docs.miner-workflow.tsx index f1d3c333ed..6308618fb5 100644 --- a/apps/gittensory-ui/src/routes/docs.miner-workflow.tsx +++ b/apps/gittensory-ui/src/routes/docs.miner-workflow.tsx @@ -80,12 +80,12 @@ export function MinerWorkflow() { maintainer: ( <> On confirmed-miner PRs you can later request the same view with - @gittensory preflight — the response is sanitized for the PR thread. + @loopover preflight — the response is sanitized for the PR thread. ), nextStep: { miner: { label: "Common preflight blockers", to: "/docs/troubleshooting" }, - maintainer: { label: "All @gittensory commands", to: "/docs/maintainer-workflow" }, + maintainer: { label: "All @loopover commands", to: "/docs/maintainer-workflow" }, }, }, { diff --git a/apps/gittensory-ui/src/routes/docs.privacy-security.tsx b/apps/gittensory-ui/src/routes/docs.privacy-security.tsx index 3c2c8a2c21..39e3a00d92 100644 --- a/apps/gittensory-ui/src/routes/docs.privacy-security.tsx +++ b/apps/gittensory-ui/src/routes/docs.privacy-security.tsx @@ -93,7 +93,7 @@ LOOPOVER_REVIEW_UNIFIED_COMMENT="true" # one in-place unified PR comment LOOPOVER_REVIEW_ENRICHMENT="true" # external analyzer registry (REES) findings LOOPOVER_REVIEW_INLINE_COMMENTS="true" # diff-anchored inline PR review comments LOOPOVER_REVIEW_FIX_HANDOFF="true" # machine-readable fix-handoff block (contributor-run) -LOOPOVER_REVIEW_PLANNER="true" # @gittensory plan on-demand implementation plan +LOOPOVER_REVIEW_PLANNER="true" # @loopover plan on-demand implementation plan LOOPOVER_REVIEW_SCREENSHOTS="true" # before/after visual capture for UI changes LOOPOVER_REVIEW_E2E_TESTS="true" # AI-generated E2E test coverage (needs features.e2eTests too) LOOPOVER_REVIEW_IMPROVEMENT_SIGNAL="true" # read-only PR quality-delta signal (activation only, no-op for now) 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 aac241f2b2..f3d747fb7c 100644 --- a/apps/gittensory-ui/src/routes/docs.self-hosting-configuration.tsx +++ b/apps/gittensory-ui/src/routes/docs.self-hosting-configuration.tsx @@ -108,22 +108,22 @@ function SelfHostingConfiguration() { Keep anti-abuse thresholds, maintainer allowlists, and autonomy dials in the{" "} @@ -149,13 +149,13 @@ cp config/examples/global.gittensory.yml gittensory-config/.loopover.yml`}

    Authoritative copies in git: