epiq 0.3.2 → 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/dist/cli.js +36 -36
- package/dist/mcp.js +31 -31
- package/package.json +2 -2
- package/readme.md +40 -4
package/package.json
CHANGED
package/readme.md
CHANGED
|
@@ -159,9 +159,6 @@ Clear all filters with `:filter clear`
|
|
|
159
159
|
|
|
160
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.
|
|
161
161
|
|
|
162
|
-
Starting the application will launch a wizard that sets you up in 20 seconds.
|
|
163
|
-
It will result in settings persisted at `~/.epicrc`
|
|
164
|
-
|
|
165
162
|
---
|
|
166
163
|
|
|
167
164
|
## How epiq is synchronized
|
|
@@ -173,7 +170,46 @@ Epiq uses Git in the background to synchronize state between clients. No manual
|
|
|
173
170
|
|
|
174
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.
|
|
175
172
|
|
|
176
|
-
|
|
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
|
|
177
213
|
|
|
178
214
|
---
|
|
179
215
|
|