create-egregore 0.19.21 → 0.19.23

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 (229) hide show
  1. package/assets/egregore-launcher.js +29 -3
  2. package/bin/cli.js +3 -4
  3. package/lib/auth.js +3 -4
  4. package/lib/path-lookup.js +59 -0
  5. package/lib/setup.js +52 -6
  6. package/package.json +2 -2
  7. package/runtime/codex/.claude/context/notification-consent.md +66 -0
  8. package/runtime/codex/.codex/hooks/branch-guard.js +14 -3
  9. package/runtime/codex/.codex/skills/add/SKILL.md +8 -4
  10. package/runtime/codex/.codex/skills/announce/SKILL.md +21 -8
  11. package/runtime/codex/.codex/skills/answer/SKILL.md +8 -4
  12. package/runtime/codex/.codex/skills/archive/SKILL.md +8 -4
  13. package/runtime/codex/.codex/skills/ask/SKILL.md +14 -6
  14. package/runtime/codex/.codex/skills/audit/SKILL.md +29 -0
  15. package/runtime/codex/.codex/skills/autosave/SKILL.md +29 -0
  16. package/runtime/codex/.codex/skills/branch/SKILL.md +8 -4
  17. package/runtime/codex/.codex/skills/checkup/SKILL.md +8 -4
  18. package/runtime/codex/.codex/skills/commit/SKILL.md +8 -4
  19. package/runtime/codex/.codex/skills/contribute/SKILL.md +8 -4
  20. package/runtime/codex/.codex/skills/dark-mode/SKILL.md +8 -4
  21. package/runtime/codex/.codex/skills/delete-user/SKILL.md +8 -4
  22. package/runtime/codex/.codex/skills/demo-mode/SKILL.md +29 -0
  23. package/runtime/codex/.codex/skills/deploy-bridge/SKILL.md +8 -4
  24. package/runtime/codex/.codex/skills/design/SKILL.md +29 -0
  25. package/runtime/codex/.codex/skills/egregore-voice/SKILL.md +8 -4
  26. package/runtime/codex/.codex/skills/emissary/SKILL.md +8 -4
  27. package/runtime/codex/.codex/skills/env/SKILL.md +8 -4
  28. package/runtime/codex/.codex/skills/handoff/SKILL.md +81 -10
  29. package/runtime/codex/.codex/skills/harvest/QUESTION_PALETTE.md +76 -0
  30. package/runtime/codex/.codex/skills/harvest/SKILL.md +30 -6
  31. package/runtime/codex/.codex/skills/ingest/SKILL.md +8 -4
  32. package/runtime/codex/.codex/skills/ingest-google/SKILL.md +8 -4
  33. package/runtime/codex/.codex/skills/ingest-user-interview/SKILL.md +8 -4
  34. package/runtime/codex/.codex/skills/invite/SKILL.md +6 -2
  35. package/runtime/codex/.codex/skills/issue/SKILL.md +8 -4
  36. package/runtime/codex/.codex/skills/me/SKILL.md +8 -4
  37. package/runtime/codex/.codex/skills/meeting/SKILL.md +8 -4
  38. package/runtime/codex/.codex/skills/minion/SKILL.md +8 -4
  39. package/runtime/codex/.codex/skills/mock/SKILL.md +29 -0
  40. package/runtime/codex/.codex/skills/note/SKILL.md +8 -4
  41. package/runtime/codex/.codex/skills/onboarding/SKILL.md +8 -4
  42. package/runtime/codex/.codex/skills/pr/SKILL.md +8 -4
  43. package/runtime/codex/.codex/skills/product-voice/SKILL.md +29 -0
  44. package/runtime/codex/.codex/skills/project/SKILL.md +8 -4
  45. package/runtime/codex/.codex/skills/pull/SKILL.md +8 -4
  46. package/runtime/codex/.codex/skills/push/SKILL.md +8 -4
  47. package/runtime/codex/.codex/skills/quest/SKILL.md +6 -3
  48. package/runtime/codex/.codex/skills/quest-suggest/SKILL.md +8 -4
  49. package/runtime/codex/.codex/skills/reflect/SKILL.md +8 -4
  50. package/runtime/codex/.codex/skills/review-pr/SKILL.md +8 -4
  51. package/runtime/codex/.codex/skills/save/SKILL.md +6 -4
  52. package/runtime/codex/.codex/skills/scroll/SKILL.md +92 -23
  53. package/runtime/codex/.codex/skills/scroll/assets/shell.html +381 -52
  54. package/runtime/codex/.codex/skills/session-view/SKILL.md +8 -4
  55. package/runtime/codex/.codex/skills/setup/SKILL.md +8 -4
  56. package/runtime/codex/.codex/skills/summon/SKILL.md +8 -4
  57. package/runtime/codex/.codex/skills/sync-repos/SKILL.md +8 -4
  58. package/runtime/codex/.codex/skills/task/SKILL.md +9 -5
  59. package/runtime/codex/.codex/skills/teams-connect/SKILL.md +29 -0
  60. package/runtime/codex/.codex/skills/telegram-connect/SKILL.md +8 -4
  61. package/runtime/codex/.codex/skills/telemetry/SKILL.md +8 -4
  62. package/runtime/codex/.codex/skills/test/SKILL.md +8 -4
  63. package/runtime/codex/.codex/skills/thread/SKILL.md +8 -4
  64. package/runtime/codex/.codex/skills/todo/SKILL.md +8 -4
  65. package/runtime/codex/.codex/skills/tui-design/SKILL.md +8 -4
  66. package/runtime/codex/.codex/skills/tutorial/SKILL.md +8 -4
  67. package/runtime/codex/.codex/skills/update/SKILL.md +8 -4
  68. package/runtime/codex/.codex/skills/visual-explain/SKILL.md +8 -4
  69. package/runtime/codex/.codex/spec-manifest.json +4 -4
  70. package/runtime/codex/AGENTS.md +36 -14
  71. package/runtime/codex/bin/activity-data.sh +1 -1
  72. package/runtime/codex/bin/agent.sh +38 -19
  73. package/runtime/codex/bin/attendant.sh +8 -2
  74. package/runtime/codex/bin/autosave.sh +1 -1
  75. package/runtime/codex/bin/capture-reconcile.sh +8 -6
  76. package/runtime/codex/bin/capture-run.sh +1 -1
  77. package/runtime/codex/bin/codex-install-skills.sh +1 -1
  78. package/runtime/codex/bin/codex-render-spec.mjs +12 -5
  79. package/runtime/codex/bin/codex-session-start.sh +1 -1
  80. package/runtime/codex/bin/codex-skill-render.mjs +5 -0
  81. package/runtime/codex/bin/codex-sync-skills.sh +9 -5
  82. package/runtime/codex/bin/dashboard-data.sh +1 -1
  83. package/runtime/codex/bin/graph-batch.sh +1 -1
  84. package/runtime/codex/bin/graph-op.sh +1 -1
  85. package/runtime/codex/bin/graph-wal.sh +1 -1
  86. package/runtime/codex/bin/graph.sh +1 -1
  87. package/runtime/codex/bin/handoff-pr-backfill.sh +1 -1
  88. package/runtime/codex/bin/handoff-run.sh +117 -119
  89. package/runtime/codex/bin/handoff-save-egregore.sh +62 -32
  90. package/runtime/codex/bin/index-handoff.sh +3 -2
  91. package/runtime/codex/bin/ingest-graph.sh +1 -1
  92. package/runtime/codex/bin/ingest.sh +1 -1
  93. package/runtime/codex/bin/lib/artifact-id.sh +1 -1
  94. package/runtime/codex/bin/lib/config.sh +56 -20
  95. package/runtime/codex/bin/lib/context.sh +7 -1
  96. package/runtime/codex/bin/lib/ensure-develop.sh +1 -1
  97. package/runtime/codex/bin/lib/git-sync.sh +145 -59
  98. package/runtime/codex/bin/lib/greeting.sh +14 -0
  99. package/runtime/codex/bin/lib/hash.sh +1 -1
  100. package/runtime/codex/bin/lib/noncode.sh +1 -1
  101. package/runtime/codex/bin/lib/time.sh +1 -1
  102. package/runtime/codex/bin/notify.sh +492 -153
  103. package/runtime/codex/bin/person.sh +1 -1
  104. package/runtime/codex/bin/publish-artifact.sh +64 -8
  105. package/runtime/codex/bin/publish-references.sh +1 -1
  106. package/runtime/codex/bin/repo-state.sh +7 -10
  107. package/runtime/codex/bin/search.sh +1 -1
  108. package/runtime/codex/bin/session-autosave.sh +1 -1
  109. package/runtime/codex/bin/session-log.sh +1 -1
  110. package/runtime/codex/bin/settings.sh +32 -2
  111. package/runtime/codex/bin/telemetry.sh +1 -1
  112. package/runtime/codex/bin/worktree-create.sh +14 -4
  113. package/runtime/codex/bin/worktree-remove.sh +1 -1
  114. package/runtime/codex/bin/worktree.sh +1 -1
  115. package/runtime/codex/manifest.json +18 -1
  116. package/runtime/pi/.claude/context/notification-consent.md +66 -0
  117. package/runtime/pi/.codex/hooks/branch-guard.js +14 -3
  118. package/runtime/pi/.codex/skills/add/SKILL.md +8 -4
  119. package/runtime/pi/.codex/skills/announce/SKILL.md +21 -8
  120. package/runtime/pi/.codex/skills/answer/SKILL.md +8 -4
  121. package/runtime/pi/.codex/skills/archive/SKILL.md +8 -4
  122. package/runtime/pi/.codex/skills/ask/SKILL.md +14 -6
  123. package/runtime/pi/.codex/skills/audit/SKILL.md +29 -0
  124. package/runtime/pi/.codex/skills/autosave/SKILL.md +29 -0
  125. package/runtime/pi/.codex/skills/branch/SKILL.md +8 -4
  126. package/runtime/pi/.codex/skills/checkup/SKILL.md +8 -4
  127. package/runtime/pi/.codex/skills/commit/SKILL.md +8 -4
  128. package/runtime/pi/.codex/skills/contribute/SKILL.md +8 -4
  129. package/runtime/pi/.codex/skills/dark-mode/SKILL.md +8 -4
  130. package/runtime/pi/.codex/skills/delete-user/SKILL.md +8 -4
  131. package/runtime/pi/.codex/skills/demo-mode/SKILL.md +29 -0
  132. package/runtime/pi/.codex/skills/deploy-bridge/SKILL.md +8 -4
  133. package/runtime/pi/.codex/skills/design/SKILL.md +29 -0
  134. package/runtime/pi/.codex/skills/egregore-voice/SKILL.md +8 -4
  135. package/runtime/pi/.codex/skills/emissary/SKILL.md +8 -4
  136. package/runtime/pi/.codex/skills/env/SKILL.md +8 -4
  137. package/runtime/pi/.codex/skills/handoff/SKILL.md +81 -10
  138. package/runtime/pi/.codex/skills/harvest/QUESTION_PALETTE.md +76 -0
  139. package/runtime/pi/.codex/skills/harvest/SKILL.md +30 -6
  140. package/runtime/pi/.codex/skills/ingest/SKILL.md +8 -4
  141. package/runtime/pi/.codex/skills/ingest-google/SKILL.md +8 -4
  142. package/runtime/pi/.codex/skills/ingest-user-interview/SKILL.md +8 -4
  143. package/runtime/pi/.codex/skills/invite/SKILL.md +6 -2
  144. package/runtime/pi/.codex/skills/issue/SKILL.md +8 -4
  145. package/runtime/pi/.codex/skills/me/SKILL.md +8 -4
  146. package/runtime/pi/.codex/skills/meeting/SKILL.md +8 -4
  147. package/runtime/pi/.codex/skills/minion/SKILL.md +8 -4
  148. package/runtime/pi/.codex/skills/mock/SKILL.md +29 -0
  149. package/runtime/pi/.codex/skills/note/SKILL.md +8 -4
  150. package/runtime/pi/.codex/skills/onboarding/SKILL.md +8 -4
  151. package/runtime/pi/.codex/skills/pr/SKILL.md +8 -4
  152. package/runtime/pi/.codex/skills/product-voice/SKILL.md +29 -0
  153. package/runtime/pi/.codex/skills/project/SKILL.md +8 -4
  154. package/runtime/pi/.codex/skills/pull/SKILL.md +8 -4
  155. package/runtime/pi/.codex/skills/push/SKILL.md +8 -4
  156. package/runtime/pi/.codex/skills/quest/SKILL.md +6 -3
  157. package/runtime/pi/.codex/skills/quest-suggest/SKILL.md +8 -4
  158. package/runtime/pi/.codex/skills/reflect/SKILL.md +8 -4
  159. package/runtime/pi/.codex/skills/review-pr/SKILL.md +8 -4
  160. package/runtime/pi/.codex/skills/save/SKILL.md +6 -4
  161. package/runtime/pi/.codex/skills/scroll/SKILL.md +92 -23
  162. package/runtime/pi/.codex/skills/scroll/assets/shell.html +381 -52
  163. package/runtime/pi/.codex/skills/session-view/SKILL.md +8 -4
  164. package/runtime/pi/.codex/skills/setup/SKILL.md +8 -4
  165. package/runtime/pi/.codex/skills/summon/SKILL.md +8 -4
  166. package/runtime/pi/.codex/skills/sync-repos/SKILL.md +8 -4
  167. package/runtime/pi/.codex/skills/task/SKILL.md +9 -5
  168. package/runtime/pi/.codex/skills/teams-connect/SKILL.md +29 -0
  169. package/runtime/pi/.codex/skills/telegram-connect/SKILL.md +8 -4
  170. package/runtime/pi/.codex/skills/telemetry/SKILL.md +8 -4
  171. package/runtime/pi/.codex/skills/test/SKILL.md +8 -4
  172. package/runtime/pi/.codex/skills/thread/SKILL.md +8 -4
  173. package/runtime/pi/.codex/skills/todo/SKILL.md +8 -4
  174. package/runtime/pi/.codex/skills/tui-design/SKILL.md +8 -4
  175. package/runtime/pi/.codex/skills/tutorial/SKILL.md +8 -4
  176. package/runtime/pi/.codex/skills/update/SKILL.md +8 -4
  177. package/runtime/pi/.codex/skills/visual-explain/SKILL.md +8 -4
  178. package/runtime/pi/.codex/spec-manifest.json +4 -4
  179. package/runtime/pi/.pi/APPEND_SYSTEM.md +34 -12
  180. package/runtime/pi/.pi/extensions/egregore.ts +8 -1
  181. package/runtime/pi/.pi/spec-manifest.json +2 -2
  182. package/runtime/pi/AGENTS.md +36 -14
  183. package/runtime/pi/bin/activity-data.sh +1 -1
  184. package/runtime/pi/bin/agent.sh +38 -19
  185. package/runtime/pi/bin/attendant.sh +8 -2
  186. package/runtime/pi/bin/autosave.sh +1 -1
  187. package/runtime/pi/bin/capture-reconcile.sh +8 -6
  188. package/runtime/pi/bin/capture-run.sh +1 -1
  189. package/runtime/pi/bin/codex-install-skills.sh +1 -1
  190. package/runtime/pi/bin/codex-render-spec.mjs +12 -5
  191. package/runtime/pi/bin/codex-session-start.sh +1 -1
  192. package/runtime/pi/bin/codex-skill-render.mjs +5 -0
  193. package/runtime/pi/bin/codex-sync-skills.sh +9 -5
  194. package/runtime/pi/bin/dashboard-data.sh +1 -1
  195. package/runtime/pi/bin/graph-batch.sh +1 -1
  196. package/runtime/pi/bin/graph-op.sh +1 -1
  197. package/runtime/pi/bin/graph-wal.sh +1 -1
  198. package/runtime/pi/bin/graph.sh +1 -1
  199. package/runtime/pi/bin/handoff-pr-backfill.sh +1 -1
  200. package/runtime/pi/bin/handoff-run.sh +117 -119
  201. package/runtime/pi/bin/handoff-save-egregore.sh +62 -32
  202. package/runtime/pi/bin/index-handoff.sh +3 -2
  203. package/runtime/pi/bin/ingest-graph.sh +1 -1
  204. package/runtime/pi/bin/ingest.sh +1 -1
  205. package/runtime/pi/bin/lib/artifact-id.sh +1 -1
  206. package/runtime/pi/bin/lib/config.sh +56 -20
  207. package/runtime/pi/bin/lib/context.sh +7 -1
  208. package/runtime/pi/bin/lib/ensure-develop.sh +1 -1
  209. package/runtime/pi/bin/lib/git-sync.sh +145 -59
  210. package/runtime/pi/bin/lib/greeting.sh +14 -0
  211. package/runtime/pi/bin/lib/hash.sh +1 -1
  212. package/runtime/pi/bin/lib/noncode.sh +1 -1
  213. package/runtime/pi/bin/lib/time.sh +1 -1
  214. package/runtime/pi/bin/notify.sh +492 -153
  215. package/runtime/pi/bin/person.sh +1 -1
  216. package/runtime/pi/bin/pi-product-workflows.mjs +14 -5
  217. package/runtime/pi/bin/pi-session-start.sh +1 -1
  218. package/runtime/pi/bin/publish-artifact.sh +64 -8
  219. package/runtime/pi/bin/publish-references.sh +1 -1
  220. package/runtime/pi/bin/repo-state.sh +7 -10
  221. package/runtime/pi/bin/search.sh +1 -1
  222. package/runtime/pi/bin/session-autosave.sh +1 -1
  223. package/runtime/pi/bin/session-log.sh +1 -1
  224. package/runtime/pi/bin/settings.sh +32 -2
  225. package/runtime/pi/bin/telemetry.sh +1 -1
  226. package/runtime/pi/bin/worktree-create.sh +14 -4
  227. package/runtime/pi/bin/worktree-remove.sh +1 -1
  228. package/runtime/pi/bin/worktree.sh +1 -1
  229. package/runtime/pi/manifest.json +18 -1
