|
|
|
Copy the flowchart below into <https://mermaid-js.github.io/mermaid-live-editor>
|
|
|
|
in order to export SVG files.
|
|
|
|
|
|
|
|
Note that the subgraphs are rendered in reverse order, the last subgraph in the file appears at the top.
|
|
|
|
|
|
|
|
```mermaid
|
|
|
|
flowchart LR
|
|
|
|
|
|
|
|
classDef devel color:#000,fill:#ffd,stroke:#000,stroke-width:4px;
|
|
|
|
classDef misc color:#000,fill:#ccf,stroke:#000,stroke-width:4px;
|
|
|
|
|
|
|
|
classDef default color:#000,fill:#fff,stroke:#000,stroke-width:2px;
|
|
|
|
classDef done color:#000,fill:#6e0,stroke:#000,stroke-width:2px;
|
|
|
|
classDef prog color:#000,fill:#fd0,stroke:#000,stroke-width:2px;
|
|
|
|
|
|
|
|
linkStyle default stroke:#000,stroke-width:2px;
|
|
|
|
|
|
|
|
funding:::misc
|
|
|
|
subgraph funding [Funding]
|
|
|
|
f1(Acquire funding for further<br>development and maintenance)
|
|
|
|
f1:::prog
|
|
|
|
f1 --> f2
|
|
|
|
f2(Write proposal<br>for some program)
|
|
|
|
f2:::done
|
|
|
|
f2 --> f3
|
|
|
|
f3(Identify promising<br>funding opportunities)
|
|
|
|
f3:::done
|
|
|
|
end
|
|
|
|
|
|
|
|
docs:::misc
|
|
|
|
subgraph docs [Documentation]
|
|
|
|
doc1(All our work<br>is nicely documented)
|
|
|
|
doc1:::prog
|
|
|
|
doc1 --> doc2 & doc3
|
|
|
|
doc2(We have published<br>installation instructions<br>for all platforms)
|
|
|
|
doc2:::done
|
|
|
|
doc3(There is a section<br>on the website<br>with screenshots<br>demonstrating the app)
|
|
|
|
doc3:::prog
|
|
|
|
end
|
|
|
|
|
|
|
|
distribution:::misc
|
|
|
|
subgraph distribution [Distribution]
|
|
|
|
dist1(Distribution to all<br>desired Operating Systems)
|
|
|
|
dist1:::prog
|
|
|
|
dist1 --> dist2 & dist3 & dist4 & dist5
|
|
|
|
dist2(Distribution to<br>Windows is working)
|
|
|
|
dist2:::prog
|
|
|
|
dist2 --> dist21 & dist22
|
|
|
|
dist21(Building MSI files<br>works)
|
|
|
|
dist21:::prog
|
|
|
|
dist22(MSI file is<br>published on server)
|
|
|
|
dist22 --> dist21
|
|
|
|
dist3(Distribution to<br>arbitrary Linux<br>distros<br>is working)
|
|
|
|
dist3:::done
|
|
|
|
dist3 --> dist31 & dist32 & dist33
|
|
|
|
dist31(Building flatpak packages works)
|
|
|
|
dist31:::done
|
|
|
|
dist32(flatpak packages<br> are available via<br>central package<br>distribution)
|
|
|
|
dist32:::done
|
|
|
|
dist33(.jar files<br> are available<br>for download)
|
|
|
|
dist33:::done
|
|
|
|
dist32 --> dist31
|
|
|
|
dist4(Distribution to<br>Debian<br>is working)
|
|
|
|
dist4:::prog
|
|
|
|
dist4 --> dist41 & dist42 & dist43
|
|
|
|
dist41(Building Debian<br>packages works)
|
|
|
|
dist41:::done
|
|
|
|
dist42(Debian packages<br>are available in<br>official repos<br>a.k.a. 'apt install briar')
|
|
|
|
dist43(Debian packages<br>are available in<br>own repo)
|
|
|
|
dist42 --> dist41
|
|
|
|
dist5(Distribution to<br>macOS is working)
|
|
|
|
dist5:::prog
|
|
|
|
dist5 --> dist51 & dist52
|
|
|
|
dist51(Building DMG<br>files works)
|
|
|
|
dist51:::prog
|
|
|
|
dist52(.dmg file is<br>published on server)
|
|
|
|
dist52 --> dist51
|
|
|
|
dist6(Installation instructions<br>published)
|
|
|
|
dist6:::prog
|
|
|
|
dist6 --> dist2 & dist3 & dist4 & dist5
|
|
|
|
end
|
|
|
|
|
|
|
|
access:::misc
|
|
|
|
subgraph access [Accessibility]
|
|
|
|
access1(app is accessible to everyone)
|
|
|
|
access1-->access11
|
|
|
|
access11(accessible to visual impaired)
|
|
|
|
access11-->access111 & access112
|
|
|
|
access111(sufficient contrast)
|
|
|
|
access112(support for<br>screen readers)
|
|
|
|
end
|
|
|
|
|
|
|
|
translating:::misc
|
|
|
|
subgraph translating [Translating]
|
|
|
|
translating1(Briar's translation workflow works as expected)
|
|
|
|
translating1:::done
|
|
|
|
translating1-->translating11 & translating12 & translating13
|
|
|
|
translating11(all strings are translatable)
|
|
|
|
translating11:::done
|
|
|
|
translating12(translations get synchronized with Transifex)
|
|
|
|
translating12:::done
|
|
|
|
translating12-->translating121 & translating122 & translating123
|
|
|
|
translating121(uploading source works)
|
|
|
|
translating121:::done
|
|
|
|
translating122(downloading translations works)
|
|
|
|
translating122:::done
|
|
|
|
translating123(fetching translations works)
|
|
|
|
translating123:::done
|
|
|
|
translating13(appropriate context is given)
|
|
|
|
translating13-->translating131 & translating132
|
|
|
|
translating13:::done
|
|
|
|
translating131(descriptive strings)
|
|
|
|
translating131:::done
|
|
|
|
translating132(screenshots)
|
|
|
|
translating132:::done
|
|
|
|
end
|
|
|
|
|
|
|
|
testing:::misc
|
|
|
|
subgraph testing [Testing]
|
|
|
|
testing1(test database<br>is available)
|
|
|
|
testing1:::done
|
|
|
|
testing2(integration tests)
|
|
|
|
testing3(unit tests)
|
|
|
|
testing3:::prog
|
|
|
|
testing4(special test mode)
|
|
|
|
testing4:::done
|
|
|
|
testing4 --> testing41
|
|
|
|
testing41(ability to add<br>testing contacts)
|
|
|
|
testing41:::done
|
|
|
|
testing5(ability to run<br>multiple clients<br>at the same time<br>on a single machine)
|
|
|
|
testing5:::done
|
|
|
|
testing5 --> testing51
|
|
|
|
testing51(Tor port can<br>be specified as<br>command line option)
|
|
|
|
testing51:::done
|
|
|
|
end
|
|
|
|
|
|
|
|
sdm:::devel
|
|
|
|
subgraph sdm [disappearing messages]
|
|
|
|
sdm1(disappearing messages work in private chats)
|
|
|
|
sdm1-->sdm2 & sdm3 & sdm4
|
|
|
|
sdm2(user can manage<br>disappearing messages<br>settings)
|
|
|
|
sdm3(chat recognizes<br>and properly displays<br>disappearing messages<br>settings configured<br>by contact)
|
|
|
|
sdm4(chat properly<br>displays disappearing<br>messages as such)
|
|
|
|
sdm4("special bubbles"<br>appear in chat<br>history to visualize<br>which messages are<br>going to disappear)
|
|
|
|
end
|
|
|
|
|
|
|
|
fob:::devel
|
|
|
|
subgraph fob [forums part 2]
|
|
|
|
fob1(forums work<br>as expected)
|
|
|
|
fob1-->fo3 & fo7 & fo2
|
|
|
|
fo3(user can<br>receive forum messages)
|
|
|
|
fo2(user can<br>send forum messages)
|
|
|
|
fo7(user gets informed<br>about new messages)
|
|
|
|
fo7-->fo71 & fo72 & fo73
|
|
|
|
fo71(notifications)
|
|
|
|
fo72(visual indication<br>in chat history)
|
|
|
|
fo73(visual indication<br>in contact list)
|
|
|
|
end
|
|
|
|
|
|
|
|
fo:::devel
|
|
|
|
subgraph fo [forums part 1]
|
|
|
|
fo1(forums work<br>as expected)
|
|
|
|
fo1-->fo5
|
|
|
|
fo5(user can manage<br>sharing status)
|
|
|
|
fo5-->fo51 & fo52 & fo53 & fo54 & fo55 & fo56 & fo57
|
|
|
|
fo51(user gets notified<br>about new forum<br>invitations)
|
|
|
|
fo52(user can see<br>pending forum<br>invitations)
|
|
|
|
fo53(user can<br>accept forum invitations)
|
|
|
|
fo54(user can<br>decline forum invitations)
|
|
|
|
fo55(user can<br>leave a forum)
|
|
|
|
fo56(user can offer<br>to share a forum)
|
|
|
|
fo57(user can revoke<br>pending forum<br>invitations)
|
|
|
|
end
|
|
|
|
|
|
|
|
gcb:::devel
|
|
|
|
subgraph gcb [private groups part 2]
|
|
|
|
gcb1(private groups work<br>as expected)
|
|
|
|
gcb1-->gc3 & gc4 & gc2 & gc6 & gc7
|
|
|
|
gc3(user can<br>receive group messages)
|
|
|
|
gc4(owner can manage<br>group members)
|
|
|
|
gc4-->gc41 & gc42 & gc43
|
|
|
|
gc41(owner can<br>invite users to group)
|
|
|
|
gc42(owner can see<br>pending group<br>invitations)
|
|
|
|
gc43(owner can revoke<br>pending group<br>invitations)
|
|
|
|
gc2(user can<br>send group messages)
|
|
|
|
gc6(user can<br>reveal contacts)
|
|
|
|
gc7(user gets informed<br>about new messages)
|
|
|
|
gc7-->gc71 & gc72 & gc73
|
|
|
|
gc71(notifications)
|
|
|
|
gc72(visual indication<br>in chat history)
|
|
|
|
gc73(visual indication<br>in contact list)
|
|
|
|
end
|
|
|
|
|
|
|
|
gc:::devel
|
|
|
|
subgraph gc [private groups part 1]
|
|
|
|
gc1(private groups work<br>as expected)
|
|
|
|
gc1-->gc5
|
|
|
|
gc5(user can manage<br>group membership)
|
|
|
|
gc5-->gc51 & gc52 & gc53 & gc54 & gc55
|
|
|
|
gc51(user gets notified<br>about new group<br>invitations)
|
|
|
|
gc52(user can see<br>pending group<br>invitations)
|
|
|
|
gc53(user can<br>accept group invitations)
|
|
|
|
gc54(user can<br>decline group invitations)
|
|
|
|
gc55(user can<br>leave a group)
|
|
|
|
end
|
|
|
|
|
|
|
|
mp:::devel
|
|
|
|
subgraph mp [multiplatform setup]
|
|
|
|
mp1(app is able<br>to run on all target<br>platforms)
|
|
|
|
mp1:::prog
|
|
|
|
mp2(Tor is available<br>for all target<br>platforms)
|
|
|
|
mp2:::prog
|
|
|
|
mp1 --> mp2
|
|
|
|
mp2 --> mp21 & mp22 & mp23
|
|
|
|
mp21(Linux)
|
|
|
|
mp21:::done
|
|
|
|
mp21-->mp211 & mp212 & mp213
|
|
|
|
mp211(x86)
|
|
|
|
mp211:::done
|
|
|
|
mp212(aarch64)
|
|
|
|
mp212:::done
|
|
|
|
mp213(armhf)
|
|
|
|
mp213:::done
|
|
|
|
mp22(Windows)
|
|
|
|
mp22:::prog
|
|
|
|
mp23(macOS)
|
|
|
|
mp23:::prog
|
|
|
|
mp23-->mp231 & mp232
|
|
|
|
mp231(x86)
|
|
|
|
mp231:::prog
|
|
|
|
mp232(m1)
|
|
|
|
mp232:::prog
|
|
|
|
end
|
|
|
|
|
|
|
|
pc:::devel
|
|
|
|
subgraph pc [private chats]
|
|
|
|
pc1(private chats work<br>as expected)
|
|
|
|
pc1:::prog
|
|
|
|
pc1-->pc2 & pc3 & pc4 & pc5 & pc6 & pc7 & pc8
|
|
|
|
pc2(basic chat history<br>gets displayed and<br>updated properly)
|
|
|
|
pc2:::done
|
|
|
|
pc3(user can<br>receive messages)
|
|
|
|
pc3:::done
|
|
|
|
pc4(user can<br>send messages)
|
|
|
|
pc4:::done
|
|
|
|
pc5(user can<br>delete messages<br>on their device)
|
|
|
|
pc5-->pc51 & pc52
|
|
|
|
pc5:::done
|
|
|
|
pc51(user can delete all messages)
|
|
|
|
pc51:::done
|
|
|
|
pc52(user can delete a single message)
|
|
|
|
pc52:::done
|
|
|
|
pc6(user can<br>receive image<br>attachments)
|
|
|
|
pc6:::done
|
|
|
|
pc7(user can<br>send image<br>attachments)
|
|
|
|
pc7:::done
|
|
|
|
pc8(user gets informed<br>about new messages)
|
|
|
|
pc8:::prog
|
|
|
|
pc8-->pc81 & pc82 & pc83
|
|
|
|
pc81(notifications)
|
|
|
|
pc82(visual indication<br>in chat history)
|
|
|
|
pc82:::done
|
|
|
|
pc83(visual indication<br>in contact list)
|
|
|
|
pc83:::done
|
|
|
|
end
|
|
|
|
|
|
|
|
mcb:::devel
|
|
|
|
subgraph mcb [managing contacts part 2]
|
|
|
|
mcb0(managing contacts works)
|
|
|
|
mcb0:::done
|
|
|
|
mcb0 --> mc8 & mc11 & mc7
|
|
|
|
mc7(introducing contacts works)
|
|
|
|
mc7:::done
|
|
|
|
mc7 --> mc71 & mc72 & mc73 & mc74 & mc75
|
|
|
|
mc71("user can introduce<br>contact (introducee)<br>to other contacts")
|
|
|
|
mc71:::done
|
|
|
|
mc72(introducee can<br>accept/decline<br>introduction)
|
|
|
|
mc72:::done
|
|
|
|
mc73(contact can<br>accept/decline<br>introduction)
|
|
|
|
mc73:::done
|
|
|
|
mc74(successful introduction<br>works as expected)
|
|
|
|
mc74:::done
|
|
|
|
mc75(failed introduction<br>works as expected)
|
|
|
|
mc75:::done
|
|
|
|
mc8(user can delete contact)
|
|
|
|
mc8:::done
|
|
|
|
mc11(contact's alias can be changed)
|
|
|
|
mc11:::done
|
|
|
|
end
|
|
|
|
|
|
|
|
mc:::devel
|
|
|
|
subgraph mc [managing contacts part 1]
|
|
|
|
mc0(managing contacts works)
|
|
|
|
mc0:::prog
|
|
|
|
mc0 --> mc2 & mc1 & mc3
|
|
|
|
mc1(contact list<br>displays existing contacts)
|
|
|
|
mc1:::done
|
|
|
|
mc2:::prog
|
|
|
|
mc2(user gets informed<br>about new contacts)
|
|
|
|
mc2-->mc21 & mc22
|
|
|
|
mc21:::done
|
|
|
|
mc21(newly added contacts<br>appear in contact list)
|
|
|
|
mc22(notifications are shown)
|
|
|
|
mc3(user can add<br>other contacts remotely)
|
|
|
|
mc3:::prog
|
|
|
|
mc3-->mc4 & mc5 & mc6 & mc9
|
|
|
|
mc4(entering remote<br>briar link works)
|
|
|
|
mc4:::done
|
|
|
|
mc5(user can copy<br>their own remote<br>briar link)
|
|
|
|
mc5:::done
|
|
|
|
mc9(errors and potential<br>attacks while adding<br>contacts are handled)
|
|
|
|
mc9:::done
|
|
|
|
mc6(pending contacts<br>are displayed<br>somewhere)
|
|
|
|
mc6:::prog
|
|
|
|
mc6-->mc10
|
|
|
|
mc10(timeout/other errors are handled)
|
|
|
|
end
|
|
|
|
|
|
|
|
gs:::devel
|
|
|
|
subgraph gs [general setup]
|
|
|
|
gs1(app lifecycle<br>is working)
|
|
|
|
gs1:::done
|
|
|
|
gs1 --> gs2 & gs3 & gs4 & gs5
|
|
|
|
gs2(user can run<br>the application)
|
|
|
|
gs2:::done
|
|
|
|
gs3(user can login<br>to existing account)
|
|
|
|
gs3:::done
|
|
|
|
gs4(user can create<br>new account<br>if none exists yet)
|
|
|
|
gs4:::done
|
|
|
|
gs5(user can delete<br>current account)
|
|
|
|
gs5:::done
|
|
|
|
end
|
|
|
|
``` |
|
|
|
\ No newline at end of file |