@fractalsynapse/dsh-chapters 0.0.0-stage → 0.2.21

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.
Files changed (195) hide show
  1. package/LICENSE +14 -0
  2. package/README.md +76 -2
  3. package/cordis.patch.yml +363 -0
  4. package/docs/architecture.md +692 -0
  5. package/docs/autorun-guide.md +248 -0
  6. package/docs/backlog.md +2022 -0
  7. package/docs/contract.md +938 -0
  8. package/docs/development.md +990 -0
  9. package/docs/host-compaction-seam.md +225 -0
  10. package/docs/host-protected-head-ask.md +80 -0
  11. package/docs/knowledge-repo.md +1332 -0
  12. package/docs/plans-carriage.md +571 -0
  13. package/docs/project-state.md +642 -0
  14. package/docs/provider.md +98 -0
  15. package/docs/superpowers/plans/2026-10-17-chapters-save.md +198 -0
  16. package/docs/superpowers/plans/2026-11-02-chapter-removal.md +151 -0
  17. package/docs/superpowers/specs/2026-11-02-chapter-removal-design.md +115 -0
  18. package/docs/verify.md +561 -0
  19. package/lib/archive.d.ts +161 -0
  20. package/lib/archive.js +229 -0
  21. package/lib/archive.js.map +1 -0
  22. package/lib/arrival.d.ts +23 -0
  23. package/lib/arrival.js +125 -0
  24. package/lib/arrival.js.map +1 -0
  25. package/lib/artifact-query.d.ts +62 -0
  26. package/lib/artifact-query.js +187 -0
  27. package/lib/artifact-query.js.map +1 -0
  28. package/lib/attach.d.ts +46 -0
  29. package/lib/attach.js +120 -0
  30. package/lib/attach.js.map +1 -0
  31. package/lib/auto-save.d.ts +145 -0
  32. package/lib/auto-save.js +334 -0
  33. package/lib/auto-save.js.map +1 -0
  34. package/lib/aux-message.d.ts +17 -0
  35. package/lib/aux-message.js +20 -0
  36. package/lib/aux-message.js.map +1 -0
  37. package/lib/client.js +1419 -0
  38. package/lib/client.js.map +1 -0
  39. package/lib/codegraph.d.ts +76 -0
  40. package/lib/codegraph.js +190 -0
  41. package/lib/codegraph.js.map +1 -0
  42. package/lib/commands.d.ts +52 -0
  43. package/lib/commands.js +946 -0
  44. package/lib/commands.js.map +1 -0
  45. package/lib/compose.d.ts +30 -0
  46. package/lib/compose.js +185 -0
  47. package/lib/compose.js.map +1 -0
  48. package/lib/continue-core.d.ts +245 -0
  49. package/lib/continue-core.js +405 -0
  50. package/lib/continue-core.js.map +1 -0
  51. package/lib/diag.d.ts +55 -0
  52. package/lib/diag.js +186 -0
  53. package/lib/diag.js.map +1 -0
  54. package/lib/engine-core.d.ts +301 -0
  55. package/lib/engine-core.js +531 -0
  56. package/lib/engine-core.js.map +1 -0
  57. package/lib/engine-note.d.ts +35 -0
  58. package/lib/engine-note.js +32 -0
  59. package/lib/engine-note.js.map +1 -0
  60. package/lib/engine.d.ts +329 -0
  61. package/lib/engine.js +1179 -0
  62. package/lib/engine.js.map +1 -0
  63. package/lib/enrich-queue.d.ts +66 -0
  64. package/lib/enrich-queue.js +126 -0
  65. package/lib/enrich-queue.js.map +1 -0
  66. package/lib/enrich-store.d.ts +31 -0
  67. package/lib/enrich-store.js +103 -0
  68. package/lib/enrich-store.js.map +1 -0
  69. package/lib/enrich-wire.d.ts +163 -0
  70. package/lib/enrich-wire.js +353 -0
  71. package/lib/enrich-wire.js.map +1 -0
  72. package/lib/enrich.d.ts +102 -0
  73. package/lib/enrich.js +267 -0
  74. package/lib/enrich.js.map +1 -0
  75. package/lib/gitops.d.ts +107 -0
  76. package/lib/gitops.js +539 -0
  77. package/lib/gitops.js.map +1 -0
  78. package/lib/index.d.ts +241 -0
  79. package/lib/index.js +1162 -0
  80. package/lib/index.js.map +1 -0
  81. package/lib/indexing.d.ts +98 -0
  82. package/lib/indexing.js +223 -0
  83. package/lib/indexing.js.map +1 -0
  84. package/lib/injections.d.ts +90 -0
  85. package/lib/injections.js +165 -0
  86. package/lib/injections.js.map +1 -0
  87. package/lib/last-resort.d.ts +24 -0
  88. package/lib/last-resort.js +27 -0
  89. package/lib/last-resort.js.map +1 -0
  90. package/lib/log-shape.d.ts +38 -0
  91. package/lib/log-shape.js +93 -0
  92. package/lib/log-shape.js.map +1 -0
  93. package/lib/models-command.d.ts +74 -0
  94. package/lib/models-command.js +100 -0
  95. package/lib/models-command.js.map +1 -0
  96. package/lib/notice.d.ts +74 -0
  97. package/lib/notice.js +92 -0
  98. package/lib/notice.js.map +1 -0
  99. package/lib/plans.d.ts +154 -0
  100. package/lib/plans.js +315 -0
  101. package/lib/plans.js.map +1 -0
  102. package/lib/preset.d.ts +186 -0
  103. package/lib/preset.js +212 -0
  104. package/lib/preset.js.map +1 -0
  105. package/lib/prompt-keys.d.ts +7 -0
  106. package/lib/prompt-keys.js +8 -0
  107. package/lib/prompt-keys.js.map +1 -0
  108. package/lib/prompt-loop.d.ts +73 -0
  109. package/lib/prompt-loop.js +147 -0
  110. package/lib/prompt-loop.js.map +1 -0
  111. package/lib/prompt-push.d.ts +47 -0
  112. package/lib/prompt-push.js +115 -0
  113. package/lib/prompt-push.js.map +1 -0
  114. package/lib/prompt-runner.d.ts +48 -0
  115. package/lib/prompt-runner.js +90 -0
  116. package/lib/prompt-runner.js.map +1 -0
  117. package/lib/prompt-state.d.ts +142 -0
  118. package/lib/prompt-state.js +101 -0
  119. package/lib/prompt-state.js.map +1 -0
  120. package/lib/prompt.d.ts +270 -0
  121. package/lib/prompt.js +408 -0
  122. package/lib/prompt.js.map +1 -0
  123. package/lib/provider.d.ts +44 -0
  124. package/lib/provider.js +66 -0
  125. package/lib/provider.js.map +1 -0
  126. package/lib/redact.d.ts +24 -0
  127. package/lib/redact.js +85 -0
  128. package/lib/redact.js.map +1 -0
  129. package/lib/registry.d.ts +187 -0
  130. package/lib/registry.js +235 -0
  131. package/lib/registry.js.map +1 -0
  132. package/lib/removal.d.ts +159 -0
  133. package/lib/removal.js +556 -0
  134. package/lib/removal.js.map +1 -0
  135. package/lib/render.d.ts +97 -0
  136. package/lib/render.js +530 -0
  137. package/lib/render.js.map +1 -0
  138. package/lib/repair-run.d.ts +76 -0
  139. package/lib/repair-run.js +506 -0
  140. package/lib/repair-run.js.map +1 -0
  141. package/lib/repair.d.ts +208 -0
  142. package/lib/repair.js +357 -0
  143. package/lib/repair.js.map +1 -0
  144. package/lib/repo.d.ts +78 -0
  145. package/lib/repo.js +184 -0
  146. package/lib/repo.js.map +1 -0
  147. package/lib/rules-commands.d.ts +46 -0
  148. package/lib/rules-commands.js +379 -0
  149. package/lib/rules-commands.js.map +1 -0
  150. package/lib/rules.d.ts +267 -0
  151. package/lib/rules.js +478 -0
  152. package/lib/rules.js.map +1 -0
  153. package/lib/save-core.d.ts +72 -0
  154. package/lib/save-core.js +220 -0
  155. package/lib/save-core.js.map +1 -0
  156. package/lib/search.d.ts +112 -0
  157. package/lib/search.js +282 -0
  158. package/lib/search.js.map +1 -0
  159. package/lib/session-rules.d.ts +222 -0
  160. package/lib/session-rules.js +454 -0
  161. package/lib/session-rules.js.map +1 -0
  162. package/lib/signature.d.ts +45 -0
  163. package/lib/signature.js +199 -0
  164. package/lib/signature.js.map +1 -0
  165. package/lib/store.d.ts +156 -0
  166. package/lib/store.js +368 -0
  167. package/lib/store.js.map +1 -0
  168. package/lib/sync.d.ts +220 -0
  169. package/lib/sync.js +810 -0
  170. package/lib/sync.js.map +1 -0
  171. package/lib/tools.d.ts +113 -0
  172. package/lib/tools.js +1090 -0
  173. package/lib/tools.js.map +1 -0
  174. package/lib/treedx/client.d.ts +57 -0
  175. package/lib/treedx/client.js +82 -0
  176. package/lib/treedx/client.js.map +1 -0
  177. package/lib/treedx/provider.d.ts +39 -0
  178. package/lib/treedx/provider.js +479 -0
  179. package/lib/treedx/provider.js.map +1 -0
  180. package/lib/treedx/state.d.ts +27 -0
  181. package/lib/treedx/state.js +65 -0
  182. package/lib/treedx/state.js.map +1 -0
  183. package/lib/types.d.ts +210 -0
  184. package/lib/types.js +31 -0
  185. package/lib/types.js.map +1 -0
  186. package/lib/version.d.ts +9 -0
  187. package/lib/version.js +10 -0
  188. package/lib/version.js.map +1 -0
  189. package/lib/vocabulary.d.ts +41 -0
  190. package/lib/vocabulary.js +118 -0
  191. package/lib/vocabulary.js.map +1 -0
  192. package/lib/warnings.d.ts +10 -0
  193. package/lib/warnings.js +18 -0
  194. package/lib/warnings.js.map +1 -0
  195. package/package.json +151 -3
@@ -0,0 +1,379 @@
1
+ /**
2
+ * P3 S2 — the /chapters-rule command family (record §7.2, §7.9), as a pure-ish
3
+ * module so the lifecycle is testable without a commands service.
4
+ *
5
+ * /chapters-rule add <category> <text…> # the PROJECT tier only
6
+ * /chapters-rule list [--all | --proposed | --category <c> | --scope <t>]
7
+ * /chapters-rule active # what a rebuilt head will show
8
+ * /chapters-rule approve <id> | revoke <id>
9
+ * /chapters-rule pin <id> | unpin <id>
10
+ * /chapters-rule conflicts [--model <route>]
11
+ *
12
+ * Identity: '<harnessId>/<NNN>'. Files are write-once; status is a per-machine
13
+ * curation fact (§15 amendment) appended to the mirror's own edits/<harness>/
14
+ * curation.jsonl and pushed immediately (offline-safe: the local commit still
15
+ * happens; push coalesces later). Commands never enter the model context.
16
+ *
17
+ * #50: the session tier joins the SAME surface (§7.1) — same ids, same files,
18
+ * same list — with two differences that are load-bearing. It has no `approve`
19
+ * (activation derives from the ancestor path, §7.5), and `revoke` is the one
20
+ * fact it does write. Pinning rides a fact too: rewriting a write-once file to
21
+ * pin it would be the first sanctioned file-edit in this store, and the append-
22
+ * only rule has no exceptions.
23
+ */
24
+ import fs from 'node:fs';
25
+ import path from 'node:path';
26
+ import { renderRuleFile, rulePath, collectMirrorRules, appendRuleStatusFact, appendRulePinFact, loadRulePins, collectStoreRules, loadRuleStatusFacts, sessionRuleActive, buildRulesSection, revokedRuleIds, parseRuleFile, } from "./rules.js";
27
+ import { resolveStoreRoot } from "./store.js";
28
+ const HELP = 'usage: /chapters-rule add <category> <text> | list [--all|--proposed|--category <c>|--scope project|session] | view <id> | active | approve <id> | revoke <id> | pin <id> | unpin <id> | model [<provider/model|clear>] | conflicts';
29
+ export async function rulesCommand(io, args) {
30
+ const parts = args.trim().split(/\s+/).filter((p) => p.length > 0);
31
+ const verb = parts[0] ?? 'help';
32
+ const cwd = io.cwd();
33
+ const project = io.projectFor(cwd);
34
+ if (project === undefined) {
35
+ return { kind: 'error', text: 'no knowledge repository is linked for this workspace — link one with /chapters-link first (rules are shared state)' };
36
+ }
37
+ const mirror = io.mirrorDir(cwd);
38
+ const storeDir = resolveStoreRoot(cwd, io.storeRoot);
39
+ const pins = loadRulePins(mirror, io.harnessId);
40
+ // every rule known to THIS machine: mirror files (all authors) ∪ own domain
41
+ // records (pre-sync) ∪ the LOCAL session tier (§7.5 — those never reach the
42
+ // pool, so the mirror walk cannot see them)
43
+ const known = async () => {
44
+ const byId = new Map();
45
+ const ancestorSet = io.ancestors !== undefined ? await io.ancestors() : new Set();
46
+ const lineageTruncated = io.ancestryTruncated !== undefined && await io.ancestryTruncated();
47
+ const statusFacts = loadRuleStatusFacts(mirror, io.harnessId);
48
+ // §7.5: `revoke` is the one fact the session tier writes, and it lives in
49
+ // curation.jsonl — the FILE stays `proposed` forever (write-once). Reading
50
+ // file status instead of facts would keep a revoked rule rendering.
51
+ const revokedHere = revokedRuleIds(mirror, io.harnessId);
52
+ for (const r of collectMirrorRules(mirror, project.projectKey, io.harnessId)) {
53
+ byId.set(r.id, {
54
+ id: r.id, scope: r.scope === 'session' ? 'session' : 'project', category: r.category, title: r.title,
55
+ status: r.status, pinned: r.pinned || pins.has(r.id), body: r.body, sourceSession: '',
56
+ });
57
+ }
58
+ for (const [, rec] of io.store.rules()) {
59
+ if (rec.projectKey !== project.projectKey)
60
+ continue;
61
+ const prev = byId.get(rec.id);
62
+ byId.set(rec.id, {
63
+ id: rec.id, scope: (rec.scope ?? 'project') === 'session' ? 'session' : 'project', category: rec.category, title: rec.title,
64
+ status: prev?.status ?? 'proposed', pinned: prev?.pinned === true || pins.has(rec.id), body: prev?.body ?? '',
65
+ sourceSession: io.sourceSession ?? 'manual',
66
+ });
67
+ }
68
+ // the session tier comes off disk, activated by the ancestor predicate
69
+ for (const r of collectStoreRules(storeDir, io.harnessId, statusFacts)) {
70
+ if (r.scope !== 'session')
71
+ continue;
72
+ byId.set(r.id, {
73
+ id: r.id, scope: 'session', category: r.category, title: r.title, status: r.status,
74
+ active: sessionRuleActive(r, { ancestorSessions: ancestorSet, revoked: revokedHere, facts: statusFacts }),
75
+ pinned: r.pinned || pins.has(r.id), body: r.body, sourceSession: r.session,
76
+ reviewOnly: r.reviewOnly, basis: r.basis,
77
+ });
78
+ }
79
+ return [...byId.values()].sort((a, b) => (a.scope < b.scope ? -1 : a.scope > b.scope ? 1 : a.id < b.id ? -1 : 1));
80
+ };
81
+ if (verb === 'add') {
82
+ const category = parts[1];
83
+ const body = parts.slice(2).join(' ');
84
+ if (category === undefined || body.length < 10) {
85
+ return { kind: 'error', text: `add needs a category and at least a sentence of rule text. ${HELP}` };
86
+ }
87
+ let number = 1;
88
+ for (const [id] of io.store.rules()) {
89
+ const m = new RegExp(`^${io.harnessId}/(\\d{3})$`).exec(id);
90
+ if (m !== null)
91
+ number = Math.max(number, Number(m[1]) + 1);
92
+ }
93
+ const title = body.split(/[.!?\n]/)[0].trim().slice(0, 60);
94
+ let rel = rulePath(io.storeRoot, io.harnessId, number, category, title);
95
+ let abs = path.isAbsolute(rel) ? rel : path.join(cwd, rel);
96
+ // The domain may be fresh while disk is not (e2e rebuilds the home every
97
+ // boot; per-machine rule files are write-once): walk past any number the
98
+ // disk already holds rather than refuse. Refusing was the r39-era e2e
99
+ // deadlock — add could never land again in a dirty workspace. The walk is
100
+ // keyed on the NUMBER PREFIX, not the exact path: a disk ghost of a dead
101
+ // rule (its title killed, its domain record gone) still owns its number —
102
+ // reusing that number for a different title would mint two files sharing
103
+ // one id (approve-by-id would be ambiguous).
104
+ const rulesDir = path.join(storeDir, 'rules', io.harnessId);
105
+ const numberTaken = (n) => {
106
+ const prefix = `${String(n).padStart(3, '0')}-`;
107
+ try {
108
+ return fs.readdirSync(rulesDir).some((f) => f.startsWith(prefix));
109
+ }
110
+ catch {
111
+ return false;
112
+ }
113
+ };
114
+ for (let hops = 0; (numberTaken(number) || fs.existsSync(abs)) && hops < 200; hops += 1) {
115
+ number += 1;
116
+ rel = rulePath(io.storeRoot, io.harnessId, number, category, title);
117
+ abs = path.isAbsolute(rel) ? rel : path.join(cwd, rel);
118
+ }
119
+ if (numberTaken(number) || fs.existsSync(abs))
120
+ return { kind: 'error', text: `refusing to overwrite ${rel} (rule files are write-once; 200 number slots exhausted?)` };
121
+ const id = `${io.harnessId}/${String(number).padStart(3, '0')}`;
122
+ const rec = {
123
+ id, projectKey: project.projectKey, number, path: rel,
124
+ category: category.toLowerCase(), title, sourceSession: io.sourceSession ?? 'manual', at: io.now().toISOString(),
125
+ };
126
+ try {
127
+ fs.mkdirSync(path.dirname(abs), { recursive: true });
128
+ fs.writeFileSync(abs, renderRuleFile({ number, category: rec.category, title, sourceSession: io.sourceSession ?? 'manual', at: rec.at, body: body + '\n' }));
129
+ await io.store.putRule(id, rec);
130
+ }
131
+ catch (error) {
132
+ return { kind: 'error', text: `rule add failed: ${String(error?.message ?? error).slice(0, 160)}` };
133
+ }
134
+ await io.syncNow(cwd);
135
+ return { kind: 'success', text: `rule ${id} proposed (PROJECT tier, category ${rec.category}) — approve it into this machine's core set with: /chapters-rule approve ${id}. Session rules are not authored here: they are captured from your own messages (ADD RULE:), and /chapters-rule list --scope session shows them.` };
136
+ }
137
+ if (verb === 'list') {
138
+ const all = parts.includes('--all');
139
+ const proposedOnly = parts.includes('--proposed');
140
+ const catIdx = parts.indexOf('--category');
141
+ const cat = catIdx > -1 ? (parts[catIdx + 1] ?? '').toLowerCase() : '';
142
+ const scopeIdx = parts.indexOf('--scope');
143
+ const scope = scopeIdx > -1 ? (parts[scopeIdx + 1] ?? 'all') : 'all';
144
+ if (scope !== 'all' && scope !== 'project' && scope !== 'session') {
145
+ return { kind: 'error', text: `--scope wants project, session or all (got ${scope})` };
146
+ }
147
+ let rows = await known();
148
+ if (scope !== 'all')
149
+ rows = rows.filter((r) => r.scope === scope);
150
+ if (cat !== '')
151
+ rows = rows.filter((r) => r.category === cat);
152
+ if (!all && !proposedOnly)
153
+ rows = rows.filter((r) => r.status !== 'revoked');
154
+ if (proposedOnly)
155
+ rows = rows.filter((r) => r.status === 'proposed');
156
+ if (rows.length === 0)
157
+ return { kind: 'success', text: scope === 'all' ? 'no rules match' : `no ${scope}-tier rules match` };
158
+ const text = rows.map((r) => `${r.id.padEnd(12)} ${r.scope.padEnd(8)} ${(r.scope === 'session' ? (r.status === 'revoked' ? 'revoked' : (r.active === true ? 'active' : (r.reviewOnly === true ? 'review ' : 'inactive'))) : r.status).padEnd(10)} ${(r.pinned ? 'pin ' : ' ')}${r.category.padEnd(14)} ${r.title}`).join('\n');
159
+ return { kind: 'success', text: `id scope status pin category title\n${text}` };
160
+ }
161
+ // #174: `view` is the reading surface `approve` was missing. `list` shows titles, and a title is the
162
+ // first sentence cut at 60 chars — enough to find a rule, never enough to judge one. Everything here
163
+ // renders in full: the body is the POINT (never truncated — the hard rule is "refuse with numbers",
164
+ // and a reading verb that clips is neither), plus identity, this machine's effective status, and the
165
+ // session-tier warrant (basis/reviewOnly/active) the approve decision is supposed to weigh.
166
+ if (verb === 'view') {
167
+ let id = parts[1] ?? '';
168
+ if (id === '')
169
+ return { kind: 'error', text: `view needs a rule id (see /chapters-rule list). ${HELP}` };
170
+ if (!id.includes('/'))
171
+ id = `${io.harnessId}/${id.padStart(3, '0')}`;
172
+ const rows = await known();
173
+ const row = rows.find((r) => r.id === id);
174
+ if (row === undefined)
175
+ return { kind: 'error', text: `no rule ${id} in project ${project.slug} — unknown id (list shows what exists)` };
176
+ const rec = io.store.getRule(id);
177
+ // Locate the file for the fields the flattened row does not carry (authoredAt, derivedFrom,
178
+ // chapter): domain-record path first, then the mirror's relPath, then the store's number prefix.
179
+ // A rule known ONLY from the registry (pre-sync, no file here) must then SAY its body is absent —
180
+ // rendering an empty string as if it were the rule is the lie this verb exists to prevent.
181
+ const num = id.split('/')[1] ?? '';
182
+ let fileText = null;
183
+ let shownPath = rec?.path ?? '';
184
+ const tryRead = (abs) => {
185
+ if (fileText !== null)
186
+ return;
187
+ try {
188
+ fileText = fs.readFileSync(abs, 'utf8');
189
+ if (shownPath === '')
190
+ shownPath = abs;
191
+ }
192
+ catch { /* next candidate */ }
193
+ };
194
+ if (shownPath !== '')
195
+ tryRead(path.isAbsolute(shownPath) ? shownPath : path.join(cwd, shownPath));
196
+ if (fileText === null) {
197
+ const mir = collectMirrorRules(mirror, project.projectKey, io.harnessId).find((r) => r.id === id);
198
+ if (mir !== undefined) {
199
+ tryRead(path.join(mirror, mir.relPath));
200
+ if (shownPath === '')
201
+ shownPath = mir.relPath;
202
+ }
203
+ }
204
+ if (fileText === null) {
205
+ try {
206
+ const hit = fs.readdirSync(path.join(storeDir, 'rules', io.harnessId)).find((f) => f.startsWith(`${num}-`));
207
+ if (hit !== undefined)
208
+ tryRead(path.join(storeDir, 'rules', io.harnessId, hit));
209
+ }
210
+ catch { /* no store rules dir on this machine */ }
211
+ }
212
+ const parsed = fileText !== null ? parseRuleFile(fileText) : null;
213
+ const authoredAt = rec?.at ?? (/^authoredAt: "?(.+?)"?\s*$/m.exec(fileText ?? '')?.[1] ?? '');
214
+ const source = row.sourceSession !== '' ? row.sourceSession : (rec?.sourceSession ?? parsed?.sourceSession ?? '');
215
+ const basis = row.basis ?? (parsed !== null && parsed.basis !== 'human' ? parsed.basis : undefined);
216
+ const derivedFrom = rec?.derivedFrom ?? (parsed !== null && parsed.derivedFrom !== 'human' ? parsed.derivedFrom : undefined);
217
+ const chapter = rec?.chapter ?? (parsed !== null && parsed.chapter > 0 ? parsed.chapter : undefined);
218
+ let body = row.body.trim() !== '' ? row.body.trim() : (parsed?.body.trim() ?? '');
219
+ const lines = [`rule ${row.id} — ${row.scope} tier`];
220
+ lines.push(`category: ${row.category}`);
221
+ lines.push(`title: ${row.title}`);
222
+ if (row.scope === 'session') {
223
+ lines.push(`status: ${row.status === 'revoked' ? 'revoked (on this machine)' : row.reviewOnly === true ? `proposed — held for REVIEW (inert here until: /chapters-rule approve ${row.id})` : row.status}`);
224
+ lines.push(`active: ${row.active === true ? 'yes (binds this session tree, its continuations, and its subagents)' : 'no'}`);
225
+ }
226
+ else {
227
+ lines.push(`status: ${row.status} (on THIS machine — other machines curate independently)`);
228
+ }
229
+ if (basis !== undefined)
230
+ lines.push(`basis: ${basis}${basis === 'inferred' ? ' — the model wrote this; you never said it' : ''}`);
231
+ lines.push(`pinned: ${row.pinned ? 'yes (renders into every rebuilt head regardless of caps)' : 'no'}`);
232
+ if (derivedFrom !== undefined || chapter !== undefined) {
233
+ lines.push(`derived: ${derivedFrom ?? 'model'}${chapter !== undefined ? `, mined from chapter ${String(chapter)}` : ''}`);
234
+ }
235
+ lines.push(`authored: ${authoredAt === '' ? '(timestamp not on this machine)' : authoredAt}${source === '' ? '' : ` from ${source}`}`);
236
+ if (shownPath !== '')
237
+ lines.push(`path: ${shownPath}`);
238
+ lines.push('');
239
+ lines.push(body === '' ? 'body: NOT ON THIS MACHINE — the rule is known from the registry, but its file has not synced here. Run /chapters-status (sync) or view it on the machine that authored it; nothing was hidden, there is nothing local to show.' : body);
240
+ lines.push('');
241
+ lines.push(`actions: /chapters-rule approve ${row.id} | revoke ${row.id} | pin ${row.id} — approve/revoke are THIS machine's curation facts; the file bytes are write-once`);
242
+ return { kind: 'success', text: lines.join('\n') };
243
+ }
244
+ if (verb === 'active') {
245
+ const rows = await known();
246
+ const ancestorsNote = io.ancestors === undefined ? ' (no session context — the session tier is reported unresolved, never guessed)' : '';
247
+ if (io.harnessId === undefined)
248
+ return { kind: 'error', text: 'rules surface not configured (harnessId absent)' };
249
+ // #52: one walk, two answers — the set the block renders with and whether it
250
+ // had to give up. Both come from the SAME ancestry the doors use.
251
+ const activeAncestors = io.ancestors !== undefined ? await io.ancestors() : new Set();
252
+ const lineageTruncated = io.ancestryTruncated !== undefined && await io.ancestryTruncated();
253
+ const built = buildRulesSection(mirror, {
254
+ projectKey: project.projectKey, harnessId: io.harnessId,
255
+ budgetTokens: io.budgetTokens ?? 1200,
256
+ storeDir,
257
+ ...(io.ancestors !== undefined ? { ancestorSessions: activeAncestors } : { ancestorSessions: new Set() }),
258
+ ...(lineageTruncated ? { lineageTruncated: true } : {}),
259
+ ...(io.projectCap !== undefined ? { projectCap: io.projectCap } : {}),
260
+ ...(io.sessionCap !== undefined ? { sessionCap: io.sessionCap } : {}),
261
+ });
262
+ const head = `project tier: ${rows.filter((r) => r.scope === 'project' && r.status === 'core').length} approved-core on THIS machine, ${rows.filter((r) => r.scope === 'project' && r.status === 'proposed').length} proposed\n`
263
+ + `session tier: ${rows.filter((r) => r.scope === 'session' && r.active === true).length} active for this session tree`
264
+ + ` (${rows.filter((r) => r.scope === 'session' && (r.basis ?? '') === 'inferred').length} of them inferred by the model, never said by you)`
265
+ + `\nmining posture: ${io.autoActivate === false ? 'REVIEW — mined rules stay inert until you approve them' : 'AUTO — mined rules govern on arrival (revoke is the undo)'}${ancestorsNote}\n`
266
+ + `activation: a session rule reaches its own tree, its continuation children, and its delegated subagents (#52); a parent never inherits from a child\n`
267
+ + `${lineageTruncated ? 'LINEAGE TRUNCATED: the ancestry walk hit its cap, so some ancestors were not consulted\n' : ''}\n`;
268
+ if (built.kind === 'refusal')
269
+ return { kind: 'success', text: `${head}RENDERED: nothing — ${built.reason}` };
270
+ if (built.kind === 'none')
271
+ return { kind: 'success', text: `${head}RENDERED: zero rule bytes (an empty tier injects NOTHING — the tape-safe shape)` };
272
+ return {
273
+ kind: 'success',
274
+ text: `${head}RENDERED: ${built.shown.project} project + ${built.shown.session} session rule(s), `
275
+ + `withheld ${built.withheld.project} + ${built.withheld.session}; tokens ${built.tokens}\n\n${built.text}`,
276
+ };
277
+ }
278
+ if (verb === 'approve' || verb === 'revoke') {
279
+ let id = parts[1] ?? '';
280
+ if (id === '')
281
+ return { kind: 'error', text: `${verb} needs a rule id (see /chapters-rule list)` };
282
+ if (!id.includes('/'))
283
+ id = `${io.harnessId}/${id.padStart(3, '0')}`;
284
+ const rows = await known();
285
+ const row = rows.find((r) => r.id === id);
286
+ if (row === undefined)
287
+ return { kind: 'error', text: `no rule ${id} in project ${project.slug} — unknown id (list shows what exists)` };
288
+ // §7.5: a SUGGESTED model rule is exactly what approve is FOR; a marker rule
289
+ // is already active, so approving it would be theatre.
290
+ if (verb === 'approve' && row.scope === 'session' && row.reviewOnly !== true) {
291
+ // §7.1: the session tier does not approve. Promoting it to the shared tier
292
+ // is the human act, and it is a NEW rule file with its own id (§1.3).
293
+ return { kind: 'error', text: `${id} is a SESSION rule already active for this session tree — there is nothing to approve. To make it bind your team: /chapters-rule add ${row.category} "${row.body.replace(/\s+/g, ' ').slice(0, 160)}"` };
294
+ }
295
+ try {
296
+ // 'approve' is the verb; 'core' is the status — conflating them writes a
297
+ // fact no resolver recognizes (caught by unit test)
298
+ appendRuleStatusFact(mirror, io.harnessId, { rule: id, status: verb === 'approve' ? 'core' : 'revoked', at: io.now().toISOString() });
299
+ }
300
+ catch (error) {
301
+ return { kind: 'error', text: `${verb} failed: ${String(error?.message ?? error).slice(0, 160)}` };
302
+ }
303
+ await io.syncNow(cwd);
304
+ return { kind: 'success', text: verb === 'approve'
305
+ ? row.scope === 'session'
306
+ ? `mined rule ${id} approved — it now governs this session tree (and stays LOCAL: session rules are never staged to the pool)`
307
+ : `rule ${id} is CORE on THIS machine (other machines approve independently) — it will render into continuations from this workspace`
308
+ : row.scope === 'session'
309
+ ? `session rule ${id} revoked on this machine — out of every head in this tree, file bytes untouched (write-once)`
310
+ : `rule ${id} revoked on this machine (out of the notice, still in the repo)` };
311
+ }
312
+ if (verb === 'pin' || verb === 'unpin') {
313
+ let id = parts[1] ?? '';
314
+ if (id === '')
315
+ return { kind: 'error', text: `${verb} needs a rule id (see /chapters-rule list)` };
316
+ if (!id.includes('/'))
317
+ id = `${io.harnessId}/${id.padStart(3, '0')}`;
318
+ const rows = await known();
319
+ if (!rows.some((r) => r.id === id))
320
+ return { kind: 'error', text: `no rule ${id} in project ${project.slug} — unknown id` };
321
+ try {
322
+ // §7.4: a pin is a per-machine FACT, never a rewrite of a write-once file.
323
+ appendRulePinFact(mirror, io.harnessId, { rule: id, pinned: verb === 'pin', at: io.now().toISOString() });
324
+ }
325
+ catch (error) {
326
+ return { kind: 'error', text: `${verb} failed: ${String(error?.message ?? error).slice(0, 160)}` };
327
+ }
328
+ await io.syncNow(cwd);
329
+ return { kind: 'success', text: verb === 'pin'
330
+ ? `rule ${id} pinned on this machine — it is rendered into every rebuilt head regardless of caps or topicality (ground rules are OLD; ranking would evict them)`
331
+ : `rule ${id} unpinned on this machine — it now competes for a capped slot by relevance` };
332
+ }
333
+ const depsRoute = () => {
334
+ const cur = io.settings?.get('enrichment.route') ?? '';
335
+ return cur === '' ? 'the conversation route' : `the ${cur} route`;
336
+ };
337
+ if (verb === 'model') {
338
+ // §7.5: rule mining may deserve a better model than annotation does. Persisted
339
+ // in the shared settings table so both planes see it, exactly like the
340
+ // enrichment override; `clear` falls back to riding the annotation call.
341
+ if (io.settings === undefined)
342
+ return { kind: 'error', text: 'the settings table is unavailable on this plane' };
343
+ const arg = parts[1] ?? '';
344
+ if (arg === '') {
345
+ const cur = io.settings.get('rules.model') ?? '';
346
+ return { kind: 'success', text: cur === ''
347
+ ? `rules.model: (unset) — mining rides the enrichment call (${depsRoute()}), costing no extra inference`
348
+ : `rules.model: ${cur} — one extra bounded call per chapter` };
349
+ }
350
+ try {
351
+ await io.settings.put('rules.model', arg === 'clear' ? '' : arg);
352
+ }
353
+ catch (error) {
354
+ return { kind: 'error', text: `model failed: ${String(error?.message ?? error).slice(0, 160)}` };
355
+ }
356
+ return { kind: 'success', text: arg === 'clear'
357
+ ? 'rules.model cleared — mining rides the enrichment call again'
358
+ : `rules.model set to ${arg} — each chapter now costs one extra bounded call to mine its rules` };
359
+ }
360
+ if (verb === 'conflicts') {
361
+ if (io.ask === undefined)
362
+ return { kind: 'error', text: 'conflicts needs the conversation model route (not available on this plane)' };
363
+ const rows = (await known()).filter((r) => (r.scope === 'project' && r.status === 'core') || r.active === true);
364
+ if (rows.length < 2)
365
+ return { kind: 'success', text: `only ${rows.length} active rule(s) — nothing to compare yet` };
366
+ const listing = rows.map((r) => `[${r.id}] (${r.scope}/${r.category}) ${r.body.replace(/\s+/g, ' ')}`).join('\n');
367
+ const prompt = 'These are the rules currently governing one agent session. Report ONLY genuine contradictions — pairs where following one means breaking the other — as lines "CONFLICT: <idA> vs <idB> — <one sentence>". Say "NO CONFLICTS" if there are none. Do not rewrite or merge any rule; do not add advice.\n\n' + listing;
368
+ try {
369
+ const answer = await io.ask(prompt);
370
+ const found = /CONFLICT:/i.test(answer);
371
+ return { kind: 'success', text: `${found ? 'conflicts reported (nothing was changed — rule files are write-once; resolve with approve/revoke):' : 'no contradictions reported (nothing was changed):'}\n${answer.trim().slice(0, 2000)}` };
372
+ }
373
+ catch (error) {
374
+ return { kind: 'error', text: `conflicts call failed: ${String(error?.message ?? error).slice(0, 160)}` };
375
+ }
376
+ }
377
+ return { kind: 'success', text: HELP };
378
+ }
379
+ //# sourceMappingURL=rules-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules-commands.js","sourceRoot":"","sources":["../src/rules-commands.ts"],"names":[],"mappings":"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"}