Activity Overview

Commits and releases over time

  • Commits
  • Releases
  • Authors

Repository Explorer

14 commits in all time May 03, 2026 15:53 – Aug 01, 2026 15:53 UTC
tasosbit abel
Merge branch 'chore/v3-sdk'
Git Commit 82e92907 Branch main Document 47/14,089 ++ 16,847 --
tasosbit abel
test: remove the frontend Playwright suite
tests/example.spec.ts was AlgoKit template code that never matched this app.
It asserted the page title was "AlgoKit React Template", clicked through
connect-wallet and kmd-connect, and sent a demo payment, none of which exist:
the frontend is a read-only asset table with no wallet integration. It would
have failed immediately had it ever run, and it never did, since no workflow
invoked playwright.

Removes the spec, playwright.config.ts, both playwright dependencies and the
playwright:test script, along with the supporting references in .gitignore and
the recommended VS Code extensions.

Also drops testPathIgnorePatterns and coveragePathIgnorePatterns from
jest.config.ts. Both existed solely to keep jest out of the playwright tests
directory, which no longer exists.

The frontend's jest test step is unaffected and still runs, though it
continues to match no tests.
Git Commit 097693fe Branch main Document 8/18 ++ 183 --
tasosbit abel
docs: correct project documentation
The root, contracts and frontend READMEs still described the generated AlgoKit
template rather than this repository, and the root README's contract
documentation contradicted both the contract source and the SDK READMEs.

Registry API, corrected against contract.py:

  - add_label takes a url, not a first_operator
  - the operator methods are add_operator_to_label / remove_operator_from_label
  - add_label_to_asset and remove_label_from_asset take (label, asset), the
    reverse of what was documented
  - have_assets_label does not exist and is removed
  - change_label, has_label, log_labels, has_operator_label,
    add_label_to_assets and log_assets_labels were undocumented and are added
  - LabelDescriptor is (name, url, num_assets, num_operators)