@@ -17,9 +17,13 @@ when it is available; otherwise render compact numbered choices with an
17
17
 
18
18
  1. Read `.claude/skills/ingest/SKILL.md` for the workflow details.
19
19
  2. Run the referenced `bin/` scripts directly from Codex.
20
- 3. Treat graph, publish, and notify steps as best-effort unless that workflow
21
- explicitly says they are required.
22
- 4. Keep local-mode behavior filesystem-first and avoid graph or notification
20
+ 3. Treat graph and publish steps as best-effort unless that workflow explicitly
21
+ says they are required.
22
+ 4. For every external notification, follow
23
+ `.claude/context/notification-consent.md`: plan without sending, then show
24
+ a separate exact Send / Edit / Cancel checkpoint. Never infer notification
25
+ consent from the workflow request or a batch approval.
26
+ 5. Keep local-mode behavior filesystem-first and avoid graph or notification
23
27
  calls when `egregore.json` declares `"mode": "local"`.
24
- 5. Never call the deprecated `egregore-handoff` CLI for Egregore project
28
+ 6. Never call the deprecated `egregore-handoff` CLI for Egregore project
25
29
  handoffs.
@@ -17,9 +17,13 @@ when it is available; otherwise render compact numbered choices with an
17
17
 
18
18
  1. Read `.claude/skills/ingest-google/SKILL.md` for the workflow details.
