feat: initialize project structure and error types

- go.mod with github.com/dailz/go-kv, Go 1.26.3, testify
- config/config.go with WalConfig, Validate() with checked arithmetic
- errors.go with sentinel errors (ErrCommitUnknown, ErrWriteStopped, etc.)
- wal/constants.go with all WAL format constants and enums
- wal/header.go with WAL File Header encode/decode (CRC32 IEEE)
- wal/record.go with Physical Record codec, block boundary, SplitIntoRecords
- wal/entry.go with WAL Entry codec (varint keys/values, OpType, ValueKind)
- wal/sequence.go with SequenceManager (atomic, CAS, overflow-safe)
- manifest/manifest.go with MANIFEST stub (Load/Save atomic)
- manifest/current.go with CURRENT file (WriteCurrent/ReadCurrent)
- Comprehensive tests for all modules
- .golangci.yml configuration
This commit is contained in:
dailz
2026-06-12 13:23:27 +08:00
parent 59de99ca0b
commit cf913b1d52
52 changed files with 4538 additions and 0 deletions
+89
View File
@@ -0,0 +1,89 @@
{
"schema_version": 2,
"active_work_id": "phase1-wal-3bc18f0c",
"works": {
"phase1-wal-3bc18f0c": {
"work_id": "phase1-wal-3bc18f0c",
"active_plan": "/home/dailz/workspace/src/go-kv/.omo/plans/phase1-wal.md",
"plan_name": "phase1-wal",
"status": "active",
"started_at": "2026-06-12T05:09:32.588Z",
"updated_at": "2026-06-12T05:22:47.301Z",
"session_ids": [
"opencode:ses_145c3bae9ffeTB2zbsTym0Cev8"
],
"session_origins": {
"opencode:ses_145c3bae9ffeTB2zbsTym0Cev8": "direct"
},
"agent": "atlas",
"task_sessions": {
"todo:1": {
"task_key": "todo:1",
"task_label": "1",
"task_title": "Project scaffolding + go.mod + config types",
"session_id": "opencode:ses_145c254a5ffemom68fK0rmB26W",
"agent": "Sisyphus-Junior",
"category": "quick",
"updated_at": "2026-06-12T05:15:14.028Z",
"started_at": "2026-06-12T05:14:15.365Z",
"status": "completed",
"ended_at": "2026-06-12T05:15:14.028Z",
"elapsed_ms": 58663
},
"todo:2": {
"task_key": "todo:2",
"task_label": "2",
"task_title": "Error types + constants",
"session_id": "opencode:ses_145bdf583ffe6PSExxk7J357zT",
"agent": "Sisyphus-Junior",
"category": "quick",
"updated_at": "2026-06-12T05:22:47.301Z",
"started_at": "2026-06-12T05:19:53.997Z",
"status": "completed",
"ended_at": "2026-06-12T05:22:47.301Z",
"elapsed_ms": 173304
}
}
}
},
"active_plan": "/home/dailz/workspace/src/go-kv/.omo/plans/phase1-wal.md",
"started_at": "2026-06-12T05:09:32.588Z",
"status": "active",
"updated_at": "2026-06-12T05:22:47.301Z",
"session_ids": [
"opencode:ses_145c3bae9ffeTB2zbsTym0Cev8"
],
"session_origins": {
"opencode:ses_145c3bae9ffeTB2zbsTym0Cev8": "direct"
},
"plan_name": "phase1-wal",
"task_sessions": {
"todo:1": {
"task_key": "todo:1",
"task_label": "1",
"task_title": "Project scaffolding + go.mod + config types",
"session_id": "opencode:ses_145c254a5ffemom68fK0rmB26W",
"agent": "Sisyphus-Junior",
"category": "quick",
"updated_at": "2026-06-12T05:15:14.028Z",
"started_at": "2026-06-12T05:14:15.365Z",
"status": "completed",
"ended_at": "2026-06-12T05:15:14.028Z",
"elapsed_ms": 58663
},
"todo:2": {
"task_key": "todo:2",
"task_label": "2",
"task_title": "Error types + constants",
"session_id": "opencode:ses_145bdf583ffe6PSExxk7J357zT",
"agent": "Sisyphus-Junior",
"category": "quick",
"updated_at": "2026-06-12T05:22:47.301Z",
"started_at": "2026-06-12T05:19:53.997Z",
"status": "completed",
"ended_at": "2026-06-12T05:22:47.301Z",
"elapsed_ms": 173304
}
},
"agent": "atlas"
}
View File
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,10 @@
{
"sessionID": "ses_1465a5321ffevd4inJJZXxFenJ",
"updatedAt": "2026-06-12T02:26:27.295Z",
"sources": {
"background-task": {
"state": "idle",
"updatedAt": "2026-06-12T02:26:27.295Z"
}
}
}
@@ -0,0 +1,10 @@
{
"sessionID": "ses_1468f0cc5ffew53IA0I4W6HijM",
"updatedAt": "2026-06-12T01:41:18.251Z",
"sources": {
"background-task": {
"state": "idle",
"updatedAt": "2026-06-12T01:41:18.251Z"
}
}
}
@@ -0,0 +1,10 @@
{
"sessionID": "ses_1469860f1ffeAxT7jbUD3T1ZK5",
"updatedAt": "2026-06-12T01:18:59.508Z",
"sources": {
"background-task": {
"state": "idle",
"updatedAt": "2026-06-12T01:18:59.508Z"
}
}
}
@@ -0,0 +1,10 @@
{
"sessionID": "ses_146adbaa4ffehxje0lmKRg4ZpT",
"updatedAt": "2026-06-12T00:56:53.921Z",
"sources": {
"background-task": {
"state": "idle",
"updatedAt": "2026-06-12T00:56:53.921Z"
}
}
}
@@ -0,0 +1,10 @@
{
"sessionID": "ses_146b864adffetMjZkc08p16onz",
"updatedAt": "2026-06-12T00:44:22.791Z",
"sources": {
"background-task": {
"state": "idle",
"updatedAt": "2026-06-12T00:44:22.791Z"
}
}
}
@@ -0,0 +1,10 @@
{
"sessionID": "ses_146c330caffehDbiMQ7M0jL3Il",
"updatedAt": "2026-06-12T00:31:46.022Z",
"sources": {
"background-task": {
"state": "idle",
"updatedAt": "2026-06-12T00:31:46.022Z"
}
}
}
@@ -0,0 +1,10 @@
{
"sessionID": "ses_149585098ffeVZ53676PRrr2ic",
"updatedAt": "2026-06-11T12:31:44.016Z",
"sources": {
"background-task": {
"state": "idle",
"updatedAt": "2026-06-11T12:31:44.016Z"
}
}
}
@@ -0,0 +1,10 @@
{
"sessionID": "ses_14960b98effe7YjeN56yvxsoN3",
"updatedAt": "2026-06-11T12:21:18.579Z",
"sources": {
"background-task": {
"state": "idle",
"updatedAt": "2026-06-11T12:21:18.579Z"
}
}
}
@@ -0,0 +1,10 @@
{
"sessionID": "ses_14967e191ffeLfQYyfTQHP5TlH",
"updatedAt": "2026-06-11T12:12:33.047Z",
"sources": {
"background-task": {
"state": "idle",
"updatedAt": "2026-06-11T12:12:33.047Z"
}
}
}
@@ -0,0 +1,10 @@
{
"sessionID": "ses_149a13a61ffehpTGChldqMe0do",
"updatedAt": "2026-06-11T11:11:39.805Z",
"sources": {
"background-task": {
"state": "idle",
"updatedAt": "2026-06-11T11:11:39.805Z"
}
}
}
@@ -0,0 +1,10 @@
{
"sessionID": "ses_149e4f0c5ffe5hf5hErOGwmaO7",
"updatedAt": "2026-06-11T10:01:28.529Z",
"sources": {
"background-task": {
"state": "idle",
"updatedAt": "2026-06-11T10:01:28.529Z"
}
}
}
@@ -0,0 +1,10 @@
{
"sessionID": "ses_149f503d8ffeCitCeNNhuI5uPD",
"updatedAt": "2026-06-11T09:38:47.486Z",
"sources": {
"background-task": {
"state": "idle",
"updatedAt": "2026-06-11T09:38:47.486Z"
}
}
}
@@ -0,0 +1,10 @@
{
"sessionID": "ses_1551b5cb8ffeRq3O3tTE6gADNa",
"updatedAt": "2026-06-09T05:49:57.317Z",
"sources": {
"background-task": {
"state": "idle",
"updatedAt": "2026-06-09T05:49:57.317Z"
}
}
}
@@ -0,0 +1,10 @@
{
"sessionID": "ses_15535520fffenpCk4v55tlxfPN",
"updatedAt": "2026-06-09T05:14:00.942Z",
"sources": {
"background-task": {
"state": "idle",
"updatedAt": "2026-06-09T05:14:00.942Z"
}
}
}
@@ -0,0 +1,10 @@
{
"sessionID": "ses_155c694ebffeUxfvz2X0kcpMQz",
"updatedAt": "2026-06-09T03:20:21.146Z",
"sources": {
"background-task": {
"state": "idle",
"updatedAt": "2026-06-09T03:20:21.146Z"
}
}
}
@@ -0,0 +1,10 @@
{
"sessionID": "ses_162be27e5ffePD7UoGttrWFm7T",
"updatedAt": "2026-06-06T14:13:39.321Z",
"sources": {
"background-task": {
"state": "idle",
"updatedAt": "2026-06-06T14:13:39.321Z"
}
}
}
@@ -0,0 +1,10 @@
{
"sessionID": "ses_16f5a4050ffe4VOJm8EOoPcnZV",
"updatedAt": "2026-06-04T03:24:44.020Z",
"sources": {
"background-task": {
"state": "idle",
"updatedAt": "2026-06-04T03:24:44.020Z"
}
}
}
@@ -0,0 +1,10 @@
{
"sessionID": "ses_16f63a221ffew3fp5TM11NaRDD",
"updatedAt": "2026-06-04T03:18:04.363Z",
"sources": {
"background-task": {
"state": "idle",
"updatedAt": "2026-06-04T03:18:04.363Z"
}
}
}
@@ -0,0 +1,10 @@
{
"sessionID": "ses_17337fda2fferaZJ6tpXI2Cw44",
"updatedAt": "2026-06-04T03:25:22.600Z",
"sources": {
"background-task": {
"state": "idle",
"updatedAt": "2026-06-04T03:25:22.600Z"
}
}
}
@@ -0,0 +1,10 @@
{
"sessionID": "ses_1738cec10ffex8teaUh336WrCD",
"updatedAt": "2026-06-03T08:41:49.094Z",
"sources": {
"background-task": {
"state": "idle",
"updatedAt": "2026-06-03T08:41:49.094Z"
}
}
}