epiq 0.3.1 → 0.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "epiq",
3
- "version": "0.3.1",
4
- "license": "UNLICENSED",
3
+ "version": "0.3.4",
4
+ "license": "MIT",
5
5
  "type": "module",
6
6
  "description": "EPIQ - CLI based issue tracker",
7
7
  "keywords": [
package/readme.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  # Epiq
4
4
 
5
+ _Distributed CLI based issue tracker TUI_ backed by git.
6
+
5
7
  Issue tracking is a part of the development lifecycle, but it often becomes a painful context switching exercise with poor ergonomics. `Epiq` provides issue tracking as a portable, integrated part of the development environment, with access to all the powerful tooling developers are used to. Epiq is a **CLI-native issue tracker** — powered by Git in which you can manage all your projects directly via the command line in a visual kanban board and edit content in your favorite, personalized editor.
6
8
 
7
9
  With great attention to user ergonomics, epiq intends to make project management painless and friction free again, and has developer satisfaction as its primary target.
@@ -22,8 +24,8 @@ Epiq is a vim-inspired issue tracker fully integrated in the terminal that bring
22
24
 
23
25
  Epiq renders your issue board directly in the terminal using ASCII and stores its state as an event log, versioned and synchronized through Git.
24
26
 
25
- ![Epiq cli kanban view](./resources/overview.png)
26
- ![Epiq cli log view](./resources/log.png)
27
+ ![Epiq cli kanban view](https://raw.githubusercontent.com/ljtn/epiq/main/resources/overview.png)
28
+ ![Epiq cli log view](https://raw.githubusercontent.com/ljtn/epiq/main/resources/log.png)
27
29
 
28
30
  ## Features
29
31
 
@@ -157,9 +159,6 @@ Clear all filters with `:filter clear`
157
159
 
158
160
  - Pro tip: just like in any terminal - if you need to do repeating tasks over and over again, you can just put yourself in the command mode, and then press arrow up, in order to access the last executed command. This helps a lot when you create tasks with similar names, or add the same tag to many tickets and so on.
159
161
 
160
- Starting the application will launch a wizard that sets you up in 20 seconds.
161
- It will result in settings persisted at `~/.epicrc`
162
-
163
162
  ---
164
163
 
165
164
  ## How epiq is synchronized
@@ -171,7 +170,46 @@ Epiq uses Git in the background to synchronize state between clients. No manual
171
170
 
172
171
  The `.epiq/` folder is non-authoritative and used for caching and local tracking. It can optionally be committed if you want your board state versioned alongside your code.
173
172
 
174
- > The system is designed to assure robustness and uses a number of techniques and design patterns to avoid merge conflicts.
173
+ ## Conflict Avoidance & Data Integrity
174
+
175
+ Epiq is designed to provide robustness in a distributed, Git-backed environment where multiple users may update state concurrently. Instead of mutating shared files, Epiq uses an event-sourced model to minimize merge conflicts and make concurrent changes predictable.
176
+
177
+ ### Event-sourced state
178
+
179
+ All changes are stored as **append-only events** in user-scoped files, rather than modifying a shared state file. This avoids in-place edits to the same lines and significantly reduces the likelihood of Git conflicts.
180
+
181
+ State is reconstructed in-memory by replaying a merge of all user logs.
182
+
183
+ ### Deterministic materialization
184
+
185
+ The current state is derived by replaying events in a deterministic order.
186
+
187
+ Events use a composite of time-sortable IDs (ULIDs) and a reference to the last known event ("edge"). On creation, events are appended relative to the last known event. If multiple events share the same reference point, their relative order is resolved using their time-based IDs.
188
+
189
+ This approach:
190
+
191
+ - Provides stable and reproducible ordering across machines
192
+ - Limits the impact of potential clock drift to small local ordering differences
193
+ - Ensures that concurrent updates converge to the same state
194
+
195
+ ### Conflict handling model
196
+
197
+ Epiq resolves concurrent changes at the event level:
198
+
199
+ - Events are designed to be **idempotent** where possible
200
+ - Later events take precedence when conflicts occur
201
+
202
+ Because events are append-only and scoped to 1 file per user, Git merges become trivial combinations of changes in independent files.
203
+
204
+ ### Local-first with eventual consistency
205
+
206
+ Epiq follows a **local-first** model:
207
+
208
+ - All operations apply instantly on the local machine
209
+ - Synchronization happens explicitly (`:sync`) or automatically
210
+ - When histories diverge, merging event logs and replaying them leads to a consistent state
211
+
212
+ > Frequent synchronization reduces divergence and keeps the system predictable
175
213
 
176
214
  ---
177
215