🚧 Review new contributions (high priority)
- There are usually 10-15 open PRs going stale which is inefficient because they require plenty of work to update (when there's conflicts) and sometimes they get duplicated like this and this
🚧 Implement a mono repo structure with lerna
🚧 Finish the aragon start command here which is intended to be more development friendly that aragon run, i.e. doesn't create a new dao every time, uses http rather than ipfs (to have hot/live reload for the frontends, and maybe something similar for the contracts, a watch → compile loop)
👾 Bugfixes, see all here
- gasLimit issue
- gas issue on dao acl grant
- dao new fails with ganache 2.3 (low priority because pinning works alright at the moment)
Note: We should write tests as we fix these to ensure no regressions!
👾 Small features (low hanging fruit)
- remove hard-coded gas price (would be nice to let the user decide how much)
👾 Document new features (dao token commands)
👾 Restructure documentation on hack.aragon to include:
- Quick start / Overview / Introduction
- Guides around specific subjects (e.g.: Publish to different environments, Using a different Ethereum account, Propagating content, etc), similar to this. Maybe also link more in-depth guides such as this
- FAQ section. We have this currently, but it should be it's own section and much more elaborate (If there is a recurring question on #dev-help we will add it there)
-
Types (use Flow or Typescript) because it will allow us to catch more "errors" at compile time, having commands silently fail without noticing (like this) less often. Using Typescript is also great for intellisense support (having auto-completion from IDEs) and refactoring
-
Update truffle to v5
-
We plan to prioritize replace
solidity-coveragein the boilerplates -
Identify contracts like the
MiniMeTokenFactorywhich do not need to be deployed every time, but rather reused, and publish them toaragonpm.eth(just like thedao-kits, we will hardcode an address in aragen like we do with the root ENS) -
Wizard onboarding 🧙♂️
- The goal of this tool will be to help new users create a custom DAO
- "Import" the onboarding of the multisig and democracy kits from the ui client
- Improve UX for installing "core" apps (e.g.: TokenManager, Voting, etc.), because currently is a bit tricky as you have to check what arguments the
initializefunction takes from the app's contract and pass them with--app-init-args, e.g.:dao install [dao-address] voting --app-init-args 0x00000001 600000000000000000 250000000000000000 604800. We should do this, instead of the users, so they can see what are the needed parameters with--helpor--interactive. For exampledao install voting --helpcould returndao install voting [dao-address] [token-address] [support-required] [quorum] [vote-time] - Commands can become interactive (with prompts) using
[yargs-interactive](https://www.npmjs.com/package/yargs-interactive)
Example: To create a new MiniMe token, you would use the
dao token newcommand, which takes the following arguments<token-name> <symbol> [decimal-units] [transfer-enabled], e.g.:dao token new "Aragon Network Token" "ANT" 18 true. Usingdao token new --interactivethough, would output this:
Note: We should be able to do get the initialize function's params from the artifact.json if it's published onto an aragonPM instance.
- Active on the different dev-related aragon.chat channels. We aim to respond within one day and to allocate ~1 hour each day to debug issues like this, help people deploy to testnets, etc.
- Aragen maintenance
- Prioritize this roadmap
- with issues that are blocking users
- with features needed by flock/nest teams
- together with the community, by having this document public and by having a "sprint/milestone" every 2 weeks which people can "influence" during the all devs call or directly in GitHub (aragon-cli#milestones)
As part of the ongoing process we would like to experiment with create new documentation for:
aragonCLI specification
-
It's clear what are the use cases for every command/package
-
Identifying the common building blocks that are reused throughout the CLI commands
(
aclExecHandler.js,execHandler.js,aragonjs-wrapper.js,ipfs.js, etc.)- These should be heavily tested, documented and their relationships simplified as much as possible or at least documented (as they can run very deep, e.g.:
acl grant -> aclExecHandler -> execHandler -> initAragonJS)
- These should be heavily tested, documented and their relationships simplified as much as possible or at least documented (as they can run very deep, e.g.:
-
Prevent the removal of critical features that are heavily dependent on (by distinguishing them from temporary hacks, workarounds, etc.)
-
It's possible to implement the CLI in another language (Go, Rust, etc.) by following this document as opposed to reading the source code of the JS implementation.
-
The intended behavior of certain features is obvious, therefore fixing bugs/refactoring much faster.
The aragon ipfs command consists of the following steps:
- Start IPFS
- If no custom
ipfs.rpcis passed, should use the defaulthttp://localhost:5001- If it's not already running, it should be started
- Should set CORS every time
- If a custom
ipfs.rpcis passed, it should only check CORS, not change it and throw if it's not set up correctly
- If no custom
- Add local files
- Should add local files from
aragen/ipfs-cacheignoringnode_moduledirectories
- Should add local files from
There are a couple of things that are not clear from reading the source code:
-
Should the files from
ipfs-cachebe added to the "remote" node (apmOptions.ipfs.rpc)? What happens if that fails? Should it first check if the files are there and if not throw an error/warning?Currently the CLI will try to connect to
[localhost:5001](http://localhost:5001)even ifapmOptions.ipfs.rpcis provided and has CORS configured, see here -
What is the rationale for
ignore: 'node_modules'? Could this be instead done when generating theipfs-cache?
JavaScript project practices
This document encompasses common, opinionated practices for maintaining JS projects. The goal of this document could be to become an AIP standard (?) (see AIP-1) and serve as a starting point for keeping projects healthy across the Aragon ecosystem:
- Libraries such as
aragon.js,aragonUI, etc. - CLI tools such as
aragonCLI,@pando/cli, etc. - Aragon apps such as
aragon-react-boilerplate,voting,aragon-drive, etc.
-
- Use
ESLint,TSLint,prettierandstandard
- Use
-
Contributing guide & Pull Request practices ✔️
- Squash and rebase
-
Issue templates
-
aragon/aragonalready has some here(ideally they should not differ too much)
-
-
Testing
- Unit testing with
ava✔️- Tests should ran on push with
husky✔️
- Tests should ran on push with
- Code coverage with
coveralls
- Unit testing with
-
CI & CD
- Continuous deployment to NPM using GitHub actions
-
Display better error messages
-
Documentation
- If the docs live in multiple places (e.g. GitHub, hack.aragon.org, etc.), a pull script can be used
- The API Reference often can be generated from JSDoc using a tool like
documentation.js, like in aragonAPI
- Testing
- E2E testing with
sharness - Human-readable stack traces with
sol-trace
- E2E testing with
🚧 In progress
👾 New issues
✔️ Implemented in aragonCLI
