README.md

Pijul requirements

User-friendly

  • user must feel that pijul is fast
  • user must see clear error messages
  • user must have mental model map of .pijul implementation
  • user must read good documentation
  • user must feel it's easy to install
  • user must feel interface is consistent
  • user must feel terminology is consistent
  • user must feel design is consistent
  • user must read interface in i18n languages

Robust

  • user must read theoretically sound writeup
  • user must resolve conflicts natively
  • user must use monorepo workflow
  • user must use multirepo workflow

Tooling

  • user must get machine-readable output for every command
  • user can integrate pijul into a command line server like soft-serve
  • user can track issues alongside alongside the code like fossil
  • user must read good documentation for the process of integration
  • user must feel that API is clear
  • user must see clear API for cloning
  • user must see clear API for remote management
  • user must see clear API for identity management
  • user must see clear API for conflict resolution
  • user must see clear API for change history

Repositories

  • user must initialize a repository
  • user must see automatically generated .pijul directory
  • user must see automatically generated .ignore file
  • user must see useful defaults in generated .ignore file
  • user must see .DS_Store in generated .ignore file on MacOS
  • user must see .git in generated .ignore file if directory has .git
  • user must clone a repository
  • user must clone a repository over ssh
  • user must clone a repository over https
  • user must see new directory with repository name
  • user must download project files from remote
  • user must download .pijul from remote
  • user must download .ignore from remote
  • user must import .git repository to .pijul repository

Identities

  • user must create identity
  • user must feel it's easy to create identity
  • user must manage multiple identities
  • user must modify display name
  • user must modify identity name
  • user must modify email
  • user won't modify encryption
  • user won't modify expiry
  • user must modify remote
  • user must feel it's secure to use an identity
  • user must use passphrases to secure identity
  • user must rotate key
  • user must revoke key

Remotes

  • user must add a remote
  • user must edit a remote
  • user must remove a remove
  • user must feel it's easy to manage remote
  • user must read good documentation
  • user must self-host over ssh
  • user must self-host over https
  • user must have different patch sets on remote A and remote B
  • user must push over ssh
  • user must push over https
  • user must pull over ssh
  • user must pull over https

Changes

  • user must see modifications that are not yet recorded in a change
  • user must learn that working dir is recorded directly, there's no staging area
  • user must pick which patches for each file to record change
  • user must split changes into multiple smaller changes
  • user must amend previous changes with new metadata
  • user must amend previous changes with new patches
  • user must sign changes with identity
  • user must track a file
  • user must track all files in a project pijul add -r .
  • user must track a directory
  • user must track all files in a directory
  • user must record tracked changes
  • user must record tracked changes with a custom message
  • user must ignore a file from tracking
  • user must see list of files not tracked and not ignored

Sets of changes

  • user must compare sets of changes against each other
  • user must compare changes between two versions from history
  • user must compare single change to set of changes
  • user must see name of current version of repository, channel
  • user must tag, compress set of changes into snapshot
  • user must merge two sets of changes

Files

  • user must track file
  • user must untrack file
  • user must add a directory recursively
  • user must see how many files were tracked
  • user must see how many new changes are tracked
  • user won't see notification "tracked 1 path" if the file is already tracked
  • user must rename a file
  • user must track renamed file
  • user must move a file
  • user must delete a file
  • user must purge file from history like git filter-repo
  • user must list tracked files
  • user must list untracked files
  • user must list tracked status of all files
  • user must ignore a file user via .ignore

CLI

  • user must view status/summary of repository
  • user must use cli in system language according to 18n
  • french user must see french text in cli
  • user must feel the CLI terminology and idioms are consistent
  • user must view log of all changes
  • user must view log of most recent change
  • user must view modification history of changes
  • user must see when a change is created
  • user must see when a change amended to include added file
  • user must see when a change is unrecorded
  • user must compare differences with remote

Maintainers

  • maintainer must download user-submitted changes
  • maintainer must be able to edit directory after downloading user-submitted changes
  • maintainer must propose amendment to title and description without author input
  • maintainer should amend title and description without author input
  • maintainer should add author credit to changes not signed by original author
  • maintainer must rewrite history of changes

Deprecated

  • user must see error "pijul key" has been deprecated. Please run "pijul identity" instead. for a deprecated command

cast of characters

standing on the shoulders of giants from wg-async

  • Alan: the experienced git user, new to pijul
    • Top priority: conflict resolution -- that's what he is not getting from git
    • Expectations: absence of hard to resolve conflicts (he gets that now from his git), strong ecosystem, great tooling
  • Grace: the darcs expert, new to pijul
    • Top priority: clear mental model -- that's what she was not getting from darcs
    • Expectations: able to do all the magical things she's used to from darcs
  • Niklaus: new user from an unconventional background
    • Top priority: accessibility -- he's learning a lot of new things at once
    • Expectations: community -- the community enabled him to have early success, and he is excited to have it support him and him grow more
  • Barbara: the experienced pijul user
    • Top priority: overall productivity and long-term maintenance -- she loves pijul, and wants to see it extended to new areas; she has an existing pijul repository to maintain
    • Expectations: elegance and craftsmanship, fits well with pijul