Skip to content

fix(identity): treat CLA as signed across username/github/public-id aliases - #2169

Merged
benjamin-747 merged 2 commits into
gitmono-dev:mainfrom
benjamin-747:main
Aug 11, 2026
Merged

fix(identity): treat CLA as signed across username/github/public-id aliases#2169
benjamin-747 merged 2 commits into
gitmono-dev:mainfrom
benjamin-747:main

Conversation

@benjamin-747

Copy link
Copy Markdown
Collaborator

No description provided.

Replace the bottom-left Share Feedback and Changelog controls with a
baked short SHA + build date so onprem can match Harbor image tags.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: ae3b9b768c

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

.get_or_create_status(username)
.await?;
// Heal transitional CL authors (username/github_login) after a public-id sign.
if model.cla_signed {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Check aliases before returning unsigned CLA status

When a user has an existing signed CLA row under a previous username or GitHub login and now hits /cla/status with their Campsite public id, get_or_create_status(username) creates/reads the new public-id row as unsigned and this branch is skipped, so the API returns cla_signed: false even though ClaSignChecker would pass via any_signed(&aliases). That leaves the settings/merge UI prompting already-signed users to sign again; resolve aliases and check any_signed before deciding the returned status is unsigned.

Useful? React with 👍 / 👎.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 5523d8174b

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread moon/apps/web/Dockerfile
Comment on lines +58 to +59
ENV NEXT_PUBLIC_APP_VERSION=${GIT_SHA}
ENV NEXT_PUBLIC_APP_BUILD_TIME=${BUILD_TIME}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Include version env vars in Turbo's build hash

When this Docker build runs for a commit that does not otherwise change @gitmono/web inputs, npx turbo run build --filter=@gitmono/web can replay the cached .next output even though these new NEXT_PUBLIC_* values changed, because moon/apps/web/turbo.json lists the build env inputs on lines 6-30 and does not include NEXT_PUBLIC_APP_VERSION or NEXT_PUBLIC_APP_BUILD_TIME. In that case the sidebar bundle can keep showing the previous SHA/build time; add these vars to the Turbo build hash or avoid baking them through a cached task.

Useful? React with 👍 / 👎.

…liases

Web edits were persisting Campsite username as CL author while CLA rows use campsite public id, so signed users still failed merge checks.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: a5669d4246

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

self.ctx.storage(),
MemberIdentityProfile {
campsite_user_id: campsite_user_id.to_string(),
username: login.clone().unwrap_or_default(),

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Preserve synced Campsite usernames when only GitHub login is known

When the session only provides a GitHub login, this writes that login into the identity table's username field. CampsiteMemberIdentityStorage::upsert treats any non-empty incoming username as authoritative and overwrites an existing synced Campsite username, so a user whose Campsite username differs from their GitHub login loses the old-handle alias after hitting /approval-status; subsequent CLA/author alias checks no longer include pre-backfill rows stored under that old username. Leave username empty unless the true Campsite username is known, and set only github_login/display fields from the session login.

Useful? React with 👍 / 👎.

user: &LoginUser,
_client_author: Option<String>,
) -> Result<String, ApiError> {
Ok(collaboration_actor(user)?.to_string())

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Look up existing web-edit CLs across author aliases

For web edits made by a user who already has an open CL authored under their pre-migration Campsite username/GitHub login, forcing the request author to the public id means CodeEditService::update_or_create_cl calls the exact get_open_cl_by_path(path, username) lookup with a different actor string. If actor backfill has not rewritten that old row yet (or is skipped on installs without the Campsite internal secret), the old CL is missed and a duplicate open CL is created for the same path instead of updating it; resolve author aliases in the open-CL lookup before falling back to create_new_cl.

Useful? React with 👍 / 👎.

@benjamin-747
benjamin-747 added this pull request to the merge queue Aug 11, 2026
Merged via the queue into gitmono-dev:main with commit 3d22823 Aug 11, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants