From 217a864ba023e1cdab54870188f05ec9241f247c Mon Sep 17 00:00:00 2001 From: tunnckoCore <5038030+tunnckoCore@users.noreply.github.com> Date: Wed, 1 Apr 2026 21:37:43 +0300 Subject: [PATCH 1/3] feat: support disabling commit co-author attribution Add an env var to suppress the default Co-Authored-By trailer and rebrand PR attribution text to OpenClaude. --- src/utils/attribution.ts | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/utils/attribution.ts b/src/utils/attribution.ts index fbce4237..da957901 100644 --- a/src/utils/attribution.ts +++ b/src/utils/attribution.ts @@ -1,11 +1,8 @@ import { feature } from 'bun:bundle' import { stat } from 'fs/promises' import { getClientType } from '../bootstrap/state.js' -import { - getRemoteSessionUrl, - isRemoteSessionLocal, - PRODUCT_URL, -} from '../constants/product.js' +import { getRemoteSessionUrl, isRemoteSessionLocal } from '../constants/product.js' +import { isEnvTruthy } from './envUtils.js' import { TERMINAL_OUTPUT_TAGS } from '../constants/xml.js' import type { AppState } from '../state/AppState.js' import { FILE_EDIT_TOOL_NAME } from '../tools/FileEditTool/constants.js' @@ -76,8 +73,13 @@ export function getAttributionTexts(): AttributionTexts { isInternalModelRepoCached() || isKnownPublicModel ? getPublicModelName(model) : 'Claude Opus 4.6' - const defaultAttribution = `🤖 Generated with [Claude Code](${PRODUCT_URL})` - const defaultCommit = `Co-Authored-By: ${modelName} ` + const defaultAttribution = + '🤖 Generated with [OpenClaude](https://github.com/Gitlawb/openclaude)' + const defaultCommit = isEnvTruthy( + process.env.OPENCLAUDE_DISABLE_CO_AUTHORED_BY, + ) + ? '' + : `Co-Authored-By: ${modelName} ` const settings = getInitialSettings() @@ -325,7 +327,8 @@ export async function getEnhancedPRAttribution( return '' } - const defaultAttribution = `🤖 Generated with [Claude Code](${PRODUCT_URL})` + const defaultAttribution = + '🤖 Generated with [OpenClaude](https://github.com/Gitlawb/openclaude)' // Get AppState first const appState = getAppState() @@ -371,7 +374,7 @@ export async function getEnhancedPRAttribution( memoryAccessCount > 0 ? `, ${memoryAccessCount} ${memoryAccessCount === 1 ? 'memory' : 'memories'} recalled` : '' - const summary = `🤖 Generated with [Claude Code](${PRODUCT_URL}) (${claudePercent}% ${promptCount}-shotted by ${shortModelName}${memSuffix})` + const summary = `🤖 Generated with [OpenClaude](https://github.com/Gitlawb/openclaude) (${claudePercent}% ${promptCount}-shotted by ${shortModelName}${memSuffix})` // Append trailer lines for squash-merge survival. Only for allowlisted repos // (INTERNAL_MODEL_REPOS) and only in builds with COMMIT_ATTRIBUTION enabled — From 6c0d2622c9aa17424a543d0ac82ae365a9fa1549 Mon Sep 17 00:00:00 2001 From: tunnckoCore <5038030+tunnckoCore@users.noreply.github.com> Date: Wed, 1 Apr 2026 21:46:52 +0300 Subject: [PATCH 2/3] docs: document co-author attribution env var Document OPENCLAUDE_DISABLE_CO_AUTHORED_BY in the README and clarify that it only affects commit trailers. --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 8a0690f9..6b774a94 100644 --- a/README.md +++ b/README.md @@ -187,9 +187,12 @@ export OPENAI_MODEL=gpt-4o | `CODEX_API_KEY` | Codex only | Codex/ChatGPT access token override | | `CODEX_AUTH_JSON_PATH` | Codex only | Path to a Codex CLI `auth.json` file | | `CODEX_HOME` | Codex only | Alternative Codex home directory (`auth.json` will be read from here) | +| `OPENCLAUDE_DISABLE_CO_AUTHORED_BY` | No | Set to `1` to suppress the default `Co-Authored-By` trailer in generated git commit messages | You can also use `ANTHROPIC_MODEL` to override the model name. `OPENAI_MODEL` takes priority. +OpenClaude PR bodies use OpenClaude branding by default. `OPENCLAUDE_DISABLE_CO_AUTHORED_BY` only affects the commit trailer, not PR attribution text. + --- ## Runtime Hardening From 8466fc138e032ad3e919124e41b81df8ed949132 Mon Sep 17 00:00:00 2001 From: tunnckoCore <5038030+tunnckoCore@users.noreply.github.com> Date: Wed, 1 Apr 2026 22:32:32 +0300 Subject: [PATCH 3/3] test: align Codex strict schema expectation Co-Authored-By: Claude Opus 4.6 --- src/services/api/codexShim.test.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/services/api/codexShim.test.ts b/src/services/api/codexShim.test.ts index 6597c0f7..bee8f5ca 100644 --- a/src/services/api/codexShim.test.ts +++ b/src/services/api/codexShim.test.ts @@ -72,7 +72,7 @@ describe('Codex provider config', () => { }) describe('Codex request translation', () => { - test('disables strict mode for tools with optional parameters', () => { + test('normalizes optional parameters into strict Responses schemas', () => { const tools = convertToolsToResponsesTools([ { name: 'Agent', @@ -102,9 +102,10 @@ describe('Codex request translation', () => { prompt: { type: 'string' }, subagent_type: { type: 'string' }, }, - required: ['description', 'prompt'], + required: ['description', 'prompt', 'subagent_type'], additionalProperties: false, }, + strict: true, }, ]) })