Skip to content

refactor!: rename ComposableCoW to ComposableCow - #44

Merged
mfw78 merged 1 commit into
developfrom
refactor/rename-composable-cow
Jul 30, 2026
Merged

refactor!: rename ComposableCoW to ComposableCow#44
mfw78 merged 1 commit into
developfrom
refactor/rename-composable-cow

Conversation

@mfw78

@mfw78 mfw78 commented Jul 30, 2026

Copy link
Copy Markdown

Solidity's CapWords convention does not carry branding capitalisation into an identifier, and the registry was the last place the fork still spelled it ComposableCoW. The surrounding code had already moved on: the poller work uses ComposableCowPoller, and TWAP holds a composableCow while ERC1271Forwarder held a composableCoW, which is the same inconsistency in miniature.

Changes:

  • ComposableCoW -> ComposableCow, composableCoW -> composableCow, ComposableCoWLib -> ComposableCowLib, and the *Test contract names
  • 14 file renames: src/ComposableCow.sol, script/deploy_ComposableCow.s.sol, test/ComposableCow.*.t.sol, test/libraries/ComposableCowLib.t.sol
  • the networks.json top-level key
  • prose in README.md, docs/architecture.md, docs/discovery.md
  • .gas-snapshot keys

Left alone deliberately:

  • the CoW Protocol spelling in prose, and vendored upstream identifiers such as GPv2Settlement and CoWSettlement
  • the audit PDFs, which are published artefacts and keep their filenames. Only the link text in the README is updated, so gnosis-ComposableCoWMayJul2023.pdf still resolves
  • broadcast/, which records what was actually deployed under the old name

dev/verify-contracts.sh derives its networks.json lookup key from the contract filename, so renaming the key alongside the file keeps verification working rather than needing a mapping shim.

BREAKING: the contract, its build artefact and the networks.json key are all renamed. The manifest describes a version that is not yet deployed and will be superseded by deployments/networks.json, so no live consumer is affected.

How to test

.gas-snapshot keys were rewritten textually rather than regenerated, on the grounds that a rename cannot change gas. That is verifiable:

forge snapshot && git diff --exit-code .gas-snapshot

Clean: the textual rewrite and a regeneration agree exactly. forge build and forge test are green (74 passing).

Part of #1.

@mfw78
mfw78 force-pushed the refactor/rename-composable-cow branch from 25cfedc to 98596d3 Compare July 30, 2026 04:01
@mfw78
mfw78 force-pushed the chore/author-email-nxm branch from 93d4416 to b373717 Compare July 30, 2026 04:01
@mfw78
mfw78 marked this pull request as ready for review July 30, 2026 06:52
@mfw78
mfw78 force-pushed the refactor/rename-composable-cow branch from 98596d3 to d11ef66 Compare July 30, 2026 06:59
@mfw78
mfw78 force-pushed the chore/author-email-nxm branch from 21d097d to 70314b1 Compare July 30, 2026 07:02
@mfw78
mfw78 force-pushed the refactor/rename-composable-cow branch 2 times, most recently from 38e2912 to 99b52b0 Compare July 30, 2026 07:07
Base automatically changed from chore/author-email-nxm to develop July 30, 2026 07:09
Solidity's CapWords convention does not carry branding capitalisation into an
identifier, and the registry was the last place the fork still spelled it that
way. The surrounding code had already moved on: the poller work uses
`ComposableCowPoller`, and `TWAP` holds a `composableCow` while
`ERC1271Forwarder` held a `composableCoW`, which is the same inconsistency in
miniature.

Renames the contract, its library, the test and script counterparts, the
matching filenames, and the `networks.json` key. The `CoW Protocol` spelling
is retained in prose and in vendored upstream identifiers such as
`GPv2Settlement` and `CoWSettlement`.

The audit PDFs are published artefacts and keep their filenames; only the
link text in the README is updated.

`.gas-snapshot` keys are rewritten in place. A rename cannot change gas, and
the committed snapshot is byte-exact against a fresh `forge snapshot` here, so
the rewrite and a regeneration agree.

BREAKING CHANGE: the contract, its build artefact and the `networks.json` key
are all renamed. The manifest describes a version that is not yet deployed and
will be superseded by `deployments/networks.json`, so no live consumer is
affected.
@mfw78
mfw78 force-pushed the refactor/rename-composable-cow branch from 99b52b0 to e694e29 Compare July 30, 2026 07:09
@mfw78
mfw78 merged commit 680fb40 into develop Jul 30, 2026
@mfw78
mfw78 deleted the refactor/rename-composable-cow branch July 30, 2026 07:12
mfw78 added a commit that referenced this pull request Jul 30, 2026
`test/ComposableCoW.t.sol` was missed by the rename in #44. The pattern used
there matched `test/ComposableCoW.*.t.sol`, which requires a middle segment,
so the one file without one slipped through. Its contents were renamed
correctly, which is why a content search over file bodies did not catch it.