19
19
  2. Run the referenced `bin/` scripts directly from Codex.
20
- 3. Treat graph, publish, and notify steps as best-effort unless that workflow
21
- explicitly says they are required.
22
- 4. Keep local-mode behavior filesystem-first and avoid graph or notification
20
+ 3. Treat graph and publish steps as best-effort unless that workflow explicitly
21
+ says they are required.
22
+ 4. For every external notification, follow
23
+ `.claude/context/notification-consent.md`: plan without sending, then show
24
+ a separate exact Send / Edit / Cancel checkpoint. Never infer notification
25
+ consent from the workflow request or a batch approval.
26
+ 5. Keep local-mode behavior filesystem-first and avoid graph or notification
23
27
  calls when `egregore.json` declares `"mode": "local"`.
24
- 5. Never call the deprecated `egregore-handoff` CLI for Egregore project
28
+ 6. Never call the deprecated `egregore-handoff` CLI for Egregore project
25
29
  handoffs.
@@ -33,9 +33,13 @@ reading `.claude/skills/ingest-user-interview/SKILL.md`, reproduce the same visi
33
33
 
34
34
  1. Read `.claude/skills/ingest-user-interview/SKILL.md` for the workflow details.
35
35
  2. Run the referenced `bin/` scripts directly from Codex.
