diff --git a/Overall Plan.rst b/Overall Plan.rst new file mode 100644 index 0000000000000000000000000000000000000000..29bda08496e02c0c03d538a0d2e5274ecc9e87bd --- /dev/null +++ b/Overall Plan.rst @@ -0,0 +1,92 @@ +#. Build the read-only PrivateStorage / magic-folder Android app + + #. Build an Android app that can parse a Tahoe-LAFS capability + + The deliverable is a CI pipeline which produces an Android-installable package. + The package provides an application that shows a structured representation of CHK and SDMF capability strings that are hard-coded into the application. + + #. Set up CI + #. Implement a Tahoe-LAFS capability parser library in Haskell + + #. Extend Android app to receive and display server configuration + + The deliverable is as above with the following additions. + The package provides an application which can receive a configuration blob from a sender (presumably GridSync) and display a structured representation of it. + + #. Finalize device pairing / configuration transfer protocol + #. Implement sender in GridSync + #. Implement receiver in Haskell + + #. Haskell magic-wormhole ??? + #. QR code reader ??? + + #. Extend Android app to download and display one hard-coded N=1,k=1 CHK using received "anonymous" (no ZKAPs) server configuration + + The deliverable is as above with the following additions. + The package provides an application which has a CHK capability string hard-coded into it. + The application can download the associated data from a Tahoe-LAFS server speaking the "anonymous" Great Black Swamp. + The Tahoe-LAFS server is located via the device pairing protocol completed above. + If the associated data is plain text then it can display it in some basic way. + + #. Implement Tahoe-LAFS Great Black Swamp (immutables, read-only) Haskell client library + #. Implement CHK (read-only) Haskell library + + #. Extend Android app to support arbitrary N/k CHK capabilities + + The deliverable is as above with the following additions. + The application can download the associated data from N Tahoe-LAFS servers speaking the "anonymous" Great Black Swamp. + The Tahoe-LAFS servers is located via the device pairing protocol completed above. + The same servers are selected as the Python Tahoe-LAFS implementation would select. + If the associated data is plain text then it can display it in some basic way. + + #. Build Tahoe-LAFS server selection algorithm compatibility test suite + #. Implement Tahoe-LAFS server selection algorithm in Haskell + + #. Extend Android app to download and display one hard-coded N=1,k=1 SDMF directory using received "anonymous" (no ZKAPs) server configuration + + The deliverable is as above with the following additions. + The package provides an application which has an SDMF capability string hard-coded into it. + The application can download the associated data from a Tahoe-LAFS server speaking the "anonymous" Great Black Swamp. + The Tahoe-LAFS server is located via the device pairing protocol completed above. + If the associated data is plain text then it can display it in some basic way. + + #. Implement Tahoe-LAFS Great Black Swamp (mutables, read-only) Haskell client library + #. Implement SDMF (read-only) Haskell library + #. Implement directory (read-only) Haskell library + + #. Extend Android app to support arbitrary N/k SDMF capabilities + + The deliverable is as above with the following additions. + The application can download the associated data from N Tahoe-LAFS servers speaking the "anonymous" Great Black Swamp. + Servers are selected in a manner analogous to that of the arbitrary N/k CHK case. + + #. Extend Android app to support ZKAPAuthorizer-enabled servers + + The deliverable is as above with the following additions. + The configuration received via the device pairing protocol may include storage servers which only speak the ZKAPAuthorizer variation of the storage protocol. + The application can speak to these servers to accomplish all of the above download tasks. + + #. Implement ZKAPAuthorizer economic protocol (read-only) for Great Black Swamp Haskell client library + #. Deploy Great Black Swamp-enabled Tahoe-LAFS storage servers + + #. Add support for economic plugins to Tahoe-LAFS Great Black Swamp implementation + #. Port ZKAPAuthorizer economic plugin to Great Black Swamp + #. Release Tahoe-LAFS with the above + #. Update PrivateStorageio with new Tahoe-LAFS release + + #. Extend Android app to support browsing directories + + The deliverable is as above with the following additions. + If a CHK or SDMF capability represents a directory object then the directory contents are interpreted and a structured representation of them is displayed in the GUI. + If a child of the directory is a directory then the GUI UX can recurse into that child. + + #. Finalize GUI design + #. Integrate Tahoe-LAFS Haskell client libraries with existing Kotlin GUI or new Obelisk-based GUI + + #. Extend Android app to support browsing magic-folders + + The deliverable is as above with the following additions. + The magic-folders in the "devicecap" transferred as part of the pairing protocol are enumerated in the GUI. + The directory browsing GUI can be applied to the logical directory hierarchy represented by a magic-folder. + + #. Build a "magic-folder lite" Haskell client library