Epitaxy
language server protocol would be nice…
Epitaxy is a single transferable voting system for versioned documents on a distributed hash table.
It uses Kademlia DHT to store lookups of peers and content
documents and their changes are encoded using conflict-free replicated data types.
users write updates to proposals that reference their last version as a parent hash, but are full documents.
users may delegate portions of a document to be the vote or construction of a user they delegate. This web of trust is searched via djastra’s algorithm to find a document version the user endorses. Otherwise, they manually vote using ranked choice.
elections are solved internally by the user whenever they want to know the result - they select a document containing a list of peers they accept and run the calculation.
- could just publish on fediverse and solve the problem that way.
epitaxy includes a simple templating language:
## User Bios
{% for user in group:groupid %}
- {% delegate user:userid %}
{% end %}
## Finance
{% issue:issueid %}
{{ .Proposal:issueid }}
- {{ .Delegate {{.Group groupid }} }}
- {{ .Meek {{.Group groupid}}, {{.User userid}}}
{% end %}
{% proposal}
- keys
- group (list of users)
- user (user ID)
- issue (template, something to submit proposals/votes for)
- proposal (template, may contain issues)
- commands
- delegate (user/group)
- STV (grouplist)
{{range $key, $val := .Group.groupid}}
{{end}}
--- // yaml frontmatter of keyed votes
comments: "user comments here"
issue1:{{ .Delegate groupid }} // list of users
issue2:{{ .Delegate userid }} // single user
issue3:{0:proposal,1:proposal,2:proposal} //manual choices
issue4:{0:proposal,2:{{.Delegate userid}},} //delegate a vote
{{ .Meek groupid 2 }} //returns the two proposals by users in the groupid referencing this template with the most votes
somehow have logic that you want multiple issues to succeed with your first choice in a package (and, or) - include the transition discussion as a separate proposal
| .Require proposal | // dependency
| .Forbid proposal | // negative dependency
allow lists to contain lists (they’re lists of links to links to links until you reach users)
{{ issue1 }}
{{ issue2 }}
{{ issue3 }}
user interface tooltips / langserver:
- register .mdvote
- .Delegate quick lookup
- .Require quick lookup
- .Forbid quick lookup
- cache all known
cache file:
users:
- hash:
nickname
groups:
- hash:
nickname
users:
- user
issues:
- hash:
nickname
author: author
parent: issue
markdown: markdown
forks:
- issue: user # could be the same user
- issue: user
proposals:
- hash:
nickname
issue: issue
parent: proposal
author: author
frontmatter: frontmatter
forks:
- proposal: user # could be the same user
immutable folder structure:
.epitaxy/{users,groups,issues,proposals}.yaml
.epitaxy/users/:user:/:content hashes:
.epitaxy/groups/:group:/:content hashes:
.epitaxy/issues/:issue:/:content hashes:
.epitaxy/proposals/:proposal:/:content hashes:
editor folder structure:
//.epitaxy.yaml
key: hashvalue
editor documents outside the immutable structure show to the user as their nicknames, but inside it are saved as their hashes.
allows passing through a user’s plaintext alias and then later compiling to the immutable one with a comment
transition proposals included but revolutionary change is allowed, by voting on end state and transition proposals separately
could use very simple cloudflare workers packages
computed data is placed in the results/ folder
- kademlia IPs
- kademlia content