36
- 3. Treat graph, publish, and notify steps as best-effort unless that workflow
37
- explicitly says they are required.
38
- 4. Keep local-mode behavior filesystem-first and avoid graph or notification
36
+ 3. Treat graph and publish steps as best-effort unless that workflow explicitly
37
+ says they are required.
38
+ 4. For every external notification, follow
39
+ `.claude/context/notification-consent.md`: plan without sending, then show
40
+ a separate exact Send / Edit / Cancel checkpoint. Never infer notification
41
+ consent from the workflow request or a batch approval.
42
+ 5. Keep local-mode behavior filesystem-first and avoid graph or notification
39
43
  calls when `egregore.json` declares `"mode": "local"`.
40
- 5. Never call the deprecated `egregore-handoff` CLI for Egregore project
44
+ 6. Never call the deprecated `egregore-handoff` CLI for Egregore project
41
45
  handoffs.
@@ -21,8 +21,11 @@ and, in connected mode, create the Egregore join link.
21
21
  - Parse the response and show invite status, memory access status, and the
22
22
  returned invite URL.
23
23
  - Best-effort graph record with `bin/graph.sh`.
24
- - Best-effort direct notification with `bin/notify.sh send` only if a
25
- contact channel exists.
24
+ - If a contact channel exists, follow
25
+ `.claude/context/notification-consent.md`: prepare a direct-message plan
26
+ and show the exact organization, recipient, channel, and message in a
27
+ separate Send / Edit / Cancel checkpoint. The invite request is not
28
+ notification consent.
26
29
  5. Local mode:
27
30
  - Use GitHub API collaborator endpoints for the core repo, memory repo, and
28
31
  managed repos.
@@ -38,3 +41,4 @@ and, in connected mode, create the Egregore join link.
38
41
  - Only org admins can complete the connected invite flow; report API denial
39
42
  clearly and give the manual GitHub access URL.
40
43
  - Do not use Claude Code commands.
44
+ - Never fall back from an invite DM to a group or dispatch from detached work.
@@ -33,9 +33,13 @@ reading `.claude/skills/issue/SKILL.md`, reproduce the same visible UX in Codex:
33
33
 
34
34
  1. Read `.claude/skills/issue/SKILL.md` for the workflow details.
35
35
  2. Run the referenced `bin/` scripts directly from Codex.
36
- 3. Treat graph, publish, and notify steps as best-effort unless that workflow
37
- explicitly says they are required.
38
- 4. Keep local-mode behavior filesystem-first and avoid graph or notification
36
+ 3. Treat graph and publish steps as best-effort unless that workflow explicitly
37
+ says they are required.
38
+ 4. For every external notification, follow
39
+ `.claude/context/notification-consent.md`: plan without sending, then show
40
+ a separate exact Send / Edit / Cancel checkpoint. Never infer notification
41
+ consent from the workflow request or a batch approval.
42
+ 5. Keep local-mode behavior filesystem-first and avoid graph or notification
39
43
  calls when `egregore.json` declares `"mode": "local"`.
40
- 5. Never call the deprecated `egregore-handoff` CLI for Egregore project
44
+ 6. Never call the deprecated `egregore-handoff` CLI for Egregore project
41
45
  handoffs.
@@ -17,9 +17,13 @@ when it is available; otherwise render compact numbered choices with an
17
17
 
18
18
  1. Read `.claude/skills/me/SKILL.md` for the workflow details.
19
19
  2. Run the referenced `bin/` scripts directly from Codex.
20
- 3. Treat graph, publish, and notify steps as best-effort unless that workflow
21
- explicitly says they are required.
22
- 4. Keep local-mode behavior filesystem-first and avoid graph or notification
20
+ 3. Treat graph and publish steps as best-effort unless that workflow explicitly
21
+ says they are required.
22
+ 4. For every external notification, follow
23
+ `.claude/context/notification-consent.md`: plan without sending, then show
24
+ a separate exact Send / Edit / Cancel checkpoint. Never infer notification
25
+ consent from the workflow request or a batch approval.
26
+ 5. Keep local-mode behavior filesystem-first and avoid graph or notification
23
27
  calls when `egregore.json` declares `"mode": "local"`.
24
- 5. Never call the deprecated `egregore-handoff` CLI for Egregore project
28
+ 6. Never call the deprecated `egregore-handoff` CLI for Egregore project
25
29
  handoffs.
@@ -33,9 +33,13 @@ reading `.claude/skills/meeting/SKILL.md`, reproduce the same visible UX in Code
33
33
 
34
34
  1. Read `.claude/skills/meeting/SKILL.md` for the workflow details.
35
35
  2. Run the referenced `bin/` scripts directly from Codex.
36
- 3. Treat graph, publish, and notify steps as best-effort unless that workflow
37
- explicitly says they are required.
38
- 4. Keep local-mode behavior filesystem-first and avoid graph or notification
36
+ 3. Treat graph and publish steps as best-effort unless that workflow explicitly
37
+ says they are required.
38
+ 4. For every external notification, follow
39
+ `.claude/context/notification-consent.md`: plan without sending, then show
40
+ a separate exact Send / Edit / Cancel checkpoint. Never infer notification
41
+ consent from the workflow request or a batch approval.
42
+ 5. Keep local-mode behavior filesystem-first and avoid graph or notification
39
43
  calls when `egregore.json` declares `"mode": "local"`.
40
- 5. Never call the deprecated `egregore-handoff` CLI for Egregore project
44
+ 6. Never call the deprecated `egregore-handoff` CLI for Egregore project
41
45
  handoffs.
@@ -17,9 +17,13 @@ when it is available; otherwise render compact numbered choices with an
17
17
 
18
18
  1. Read `.claude/skills/minion/SKILL.md` for the workflow details.
19
19
  2. Run the referenced `bin/` scripts directly from Codex.
20
- 3. Treat graph, publish, and notify steps as best-effort unless that workflow
21
- explicitly says they are required.
22
- 4. Keep local-mode behavior filesystem-first and avoid graph or notification
20
+ 3. Treat graph and publish steps as best-effort unless that workflow explicitly
21
+ says they are required.
22
+ 4. For every external notification, follow
23
+ `.claude/context/notification-consent.md`: plan without sending, then show
24
+ a separate exact Send / Edit / Cancel checkpoint. Never infer notification
25
+ consent from the workflow request or a batch approval.
26
+ 5. Keep local-mode behavior filesystem-first and avoid graph or notification
23
27
  calls when `egregore.json` declares `"mode": "local"`.
24
- 5. Never call the deprecated `egregore-handoff` CLI for Egregore project
28
+ 6. Never call the deprecated `egregore-handoff` CLI for Egregore project
25
29
  handoffs.
