Skip to content

chore(config): retire the .gittensory.yml config-filename dual-read shim - #5651

Merged
JSONbored merged 2 commits into
mainfrom
retire-config-filename-shim
Jul 13, 2026
Merged

chore(config): retire the .gittensory.yml config-filename dual-read shim#5651
JSONbored merged 2 commits into
mainfrom
retire-config-filename-shim

Conversation

@JSONbored

Copy link
Copy Markdown
Owner

Summary

  • Retires the .gittensory.yml/.yaml/.json config-filename dual-read shim: .loopover.yml (and its .yaml/.json/.github/-nested variants, depending on the reader) is now the only config filename read anywhere in the app, the engine package, the MCP CLI, and the miner package.
  • Renames this repo's own root config file (.gittensory.yml -> .loopover.yml, .gittensory.yml.example -> .loopover.yml.example) to dogfood the new-only behavior.
  • Collapses the candidate-filename lists in every reader (self-host private-config loader, public focus-manifest loader, both copies of the config-as-code guardrail globs, the engine's objective-anchor classifier, and the miner's self-review-context reader) down to the new-brand-only entries.
  • Fixes two real user-facing strings that were still hardcoded to the old filename (the gittensory_predict_gate MCP tool's note text, and the "E2E test generation is not enabled" PR comment), and regenerates the engine-parity golden fixtures that pinned the old text.
  • Updates every affected test: collapses/removes the now-redundant dual-brand describe blocks, and fixes several stub fetch-URL matchers and expected-string assertions that were still keyed on the old filename. A few of these were silent regressions once the dual-read code was removed — a stale .gittensory.y-substring URL matcher meant a test's manifest stub was never actually hit anymore, so the load silently fell through to a real fallback manifest instead (caught by a full local test:ci run, not by inspection).
  • Updates docs (config/examples/, CONTRIBUTING.md, README.md, the self-hosting doc pages, the contributing-to-loopover skill) to stop mentioning the retired legacy filename.

Part of #4777.

Scope

  • The PR title follows type(scope): short summary Conventional Commit format, for example fix(api): restore profile access checks.
  • This PR is focused and does not mix unrelated backend, UI, MCP, docs, dependency, and deploy changes.
  • This follows CONTRIBUTING.md and does not reintroduce GitHub Pages, VitePress, site/, or CNAME.
  • Part of Retire every deprecation shim #4777 (tracking issue for the whole rebrand shim-retirement effort; multiple PRs are landing against it, so this one intentionally does not close it).

Validation

  • git diff --check
  • npm run actionlint
  • npm run typecheck
  • npm run test:coverage locally (full unsharded run, twice — first pass caught 17 real test regressions across 7 files from the filename retirement, all fixed and reverified)
  • npm run test:workers
  • npm run build:mcp
  • npm run test:mcp-pack
  • npm run ui:openapi:check
  • npm run ui:lint
  • npm run ui:typecheck
  • npm run ui:build
  • npm audit --audit-level=moderate
  • New or changed behavior has unit/integration tests for new branches, fallback paths, and sanitizer boundaries — every changed filename-matching list has a corresponding test asserting only the new-brand entries are present, and the regenerated engine-parity golden fixtures keep the predictor's note-text assertion in sync.

Also ran the full npm run test:ci gate end to end (the exact test:ci script), which additionally covers db:migrations:check, db:schema-drift:check, selfhost:env-reference:check, miner:env-reference:check, selfhost:validate-observability, cf-typegen:check, test:engine-parity, test:live-gate-parity, test:driver-parity, the @loopover/engine workspace's own test run, build:miner, test:miner-pack, rees:test, ui:openapi:settings-parity, ui:version-audit, docs:drift-check, manifest:drift-check, engine-parity:drift-check, and command-reference:check — all green.

Safety

  • No secrets, wallet details, hotkeys, coldkeys, user PATs, private keys, raw trust scores, private rankings, or private maintainer evidence are exposed.
  • Public GitHub text stays sanitized, low-noise, and does not imply compensation guarantees or optimization tactics.
  • Auth, cookie, CORS, GitHub App, Cloudflare, or session changes include negative-path tests. (N/A — no auth/cookie/CORS/session surface touched.)
  • API/OpenAPI/MCP behavior is updated and tested where needed (the gittensory_validate_config/loopover_validate_config MCP tool description and CLI help text no longer mention the retired filename).
  • UI changes use live API data or real empty/error/loading states, not production mock/demo fallbacks. (N/A — no data-fetching behavior touched.)
  • Visible UI changes include a UI Evidence section below with screenshots. Skipped: every apps/gittensory-ui change in this PR is a documentation-copy edit removing a stale "(legacy .gittensory.yml also still works)" clause from existing doc-page prose — no layout, styling, or component change, so there is nothing a screenshot would show differently.
  • Public docs/changelogs are updated where needed; changelogs are only edited for release-prep PRs. (No CHANGELOG.md touched — historical entries describing the filename as it was at the time are left as-is, since they're a historical record, not current documentation.)

UI Evidence

N/A — see the Safety section above. This PR's only apps/gittensory-ui changes are prose edits on existing doc pages (removing a now-false "legacy filename also works" clause); no visible layout/styling/component difference exists to screenshot.

Notes

  • Config template files under config/examples/*.gittensory.yml (and the root .gittensory.minimal.yml) intentionally keep their illustrative filenames unchanged — they are copy-source templates, not files ever read directly by the app (their own doc comments already say "copy this to .loopover.yml"). Renaming those is a separate, broader asset-rebrand concern outside this PR's scope (the config-filename dual-read shim).
  • A handful of files still contain prose comments mentioning .gittensory.yml as a general "where this setting lives" reference (e.g. several src/settings/**, src/review/**, and packages/gittensory-engine/src/** modules, plus historical CHANGELOG.md entries). None of these are part of the dual-read shim itself — they're documentation prose scattered across otherwise-unrelated modules — and updating all of them here would make this PR far larger than the "config-filename dual-read" subsystem this issue tracks; leaving them for a follow-up sweep.

The config-filename grace period from the LoopOver rebrand has elapsed:
drop legacy .gittensory.yml/.yaml/.json support from every reader now
that the new .loopover.yml name is the only one read.

- src/selfhost/private-config.ts: collapse CONFIG_BASENAMES/CONFIG_EXTENSIONS
  to the 3 .loopover.* entries, drop the 3 legacy .gittensory.* entries,
  rewrite the module-header comment.
- src/signals/focus-manifest-loader.ts: drop the 4 legacy entries from
  MANIFEST_FILE_CANDIDATES, strip dual-brand language from the doc comments.
- src/review/guardrail-config.ts and its hand-duplicated engine twin
  (packages/gittensory-engine/src/review/guardrail-config.ts): drop the 6
  legacy globs from CONFIG_AS_CODE_GUARDRAIL_GLOBS.
- packages/gittensory-engine/src/objective-anchor.ts: drop the legacy
  entry from the CONFIG_FILENAMES classification set.
- packages/gittensory-engine/src/predicted-gate.ts: drop the legacy
  filename from the predictor's public-facing note text; regenerate the
  engine-parity golden fixtures to match.
- src/queue/processors.ts: drop the legacy filename from the
  E2E-test-gen-not-enabled comment posted to contributors.
- Renames this repo's own root config file (.gittensory.yml ->
  .loopover.yml, .gittensory.yml.example -> .loopover.yml.example) to
  dogfood the new-only behavior.
- Updates every affected test: removes/collapses the dual-brand describe
  blocks, and fixes stub fetch-URL matchers and expected-string
  assertions that were still keyed on the old filename (several of these
  were silent regressions -- a stale ".gittensory.y" URL matcher meant a
  test's manifest stub was never hit, and it was instead falling through
  to a real bundled fallback manifest).
- Updates docs: config/examples/, CONTRIBUTING.md, README.md, the
  self-hosting doc pages, and the contributing-to-loopover skill.

Part of #4777.
@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Jul 13, 2026

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Preview URL Updated (UTC)
✅ Deployment successful!
View logs
loopover-ui ee81b1a Commit Preview URL

Branch Preview URL
Jul 13 2026, 08:33 PM

@superagent-security

Copy link
Copy Markdown
Contributor

Superagent didn't find any vulnerabilities or security issues in this PR.

@codecov

codecov Bot commented Jul 13, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 95.03%. Comparing base (941c300) to head (ee81b1a).
⚠️ Report is 4 commits behind head on main.
✅ All tests successful. No failed tests found.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #5651      +/-   ##
==========================================
- Coverage   95.03%   95.03%   -0.01%     
==========================================
  Files         577      577              
  Lines       45920    45920              
  Branches    14695    14695              
==========================================
- Hits        43640    43638       -2     
  Misses       1528     1528              
- Partials      752      754       +2     
Flag Coverage Δ
shard-1 43.96% <20.00%> (+0.05%) ⬆️
shard-2 35.66% <80.00%> (-0.01%) ⬇️
shard-3 32.19% <40.00%> (-0.01%) ⬇️
shard-4 32.58% <20.00%> (+<0.01%) ⬆️
shard-5 31.77% <80.00%> (-0.01%) ⬇️
shard-6 44.45% <60.00%> (-0.01%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
packages/gittensory-engine/src/objective-anchor.ts 24.16% <ø> (ø)
packages/gittensory-engine/src/predicted-gate.ts 100.00% <100.00%> (ø)
...s/gittensory-engine/src/review/guardrail-config.ts 100.00% <ø> (ø)
...ckages/gittensory-miner/lib/self-review-context.js 96.52% <100.00%> (ø)
src/config/gittensory-repo-focus-manifest.ts 100.00% <ø> (ø)
src/github/repo-doc-pr.ts 100.00% <100.00%> (ø)
src/queue/processors.ts 95.67% <ø> (ø)
src/review/guardrail-config.ts 100.00% <ø> (ø)
src/selfhost/private-config.ts 100.00% <100.00%> (ø)
src/signals/focus-manifest-loader.ts 98.36% <ø> (-0.82%) ⬇️

... and 1 file with indirect coverage changes

🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@loopover-orb loopover-orb Bot added the gittensor:bug Gittensor-scored bug fix — scores a 0.05x multiplier. label Jul 13, 2026
@loopover-orb

loopover-orb Bot commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Warning

🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨

⏸️ LoopOver review result - manual review recommended

Review updated: 2026-07-13 20:39:59 UTC

94 files · 1 AI reviewer · 1 blocker · readiness 100/100 · CI green · clean

⏸️ Suggested Action - Manual Review

Review summary
This PR completes a rebrand cleanup by deleting the `.gittensory.yml` dual-read shim across every reader (self-host private-config loader, public focus-manifest loader, both config-as-code guardrail globs, engine anchor classifier, miner context reader) and repointing all docs/config examples at `.loopover.yml` exclusively. The mechanical narrowing of `CONFIG_BASENAMES` in `src/selfhost/private-config.ts:55` and `MANIFEST_FILE_CANDIDATES` in `src/signals/focus-manifest-loader.ts:17` is correct — both derived-array helpers (`GLOBAL_CONFIG_CANDIDATES`, `SHARED_BASE_CONFIG_CANDIDATES`, `localConfigCandidates`) still fold from the trimmed constant, so nothing downstream silently reverts to the old 8-candidate list. The description's callout that some tests had a stale `.gittensory.y`-substring URL matcher that was silently falling through to a fallback manifest (caught only by a full `test:ci` run) is a good example of the kind of regression this shim retirement can hide, and it looks like it was actually addressed rather than glossed over.

Nits — 4 non-blocking
  • 94-file diff is almost entirely mechanical string/rename churn across docs and config examples — reasonable for a shim retirement, but a second contributor sanity-diffing all doc pages for stray leftover `.gittensory.yml` mentions is worth doing before merge (grep the whole repo, not just the changed files, for `.gittensory.yml` outside legacy `config/examples/*.gittensory.yml` template filenames that are deliberately keeping their brand name).
  • config/examples/gittensory.full.yml and gittensory.minimal.yml keep their `.gittensory.*` template filenames (only `.loopover.yml`/`.loopover.yml.example` at repo root were renamed) — confirm that's intentional per the PR description's scope and not an inconsistency.
  • Consider a follow-up grep-based CI check (or extending scripts/check-docs-drift.mjs) that fails if `.gittensory.yml` (the retired filename) reappears anywhere outside the deliberately-still-branded template filenames in config/examples/, to prevent future regressions of this exact rename.
  • The Workers Builds: loopover-ui failure isn't a code defect per se, but worth confirming it's unrelated to this doc-heavy diff before merge since several UI route files changed.

Concerns raised — review before merging

  • No linked issue detected — If this PR is intended to solve an issue, link it explicitly in the PR body.
📋 Copy for AI agents — paste into your coding agent
Fix the following blocker(s) from this PR review:

1. No linked issue detected — If this PR is intended to solve an issue, link it explicitly in the PR body.
Signal Result Evidence
Code review ❌ 1 blocker 1 reviewer
Linked issue ✅ No-issue rationale PR body explains why no issue is linked.
Related work ✅ No active overlap found No same-issue or scoped active PR overlap found.
Change scope ✅ 20/20 Low review scope from cached public metadata (no linked issue context).
Validation posture ✅ 25/25 PR body includes validation/test evidence.
Contributor workload ✅ 10/10 Author activity: 44 registered-repo PR(s), 36 merged, 320 issue(s).
Contributor context ✅ Confirmed Gittensor contributor JSONbored; Gittensor profile; 44 PR(s), 320 issue(s).
Gate result ❌ Blocking Repo-configured hard blocker found.
Improvement ✅ Minor risk: clean · value: minor — Code changes are accompanied by test evidence.
Review context
  • Author: JSONbored
  • Role context: owner (maintainer lane)
  • Public audience mode: oss maintainer
  • Lane context: Repository is configured for direct PR review.
  • Public profile languages: not available
  • Official Gittensor activity: 44 PR(s), 320 issue(s).
  • PR-specific overlap: none found.
Contributor next steps
  • Treat this as maintainer-lane context rather than normal contributor-lane activity.
Signal definitions
  • Related work = same linked issue, overlapping active PRs, or title/path similarity.
  • Change scope = cached public metadata such as size labels, draft state, and review-burden hints.
  • Validation posture = whether the PR provides enough public validation/test evidence for maintainer review.
  • Contributor workload = public contributor activity and cleanup pressure, not a repo-wide quality failure.
  • Contributor context = public GitHub/Gittensor identity context; non-Gittensor status is not a blocker.
[BETA] Chat with Gittensory

Ask Gittensory a question about this PR directly in a comment — grounded only in the same cached, public-safe facts shown above, never a new claim.

  • @gittensory ask &lt;question&gt; answers contribution-quality Q&A with source citations and freshness.
  • @gittensory chat &lt;question&gt; answers in natural prose from cached decision-pack facts via local inference (maintainer/collaborator; read-only).
  • A plain-language @gittensory mention with a real question is routed to the closest matching read-only command automatically -- no exact syntax required.

Full command reference: https://gittensory.aethereal.dev/docs/gittensory-commands

Visual preview
Route Viewport Before (production) After (this PR's preview) Diff
/docs/github-app desktop before /docs/github-app after /docs/github-app
/docs/github-app mobile before /docs/github-app (mobile) after /docs/github-app (mobile)
/docs/gittensory-commands desktop before /docs/gittensory-commands after /docs/gittensory-commands
/docs/gittensory-commands mobile before /docs/gittensory-commands (mobile) after /docs/gittensory-commands (mobile)

Click any thumbnail to open the full-size screenshot. Before = production · After = this PR's preview deploy.

🟩 Safe / merged · 🟦 Advisory · 🟨 Held for review · 🟥 Blocked / closed


💰 Earn for open-source contributions like this. Gittensor lets GitHub contributors earn for the work they already do — register to start earning →.

Checked by LoopOver, a quiet PR intelligence layer for OSS maintainers.

  • Re-run LoopOver review

@loopover-orb loopover-orb Bot added the manual-review Gittensor contributor context label Jul 13, 2026
@JSONbored
JSONbored merged commit 0dfc40a into main Jul 13, 2026
20 checks passed
@JSONbored
JSONbored deleted the retire-config-filename-shim branch July 13, 2026 20:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

gittensor:bug Gittensor-scored bug fix — scores a 0.05x multiplier. manual-review Gittensor contributor context

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant