Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
8ab50bc
Initial plan
Copilot Dec 18, 2025
08050fe
Add MsgSetDenomMetaData proto definition and fix protocgen script
Copilot Dec 18, 2025
bfb132c
Add authority to vbank keeper and implement MsgSetDenomMetaData handl…
Copilot Dec 18, 2025
2b2d8b8
Register MsgServer implementation in vbank module
Copilot Dec 18, 2025
65e0e36
Revert protocgen.sh changes - remove conditional cp workaround
Copilot Dec 19, 2025
b4c4a30
chore(cosmos): attempt to work around fs perms
michaelfig Dec 19, 2025
cc1a8b5
Add generated msgs.pb.go from make proto-all
Copilot Dec 19, 2025
3003692
Fix msg_server.go and msg_server_test.go - all vbank tests passing
Copilot Dec 19, 2025
cb589d0
Fix integration test - register actual MsgServer implementation
Copilot Dec 19, 2025
412ab96
Update cosmic-proto with vbank msgs.proto definitions
Copilot Dec 19, 2025
508527f
chore(cosmos): use `cosmos.bank.v1beta1` `DenomUnit` and `Metadata`
michaelfig Dec 19, 2025
2cae73c
fix(vbank): remove local `DenomUnit` and `Metadata`
michaelfig Dec 19, 2025
de01681
Fix tests to use banktypes.Metadata from cosmos SDK
Copilot Dec 19, 2025
4efe719
Run yarn codegen in client-utils and cosmic-proto for vbank msgs
Copilot Dec 20, 2025
292ec56
ci(codegen): report all ungenerated packages, not just one
michaelfig Dec 21, 2025
14106d0
build(codegen): introduce and run top-level `yarn codegen`
michaelfig Jan 14, 2026
7b49b16
test(a3p-integration): `vbank/MsgSetDenomMetaData`
michaelfig Jan 15, 2026
8aa0ec2
build: provide helper `use-devenv.sh`
michaelfig Jan 15, 2026
6405b0c
fixup! build(codegen): introduce and run top-level `yarn codegen`
michaelfig Jan 15, 2026
b8d012f
fix(cosmos): clean `swingset.MsgCoreEval` `amino.name`
michaelfig Jan 15, 2026
f73032f
fixup! build: provide helper `use-devenv.sh`
michaelfig Jan 15, 2026
22d7493
chore(orchestration): `yarn codegen`
michaelfig Jan 16, 2026
be3a0b9
chore: `MetaData` -> `Metadata` where possible
michaelfig Jan 16, 2026
eea44ec
test(cosmos): `SetDenomMetadata` Amino JSON
michaelfig Jan 16, 2026
dd83173
Merge remote-tracking branch 'origin/master' into copilot/expose-bank…
michaelfig Jan 16, 2026
408e0b7
Merge branch 'master' into copilot/expose-bankkeeper-setdenommetadata
michaelfig Jan 20, 2026
840b958
fixup! build(codegen): introduce and run top-level `yarn codegen`
michaelfig Jan 20, 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
2 changes: 1 addition & 1 deletion .github/actions/restore-node/check-git-status.sh
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ ignore_dirty_yarn_lock=$2 || exit $?

# Check for unexpected changes
# Fail if git status detects changes
changes=$(git status --porcelain)
changes=$(git status . --porcelain)

if [ "$ignore_dirty_yarn_lock" = true ]; then
# When integration is requested with a specific Endo branch, ignore changes:
Expand Down
47 changes: 35 additions & 12 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -1,37 +1,60 @@
# Repository Guidelines

per https://agents.md/
per [[https://agents.md/]]

## Project Structure & Module Organization
- Monorepo managed by Yarn workspaces and Lerna Lite. Primary code lives under `packages/*` (e.g., `SwingSet`, `zoe`, `ERTP`, `smart-wallet`).

- Monorepo managed by Yarn workspaces and Lerna Lite. Primary code lives under
`packages/*` (e.g., `SwingSet`, `zoe`, `ERTP`, `smart-wallet`).
- Go components are under `golang/` (e.g., `golang/cosmos`).
- Tests reside per package in `packages/<name>/test/`.
- Utilities, CI and developer tooling scripts are in `scripts/`. Integration assets live in `a3p-integration/` and `multichain-testing/`.
- Utilities, CI and developer tooling scripts are in `scripts/`. Integration
assets live in `a3p-integration/` and `multichain-testing/`.

## Build, Test, and Development Commands
- `corepack enable && yarn install`: Set up the repo with the pinned Yarn version and install dependencies.

- `source scripts/use-devenv.sh`: Ensure the required versions of development
tools are usable in the current shell. This only needs to be run once in each
shell instance, but is harmless to run multiple times.
- `yarn install`: Install or refresh JS package dependencies.
- `yarn codegen`: Regenerate derived source files across the entire repository.
Required when `*.proto` files are changed, or network resources need to be
reprocessed (such as chain registry entries or GraphQL schemata).
- `yarn build`: Build all workspaces (generates kernel bundles where needed).
- `yarn test`: Run unit tests across all packages (AVA).
- `yarn lint` | `yarn lint-fix`: Check or auto-fix lint issues across packages.
- `yarn run -T tsc --noEmit --incremental`: Fast typecheck; do this after changes.
- Watch mode for type errors in active workspaces: run `yarn run -T tsc --noEmit --incremental --watch --preserveWatchOutput` in the workspace(s) being edited, and keep the terminal output visible so Codex can monitor errors.
- `yarn run -T tsc --noEmit --incremental`: Fast typecheck; do this after
changes.
- Watch mode for type errors in active workspaces: run
`yarn run -T tsc --noEmit --incremental --watch --preserveWatchOutput` in
the workspace(s) being edited, and keep the terminal output visible so Codex
can monitor errors.
- `yarn format`: Format code via Prettier; `yarn lint:format` to check only.
- `./scripts/env-doctor.sh`: Verify toolchain (Node, Go, compiler) versions.
- Example, single package: `cd packages/eventual-send && yarn test`.

## Coding Style & Naming Conventions

- ESM by default; JS and TypeScript both used. Target Node ^20.9 or ^22.11.
- Prettier enforced with single quotes; 2-space indentation.
- ESLint configured via `eslint.config.mjs` (includes AVA, TypeScript, JSDoc, and repository-specific rules).
- Package names: publishable packages use `@agoric/*`; private/local packages use `@aglocal/*` (verify with `yarn lint:package-names`).
- ESLint configured via `eslint.config.mjs` (includes AVA, TypeScript, JSDoc,
and repository-specific rules).
- Package names: publishable packages use `@agoric/*`; private/local packages
use `@aglocal/*` (verify with `yarn lint:package-names`).

## Testing Guidelines

- Framework: AVA. Test files follow `**/test/**/*.test.*` within each package.
- Run all: `yarn test`. Per-package: `yarn test` from that package directory.
- Coverage: in a package, run `yarn test:c8` and open `coverage/html/index.html` after `yarn c8 report --reporter=html-spa` if needed.
- Coverage: in a package, run `yarn test:c8` and open `coverage/html/index.html`
after `yarn c8 report --reporter=html-spa` if needed.

## Commit & Pull Request Guidelines
- Use Conventional Commits in titles and commits (e.g., `feat(swingstore): add snapshot…`).

- Use Conventional Commits in titles and commits (e.g.,
`feat(swingstore): add snapshot…`).
- Branches should reference an issue number (e.g., `123-fix-solo-reconnect`).
- PRs: link related issues, describe changes and risks; ensure `yarn build`, `yarn test`, and `yarn lint` pass. Prefer “Squash and merge.”
- Integration tests: use labels `force:integration`/`bypass:integration` when appropriate; otherwise they run as part of the merge queue.
- PRs: link related issues, describe changes and risks; ensure `yarn build`,
`yarn test`, and `yarn lint` pass. Prefer “Squash and merge.”
- Integration tests: use labels `force:integration`/`bypass:integration` when
appropriate; otherwise they run as part of the merge queue.
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
/**
* Test that vbank/MsgSetDenomMetadata is not available before upgrade
*/
import test from 'ava';
import '@endo/init/debug.js';
import { execa } from 'execa';

test('vbank/MsgSetDenomMetadata message type should not exist', async t => {
// Try to create a proposal with the message type
// If the message type doesn't exist, agd will reject it during validation
const proposalPath = '/tmp/test-vbank-setdenommetadata-proposal.json';
const fs = await import('fs/promises');

const proposal = {
messages: [
{
'@type': '/agoric.vbank.MsgSetDenomMetadata',
authority: 'agoric10d07y265gmmuvt4z0w9aw880jnsr700j6z2zm3',
metadata: {
description: 'Test Token',
denom_units: [
{
denom: 'utest',
exponent: 0,
aliases: [],
},
],
base: 'utest',
display: 'utest',
name: 'Test Token',
symbol: 'TEST',
},
},
],
metadata: '',
deposit: '1000000ubld',
title: 'Test vbank SetDenomMetaData (should fail)',
summary:
'This proposal should fail because the message type does not exist yet',
expedited: false,
};

await fs.writeFile(proposalPath, JSON.stringify(proposal, null, 2));

try {
const result = await execa(
'agd',
['tx', 'gov', 'submit-proposal', proposalPath, '--dry-run'],
{ reject: false },
);

t.log('Exit code:', result.exitCode);
t.log('Stdout:', result.stdout);
t.log('Stderr:', result.stderr);

// Should fail with unknown message type or similar error
t.not(result.exitCode, 0, 'Proposal submission should fail');

const output = result.stderr + result.stdout;
const hasExpectedError =
output.includes('unknown') ||
output.includes('not found') ||
output.includes('unrecognized') ||
output.includes('no message handler') ||
output.includes('invalid message');

if (!hasExpectedError) {
t.log('Unexpected output:', output);
}
t.true(hasExpectedError, 'Should fail with message type error');
} finally {
await fs.unlink(proposalPath).catch(() => {});
}
});
Loading
Loading