@@ -0,0 +1,29 @@
1
+ ---
2
+ name: mock
3
+ description: 'Fallback Codex adapter for the Egregore mock workflow.'
4
+ ---
5
+
6
+ <!-- generated-by: bin/codex-sync-skills.sh -->
7
+
8
+ # Egregore mock Adapter
9
+
10
+ This is fallback coverage for a long-tail Egregore workflow that has not been
11
+ ported to a hand-written Codex-native skill yet.
12
+
13
+ Use the project shell and filesystem directly. Do not invoke Claude Code
14
+ commands. Translate interactive choices to structured Codex question tooling
15
+ when it is available; otherwise render compact numbered choices with an
16
+ `Other:` option and wait for the user.
17
+
18
+ 1. Read `.claude/skills/mock/SKILL.md` for the workflow details.
19
+ 2. Run the referenced `bin/` scripts directly from Codex.
20
+ 3. Treat graph and publish steps as best-effort unless that workflow explicitly
21
+ says they are required.
22
+ 4. For every external notification, follow
23
+ `.claude/context/notification-consent.md`: plan without sending, then show
24
+ a separate exact Send / Edit / Cancel checkpoint. Never infer notification
25
+ consent from the workflow request or a batch approval.
26
+ 5. Keep local-mode behavior filesystem-first and avoid graph or notification
27
+ calls when `egregore.json` declares `"mode": "local"`.
28
+ 6. Never call the deprecated `egregore-handoff` CLI for Egregore project
29
+ handoffs.
@@ -17,9 +17,13 @@ when it is available; otherwise render compact numbered choices with an
17
17
 
18
18
  1. Read `.claude/skills/note/SKILL.md` for the workflow details.
19
19
  2. Run the referenced `bin/` scripts directly from Codex.
20
- 3. Treat graph, publish, and notify steps as best-effort unless that workflow
21
- explicitly says they are required.
22
- 4. Keep local-mode behavior filesystem-first and avoid graph or notification
20
+ 3. Treat graph and publish steps as best-effort unless that workflow explicitly
21
+ says they are required.
22
+ 4. For every external notification, follow
23
+ `.claude/context/notification-consent.md`: plan without sending, then show
24
+ a separate exact Send / Edit / Cancel checkpoint. Never infer notification
25
+ consent from the workflow request or a batch approval.
26
+ 5. Keep local-mode behavior filesystem-first and avoid graph or notification
23
27
  calls when `egregore.json` declares `"mode": "local"`.
24
- 5. Never call the deprecated `egregore-handoff` CLI for Egregore project
28
+ 6. Never call the deprecated `egregore-handoff` CLI for Egregore project
25
29
  handoffs.
@@ -33,9 +33,13 @@ reading `.claude/skills/onboarding/SKILL.md`, reproduce the same visible UX in C
33
33
 
34
34
  1. Read `.claude/skills/onboarding/SKILL.md` for the workflow details.
35
35
  2. Run the referenced `bin/` scripts directly from Codex.
36
- 3. Treat graph, publish, and notify steps as best-effort unless that workflow
37
- explicitly says they are required.
38
- 4. Keep local-mode behavior filesystem-first and avoid graph or notification
36
+ 3. Treat graph and publish steps as best-effort unless that workflow explicitly
37
+ says they are required.
38
+ 4. For every external notification, follow
39
+ `.claude/context/notification-consent.md`: plan without sending, then show
40
+ a separate exact Send / Edit / Cancel checkpoint. Never infer notification
41
+ consent from the workflow request or a batch approval.
42
+ 5. Keep local-mode behavior filesystem-first and avoid graph or notification
39
43
  calls when `egregore.json` declares `"mode": "local"`.
40
- 5. Never call the deprecated `egregore-handoff` CLI for Egregore project
44
+ 6. Never call the deprecated `egregore-handoff` CLI for Egregore project
41
45
  handoffs.
@@ -17,9 +17,13 @@ when it is available; otherwise render compact numbered choices with an
17
17
 
18
18
  1. Read `.claude/skills/pr/SKILL.md` for the workflow details.
19
19
  2. Run the referenced `bin/` scripts directly from Codex.
20
- 3. Treat graph, publish, and notify steps as best-effort unless that workflow
21
- explicitly says they are required.
22
- 4. Keep local-mode behavior filesystem-first and avoid graph or notification
20
+ 3. Treat graph and publish steps as best-effort unless that workflow explicitly
21
+ says they are required.
22
+ 4. For every external notification, follow
23
+ `.claude/context/notification-consent.md`: plan without sending, then show
24
+ a separate exact Send / Edit / Cancel checkpoint. Never infer notification
25
+ consent from the workflow request or a batch approval.
26
+ 5. Keep local-mode behavior filesystem-first and avoid graph or notification
23
27
  calls when `egregore.json` declares `"mode": "local"`.
24
- 5. Never call the deprecated `egregore-handoff` CLI for Egregore project
28
+ 6. Never call the deprecated `egregore-handoff` CLI for Egregore project
25
29
  handoffs.
@@ -0,0 +1,29 @@
1
+ ---
2
+ name: product-voice
3
+ description: 'How Egregore talks to users during normal work — onboarding messages, tutorial prose, command output, error messages, status confirmations, session greetings, help text. The ''warm colleague'' register. Use when writing or editing in-product copy, or when a skill needs guidance on how to address the user. Triggers on: ''how should this read'', ''onboarding copy'', ''tutorial text'', ''error message'', ''help text'', ''status message'', ''command output prose''. Do NOT use for external writing (use egregore-voice), outreach emails (use alpha-openers), or character encounters (use character-v4).'
4
+ ---
5
+
6
+ <!-- generated-by: bin/codex-sync-skills.sh -->
7
+
8
+ # Egregore product-voice Adapter
9
+
10
+ This is fallback coverage for a long-tail Egregore workflow that has not been
11
+ ported to a hand-written Codex-native skill yet.
12
+
13
+ Use the project shell and filesystem directly. Do not invoke Claude Code
14
+ commands. Translate interactive choices to structured Codex question tooling
15
+ when it is available; otherwise render compact numbered choices with an
16
+ `Other:` option and wait for the user.
17
+
18
+ 1. Read `.claude/skills/product-voice/SKILL.md` for the workflow details.
19
+ 2. Run the referenced `bin/` scripts directly from Codex.
20
+ 3. Treat graph and publish steps as best-effort unless that workflow explicitly
21
+ says they are required.
22
+ 4. For every external notification, follow
23
+ `.claude/context/notification-consent.md`: plan without sending, then show
24
+ a separate exact Send / Edit / Cancel checkpoint. Never infer notification
25
+ consent from the workflow request or a batch approval.
26
+ 5. Keep local-mode behavior filesystem-first and avoid graph or notification
27
+ calls when `egregore.json` declares `"mode": "local"`.
28
+ 6. Never call the deprecated `egregore-handoff` CLI for Egregore project
29
+ handoffs.
@@ -33,9 +33,13 @@ reading `.claude/skills/project/SKILL.md`, reproduce the same visible UX in Code
33
33
 
34
34
  1. Read `.claude/skills/project/SKILL.md` for the workflow details.
35
35
  2. Run the referenced `bin/` scripts directly from Codex.