Asset views: the documented four (Full/Large/Small/Tiny) are replaced with the
eight that exist, with the resource counts the contract and SDK actually use
(128/64/42, contradicting the root README's previous numbers). There is no
log_assets_* method; the plural get_assets_* variant is the logging one.

SDK docs: v3 becomes the default throughout. Both SDK READMEs had an example
calling getAssetsMicro while showing labels, which AssetMicro does not carry,
and printed decimals as a bigint when it is a number; the corrected example is
verified against mainnet. The write example referenced an undefined variable
and awaited a synchronous call. abel-sdk-v2 documents its rename to
abel-v2-sdk and pins its install, since a bare `npm i abel-sdk` now installs
v3.

Also documents the pnpm workspace layout, replaces the CLI README with usage
for all of its scripts, checked against each script's argument handling, and
removes template text describing things this repo does not have: use-wallet
and wallet providers, Tailwind and daisyUI, App.tsx, src/contracts,
HelloWorld, and the Netlify and Vercel deployment instructions. Fixes the dead
links throughout, including several whose targets never existed.
Git Commit d960d515 Branch main Document 6/464 ++ 260 --
tasosbit abel
ci: validate the SDKs and CLI
abel-sdk-v3, abel-sdk-v2 and abel-cli are not AlgoKit projects, so no workflow
referenced them. abel-sdk is the package published to npm and nothing verified
that it even compiled before publishing.

Adds a workflow that typechecks, tests and builds abel-sdk, typechecks and
builds abel-v2-sdk, and typechecks abel-cli, wired into both pull request
validation and release.

Two things worth noting about it. It runs build:esm and build:cjs rather than
`build`, because build's prebuild hook wipes src/generated and regenerates the
contract client from contract.py, which needs algokit and the Python
toolchain; the generated client and the arc32 artifact are both committed, so
compiling from them catches a broken package without pulling Python into this
workflow. It also builds the typedoc output, since typedoc runs with
requiredToBeDocumented and abel-docs.d13.co is published from it, making a
docs failure a real one.

Typechecking abel-cli here is what catches the CLI and the SDK resolving
separate copies of algosdk, which passes in isolation and only fails at
runtime.
Git Commit 4ec4a05c Branch main Document 3/71 ++ 0 --
tasosbit abel
ci: enable the TEAL output stability check
ci-teal-diff rebuilds nothing itself; it checks that the committed
smart_contracts/artifacts match what the build step just produced. The
contracts README already instructs contributors to commit the artifacts so
this check passes, but the step was commented out, so drift could land
unnoticed.

Verified safe to turn on: rebuilding the contracts produces artifacts
byte-identical to the committed ones, so this does not land red.

The comment above the step is replaced too. It was inherited from the AlgoKit
template and described tealer snapshotting, which is not what ci-teal-diff
does.
Git Commit 911f85f6 Branch main Document 1/4 ++ 6 --
tasosbit abel
ci: drop the unimplemented Netlify deploy from frontend release
The job was named "Deploy to Netlify" and gated on the frontend-prod
environment, but no deploy step was ever configured: it installed
dependencies and stopped. Nothing has been published to Netlify, or anywhere
else, despite the naming implying otherwise.

Rather than leave a job that claims to deploy and does not, this renames it to
what it does, builds the frontend, and drops the frontend-prod environment
gate that existed only to hold deploy secrets. Adding a real publish step is a
separate decision that needs a hosting provider and its credentials.
Git Commit cb24f299 Branch main Document 1/5 ++ 4 --
tasosbit abel
ci: install dependencies with pnpm
`algokit project bootstrap all` runs npm install per project, which fights the
pnpm workspace: it would build a competing node_modules and a package-lock.json
alongside the root lockfile.

Each workflow now does a single `pnpm install --frozen-lockfile` at the
repository root, which covers every project in the workspace, and calls
bootstrap only for what it is actually needed for: poetry for the contracts'
Python dependencies, and env for the frontend's .env, whose template is
committed while the .env itself is not.

AlgoKit does offer a `bootstrap pnpm` subcommand, but it installs into the
current working directory, so an explicit root install is more predictable for
a workspace.

Node moves from 18 to 20 to match the contracts package's declared engines, and
pnpm/action-setup reads the pinned version from the root package.json's
packageManager field.
Git Commit a13df4e1 Branch main Document 4/64 ++ 17 --
tasosbit abel
ci: fix broken reusable workflow references
Every `uses:` in release.yaml and validate.yaml pointed at a file with
underscores (asset_labeling-contracts-ci.yaml) while the workflow files on
disk use hyphens (asset-labeling-contracts-ci.yaml). All four references
resolved to nothing, so pull request validation and release have not been
running at all.

The job keys keep their underscored names, which is why the mismatch is easy
to miss by eye: only the file paths were wrong.
Git Commit 841c810e Branch main Document 2/6 ++ 6 --
tasosbit abel
test: cover abel-sdk log parsing and batch chunking
The SDK had no tests, despite a bug having already shipped in exactly this
code path: a0f275d fixed algosdk 3.x reading dynamic head offsets through
`new DataView(bytes.buffer)`, which ignores the array's byteOffset. Simulate
logs arrive as subarray views with a non-zero byteOffset, so every
parseLogsAs path decoded from the wrong position. Nothing guarded against a
regression.

parse-logs.test.ts reconstructs logs the way simulate returns them, as views
at a non-zero byteOffset, and checks decoding across several offsets, batch
ordering, the decimals bigint-to-number coercion, and empty-log deleted
markers staying aligned with their assets. Reverting the .slice() in
parseLogsAs turns 7 of these red, so they guard the real defect rather than
merely passing alongside it.

util.test.ts covers chunk() at each view's actual maximum (128/64/42),
including exactly-at-limit and one-past, plus mergeMapsArr, which reassembles
batched results and would silently drop assets on large lookups if it broke.

Tests run on node:test via tsx, which was already a devDependency, so no test
framework is added. They need no network: the SDK constructor only builds
typed clients from the bundled app spec, and the ABI types are read from that
spec rather than hardcoded.

Also adds typecheck scripts to both SDKs and the CLI for CI to call.
Git Commit 2acdc4e1 Branch main Document 6/312 ++ 1 --
tasosbit abel
chore: convert repo to a pnpm workspace
Replaces ten per-project lockfiles with a single root pnpm-lock.yaml, adds a
root pnpm-workspace.yaml covering projects/*, and drops the stray
pnpm-workspace.yaml that lived under abel-sdk-v3. The npm package-lock.json
files are removed: they were already stale, and leaving npm lockfiles in a
pnpm workspace invites installs that produce a different tree.

abel-sdk-v2 is renamed to abel-v2-sdk. Both SDK lines publish to npm under the
same name (abel-sdk), which a workspace cannot represent, since package names
must be unique. It stays published as abel-sdk v0.x; only the local name
changes.

abel-cli now depends on abel-sdk via workspace:*, moving it to the v3 SDK.
This also fixes a real runtime bug: as separate installs, the CLI and the SDK
each resolved their own copy of algosdk, and js-algorand-sdk v3 uses
`instanceof Address`, so a valid address failed with "Not an address". Sharing
one physical algosdk via the workspace fixes it structurally.

pnpm's strict node_modules layout surfaced three dependencies that were being
supplied by accident through npm's flat tree, each of which broke a command:

  - typescript, in both SDKs, whose build runs tsc (leaked in via typedoc)
  - jest, in the contracts and frontend projects, whose test scripts invoke it
  - prettier, in the frontend, needed by eslint-plugin-prettier

Each is pinned to the version its previous lockfile resolved, so behaviour is
unchanged: jest 30.4.2, contracts tsc 4.9.5, SDK tsc 5.9.3, prettier 3.9.6.
Git Commit f080c79a Branch main Document 18/1,325 ++ 24,478 --
tasosbit abel
chore: minimal client for abel v3 sdk; removes AssetLabelingFactory export from sdk
Git Commit 13c5f167 Branch main Document 5/211 ++ 548 --
tasosbit abel
chore: pnpm
Git Commit 82867e1a Branch main Document 6/11,287 ++ 4 --
tasosbit abel
fix: copy log bytes before ABI decode (algosdk 3.x byteOffset bug)
algosdk 3.x ABITupleType.decode reads dynamic-field head offsets via
new DataView(bytes.buffer).getUint16(i), ignoring the Uint8Array's
byteOffset. Simulate/confirmation logs come back as subarray views with a
non-zero byteOffset, so parseLogsAs decoded from the wrong position and
threw 'dynamic index segment miscalculation: left is greater than right
index' on get_asset_*_labels (and every other parseLogsAs path).

Copy each log to a fresh 0-offset buffer with .slice() before decode.

Bump 3.1.6 -> 3.1.7.
Git Commit a0f275d2 Branch main Document 2/7 ++ 2 --
tasosbit abel
fix: sync-pera.sh kill if data does not exist
Git Commit 1aec4558 Branch main Document 1/1 ++ 1 --