Filename only: the contract inside is already `ComposableCowTest` and nothing
references the path.
mfw78 added a commit that referenced this pull request Jul 30, 2026
`test/ComposableCoW.t.sol` was missed by the rename in #44. The pattern used
there matched `test/ComposableCoW.*.t.sol`, which requires a middle segment,
so the one file without one slipped through. Its contents were renamed
correctly, which is why a content search over file bodies did not catch it.

Filename only: the contract inside is already `ComposableCowTest` and nothing
references the path.
mfw78 added a commit that referenced this pull request Jul 30, 2026
`test/ComposableCoW.t.sol` was missed by the rename in #44. The pattern used
there matched `test/ComposableCoW.*.t.sol`, which requires a middle segment,
so the one file without one slipped through. Its contents were renamed
correctly, which is why a content search over file bodies did not catch it.

Filename only: the contract inside is already `ComposableCowTest` and nothing
references the path.
mfw78 added a commit that referenced this pull request Jul 30, 2026
`test/ComposableCoW.t.sol` was missed by the rename in #44. The pattern used
there matched `test/ComposableCoW.*.t.sol`, which requires a middle segment,
so the one file without one slipped through. Its contents were renamed
correctly, which is why a content search over file bodies did not catch it.

Filename only: the contract inside is already `ComposableCowTest` and nothing
references the path.
mfw78 added a commit that referenced this pull request Jul 30, 2026
`test/ComposableCoW.t.sol` was missed by the rename in #44. The pattern used
there matched `test/ComposableCoW.*.t.sol`, which requires a middle segment,
so the one file without one slipped through. Its contents were renamed
correctly, which is why a content search over file bodies did not catch it.

Filename only: the contract inside is already `ComposableCowTest` and nothing
references the path.
mfw78 added a commit that referenced this pull request Jul 30, 2026
`test/ComposableCoW.t.sol` was missed by the rename in #44. The pattern used
there matched `test/ComposableCoW.*.t.sol`, which requires a middle segment,
so the one file without one slipped through. Its contents were renamed
correctly, which is why a content search over file bodies did not catch it.

Filename only: the contract inside is already `ComposableCowTest` and nothing
references the path.
mfw78 added a commit that referenced this pull request Jul 30, 2026
`test/ComposableCoW.t.sol` was missed by the rename in #44. The pattern used
there matched `test/ComposableCoW.*.t.sol`, which requires a middle segment,
so the one file without one slipped through. Its contents were renamed
correctly, which is why a content search over file bodies did not catch it.

Filename only: the contract inside is already `ComposableCowTest` and nothing
references the path.
mfw78 added a commit that referenced this pull request Jul 30, 2026
`test/ComposableCoW.t.sol` was missed by the rename in #44. The pattern used
there matched `test/ComposableCoW.*.t.sol`, which requires a middle segment,
so the one file without one slipped through. Its contents were renamed
correctly, which is why a content search over file bodies did not catch it.

Filename only: the contract inside is already `ComposableCowTest` and nothing
references the path.
mfw78 added a commit that referenced this pull request Jul 30, 2026
`test/ComposableCoW.t.sol` was missed by the rename in #44. The pattern used
there matched `test/ComposableCoW.*.t.sol`, which requires a middle segment,
so the one file without one slipped through. Its contents were renamed
correctly, which is why a content search over file bodies did not catch it.

Filename only: the contract inside is already `ComposableCowTest` and nothing
references the path.
mfw78 added a commit that referenced this pull request Jul 30, 2026
`test/ComposableCoW.t.sol` was missed by the rename in #44. The pattern used
there matched `test/ComposableCoW.*.t.sol`, which requires a middle segment,
so the one file without one slipped through. Its contents were renamed
correctly, which is why a content search over file bodies did not catch it.

Filename only: the contract inside is already `ComposableCowTest` and nothing
references the path.
mfw78 added a commit that referenced this pull request Jul 30, 2026
`test/ComposableCoW.t.sol` was missed by the rename in #44. The pattern used
there matched `test/ComposableCoW.*.t.sol`, which requires a middle segment,
so the one file without one slipped through. Its contents were renamed
correctly, which is why a content search over file bodies did not catch it.

Filename only: the contract inside is already `ComposableCowTest` and nothing
references the path.
mfw78 added a commit that referenced this pull request Jul 30, 2026
`test/ComposableCoW.t.sol` was missed by the rename in #44. The pattern used
there matched `test/ComposableCoW.*.t.sol`, which requires a middle segment,
so the one file without one slipped through. Its contents were renamed
correctly, which is why a content search over file bodies did not catch it.

Filename only: the contract inside is already `ComposableCowTest` and nothing
references the path.
mfw78 added a commit that referenced this pull request Jul 30, 2026
`test/ComposableCoW.t.sol` was missed by the rename in #44. The pattern used
there matched `test/ComposableCoW.*.t.sol`, which requires a middle segment,
so the one file without one slipped through. Its contents were renamed
correctly, which is why a content search over file bodies did not catch it.