36
- 3. Treat graph, publish, and notify steps as best-effort unless that workflow
37
- explicitly says they are required.
38
- 4. Keep local-mode behavior filesystem-first and avoid graph or notification
36
+ 3. Treat graph and publish steps as best-effort unless that workflow explicitly
37
+ says they are required.
38
+ 4. For every external notification, follow
39
+ `.claude/context/notification-consent.md`: plan without sending, then show
40
+ a separate exact Send / Edit / Cancel checkpoint. Never infer notification
41
+ consent from the workflow request or a batch approval.
42
+ 5. Keep local-mode behavior filesystem-first and avoid graph or notification
39
43
  calls when `egregore.json` declares `"mode": "local"`.
40
- 5. Never call the deprecated `egregore-handoff` CLI for Egregore project
44
+ 6. Never call the deprecated `egregore-handoff` CLI for Egregore project
41
45
  handoffs.
@@ -17,9 +17,13 @@ when it is available; otherwise render compact numbered choices with an
17
17
 
18
18
  1. Read `.claude/skills/pull/SKILL.md` for the workflow details.
19
19
  2. Run the referenced `bin/` scripts directly from Codex.
20
- 3. Treat graph, publish, and notify steps as best-effort unless that workflow
21
- explicitly says they are required.
22
- 4. Keep local-mode behavior filesystem-first and avoid graph or notification
20
+ 3. Treat graph and publish steps as best-effort unless that workflow explicitly
21
+ says they are required.
22
+ 4. For every external notification, follow
23
+ `.claude/context/notification-consent.md`: plan without sending, then show
24
+ a separate exact Send / Edit / Cancel checkpoint. Never infer notification
25
+ consent from the workflow request or a batch approval.
26
+ 5. Keep local-mode behavior filesystem-first and avoid graph or notification
23
27
  calls when `egregore.json` declares `"mode": "local"`.
24
- 5. Never call the deprecated `egregore-handoff` CLI for Egregore project
28
+ 6. Never call the deprecated `egregore-handoff` CLI for Egregore project
25
29
  handoffs.
@@ -17,9 +17,13 @@ when it is available; otherwise render compact numbered choices with an
17
17
 
18
18
  1. Read `.claude/skills/push/SKILL.md` for the workflow details.
19
19
  2. Run the referenced `bin/` scripts directly from Codex.
20
- 3. Treat graph, publish, and notify steps as best-effort unless that workflow
21
- explicitly says they are required.
22
- 4. Keep local-mode behavior filesystem-first and avoid graph or notification
20
+ 3. Treat graph and publish steps as best-effort unless that workflow explicitly
21
+ says they are required.
22
+ 4. For every external notification, follow
23
+ `.claude/context/notification-consent.md`: plan without sending, then show
24
+ a separate exact Send / Edit / Cancel checkpoint. Never infer notification
25
+ consent from the workflow request or a batch approval.
26
+ 5. Keep local-mode behavior filesystem-first and avoid graph or notification
23
27
  calls when `egregore.json` declares `"mode": "local"`.
24
- 5. Never call the deprecated `egregore-handoff` CLI for Egregore project
28
+ 6. Never call the deprecated `egregore-handoff` CLI for Egregore project
25
29
  handoffs.
@@ -45,9 +45,12 @@ git -C memory commit -m "quest: $SLUG $ACTION" --quiet
45
45
  git -C memory push origin main --quiet
46
46
  ```
47
47
 
48
- 7. In connected mode only, mirror changes best-effort with `bin/graph.sh` and
49
- notify named people with `bin/notify.sh send`. If graph or notification
50
- fails, report that the quest was saved to memory and continue.
48
+ 7. In connected mode only, mirror changes best-effort with `bin/graph.sh`.
49
+ For each named person, follow `.claude/context/notification-consent.md`:
50
+ create a direct-message plan, then show a separate exact Send / Edit /
51
+ Cancel checkpoint. Selecting quest participants is not notification
52
+ consent, and approvals cannot be batched across recipients. If planning or
53
+ dispatch fails, report that the quest was saved to memory and continue.
51
54
 
52
55
  ## Interaction
53
56
 
@@ -17,9 +17,13 @@ when it is available; otherwise render compact numbered choices with an
17
17
 
18
18
  1. Read `.claude/skills/quest-suggest/SKILL.md` for the workflow details.
19
19
  2. Run the referenced `bin/` scripts directly from Codex.
20
- 3. Treat graph, publish, and notify steps as best-effort unless that workflow
21
- explicitly says they are required.
22
- 4. Keep local-mode behavior filesystem-first and avoid graph or notification
20
+ 3. Treat graph and publish steps as best-effort unless that workflow explicitly
21
+ says they are required.
22
+ 4. For every external notification, follow
23
+ `.claude/context/notification-consent.md`: plan without sending, then show
24
+ a separate exact Send / Edit / Cancel checkpoint. Never infer notification
25
+ consent from the workflow request or a batch approval.
26
+ 5. Keep local-mode behavior filesystem-first and avoid graph or notification
23
27
  calls when `egregore.json` declares `"mode": "local"`.
24
- 5. Never call the deprecated `egregore-handoff` CLI for Egregore project
28
+ 6. Never call the deprecated `egregore-handoff` CLI for Egregore project
25
29
  handoffs.
@@ -33,9 +33,13 @@ reading `.claude/skills/reflect/SKILL.md`, reproduce the same visible UX in Code
33
33
 
34
34
  1. Read `.claude/skills/reflect/SKILL.md` for the workflow details.
35
35
  2. Run the referenced `bin/` scripts directly from Codex.
36
- 3. Treat graph, publish, and notify steps as best-effort unless that workflow
37
- explicitly says they are required.
38
- 4. Keep local-mode behavior filesystem-first and avoid graph or notification
36
+ 3. Treat graph and publish steps as best-effort unless that workflow explicitly
37
+ says they are required.
38
+ 4. For every external notification, follow
39
+ `.claude/context/notification-consent.md`: plan without sending, then show
40
+ a separate exact Send / Edit / Cancel checkpoint. Never infer notification
41
+ consent from the workflow request or a batch approval.
42
+ 5. Keep local-mode behavior filesystem-first and avoid graph or notification
39
43
  calls when `egregore.json` declares `"mode": "local"`.
40
- 5. Never call the deprecated `egregore-handoff` CLI for Egregore project
44
+ 6. Never call the deprecated `egregore-handoff` CLI for Egregore project
41
45
  handoffs.
@@ -33,9 +33,13 @@ reading `.claude/skills/review-pr/SKILL.md`, reproduce the same visible UX in Co
33
33
 
34
34
  1. Read `.claude/skills/review-pr/SKILL.md` for the workflow details.
35
35
  2. Run the referenced `bin/` scripts directly from Codex.
36
- 3. Treat graph, publish, and notify steps as best-effort unless that workflow
37
- explicitly says they are required.
38
- 4. Keep local-mode behavior filesystem-first and avoid graph or notification
36
+ 3. Treat graph and publish steps as best-effort unless that workflow explicitly
37
+ says they are required.
38
+ 4. For every external notification, follow
39
+ `.claude/context/notification-consent.md`: plan without sending, then show
40
+ a separate exact Send / Edit / Cancel checkpoint. Never infer notification
41
+ consent from the workflow request or a batch approval.
42
+ 5. Keep local-mode behavior filesystem-first and avoid graph or notification
39
43
  calls when `egregore.json` declares `"mode": "local"`.
40
- 5. Never call the deprecated `egregore-handoff` CLI for Egregore project
44
+ 6. Never call the deprecated `egregore-handoff` CLI for Egregore project
41
45
  handoffs.
@@ -15,6 +15,8 @@ which branch, commit, push, pull request, or memory sync steps are required.
15
15
  2. Inspect state silently:
16
16
 
17
17
  ```bash
