dreamcontext 0.8.2 → 0.8.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +98 -3
- package/agents/sleep-product.md +45 -0
- package/agents/sleep-state.md +3 -1
- package/agents/sleep-tasks.md +34 -13
- package/dist/agents/sleep-product.md +45 -0
- package/dist/agents/sleep-state.md +3 -1
- package/dist/agents/sleep-tasks.md +34 -13
- package/dist/dashboard/assets/{BrainCanvas3D-CNDjMlun.js → BrainCanvas3D-D8PjCqhM.js} +1 -1
- package/dist/dashboard/assets/{_baseUniq-DtoPVYjz.js → _baseUniq-Bh1FtvZ1.js} +1 -1
- package/dist/dashboard/assets/{ar-SA-G6X2FPQ2-D_dXe_8i.js → ar-SA-G6X2FPQ2-B2U2zDyG.js} +1 -1
- package/dist/dashboard/assets/{arc-8LFYH4lG.js → arc-CjP2r6kV.js} +1 -1
- package/dist/dashboard/assets/{architectureDiagram-Q4EWVU46-BIgEpM4v.js → architectureDiagram-Q4EWVU46-NKSTolLw.js} +1 -1
- package/dist/dashboard/assets/{az-AZ-76LH7QW2-C30ZBwgT.js → az-AZ-76LH7QW2-DVg6avJ2.js} +1 -1
- package/dist/dashboard/assets/{bg-BG-XCXSNQG7-D0R9pSdG.js → bg-BG-XCXSNQG7-DGe9j5k-.js} +1 -1
- package/dist/dashboard/assets/{blockDiagram-DXYQGD6D-DRTa0DpJ.js → blockDiagram-DXYQGD6D-9TIN16so.js} +1 -1
- package/dist/dashboard/assets/{bn-BD-2XOGV67Q-vkWxteG3.js → bn-BD-2XOGV67Q-gu4ZPvYK.js} +1 -1
- package/dist/dashboard/assets/{c4Diagram-AHTNJAMY-Do_gB8Cs.js → c4Diagram-AHTNJAMY-CnCRm_Qw.js} +1 -1
- package/dist/dashboard/assets/{ca-ES-6MX7JW3Y-CTyxGdzW.js → ca-ES-6MX7JW3Y-DkBWO2rb.js} +1 -1
- package/dist/dashboard/assets/channel-CvynutAQ.js +1 -0
- package/dist/dashboard/assets/{chunk-4BX2VUAB-DJlttKoY.js → chunk-4BX2VUAB-DWsjDEg5.js} +1 -1
- package/dist/dashboard/assets/{chunk-4TB4RGXK-BdixZX4J.js → chunk-4TB4RGXK-BsxBp2-h.js} +1 -1
- package/dist/dashboard/assets/{chunk-55IACEB6-CPhKaTLr.js → chunk-55IACEB6-DSTYhHTs.js} +1 -1
- package/dist/dashboard/assets/{chunk-EDXVE4YY-Bv0bQVvi.js → chunk-EDXVE4YY-9RDG5so7.js} +1 -1
- package/dist/dashboard/assets/{chunk-FMBD7UC4-DGjRdLDd.js → chunk-FMBD7UC4-BQQGv7tV.js} +1 -1
- package/dist/dashboard/assets/{chunk-OYMX7WX6-B-wzkRri.js → chunk-OYMX7WX6-B62jTGjc.js} +1 -1
- package/dist/dashboard/assets/{chunk-QZHKN3VN-BwK1NqpV.js → chunk-QZHKN3VN-CgTBTZrW.js} +1 -1
- package/dist/dashboard/assets/{chunk-YZCP3GAM-DjEwJGlh.js → chunk-YZCP3GAM-3Dg1saYb.js} +1 -1
- package/dist/dashboard/assets/classDiagram-6PBFFD2Q-DWhdz8wj.js +1 -0
- package/dist/dashboard/assets/classDiagram-v2-HSJHXN6E-DWhdz8wj.js +1 -0
- package/dist/dashboard/assets/clone-DJK7V3ll.js +1 -0
- package/dist/dashboard/assets/{cose-bilkent-S5V4N54A-BJXUn11L.js → cose-bilkent-S5V4N54A-B3idOsw5.js} +1 -1
- package/dist/dashboard/assets/{cs-CZ-2BRQDIVT-BjRikaNe.js → cs-CZ-2BRQDIVT-xyFkB9a5.js} +1 -1
- package/dist/dashboard/assets/{da-DK-5WZEPLOC-Cn3GTxbV.js → da-DK-5WZEPLOC-B3hFYjJY.js} +1 -1
- package/dist/dashboard/assets/{dagre-KV5264BT-BHn2c24z.js → dagre-KV5264BT-BoSSN-hv.js} +1 -1
- package/dist/dashboard/assets/{de-DE-XR44H4JA-IvGsdpTt.js → de-DE-XR44H4JA-Bkx00nEq.js} +1 -1
- package/dist/dashboard/assets/{diagram-5BDNPKRD-YrlF3B5a.js → diagram-5BDNPKRD-Buj8iksu.js} +1 -1
- package/dist/dashboard/assets/{diagram-G4DWMVQ6-DHONF1OD.js → diagram-G4DWMVQ6-DRBYjDWl.js} +1 -1
- package/dist/dashboard/assets/{diagram-MMDJMWI5-B1vJLt5b.js → diagram-MMDJMWI5-DdlofmeO.js} +1 -1
- package/dist/dashboard/assets/{diagram-TYMM5635-C8P5-4A3.js → diagram-TYMM5635-C8y8IvnA.js} +1 -1
- package/dist/dashboard/assets/{el-GR-BZB4AONW-B9GA8_lO.js → el-GR-BZB4AONW-SsFgxQNu.js} +1 -1
- package/dist/dashboard/assets/{erDiagram-SMLLAGMA-CjWWTCWe.js → erDiagram-SMLLAGMA-OZ3J3PG9.js} +1 -1
- package/dist/dashboard/assets/{es-ES-U4NZUMDT-Ct1wP_9r.js → es-ES-U4NZUMDT-BInO41Bx.js} +1 -1
- package/dist/dashboard/assets/{eu-ES-A7QVB2H4-C-49gWlR.js → eu-ES-A7QVB2H4-DjjnJ8cU.js} +1 -1
- package/dist/dashboard/assets/{fa-IR-HGAKTJCU-DUo8t-xv.js → fa-IR-HGAKTJCU-BjCsO05-.js} +1 -1
- package/dist/dashboard/assets/{fi-FI-Z5N7JZ37-DCObnr3i.js → fi-FI-Z5N7JZ37-kAJ6_O9R.js} +1 -1
- package/dist/dashboard/assets/{flowDiagram-DWJPFMVM-OQ_IRMqG.js → flowDiagram-DWJPFMVM-BvvULyyH.js} +1 -1
- package/dist/dashboard/assets/{fr-FR-RHASNOE6-0EGg3zhN.js → fr-FR-RHASNOE6-CrZukXCy.js} +1 -1
- package/dist/dashboard/assets/{ganttDiagram-T4ZO3ILL-DPTSBcnu.js → ganttDiagram-T4ZO3ILL-Sv7sneaT.js} +2 -2
- package/dist/dashboard/assets/{gitGraphDiagram-UUTBAWPF-BxfeiCqm.js → gitGraphDiagram-UUTBAWPF-BWplv5am.js} +1 -1
- package/dist/dashboard/assets/{gl-ES-HMX3MZ6V-WtVwXY6x.js → gl-ES-HMX3MZ6V-CY3NLwyQ.js} +1 -1
- package/dist/dashboard/assets/{graph-Du_3_o8q.js → graph-DU5PqGxo.js} +1 -1
- package/dist/dashboard/assets/{he-IL-6SHJWFNN-CfgspIku.js → he-IL-6SHJWFNN-DcuQngSU.js} +1 -1
- package/dist/dashboard/assets/{hi-IN-IWLTKZ5I-CS9l2g3B.js → hi-IN-IWLTKZ5I-DKr_uuss.js} +1 -1
- package/dist/dashboard/assets/{hu-HU-A5ZG7DT2-BQ46AerM.js → hu-HU-A5ZG7DT2-CgZklxQN.js} +1 -1
- package/dist/dashboard/assets/{id-ID-SAP4L64H-BeShJyKQ.js → id-ID-SAP4L64H-BFYAclqc.js} +1 -1
- package/dist/dashboard/assets/index-CPZ-rEGO.js +480 -0
- package/dist/dashboard/assets/{index-D7dWmypK.js → index-DhbH7HLB.js} +1 -1
- package/dist/dashboard/assets/index-DrwAz5zg.css +1 -0
- package/dist/dashboard/assets/{infoDiagram-42DDH7IO-CcFhyaQp.js → infoDiagram-42DDH7IO-DcL21hYD.js} +1 -1
- package/dist/dashboard/assets/{ishikawaDiagram-UXIWVN3A-9QJeD00p.js → ishikawaDiagram-UXIWVN3A-CP4-Ha6a.js} +1 -1
- package/dist/dashboard/assets/{it-IT-JPQ66NNP-csyvfk0t.js → it-IT-JPQ66NNP-DgbO8z_0.js} +1 -1
- package/dist/dashboard/assets/{ja-JP-DBVTYXUO-DctpJ2yz.js → ja-JP-DBVTYXUO-2nM4bVbo.js} +1 -1
- package/dist/dashboard/assets/{journeyDiagram-VCZTEJTY-CU4EYedt.js → journeyDiagram-VCZTEJTY-CZV9JSbl.js} +1 -1
- package/dist/dashboard/assets/{kaa-6HZHGXH3-D0tWzHt3.js → kaa-6HZHGXH3-DyVkacqp.js} +1 -1
- package/dist/dashboard/assets/{kab-KAB-ZGHBKWFO-BC-g4xJU.js → kab-KAB-ZGHBKWFO-CqnQNV46.js} +1 -1
- package/dist/dashboard/assets/{kanban-definition-6JOO6SKY-BxXqVmz1.js → kanban-definition-6JOO6SKY-CMFYpVon.js} +1 -1
- package/dist/dashboard/assets/{kk-KZ-P5N5QNE5-TLB3Lxri.js → kk-KZ-P5N5QNE5-CKaF_obh.js} +1 -1
- package/dist/dashboard/assets/{km-KH-HSX4SM5Z-DCh7cRAS.js → km-KH-HSX4SM5Z-DX5TUZuC.js} +1 -1
- package/dist/dashboard/assets/{ko-KR-MTYHY66A-BPIl5ido.js → ko-KR-MTYHY66A-DX2Igsee.js} +1 -1
- package/dist/dashboard/assets/{ku-TR-6OUDTVRD-TUpeN1Tm.js → ku-TR-6OUDTVRD-B0tZGs6G.js} +1 -1
- package/dist/dashboard/assets/{layout-CyrgfqIp.js → layout-3g_7BoW1.js} +1 -1
- package/dist/dashboard/assets/linear-CXZ_mpWm.js +1 -0
- package/dist/dashboard/assets/{lt-LT-XHIRWOB4-BRKyR_Xw.js → lt-LT-XHIRWOB4-BzCZwLwu.js} +1 -1
- package/dist/dashboard/assets/{lv-LV-5QDEKY6T-BANbTe4s.js → lv-LV-5QDEKY6T-Dn-Fj6_V.js} +1 -1
- package/dist/dashboard/assets/{min-lcwVZhZ7.js → min-bJtV9AiD.js} +1 -1
- package/dist/dashboard/assets/{mindmap-definition-QFDTVHPH-fVIbdlXp.js → mindmap-definition-QFDTVHPH-Dz61NELW.js} +1 -1
- package/dist/dashboard/assets/{mr-IN-CRQNXWMA-DLFutdXk.js → mr-IN-CRQNXWMA-D8KTtR8X.js} +1 -1
- package/dist/dashboard/assets/{my-MM-5M5IBNSE-CGWrcNBC.js → my-MM-5M5IBNSE-BbCYwFaj.js} +1 -1
- package/dist/dashboard/assets/{nb-NO-T6EIAALU-CGRDupuc.js → nb-NO-T6EIAALU-DEJxZlzk.js} +1 -1
- package/dist/dashboard/assets/{nl-NL-IS3SIHDZ-BKwBfrzp.js → nl-NL-IS3SIHDZ-DTQekKhh.js} +1 -1
- package/dist/dashboard/assets/{nn-NO-6E72VCQL-DDQkGe44.js → nn-NO-6E72VCQL-Otz1_Q7Y.js} +1 -1
- package/dist/dashboard/assets/{oc-FR-POXYY2M6-DufeHCWh.js → oc-FR-POXYY2M6-BO1pOtcy.js} +1 -1
- package/dist/dashboard/assets/{pa-IN-N4M65BXN-BUzelJDX.js → pa-IN-N4M65BXN-o_zcafD8.js} +1 -1
- package/dist/dashboard/assets/{percentages-BXMCSKIN-FxAvjywS.js → percentages-BXMCSKIN-C9aZbplb.js} +7 -7
- package/dist/dashboard/assets/{pica-Cek5bFnr.js → pica-B0_4dS6Q.js} +1 -1
- package/dist/dashboard/assets/{pieDiagram-DEJITSTG-PgIrKPnB.js → pieDiagram-DEJITSTG-CMwhT31D.js} +1 -1
- package/dist/dashboard/assets/{pl-PL-T2D74RX3-Bd-rxZs3.js → pl-PL-T2D74RX3-CvJKdZLx.js} +1 -1
- package/dist/dashboard/assets/{pt-BR-5N22H2LF-D0QJGoo5.js → pt-BR-5N22H2LF-DH69aomh.js} +1 -1
- package/dist/dashboard/assets/{pt-PT-UZXXM6DQ-DjumltMq.js → pt-PT-UZXXM6DQ-Bt_HMT7S.js} +1 -1
- package/dist/dashboard/assets/{quadrantDiagram-34T5L4WZ-C30tZOBh.js → quadrantDiagram-34T5L4WZ-BdXgbSGH.js} +1 -1
- package/dist/dashboard/assets/{requirementDiagram-MS252O5E-D3vhi-ZB.js → requirementDiagram-MS252O5E-Bq0YQege.js} +1 -1
- package/dist/dashboard/assets/{ro-RO-JPDTUUEW-DmEo8cEd.js → ro-RO-JPDTUUEW-DetQ1m4p.js} +1 -1
- package/dist/dashboard/assets/{ru-RU-B4JR7IUQ-ZHCu1nBu.js → ru-RU-B4JR7IUQ-B744z7Cd.js} +1 -1
- package/dist/dashboard/assets/{sankeyDiagram-XADWPNL6-Cmbs-PxO.js → sankeyDiagram-XADWPNL6-CTYt5Kku.js} +1 -1
- package/dist/dashboard/assets/{sequenceDiagram-FGHM5R23-DlBqk4uQ.js → sequenceDiagram-FGHM5R23-BbPhy9K6.js} +1 -1
- package/dist/dashboard/assets/{si-LK-N5RQ5JYF-iuqtpRqI.js → si-LK-N5RQ5JYF-DueeMRG5.js} +1 -1
- package/dist/dashboard/assets/{sk-SK-C5VTKIMK-BWFUWdaQ.js → sk-SK-C5VTKIMK-BivWC8UI.js} +1 -1
- package/dist/dashboard/assets/{sl-SI-NN7IZMDC-irYTfiq_.js → sl-SI-NN7IZMDC-CHxsSSJQ.js} +1 -1
- package/dist/dashboard/assets/{stateDiagram-FHFEXIEX-B6T9ib8G.js → stateDiagram-FHFEXIEX-DAPXkQkR.js} +1 -1
- package/dist/dashboard/assets/stateDiagram-v2-QKLJ7IA2-ZA5uLv7f.js +1 -0
- package/dist/dashboard/assets/{subset-shared.chunk-LTgWgeng.js → subset-shared.chunk-CxWeBga7.js} +1 -1
- package/dist/dashboard/assets/{subset-worker.chunk-CT_2iDuG.js → subset-worker.chunk-V3gpxiYs.js} +1 -1
- package/dist/dashboard/assets/{sv-SE-XGPEYMSR-BvDzjArd.js → sv-SE-XGPEYMSR-C-EJgqb-.js} +1 -1
- package/dist/dashboard/assets/{ta-IN-2NMHFXQM-DdsS_3Yq.js → ta-IN-2NMHFXQM-DAjiKKkH.js} +1 -1
- package/dist/dashboard/assets/{th-TH-HPSO5L25-Duadkok3.js → th-TH-HPSO5L25-Bq7BADtY.js} +1 -1
- package/dist/dashboard/assets/{timeline-definition-GMOUNBTQ-CHTQqVpC.js → timeline-definition-GMOUNBTQ-BJhY_iVV.js} +1 -1
- package/dist/dashboard/assets/{tr-TR-DEFEU3FU-CTnPpl_3.js → tr-TR-DEFEU3FU--adx_Tct.js} +1 -1
- package/dist/dashboard/assets/{uk-UA-QMV73CPH-CAqmQ01_.js → uk-UA-QMV73CPH-DfnkGhht.js} +1 -1
- package/dist/dashboard/assets/{vennDiagram-DHZGUBPP-tWl34rwo.js → vennDiagram-DHZGUBPP-BpuWdXIB.js} +1 -1
- package/dist/dashboard/assets/{vi-VN-M7AON7JQ-Cz7FDG8R.js → vi-VN-M7AON7JQ-RQSwYL0s.js} +1 -1
- package/dist/dashboard/assets/{wardley-RL74JXVD-UjdnBcpJ.js → wardley-RL74JXVD-BuB77QmE.js} +1 -1
- package/dist/dashboard/assets/{wardleyDiagram-NUSXRM2D-KhVWSzPf.js → wardleyDiagram-NUSXRM2D-BomUXaGE.js} +1 -1
- package/dist/dashboard/assets/{xychartDiagram-5P7HB3ND-SwtVQYTW.js → xychartDiagram-5P7HB3ND-BueWOzBo.js} +1 -1
- package/dist/dashboard/assets/{zh-CN-LNUGB5OW-B7cbFS35.js → zh-CN-LNUGB5OW-Bq_CyCdn.js} +1 -1
- package/dist/dashboard/assets/{zh-HK-E62DVLB3-CLi9BFmp.js → zh-HK-E62DVLB3-dhMk2wl1.js} +1 -1
- package/dist/dashboard/assets/{zh-TW-RAJ6MFWO-XAcgJHay.js → zh-TW-RAJ6MFWO-BTBKc5WB.js} +1 -1
- package/dist/dashboard/index.html +2 -2
- package/dist/index.js +1457 -780
- package/dist/skill-packs/goal-skill/SKILL.md +8 -6
- package/package.json +1 -1
- package/skill/SKILL.md +3 -3
- package/skill-packs/goal-skill/SKILL.md +8 -6
- package/dist/dashboard/assets/channel-C5p1t-nJ.js +0 -1
- package/dist/dashboard/assets/classDiagram-6PBFFD2Q-sTJpbWV4.js +0 -1
- package/dist/dashboard/assets/classDiagram-v2-HSJHXN6E-sTJpbWV4.js +0 -1
- package/dist/dashboard/assets/clone-DTslXBzp.js +0 -1
- package/dist/dashboard/assets/index-C9VT2u9E.js +0 -480
- package/dist/dashboard/assets/index-DoFaQKCx.css +0 -1
- package/dist/dashboard/assets/linear-B6cMUkoc.js +0 -1
- package/dist/dashboard/assets/stateDiagram-v2-QKLJ7IA2-CN0hAOp7.js +0 -1
package/README.md
CHANGED
|
@@ -19,8 +19,10 @@
|
|
|
19
19
|
<a href="#skills">Skills</a> ·
|
|
20
20
|
<a href="#staying-up-to-date">Updating</a> ·
|
|
21
21
|
<a href="#dashboard">Dashboard</a> ·
|
|
22
|
+
<a href="#desktop-app">Desktop App</a> ·
|
|
22
23
|
<a href="#council">Council</a> ·
|
|
23
24
|
<a href="#memory-recall">Memory Recall</a> ·
|
|
25
|
+
<a href="#federation">Federation</a> ·
|
|
24
26
|
<a href="#commands">Commands</a> ·
|
|
25
27
|
<a href="DEEP-DIVE.md">Deep Dive</a>
|
|
26
28
|
</p>
|
|
@@ -139,7 +141,7 @@ flowchart LR
|
|
|
139
141
|
curl -fsSL https://cdn.jsdelivr.net/npm/dreamcontext/install.sh | sh
|
|
140
142
|
```
|
|
141
143
|
|
|
142
|
-
> Served from the published npm package via CDN — works with a private repo, no GitHub access needed.
|
|
144
|
+
> Served from the published npm package via CDN — works with a private repo, no GitHub access needed. On macOS this also installs the optional [desktop app](#desktop-app) into `~/Applications` (skip with `DREAMCONTEXT_INSTALL_NO_APP=1`).
|
|
143
145
|
|
|
144
146
|
**Manual install (npm):**
|
|
145
147
|
|
|
@@ -214,7 +216,9 @@ your-project/
|
|
|
214
216
|
│ │ ├── dreamcontext-explore.md
|
|
215
217
|
│ │ ├── sleep-tasks.md # RemSleep specialists —
|
|
216
218
|
│ │ ├── sleep-state.md # the agent fans out to
|
|
217
|
-
│ │
|
|
219
|
+
│ │ ├── sleep-product.md # these three in parallel
|
|
220
|
+
│ │ ├── sleep-federation.md # conditional: when peer connections exist
|
|
221
|
+
│ │ └── sleep-migration.md # conditional: when a migration is pending
|
|
218
222
|
│ └── settings.json # 7 hooks (see Commands → System)
|
|
219
223
|
```
|
|
220
224
|
|
|
@@ -357,6 +361,27 @@ It also ships a built-in **“What is this?”** explainer page — a full landi
|
|
|
357
361
|
|
|
358
362
|
Light and dark mode with system preference detection. Brand palette: purple-to-magenta gradient. Visby CF font with system font fallback.
|
|
359
363
|
|
|
364
|
+
## Desktop App
|
|
365
|
+
|
|
366
|
+
> **macOS beta.** A native **Tauri 2** app that wraps the same dashboard server, so you manage every project from one window instead of a localhost tab per repo. Ships via the desktop release (and the macOS one-line installer), not the npm package.
|
|
367
|
+
|
|
368
|
+
```bash
|
|
369
|
+
dreamcontext app install # Install to ~/Applications (no admin, no quarantine prompt)
|
|
370
|
+
dreamcontext app update # Update the installed app to the latest release
|
|
371
|
+
dreamcontext app status # Show installed app version and state
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
- **Multi-vault launcher.** The app lists every registered [vault](#federation) and opens each project in its **own window** — multi-vault is multi-window over one shared Node server, with each window pinned to its vault via a request header. A per-project status dot (green up-to-date / yellow needs-update / red folder-gone) lets you run `update` from the UI.
|
|
375
|
+
- **Federation network view.** The launcher also renders your projects as an interactive board (Excalidraw-style cards) where you wire two kinds of relationship by clicking source → target: **reads** (violet — one project reads another's memory live during recall, gated by the target being Readable) and **sync** (teal — at sleep, a project's new knowledge is pushed into a listener's brain). Drawing a sync sets both sides' consent in one gesture; a node panel and an always-on "Connections" list spell out in plain language who reads and who listens to whom, each removable with one click.
|
|
376
|
+
- **In-app onboarding, no terminal.** A quiz-style wizard creates a brand-new project (native folder picker) or initializes an existing folder, scaffolds `_dream_context/`, runs `setup`, and best-effort installs the global CLI. It's deterministic and LLM-free; the success screen hands you a prompt to paste into Claude Code for the rich enrichment pass.
|
|
377
|
+
- **Sleepy — notch quick-capture _(beta)_.** A global-hotkey companion that drops a transparent notch panel over whatever you're doing, with an animated mascot whose mood follows your sleep debt. Pick a vault, type a thought, and choose a mode:
|
|
378
|
+
- **Learn** — saves the note to project memory, then enriches it.
|
|
379
|
+
- **Ask** — one-shot Q&A about the project; nothing is saved.
|
|
380
|
+
- **Sleep** — triggers a full consolidation cycle for that vault from the notch.
|
|
381
|
+
- **Continuous updates without Apple notarization.** The whole delivery path is CLI/curl-driven, so Gatekeeper's notarization check never fires (ad-hoc signing satisfies Apple Silicon). The app prefers your globally-installed, auto-upgrading CLI over its bundled copy, so ~95% of changes ride the normal CLI upgrade with no app rebuild. Downloaded artifacts require a matching `.sha256` or the install refuses.
|
|
382
|
+
|
|
383
|
+
> The desktop app is a working local beta — not yet Apple-signed/notarized, so first launch may need a right-click → Open. Windows/Linux are nice-to-have for later.
|
|
384
|
+
|
|
360
385
|
## Council
|
|
361
386
|
|
|
362
387
|
**Multi-persona debates for hard decisions.** When a question is too load-bearing for a single model pass — architecture calls, hiring reviews, risk-heavy migrations, brand critiques — a council lets you convene N personas, run them through N rounds of structured deliberation, and synthesize a verdict that cites the contributing voices.
|
|
@@ -426,6 +451,42 @@ Hook injection is **ON by default**: top hits are auto-surfaced to the agent on
|
|
|
426
451
|
|
|
427
452
|
**Recent CHANGELOG in the snapshot is tiered**: top 3 entries detailed (summary + ~300 char body), next 10 titles-only under an "Older" subheading. Everything older still lives in `CHANGELOG.json` and is reachable through `memory recall --types changelog`.
|
|
428
453
|
|
|
454
|
+
## Federation
|
|
455
|
+
|
|
456
|
+
Most people end up with more than one dreamcontext project. **Federation** lets those projects discover each other, recall across each other, and quietly share consolidated knowledge — all opt-in, all local, no server in the middle.
|
|
457
|
+
|
|
458
|
+
It starts with a **global vault registry** — every project you register is a *vault* the CLI (and the [desktop app](#desktop-app)) can address by name.
|
|
459
|
+
|
|
460
|
+
```bash
|
|
461
|
+
dreamcontext vaults add <name> <path> # Register a project directory as a vault
|
|
462
|
+
dreamcontext vaults discover [root] # Find every _dream_context/ project under a tree
|
|
463
|
+
dreamcontext vaults discover ~/projects --register # …and register the new ones (idempotent)
|
|
464
|
+
dreamcontext vaults list # List all registered vaults
|
|
465
|
+
dreamcontext vaults remove <name> # Unregister a vault
|
|
466
|
+
```
|
|
467
|
+
|
|
468
|
+
**Cross-vault recall.** Point a recall at other vaults and it spans them, returning hits tagged with their source vault. Only vaults you've marked shareable are reachable.
|
|
469
|
+
|
|
470
|
+
```bash
|
|
471
|
+
dreamcontext config shareable on # Allow this vault to be recalled by peers
|
|
472
|
+
dreamcontext memory recall "<query>" --vault other-project # Also search a named vault (repeatable)
|
|
473
|
+
dreamcontext memory recall "<query>" --connected # Span this vault + its out/both connections
|
|
474
|
+
dreamcontext memory recall "<query>" --all-vaults # Span this vault + every shareable vault
|
|
475
|
+
```
|
|
476
|
+
|
|
477
|
+
**Connections + the sleep-driven digest inbox.** Connect two vaults and, during sleep consolidation, a conditional `sleep-federation` specialist pushes a recall-filtered **digest** of what changed into each consenting peer's inbox. The receiving project ingests those entries as first-class knowledge on its next drain — so a decision made in one repo can surface in a sibling repo without copy-paste.
|
|
478
|
+
|
|
479
|
+
```bash
|
|
480
|
+
dreamcontext connect <vault> --direction both --topics api,auth # Connect to a peer (out | in | both)
|
|
481
|
+
dreamcontext connections # Inspect this vault's federation connections
|
|
482
|
+
dreamcontext disconnect <vault> # Remove a connection
|
|
483
|
+
dreamcontext federation status # Inbox counts + per-connection sync watermarks
|
|
484
|
+
dreamcontext federation sync --dry-run # Preview the digests a sleep cycle would push
|
|
485
|
+
dreamcontext federation drain # Ingest pending inbox entries as knowledge, then consume them
|
|
486
|
+
```
|
|
487
|
+
|
|
488
|
+
Federation is **read-only and consent-gated by construction**: the browser-reachable dashboard route can only *preview* digests, never write into a peer; all writes live in the CLI (run by the sleep specialist), where the consent rule and watermark advance stay in one auditable place. Every ingested entry carries its provenance (origin vault, entry id, source timestamp). Dead or unreachable peers are marked stale and skipped, warned once.
|
|
489
|
+
|
|
429
490
|
## Commands
|
|
430
491
|
|
|
431
492
|
### Core
|
|
@@ -503,8 +564,11 @@ dreamcontext tasks sync-hooks install # best-effort post-commit/pr
|
|
|
503
564
|
```bash
|
|
504
565
|
dreamcontext features create <name> # Create a feature PRD
|
|
505
566
|
dreamcontext features insert <name> <section> <content>
|
|
567
|
+
dreamcontext features doctor # Audit PRD freshness (stale / orphaned / dangling refs)
|
|
506
568
|
```
|
|
507
569
|
|
|
570
|
+
Feature PRDs track freshness the same way knowledge does. `features doctor` reports which PRDs have gone stale, which have no linked task or release, and which reference things that no longer exist — so the sleep cycle (and you) can keep them in step with the code.
|
|
571
|
+
|
|
508
572
|
### Knowledge
|
|
509
573
|
|
|
510
574
|
```bash
|
|
@@ -523,6 +587,9 @@ Set `pinned: true` in frontmatter to auto-load a knowledge file in every snapsho
|
|
|
523
587
|
dreamcontext memory recall <query...> # BM25 search over knowledge + features + tasks + memory + changelog
|
|
524
588
|
dreamcontext memory recall <query...> --top 10 # Number of hits (1-50, default 5)
|
|
525
589
|
dreamcontext memory recall <query...> --types knowledge,task,changelog
|
|
590
|
+
dreamcontext memory recall <query...> --vault other # Also search a named vault (repeatable)
|
|
591
|
+
dreamcontext memory recall <query...> --connected # Span this vault + its connected peers
|
|
592
|
+
dreamcontext memory recall <query...> --all-vaults # Span every shareable registered vault
|
|
526
593
|
dreamcontext memory recall <query...> --json # Machine-readable
|
|
527
594
|
dreamcontext memory recall <query...> --plain # No ANSI colors
|
|
528
595
|
dreamcontext memory remember "<text>" # Writes a CHANGELOG entry (type=note, scope=quick by default)
|
|
@@ -605,6 +672,33 @@ dreamcontext council promote --to <knowledge-slug> # Promote verdict to knowl
|
|
|
605
672
|
|
|
606
673
|
See the [Council](#council) section above for the full workflow.
|
|
607
674
|
|
|
675
|
+
### Vaults & Federation
|
|
676
|
+
|
|
677
|
+
```bash
|
|
678
|
+
dreamcontext vaults add <name> <path> # Register a project as a vault
|
|
679
|
+
dreamcontext vaults discover [root] # Find every _dream_context/ project under a tree
|
|
680
|
+
dreamcontext vaults discover [root] --register # …and register the new ones
|
|
681
|
+
dreamcontext vaults list # List registered vaults
|
|
682
|
+
dreamcontext vaults remove <name> # Unregister a vault
|
|
683
|
+
dreamcontext config shareable <on|off> # Allow/deny this vault being recalled by peers
|
|
684
|
+
dreamcontext connect <vault> [--direction out|in|both] [--topics a,b] # Connect to a peer
|
|
685
|
+
dreamcontext connections # Inspect federation connections
|
|
686
|
+
dreamcontext disconnect <vault> # Remove a connection
|
|
687
|
+
dreamcontext federation status # Inbox counts + per-connection sync watermarks
|
|
688
|
+
dreamcontext federation sync [--dry-run] # Push (or preview) digests into consenting peers
|
|
689
|
+
dreamcontext federation drain # Ingest pending inbox entries as knowledge
|
|
690
|
+
```
|
|
691
|
+
|
|
692
|
+
See the [Federation](#federation) section above for the full workflow.
|
|
693
|
+
|
|
694
|
+
### Desktop App (macOS)
|
|
695
|
+
|
|
696
|
+
```bash
|
|
697
|
+
dreamcontext app install # Install the desktop app to ~/Applications
|
|
698
|
+
dreamcontext app update # Update the installed app
|
|
699
|
+
dreamcontext app status # Show installed app version and state
|
|
700
|
+
```
|
|
701
|
+
|
|
608
702
|
### Dashboard
|
|
609
703
|
|
|
610
704
|
```bash
|
|
@@ -647,8 +741,9 @@ dreamcontext install-claude-md # Legacy alias: CLAUDE.md only
|
|
|
647
741
|
|
|
648
742
|
## Works With
|
|
649
743
|
|
|
650
|
-
- **Claude Code**: full support via skill,
|
|
744
|
+
- **Claude Code**: full support via skill, core sub-agents (initializer, explore, the three primary RemSleep specialists — sleep-tasks, sleep-state, sleep-product — plus conditional sleep-federation and sleep-migration specialists), 7 hooks, plus optional pack sub-agents (council persona/synthesizer, multi-review specialists, goal-skill orchestrators)
|
|
651
745
|
- **Codex**: project-level skills (`.agents/skills`), managed `AGENTS.md`, native `.codex/agents/*.toml`, and managed `.codex/config.toml` hooks (best-effort parity where event semantics differ)
|
|
746
|
+
- **Desktop app (macOS beta)**: native Tauri 2 multi-vault launcher with in-app onboarding and the Sleepy notch quick-capture companion — wraps the same dashboard server (`dreamcontext app install`)
|
|
652
747
|
- **Web Dashboard**: local UI with Kanban, Core editor, Knowledge, Features, Brain graph, Sleep tracker, and Council Hall (ships in the package)
|
|
653
748
|
- **Obsidian**: `_dream_context/` can be opened as an Obsidian vault; the directory is scaffolded with curated vault settings at `dreamcontext init` time
|
|
654
749
|
|
package/agents/sleep-product.md
CHANGED
|
@@ -162,6 +162,24 @@ If the relevant task has `product: X` in frontmatter, the PRD MAY be product-sco
|
|
|
162
162
|
|
|
163
163
|
### Pass B — Knowledge
|
|
164
164
|
|
|
165
|
+
#### B0. Organize — folders, grouping, and placement
|
|
166
|
+
|
|
167
|
+
Before curating content, keep the knowledge store's *structure* logical. `knowledge/**/*.md` is indexed recursively (`buildKnowledgeIndex` globs `**/*.md`), so subfolders are fully recall-safe — grouping a file never hides it.
|
|
168
|
+
|
|
169
|
+
**Diagrams → per-title folders (idempotent, any depth).** Preferred layout is `knowledge/diagrams/<title>/<title>.excalidraw.md` — the board plus its dark-sibling `.board.cjs`/`.json` living together. New boards often land flat (`knowledge/diagrams/<title>.excalidraw.md` next to `<title>.board.cjs`). Fold *canonical* flat boards into per-title folders every cycle:
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
dreamcontext migrations apply-diagrams # idempotent: moves flat canonical boards + same-basename siblings, rewrites inbound [[wikilinks]] atomically; prints "nothing to organize" when already clean
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
Placement judgment FIRST: only canonical boards (architecture, system flows, roadmaps, durable plans a future session should recall) belong under `knowledge/diagrams/`. Scratch/exploratory/in-progress boards belong in `inbox/` or `workspace/` (dark by location — not indexed) — leave those alone; do NOT pull them into knowledge. Never hand-edit board scene JSON or wikilinks — the command owns both. This catches boards created *after* the one-time `0.7.2/diagrams-folder-convention` migration already recorded in the ledger (which `sleep-migration` will not re-fire for).
|
|
176
|
+
|
|
177
|
+
**Knowledge → logical subfolders (grouping; moves are deep-only).** When ≥3 top-level `knowledge/*.md` files form a clear topical cluster a future session would browse together (mirroring the existing `data-structures/` and `products/` subfolders), group them under `knowledge/<group>/`. Moving files + rewriting links is a structural op — gate it exactly like merge-with-delete (B1.5):
|
|
178
|
+
- **light/standard:** do NOT move. **Flag the cluster in your report** (`group candidate: <group>/ ← a.md, b.md, c.md`) for the next deep cycle.
|
|
179
|
+
- **deep:** archive-before (the B1.5 safety net), then move the files and rewrite inbound `[[old-slug]]` references — **target token only**, preserve `|alias` and `#anchor`. Verify every file still lists: `dreamcontext knowledge index --plain`.
|
|
180
|
+
|
|
181
|
+
Group only on a **sharp** topical boundary — the same B2 create-vs-extend test, applied to folders. Don't fragment (one folder per file) and don't over-nest. After any group/move, re-check the moved files' tags in Pass C so the folder and the tags tell the same story.
|
|
182
|
+
|
|
165
183
|
#### B1. Decide: create, update, archive, or pin
|
|
166
184
|
|
|
167
185
|
For each knowledge candidate (research finding, sleep-state flag, extracted overflow):
|
|
@@ -176,6 +194,26 @@ For each knowledge candidate (research finding, sleep-state flag, extracted over
|
|
|
176
194
|
| Overflow extracted from core file (one-line reference left there) | `dreamcontext knowledge create <slug>` and paste the extracted content |
|
|
177
195
|
| Cross-cutting finding from your own features pass | Capture inline (no need to flag — you own both domains this cycle) |
|
|
178
196
|
|
|
197
|
+
#### B1.5. Depth gating — what you may actually DO this cycle
|
|
198
|
+
|
|
199
|
+
Your orchestrator brief states a `depth: <light|standard|deep>`. **Destructive/expensive knowledge ops run ONLY at `deep`.** Tag every action you are about to take:
|
|
200
|
+
|
|
201
|
+
| Tier | Allowed at light/standard? | Actions |
|
|
202
|
+
|---|---|---|
|
|
203
|
+
| **Non-destructive** | ✅ yes (any depth) | create a new file, extend an existing file, retag, flip `pinned`, tick checkboxes, append a section |
|
|
204
|
+
| **Deep-only** | ❌ no — `deep` required | merge-with-delete (fold two files into one and delete the loser), summarize-and-replace still-valid detail, archive/delete a stale file |
|
|
205
|
+
|
|
206
|
+
**At light/standard:** if you spot a merge or deletion candidate, do NOT act on it — **flag it in your report** ("merge candidates: `<a>` + `<b>`") so the next deep cycle (or the user via `sleep start --deep` / desktop Sleep) handles it. The agent MAY bump one tier with a stated reason if signals clearly warrant it (e.g. two exact-duplicate files at standard), but state the bump and reason explicitly in your report.
|
|
207
|
+
|
|
208
|
+
**Archive-before-delete safety net (deep only, MANDATORY):** before ANY deep-tier merge-with-delete or summarize-and-replace, FIRST copy the file you are about to lose to a dated archive:
|
|
209
|
+
|
|
210
|
+
```bash
|
|
211
|
+
mkdir -p _dream_context/knowledge/.archive
|
|
212
|
+
cp _dream_context/knowledge/<slug>.md "_dream_context/knowledge/.archive/<slug>-$(date +%Y%m%d).md"
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
The dated archive copy is the recovery net; the "Dropped-but-load-bearing self-check" report line is the audit signal. Both are required for every destructive op.
|
|
216
|
+
|
|
179
217
|
#### B2. Create vs. extend — the consolidation rubric
|
|
180
218
|
|
|
181
219
|
**A knowledge file is a tag-able identity, not a dumping ground.** Aim for the *fewest* files that keep each topic cleanly findable. Fragmenting one topic across many near-duplicate slugs makes tags noisy and recall worse; cramming unrelated topics into one super-file makes tags meaningless. Pick the boundary on purpose.
|
|
@@ -330,6 +368,10 @@ dreamcontext taxonomy resolve <tag>
|
|
|
330
368
|
- 5 user stories, 5 acceptance criteria
|
|
331
369
|
- No-op feature signals: 1 (signal "feature_advanced=marketing-dashboard-v0" — but PRD exists and no criteria moved)
|
|
332
370
|
|
|
371
|
+
### Organization
|
|
372
|
+
- Diagrams: ran `apply-diagrams` — folded knowledge/diagrams/federation.excalidraw.md (+federation.board.cjs) into diagrams/federation/ (canonical board, was flat). 0 ambiguous.
|
|
373
|
+
- Knowledge grouping: group candidate flagged for deep cycle — `decisions/` ← decision-mem0-vs-bm25-recall.md, decision-link-aware-vs-embedding-recall.md, decision-meta-marketing-skill-adoption.md (4 sibling `decision-*` files browse together). Not moved (standard depth).
|
|
374
|
+
|
|
333
375
|
### Knowledge
|
|
334
376
|
- Created: knowledge/jwt-rotation-policy.md (tags: security, decisions; from sleep-state flag) — sharp boundary, new tag-able topic
|
|
335
377
|
- Extended (no new file): knowledge/competitive-analysis-ecc.md — folded the new ECC pricing finding into the existing file (soft distinction, same topic family) instead of forking a near-duplicate slug; updated `summary:`
|
|
@@ -341,6 +383,8 @@ dreamcontext taxonomy resolve <tag>
|
|
|
341
383
|
- taxonomy init: no-op (core/taxonomy.json already exists)
|
|
342
384
|
- audit: 2 nonCanonical tags fixed (knowledge/auth-design.md: auth → domain:security; state/task-slug.md: db → domain:database)
|
|
343
385
|
- Domain Vocabulary: added 'ripple' via `taxonomy add topic:ripple`, added alias 'bookmarking' → 'topic:sleep' via `taxonomy alias bookmarking topic:sleep`
|
|
386
|
+
|
|
387
|
+
Dropped-but-load-bearing self-check: <none | list any digest/auto-bookmark/research finding you saw but did NOT promote into a feature/knowledge file, with the reason>
|
|
344
388
|
```
|
|
345
389
|
|
|
346
390
|
## Rules
|
|
@@ -353,6 +397,7 @@ dreamcontext taxonomy resolve <tag>
|
|
|
353
397
|
6. **Don't create knowledge that already fits in memory.** A short technical decision belongs in `2.memory.md` (sleep-state's domain), not its own knowledge file.
|
|
354
398
|
7. **Knowledge file threshold**: ≥3 paragraphs of content, or material that will be re-read in future sessions.
|
|
355
399
|
8. **Fewest files, sharp boundaries (B2 rubric).** Default to extending an existing file. Fold soft distinctions in — same vertical/brand/topic family, a narrower slice, an increment. Create a new file only for a genuinely separate topic whose own tags sharpen discovery. Not super-files, not fragmentation.
|
|
400
|
+
8a. **Keep the store organized (B0).** Every cycle, fold canonical flat diagram boards into per-title folders (`apply-diagrams`, idempotent, any depth). Group clustered top-level knowledge into logical subfolders only at `deep` depth (flag candidates at light/standard). Subfolders are recall-safe — the index globs `**/*.md`. Folder and tags must tell the same story.
|
|
356
401
|
9. **Use standard tags only (prefer taxonomy vocab).** New tags fragment discovery; always check `dreamcontext taxonomy vocab` before tagging. Add new vocabulary via `taxonomy add` or `taxonomy alias` — never hand-edit `core/taxonomy.json` directly.
|
|
357
402
|
10. **Process all flags from sleep-state** in your report — don't silently drop them.
|
|
358
403
|
11. **No-op cheaply** when signals don't actually warrant work.
|
package/agents/sleep-state.md
CHANGED
|
@@ -189,7 +189,7 @@ dreamcontext defaults to single-person. When you have **corroborated evidence**
|
|
|
189
189
|
**Detection gate — require ≥2 corroborated signals** before flipping a project to multi-person (this gate prevents false positives; one weak signal is never enough):
|
|
190
190
|
|
|
191
191
|
- **Self-identification in user turns** — a person names themselves or another teammate ("this is Ada", "Mehmet asked me to…", "I'm covering for Lina").
|
|
192
|
-
- **Distinct git authors since the epoch** — `git log --since="$CUTOFF" --format='%an <%ae>' | sort -u` returns more than one real human author (
|
|
192
|
+
- **Distinct git authors since the epoch** — `git log --since="$CUTOFF" --format='%an <%ae>' | sort -u` returns more than one real human author. Apply the **shared bot-filter** (drop any author whose kebab-case slug contains `github-actions` or `dependabot`) — this is the same `BOT_SLUG_FRAGMENTS` list `attributeByPerson` in `src/lib/attribution.ts` uses, so per-person attribution stays consistent with detection.
|
|
193
193
|
- **Distinct voice / handoff** — the transcript shows a clear authorship handoff or a different working style/voice than the established user.
|
|
194
194
|
|
|
195
195
|
```bash
|
|
@@ -273,6 +273,8 @@ You do **not** edit knowledge files. Produce flags for `sleep-product` to act on
|
|
|
273
273
|
|
|
274
274
|
### Cross-domain mentions (for other specialists)
|
|
275
275
|
- (none) | OR: research finding worth long-term retention — flagging for sleep-product
|
|
276
|
+
|
|
277
|
+
Dropped-but-load-bearing self-check: <none | list any digest/auto-bookmark/decision you saw but did NOT promote into changelog/core/2.memory.md, with the reason>
|
|
276
278
|
```
|
|
277
279
|
|
|
278
280
|
## Rules
|
package/agents/sleep-tasks.md
CHANGED
|
@@ -100,7 +100,7 @@ Untracked, genuinely-separate work is invisible to future sessions — always li
|
|
|
100
100
|
|
|
101
101
|
### 2.5. Person attribution (multi-person projects only)
|
|
102
102
|
|
|
103
|
-
When the project's `.config.json` `people` array has **>1 entry**, the person responsible for a task's progress this cycle must be recorded as a `person:<slug>` tag in the task's frontmatter `tags` array. Slug is kebab-case matching the roster (e.g., `person:mehmet`, `person:ada`). Determine attribution from the same signals sleep-state uses for Pass B.5 (git `%an` on the commits, self-identification in the session transcript).
|
|
103
|
+
When the project's `.config.json` `people` array has **>1 entry**, the person responsible for a task's progress this cycle must be recorded as a `person:<slug>` tag in the task's frontmatter `tags` array. Slug is kebab-case matching the roster (e.g., `person:mehmet`, `person:ada`). Determine attribution from the same signals sleep-state uses for Pass B.5 (git `%an` on the commits, self-identification in the session transcript), applying the **shared bot-filter** — drop any author whose kebab-case slug contains `github-actions` or `dependabot` (the `BOT_SLUG_FRAGMENTS` list in `src/lib/attribution.ts`, consumed by `attributeByPerson`). Never tag a task `person:github-actions`.
|
|
104
104
|
|
|
105
105
|
```bash
|
|
106
106
|
# Read the current roster
|
|
@@ -139,15 +139,24 @@ A fresh session opening this task file should see the *current plan*.
|
|
|
139
139
|
|
|
140
140
|
**Tip — recall before reconciling.** If you're unsure whether a decision observed this session was already captured elsewhere (memory entry, sibling task, knowledge file), run `dreamcontext memory recall "<topic>"` to surface the top hits across the corpus before you edit. Cheaper than grep, deterministic, and helps you avoid duplicating a decision that already lives in `2.memory.md` (which `sleep-state` owns).
|
|
141
141
|
|
|
142
|
-
### 4. Status —
|
|
142
|
+
### 4. Status — review only when genuinely needed
|
|
143
143
|
|
|
144
|
-
|
|
144
|
+
Pick the status that matches reality. **Do NOT reflexively bump everything to `in_review`** — that buries the few tasks that actually need the user's eyes under a pile that didn't, and leaves finished work rotting half-closed.
|
|
145
|
+
|
|
146
|
+
| The task this cycle is… | Status |
|
|
147
|
+
|---|---|
|
|
148
|
+
| **Demonstrably done, low-risk, and already validated** — acceptance criteria met, tests green, nothing a human must second-guess (chores, docs, mechanical refactors, well-covered fixes) | `completed` — close it. |
|
|
149
|
+
| **Done but it genuinely needs the user's verification** — a user-facing behaviour change, a design/architecture decision, a risky or critical-path change, or a criterion that can't be mechanically proven | `in_review` with a one-line "what to verify". |
|
|
150
|
+
| **Work clearly continues next session** | leave `in_progress`. |
|
|
145
151
|
|
|
146
152
|
```bash
|
|
147
|
-
|
|
153
|
+
# Done + validated + nothing to second-guess → close it:
|
|
154
|
+
dreamcontext tasks status <slug> completed "<what shipped — done, validated, no review needed>"
|
|
155
|
+
# A human must actually confirm something → hand it over:
|
|
156
|
+
dreamcontext tasks status <slug> in_review "Needs your eyes — <the specific thing to verify>"
|
|
148
157
|
```
|
|
149
158
|
|
|
150
|
-
|
|
159
|
+
The single test: **would the user actually want to look at this before it's closed?** If yes → `in_review`. If it's done and there's nothing to second-guess → `completed`. When you're genuinely unsure, prefer `in_review`. Only the never-done categories below (superseded / abandoned / obsoleted) ever go to `in_review` *for closing* — that's handing the user a close decision, not a completion.
|
|
151
160
|
|
|
152
161
|
### 5. Version readiness signal (no auto-release)
|
|
153
162
|
|
|
@@ -162,45 +171,57 @@ dreamcontext tasks list --status completed
|
|
|
162
171
|
|
|
163
172
|
If every task linked to the active version is `completed` (or only `in_review` remains), surface this in your report. Do **not** release — that's the user's call.
|
|
164
173
|
|
|
165
|
-
### 6.
|
|
174
|
+
### 6. Backlog grooming — the active list must stay honest
|
|
166
175
|
|
|
167
|
-
|
|
176
|
+
A backlog that nobody has touched in weeks, or that still describes a plan we've since pivoted away from, isn't "active" — it bloats every SessionStart snapshot (each non-completed task costs snapshot tokens on every session) and buries the work that actually matters. Each cycle, groom the whole active list, not just this cycle's tasks:
|
|
168
177
|
|
|
169
178
|
```bash
|
|
170
179
|
dreamcontext tasks list # every non-completed task, with updated dates
|
|
171
180
|
```
|
|
172
181
|
|
|
173
|
-
|
|
182
|
+
**(a) Direction changes & relevance.** If this cycle revealed a pivot — a new idea, a changed plan, a dropped direction — propagate it to the backlog, don't leave stale tasks describing the old plan:
|
|
183
|
+
|
|
184
|
+
| Situation | Action |
|
|
185
|
+
|---|---|
|
|
186
|
+
| A task is partly obsoleted by the pivot | Reconcile its body (step 3): drop the obsolete user stories / criteria, replace stale Technical Details. Keep what's still relevant. |
|
|
187
|
+
| A task is **wholly** made irrelevant by the pivot | Don't silently delete. `dreamcontext tasks status <slug> in_review "obsoleted by <pivot> — confirm close"` — closing someone's planned work is the user's call. |
|
|
188
|
+
| A task now belongs to a different milestone/version | Fix its `version:` frontmatter (Edit the field directly — there's no status-time version verb) so it attaches to the right planning version. |
|
|
189
|
+
|
|
190
|
+
**(b) Staleness.** For each task whose `updated` is **21+ days old** and that no session in this cycle touched, pick one:
|
|
174
191
|
|
|
175
192
|
| Situation | Action |
|
|
176
193
|
|---|---|
|
|
177
|
-
| Work was actually done but never logged | Reconcile it now (steps 3-4) — that's a capture failure, fix it. |
|
|
194
|
+
| Work was actually done but never logged | Reconcile it now (steps 3-4) — that's a capture failure, fix it. If it's done + validated, `completed`; if it needs eyes, `in_review`. |
|
|
178
195
|
| Superseded / absorbed by another task | Log a final entry naming the successor, then `dreamcontext tasks status <slug> in_review "superseded by <other-slug> — confirm close"`. |
|
|
179
196
|
| Still genuinely planned, just not started | Leave it, but verify its priority isn't inflated — a `high` task untouched for a month is not high priority; downgrade via Edit. |
|
|
180
197
|
| Abandoned / no longer relevant | `dreamcontext tasks status <slug> in_review "stale 21+ days, appears abandoned — confirm close"`. |
|
|
181
198
|
|
|
182
|
-
|
|
199
|
+
**(c) Tagging.** Tags drive recall — sharpen them every cycle. Normalize every task's frontmatter `tags` to the taxonomy vocab (`dreamcontext taxonomy vocab`), and *add* missing facets (area / type / feature) where a task is under-tagged. A well-tagged backlog is found; a poorly-tagged one is re-derived blind.
|
|
200
|
+
|
|
201
|
+
Never silently delete a task, and never `completed` a task that was never actually done — for superseded/abandoned/obsoleted work, `in_review` with an explicit reason hands the close decision to the user. List every grooming action in your report.
|
|
183
202
|
|
|
184
203
|
## Return — short report
|
|
185
204
|
|
|
186
205
|
```
|
|
187
206
|
## sleep-tasks report
|
|
188
|
-
- Updated: <slug> (in_progress → in_review, "<
|
|
207
|
+
- Updated: <slug> (in_progress → completed, "<done, validated, no review needed>"), <slug> (in_progress → in_review, "<the specific thing the user must verify>"), <slug> (logged)
|
|
189
208
|
- Folded in (no new task): <existing-slug> — broadened scope + added 2 user stories / 1 criterion for <smaller-piece> instead of forking a duplicate
|
|
190
209
|
- Created: <slug> (status: in_progress, attached to vX.Y.Z) — genuinely separate concern
|
|
191
210
|
- Body reconciled: <slug> (dropped phase 1 from User Stories; replaced Technical Details auth section)
|
|
192
211
|
- Person attribution: <slug> tagged person:ada (multi-person project, ada drove this cycle's work) | OR: single-person project — no person tags injected
|
|
193
212
|
- Version readiness: vX.Y.Z — 4/5 tasks ready for review
|
|
194
|
-
-
|
|
213
|
+
- Backlog grooming: <slug> obsoleted by pivot → in_review ("confirm close"), <slug> re-attached v0.8.x→v0.9.0, <slug> tags normalized + facets added, <slug> priority high→medium (untouched 30d), 2 tasks left as-is (genuinely planned)
|
|
195
214
|
- Cross-domain mentions: <slug> includes a memory-worthy decision about JWT — flagging for sleep-state
|
|
196
215
|
- Skipped: <session_id> had no actionable task signal
|
|
216
|
+
|
|
217
|
+
Dropped-but-load-bearing self-check: <none | list any digest/auto-bookmark/task signal you saw but did NOT fold into a task changelog/body, with the reason>
|
|
197
218
|
```
|
|
198
219
|
|
|
199
220
|
## Rules
|
|
200
221
|
|
|
201
222
|
1. **Dedup before creating.** Recall first; fold a smaller slice into the task that already covers it — broaden its title + insert sub-items — instead of forking a duplicate or a needless sub-task. A new task is only for a genuinely separate concern.
|
|
202
223
|
2. **Body = current truth, Changelog = history.** Don't let the body lag behind decisions.
|
|
203
|
-
3. **
|
|
224
|
+
3. **Status reflects reality, not a reflex.** `completed` for done + low-risk + already-validated work; `in_review` only when a human genuinely must verify something (or to hand over a close decision on superseded/abandoned/obsoleted work). Never `completed` a task that was never actually done; never silently delete.
|
|
204
225
|
4. **Always attach to a planning version.** No orphan work.
|
|
205
226
|
5. **Stay in your lane.** If you spot non-task work worth preserving, flag it — don't write it.
|
|
206
227
|
6. **CLI first** for status/log/insert; **Edit** for surgical body reconciliation (including broadening `description:` / `## Why` when scope grows).
|
|
@@ -162,6 +162,24 @@ If the relevant task has `product: X` in frontmatter, the PRD MAY be product-sco
|
|
|
162
162
|
|
|
163
163
|
### Pass B — Knowledge
|
|
164
164
|
|
|
165
|
+
#### B0. Organize — folders, grouping, and placement
|
|
166
|
+
|
|
167
|
+
Before curating content, keep the knowledge store's *structure* logical. `knowledge/**/*.md` is indexed recursively (`buildKnowledgeIndex` globs `**/*.md`), so subfolders are fully recall-safe — grouping a file never hides it.
|
|
168
|
+
|
|
169
|
+
**Diagrams → per-title folders (idempotent, any depth).** Preferred layout is `knowledge/diagrams/<title>/<title>.excalidraw.md` — the board plus its dark-sibling `.board.cjs`/`.json` living together. New boards often land flat (`knowledge/diagrams/<title>.excalidraw.md` next to `<title>.board.cjs`). Fold *canonical* flat boards into per-title folders every cycle:
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
dreamcontext migrations apply-diagrams # idempotent: moves flat canonical boards + same-basename siblings, rewrites inbound [[wikilinks]] atomically; prints "nothing to organize" when already clean
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
Placement judgment FIRST: only canonical boards (architecture, system flows, roadmaps, durable plans a future session should recall) belong under `knowledge/diagrams/`. Scratch/exploratory/in-progress boards belong in `inbox/` or `workspace/` (dark by location — not indexed) — leave those alone; do NOT pull them into knowledge. Never hand-edit board scene JSON or wikilinks — the command owns both. This catches boards created *after* the one-time `0.7.2/diagrams-folder-convention` migration already recorded in the ledger (which `sleep-migration` will not re-fire for).
|
|
176
|
+
|
|
177
|
+
**Knowledge → logical subfolders (grouping; moves are deep-only).** When ≥3 top-level `knowledge/*.md` files form a clear topical cluster a future session would browse together (mirroring the existing `data-structures/` and `products/` subfolders), group them under `knowledge/<group>/`. Moving files + rewriting links is a structural op — gate it exactly like merge-with-delete (B1.5):
|
|
178
|
+
- **light/standard:** do NOT move. **Flag the cluster in your report** (`group candidate: <group>/ ← a.md, b.md, c.md`) for the next deep cycle.
|
|
179
|
+
- **deep:** archive-before (the B1.5 safety net), then move the files and rewrite inbound `[[old-slug]]` references — **target token only**, preserve `|alias` and `#anchor`. Verify every file still lists: `dreamcontext knowledge index --plain`.
|
|
180
|
+
|
|
181
|
+
Group only on a **sharp** topical boundary — the same B2 create-vs-extend test, applied to folders. Don't fragment (one folder per file) and don't over-nest. After any group/move, re-check the moved files' tags in Pass C so the folder and the tags tell the same story.
|
|
182
|
+
|
|
165
183
|
#### B1. Decide: create, update, archive, or pin
|
|
166
184
|
|
|
167
185
|
For each knowledge candidate (research finding, sleep-state flag, extracted overflow):
|
|
@@ -176,6 +194,26 @@ For each knowledge candidate (research finding, sleep-state flag, extracted over
|
|
|
176
194
|
| Overflow extracted from core file (one-line reference left there) | `dreamcontext knowledge create <slug>` and paste the extracted content |
|
|
177
195
|
| Cross-cutting finding from your own features pass | Capture inline (no need to flag — you own both domains this cycle) |
|
|
178
196
|
|
|
197
|
+
#### B1.5. Depth gating — what you may actually DO this cycle
|
|
198
|
+
|
|
199
|
+
Your orchestrator brief states a `depth: <light|standard|deep>`. **Destructive/expensive knowledge ops run ONLY at `deep`.** Tag every action you are about to take:
|
|
200
|
+
|
|
201
|
+
| Tier | Allowed at light/standard? | Actions |
|
|
202
|
+
|---|---|---|
|
|
203
|
+
| **Non-destructive** | ✅ yes (any depth) | create a new file, extend an existing file, retag, flip `pinned`, tick checkboxes, append a section |
|
|
204
|
+
| **Deep-only** | ❌ no — `deep` required | merge-with-delete (fold two files into one and delete the loser), summarize-and-replace still-valid detail, archive/delete a stale file |
|
|
205
|
+
|
|
206
|
+
**At light/standard:** if you spot a merge or deletion candidate, do NOT act on it — **flag it in your report** ("merge candidates: `<a>` + `<b>`") so the next deep cycle (or the user via `sleep start --deep` / desktop Sleep) handles it. The agent MAY bump one tier with a stated reason if signals clearly warrant it (e.g. two exact-duplicate files at standard), but state the bump and reason explicitly in your report.
|
|
207
|
+
|
|
208
|
+
**Archive-before-delete safety net (deep only, MANDATORY):** before ANY deep-tier merge-with-delete or summarize-and-replace, FIRST copy the file you are about to lose to a dated archive:
|
|
209
|
+
|
|
210
|
+
```bash
|
|
211
|
+
mkdir -p _dream_context/knowledge/.archive
|
|
212
|
+
cp _dream_context/knowledge/<slug>.md "_dream_context/knowledge/.archive/<slug>-$(date +%Y%m%d).md"
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
The dated archive copy is the recovery net; the "Dropped-but-load-bearing self-check" report line is the audit signal. Both are required for every destructive op.
|
|
216
|
+
|
|
179
217
|
#### B2. Create vs. extend — the consolidation rubric
|
|
180
218
|
|
|
181
219
|
**A knowledge file is a tag-able identity, not a dumping ground.** Aim for the *fewest* files that keep each topic cleanly findable. Fragmenting one topic across many near-duplicate slugs makes tags noisy and recall worse; cramming unrelated topics into one super-file makes tags meaningless. Pick the boundary on purpose.
|
|
@@ -330,6 +368,10 @@ dreamcontext taxonomy resolve <tag>
|
|
|
330
368
|
- 5 user stories, 5 acceptance criteria
|
|
331
369
|
- No-op feature signals: 1 (signal "feature_advanced=marketing-dashboard-v0" — but PRD exists and no criteria moved)
|
|
332
370
|
|
|
371
|
+
### Organization
|
|
372
|
+
- Diagrams: ran `apply-diagrams` — folded knowledge/diagrams/federation.excalidraw.md (+federation.board.cjs) into diagrams/federation/ (canonical board, was flat). 0 ambiguous.
|
|
373
|
+
- Knowledge grouping: group candidate flagged for deep cycle — `decisions/` ← decision-mem0-vs-bm25-recall.md, decision-link-aware-vs-embedding-recall.md, decision-meta-marketing-skill-adoption.md (4 sibling `decision-*` files browse together). Not moved (standard depth).
|
|
374
|
+
|
|
333
375
|
### Knowledge
|
|
334
376
|
- Created: knowledge/jwt-rotation-policy.md (tags: security, decisions; from sleep-state flag) — sharp boundary, new tag-able topic
|
|
335
377
|
- Extended (no new file): knowledge/competitive-analysis-ecc.md — folded the new ECC pricing finding into the existing file (soft distinction, same topic family) instead of forking a near-duplicate slug; updated `summary:`
|
|
@@ -341,6 +383,8 @@ dreamcontext taxonomy resolve <tag>
|
|
|
341
383
|
- taxonomy init: no-op (core/taxonomy.json already exists)
|
|
342
384
|
- audit: 2 nonCanonical tags fixed (knowledge/auth-design.md: auth → domain:security; state/task-slug.md: db → domain:database)
|
|
343
385
|
- Domain Vocabulary: added 'ripple' via `taxonomy add topic:ripple`, added alias 'bookmarking' → 'topic:sleep' via `taxonomy alias bookmarking topic:sleep`
|
|
386
|
+
|
|
387
|
+
Dropped-but-load-bearing self-check: <none | list any digest/auto-bookmark/research finding you saw but did NOT promote into a feature/knowledge file, with the reason>
|
|
344
388
|
```
|
|
345
389
|
|
|
346
390
|
## Rules
|
|
@@ -353,6 +397,7 @@ dreamcontext taxonomy resolve <tag>
|
|
|
353
397
|
6. **Don't create knowledge that already fits in memory.** A short technical decision belongs in `2.memory.md` (sleep-state's domain), not its own knowledge file.
|
|
354
398
|
7. **Knowledge file threshold**: ≥3 paragraphs of content, or material that will be re-read in future sessions.
|
|
355
399
|
8. **Fewest files, sharp boundaries (B2 rubric).** Default to extending an existing file. Fold soft distinctions in — same vertical/brand/topic family, a narrower slice, an increment. Create a new file only for a genuinely separate topic whose own tags sharpen discovery. Not super-files, not fragmentation.
|
|
400
|
+
8a. **Keep the store organized (B0).** Every cycle, fold canonical flat diagram boards into per-title folders (`apply-diagrams`, idempotent, any depth). Group clustered top-level knowledge into logical subfolders only at `deep` depth (flag candidates at light/standard). Subfolders are recall-safe — the index globs `**/*.md`. Folder and tags must tell the same story.
|
|
356
401
|
9. **Use standard tags only (prefer taxonomy vocab).** New tags fragment discovery; always check `dreamcontext taxonomy vocab` before tagging. Add new vocabulary via `taxonomy add` or `taxonomy alias` — never hand-edit `core/taxonomy.json` directly.
|
|
357
402
|
10. **Process all flags from sleep-state** in your report — don't silently drop them.
|
|
358
403
|
11. **No-op cheaply** when signals don't actually warrant work.
|
|
@@ -189,7 +189,7 @@ dreamcontext defaults to single-person. When you have **corroborated evidence**
|
|
|
189
189
|
**Detection gate — require ≥2 corroborated signals** before flipping a project to multi-person (this gate prevents false positives; one weak signal is never enough):
|
|
190
190
|
|
|
191
191
|
- **Self-identification in user turns** — a person names themselves or another teammate ("this is Ada", "Mehmet asked me to…", "I'm covering for Lina").
|
|
192
|
-
- **Distinct git authors since the epoch** — `git log --since="$CUTOFF" --format='%an <%ae>' | sort -u` returns more than one real human author (
|
|
192
|
+
- **Distinct git authors since the epoch** — `git log --since="$CUTOFF" --format='%an <%ae>' | sort -u` returns more than one real human author. Apply the **shared bot-filter** (drop any author whose kebab-case slug contains `github-actions` or `dependabot`) — this is the same `BOT_SLUG_FRAGMENTS` list `attributeByPerson` in `src/lib/attribution.ts` uses, so per-person attribution stays consistent with detection.
|
|
193
193
|
- **Distinct voice / handoff** — the transcript shows a clear authorship handoff or a different working style/voice than the established user.
|
|
194
194
|
|
|
195
195
|
```bash
|
|
@@ -273,6 +273,8 @@ You do **not** edit knowledge files. Produce flags for `sleep-product` to act on
|
|
|
273
273
|
|
|
274
274
|
### Cross-domain mentions (for other specialists)
|
|
275
275
|
- (none) | OR: research finding worth long-term retention — flagging for sleep-product
|
|
276
|
+
|
|
277
|
+
Dropped-but-load-bearing self-check: <none | list any digest/auto-bookmark/decision you saw but did NOT promote into changelog/core/2.memory.md, with the reason>
|
|
276
278
|
```
|
|
277
279
|
|
|
278
280
|
## Rules
|
|
@@ -100,7 +100,7 @@ Untracked, genuinely-separate work is invisible to future sessions — always li
|
|
|
100
100
|
|
|
101
101
|
### 2.5. Person attribution (multi-person projects only)
|
|
102
102
|
|
|
103
|
-
When the project's `.config.json` `people` array has **>1 entry**, the person responsible for a task's progress this cycle must be recorded as a `person:<slug>` tag in the task's frontmatter `tags` array. Slug is kebab-case matching the roster (e.g., `person:mehmet`, `person:ada`). Determine attribution from the same signals sleep-state uses for Pass B.5 (git `%an` on the commits, self-identification in the session transcript).
|
|
103
|
+
When the project's `.config.json` `people` array has **>1 entry**, the person responsible for a task's progress this cycle must be recorded as a `person:<slug>` tag in the task's frontmatter `tags` array. Slug is kebab-case matching the roster (e.g., `person:mehmet`, `person:ada`). Determine attribution from the same signals sleep-state uses for Pass B.5 (git `%an` on the commits, self-identification in the session transcript), applying the **shared bot-filter** — drop any author whose kebab-case slug contains `github-actions` or `dependabot` (the `BOT_SLUG_FRAGMENTS` list in `src/lib/attribution.ts`, consumed by `attributeByPerson`). Never tag a task `person:github-actions`.
|
|
104
104
|
|
|
105
105
|
```bash
|
|
106
106
|
# Read the current roster
|
|
@@ -139,15 +139,24 @@ A fresh session opening this task file should see the *current plan*.
|
|
|
139
139
|
|
|
140
140
|
**Tip — recall before reconciling.** If you're unsure whether a decision observed this session was already captured elsewhere (memory entry, sibling task, knowledge file), run `dreamcontext memory recall "<topic>"` to surface the top hits across the corpus before you edit. Cheaper than grep, deterministic, and helps you avoid duplicating a decision that already lives in `2.memory.md` (which `sleep-state` owns).
|
|
141
141
|
|
|
142
|
-
### 4. Status —
|
|
142
|
+
### 4. Status — review only when genuinely needed
|
|
143
143
|
|
|
144
|
-
|
|
144
|
+
Pick the status that matches reality. **Do NOT reflexively bump everything to `in_review`** — that buries the few tasks that actually need the user's eyes under a pile that didn't, and leaves finished work rotting half-closed.
|
|
145
|
+
|
|
146
|
+
| The task this cycle is… | Status |
|
|
147
|
+
|---|---|
|
|
148
|
+
| **Demonstrably done, low-risk, and already validated** — acceptance criteria met, tests green, nothing a human must second-guess (chores, docs, mechanical refactors, well-covered fixes) | `completed` — close it. |
|
|
149
|
+
| **Done but it genuinely needs the user's verification** — a user-facing behaviour change, a design/architecture decision, a risky or critical-path change, or a criterion that can't be mechanically proven | `in_review` with a one-line "what to verify". |
|
|
150
|
+
| **Work clearly continues next session** | leave `in_progress`. |
|
|
145
151
|
|
|
146
152
|
```bash
|
|
147
|
-
|
|
153
|
+
# Done + validated + nothing to second-guess → close it:
|
|
154
|
+
dreamcontext tasks status <slug> completed "<what shipped — done, validated, no review needed>"
|
|
155
|
+
# A human must actually confirm something → hand it over:
|
|
156
|
+
dreamcontext tasks status <slug> in_review "Needs your eyes — <the specific thing to verify>"
|
|
148
157
|
```
|
|
149
158
|
|
|
150
|
-
|
|
159
|
+
The single test: **would the user actually want to look at this before it's closed?** If yes → `in_review`. If it's done and there's nothing to second-guess → `completed`. When you're genuinely unsure, prefer `in_review`. Only the never-done categories below (superseded / abandoned / obsoleted) ever go to `in_review` *for closing* — that's handing the user a close decision, not a completion.
|
|
151
160
|
|
|
152
161
|
### 5. Version readiness signal (no auto-release)
|
|
153
162
|
|
|
@@ -162,45 +171,57 @@ dreamcontext tasks list --status completed
|
|
|
162
171
|
|
|
163
172
|
If every task linked to the active version is `completed` (or only `in_review` remains), surface this in your report. Do **not** release — that's the user's call.
|
|
164
173
|
|
|
165
|
-
### 6.
|
|
174
|
+
### 6. Backlog grooming — the active list must stay honest
|
|
166
175
|
|
|
167
|
-
|
|
176
|
+
A backlog that nobody has touched in weeks, or that still describes a plan we've since pivoted away from, isn't "active" — it bloats every SessionStart snapshot (each non-completed task costs snapshot tokens on every session) and buries the work that actually matters. Each cycle, groom the whole active list, not just this cycle's tasks:
|
|
168
177
|
|
|
169
178
|
```bash
|
|
170
179
|
dreamcontext tasks list # every non-completed task, with updated dates
|
|
171
180
|
```
|
|
172
181
|
|
|
173
|
-
|
|
182
|
+
**(a) Direction changes & relevance.** If this cycle revealed a pivot — a new idea, a changed plan, a dropped direction — propagate it to the backlog, don't leave stale tasks describing the old plan:
|
|
183
|
+
|
|
184
|
+
| Situation | Action |
|
|
185
|
+
|---|---|
|
|
186
|
+
| A task is partly obsoleted by the pivot | Reconcile its body (step 3): drop the obsolete user stories / criteria, replace stale Technical Details. Keep what's still relevant. |
|
|
187
|
+
| A task is **wholly** made irrelevant by the pivot | Don't silently delete. `dreamcontext tasks status <slug> in_review "obsoleted by <pivot> — confirm close"` — closing someone's planned work is the user's call. |
|
|
188
|
+
| A task now belongs to a different milestone/version | Fix its `version:` frontmatter (Edit the field directly — there's no status-time version verb) so it attaches to the right planning version. |
|
|
189
|
+
|
|
190
|
+
**(b) Staleness.** For each task whose `updated` is **21+ days old** and that no session in this cycle touched, pick one:
|
|
174
191
|
|
|
175
192
|
| Situation | Action |
|
|
176
193
|
|---|---|
|
|
177
|
-
| Work was actually done but never logged | Reconcile it now (steps 3-4) — that's a capture failure, fix it. |
|
|
194
|
+
| Work was actually done but never logged | Reconcile it now (steps 3-4) — that's a capture failure, fix it. If it's done + validated, `completed`; if it needs eyes, `in_review`. |
|
|
178
195
|
| Superseded / absorbed by another task | Log a final entry naming the successor, then `dreamcontext tasks status <slug> in_review "superseded by <other-slug> — confirm close"`. |
|
|
179
196
|
| Still genuinely planned, just not started | Leave it, but verify its priority isn't inflated — a `high` task untouched for a month is not high priority; downgrade via Edit. |
|
|
180
197
|
| Abandoned / no longer relevant | `dreamcontext tasks status <slug> in_review "stale 21+ days, appears abandoned — confirm close"`. |
|
|
181
198
|
|
|
182
|
-
|
|
199
|
+
**(c) Tagging.** Tags drive recall — sharpen them every cycle. Normalize every task's frontmatter `tags` to the taxonomy vocab (`dreamcontext taxonomy vocab`), and *add* missing facets (area / type / feature) where a task is under-tagged. A well-tagged backlog is found; a poorly-tagged one is re-derived blind.
|
|
200
|
+
|
|
201
|
+
Never silently delete a task, and never `completed` a task that was never actually done — for superseded/abandoned/obsoleted work, `in_review` with an explicit reason hands the close decision to the user. List every grooming action in your report.
|
|
183
202
|
|
|
184
203
|
## Return — short report
|
|
185
204
|
|
|
186
205
|
```
|
|
187
206
|
## sleep-tasks report
|
|
188
|
-
- Updated: <slug> (in_progress → in_review, "<
|
|
207
|
+
- Updated: <slug> (in_progress → completed, "<done, validated, no review needed>"), <slug> (in_progress → in_review, "<the specific thing the user must verify>"), <slug> (logged)
|
|
189
208
|
- Folded in (no new task): <existing-slug> — broadened scope + added 2 user stories / 1 criterion for <smaller-piece> instead of forking a duplicate
|
|
190
209
|
- Created: <slug> (status: in_progress, attached to vX.Y.Z) — genuinely separate concern
|
|
191
210
|
- Body reconciled: <slug> (dropped phase 1 from User Stories; replaced Technical Details auth section)
|
|
192
211
|
- Person attribution: <slug> tagged person:ada (multi-person project, ada drove this cycle's work) | OR: single-person project — no person tags injected
|
|
193
212
|
- Version readiness: vX.Y.Z — 4/5 tasks ready for review
|
|
194
|
-
-
|
|
213
|
+
- Backlog grooming: <slug> obsoleted by pivot → in_review ("confirm close"), <slug> re-attached v0.8.x→v0.9.0, <slug> tags normalized + facets added, <slug> priority high→medium (untouched 30d), 2 tasks left as-is (genuinely planned)
|
|
195
214
|
- Cross-domain mentions: <slug> includes a memory-worthy decision about JWT — flagging for sleep-state
|
|
196
215
|
- Skipped: <session_id> had no actionable task signal
|
|
216
|
+
|
|
217
|
+
Dropped-but-load-bearing self-check: <none | list any digest/auto-bookmark/task signal you saw but did NOT fold into a task changelog/body, with the reason>
|
|
197
218
|
```
|
|
198
219
|
|
|
199
220
|
## Rules
|
|
200
221
|
|
|
201
222
|
1. **Dedup before creating.** Recall first; fold a smaller slice into the task that already covers it — broaden its title + insert sub-items — instead of forking a duplicate or a needless sub-task. A new task is only for a genuinely separate concern.
|
|
202
223
|
2. **Body = current truth, Changelog = history.** Don't let the body lag behind decisions.
|
|
203
|
-
3. **
|
|
224
|
+
3. **Status reflects reality, not a reflex.** `completed` for done + low-risk + already-validated work; `in_review` only when a human genuinely must verify something (or to hand over a close decision on superseded/abandoned/obsoleted work). Never `completed` a task that was never actually done; never silently delete.
|
|
204
225
|
4. **Always attach to a planning version.** No orphan work.
|
|
205
226
|
5. **Stay in your lane.** If you spot non-task work worth preserving, flag it — don't write it.
|
|
206
227
|
6. **CLI first** for status/log/insert; **Edit** for surgical body reconciliation (including broadening `description:` / `## Why` when scope grows).
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{bt as jc,bu as I0,aH as pS,bv as xt,bw as Ip,bx as mS,by as gS,bz as _S,bA as xS,bB as yS,bq as vS,br as bS,bC as B0,aC as SS,bD as TS,bE as MS,bF as ES,bG as xg,bH as yg,bI as AS,bJ as k,bK as $s,bL as wS,bM as RS,bN as CS,bO as NS}from"./index-
|
|
1
|
+
import{bt as jc,bu as I0,aH as pS,bv as xt,bw as Ip,bx as mS,by as gS,bz as _S,bA as xS,bB as yS,bq as vS,br as bS,bC as B0,aC as SS,bD as TS,bE as MS,bF as ES,bG as xg,bH as yg,bI as AS,bJ as k,bK as $s,bL as wS,bM as RS,bN as CS,bO as NS}from"./index-CPZ-rEGO.js";import{_ as Bi}from"./extends-CF3RwP-h.js";function PS(r){var e=jc(.1),t,n,i;typeof r!="function"&&(r=jc(r==null?0:+r));function s(a){for(var l=0,c=t.length,u;l<c;++l)u=t[l],u.vz+=(i[l]-u.z)*n[l]*a}function o(){if(t){var a,l=t.length;for(n=new Array(l),i=new Array(l),a=0;a<l;++a)n[a]=isNaN(i[a]=+r(t[a],a,t))?0:+e(t[a],a,t)}}return s.initialize=function(a){t=a,o()},s.strength=function(a){return arguments.length?(e=typeof a=="function"?a:jc(+a),o(),s):e},s.z=function(a){return arguments.length?(r=typeof a=="function"?a:jc(+a),o(),s):r},s}/**
|
|
2
2
|
* @license
|
|
3
3
|
* Copyright 2010-2026 Three.js Authors
|
|
4
4
|
* SPDX-License-Identifier: MIT
|