8834 commits in all time Dec 24, 2025 07:49 – Mar 24, 2026 07:49 UTC
Merge pull request #34 from FoundMarras/main
Implementation of Bet use case in Leo(Aleo) language
Git Commit 26f7b592 Branch main Document 2/216 ++ 0 --
Merge 5ce9a05e0ccf58ca4e14a135f9a87f539b96576e into 5073ca134b7c4c5721fcfbe976d5c364a5cc777a
Git Commit 1df99d35 Branch pull/434/merge Document 5/437 ++ 0 --
feat: add AlgoVoi wallet provider
Add AlgoVoi as a named wallet provider so dApps using use-wallet
can display it in their connect modals alongside Pera, Defly, etc.

AlgoVoi is an Algorand + Voi browser extension wallet that exposes
an ARC-0027 compliant provider at window.algorand. The implementation
calls the injected provider directly (no external SDK dependency).

Changes:
- Add ALGOVOI to WalletId enum
- Create AlgoVoiWallet extending BaseWallet
- Register in createWalletMap and exports
- Add unit tests (connect, disconnect, resumeSession, metadata)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Git Commit 5ce9a05e Branch pull/434/head Document 5/437 ++ 0 --
achidlow puya
feat: add negation-aware comparison numbering to GVN
Recognize that !(a < b) has the same value as (a >= b) by tracking
which VNs were produced by comparison ops.  When GVN processes a !
intrinsic whose operand was a comparison, it returns the inverse
comparison's expression key instead, so the normal hash lookup
naturally matches any existing computation of the inverse.

Inverse pairs: < ↔ >=, > ↔ <=, == ↔ != (and b-prefixed variants).

Double negation (!(!x)) works automatically since !(comparison)
produces an inverse comparison key which is itself tracked.

negated_comparisons test case: 107 → 65 bytes (-39%), 71 → 41 ops (-42%)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Git Commit 2e87ee98 Branch gvn Document 25/965 ++ 1,285 --
achidlow puya
test: add negated_comparisons test case for GVN inverse comparison numbering
Test contract with inline=False subroutines that assert a comparison
and the negation of its inverse (e.g. assert a < b, assert not (a >= b))
for all 6 inverse pairs, for both uint64 and BigUInt types.  The
negated assertions should be eliminated once GVN learns to recognise
!(comparison) as the inverse comparison.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Git Commit acadad19 Branch gvn Document 53/5,624 ++ 0 --
achidlow puya
test: add comparison_swaps test case for GVN ordering-op canonicalization
Test contract with inline=False subroutines that assert both directions
of each ordering comparison (a<b then b>a, a<=b then b>=a) for both
uint64 and BigUInt types. The redundant converse comparisons should be
eliminated once GVN learns to canonicalize swapped predicates.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Git Commit de3daa34 Branch gvn Document 53/4,510 ++ 0 --
achidlow puya
feat: add ordering op canonicalization to GVN
Recognize that a<b and b>a (and <=/>= variants, including bytes
comparisons) are equivalent by canonicalizing operand VNs in the
expression key. When the first operand VN is larger, swap operands
and mirror the predicate (< ↔ >, <= ↔ >=).

This follows the same approach as LLVM GVN and GCC's SCC-VN: sort
operand VNs and adjust the comparison predicate to match.

comparison_swaps test case: 78 → 54 bytes (-31%), 45 → 29 ops (-36%)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Git Commit ea15962b Branch gvn Document 24/88 ++ 441 --
achidlow puya
refactor: simplify GVN replacement chain handling
Replace _resolve_transitive chain resolution with a validation assert.
Both the hash-based pass and SCC pass always replace with VN
representatives, which are never themselves replacement targets, so
chains cannot form. Asserting this invariant (via InternalError) is
safer than silently resolving — a chain would indicate a bug in the
replacement logic.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Git Commit 6dd4314d Branch gvn Document 1/9 ++ 14 --
achidlow puya
fix: improve GVN test coverage to 99%
- Fix phi_congruence test to exercise GVN redundant phi path (lines
  279-288) by using commutative operand order (a|b vs b|a) so the
  frontend keeps them as separate registers but GVN canonicalises them
  to the same VN
- Convert unreachable defensive guards to raise InternalError (arity
  mismatch, replacement cycle, multi-external-VN SCC, missing VN
  representative) — these are excluded from coverage via .coveragerc

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Git Commit 19d60f87 Branch gvn Document 25/279 ++ 277 --
achidlow puya
chore: compile all
Git Commit cb97c706 Branch gvn Document 25/671 ++ 635 --
achidlow puya
make test actually cover the case
Git Commit fb7781d7 Branch gvn Document 1/12 ++ 11 --
achidlow puya
feat: add SCC-based phi congruence analysis to GVN
After hash-based numbering, build a phi dependency graph and find SCCs.
Within each non-trivial SCC, check if all phis have the same set of
external (non-SCC) argument VNs. If so, they're all congruent and can
be merged.