18
+ BASE=$(bash -c 'SCRIPT_DIR="$PWD"; CONFIG="$PWD/egregore.json"; . "$PWD/bin/lib/config.sh" && _get_base_branch') ||
19
+ { echo "Could not resolve the configured base branch; stopping before Git changes." >&2; exit 1; }
18
20
  git status --short
19
21
  git status --short memory 2>/dev/null || true
20
22
  BRANCH=$(git branch --show-current)
@@ -22,10 +24,10 @@ AHEAD=0
22
24
  OPEN_PR=""
23
25
  case "$BRANCH" in
24
26
  dev/*|feature/*|bugfix/*)
25
- git fetch origin develop --quiet 2>/dev/null || true
26
- AHEAD=$(git rev-list --count "origin/develop..HEAD" 2>/dev/null || echo 0)
27
+ git fetch origin "$BASE" --quiet 2>/dev/null || true
28
+ AHEAD=$(git rev-list --count "origin/$BASE..HEAD" 2>/dev/null || echo 0)
27
29
  if command -v gh >/dev/null 2>&1; then
28
- OPEN_PR=$(gh pr list --head "$BRANCH" --base develop --state open \
30
+ OPEN_PR=$(gh pr list --head "$BRANCH" --base "$BASE" --state open \
29
31
  --json url --jq '.[0].url // empty' 2>/dev/null || true)
30
32
  fi
31
33
  ;;
@@ -34,7 +36,7 @@ esac
34
36
 
35
37
  3. A clean working tree alone does **not** mean the work is fully saved:
36
38
  - If there are repo or memory changes, continue.
37
- - If the task branch is ahead of `origin/develop` and `OPEN_PR` is empty,
39
+ - If the task branch is ahead of `origin/$BASE` and `OPEN_PR` is empty,
38
40
  continue even when the tree is clean. The bridge must push any committed
39
41
  work and create the missing PR.
40
42
  - Stop with "everything is already saved" only when there are no repo or
@@ -45,32 +45,60 @@ or Loom delegation.
45
45
  into `/*__MERIDIAN_CSS__*/`. If the packages tree is unavailable, extract the
46
46
  same path from `egregore-artifacts@latest` rather than freezing tokens.
47
47
  5. Fill every placeholder and replace the `__FACE__` and `__HARVEST__` slot
48
- comments using the grammar documented in the shell.
48
+ comments using the shell's syntax reference and the composition rules below.
49
49
 
50
50
  ### Write the face
51
51
 
52
- Create a light paper, not a transcript dump:
52
+ Create a light paper that reads as if freshly written by someone who knows
53
+ every absorbed decision, not a transcript with updates appended.
53
54
 
54
55
  - A paper header with kicker, title, italic subtitle, grounds, date, and
55
56
  `Version vN — updates in place at this URL`.
56
- - The setting: current reality, load-bearing verified numbers, the gap, and a
57
- thesis reframe.
58
- - Two to four genuinely different mental models that stress-test the design.
59
- - The machine: concrete anatomy and protocol, using layers, steps, and
60
- tokenized SVG figures. Mark illustrative charts `shapes, not measurements`.
61
- - Consequences for product or practice.
62
- - Honest costs as cards. Every cost must call `goFork('<fork-id>')` and link to
63
- the harvest decision that prices it.
57
+ - **Setting** is mandatory: orient the reader in current reality, the question
58
+ or gap, and the thesis; include verified numbers when they carry the claim.
59
+ - **Honest costs** is mandatory: name real tradeoffs, uncertainty, and
60
+ operational burden. A cost that an open fork can price calls
61
+ `goFork('<fork-id>')`; settled costs become accepted, mitigated, or residual.
62
+ - Choose every other module by fit: evidence or claims; a concrete machine,
63
+ anatomy, or protocol; examples or cases; stress tests; consequences;
64
+ boundaries or alternatives; decision history. For each plausible optional
65
+ module, be able to say why it is in or out. Never include one because this
66
+ list names it. A stress test must be able to fail the design.
67
+ - Use tokenized SVG figures where a visual materially helps. Mark illustrative
68
+ charts `shapes, not measurements`.
64
69
 
65
70
  ### Write the harvest
66
71
 
67
72
  Create two to four bands of decision cards. Each card needs:
68
73
 
69
74
  - a stable fork id, grounded framing, and a reference back into the face;
70
- - two to four real options, each with one credible advantage and disadvantage;
75
+ - an explicit answer `mode` for new forks; omit it only when preserving a legacy
76
+ single fork, give every `multi` fork an integer `max`, and give every
77
+ `spectrum` fork exactly two `ends`;
78
+ - two to four real options for single/multi, each with one credible advantage
79
+ and disadvantage; 2–5 labeled items for rank, each with the same honest
80
+ tradeoff pair; or 5–7 fully labeled discrete stops for spectrum;
71
81
  - at most one starred lean, presented as a position to challenge;
72
82
  - a why textarea whose note returns with the pick.
73
83
 
84
+ An option with no credible disadvantage is propaganda. A fork is one open
85
+ question carried across versions by its lineage; it renders as a decision card
86
+ and returns as a `Q<n>` line. A turn is one person's answers to one version.
87
+ Accepted means approved; absorbed means published in a new version.
88
+
89
+ Read `.codex/skills/harvest/QUESTION_PALETTE.md` for the canonical
90
+ intent-to-shape rules. A multi card uses matching `data-mode="multi"` and
91
+ `data-max="N"` attributes; the runtime exposes checkboxes and enforces the cap.
92
+ A spectrum card uses `data-mode="spectrum"`, matching `data-left`/`data-right`
93
+ poles, and 5–7 native `.sstop` buttons with normalized `data-pos` values and
94
+ non-blank `data-label` values. Do not author a slider or a selected stop.
95
+ Untouched, an explicitly selected midpoint, and UNDECIDED are distinct.
96
+ A rank card uses `data-mode="rank"` and a `.rank-list` of 2–5 `.rank-item`
97
+ candidates. Each candidate has a unique `data-opt`, a non-blank `data-label`,
98
+ one native `.rank-toggle`, and one honest `.otrade`. The runtime supports
99
+ partial top-k, tier reordering, and ties. Use best-worst dialogue for a longer
100
+ list.
101
+
74
102
  Add open prompts for material that is not a fork. Prefer questions grounded in
75
103
  the work over meta-prompts asking what to ask next. The copydock must emit:
76
104
 
@@ -80,11 +108,40 @@ surface: <surface-id>
80
108
  harvest: <harvest-id>
81
109
  date: <date>
82
110
 
83
- Q1 <fork-id>: <key> ("<label>") | UNDECIDED
84
- note: <why, verbatim>
111
+ Q1 <fork-id>: <key> ("<label>")
112
+ note: |
113
+ <verbatim line>
114
+ <blank or verbatim line>
115
+ Q2 <fork-id>: [<key-a>, <key-b>] ("<Label A>" + "<Label B>")
116
+ Q3 <fork-id>: <key-b> > <key-a> = <key-c>
117
+ Q4 <fork-id>: <position> (<left pole>→<right pole>)
118
+ Q5 <fork-id>: UNDECIDED
85
119
  O1 <prompt-id>: <text | UNDECIDED>
86
120
  ```
