Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
42889fa
docs(collections): add user collections technical specification
Douglasacost Apr 29, 2026
93e660b
chore(spellcheck): allow EXTCODEHASH, autonumber, dedup
Douglasacost Apr 29, 2026
841491a
docs(collections): refine spec with auto-grant, validation, OZ alignment
Douglasacost May 7, 2026
9700f69
feat(collections): scaffold factory, ERC-721/1155 implementations, in…
Douglasacost May 7, 2026
025d6af
test(collections): add unit and integration suites; drop OZ v5 no-op …
Douglasacost May 7, 2026
b93a9a4
chore(collections): deploy and upgrade scripts, ops orchestration, la…
Douglasacost May 7, 2026
1e305a2
docs(collections): design doc for ERC1967Proxy replacement of Clones.…
Douglasacost May 8, 2026
638536c
docs(collections): implementation plan for ERC1967Proxy replacement o…
Douglasacost May 8, 2026
d4e95cc
chore(ops): temp-move L1-incompatible files for collections zksync build
Douglasacost May 8, 2026
8a396c5
test(collections): add CREATE2 derivation test for createCollection72…
Douglasacost May 8, 2026
5845b24
feat(collections): replace Clones.clone() with ERC1967Proxy{salt} in …
Douglasacost May 8, 2026
ca7cd62
feat(collections): replace Clones.clone() with ERC1967Proxy{salt} in …
Douglasacost May 8, 2026
c144929
test(collections): assert Upgraded+Initialized emit order; add immedi…
Douglasacost May 8, 2026
a3649cd
test(collections): switch impl unit-test helpers from Clones to ERC19…
Douglasacost May 8, 2026
bfee509
test(collections): assert impls expose no UUPS upgrade selectors
Douglasacost May 8, 2026
c500afd
test(collections): bytecode-permanence proof for canonical OZ ERC1967…
Douglasacost May 8, 2026
9c2058b
test(collections): integration emit-order and vocabulary updates for …
Douglasacost May 8, 2026
f48ec1c
test(collections): vocabulary pass — clones → collections in factory …
Douglasacost May 8, 2026
b189d26
docs(collections): refit spec for ERC1967Proxy per-collection deploy
Douglasacost May 8, 2026
ff3fa4e
docs(collections): vocab pass for source NatSpec — clones → collections
Douglasacost May 8, 2026
e472de4
ops(collections): gate deploy on populated factoryDependencies
Douglasacost May 8, 2026
fc95ebe
ops(collections): harden factoryDeps gate against malformed jq output
Douglasacost May 8, 2026
f552557
ops(collections): post-broadcast createCollection721 smoke test on zk…
Douglasacost May 8, 2026
d44d737
ops(collections): fix smoke test cast args and operator key resolution
Douglasacost May 8, 2026
af9cca6
ops(collections): fix stale clone references in deploy script header
Douglasacost May 8, 2026
4976cbb
ops(collections): fix CreateParams721 field order in smoke test
Douglasacost May 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 14 additions & 1 deletion .cspell.json
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@
"Reentrancy",
"SFID",
"EXTCODECOPY",
"EXTCODEHASH",
"solady",
"SLOAD",
"Bitmask",
Expand Down Expand Up @@ -101,6 +102,18 @@
"hexlify",
"repoint",
"repointed",
"cutover"
"cutover",
"autonumber",
"dedup",
"runbook",
"selfdestruct",
"SELFDESTRUCT",
"proxiable",
"codehash",
"codehashes",
"immediates",
"newbase",
"newcontract",
"opping"
]
}
40 changes: 38 additions & 2 deletions .github/workflows/checks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ jobs:
run: yarn

- name: Run coverage
run: forge coverage --match-path "test/{Swarm*,ServiceProvider,FleetIdentity}*.t.sol" --ir-minimum --report lcov --report-file coverage.lcov
run: forge coverage --match-path "test/{Swarm*,ServiceProvider,FleetIdentity,collections/*}*.t.sol" --ir-minimum --report lcov --report-file coverage.lcov

- name: Upload coverage report
uses: actions/upload-artifact@v4
Expand All @@ -73,7 +73,7 @@ jobs:
update-comment: true
working-directory: ./

- name: Check line coverage threshold
- name: Check line coverage threshold (swarms)
run: |
# Extract line coverage from lcov report for src/swarms/ contracts only
# Parse lcov format: find swarm file sections and sum their LF/LH values
Expand Down Expand Up @@ -108,6 +108,42 @@ jobs:

echo "Coverage check passed: $COVERAGE% >= $THRESHOLD%"

- name: Check line coverage threshold (collections)
run: |
# Extract line coverage from lcov report for src/collections/ contracts only.
# While src/collections/ is documentation-only, this step skips cleanly with a
# warning. As soon as Solidity sources land, the gate enforces the same 95%
# threshold as swarms.
LINES_FOUND=$(awk '
/^SF:.*src\/collections\// { in_section = 1 }
/^end_of_record/ { in_section = 0 }
in_section && /^LF:/ { sum += substr($0, 4) }
END { print sum+0 }
' coverage.lcov)

LINES_HIT=$(awk '
/^SF:.*src\/collections\// { in_section = 1 }
/^end_of_record/ { in_section = 0 }
in_section && /^LH:/ { sum += substr($0, 4) }
END { print sum+0 }
' coverage.lcov)

if [ "$LINES_FOUND" -eq 0 ]; then
echo "::warning::No Solidity sources found under src/collections/ — coverage gate skipped (will enforce once contracts land)"
exit 0
fi

COVERAGE=$(awk "BEGIN {printf \"%.2f\", ($LINES_HIT / $LINES_FOUND) * 100}")
echo "Collections line coverage: $COVERAGE% ($LINES_HIT / $LINES_FOUND lines)"

THRESHOLD=95
if awk "BEGIN {exit !($COVERAGE < $THRESHOLD)}"; then
echo "Error: Line coverage ($COVERAGE%) is below the required threshold ($THRESHOLD%)"
exit 1
fi

echo "Coverage check passed: $COVERAGE% >= $THRESHOLD%"

Specification-PDF:
runs-on: ubuntu-latest
if: github.event_name == 'pull_request' && github.base_ref == 'main'
Expand Down
Loading
Loading