@shardworks/guild-starter-kit 0.1.38 → 0.1.40

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.
@@ -0,0 +1,177 @@
1
+ -- Nexus Mk 2.1 — consolidated schema.
2
+ -- All entity IDs are TEXT using prefixed hex format (e.g. a-3f7b2c1e).
3
+ -- No auto-increment IDs anywhere in the system.
4
+
5
+ PRAGMA journal_mode = WAL;
6
+ PRAGMA foreign_keys = ON;
7
+
8
+ -- ════════════════════════════════════════════════════════════════════════
9
+ -- Register — anima identity and composition
10
+ -- ════════════════════════════════════════════════════════════════════════
11
+
12
+ CREATE TABLE animas (
13
+ id TEXT PRIMARY KEY,
14
+ name TEXT NOT NULL UNIQUE,
15
+ status TEXT NOT NULL CHECK(status IN ('aspirant', 'active', 'retired')),
16
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
17
+ updated_at TEXT NOT NULL DEFAULT (datetime('now'))
18
+ );
19
+
20
+ CREATE TABLE anima_compositions (
21
+ id TEXT PRIMARY KEY,
22
+ anima_id TEXT NOT NULL UNIQUE REFERENCES animas(id),
23
+ curriculum_name TEXT NOT NULL,
24
+ curriculum_version TEXT NOT NULL,
25
+ temperament_name TEXT NOT NULL,
26
+ temperament_version TEXT NOT NULL,
27
+ curriculum_snapshot TEXT NOT NULL,
28
+ temperament_snapshot TEXT NOT NULL,
29
+ composed_at TEXT NOT NULL DEFAULT (datetime('now'))
30
+ );
31
+
32
+ CREATE TABLE roster (
33
+ id TEXT PRIMARY KEY,
34
+ anima_id TEXT NOT NULL REFERENCES animas(id),
35
+ role TEXT NOT NULL,
36
+ standing INTEGER NOT NULL DEFAULT 0,
37
+ assigned_at TEXT NOT NULL DEFAULT (datetime('now'))
38
+ );
39
+
40
+ -- ════════════════════════════════════════════════════════════════════════
41
+ -- Ledger — commissions and work decomposition
42
+ -- ════════════════════════════════════════════════════════════════════════
43
+
44
+ CREATE TABLE commissions (
45
+ id TEXT PRIMARY KEY,
46
+ content TEXT NOT NULL,
47
+ status TEXT NOT NULL CHECK(status IN ('posted', 'assigned', 'in_progress', 'completed', 'failed')),
48
+ workshop TEXT NOT NULL,
49
+ status_reason TEXT,
50
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
51
+ updated_at TEXT NOT NULL DEFAULT (datetime('now'))
52
+ );
53
+
54
+ CREATE TABLE commission_assignments (
55
+ id TEXT PRIMARY KEY,
56
+ commission_id TEXT NOT NULL REFERENCES commissions(id),
57
+ anima_id TEXT NOT NULL REFERENCES animas(id),
58
+ assigned_at TEXT NOT NULL DEFAULT (datetime('now')),
59
+ UNIQUE(commission_id, anima_id)
60
+ );
61
+
62
+ CREATE TABLE works (
63
+ id TEXT PRIMARY KEY,
64
+ commission_id TEXT REFERENCES commissions(id),
65
+ title TEXT NOT NULL,
66
+ description TEXT,
67
+ status TEXT NOT NULL DEFAULT 'open' CHECK(status IN ('open', 'active', 'completed', 'cancelled')),
68
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
69
+ updated_at TEXT NOT NULL DEFAULT (datetime('now'))
70
+ );
71
+
72
+ CREATE TABLE pieces (
73
+ id TEXT PRIMARY KEY,
74
+ work_id TEXT REFERENCES works(id),
75
+ title TEXT NOT NULL,
76
+ description TEXT,
77
+ status TEXT NOT NULL DEFAULT 'open' CHECK(status IN ('open', 'active', 'completed', 'cancelled')),
78
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
79
+ updated_at TEXT NOT NULL DEFAULT (datetime('now'))
80
+ );
81
+
82
+ CREATE TABLE jobs (
83
+ id TEXT PRIMARY KEY,
84
+ piece_id TEXT REFERENCES pieces(id),
85
+ title TEXT NOT NULL,
86
+ description TEXT,
87
+ status TEXT NOT NULL DEFAULT 'open' CHECK(status IN ('open', 'active', 'completed', 'failed', 'cancelled')),
88
+ assignee TEXT,
89
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
90
+ updated_at TEXT NOT NULL DEFAULT (datetime('now'))
91
+ );
92
+
93
+ CREATE TABLE strokes (
94
+ id TEXT PRIMARY KEY,
95
+ job_id TEXT NOT NULL REFERENCES jobs(id),
96
+ kind TEXT NOT NULL,
97
+ content TEXT,
98
+ status TEXT NOT NULL DEFAULT 'pending' CHECK(status IN ('pending', 'complete', 'failed')),
99
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
100
+ updated_at TEXT NOT NULL DEFAULT (datetime('now'))
101
+ );
102
+
103
+ -- ════════════════════════════════════════════════════════════════════════
104
+ -- Daybook — audit trail
105
+ -- ════════════════════════════════════════════════════════════════════════
106
+
107
+ CREATE TABLE audit_log (
108
+ id TEXT PRIMARY KEY,
109
+ actor TEXT NOT NULL,
110
+ action TEXT NOT NULL,
111
+ target_type TEXT,
112
+ target_id TEXT,
113
+ detail TEXT,
114
+ timestamp TEXT NOT NULL DEFAULT (datetime('now'))
115
+ );
116
+
117
+ -- ════════════════════════════════════════════════════════════════════════
118
+ -- Clockworks — event queue and dispatch tracking
119
+ -- ════════════════════════════════════════════════════════════════════════
120
+
121
+ CREATE TABLE events (
122
+ id TEXT PRIMARY KEY,
123
+ name TEXT NOT NULL,
124
+ payload TEXT,
125
+ emitter TEXT NOT NULL,
126
+ fired_at TEXT NOT NULL DEFAULT (datetime('now')),
127
+ processed INTEGER NOT NULL DEFAULT 0
128
+ );
129
+
130
+ CREATE TABLE event_dispatches (
131
+ id TEXT PRIMARY KEY,
132
+ event_id TEXT NOT NULL REFERENCES events(id),
133
+ handler_type TEXT NOT NULL,
134
+ handler_name TEXT NOT NULL,
135
+ target_role TEXT,
136
+ notice_type TEXT,
137
+ started_at TEXT,
138
+ ended_at TEXT,
139
+ status TEXT,
140
+ error TEXT
141
+ );
142
+
143
+ -- ════════════════════════════════════════════════════════════════════════
144
+ -- Sessions — session tracking and commission linkage
145
+ -- ════════════════════════════════════════════════════════════════════════
146
+
147
+ CREATE TABLE sessions (
148
+ id TEXT PRIMARY KEY,
149
+ anima_id TEXT NOT NULL REFERENCES animas(id),
150
+ provider TEXT NOT NULL,
151
+ model TEXT,
152
+ trigger TEXT NOT NULL,
153
+ workshop TEXT,
154
+ workspace_kind TEXT NOT NULL,
155
+ curriculum_name TEXT,
156
+ curriculum_version TEXT,
157
+ temperament_name TEXT,
158
+ temperament_version TEXT,
159
+ roles TEXT,
160
+ started_at TEXT NOT NULL,
161
+ ended_at TEXT,
162
+ exit_code INTEGER,
163
+ input_tokens INTEGER,
164
+ output_tokens INTEGER,
165
+ cache_read_tokens INTEGER,
166
+ cache_write_tokens INTEGER,
167
+ cost_usd REAL,
168
+ duration_ms INTEGER,
169
+ provider_session_id TEXT,
170
+ record_path TEXT
171
+ );
172
+
173
+ CREATE TABLE commission_sessions (
174
+ commission_id TEXT NOT NULL REFERENCES commissions(id),
175
+ session_id TEXT NOT NULL REFERENCES sessions(id),
176
+ PRIMARY KEY (commission_id, session_id)
177
+ );
package/nexus-bundle.json CHANGED
@@ -1,11 +1,43 @@
1
1
  {
2
2
  "description": "Everything a new guild needs — base tools, starter training, and initial schema",
3
3
  "tools": [
4
- { "package": "@shardworks/nexus-stdlib@0.x", "name": "install-tool" },
5
- { "package": "@shardworks/nexus-stdlib@0.x", "name": "remove-tool" },
6
- { "package": "@shardworks/nexus-stdlib@0.x", "name": "commission" },
7
- { "package": "@shardworks/nexus-stdlib@0.x", "name": "instantiate" },
8
- { "package": "@shardworks/nexus-stdlib@0.x", "name": "nexus-version" }
4
+ { "package": "@shardworks/nexus-stdlib@0.x", "name": "tool-install" },
5
+ { "package": "@shardworks/nexus-stdlib@0.x", "name": "tool-remove" },
6
+ { "package": "@shardworks/nexus-stdlib@0.x", "name": "tool-list" },
7
+ { "package": "@shardworks/nexus-stdlib@0.x", "name": "commission-create" },
8
+ { "package": "@shardworks/nexus-stdlib@0.x", "name": "commission-list" },
9
+ { "package": "@shardworks/nexus-stdlib@0.x", "name": "commission-show" },
10
+ { "package": "@shardworks/nexus-stdlib@0.x", "name": "commission-update" },
11
+ { "package": "@shardworks/nexus-stdlib@0.x", "name": "anima-create" },
12
+ { "package": "@shardworks/nexus-stdlib@0.x", "name": "anima-list" },
13
+ { "package": "@shardworks/nexus-stdlib@0.x", "name": "anima-show" },
14
+ { "package": "@shardworks/nexus-stdlib@0.x", "name": "anima-update" },
15
+ { "package": "@shardworks/nexus-stdlib@0.x", "name": "anima-remove" },
16
+ { "package": "@shardworks/nexus-stdlib@0.x", "name": "workshop-create" },
17
+ { "package": "@shardworks/nexus-stdlib@0.x", "name": "workshop-register" },
18
+ { "package": "@shardworks/nexus-stdlib@0.x", "name": "workshop-list" },
19
+ { "package": "@shardworks/nexus-stdlib@0.x", "name": "workshop-show" },
20
+ { "package": "@shardworks/nexus-stdlib@0.x", "name": "workshop-remove" },
21
+ { "package": "@shardworks/nexus-stdlib@0.x", "name": "clock-list" },
22
+ { "package": "@shardworks/nexus-stdlib@0.x", "name": "clock-tick" },
23
+ { "package": "@shardworks/nexus-stdlib@0.x", "name": "clock-run" },
24
+ { "package": "@shardworks/nexus-stdlib@0.x", "name": "nexus-version" },
25
+ { "package": "@shardworks/nexus-stdlib@0.x", "name": "work-create" },
26
+ { "package": "@shardworks/nexus-stdlib@0.x", "name": "work-list" },
27
+ { "package": "@shardworks/nexus-stdlib@0.x", "name": "work-show" },
28
+ { "package": "@shardworks/nexus-stdlib@0.x", "name": "work-update" },
29
+ { "package": "@shardworks/nexus-stdlib@0.x", "name": "piece-create" },
30
+ { "package": "@shardworks/nexus-stdlib@0.x", "name": "piece-list" },
31
+ { "package": "@shardworks/nexus-stdlib@0.x", "name": "piece-show" },
32
+ { "package": "@shardworks/nexus-stdlib@0.x", "name": "piece-update" },
33
+ { "package": "@shardworks/nexus-stdlib@0.x", "name": "job-create" },
34
+ { "package": "@shardworks/nexus-stdlib@0.x", "name": "job-list" },
35
+ { "package": "@shardworks/nexus-stdlib@0.x", "name": "job-show" },
36
+ { "package": "@shardworks/nexus-stdlib@0.x", "name": "job-update" },
37
+ { "package": "@shardworks/nexus-stdlib@0.x", "name": "stroke-create" },
38
+ { "package": "@shardworks/nexus-stdlib@0.x", "name": "stroke-list" },
39
+ { "package": "@shardworks/nexus-stdlib@0.x", "name": "stroke-show" },
40
+ { "package": "@shardworks/nexus-stdlib@0.x", "name": "stroke-update" }
9
41
  ],
10
42
  "engines": [
11
43
  { "package": "@shardworks/nexus-stdlib@0.x", "name": "workshop-prepare" },
@@ -19,9 +51,6 @@
19
51
  { "path": "curricula/guild-operations" }
20
52
  ],
21
53
  "migrations": [
22
- { "path": "migrations/001-initial-schema.sql" },
23
- { "path": "migrations/002-clockworks.sql" },
24
- { "path": "migrations/003-commission-status-reason.sql" },
25
- { "path": "migrations/004-sessions.sql" }
54
+ { "path": "migrations/001-schema.sql" }
26
55
  ]
27
56
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shardworks/guild-starter-kit",
3
- "version": "0.1.38",
3
+ "version": "0.1.40",
4
4
  "description": "Default bundle for new Nexus guilds — tools, training, and migrations",
5
5
  "repository": {
6
6
  "type": "git",
@@ -1,57 +0,0 @@
1
- PRAGMA journal_mode = WAL;
2
- PRAGMA foreign_keys = ON;
3
-
4
- CREATE TABLE animas (
5
- id INTEGER PRIMARY KEY AUTOINCREMENT,
6
- name TEXT NOT NULL UNIQUE,
7
- status TEXT NOT NULL CHECK(status IN ('aspirant', 'active', 'retired')),
8
- created_at TEXT NOT NULL DEFAULT (datetime('now')),
9
- updated_at TEXT NOT NULL DEFAULT (datetime('now'))
10
- );
11
-
12
- CREATE TABLE anima_compositions (
13
- id INTEGER PRIMARY KEY AUTOINCREMENT,
14
- anima_id INTEGER NOT NULL UNIQUE REFERENCES animas(id),
15
- curriculum_name TEXT NOT NULL,
16
- curriculum_version TEXT NOT NULL,
17
- temperament_name TEXT NOT NULL,
18
- temperament_version TEXT NOT NULL,
19
- curriculum_snapshot TEXT NOT NULL,
20
- temperament_snapshot TEXT NOT NULL,
21
- composed_at TEXT NOT NULL DEFAULT (datetime('now'))
22
- );
23
-
24
- CREATE TABLE roster (
25
- id INTEGER PRIMARY KEY AUTOINCREMENT,
26
- anima_id INTEGER NOT NULL REFERENCES animas(id),
27
- role TEXT NOT NULL,
28
- standing INTEGER NOT NULL DEFAULT 0,
29
- assigned_at TEXT NOT NULL DEFAULT (datetime('now'))
30
- );
31
-
32
- CREATE TABLE commissions (
33
- id INTEGER PRIMARY KEY AUTOINCREMENT,
34
- content TEXT NOT NULL,
35
- status TEXT NOT NULL CHECK(status IN ('posted', 'assigned', 'in_progress', 'completed', 'failed')),
36
- workshop TEXT NOT NULL,
37
- created_at TEXT NOT NULL DEFAULT (datetime('now')),
38
- updated_at TEXT NOT NULL DEFAULT (datetime('now'))
39
- );
40
-
41
- CREATE TABLE commission_assignments (
42
- id INTEGER PRIMARY KEY AUTOINCREMENT,
43
- commission_id INTEGER NOT NULL REFERENCES commissions(id),
44
- anima_id INTEGER NOT NULL REFERENCES animas(id),
45
- assigned_at TEXT NOT NULL DEFAULT (datetime('now')),
46
- UNIQUE(commission_id, anima_id)
47
- );
48
-
49
- CREATE TABLE audit_log (
50
- id INTEGER PRIMARY KEY AUTOINCREMENT,
51
- actor TEXT NOT NULL,
52
- action TEXT NOT NULL,
53
- target_type TEXT,
54
- target_id INTEGER,
55
- detail TEXT,
56
- timestamp TEXT NOT NULL DEFAULT (datetime('now'))
57
- );
@@ -1,24 +0,0 @@
1
- -- Clockworks tables: event log and dispatch tracking.
2
- -- Part of Pillar 5 — the guild's event-driven nervous system.
3
-
4
- CREATE TABLE events (
5
- id INTEGER PRIMARY KEY,
6
- name TEXT NOT NULL,
7
- payload TEXT,
8
- emitter TEXT NOT NULL,
9
- fired_at TEXT NOT NULL DEFAULT (datetime('now')),
10
- processed INTEGER NOT NULL DEFAULT 0
11
- );
12
-
13
- CREATE TABLE event_dispatches (
14
- id INTEGER PRIMARY KEY,
15
- event_id INTEGER NOT NULL REFERENCES events(id),
16
- handler_type TEXT NOT NULL,
17
- handler_name TEXT NOT NULL,
18
- target_role TEXT,
19
- notice_type TEXT,
20
- started_at TEXT,
21
- ended_at TEXT,
22
- status TEXT,
23
- error TEXT
24
- );
@@ -1,5 +0,0 @@
1
- -- Add status_reason to commissions for tracking why each state transition happened.
2
- -- Every status change should include a reason: "posted by patron", "merged to main",
3
- -- "merge conflict in src/foo.ts", etc.
4
-
5
- ALTER TABLE commissions ADD COLUMN status_reason TEXT;
@@ -1,36 +0,0 @@
1
- -- Session tracking — records every session launched through the funnel.
2
-
3
- CREATE TABLE sessions (
4
- id INTEGER PRIMARY KEY AUTOINCREMENT,
5
- anima_id INTEGER NOT NULL REFERENCES animas(id),
6
- provider TEXT NOT NULL, -- 'claude-code', 'claude-api', 'bedrock'
7
- model TEXT, -- 'claude-sonnet-4-6', 'claude-opus-4-6', etc.
8
- trigger TEXT NOT NULL, -- 'consult', 'summon', 'brief'
9
- workshop TEXT, -- workshop name, null for guildhall sessions
10
- workspace_kind TEXT NOT NULL, -- 'guildhall', 'workshop-temp', 'workshop-managed'
11
- curriculum_name TEXT, -- curriculum used (null if none)
12
- curriculum_version TEXT, -- curriculum version at session time
13
- temperament_name TEXT, -- temperament used (null if none)
14
- temperament_version TEXT, -- temperament version at session time
15
- roles TEXT, -- JSON array of role names
16
- started_at TEXT NOT NULL,
17
- ended_at TEXT,
18
- exit_code INTEGER,
19
- input_tokens INTEGER,
20
- output_tokens INTEGER,
21
- cache_read_tokens INTEGER,
22
- cache_write_tokens INTEGER,
23
- cost_usd REAL,
24
- duration_ms INTEGER,
25
- provider_session_id TEXT, -- claude session ID, API request ID, etc.
26
- record_path TEXT -- path to session record JSON, relative to guild root
27
- );
28
-
29
- -- Links commissions to the sessions used to complete them.
30
- -- Separate table because: not all sessions are commissions,
31
- -- and a commission may involve multiple sessions (retries, sub-tasks).
32
- CREATE TABLE commission_sessions (
33
- commission_id INTEGER NOT NULL REFERENCES commissions(id),
34
- session_id INTEGER NOT NULL REFERENCES sessions(id),
35
- PRIMARY KEY (commission_id, session_id)
36
- );