Catches patterns like phi(a,y)/phi(b,x) where a==b that hash-based
GVN misses due to back-edge conservatism.

Adds test_cases/phi_congruence with contracts exercising cross-assignment
loops (SCC size 2), triple rotation cycles (SCC size 3), and a
redundant phi pattern.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Git Commit 4e677f12 Branch gvn Document 54/7,449 ++ 1 --
achidlow puya
feat: add SCC-based phi congruence analysis to GVN
After hash-based numbering, build a phi dependency graph and find SCCs.
Within each non-trivial SCC, check if all phis have the same set of
external (non-SCC) argument VNs. If so, they're all congruent and can
be merged.

Catches patterns like phi(a,y)/phi(b,x) where a==b that hash-based
GVN misses due to back-edge conservatism. No impact on current test
suite (no such patterns exist), but zero-cost when not triggered.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Git Commit 3532607a Branch gvn Document 1/78 ++ 3 --
achidlow puya
chore: disable GVN-PRE pending better insertion heuristics
PRE produces net regressions on current test suite: phi/stack overhead
exceeds savings for the cheap expressions that pass the safety filter.
Also fixes oscillation bugs (infinite optimizer loop from PRE insert
then GVN eliminate cycling).

Infrastructure remains in gvn_pre.py for future work. Key remaining
issues:
- Need heuristics to skip insertions where overhead > benefit
- Need robust no-op detection to prevent optimizer loop oscillation
- Critical edge splitting interacts poorly with the fixed-point loop

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Git Commit 1fc7ac6c Branch gvn Document 2/17 ++ 32 --
Merge 9914847ca3c6be980f8881f7e78950e918c60462 into 6cadd542c5f648d09339e800045abe0d3b56aa67
Git Commit f0457648 Branch pull/812/merge Document 1/1 ++ 1 --
Merge 080e7cd1762b5867e0be350ca24730241114b187 into 6cadd542c5f648d09339e800045abe0d3b56aa67
Git Commit 7122274f Branch pull/811/merge Document 1/1 ++ 1 --
Merge 70c751e57f41177538528600c95f37294c1ad95d into 6cadd542c5f648d09339e800045abe0d3b56aa67
Git Commit de6d6be0 Branch pull/810/merge Document 1/1 ++ 1 --
build(deps-dev): bump typescript from 5.9.3 to 6.0.2
Bumps [typescript](https://github.com/microsoft/TypeScript) from 5.9.3 to 6.0.2.
- [Release notes](https://github.com/microsoft/TypeScript/releases)
- [Commits](https://github.com/microsoft/TypeScript/compare/v5.9.3...v6.0.2)

---
updated-dependencies:
- dependency-name: typescript
  dependency-version: 6.0.2
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Git Commit 9914847c Branch dependabot/npm_and_yarn/typescript-6.0.2 Document 1/1 ++ 1 --
build(deps-dev): update @typescript-eslint/parser requirement
Updates the requirements on [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) to permit the latest version.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.57.2/packages/parser)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/parser"
  dependency-version: 8.57.2
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Git Commit 080e7cd1 Branch dependabot/npm_and_yarn/typescript-eslint/parser-tw-8.57.2 Document 1/1 ++ 1 --
build(deps-dev): update @typescript-eslint/eslint-plugin requirement
Updates the requirements on [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) to permit the latest version.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.57.2/packages/eslint-plugin)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-version: 8.57.2
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Git Commit 70c751e5 Branch dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-tw-8.57.2 Document 1/1 ++ 1 --
achidlow puya
feat: add GVN-PRE infrastructure with recursive materialisation
Add Partial Redundancy Elimination module (gvn_pre.py) integrated into
the GVN pass. Flow: number -> PRE insert -> re-number -> eliminate.

Key components:
- ANTIC_IN/AVAIL_OUT dataflow analysis
- Recursive materialisation: when operands aren't available at the
  insertion point, recursively insert the expressions that produce them
- Dominance-aware leader lookup via idom tree
- Safety filter: only non-trapping ops can be inserted on new paths
- Critical edge splitting before insertion

Refactors GVN to separate _number_values from elimination so PRE can
hook between them.

Currently produces net regressions due to phi/split-block overhead
exceeding savings on cheap single-instruction ops. Needs filtering
to skip expressions where hoisting overhead exceeds the benefit.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Git Commit bf70c287 Branch gvn Document 2/524 ++ 4 --
Merge e86baadcf3b532e0c91829e7710c2bebbc8ba64c into 8a16ee8d13e5d8d1428bdefda1f19815f3b4909e
Git Commit 0cfc7c0b Branch pull/122/merge Document 4/238 ++ 1 --
feat: add arc65 support: loggedErr() and loggedAssert() functions, to log a formatted error string before failing
Git Commit e86baadc Branch feat/logged-errors Document 4/238 ++ 1 --
Merge 154583362f98da0dda2622f53928c6a9384bddbc into 8a16ee8d13e5d8d1428bdefda1f19815f3b4909e
Git Commit 41ace17c Branch pull/122/merge Document 4/238 ++ 1 --