Repository navigation
IBIS
Dan Connolly edited this page Jul 19, 2026
·
1 revision
The Information Based Issue System (IBIS) is an approach for asynchronously developing solutions to issues, and retaining institutional knowledge about those resolutions so that they can evolve over time.
The format uses an outline, with initial characters to indicate whether a given paragraph is an issue, a position on an issue, an argument for or against a position, etc.
| Symbol | Meaning |
|---|---|
| ? | An issue to be considered |
| ?! | A resolved issue |
| ?~ | A tentatively resolved issue or an issue that is still open but that has a fallback position |
| : | A position (on an issue). Multiple positions on the same issue are not necessarily mutually exclusive |
| :+ | An accepted position |
| :- | A rejected position |
| :~+ | A position that is tentatively accepted or that is a fallback position for an issue |
| + | A pro: an argument in favor of a position |
| - | A con: an argument against a position |
| ! | A to-do for an element |
| . | A comment for an element |
- Issues can be nested. This is typically used for discussing some portion of the outer issue separately. Positions for sub-issues should be nested under them.
- Positions can be nested. The sub-position represents a refinement that assumes the outer position is accepted. Arguments for the sub-position should be nested under it.
- Arguments for a position are always positive or negative with respect to their containing issue. Thus, a positive argument nested underneath a negative argument is typically a mitigation of the negative argument (e.g., here's why that negative argument isn't so bad).
- The ?~ and :~+ notations are primarily to support establishing fallbacks. Fallback solutions to design issues enable agreement on a minimum bar, while leaving an issue open for further discussion. Often, an initial fallback will be the status quo, and the design discussion is to find and consider better alternatives. Note that it will remain easier to achieve consensus on fallback positions if the fact that a position is a fallback does not preclude consideration of other options.
- Issue (?) — Describe the issue in a complete sentence. The description should be phrased to support multiple overlapping positions rather than e.g., non-overlapping answers such as “yes” and “no”. Thus, “? what tools should we provide for enterprise developers?” rather than “? should we support VSCode?”
- Position (:) — Describe a potential solution, partial solution, or other statement to be considered to address the issue. Description should be complete sentences. Positions can overlap or conflict. They can be refined with further sub-positions underneath, and so need not capture all the ramifications. E.g., “: support VSCode” could have subpositions “: provide a VSCode add-on” and “: write config doc for VSCode”
- Issues can really only be resolved if some position has been accepted. Not all positions need to be accept/rejected however.
- For editors, it may be important to suppress auto-bulleting when you start a line with “-” or “.”.
- ? How should we test our software?
2. : use a test runner of some form
3. : build a QA department
4. :~ use tape- + it's what we currently use
- + it's very simple
- + we almost have a SES version of it
- + it works in numerous environments
- - it's not very expressive
- - it doesn't have code coverage
-
: use Jest
- + lots of people like it
- - guess-my-syntax DSL for expressing assertions
- + you can separate the assertion choice from the framework
- + can do integration and unit tests very well
- !jf can it do them better than tape?
- + It supports parallel test execution
- + It introduces new intrinsics for every file
- . Its real value is the test runner
-
: roll our own test runner
- : make them importable ESM
- . then we can run them in XS
- + could be simpler than tape
- + could be compatible with the Jest runner
- - requires implementation and maintenance
- : make them importable ESM
- : for whichever runner we choose, create in-SES and in-Jessie versions to simplify tests
-
:+ use test262
- + required for JS standards testing
- - clunky for other uses
- + required for JS standards testing
- . there are actually three separate choices: test-runner, test environment, and assertion library
- ? What assertion library should we use?
- ? What test runner should we use?
-
? what test environments should we support
- : SES
- : Jessie
- : NodeJS
- : in-browser
- : XS
Navigation
- Home
- Governance
- Endo / object capabilities
- Retrospectives and source material