87
121
 
122
+ Emit a `Q<n>` line only after the respondent chooses an option or activates
123
+ **Leave this open**. Omit untouched forks; Leave this open emits `UNDECIDED`,
124
+ looks distinct from untouched state, and comes back at most once in a different
125
+ form. Keep `n` as the fork's surface ordinal, so omissions may leave gaps. A
126
+ non-blank why-note on an otherwise untouched fork activates Leave this open.
127
+ Multi turns store
128
+ `{mode:"multi", picks:[...], labels:[...]}` rather than a singular `pick`;
129
+ the bracketed return line is comma-separated and its labels are joined with
130
+ ` + `. Leave-this-open on a multi fork stores
131
+ `{mode:"multi", picks:["UNDECIDED"]}` with no labels. Missing fork mode remains
132
+ `single` for backward compatibility. A chosen spectrum stop stores
133
+ `{mode:"spectrum", position:<number>, label:"<stop label>"}`; activating it
134
+ again clears to untouched. Leave-this-open stores
135
+ `{mode:"spectrum", position:"UNDECIDED"}` with no label.
136
+ Rank return lines use `>` between ordered tiers and `=` inside a tie; omitted
137
+ items form a valid partial top-k. Rank turns store
138
+ `{mode:"rank", ranks:[["B"],["A","C"]]}`. Leave-this-open stores
139
+ `{mode:"rank", ranks:[["UNDECIDED"]]}`.
140
+ Decision notes use a block scalar: indent `note: |` exactly three spaces and
141
+ every content line exactly six spaces. Removing those six spaces must reproduce
142
+ the NFC+LF-normalized textarea value verbatim, including blank lines and a
143
+ trailing newline.
144
+
88
145
  ## Theme and asset constraints
89
146
 
90
147
  Choose the default theme pair from the primary reader's recorded preference
@@ -145,19 +202,26 @@ If the paster is not the creator and not in `trusted:`, the return is **gated**:
145
202
  digest = FNV-1a 32-bit hex over the UTF-8 bytes of
146
203
  `JSON.stringify([respondent, String(base_version), date, sortedAnswers,
147
204
  sortedOpens])` where `sortedAnswers` = answers sorted by fork id, each
148
- mapped to the tuple `[fork, pick-or-UNDECIDED, note-or-empty]` (labels are
149
- excluded), and `sortedOpens` = opens sorted by prompt id, each mapped to
205
+ mapped to `[fork, pick-or-UNDECIDED, note-or-empty]` for single,
206
+ `[fork, sorted-picks-array, note-or-empty]` for multi, or
207
+ `[fork, ordered-rank-tiers-with-each-tie-sorted, note-or-empty]` for rank,
208
+ or `[fork, position-or-UNDECIDED, note-or-empty]` for spectrum (labels are excluded),
209
+ and `sortedOpens` = opens sorted by prompt id, each mapped to
150
210
  `[prompt, text-or-UNDECIDED]`; every string is NFC-normalized and
151
- CRLF→LF-normalized before hashing. Record `submitted_by: <paster>` on the
211
+ CRLF→LF-normalized before hashing. Legacy single turn ids remain unchanged.
212
+ Record `submitted_by: <paster>` on the
152
213
  event (event-log metadata only — never projected into a published ledger)
153
214
  and `merged_into: "pending"`.
154
215
  2. Do NOT absorb: no `memory/knowledge/decisions/` writes, no spec/plan edits,
155
216
  no face rewrite, no version bump, no republish of new content. Republishing
156
217
  the unchanged current version to acknowledge the turn is allowed and appends
157
218
  no version event.
158
- 3. Notify the creator — connected: `bash bin/notify.sh send <creator>
159
- "<paster> answered your scroll <slug> (vN): <digest> — pending your review"`;
160
- local: write an addressed handoff in `memory/handoffs/` naming the scroll,
219
+ 3. In connected mode, follow `.claude/context/notification-consent.md` and
220
+ prepare a direct notification to the creator without sending:
221
+ `bash bin/notify.sh plan send <creator> "<paster> answered your scroll
222
+ <slug> (vN): <digest> — pending your review"`. Show a separate exact Send /
223
+ Edit / Cancel checkpoint. In local mode, write an addressed handoff in
224
+ `memory/handoffs/` naming the scroll,
161
225
  paster, base version, digest, and the dispositions below. The contributor
162
226
  may also send the artifact link directly.
163
227
  4. Report the gated state and stop.
@@ -186,15 +250,20 @@ On a returned block (creator or trusted paster — gated returns stop above):
186
250
  valid answer.
187
251
  2. **Rewrite the face.** Weave settled answers and reasoning into fresh prose,
188
252
  mark them `decided v<N> · <date>`, and update linked cost cards to accepted,
189
- mitigated, or remaining residuals.
253
+ mitigated, or remaining residuals. Re-evaluate every optional face module by
254
+ the fit rule above.
190
255
  3. **Regenerate the harvest.** Retire answered cards. Carry an undecided fork
191
256
  once at most; after two undecided returns, reframe it or demote it to an open
192
257
  prompt. If its note actually resolves it, absorb the note as the decision.
193
258
  Mint new forks from newly unlocked consequences, respondent requests, and
194
- new ground truth.
259
+ new ground truth. Treat an answer outside the listed options as a candidate
260
+ option at review, never as the nearest pick.
195
261
  4. **Show, then ask.** When abstract forks run dry or the respondent asks for
196
- something concrete, place the draft under discussion directly in the
197
- harvest view with in-place reaction prompts.
262
+ something concrete, place only the relevant draft or excerpt in the
263
+ decisions view and ask grounded open prompts beside selected material. This
264
+ is a selective authoring move, not a standing interaction mode: never make
265
+ every face section reactable, add question controls to the readable face,
266
+ or ask generic ready/not-ready verdicts.
198
267
  5. **Version.** Bump every version marker, update the copydock, and append a
199
268
  one-line changelog with absorbed and newly opened forks.
200
269
  6. **Republish.** Publish to the same stable id, update the quest record, open