Activity Overview
Commits and releases over time
- Commits
- Releases
- Authors
Repository Explorer
No repositories match that filter.
14 commits in all time
May 03, 2026 14:57 – Aug 01, 2026 14:57 UTC
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.
097693fe
main
8/18 ++ 183 --
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.
d960d515
main
6/464 ++ 260 --
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.
4ec4a05c
main
3/71 ++ 0 --
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.
911f85f6
main
1/4 ++ 6 --
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.
cb24f299
main
1/5 ++ 4 --
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.
a13df4e1
main
4/64 ++ 17 --
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.
841c810e
main
2/6 ++ 6 --
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.
2acdc4e1
main
6/312 ++ 1 --
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.
f080c79a
main
18/1,325 ++ 24,478 --
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.
a0f275d2
main
2/7 ++ 2 --