Filename only: the contract inside is already `ComposableCowTest` and nothing
references the path.
mfw78 added a commit that referenced this pull request Jul 31, 2026
`test/ComposableCoW.t.sol` was missed by the rename in #44. The pattern used
there matched `test/ComposableCoW.*.t.sol`, which requires a middle segment,
so the one file without one slipped through. Its contents were renamed
correctly, which is why a content search over file bodies did not catch it.

Filename only: the contract inside is already `ComposableCowTest` and nothing
references the path.
mfw78 added a commit that referenced this pull request Jul 31, 2026
`test/ComposableCoW.t.sol` was missed by the rename in #44. The pattern used
there matched `test/ComposableCoW.*.t.sol`, which requires a middle segment,
so the one file without one slipped through. Its contents were renamed
correctly, which is why a content search over file bodies did not catch it.

Filename only: the contract inside is already `ComposableCowTest` and nothing
references the path.
mfw78 added a commit that referenced this pull request Jul 31, 2026
`test/ComposableCoW.t.sol` was missed by the rename in #44. The pattern used
there matched `test/ComposableCoW.*.t.sol`, which requires a middle segment,
so the one file without one slipped through. Its contents were renamed
correctly, which is why a content search over file bodies did not catch it.

Filename only: the contract inside is already `ComposableCowTest` and nothing
references the path.
mfw78 added a commit that referenced this pull request Jul 31, 2026
`test/ComposableCoW.t.sol` was missed by the rename in #44. The pattern used
there matched `test/ComposableCoW.*.t.sol`, which requires a middle segment,
so the one file without one slipped through. Its contents were renamed
correctly, which is why a content search over file bodies did not catch it.

Filename only: the contract inside is already `ComposableCowTest` and nothing
references the path.
mfw78 added a commit that referenced this pull request Jul 31, 2026
`test/ComposableCoW.t.sol` was missed by the rename in #44. The pattern used
there matched `test/ComposableCoW.*.t.sol`, which requires a middle segment,
so the one file without one slipped through. Its contents were renamed
correctly, which is why a content search over file bodies did not catch it.

Filename only: the contract inside is already `ComposableCowTest` and nothing
references the path.
mfw78 added a commit that referenced this pull request Jul 31, 2026
`test/ComposableCoW.t.sol` was missed by the rename in #44. The pattern used
there matched `test/ComposableCoW.*.t.sol`, which requires a middle segment,
so the one file without one slipped through. Its contents were renamed
correctly, which is why a content search over file bodies did not catch it.

Filename only: the contract inside is already `ComposableCowTest` and nothing
references the path.
mfw78 added a commit that referenced this pull request Jul 31, 2026
`test/ComposableCoW.t.sol` was missed by the rename in #44. The pattern used
there matched `test/ComposableCoW.*.t.sol`, which requires a middle segment,
so the one file without one slipped through. Its contents were renamed
correctly, which is why a content search over file bodies did not catch it.

Filename only: the contract inside is already `ComposableCowTest` and nothing
references the path.
mfw78 added a commit that referenced this pull request Jul 31, 2026
`test/ComposableCoW.t.sol` was missed by the rename in #44. The pattern used
there matched `test/ComposableCoW.*.t.sol`, which requires a middle segment,
so the one file without one slipped through. Its contents were renamed
correctly, which is why a content search over file bodies did not catch it.

Filename only: the contract inside is already `ComposableCowTest` and nothing
references the path.
mfw78 added a commit that referenced this pull request Jul 31, 2026
`test/ComposableCoW.t.sol` was missed by the rename in #44. The pattern used
there matched `test/ComposableCoW.*.t.sol`, which requires a middle segment,
so the one file without one slipped through. Its contents were renamed
correctly, which is why a content search over file bodies did not catch it.

Filename only: the contract inside is already `ComposableCowTest` and nothing
references the path.
mfw78 added a commit that referenced this pull request Jul 31, 2026
`test/ComposableCoW.t.sol` was missed by the rename in #44. The pattern used
there matched `test/ComposableCoW.*.t.sol`, which requires a middle segment,
so the one file without one slipped through. Its contents were renamed
correctly, which is why a content search over file bodies did not catch it.

Filename only: the contract inside is already `ComposableCowTest` and nothing
references the path.
mfw78 added a commit that referenced this pull request Jul 31, 2026
`test/ComposableCoW.t.sol` was missed by the rename in #44. The pattern used
there matched `test/ComposableCoW.*.t.sol`, which requires a middle segment,
so the one file without one slipped through. Its contents were renamed
correctly, which is why a content search over file bodies did not catch it.

Filename only: the contract inside is already `ComposableCowTest` and nothing
references the path.
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.

1 participant