Skip to content

[Task]: Live surfaces and one relevance oracle still carry the pre-transfer repository address #4753

Description

@DJC1412

Task ID or area

area: repository identity after the organization migration (huangruiteng/loopx → loopx-project/loopx)

Technical direction

Core control-plane hardening; build/packaging and public-docs hygiene

Intent

The transfer moved the canonical address, and most of the tree followed: .github/workflows/*, README.md / README.zh-CN.md, the Tauri desktop config, the hosted site, scripts/install-from-github.sh (repo="${LOOPX_REPO:-loopx-project/loopx}") and self_update.DEFAULT_UPDATE_REPO all name loopx-project/loopx already. Measured on current main, three things did not follow, and one of them is a behavior bug rather than a stale link.

Goal and acceptance gap

  1. Live product surfaces still publish the pre-transfer address — measured here, git grep on main:
    • loopx/cli_commands/first_run_report.py:18 — FIRST_RUN_ISSUE_URL is the "file your first-run report" link handed to every new install;
    • loopx/agent_onboarding.py:245 — source_repository in the onboarding projection;
    • loopx/capabilities/manager_runtime/machine_profile.py:57 and loopx/capabilities/steward_executor/machine_defaults.py:148 — the documentation.url each machine-configuration namespace projects to CLI and Dashboard;
    • loopx/capabilities/value_connectors/planner.py:274,289 — the two monitored target_url values (intake issue and discussion);
    • packages/loopx-community-discussion/README.md and examples/request.json, packages/loopx-repo-health/examples/request.json, packages/dsh-loopx-plugin/package.json — copied-by-users command examples and package metadata.
      GitHub redirects keep the old addresses resolving, which is exactly why nothing fails loudly.
  2. loopx-community-discussion mis-classifies its own project. normalize.STRONG_TERMS contains huangruiteng and github.com/huangruiteng/loopx, and classify_relevance returns strong only on those. A post-transfer mention of github.com/loopx-project/loopx matches no strong term, so the provider downgrades LoopX's own canonical pages to weak — a relevance-oracle regression introduced by the move, not a cosmetic one.
  3. Nothing prevents the residue from growing back. No check relates a tracked file to the canonical repository address, so the next file written can carry either form.

Proposed scope

One cohesive slice, all of it inside live surfaces:

  • repoint the sites in (1) to loopx-project/loopx;
  • add the post-transfer owner and repo URL to STRONG_TERMS while keeping the pre-transfer pair as historical aliases, so archived pages and old release notes still classify strong, and pin both with a smoke case;
  • add a repository-hygiene check that fails when a live surface (loopx/**, scripts/**, .github/workflows/**, packages/**/src/**, package manifests) carries the pre-transfer address, and that requires the disambiguation list to cover both forms.

Deliberately excluded, so this stays reviewable:

  • 279 blob/main / tree/main document links and 30 bare identity mentions under docs/**, docs/book/** and the hosted blog HTML. Those are a mechanical sweep with their own diff-noise risk, and dated records (release notes, blog posts, RFC citations, packages/loopx-codex-provider-routing/RUNBOOK.md PR tables — 431 /pull/N, /issues/N, /commit/sha, /releases/download/tag citations measured on main) should keep the address the event happened under.
  • packages/dsh-loopx-plugin's data/plugins/huangruiteng__loopx--packages-dsh-loopx-plugin.yml install filename: that string is derived identity in already-installed state, so changing it needs a migration decision rather than a rename. Flagging, not touching.

Intended base branch

main.

Relevant files or commands

  • loopx/cli_commands/first_run_report.py, loopx/agent_onboarding.py, loopx/capabilities/{manager_runtime/machine_profile,steward_executor/machine_defaults,value_connectors/planner}.py
  • packages/loopx-community-discussion/src/loopx_community_discussion/normalize.py + smoke/community_discussion_smoke.py + README.md + examples/request.json
  • packages/loopx-repo-health/examples/request.json, packages/dsh-loopx-plugin/package.json
  • examples/repository-hygiene-smoke.py

Validation plan

  • python3 examples/repository-hygiene-smoke.py green, and a mutation case: re-adding the pre-transfer URL under loopx/ fails it.
  • python3 packages/loopx-community-discussion/smoke/community_discussion_smoke.py green offline, with the new case asserting a loopx-project/loopx mention classifies strong and a looped-only title still classifies noise.
  • Focused pytest for the touched capability surfaces, plus loopx check --scan-path over every changed path.

Public/private boundary

  • This issue does not include private benchmark traces, verifier output, credentials, internal document links, raw agent sessions, or local runtime state.
  • I will not run or duplicate maintainer-owned benchmark cases unless a maintainer explicitly splits out a public task.

Activity

  1. huangruiteng commented on Sep 19, 2026

    @huangruiteng
    Collaborator

    Maintainer intake readback on current main@916763e2c7fc9c19274f877dd234f7db6a65390c: the core regression is confirmed, and it is not covered by the already-merged organization-transfer PRs #4750 / #4751.

    What reproduces

    1. The relevance regression is exact and behavioral. Calling classify_relevance("Question", url) gives:

      • https://github.com/huangruiteng/loopx/issues/1 -> strong
      • https://github.com/loopx-project/loopx/issues/1 -> weak

      The canonical URL is therefore weaker than the historical alias. The existing offline community-discussion smoke passes, but it only exercises the pre-transfer address and does not cover this counterexample.

    2. The named live outputs still carry the old repository address on current main: first-run report URL, onboarding source_repository, manager/steward machine-configuration documentation URLs, and value-connector targets. loopx/configuration_catalog.py also contains ten current machine-configuration documentation URLs with the old address and belongs in the same runtime-output audit.

    3. The package-facing examples are still pre-transfer: the community-discussion and repo-health README/request defaults use owner huangruiteng, and packages/dsh-loopx-plugin/package.json still publishes the old repository URL. Historical release links, archived PR/issue citations, compatibility fixtures, and the DSH installed-state filename are a different class and should not be rewritten by a blanket tree-wide substitution.

    4. There is already a canonical-identity test owner: tests/test_project_organization_identity.py. It currently protects install/update/package identity only (2 passed) and does not cover these live projections. examples/repository-hygiene-smoke.py also already exists, so this should extend an existing owner rather than add a second smoke with the same name.

    Public deduplication

    Recommended implementation boundary

    A cohesive first PR can update the current live projections/examples, add loopx-project and github.com/loopx-project/loopx as strong terms while retaining the two old aliases, and extend the existing organization-identity/hygiene coverage. Please include loopx/configuration_catalog.py in the audited runtime surface.

    The guard should not be a repository-wide substring denylist. The old identity is still legitimate in historical citations, compatibility fixtures and the explicit legacy relevance alias. Prefer an explicit set of current live surfaces (or one canonical repository-identity constant consumed by them) plus a reviewed allowlist for intentionally retained legacy references. That gives the mutation test a semantic boundary and avoids turning release history or compatibility tests into false positives.

    For the relevance oracle, the minimum regression matrix is:

    • canonical organization URL -> strong;
    • pre-transfer URL -> still strong for historical evidence;
    • an unrelated looped/noise example -> still noise;
    • a generic text that contains neither identity -> still weak.

    Validation run during intake:

    • uv run --extra test pytest -q tests/test_project_organization_identity.py -> 2 passed;
    • uv run --extra test python packages/loopx-community-discussion/smoke/community_discussion_smoke.py -> passed;
    • direct old/new URL classification -> strong / weak as above;
    • uv run --extra test python examples/repository-hygiene-smoke.py currently fails for an unrelated baseline reason (v1.1.0 is missing from the release timeline), so an identity change should either use the focused organization-identity test first or repair that independent baseline without hiding it.

    This intake confirms and narrows the defect; it does not assign implementation or change issue metadata. An implementation PR should reference this exact scope and keep the historical-alias compatibility explicit.

  2. hahahahahayesyeseys commented on Sep 20, 2026

    @hahahahahayesyeseys
    Contributor

    One residue found and opened separately as #4809: a test expectation still pinned the pre-transfer address, so the update-note generator now fails its own quality smoke by emitting the correct one. It is red on main in two lanes today (full-public-smokes shard 4 and the biweekly draft-update-note-pr job). That PR also notes the remaining release-timeline hygiene failure is release record content and left to its owner.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions