Skip to content

docs(packs): list the Vauban Pack - #1292

Merged
aaronjmars merged 2 commits into
aeonfun:mainfrom
vaubandev:docs/vauban-pack
Oct 29, 2026
Merged

aaronjmars merged 2 commits into
aeonfun:mainfrom
vaubandev:docs/vauban-pack

Conversation

@vaubandev

@vaubandev vaubandev commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor

What

Lists the Vauban Pack (vaubandev/vauban, --path aeon) in catalog/skill-packs.json and the Listed packs table.

Why

Aeon's on-chain skills report what happened on a chain. None of them reads the policy a vault enforces on the agent spending from it. vauban-vault reads one Vauban vault on Robinhood Chain (4663): owner, agent, freeze, revision, allowlist, caps left this hour and UTC day, and moves held at the gate. watch:0xVAULT reports only what changed since the last run.

Keyless and read-only. It never signs or broadcasts and needs no secret. Before trusting an address it hashes the runtime code and compares it with the pinned build hash, so any other contract is reported as "not a Vauban vault" and nothing more is read from it.

A reference vault is live so the skill can be tried at once:

bin/install-skill-pack vaubandev/vauban --path aeon
node skills/vauban-vault/status.mjs 0xf9322f1546de5a121cdc09522e70af79e30e4097

It is empty on purpose. The contract is not audited, and the pack README and every report say so.

Type of change

  • Community skill pack listing

Community skill pack listing

  • Pack repo is public with a clear license (MIT)
  • Pack has a skills-pack.json manifest at its root (aeon/) and a SKILL.md per skill
  • Write / onchain / bet skills are default_enabled: false (the one skill is read-only and still ships disabled)
  • This PR adds both a row in the Listed packs table of docs/community-skill-packs.md and a matching skill-packs.json entry
  • node scripts/validate-skill-packs.mjs passes (15 packs conform and match the table)
  • No monkey-patching of Aeon internals; no private or auth-walled endpoints required to run

Checked on a fresh checkout of main

  • scripts/validate-pack.sh <pack> --path aeon: valid, 0 warnings
  • bin/install-skill-pack vaubandev/vauban --path aeon: security scan passed, added to aeon.yml as enabled: false
  • status.mjs against the reference vault: full sheet read at the current block
  • status.mjs against 0x…0001: VAUBAN_STATUS_NOT_VAUBAN, exit 4
  • watch.mjs --watch <vault> twice: VAUBAN QUIET both runs, bookmark written to memory/state/
  • node --test aeon/test/vault.test.mjs in the pack: 7/7, no network

View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.

@Svector-anu Svector-anu left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

checked the diff: it only touches catalog/skill-packs.json and docs/community-skill-packs.md. the json parses at the head commit. vaubandev/vauban exists, is public and is MIT.

approving the listing only. i did not verify the pack's runtime claims (keyless, read-only, never signs), so those rest on the pack's own repo.

@aaronjmars
aaronjmars merged commit a69404c into aeonfun:main Oct 29, 2026
1 check passed

@Svector-anu Svector-anu left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

correcting my approval. the listing itself is fine, but the pack's watch command has a bug that breaks it.

aeon/skills/vauban-vault/watch.mjs:34 calls word(log.data, 0) on every event in the topic list. TOPIC.revised (watch.mjs:10) is PolicyRevised, whose indexed argument leaves log.data as "0x" (contracts/src/VaubanVault.sol:65, 322-323). vault.mjs:33 then does BigInt("0x"), which throws. watch.mjs:73-74 turns that into VAUBAN_WATCH_RPC_DOWN and the bookmark at watch.mjs:77 never advances, so any owner policy change wedges watch on every later run.

this was found by reading the code, not by running it, so please confirm with a local run before you fix it. also: SKILL.md:50 gives memory/state/vauban-vault.json but the code default is memory/state/vauban-watch.json (watch.mjs:53).

requesting changes until watch handles PolicyRevised. the keyless, read-only and chain-id claims checked out.

@vaubandev

Copy link
Copy Markdown
Contributor Author

Thanks, you were right on both counts. Confirmed locally before fixing:

classify({ topics: [PolicyRevised, 0x…07], data: "0x" })
-> THROWS: Cannot convert 0x to a BigInt

Fixed in vaubandev/vauban@15cfac5:

  • watch.mjs reads the indexed revision from topics[1] instead of data.
  • A log the skill cannot decode now becomes one report line instead of throwing, so a single bad log can no longer turn into VAUBAN_WATCH_RPC_DOWN and freeze the bookmark.
  • The default state path is now memory/state/vauban-vault.json, matching SKILL.md.
  • Two regression tests: the revision is read from its topic, and every event the watch subscribes to decodes with the log shape the contract really emits. 9/9 pass.

Checked against real logs, not only hand-built ones: deployed the demo vault on a local anvil (one allowlist entry and one limit, so two PolicyRevised logs with data: "0x") and ran changesSince over them:

… listed 0x71c9…292e 0xa6f2ae3a
… revision 1
… limits set for 0x0000…0000
… revision 2
… passed 0x71c9…292e selector 0xa6f2ae3a value 40000000000000000
… passed 0x71c9…292e selector 0xa6f2ae3a value 30000000000000000
… held 80000000000000000 for 0x71c9…292e until 2026-10-30T13:18:32.000Z

The same run on the previous commit crashes.

The fix lives in the pack repo, so this PR's diff does not change. install-skill-pack pulls main, so new installs get it right away.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants