dreamcontext 0.17.1 → 0.18.0

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 (181) hide show
  1. package/README.md +321 -565
  2. package/agents/sleep-product.md +21 -2
  3. package/agents/sleep-state.md +24 -0
  4. package/agents/sleep-tasks.md +16 -0
  5. package/dist/agents/sleep-product.md +21 -2
  6. package/dist/agents/sleep-state.md +24 -0
  7. package/dist/agents/sleep-tasks.md +16 -0
  8. package/dist/dashboard/announcements/dashboard-highlights-0-17-0-18.excalidraw.md +1531 -0
  9. package/dist/dashboard/announcements/goal-skill-v2.excalidraw.md +1490 -0
  10. package/dist/dashboard/announcements/task-manager.excalidraw.md +1217 -0
  11. package/dist/dashboard/announcements/visual-announcements.excalidraw.md +1373 -0
  12. package/dist/dashboard/announcements.json +38 -0
  13. package/dist/dashboard/assets/{BrainCanvas3D-DyF_3yYD.js → BrainCanvas3D-D9G3dOLf.js} +1 -1
  14. package/dist/dashboard/assets/{_baseUniq-Do8VMBA0.js → _baseUniq-Cyshlz4Y.js} +1 -1
  15. package/dist/dashboard/assets/{ar-SA-G6X2FPQ2-DmbXDb2R.js → ar-SA-G6X2FPQ2-qj-2Cbgo.js} +1 -1
  16. package/dist/dashboard/assets/{arc-CwtUBQfU.js → arc-0OnX5WDs.js} +1 -1
  17. package/dist/dashboard/assets/{architectureDiagram-Q4EWVU46-O9bOog_f.js → architectureDiagram-Q4EWVU46-Cx3c0nUi.js} +1 -1
  18. package/dist/dashboard/assets/{az-AZ-76LH7QW2-c9Zk10vG.js → az-AZ-76LH7QW2-CBuoh6M3.js} +1 -1
  19. package/dist/dashboard/assets/{bg-BG-XCXSNQG7-uMTg84lX.js → bg-BG-XCXSNQG7-X5QYyZWx.js} +1 -1
  20. package/dist/dashboard/assets/{blockDiagram-DXYQGD6D-BTENXCSO.js → blockDiagram-DXYQGD6D-BwESAg1j.js} +1 -1
  21. package/dist/dashboard/assets/{bn-BD-2XOGV67Q-DUFKHcua.js → bn-BD-2XOGV67Q-DlodQLNR.js} +1 -1
  22. package/dist/dashboard/assets/{c4Diagram-AHTNJAMY-DMXPWRiQ.js → c4Diagram-AHTNJAMY-CopL0lbP.js} +1 -1
  23. package/dist/dashboard/assets/{ca-ES-6MX7JW3Y-BuYX1q89.js → ca-ES-6MX7JW3Y-DfqF6Yhy.js} +1 -1
  24. package/dist/dashboard/assets/channel-BLisRbYb.js +1 -0
  25. package/dist/dashboard/assets/{chunk-4BX2VUAB-DgefvnWS.js → chunk-4BX2VUAB-CRwifLK3.js} +1 -1
  26. package/dist/dashboard/assets/{chunk-4TB4RGXK-BnFO5G1t.js → chunk-4TB4RGXK-uxJYY_64.js} +1 -1
  27. package/dist/dashboard/assets/{chunk-55IACEB6-COm2TYEM.js → chunk-55IACEB6-DhYIp7Oc.js} +1 -1
  28. package/dist/dashboard/assets/{chunk-EDXVE4YY-CtsGCwZp.js → chunk-EDXVE4YY-CCxfcirt.js} +1 -1
  29. package/dist/dashboard/assets/{chunk-FMBD7UC4-cfSvx35j.js → chunk-FMBD7UC4-D7OC8QFC.js} +1 -1
  30. package/dist/dashboard/assets/{chunk-OYMX7WX6-DAhDKteL.js → chunk-OYMX7WX6-CwHgaUQo.js} +1 -1
  31. package/dist/dashboard/assets/{chunk-QZHKN3VN-B5h4qML3.js → chunk-QZHKN3VN-7Idpf6YJ.js} +1 -1
  32. package/dist/dashboard/assets/{chunk-YZCP3GAM-CGp_NiRg.js → chunk-YZCP3GAM-D4Lh0fgr.js} +1 -1
  33. package/dist/dashboard/assets/classDiagram-6PBFFD2Q-CgqeQiHi.js +1 -0
  34. package/dist/dashboard/assets/classDiagram-v2-HSJHXN6E-CgqeQiHi.js +1 -0
  35. package/dist/dashboard/assets/clone-CQXNMCV5.js +1 -0
  36. package/dist/dashboard/assets/{cose-bilkent-S5V4N54A-Dk7CMFA4.js → cose-bilkent-S5V4N54A-BYcMtJTF.js} +1 -1
  37. package/dist/dashboard/assets/{cs-CZ-2BRQDIVT-zfUTiS_d.js → cs-CZ-2BRQDIVT-rnrpKdSJ.js} +1 -1
  38. package/dist/dashboard/assets/{da-DK-5WZEPLOC-CU14f8NA.js → da-DK-5WZEPLOC-D5OGAvk7.js} +1 -1
  39. package/dist/dashboard/assets/{dagre-KV5264BT-BiMVxC4Q.js → dagre-KV5264BT-V0f1_b4R.js} +1 -1
  40. package/dist/dashboard/assets/{de-DE-XR44H4JA-CDOHAJGo.js → de-DE-XR44H4JA-CDyb8YfL.js} +1 -1
  41. package/dist/dashboard/assets/{diagram-5BDNPKRD-DfJEsVTA.js → diagram-5BDNPKRD-BmpizoaS.js} +1 -1
  42. package/dist/dashboard/assets/{diagram-G4DWMVQ6-CztLHIcY.js → diagram-G4DWMVQ6-ClQg-LTu.js} +1 -1
  43. package/dist/dashboard/assets/{diagram-MMDJMWI5-DqoQLlWK.js → diagram-MMDJMWI5-BkXcDMIV.js} +1 -1
  44. package/dist/dashboard/assets/{diagram-TYMM5635-DvyvQBCc.js → diagram-TYMM5635-BbFiiCM2.js} +1 -1
  45. package/dist/dashboard/assets/{el-GR-BZB4AONW-ChUphbcv.js → el-GR-BZB4AONW-Y1YnKZL0.js} +1 -1
  46. package/dist/dashboard/assets/{erDiagram-SMLLAGMA-D_uSs2_2.js → erDiagram-SMLLAGMA-Dzdv7_l5.js} +1 -1
  47. package/dist/dashboard/assets/{es-ES-U4NZUMDT-BNalBEhb.js → es-ES-U4NZUMDT-D0T536hs.js} +1 -1
  48. package/dist/dashboard/assets/{eu-ES-A7QVB2H4-BMiQyA2y.js → eu-ES-A7QVB2H4-Bfrya0et.js} +1 -1
  49. package/dist/dashboard/assets/{fa-IR-HGAKTJCU-Bd6ZnTSo.js → fa-IR-HGAKTJCU-pYE_hG-L.js} +1 -1
  50. package/dist/dashboard/assets/{fi-FI-Z5N7JZ37-BWAfJadC.js → fi-FI-Z5N7JZ37-D3C-fNyk.js} +1 -1
  51. package/dist/dashboard/assets/{flowDiagram-DWJPFMVM-Bmsp6kyU.js → flowDiagram-DWJPFMVM-CFhyjwKY.js} +1 -1
  52. package/dist/dashboard/assets/{fr-FR-RHASNOE6-CspbYzOW.js → fr-FR-RHASNOE6-CgwnG5JW.js} +1 -1
  53. package/dist/dashboard/assets/{ganttDiagram-T4ZO3ILL-wEdysXo_.js → ganttDiagram-T4ZO3ILL-BRKRiSzf.js} +1 -1
  54. package/dist/dashboard/assets/{gitGraphDiagram-UUTBAWPF-BEiGpPBj.js → gitGraphDiagram-UUTBAWPF-CTqCK49d.js} +1 -1
  55. package/dist/dashboard/assets/{gl-ES-HMX3MZ6V-CV76vsWr.js → gl-ES-HMX3MZ6V-DjJTqTm3.js} +1 -1
  56. package/dist/dashboard/assets/{graph-CZFIeNHZ.js → graph-D429kSbY.js} +1 -1
  57. package/dist/dashboard/assets/{he-IL-6SHJWFNN-Y1VoXJ_H.js → he-IL-6SHJWFNN-C84FlH6r.js} +1 -1
  58. package/dist/dashboard/assets/{hi-IN-IWLTKZ5I-Crh5S49o.js → hi-IN-IWLTKZ5I-Blhkfum2.js} +1 -1
  59. package/dist/dashboard/assets/{hu-HU-A5ZG7DT2-D4I3gCbp.js → hu-HU-A5ZG7DT2-DLC1JfN-.js} +1 -1
  60. package/dist/dashboard/assets/{id-ID-SAP4L64H-Chvzkuvi.js → id-ID-SAP4L64H-C3pB_IWB.js} +1 -1
  61. package/dist/dashboard/assets/image-FgR93jdt.js +1 -0
  62. package/dist/dashboard/assets/index-2m8ueOUn.js +1 -0
  63. package/dist/dashboard/assets/index-CWwjuihq.css +32 -0
  64. package/dist/dashboard/assets/{index-C7Bo5AQH.js → index-CbOXCDms.js} +1 -1
  65. package/dist/dashboard/assets/index-SJ64pf-4.js +551 -0
  66. package/dist/dashboard/assets/{infoDiagram-42DDH7IO-BzfuDHl4.js → infoDiagram-42DDH7IO-CIzDShDw.js} +1 -1
  67. package/dist/dashboard/assets/{ishikawaDiagram-UXIWVN3A-BVoNJ9VS.js → ishikawaDiagram-UXIWVN3A-CuasYzdX.js} +1 -1
  68. package/dist/dashboard/assets/{it-IT-JPQ66NNP-BH_gN5es.js → it-IT-JPQ66NNP-DGGEoNPu.js} +1 -1
  69. package/dist/dashboard/assets/{ja-JP-DBVTYXUO-DU_WmLVa.js → ja-JP-DBVTYXUO-CEqP9aps.js} +1 -1
  70. package/dist/dashboard/assets/{journeyDiagram-VCZTEJTY-DbwICa_a.js → journeyDiagram-VCZTEJTY-DHiq2OTQ.js} +1 -1
  71. package/dist/dashboard/assets/{kaa-6HZHGXH3-KYU9qowM.js → kaa-6HZHGXH3-GOFmTAXq.js} +1 -1
  72. package/dist/dashboard/assets/{kab-KAB-ZGHBKWFO-bjhyiUq5.js → kab-KAB-ZGHBKWFO-B865Wwzu.js} +1 -1
  73. package/dist/dashboard/assets/{kanban-definition-6JOO6SKY-D9XucLs4.js → kanban-definition-6JOO6SKY-BhlTKFbL.js} +1 -1
  74. package/dist/dashboard/assets/{kk-KZ-P5N5QNE5-CYTx_dAZ.js → kk-KZ-P5N5QNE5-CNfuE6b6.js} +1 -1
  75. package/dist/dashboard/assets/{km-KH-HSX4SM5Z-DqsuY4Lf.js → km-KH-HSX4SM5Z-CsmgRWxu.js} +1 -1
  76. package/dist/dashboard/assets/{ko-KR-MTYHY66A-BZe7NywF.js → ko-KR-MTYHY66A-B_02RgEz.js} +1 -1
  77. package/dist/dashboard/assets/{ku-TR-6OUDTVRD-F5d6HFWt.js → ku-TR-6OUDTVRD-JfQA5u05.js} +1 -1
  78. package/dist/dashboard/assets/{layout-CotqU0S9.js → layout-DvrQSvOI.js} +1 -1
  79. package/dist/dashboard/assets/{linear-Dqv87Scf.js → linear-6r0qttLs.js} +1 -1
  80. package/dist/dashboard/assets/{lt-LT-XHIRWOB4-BCCuaPbS.js → lt-LT-XHIRWOB4-DWFUXEdf.js} +1 -1
  81. package/dist/dashboard/assets/{lv-LV-5QDEKY6T-NLGi-vJ6.js → lv-LV-5QDEKY6T-C5yAd0n_.js} +1 -1
  82. package/dist/dashboard/assets/{min-BbJdnc3h.js → min-D_EP9dBf.js} +1 -1
  83. package/dist/dashboard/assets/{mindmap-definition-QFDTVHPH-Dk4QySu7.js → mindmap-definition-QFDTVHPH-Col3ao9B.js} +1 -1
  84. package/dist/dashboard/assets/{mr-IN-CRQNXWMA-BnGDIgVN.js → mr-IN-CRQNXWMA-Dwjz0Xdm.js} +1 -1
  85. package/dist/dashboard/assets/{my-MM-5M5IBNSE-CspgYE9_.js → my-MM-5M5IBNSE-EXJDNyjA.js} +1 -1
  86. package/dist/dashboard/assets/{nb-NO-T6EIAALU-BeRPw3hu.js → nb-NO-T6EIAALU-BWm2bgLd.js} +1 -1
  87. package/dist/dashboard/assets/{nl-NL-IS3SIHDZ-C-G-bljM.js → nl-NL-IS3SIHDZ-f8nP-yp-.js} +1 -1
  88. package/dist/dashboard/assets/{nn-NO-6E72VCQL-Ct7VZY8D.js → nn-NO-6E72VCQL-B0c_gCNR.js} +1 -1
  89. package/dist/dashboard/assets/{oc-FR-POXYY2M6-Cv5-C4Qq.js → oc-FR-POXYY2M6-C40PSwAh.js} +1 -1
  90. package/dist/dashboard/assets/{pa-IN-N4M65BXN-DAgkIThL.js → pa-IN-N4M65BXN-DDcgXFkB.js} +1 -1
  91. package/dist/dashboard/assets/{percentages-BXMCSKIN-vidRYabK.js → percentages-BXMCSKIN-MHBQP8nI.js} +7 -7
  92. package/dist/dashboard/assets/{pica-Cy-Xl-mi.js → pica-C5CFA09W.js} +1 -1
  93. package/dist/dashboard/assets/{pieDiagram-DEJITSTG-BnP4-zwd.js → pieDiagram-DEJITSTG-DFHmB0fL.js} +1 -1
  94. package/dist/dashboard/assets/{pl-PL-T2D74RX3-BuJQ3HD-.js → pl-PL-T2D74RX3-yFTBt0Xu.js} +1 -1
  95. package/dist/dashboard/assets/{pt-BR-5N22H2LF-BbAqsvD6.js → pt-BR-5N22H2LF-ilAW3Fdv.js} +1 -1
  96. package/dist/dashboard/assets/{pt-PT-UZXXM6DQ-DzFJedU3.js → pt-PT-UZXXM6DQ-CXHFN95K.js} +1 -1
  97. package/dist/dashboard/assets/{quadrantDiagram-34T5L4WZ-BXN88cHy.js → quadrantDiagram-34T5L4WZ-CR732_oP.js} +1 -1
  98. package/dist/dashboard/assets/{requirementDiagram-MS252O5E-D34hL42a.js → requirementDiagram-MS252O5E-mKoVG52Z.js} +1 -1
  99. package/dist/dashboard/assets/{ro-RO-JPDTUUEW-BV2-sOiv.js → ro-RO-JPDTUUEW-BKlWpyF4.js} +1 -1
  100. package/dist/dashboard/assets/{ru-RU-B4JR7IUQ-BCL4N9Ej.js → ru-RU-B4JR7IUQ-BGoxlhJm.js} +1 -1
  101. package/dist/dashboard/assets/{sankeyDiagram-XADWPNL6-0mFeok-3.js → sankeyDiagram-XADWPNL6-DXipts7M.js} +1 -1
  102. package/dist/dashboard/assets/{sequenceDiagram-FGHM5R23-C-5nW5j6.js → sequenceDiagram-FGHM5R23-DFQhU8q7.js} +1 -1
  103. package/dist/dashboard/assets/{si-LK-N5RQ5JYF-CNhaw4jx.js → si-LK-N5RQ5JYF-yDbJWFTH.js} +1 -1
  104. package/dist/dashboard/assets/{sk-SK-C5VTKIMK-mHCphOXu.js → sk-SK-C5VTKIMK-DglyhbNB.js} +1 -1
  105. package/dist/dashboard/assets/{sl-SI-NN7IZMDC--lzgHthQ.js → sl-SI-NN7IZMDC-DPfq0s4I.js} +1 -1
  106. package/dist/dashboard/assets/{stateDiagram-FHFEXIEX-C50iDFqe.js → stateDiagram-FHFEXIEX-Dm50jiEh.js} +1 -1
  107. package/dist/dashboard/assets/stateDiagram-v2-QKLJ7IA2-CoSm11sD.js +1 -0
  108. package/dist/dashboard/assets/{subset-shared.chunk-DNsjL37s.js → subset-shared.chunk-OHz6M6ct.js} +1 -1
  109. package/dist/dashboard/assets/{subset-worker.chunk-BaV3r-bl.js → subset-worker.chunk-BzwrOBtO.js} +1 -1
  110. package/dist/dashboard/assets/{sv-SE-XGPEYMSR-ckw8jfGN.js → sv-SE-XGPEYMSR-BLHNwr4k.js} +1 -1
  111. package/dist/dashboard/assets/{ta-IN-2NMHFXQM-CSeNmVhS.js → ta-IN-2NMHFXQM-Dw-6hUpN.js} +1 -1
  112. package/dist/dashboard/assets/{th-TH-HPSO5L25-Cvn1sg_3.js → th-TH-HPSO5L25-DPkcM_k9.js} +1 -1
  113. package/dist/dashboard/assets/{timeline-definition-GMOUNBTQ-DRYfuqHT.js → timeline-definition-GMOUNBTQ-BKFNQ_7e.js} +1 -1
  114. package/dist/dashboard/assets/{tr-TR-DEFEU3FU-CyhY22TB.js → tr-TR-DEFEU3FU-rBVsY5RS.js} +1 -1
  115. package/dist/dashboard/assets/{uk-UA-QMV73CPH-BvvAEO6U.js → uk-UA-QMV73CPH-CV6_yTZs.js} +1 -1
  116. package/dist/dashboard/assets/{vennDiagram-DHZGUBPP-Crril7Cj.js → vennDiagram-DHZGUBPP-BZb_r5tY.js} +1 -1
  117. package/dist/dashboard/assets/{vi-VN-M7AON7JQ-c7AwSUZ8.js → vi-VN-M7AON7JQ-CJMgSsLz.js} +1 -1
  118. package/dist/dashboard/assets/{wardley-RL74JXVD-Da5AhSWU.js → wardley-RL74JXVD-DgqjmWyN.js} +1 -1
  119. package/dist/dashboard/assets/{wardleyDiagram-NUSXRM2D-C4GeB_Df.js → wardleyDiagram-NUSXRM2D-BDpniS9m.js} +1 -1
  120. package/dist/dashboard/assets/webviewWindow-Bwv2421L.js +1 -0
  121. package/dist/dashboard/assets/window-BObcHN8e.js +1 -0
  122. package/dist/dashboard/assets/{xychartDiagram-5P7HB3ND-BPCFKXqR.js → xychartDiagram-5P7HB3ND-CCyPcx2A.js} +1 -1
  123. package/dist/dashboard/assets/{zh-CN-LNUGB5OW-BvNiZwKU.js → zh-CN-LNUGB5OW-9LJLF_AC.js} +1 -1
  124. package/dist/dashboard/assets/{zh-HK-E62DVLB3-CCFtoCWb.js → zh-HK-E62DVLB3-IefAiePp.js} +1 -1
  125. package/dist/dashboard/assets/{zh-TW-RAJ6MFWO-bYBr-stu.js → zh-TW-RAJ6MFWO-CHeY9rNZ.js} +1 -1
  126. package/dist/dashboard/index.html +2 -2
  127. package/dist/index.js +4099 -1538
  128. package/dist/skill-packs/agents/goal-implementer.md +42 -1
  129. package/dist/skill-packs/agents/goal-plan-reviewer.md +7 -0
  130. package/dist/skill-packs/agents/goal-planner.md +34 -0
  131. package/dist/skill-packs/catalog.json +31 -21
  132. package/dist/skill-packs/excalidraw/SKILL.md +244 -13
  133. package/dist/skill-packs/excalidraw/examples/Chart Kit.excalidraw.md +15740 -0
  134. package/dist/skill-packs/excalidraw/examples/Wireframe Kit.excalidraw.md +16860 -0
  135. package/dist/skill-packs/excalidraw/examples/atomic_check.js +99 -0
  136. package/dist/skill-packs/excalidraw/examples/chart.spec.json +122 -0
  137. package/dist/skill-packs/excalidraw/examples/chart_board.js +173 -0
  138. package/dist/skill-packs/excalidraw/examples/hello.spec.json +79 -9
  139. package/dist/skill-packs/excalidraw/examples/visual_board.js +82 -0
  140. package/dist/skill-packs/excalidraw/examples/wireframe_board.js +161 -0
  141. package/dist/skill-packs/excalidraw/scripts/build_excalidraw.js +292 -27
  142. package/dist/skill-packs/excalidraw/scripts/lib/charts.js +771 -0
  143. package/dist/skill-packs/excalidraw/scripts/lib/style.js +369 -35
  144. package/dist/skill-packs/excalidraw/scripts/lib/wireframe.js +406 -0
  145. package/dist/skill-packs/goal-skill/SKILL.md +369 -100
  146. package/dist/skill-packs/goal-skill/assets/goal-skill-demo.cjs +51 -0
  147. package/dist/skill-packs/goal-skill/assets/goal-skill-viewer.cjs +181 -0
  148. package/package.json +2 -1
  149. package/skill/references/integrations.md +54 -0
  150. package/skill/references/knowledge-and-recall.md +3 -1
  151. package/skill/references/sleep.md +4 -4
  152. package/skill-packs/agents/goal-implementer.md +42 -1
  153. package/skill-packs/agents/goal-plan-reviewer.md +7 -0
  154. package/skill-packs/agents/goal-planner.md +34 -0
  155. package/skill-packs/catalog.json +31 -21
  156. package/skill-packs/excalidraw/SKILL.md +244 -13
  157. package/skill-packs/excalidraw/examples/Chart Kit.excalidraw.md +15740 -0
  158. package/skill-packs/excalidraw/examples/Wireframe Kit.excalidraw.md +16860 -0
  159. package/skill-packs/excalidraw/examples/atomic_check.js +99 -0
  160. package/skill-packs/excalidraw/examples/chart.spec.json +122 -0
  161. package/skill-packs/excalidraw/examples/chart_board.js +173 -0
  162. package/skill-packs/excalidraw/examples/hello.spec.json +79 -9
  163. package/skill-packs/excalidraw/examples/visual_board.js +82 -0
  164. package/skill-packs/excalidraw/examples/wireframe_board.js +161 -0
  165. package/skill-packs/excalidraw/scripts/build_excalidraw.js +292 -27
  166. package/skill-packs/excalidraw/scripts/lib/charts.js +771 -0
  167. package/skill-packs/excalidraw/scripts/lib/style.js +369 -35
  168. package/skill-packs/excalidraw/scripts/lib/wireframe.js +406 -0
  169. package/skill-packs/goal-skill/SKILL.md +369 -100
  170. package/skill-packs/goal-skill/assets/goal-skill-demo.cjs +51 -0
  171. package/skill-packs/goal-skill/assets/goal-skill-viewer.cjs +181 -0
  172. package/skill-task-manager/SKILL.md +93 -0
  173. package/dist/dashboard/assets/channel-2YfRjala.js +0 -1
  174. package/dist/dashboard/assets/classDiagram-6PBFFD2Q-DB_UnN1h.js +0 -1
  175. package/dist/dashboard/assets/classDiagram-v2-HSJHXN6E-DB_UnN1h.js +0 -1
  176. package/dist/dashboard/assets/clone-DaDvB3N6.js +0 -1
  177. package/dist/dashboard/assets/index-BIfrbaFS.js +0 -516
  178. package/dist/dashboard/assets/index-BdZ3tppu.css +0 -32
  179. package/dist/dashboard/assets/stateDiagram-v2-QKLJ7IA2-eW9-s0Sm.js +0 -1
  180. package/dist/dashboard/assets/webviewWindow-BbG9Cr7f.js +0 -1
  181. package/dist/dashboard/assets/window-DmNpeJAL.js +0 -1
@@ -59,6 +59,7 @@ If none apply when you start, no-op cheaply: read the brief, scan for actual sig
59
59
  | `_dream_context/knowledge/features/*.md` (create + edit, typed knowledge) | changelog, releases (sleep-state owns) |
60
60
  | | `core/objectives/*.md` (PO-authored roadmap objectives — never edit) |
61
61
  | | `knowledge/roadmap/board.md` (AUTO-GENERATED by `dreamcontext roadmap` — never hand-edit; the orchestrator regenerates it each sleep) |
62
+ | | `knowledge/archive/<core>-<period>.md` (sleep-state's ceiling-vs-promotion escalation write — never relocate, retag, merge, or group these files) |
62
63
  | | `_dream_context/lab/**` (Lab insight manifests/cache/credentials — insights are their own recall-indexed entity, not knowledge; never edit, **never run `lab sync`**) |
63
64
  | `dreamcontext knowledge create --tags "..."` | |
64
65
  | `dreamcontext features create <name>` | |
@@ -222,7 +223,24 @@ The dated archive copy is the recovery net; the "Dropped-but-load-bearing self-c
222
223
 
223
224
  **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.
224
225
 
225
- **Dedup first — recall by the topic AND by its family** (vertical / brand / parent domain), not just the exact phrase:
226
+ **Dedup first — run the SEMANTIC nearest-neighbor check BEFORE you create anything.** Keyword recall only finds files you thought to search for; the exact keyword fragility this project keeps hitting. `dreamcontext embed dedup` embeds the candidate and returns its closest existing docs by meaning — the guesswork-free dedup gate:
227
+
228
+ ```bash
229
+ dreamcontext embed dedup --if-present \
230
+ --title "<candidate title>" \
231
+ --description "<one-line summary>" \
232
+ --content "<the body you were about to write>" # or --file <path> / --stdin
233
+ ```
234
+
235
+ It prints the nearest knowledge+feature docs with cosine similarity and a **verdict**:
236
+
237
+ | Verdict | What it means | What you do |
238
+ |---|---|---|
239
+ | **MERGE** | A near-verbatim twin already exists (cosine ≥ 0.97, decisively closer than the runner-up) | Do **not** create. Extend the named file (or `dreamcontext knowledge merge` at deep tier). |
240
+ | **REVIEW** | Same-topic candidate in the 0.91–0.97 band | Apply the sharp-vs-soft rubric below against the **named** neighbor — usually extend it. |
241
+ | **CREATE** | No near-duplicate above the review threshold | Safe to create — still sanity-check the top neighbor. |
242
+
243
+ `--if-present` makes it a no-op (and it prints a fallback note) when this vault has no embedding cache or the model isn't installed — so it's always safe to run and never triggers a first-time model download during sleep. When it's a no-op or reports the model is unavailable, **fall back to keyword recall.** Semantic dedup is an ASSIST, not a replacement — also recall by the topic AND its family (vertical / brand / parent domain), especially for CREATE/REVIEW verdicts:
226
244
 
227
245
  ```bash
228
246
  dreamcontext memory recall "<topic>" --types knowledge,feature
@@ -236,7 +254,7 @@ Then decide — **default to extending an existing file**:
236
254
  | The **same vertical / brand / topic family** as an existing file, or a sub-aspect / increment / follow-up of a topic already covered (a *soft* distinction) | **Extend that file** — add a section, update `summary:` if it drifted. Don't fork a near-duplicate slug. Similar brands, similar verticals, similar topics belong together in the fewest files. |
237
255
  | A **genuinely separate topic / domain / concern** a future session would expect to find standing alone, where its own tag set sharpens discovery (a *sharp* distinction) | **Create a new file** (below). A clean topical boundary earns its own slug so tagging stays valuable. |
238
256
 
239
- The test for sharp-vs-soft: *Would a future recall expect this bundled with the existing file, or standing on its own? Would a separate file make the tag set more discriminating — or just split one topic across two slugs?* If splitting wouldn't sharpen the tags, extend.
257
+ The test for sharp-vs-soft: *Would a future recall expect this bundled with the existing file, or standing on its own? Would a separate file make the tag set more discriminating — or just split one topic across two slugs?* If splitting wouldn't sharpen the tags, extend. A **MERGE** verdict settles it (extend); **REVIEW** is where this rubric earns its keep.
240
258
 
241
259
  This is **not** "always make super-files." Distinct topics MUST get distinct files — that's exactly what makes tags worth having. It's the *soft* distinctions (same family, narrower slice, incremental finding) that fold into an existing file.
242
260
 
@@ -411,6 +429,7 @@ Dropped-but-load-bearing self-check: <none | list any digest/auto-bookmark/resea
411
429
  7. **Knowledge file threshold**: ≥3 paragraphs of content, or material that will be re-read in future sessions.
412
430
  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.
413
431
  8a. **Keep the store organized (B0).** NEW boards belong in their context folder (`knowledge/<context>/<title>/`); `apply-diagrams` is reserved for folding legacy flat `knowledge/diagrams/` boards into per-title folders (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.
432
+ 8b. **`knowledge/archive/` is off-limits.** It holds `sleep-state`'s ceiling-vs-promotion escalation writes (archive-before-delete, task `improve-sleep-quality` AC6) — never group, move, retag, or merge those files; they are not yours to organize.
414
433
  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.
415
434
  10. **Process all flags from sleep-state** in your report — don't silently drop them.
416
435
  11. **No-op cheaply** when signals don't actually warrant work.
@@ -233,6 +233,14 @@ If a file exceeds ~150 lines:
233
233
  - Replace the extracted block with a one-line reference: `> Archived to knowledge/<slug>.md`.
234
234
  - Merge into existing entries before adding new ones — never duplicate.
235
235
 
236
+ **Standing authority — ceiling vs. promotion collision.** Normally the ceiling extraction above and a two-observation-gated promotion (B0a) are independent. But when a promotion the gate genuinely warrants is BLOCKED because the target file is already AT the ~150-line ceiling, flagging it for `sleep-product` lets it lose every cycle indefinitely — the exact recidivism this fixes (a promotion that clears the gate but never lands). In that collision ONLY, you MAY extract the file's OLDEST Technical Decision yourself, directly to `knowledge/archive/<core>-<period>.md` (e.g. `knowledge/archive/2.memory-2026-h1.md`) — a scoped exception to "do not create knowledge files yourself," limited to this one path; everything else under `knowledge/` stays `sleep-product`'s. **Archive-before-delete, no exceptions:**
237
+ 1. Write the archive file FIRST, full content, dated.
238
+ 2. Verify it landed (`cat` it back, or `dreamcontext knowledge index --plain`).
239
+ 3. ONLY THEN replace the source block with `> Archived to knowledge/archive/<core>-<period>.md`.
240
+ 4. Promote the new entry into the now-freed space.
241
+
242
+ Report which Decision you archived, the file you wrote, and the promotion it unblocked.
243
+
236
244
  The ceiling tightened from 300 to 150 in v0.4.0+ because `dreamcontext memory recall` can now retrieve any extracted content on demand. The snapshot pre-loads only the freshest, most-cited entries; older context lives in knowledge files and is still findable via BM25 recall. Aggressive pruning is preferred over generous retention.
237
245
 
238
246
  For extended core files (`3-6.*`), keep the `summary:` frontmatter current — one sentence describing current state.
@@ -246,6 +254,17 @@ Read `knowledge_access` from `.sleep.json`:
246
254
 
247
255
  You do **not** edit knowledge files. Produce flags for `sleep-product` to act on.
248
256
 
257
+ #### C3. Recidivism flags — recurring problems for `sleep done --flag`
258
+
259
+ If a problem in YOUR domain keeps recurring across cycles — a Decision stuck behind the ceiling for 2+ cycles running, a Known Issue that keeps reappearing, a C2 staleness flag already raised last cycle and still unresolved — report it as a flag spec so the orchestrator can pass it to `sleep done`:
260
+
261
+ ```
262
+ ### Recidivism flags (for `sleep done --flag`)
263
+ - ceiling-blocked:2.memory.md::"2.memory.md at ceiling — WKWebView decision promotion blocked again"
264
+ ```
265
+
266
+ `sleep done --flag <key>::<label>[::<task-slug>]` is repeatable — the orchestrator passes one `--flag` per flag it collects from every specialist's report (never comma-separated). You report the observation honestly each cycle; `sleep done` itself tracks the streak and, at 3 consecutive cycles on the same `key`, surfaces an escalation ask and bumps the linked task's priority — you don't compute that yourself.
267
+
249
268
  ## Return — single combined report
250
269
 
251
270
  ```
@@ -279,6 +298,9 @@ You do **not** edit knowledge files. Produce flags for `sleep-product` to act on
279
298
  ### Cross-domain mentions (for other specialists)
280
299
  - (none) | OR: research finding worth long-term retention — flagging for sleep-product
281
300
 
301
+ ### Recidivism flags (for `sleep done --flag`)
302
+ - (none) | OR: ceiling-blocked:2.memory.md::"2.memory.md at ceiling — WKWebView decision promotion blocked again"
303
+
282
304
  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>
283
305
  ```
284
306
 
@@ -297,3 +319,5 @@ Dropped-but-load-bearing self-check: <none | list any digest/auto-bookmark/decis
297
319
  9. **Decisions > deliberation.** Save the conclusion and rationale; drop the back-and-forth.
298
320
  10. **Surgical edits only on core.** Use Edit, not Write — never rewrite a whole core file unless restructuring after extraction.
299
321
  11. **Match existing changelog voice** — read recent entries first.
322
+ 12. **The `knowledge/archive/` write is scoped and rare.** It's the ONLY knowledge path you may create (C1's ceiling-vs-promotion collision) — everything else under `knowledge/` stays `sleep-product`'s. Archive-before-delete, always: write, verify, then replace.
323
+ 13. **Report recidivism honestly, every cycle.** Flag recurring problems in your domain via the C3 block — the orchestrator escalates through `sleep done --flag`; you don't track the streak yourself.
@@ -173,6 +173,8 @@ dreamcontext tasks status <slug> in_review "Needs your eyes — <the specific th
173
173
 
174
174
  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.
175
175
 
176
+ **Foreign tasks are NOT evidence (#177).** A task synced from a SHARED remote container (a ClickUp list two projects both sync) carries a `source_project:` frontmatter field, and the SessionStart snapshot flags it `⚠ FOREIGN`. That row describes work in ANOTHER repo. **Never treat a foreign `completed` task as proof that the corresponding work is done HERE** — it once nearly dropped a whole local work group because a sibling repo's finished task read as "already done". Do not reconcile, re-status, or close a native task on the strength of a foreign one; verify against THIS project's own source (its code, its changelog, its PRs) first. When in doubt, leave the native task as-is and flag the ambiguity in your report. A shared list is a data hazard — surface it (`dreamcontext doctor` warns when two registered projects share one list) rather than silently trusting it.
177
+
176
178
  ### 5. Version readiness signal (no auto-release)
177
179
 
178
180
  After bumping statuses, check if the active planning version is now release-ready:
@@ -215,6 +217,17 @@ dreamcontext tasks list # every non-completed task, with updated dates
215
217
 
216
218
  **(d) Objective linking (only when `core/objectives/` is non-empty).** Objectives are the PO's OKR roadmap items; tasks link to them many-to-many via the `objectives:` frontmatter list. For each task you touched (or created) whose `objectives:` is **absent or empty**, judge which objective(s) the work genuinely serves — check `dreamcontext roadmap objective list` for the live set — and set them: `dreamcontext tasks objectives <slug> <a,b>` (multiple slugs when one task lifts several outcomes, e.g. revenue AND retention — that's expected, not double-counting). **HARD RULE: a non-empty `objectives:` list is a PO decision — NEVER change or extend it.** If no objective fits, leave the field empty; do not force a link. You only edit the task-side field; `core/objectives/*.md` prose/title/dates/structure stay PO-authored and off-limits. Rollups/forecasts recompute when the orchestrator runs `dreamcontext roadmap` after your report.
217
219
 
220
+ **(e) Recidivism — check before you flag again.** Read `_dream_context/state/.sleep-flags.json` (plain Read, no CLI) before grooming: if a task/problem you're about to note as "still not done" already carries `consecutive_cycles >= 3` from prior cycles, it has ALREADY been escalated — do not just emit another passive flag observation and move on. Take a real action instead: reconcile it now if it's actually done, `in_review` with an explicit "recurred N cycles — needs your decision" if it's genuinely stuck, or close it if the recurrence itself proves it's dead. Emitting another flag for a problem already at the threshold is the exact failure this closes (`fix-releases-add-auto-discovery-scoping-bug` recurred 5× and stayed `todo`).
221
+
222
+ For everything NOT yet escalated, report new/continuing recurrence as a flag spec for the orchestrator to pass at `sleep done`:
223
+
224
+ ```
225
+ ### Recidivism flags (for `sleep done --flag`)
226
+ - recurring-task:fix-releases-add-auto-discovery-scoping-bug::"still todo after N cycles"::fix-releases-add-auto-discovery-scoping-bug
227
+ ```
228
+
229
+ `sleep done --flag <key>::<label>[::<task-slug>]` is repeatable — one `--flag` per flag (never comma-separated). At 3 consecutive cycles on the same `key`, `sleep done` itself surfaces the escalation ask and bumps the linked task's priority — you only report the observation honestly each cycle, you don't compute the streak.
230
+
218
231
  **Key Result current — you MAY update it, EXCEPT on insight-fed objectives.** When this cycle surfaced a new real observed value for an objective's Key Result metric (e.g. MRR moved to $1,250, active users hit 400) — from the transcript, a file, or a connected system — refresh it: `dreamcontext roadmap objective metric <slug> --current <n>`. This is the ONE write you may make to a `core/objectives/*.md` file, and only through this CLI verb (never hand-edit the frontmatter). Use a value you actually observed — do not invent or estimate a number. The roadmap board regen at the end of sleep will reflect the new progress.
219
232
 
220
233
  **Insight-bound Key Results are hands-off.** Some objectives are *measured*, not asserted: a Lab insight (`_dream_context/lab/insights/<slug>.md`) may carry `binding: {objective: <slug>}`, meaning `lab bind` seeded — and every `lab sync` rewrites — that objective's `metric.current`. Before any metric write, check for a feeder: `dreamcontext lab list --json` and look for a manifest whose `binding.objective` equals the objective's slug (one feeder max per objective). If bound, do NOT write `metric.current` — your number would be overwritten at the next sync and blurs measured-vs-asserted provenance. If the feeding insight's cache looks stale or errored (`dreamcontext lab show <slug>` → old `fetchedAt` / `error` set), say so in your report so the user refreshes it. **Sleep NEVER runs `lab sync`** — that's a standing decision (credential exposure, latency, non-determinism); refreshing is always an explicit user/agent action outside sleep.
@@ -234,6 +247,8 @@ Never silently delete a task, and never `completed` a task that was never actual
234
247
  - 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)
235
248
  - Objective links: <slug> → [retention-20, revenue] (was empty), <slug> left unlinked (no objective fits) | OR: no objectives in this project — skipped
236
249
  - KR metrics: <objective> current → <n> (observed in transcript) | <objective> SKIPPED — fed by bound insight <insight-slug> (cache stale since <date>; suggest `lab sync <insight-slug>`) | OR: no metric observations this cycle
250
+ - Recidivism flags: recurring-task:<slug>::"still todo after N cycles"::<slug> | OR: none this cycle
251
+ - Recidivism actions: <slug> was already escalated (consecutive_cycles >= 3) → set in_review "recurred N cycles — needs your decision" instead of re-flagging | OR: none escalated
237
252
  - Cross-domain mentions: <slug> includes a memory-worthy decision about JWT — flagging for sleep-state
238
253
  - Skipped: <session_id> had no actionable task signal
239
254
 
@@ -251,3 +266,4 @@ Dropped-but-load-bearing self-check: <none | list any digest/auto-bookmark/task
251
266
  7. **Person attribution is multi-person only.** Read `.config.json` `people` first. If 0 or 1 entry, step 2.5 is a complete NO-OP — never inject `person:` tags on solo projects. Derived multi-person status comes from `people.length > 1`; there is no `multiPerson` key to check.
252
267
  8. **Normalize tags via taxonomy vocab.** When writing or updating task frontmatter tags, check `dreamcontext taxonomy vocab` and use canonical forms (faceted or bare standard tags); non-canonical tags degrade recall.
253
268
  9. **Objectives: propose for empty, never overwrite non-empty.** An existing `objectives:` value is a PO decision that sticks. You fill blanks with judgment; you never revise the PO's linking. Objective files themselves (`core/objectives/`) are PO-authored — never hand-edit their prose, title, dates, or structure — with the single exception that you may refresh a Key Result's `current` via `dreamcontext roadmap objective metric <slug> --current` when you observed a new real value (see grooming (d)) — and NEVER on an objective fed by a bound Lab insight (check `dreamcontext lab list --json` for `binding.objective`; measured values belong to `lab sync`, which sleep never runs).
269
+ 10. **Recidivism — act on escalated flags, don't just re-flag.** Read `state/.sleep-flags.json` before grooming; a problem already at `consecutive_cycles >= 3` needs a real decision (in_review / close / fix), not another passive flag line. Report new/continuing recurrence via the flag-spec block (grooming (e)) so the orchestrator can pass `sleep done --flag`.
@@ -59,6 +59,7 @@ If none apply when you start, no-op cheaply: read the brief, scan for actual sig
59
59
  | `_dream_context/knowledge/features/*.md` (create + edit, typed knowledge) | changelog, releases (sleep-state owns) |
60
60
  | | `core/objectives/*.md` (PO-authored roadmap objectives — never edit) |
61
61
  | | `knowledge/roadmap/board.md` (AUTO-GENERATED by `dreamcontext roadmap` — never hand-edit; the orchestrator regenerates it each sleep) |
62
+ | | `knowledge/archive/<core>-<period>.md` (sleep-state's ceiling-vs-promotion escalation write — never relocate, retag, merge, or group these files) |
62
63
  | | `_dream_context/lab/**` (Lab insight manifests/cache/credentials — insights are their own recall-indexed entity, not knowledge; never edit, **never run `lab sync`**) |
63
64
  | `dreamcontext knowledge create --tags "..."` | |
64
65
  | `dreamcontext features create <name>` | |
@@ -222,7 +223,24 @@ The dated archive copy is the recovery net; the "Dropped-but-load-bearing self-c
222
223
 
223
224
  **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.
224
225
 
225
- **Dedup first — recall by the topic AND by its family** (vertical / brand / parent domain), not just the exact phrase:
226
+ **Dedup first — run the SEMANTIC nearest-neighbor check BEFORE you create anything.** Keyword recall only finds files you thought to search for; the exact keyword fragility this project keeps hitting. `dreamcontext embed dedup` embeds the candidate and returns its closest existing docs by meaning — the guesswork-free dedup gate:
227
+
228
+ ```bash
229
+ dreamcontext embed dedup --if-present \
230
+ --title "<candidate title>" \
231
+ --description "<one-line summary>" \
232
+ --content "<the body you were about to write>" # or --file <path> / --stdin
233
+ ```
234
+
235
+ It prints the nearest knowledge+feature docs with cosine similarity and a **verdict**:
236
+
237
+ | Verdict | What it means | What you do |
238
+ |---|---|---|
239
+ | **MERGE** | A near-verbatim twin already exists (cosine ≥ 0.97, decisively closer than the runner-up) | Do **not** create. Extend the named file (or `dreamcontext knowledge merge` at deep tier). |
240
+ | **REVIEW** | Same-topic candidate in the 0.91–0.97 band | Apply the sharp-vs-soft rubric below against the **named** neighbor — usually extend it. |
241
+ | **CREATE** | No near-duplicate above the review threshold | Safe to create — still sanity-check the top neighbor. |
242
+
243
+ `--if-present` makes it a no-op (and it prints a fallback note) when this vault has no embedding cache or the model isn't installed — so it's always safe to run and never triggers a first-time model download during sleep. When it's a no-op or reports the model is unavailable, **fall back to keyword recall.** Semantic dedup is an ASSIST, not a replacement — also recall by the topic AND its family (vertical / brand / parent domain), especially for CREATE/REVIEW verdicts:
226
244
 
227
245
  ```bash
228
246
  dreamcontext memory recall "<topic>" --types knowledge,feature
@@ -236,7 +254,7 @@ Then decide — **default to extending an existing file**:
236
254
  | The **same vertical / brand / topic family** as an existing file, or a sub-aspect / increment / follow-up of a topic already covered (a *soft* distinction) | **Extend that file** — add a section, update `summary:` if it drifted. Don't fork a near-duplicate slug. Similar brands, similar verticals, similar topics belong together in the fewest files. |
237
255
  | A **genuinely separate topic / domain / concern** a future session would expect to find standing alone, where its own tag set sharpens discovery (a *sharp* distinction) | **Create a new file** (below). A clean topical boundary earns its own slug so tagging stays valuable. |
238
256
 
239
- The test for sharp-vs-soft: *Would a future recall expect this bundled with the existing file, or standing on its own? Would a separate file make the tag set more discriminating — or just split one topic across two slugs?* If splitting wouldn't sharpen the tags, extend.
257
+ The test for sharp-vs-soft: *Would a future recall expect this bundled with the existing file, or standing on its own? Would a separate file make the tag set more discriminating — or just split one topic across two slugs?* If splitting wouldn't sharpen the tags, extend. A **MERGE** verdict settles it (extend); **REVIEW** is where this rubric earns its keep.
240
258
 
241
259
  This is **not** "always make super-files." Distinct topics MUST get distinct files — that's exactly what makes tags worth having. It's the *soft* distinctions (same family, narrower slice, incremental finding) that fold into an existing file.
242
260
 
@@ -411,6 +429,7 @@ Dropped-but-load-bearing self-check: <none | list any digest/auto-bookmark/resea
411
429
  7. **Knowledge file threshold**: ≥3 paragraphs of content, or material that will be re-read in future sessions.
412
430
  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.
413
431
  8a. **Keep the store organized (B0).** NEW boards belong in their context folder (`knowledge/<context>/<title>/`); `apply-diagrams` is reserved for folding legacy flat `knowledge/diagrams/` boards into per-title folders (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.
432
+ 8b. **`knowledge/archive/` is off-limits.** It holds `sleep-state`'s ceiling-vs-promotion escalation writes (archive-before-delete, task `improve-sleep-quality` AC6) — never group, move, retag, or merge those files; they are not yours to organize.
414
433
  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.
415
434
  10. **Process all flags from sleep-state** in your report — don't silently drop them.
416
435
  11. **No-op cheaply** when signals don't actually warrant work.
@@ -233,6 +233,14 @@ If a file exceeds ~150 lines:
233
233
  - Replace the extracted block with a one-line reference: `> Archived to knowledge/<slug>.md`.
234
234
  - Merge into existing entries before adding new ones — never duplicate.
235
235
 
236
+ **Standing authority — ceiling vs. promotion collision.** Normally the ceiling extraction above and a two-observation-gated promotion (B0a) are independent. But when a promotion the gate genuinely warrants is BLOCKED because the target file is already AT the ~150-line ceiling, flagging it for `sleep-product` lets it lose every cycle indefinitely — the exact recidivism this fixes (a promotion that clears the gate but never lands). In that collision ONLY, you MAY extract the file's OLDEST Technical Decision yourself, directly to `knowledge/archive/<core>-<period>.md` (e.g. `knowledge/archive/2.memory-2026-h1.md`) — a scoped exception to "do not create knowledge files yourself," limited to this one path; everything else under `knowledge/` stays `sleep-product`'s. **Archive-before-delete, no exceptions:**
237
+ 1. Write the archive file FIRST, full content, dated.
238
+ 2. Verify it landed (`cat` it back, or `dreamcontext knowledge index --plain`).
239
+ 3. ONLY THEN replace the source block with `> Archived to knowledge/archive/<core>-<period>.md`.
240
+ 4. Promote the new entry into the now-freed space.
241
+
242
+ Report which Decision you archived, the file you wrote, and the promotion it unblocked.
243
+
236
244
  The ceiling tightened from 300 to 150 in v0.4.0+ because `dreamcontext memory recall` can now retrieve any extracted content on demand. The snapshot pre-loads only the freshest, most-cited entries; older context lives in knowledge files and is still findable via BM25 recall. Aggressive pruning is preferred over generous retention.
237
245
 
238
246
  For extended core files (`3-6.*`), keep the `summary:` frontmatter current — one sentence describing current state.
@@ -246,6 +254,17 @@ Read `knowledge_access` from `.sleep.json`:
246
254
 
247
255
  You do **not** edit knowledge files. Produce flags for `sleep-product` to act on.
248
256
 
257
+ #### C3. Recidivism flags — recurring problems for `sleep done --flag`
258
+
259
+ If a problem in YOUR domain keeps recurring across cycles — a Decision stuck behind the ceiling for 2+ cycles running, a Known Issue that keeps reappearing, a C2 staleness flag already raised last cycle and still unresolved — report it as a flag spec so the orchestrator can pass it to `sleep done`:
260
+
261
+ ```
262
+ ### Recidivism flags (for `sleep done --flag`)
263
+ - ceiling-blocked:2.memory.md::"2.memory.md at ceiling — WKWebView decision promotion blocked again"
264
+ ```
265
+
266
+ `sleep done --flag <key>::<label>[::<task-slug>]` is repeatable — the orchestrator passes one `--flag` per flag it collects from every specialist's report (never comma-separated). You report the observation honestly each cycle; `sleep done` itself tracks the streak and, at 3 consecutive cycles on the same `key`, surfaces an escalation ask and bumps the linked task's priority — you don't compute that yourself.
267
+
249
268
  ## Return — single combined report
250
269
 
251
270
  ```
@@ -279,6 +298,9 @@ You do **not** edit knowledge files. Produce flags for `sleep-product` to act on
279
298
  ### Cross-domain mentions (for other specialists)
280
299
  - (none) | OR: research finding worth long-term retention — flagging for sleep-product
281
300
 
301
+ ### Recidivism flags (for `sleep done --flag`)
302
+ - (none) | OR: ceiling-blocked:2.memory.md::"2.memory.md at ceiling — WKWebView decision promotion blocked again"
303
+
282
304
  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>
283
305
  ```
284
306
 
@@ -297,3 +319,5 @@ Dropped-but-load-bearing self-check: <none | list any digest/auto-bookmark/decis
297
319
  9. **Decisions > deliberation.** Save the conclusion and rationale; drop the back-and-forth.
298
320
  10. **Surgical edits only on core.** Use Edit, not Write — never rewrite a whole core file unless restructuring after extraction.
299
321
  11. **Match existing changelog voice** — read recent entries first.
322
+ 12. **The `knowledge/archive/` write is scoped and rare.** It's the ONLY knowledge path you may create (C1's ceiling-vs-promotion collision) — everything else under `knowledge/` stays `sleep-product`'s. Archive-before-delete, always: write, verify, then replace.
323
+ 13. **Report recidivism honestly, every cycle.** Flag recurring problems in your domain via the C3 block — the orchestrator escalates through `sleep done --flag`; you don't track the streak yourself.
@@ -173,6 +173,8 @@ dreamcontext tasks status <slug> in_review "Needs your eyes — <the specific th
173
173
 
174
174
  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.
175
175
 
176
+ **Foreign tasks are NOT evidence (#177).** A task synced from a SHARED remote container (a ClickUp list two projects both sync) carries a `source_project:` frontmatter field, and the SessionStart snapshot flags it `⚠ FOREIGN`. That row describes work in ANOTHER repo. **Never treat a foreign `completed` task as proof that the corresponding work is done HERE** — it once nearly dropped a whole local work group because a sibling repo's finished task read as "already done". Do not reconcile, re-status, or close a native task on the strength of a foreign one; verify against THIS project's own source (its code, its changelog, its PRs) first. When in doubt, leave the native task as-is and flag the ambiguity in your report. A shared list is a data hazard — surface it (`dreamcontext doctor` warns when two registered projects share one list) rather than silently trusting it.
177
+
176
178
  ### 5. Version readiness signal (no auto-release)
177
179
 
178
180
  After bumping statuses, check if the active planning version is now release-ready:
@@ -215,6 +217,17 @@ dreamcontext tasks list # every non-completed task, with updated dates
215
217
 
216
218
  **(d) Objective linking (only when `core/objectives/` is non-empty).** Objectives are the PO's OKR roadmap items; tasks link to them many-to-many via the `objectives:` frontmatter list. For each task you touched (or created) whose `objectives:` is **absent or empty**, judge which objective(s) the work genuinely serves — check `dreamcontext roadmap objective list` for the live set — and set them: `dreamcontext tasks objectives <slug> <a,b>` (multiple slugs when one task lifts several outcomes, e.g. revenue AND retention — that's expected, not double-counting). **HARD RULE: a non-empty `objectives:` list is a PO decision — NEVER change or extend it.** If no objective fits, leave the field empty; do not force a link. You only edit the task-side field; `core/objectives/*.md` prose/title/dates/structure stay PO-authored and off-limits. Rollups/forecasts recompute when the orchestrator runs `dreamcontext roadmap` after your report.
217
219
 
220
+ **(e) Recidivism — check before you flag again.** Read `_dream_context/state/.sleep-flags.json` (plain Read, no CLI) before grooming: if a task/problem you're about to note as "still not done" already carries `consecutive_cycles >= 3` from prior cycles, it has ALREADY been escalated — do not just emit another passive flag observation and move on. Take a real action instead: reconcile it now if it's actually done, `in_review` with an explicit "recurred N cycles — needs your decision" if it's genuinely stuck, or close it if the recurrence itself proves it's dead. Emitting another flag for a problem already at the threshold is the exact failure this closes (`fix-releases-add-auto-discovery-scoping-bug` recurred 5× and stayed `todo`).
221
+
222
+ For everything NOT yet escalated, report new/continuing recurrence as a flag spec for the orchestrator to pass at `sleep done`:
223
+
224
+ ```
225
+ ### Recidivism flags (for `sleep done --flag`)
226
+ - recurring-task:fix-releases-add-auto-discovery-scoping-bug::"still todo after N cycles"::fix-releases-add-auto-discovery-scoping-bug
227
+ ```
228
+
229
+ `sleep done --flag <key>::<label>[::<task-slug>]` is repeatable — one `--flag` per flag (never comma-separated). At 3 consecutive cycles on the same `key`, `sleep done` itself surfaces the escalation ask and bumps the linked task's priority — you only report the observation honestly each cycle, you don't compute the streak.
230
+
218
231
  **Key Result current — you MAY update it, EXCEPT on insight-fed objectives.** When this cycle surfaced a new real observed value for an objective's Key Result metric (e.g. MRR moved to $1,250, active users hit 400) — from the transcript, a file, or a connected system — refresh it: `dreamcontext roadmap objective metric <slug> --current <n>`. This is the ONE write you may make to a `core/objectives/*.md` file, and only through this CLI verb (never hand-edit the frontmatter). Use a value you actually observed — do not invent or estimate a number. The roadmap board regen at the end of sleep will reflect the new progress.
219
232
 
220
233
  **Insight-bound Key Results are hands-off.** Some objectives are *measured*, not asserted: a Lab insight (`_dream_context/lab/insights/<slug>.md`) may carry `binding: {objective: <slug>}`, meaning `lab bind` seeded — and every `lab sync` rewrites — that objective's `metric.current`. Before any metric write, check for a feeder: `dreamcontext lab list --json` and look for a manifest whose `binding.objective` equals the objective's slug (one feeder max per objective). If bound, do NOT write `metric.current` — your number would be overwritten at the next sync and blurs measured-vs-asserted provenance. If the feeding insight's cache looks stale or errored (`dreamcontext lab show <slug>` → old `fetchedAt` / `error` set), say so in your report so the user refreshes it. **Sleep NEVER runs `lab sync`** — that's a standing decision (credential exposure, latency, non-determinism); refreshing is always an explicit user/agent action outside sleep.
@@ -234,6 +247,8 @@ Never silently delete a task, and never `completed` a task that was never actual
234
247
  - 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)
235
248
  - Objective links: <slug> → [retention-20, revenue] (was empty), <slug> left unlinked (no objective fits) | OR: no objectives in this project — skipped
236
249
  - KR metrics: <objective> current → <n> (observed in transcript) | <objective> SKIPPED — fed by bound insight <insight-slug> (cache stale since <date>; suggest `lab sync <insight-slug>`) | OR: no metric observations this cycle
250
+ - Recidivism flags: recurring-task:<slug>::"still todo after N cycles"::<slug> | OR: none this cycle
251
+ - Recidivism actions: <slug> was already escalated (consecutive_cycles >= 3) → set in_review "recurred N cycles — needs your decision" instead of re-flagging | OR: none escalated
237
252
  - Cross-domain mentions: <slug> includes a memory-worthy decision about JWT — flagging for sleep-state
238
253
  - Skipped: <session_id> had no actionable task signal
239
254
 
@@ -251,3 +266,4 @@ Dropped-but-load-bearing self-check: <none | list any digest/auto-bookmark/task
251
266
  7. **Person attribution is multi-person only.** Read `.config.json` `people` first. If 0 or 1 entry, step 2.5 is a complete NO-OP — never inject `person:` tags on solo projects. Derived multi-person status comes from `people.length > 1`; there is no `multiPerson` key to check.
252
267
  8. **Normalize tags via taxonomy vocab.** When writing or updating task frontmatter tags, check `dreamcontext taxonomy vocab` and use canonical forms (faceted or bare standard tags); non-canonical tags degrade recall.
253
268
  9. **Objectives: propose for empty, never overwrite non-empty.** An existing `objectives:` value is a PO decision that sticks. You fill blanks with judgment; you never revise the PO's linking. Objective files themselves (`core/objectives/`) are PO-authored — never hand-edit their prose, title, dates, or structure — with the single exception that you may refresh a Key Result's `current` via `dreamcontext roadmap objective metric <slug> --current` when you observed a new real value (see grooming (d)) — and NEVER on an objective fed by a bound Lab insight (check `dreamcontext lab list --json` for `binding.objective`; measured values belong to `lab sync`, which sleep never runs).
269
+ 10. **Recidivism — act on escalated flags, don't just re-flag.** Read `state/.sleep-flags.json` before grooming; a problem already at `consecutive_cycles >= 3` needs a real decision (in_review / close / fix), not another passive flag line. Report new/continuing recurrence via the flag-spec block (grooming (e)) so the orchestrator can pass `sleep done --flag`.