dreamcontext 0.6.0 → 0.7.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.
- package/README.md +2 -1
- package/agents/sleep-product.md +19 -2
- package/agents/sleep-state.md +43 -22
- package/agents/sleep-tasks.md +18 -0
- package/dist/agents/sleep-product.md +19 -2
- package/dist/agents/sleep-state.md +43 -22
- package/dist/agents/sleep-tasks.md +18 -0
- package/dist/dashboard/assets/{BrainCanvas3D-LLqVeXtb.js → BrainCanvas3D-lFgJbbhZ.js} +1 -1
- package/dist/dashboard/assets/{_baseUniq-DW0uA0ty.js → _baseUniq-BpANgc_i.js} +1 -1
- package/dist/dashboard/assets/{arc-fVUGtlbL.js → arc-CX32Jm7E.js} +1 -1
- package/dist/dashboard/assets/{architectureDiagram-Q4EWVU46-Dz2PKBsS.js → architectureDiagram-Q4EWVU46-ARASlGxO.js} +1 -1
- package/dist/dashboard/assets/{blockDiagram-DXYQGD6D-ByWKxzhL.js → blockDiagram-DXYQGD6D-BBvsYm9E.js} +1 -1
- package/dist/dashboard/assets/{c4Diagram-AHTNJAMY-dpHsVM3D.js → c4Diagram-AHTNJAMY-ChSUfXR9.js} +1 -1
- package/dist/dashboard/assets/channel-w_Bp182N.js +1 -0
- package/dist/dashboard/assets/{chunk-4BX2VUAB-HEXb6Yg5.js → chunk-4BX2VUAB-COHoVEpt.js} +1 -1
- package/dist/dashboard/assets/{chunk-4TB4RGXK-DeVy5g6H.js → chunk-4TB4RGXK-DKJFLaTC.js} +1 -1
- package/dist/dashboard/assets/{chunk-55IACEB6-DGy3ZgDZ.js → chunk-55IACEB6-CKZPWZRu.js} +1 -1
- package/dist/dashboard/assets/{chunk-EDXVE4YY-CYJehjz4.js → chunk-EDXVE4YY-k1y4mGUJ.js} +1 -1
- package/dist/dashboard/assets/{chunk-FMBD7UC4-DKTOmvgZ.js → chunk-FMBD7UC4-ixXe5R10.js} +1 -1
- package/dist/dashboard/assets/{chunk-OYMX7WX6-mmtWyiDA.js → chunk-OYMX7WX6-NDFap7xg.js} +1 -1
- package/dist/dashboard/assets/{chunk-QZHKN3VN-DSdV0iwY.js → chunk-QZHKN3VN-vY0UpHjB.js} +1 -1
- package/dist/dashboard/assets/{chunk-YZCP3GAM-DbY-KoDn.js → chunk-YZCP3GAM-yztvsKR-.js} +1 -1
- package/dist/dashboard/assets/classDiagram-6PBFFD2Q-CcQxcqy9.js +1 -0
- package/dist/dashboard/assets/classDiagram-v2-HSJHXN6E-CcQxcqy9.js +1 -0
- package/dist/dashboard/assets/clone-_znoR_ci.js +1 -0
- package/dist/dashboard/assets/{cose-bilkent-S5V4N54A-p0t1DY88.js → cose-bilkent-S5V4N54A-DKXM5Fh5.js} +1 -1
- package/dist/dashboard/assets/{dagre-KV5264BT-DYE0WzHM.js → dagre-KV5264BT-DN1Nlsmy.js} +1 -1
- package/dist/dashboard/assets/{diagram-5BDNPKRD-D9EiQCOP.js → diagram-5BDNPKRD-DnoJFRqR.js} +1 -1
- package/dist/dashboard/assets/{diagram-G4DWMVQ6-poDXSAfu.js → diagram-G4DWMVQ6-CF1_jTNI.js} +1 -1
- package/dist/dashboard/assets/{diagram-MMDJMWI5-CHZ7wgN1.js → diagram-MMDJMWI5-D4-bZZEt.js} +1 -1
- package/dist/dashboard/assets/{diagram-TYMM5635-DVk6fYG7.js → diagram-TYMM5635-al8RqVgf.js} +1 -1
- package/dist/dashboard/assets/{erDiagram-SMLLAGMA-D2sqkGin.js → erDiagram-SMLLAGMA-MEcC0rwO.js} +1 -1
- package/dist/dashboard/assets/{flowDiagram-DWJPFMVM-DrMlKBYA.js → flowDiagram-DWJPFMVM-DCLyNpW8.js} +1 -1
- package/dist/dashboard/assets/{ganttDiagram-T4ZO3ILL-Cf4FbEFp.js → ganttDiagram-T4ZO3ILL-DfEvbbJK.js} +1 -1
- package/dist/dashboard/assets/{gitGraphDiagram-UUTBAWPF-BsbOq1C9.js → gitGraphDiagram-UUTBAWPF-C_YozdVL.js} +1 -1
- package/dist/dashboard/assets/{graph-CUxxgCtS.js → graph-DpIXS1G1.js} +1 -1
- package/dist/dashboard/assets/index-Bo5CUa_M.js +480 -0
- package/dist/dashboard/assets/index-DrqurW1c.css +1 -0
- package/dist/dashboard/assets/{infoDiagram-42DDH7IO-DTkMnZiD.js → infoDiagram-42DDH7IO-AdT6kjzj.js} +1 -1
- package/dist/dashboard/assets/{ishikawaDiagram-UXIWVN3A-CahQ348K.js → ishikawaDiagram-UXIWVN3A-B0_9IZVO.js} +1 -1
- package/dist/dashboard/assets/{journeyDiagram-VCZTEJTY-BDY2Nslc.js → journeyDiagram-VCZTEJTY-BveNBswQ.js} +1 -1
- package/dist/dashboard/assets/{kanban-definition-6JOO6SKY-CgrwoTjI.js → kanban-definition-6JOO6SKY-CFI8j4jR.js} +1 -1
- package/dist/dashboard/assets/{layout-IaUxkFkm.js → layout-DI7XjZy1.js} +1 -1
- package/dist/dashboard/assets/{linear-shc0iNFn.js → linear-CSjp56iw.js} +1 -1
- package/dist/dashboard/assets/{min-BIL7YgTN.js → min-pAGUJmEC.js} +1 -1
- package/dist/dashboard/assets/{mindmap-definition-QFDTVHPH-GmO0JRtA.js → mindmap-definition-QFDTVHPH-C2mBnknr.js} +1 -1
- package/dist/dashboard/assets/{pieDiagram-DEJITSTG-Bfm_toYA.js → pieDiagram-DEJITSTG-i_phWDqD.js} +1 -1
- package/dist/dashboard/assets/{quadrantDiagram-34T5L4WZ-DIjTM3lm.js → quadrantDiagram-34T5L4WZ-Dv7TGJjw.js} +1 -1
- package/dist/dashboard/assets/{requirementDiagram-MS252O5E-B9AEoGYh.js → requirementDiagram-MS252O5E-CB2Jl-O5.js} +1 -1
- package/dist/dashboard/assets/{sankeyDiagram-XADWPNL6-C_O5XLXm.js → sankeyDiagram-XADWPNL6-DxCoN-EI.js} +1 -1
- package/dist/dashboard/assets/{sequenceDiagram-FGHM5R23-CHSxSvmJ.js → sequenceDiagram-FGHM5R23-BeZyaehJ.js} +1 -1
- package/dist/dashboard/assets/{stateDiagram-FHFEXIEX-B0URrhHw.js → stateDiagram-FHFEXIEX-D3AjQzD1.js} +1 -1
- package/dist/dashboard/assets/stateDiagram-v2-QKLJ7IA2-Ci9v--xK.js +1 -0
- package/dist/dashboard/assets/{timeline-definition-GMOUNBTQ-CycU2gVC.js → timeline-definition-GMOUNBTQ-3l_8RFUg.js} +1 -1
- package/dist/dashboard/assets/{vennDiagram-DHZGUBPP-DcU2536G.js → vennDiagram-DHZGUBPP-2QiY25JD.js} +1 -1
- package/dist/dashboard/assets/{wardley-RL74JXVD-BWqqaX3S.js → wardley-RL74JXVD-DNLmFofz.js} +1 -1
- package/dist/dashboard/assets/{wardleyDiagram-NUSXRM2D-CUnIHJgd.js → wardleyDiagram-NUSXRM2D-BI0tupiS.js} +1 -1
- package/dist/dashboard/assets/{xychartDiagram-5P7HB3ND-b9fcOYTj.js → xychartDiagram-5P7HB3ND-CghXPE7_.js} +1 -1
- package/dist/dashboard/index.html +2 -2
- package/dist/index.js +1669 -1064
- package/dist/skill-packs/excalidraw/SKILL.md +82 -3
- package/dist/skill-packs/video-watching/SKILL.md +54 -13
- package/dist/skill-packs/video-watching/scripts/build_frame_index.py +61 -10
- package/dist/skill-packs/video-watching/scripts/transcribe.sh +147 -54
- package/dist/templates/init/data-structures/default.md +26 -24
- package/package.json +1 -1
- package/skill/SKILL.md +26 -12
- package/skill-packs/excalidraw/SKILL.md +82 -3
- package/skill-packs/video-watching/SKILL.md +54 -13
- package/skill-packs/video-watching/scripts/build_frame_index.py +61 -10
- package/skill-packs/video-watching/scripts/transcribe.sh +147 -54
- package/dist/dashboard/assets/channel-zrLwggBX.js +0 -1
- package/dist/dashboard/assets/classDiagram-6PBFFD2Q-BvejNiwH.js +0 -1
- package/dist/dashboard/assets/classDiagram-v2-HSJHXN6E-BvejNiwH.js +0 -1
- package/dist/dashboard/assets/clone-BFVdml6g.js +0 -1
- package/dist/dashboard/assets/index-CqSkXBSu.css +0 -1
- package/dist/dashboard/assets/index-flRpQtDj.js +0 -476
- package/dist/dashboard/assets/stateDiagram-v2-QKLJ7IA2-FdAb9MBo.js +0 -1
- package/dist/skill-packs/video-watching/scripts/gap_fill.py +0 -45
- package/skill-packs/video-watching/scripts/gap_fill.py +0 -45
package/README.md
CHANGED
|
@@ -193,12 +193,13 @@ your-project/
|
|
|
193
193
|
│ │ ├── 2.memory.md # Decisions & known issues
|
|
194
194
|
│ │ ├── 3.style_guide_and_branding.md
|
|
195
195
|
│ │ ├── 4.tech_stack.md # Tech decisions
|
|
196
|
-
│ │ ├── 5.data_structures.sql
|
|
197
196
|
│ │ ├── 6.system_flow.md # Session lifecycle, data flows
|
|
198
197
|
│ │ ├── CHANGELOG.json
|
|
199
198
|
│ │ ├── RELEASES.json
|
|
200
199
|
│ │ └── features/ # Feature PRDs
|
|
201
200
|
│ ├── knowledge/ # Tagged docs (index in snapshot)
|
|
201
|
+
│ │ ├── data-structures/ # Schema files (SQL-fenced, highlighted)
|
|
202
|
+
│ │ │ └── default.md # single-product; one per product if monorepo
|
|
202
203
|
│ │ └── *.md # pinned: true → auto-loaded in full
|
|
203
204
|
│ └── state/ # Active tasks + working state
|
|
204
205
|
│ ├── *.md # Active task files
|
package/agents/sleep-product.md
CHANGED
|
@@ -54,8 +54,9 @@ If none apply when you start, no-op cheaply: read the brief, scan for actual sig
|
|
|
54
54
|
| You touch | You don't touch |
|
|
55
55
|
|---|---|
|
|
56
56
|
| `_dream_context/knowledge/*.md` (create + edit) | core 0-6 files (sleep-state owns) |
|
|
57
|
-
| `_dream_context/
|
|
58
|
-
| `
|
|
57
|
+
| `_dream_context/knowledge/data-structures/<product>.md` (schemas, models, API contracts) | task files (sleep-tasks owns) |
|
|
58
|
+
| `_dream_context/core/features/*.md` (create + edit) | changelog, releases (sleep-state owns) |
|
|
59
|
+
| `dreamcontext knowledge create --tags "..."` | |
|
|
59
60
|
| `dreamcontext features create <name>` | |
|
|
60
61
|
| `dreamcontext features insert <name> <section>` | |
|
|
61
62
|
| Frontmatter: `pinned`, `status`, `updated`, `released_version`, `related_tasks` | |
|
|
@@ -250,6 +251,22 @@ Product-scoped knowledge. Cross-cutting findings still go to top-level `knowledg
|
|
|
250
251
|
|
|
251
252
|
This is a one-time bootstrap per product; once the file exists, treat it like any other knowledge file (edit on demand, don't recreate).
|
|
252
253
|
|
|
254
|
+
#### B6. Data structures (schemas / models / API contracts)
|
|
255
|
+
|
|
256
|
+
Data structures live at `knowledge/data-structures/<product>.md` (`default.md` for single-product). They moved here from `core/` because schemas ARE domain knowledge — this gives them recall indexing, staleness flags, and the knowledge UI for free. **You own these writes now** (sleep-state only flags them for you).
|
|
257
|
+
|
|
258
|
+
**Single-observation gate.** Unlike most knowledge (which waits for repetition), a schema/data-model change is reflected in the *same* cycle — no pattern repetition required. If `sleep-state` flagged a schema/table/model change, or the diff shows one, write it now.
|
|
259
|
+
|
|
260
|
+
**Routing.**
|
|
261
|
+
- Active task has `product: X` → `knowledge/data-structures/X.md` (create if missing).
|
|
262
|
+
- Otherwise (single-product) → `knowledge/data-structures/default.md`.
|
|
263
|
+
- Frontmatter: `type: data-structures`, `product: <name>`, `tags: [data-structures, database, schema]` (add domain tags as relevant).
|
|
264
|
+
|
|
265
|
+
**Migration of the old locations** (idempotent; the dir move runs automatically on `dreamcontext sleep start`, but confirm + handle the legacy file):
|
|
266
|
+
- If `core/data-structures/*.md` still exists and the knowledge copy is absent, it was (or should be) moved to `knowledge/data-structures/` — the `sleep start` migration handles this. Verify it landed.
|
|
267
|
+
- If the even-older `core/5.data_structures.sql` exists and `knowledge/data-structures/default.md` does not, copy it there (add the data-structures frontmatter) — don't delete the legacy file.
|
|
268
|
+
- **Never delete** the old `core/data-structures/` dir or the legacy `.sql` yourself — leave them for the user to remove after confirming (the `doctor` command nags about both). Note any migration in your report.
|
|
269
|
+
|
|
253
270
|
## Return — single combined report
|
|
254
271
|
|
|
255
272
|
```
|
package/agents/sleep-state.md
CHANGED
|
@@ -33,9 +33,8 @@ Identity is sacred — a fresh session must immediately understand who the agent
|
|
|
33
33
|
| You touch | You don't touch |
|
|
34
34
|
|---|---|
|
|
35
35
|
| `core/0-4.*`, `core/6.*` files (Edit, surgical) | task files (sleep-tasks owns) |
|
|
36
|
-
| `core/data-structures/<product>.md` (
|
|
37
|
-
| `dreamcontext core
|
|
38
|
-
| `dreamcontext core releases {add,update,active,list,show}` | |
|
|
36
|
+
| `dreamcontext core changelog add` | knowledge files incl. `knowledge/data-structures/<product>.md` (sleep-product owns + writes; you only flag staleness) |
|
|
37
|
+
| `dreamcontext core releases {add,update,active,list,show}` | feature PRDs (sleep-product owns) |
|
|
39
38
|
| `dreamcontext trigger add` (context-dependent reminders) | |
|
|
40
39
|
|
|
41
40
|
## Inputs
|
|
@@ -89,6 +88,7 @@ dreamcontext core changelog add \
|
|
|
89
88
|
--summary "<≤200 char one-liner: what shipped, scannable in snapshot>" \
|
|
90
89
|
--description "<one paragraph: what changed and why; mention key file/symbol where helpful>" \
|
|
91
90
|
--references "commit:<sha>,file:<path>,knowledge:<slug>,feature:<slug>,task:<slug>,url:<href>" \
|
|
91
|
+
[--authors "<person-a,person-b>"] \
|
|
92
92
|
[--supersedes "<date>|<scope>"] \
|
|
93
93
|
$([ "$BREAKING" = "true" ] && echo "--breaking")
|
|
94
94
|
```
|
|
@@ -101,6 +101,8 @@ dreamcontext core changelog add \
|
|
|
101
101
|
|
|
102
102
|
**Supersedes field**: optional, only when a later entry reverses or replaces an earlier one (e.g., a "default-on" flip of a previously "opt-in" flag, or a v0.4 file path being deprecated). Use coarse keys like `"2026-05-23|memory"` (date + scope) — disambiguators only matter when multiple entries share the same date+scope, in which case fall back to the position-from-top index. Most entries do NOT supersede anything; leave the field absent.
|
|
103
103
|
|
|
104
|
+
**Authors field (multi-person projects only)**: optional, attributes the change to the person(s) who drove it. Set it ONLY when the project is multi-person (`.config.json` `people` roster has >1 entry — see Pass B.5). Pass comma-separated kebab-case slugs matching the roster (`--authors "mehmet,ada"`). Determine attribution from the same signals Pass B.5 uses (git `%an` on the commits the entry clusters, self-identification in the session transcript). When a single change was driven by distinct people across clusters, attribute each `dreamcontext core changelog add` invocation to its own author(s). Single-person projects: OMIT `--authors` entirely — output stays byte-identical to today. Authors are excluded from the changelog dedup fingerprint, so adding them never re-opens an already-released entry.
|
|
105
|
+
|
|
104
106
|
#### A3. Releases — surface readiness, never auto-release
|
|
105
107
|
|
|
106
108
|
```bash
|
|
@@ -142,21 +144,20 @@ Be conservative. The default is **no change**. Only update when a pattern is rec
|
|
|
142
144
|
|
|
143
145
|
#### B0b. Single-observation gate (code-reality files)
|
|
144
146
|
|
|
145
|
-
Applies to: `3.style_guide_and_branding.md`, `4.tech_stack.md`,
|
|
147
|
+
Applies to: `3.style_guide_and_branding.md`, `4.tech_stack.md`, and `6.system_flow.md`. (Schema/data-model changes are the same kind of single-observation signal, but they now live in `knowledge/data-structures/` — **sleep-product** owns that write; flag it for them rather than writing it yourself.)
|
|
146
148
|
|
|
147
|
-
These files describe code reality, not user preferences. A single session adding/removing a dependency,
|
|
149
|
+
These files describe code reality, not user preferences. A single session adding/removing a dependency, route, or workflow step MUST be reflected in the same cycle — no pattern repetition required. If the diff or transcript shows the change happened, write it.
|
|
148
150
|
|
|
149
151
|
Examples that trigger an immediate write:
|
|
150
152
|
- A new dependency appears in `package.json` / lockfile → `4.tech_stack.md`.
|
|
151
|
-
- A schema change, new table, or new model →
|
|
153
|
+
- A schema change, new table, or new model → flag for **sleep-product** to write `knowledge/data-structures/<product>.md`.
|
|
152
154
|
- A new route, hook, or system-flow step → `6.system_flow.md`.
|
|
153
155
|
- A new color token, font, or design primitive → `3.style_guide_and_branding.md`.
|
|
154
156
|
|
|
155
|
-
**Multi-product routing.** If the active task frontmatter has `product: X`, route any tech_stack
|
|
157
|
+
**Multi-product routing.** If the active task frontmatter has `product: X`, route any tech_stack observation to the matching product's file:
|
|
156
158
|
- Tech stack scoped to product X → still goes in `4.tech_stack.md` but tagged with the product label inline (single-file convention); if a project-specific convention emerges (per-product tech stacks), revisit.
|
|
157
|
-
- Data structures → `core/data-structures/<X>.md`. Create the file if missing.
|
|
158
159
|
|
|
159
|
-
|
|
160
|
+
Data-structure observations are routed by **sleep-product** to `knowledge/data-structures/<X>.md` (or `default.md`) — flag them for sleep-product, don't write them here.
|
|
160
161
|
|
|
161
162
|
#### B1. Signal → file routing
|
|
162
163
|
|
|
@@ -167,7 +168,7 @@ Otherwise (no `product:` field, single-product project), data structures changes
|
|
|
167
168
|
| New project constraint or warning | `0.soul.md` | Rules / Warnings | two-observation |
|
|
168
169
|
| Technical decision worth preserving | `2.memory.md` | Technical Decisions | two-observation |
|
|
169
170
|
| Stack/dependency change | `4.tech_stack.md` | | single-observation |
|
|
170
|
-
| Schema / data-model change | `
|
|
171
|
+
| Schema / data-model change | flag for **sleep-product** → `knowledge/data-structures/<product>.md` (or `default.md`) | | single-observation |
|
|
171
172
|
| System flow / hook count change | `6.system_flow.md` | | single-observation |
|
|
172
173
|
| Style/branding token change | `3.style_guide_and_branding.md` | | single-observation |
|
|
173
174
|
|
|
@@ -181,22 +182,38 @@ dreamcontext trigger add "<when>" "<remind>" # context-dependent reminders
|
|
|
181
182
|
|
|
182
183
|
Cross-domain catches from your own changelog pass land here naturally — if you wrote a `feat` entry whose description revealed a preference enforced twice, write it into `1.user.md` in the same cycle (no flagging needed; you own both files).
|
|
183
184
|
|
|
184
|
-
|
|
185
|
+
### Pass B.5 — People detection (multi-person awareness)
|
|
186
|
+
|
|
187
|
+
dreamcontext defaults to single-person. When you have **corroborated evidence** that more than one human works in this project, record the roster so changelogs/tasks/memory can attribute work per person. This is **AI-driven detection** — there is no manual toggle and no persisted `multiPerson` flag (multi-person status is DERIVED from `people.length > 1`).
|
|
188
|
+
|
|
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):
|
|
185
190
|
|
|
186
|
-
|
|
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 (ignore bots/CI like `github-actions`, `dependabot`).
|
|
193
|
+
- **Distinct voice / handoff** — the transcript shows a clear authorship handoff or a different working style/voice than the established user.
|
|
187
194
|
|
|
188
195
|
```bash
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
cp "$LEGACY" "$NEW_DEFAULT"
|
|
194
|
-
# do NOT delete the legacy file here — leave it for WS-1 manifest cleanup (if system-installed)
|
|
195
|
-
# or the user to remove manually. Note the migration in your report.
|
|
196
|
-
fi
|
|
196
|
+
# Signal 2: distinct human git authors since the sleep epoch
|
|
197
|
+
git log --since="$CUTOFF" --format='%an' | sort -u
|
|
198
|
+
# Read the existing roster FIRST — you append, you never overwrite.
|
|
199
|
+
jq -r '.people // [] | join(", ")' _dream_context/state/.config.json 2>/dev/null
|
|
197
200
|
```
|
|
198
201
|
|
|
199
|
-
|
|
202
|
+
When the gate is met:
|
|
203
|
+
|
|
204
|
+
1. **Additive union to the roster — never overwrite.** Read the current `people` array first, then write the union (existing ∪ newly observed) back. Use kebab-case display-name slugs (`mehmet`, `ada`). A previously recorded person is NEVER dropped because they were quiet this cycle.
|
|
205
|
+
|
|
206
|
+
```bash
|
|
207
|
+
dreamcontext config # confirm current roster, then edit state/.config.json people[] = union
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
(There is no CLI writer for `people` yet — edit `_dream_context/state/.config.json` directly with Edit, preserving every existing key. Do NOT add a `multiPerson` key; it is derived.)
|
|
211
|
+
|
|
212
|
+
2. **Refresh `## People` in `1.user.md`** to enumerate the full roster. Use the `ensurePeopleSection(userMd, people)` helper semantics (idempotent insert/replace of a `## People` block; one bullet per person). This is a no-op for single-person projects.
|
|
213
|
+
|
|
214
|
+
3. **Attribute this cycle's changelog entries** — re-run Pass A's `dreamcontext core changelog add` with `--authors "<slugs>"` for each entry, attributing it to the person(s) who drove that cluster (Pass A and this pass share the git-author analysis).
|
|
215
|
+
|
|
216
|
+
**Single-person projects (gate NOT met): this entire pass is a NO-OP.** Do not create a roster, do not add a `## People` section, do not pass `--authors`. A solo project's `.config.json`, `1.user.md`, and changelog output must stay byte-identical to today. The cost of a false positive (spuriously attributing a solo user's work to a phantom teammate) is high — stay conservative.
|
|
200
217
|
|
|
201
218
|
### Pass C — Anti-bloat sweep + knowledge staleness flags
|
|
202
219
|
|
|
@@ -245,6 +262,10 @@ You do **not** edit knowledge files. Produce flags for `sleep-product` to act on
|
|
|
245
262
|
- 4.tech_stack.md: untouched
|
|
246
263
|
- Triggers added: 0
|
|
247
264
|
|
|
265
|
+
### People (multi-person detection)
|
|
266
|
+
- Roster: single-person (no multi-person signals this cycle) — no changes
|
|
267
|
+
| OR: detected 2 humans (signals: 2 distinct git authors + self-id in transcript) → roster updated mehmet, ada (additive union; ada appended, mehmet preserved); `## People` refreshed in 1.user.md; 3 changelog entries attributed via --authors
|
|
268
|
+
|
|
248
269
|
### Anti-bloat & staleness
|
|
249
270
|
- 2.memory.md at 287 lines — under ceiling, no extraction needed
|
|
250
271
|
- Knowledge staleness flags (for sleep-product):
|
|
@@ -259,7 +280,7 @@ You do **not** edit knowledge files. Produce flags for `sleep-product` to act on
|
|
|
259
280
|
1. **Be exhaustive on the diary.** Every meaningful change gets a changelog entry. Skipping is the failure state.
|
|
260
281
|
2. **Conservative on identity (preferences & decisions).** No-op is the right answer most cycles for `1.user.md` and `2.memory.md`.
|
|
261
282
|
3. **Two-observation gate for `1.user.md` / `2.memory.md`.** One observation is data; two is a pattern. Don't write a preference or decision from a single mention.
|
|
262
|
-
3a. **Single-observation gate for code-reality files** (`3.*`, `4.*`, `
|
|
283
|
+
3a. **Single-observation gate for code-reality files** (`3.*`, `4.*`, `6.*`). A diff that adds a dependency, route, or design primitive MUST be reflected in the same cycle. These files mirror code, not opinion. (Schema/data-model changes are the same kind of signal but live in `knowledge/data-structures/` — flag them for **sleep-product**.)
|
|
263
284
|
4. **Cluster commits, don't enumerate.** Logical groupings beat 1-commit-per-entry.
|
|
264
285
|
5. **Cover uncommitted work.** Don't wait for the user to commit.
|
|
265
286
|
6. **Never auto-release.** Surface readiness; the user decides.
|
package/agents/sleep-tasks.md
CHANGED
|
@@ -98,6 +98,22 @@ dreamcontext tasks create "<descriptive-slug>" --status in_progress --priority m
|
|
|
98
98
|
|
|
99
99
|
Untracked, genuinely-separate work is invisible to future sessions — always link it. But a smaller slice of existing work belongs *inside* that task, never in a duplicate.
|
|
100
100
|
|
|
101
|
+
### 2.5. Person attribution (multi-person projects only)
|
|
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).
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
# Read the current roster
|
|
107
|
+
jq -r '.people // [] | join(", ")' _dream_context/state/.config.json 2>/dev/null
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
- **New task**: pass `--person <name>` to `dreamcontext tasks create` (the CLI injects a `person:<slug>` tag automatically).
|
|
111
|
+
- **Existing task**: add the tag directly via Edit on the task frontmatter `tags:` array, or via `dreamcontext tasks insert`.
|
|
112
|
+
|
|
113
|
+
When the person is already tagged on the task, no action is needed — the tag is additive. Do not remove a previously-set `person:` tag for a person who was quiet this cycle; they remain attributed for prior work.
|
|
114
|
+
|
|
115
|
+
**Single-person projects (`.config.json` `people` has 0 or 1 entry): this step is a NO-OP.** Never inject a `person:` tag on a solo project. The output must stay byte-identical to today.
|
|
116
|
+
|
|
101
117
|
### 3. Log progress AND reconcile the body — both required
|
|
102
118
|
|
|
103
119
|
**(a) Append a changelog entry** — what happened this session:
|
|
@@ -154,6 +170,7 @@ If every task linked to the active version is `completed` (or only `in_review` r
|
|
|
154
170
|
- Folded in (no new task): <existing-slug> — broadened scope + added 2 user stories / 1 criterion for <smaller-piece> instead of forking a duplicate
|
|
155
171
|
- Created: <slug> (status: in_progress, attached to vX.Y.Z) — genuinely separate concern
|
|
156
172
|
- Body reconciled: <slug> (dropped phase 1 from User Stories; replaced Technical Details auth section)
|
|
173
|
+
- Person attribution: <slug> tagged person:ada (multi-person project, ada drove this cycle's work) | OR: single-person project — no person tags injected
|
|
157
174
|
- Version readiness: vX.Y.Z — 4/5 tasks ready for review
|
|
158
175
|
- Cross-domain mentions: <slug> includes a memory-worthy decision about JWT — flagging for sleep-state
|
|
159
176
|
- Skipped: <session_id> had no actionable task signal
|
|
@@ -167,3 +184,4 @@ If every task linked to the active version is `completed` (or only `in_review` r
|
|
|
167
184
|
4. **Always attach to a planning version.** No orphan work.
|
|
168
185
|
5. **Stay in your lane.** If you spot non-task work worth preserving, flag it — don't write it.
|
|
169
186
|
6. **CLI first** for status/log/insert; **Edit** for surgical body reconciliation (including broadening `description:` / `## Why` when scope grows).
|
|
187
|
+
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.
|
|
@@ -54,8 +54,9 @@ If none apply when you start, no-op cheaply: read the brief, scan for actual sig
|
|
|
54
54
|
| You touch | You don't touch |
|
|
55
55
|
|---|---|
|
|
56
56
|
| `_dream_context/knowledge/*.md` (create + edit) | core 0-6 files (sleep-state owns) |
|
|
57
|
-
| `_dream_context/
|
|
58
|
-
| `
|
|
57
|
+
| `_dream_context/knowledge/data-structures/<product>.md` (schemas, models, API contracts) | task files (sleep-tasks owns) |
|
|
58
|
+
| `_dream_context/core/features/*.md` (create + edit) | changelog, releases (sleep-state owns) |
|
|
59
|
+
| `dreamcontext knowledge create --tags "..."` | |
|
|
59
60
|
| `dreamcontext features create <name>` | |
|
|
60
61
|
| `dreamcontext features insert <name> <section>` | |
|
|
61
62
|
| Frontmatter: `pinned`, `status`, `updated`, `released_version`, `related_tasks` | |
|
|
@@ -250,6 +251,22 @@ Product-scoped knowledge. Cross-cutting findings still go to top-level `knowledg
|
|
|
250
251
|
|
|
251
252
|
This is a one-time bootstrap per product; once the file exists, treat it like any other knowledge file (edit on demand, don't recreate).
|
|
252
253
|
|
|
254
|
+
#### B6. Data structures (schemas / models / API contracts)
|
|
255
|
+
|
|
256
|
+
Data structures live at `knowledge/data-structures/<product>.md` (`default.md` for single-product). They moved here from `core/` because schemas ARE domain knowledge — this gives them recall indexing, staleness flags, and the knowledge UI for free. **You own these writes now** (sleep-state only flags them for you).
|
|
257
|
+
|
|
258
|
+
**Single-observation gate.** Unlike most knowledge (which waits for repetition), a schema/data-model change is reflected in the *same* cycle — no pattern repetition required. If `sleep-state` flagged a schema/table/model change, or the diff shows one, write it now.
|
|
259
|
+
|
|
260
|
+
**Routing.**
|
|
261
|
+
- Active task has `product: X` → `knowledge/data-structures/X.md` (create if missing).
|
|
262
|
+
- Otherwise (single-product) → `knowledge/data-structures/default.md`.
|
|
263
|
+
- Frontmatter: `type: data-structures`, `product: <name>`, `tags: [data-structures, database, schema]` (add domain tags as relevant).
|
|
264
|
+
|
|
265
|
+
**Migration of the old locations** (idempotent; the dir move runs automatically on `dreamcontext sleep start`, but confirm + handle the legacy file):
|
|
266
|
+
- If `core/data-structures/*.md` still exists and the knowledge copy is absent, it was (or should be) moved to `knowledge/data-structures/` — the `sleep start` migration handles this. Verify it landed.
|
|
267
|
+
- If the even-older `core/5.data_structures.sql` exists and `knowledge/data-structures/default.md` does not, copy it there (add the data-structures frontmatter) — don't delete the legacy file.
|
|
268
|
+
- **Never delete** the old `core/data-structures/` dir or the legacy `.sql` yourself — leave them for the user to remove after confirming (the `doctor` command nags about both). Note any migration in your report.
|
|
269
|
+
|
|
253
270
|
## Return — single combined report
|
|
254
271
|
|
|
255
272
|
```
|
|
@@ -33,9 +33,8 @@ Identity is sacred — a fresh session must immediately understand who the agent
|
|
|
33
33
|
| You touch | You don't touch |
|
|
34
34
|
|---|---|
|
|
35
35
|
| `core/0-4.*`, `core/6.*` files (Edit, surgical) | task files (sleep-tasks owns) |
|
|
36
|
-
| `core/data-structures/<product>.md` (
|
|
37
|
-
| `dreamcontext core
|
|
38
|
-
| `dreamcontext core releases {add,update,active,list,show}` | |
|
|
36
|
+
| `dreamcontext core changelog add` | knowledge files incl. `knowledge/data-structures/<product>.md` (sleep-product owns + writes; you only flag staleness) |
|
|
37
|
+
| `dreamcontext core releases {add,update,active,list,show}` | feature PRDs (sleep-product owns) |
|
|
39
38
|
| `dreamcontext trigger add` (context-dependent reminders) | |
|
|
40
39
|
|
|
41
40
|
## Inputs
|
|
@@ -89,6 +88,7 @@ dreamcontext core changelog add \
|
|
|
89
88
|
--summary "<≤200 char one-liner: what shipped, scannable in snapshot>" \
|
|
90
89
|
--description "<one paragraph: what changed and why; mention key file/symbol where helpful>" \
|
|
91
90
|
--references "commit:<sha>,file:<path>,knowledge:<slug>,feature:<slug>,task:<slug>,url:<href>" \
|
|
91
|
+
[--authors "<person-a,person-b>"] \
|
|
92
92
|
[--supersedes "<date>|<scope>"] \
|
|
93
93
|
$([ "$BREAKING" = "true" ] && echo "--breaking")
|
|
94
94
|
```
|
|
@@ -101,6 +101,8 @@ dreamcontext core changelog add \
|
|
|
101
101
|
|
|
102
102
|
**Supersedes field**: optional, only when a later entry reverses or replaces an earlier one (e.g., a "default-on" flip of a previously "opt-in" flag, or a v0.4 file path being deprecated). Use coarse keys like `"2026-05-23|memory"` (date + scope) — disambiguators only matter when multiple entries share the same date+scope, in which case fall back to the position-from-top index. Most entries do NOT supersede anything; leave the field absent.
|
|
103
103
|
|
|
104
|
+
**Authors field (multi-person projects only)**: optional, attributes the change to the person(s) who drove it. Set it ONLY when the project is multi-person (`.config.json` `people` roster has >1 entry — see Pass B.5). Pass comma-separated kebab-case slugs matching the roster (`--authors "mehmet,ada"`). Determine attribution from the same signals Pass B.5 uses (git `%an` on the commits the entry clusters, self-identification in the session transcript). When a single change was driven by distinct people across clusters, attribute each `dreamcontext core changelog add` invocation to its own author(s). Single-person projects: OMIT `--authors` entirely — output stays byte-identical to today. Authors are excluded from the changelog dedup fingerprint, so adding them never re-opens an already-released entry.
|
|
105
|
+
|
|
104
106
|
#### A3. Releases — surface readiness, never auto-release
|
|
105
107
|
|
|
106
108
|
```bash
|
|
@@ -142,21 +144,20 @@ Be conservative. The default is **no change**. Only update when a pattern is rec
|
|
|
142
144
|
|
|
143
145
|
#### B0b. Single-observation gate (code-reality files)
|
|
144
146
|
|
|
145
|
-
Applies to: `3.style_guide_and_branding.md`, `4.tech_stack.md`,
|
|
147
|
+
Applies to: `3.style_guide_and_branding.md`, `4.tech_stack.md`, and `6.system_flow.md`. (Schema/data-model changes are the same kind of single-observation signal, but they now live in `knowledge/data-structures/` — **sleep-product** owns that write; flag it for them rather than writing it yourself.)
|
|
146
148
|
|
|
147
|
-
These files describe code reality, not user preferences. A single session adding/removing a dependency,
|
|
149
|
+
These files describe code reality, not user preferences. A single session adding/removing a dependency, route, or workflow step MUST be reflected in the same cycle — no pattern repetition required. If the diff or transcript shows the change happened, write it.
|
|
148
150
|
|
|
149
151
|
Examples that trigger an immediate write:
|
|
150
152
|
- A new dependency appears in `package.json` / lockfile → `4.tech_stack.md`.
|
|
151
|
-
- A schema change, new table, or new model →
|
|
153
|
+
- A schema change, new table, or new model → flag for **sleep-product** to write `knowledge/data-structures/<product>.md`.
|
|
152
154
|
- A new route, hook, or system-flow step → `6.system_flow.md`.
|
|
153
155
|
- A new color token, font, or design primitive → `3.style_guide_and_branding.md`.
|
|
154
156
|
|
|
155
|
-
**Multi-product routing.** If the active task frontmatter has `product: X`, route any tech_stack
|
|
157
|
+
**Multi-product routing.** If the active task frontmatter has `product: X`, route any tech_stack observation to the matching product's file:
|
|
156
158
|
- Tech stack scoped to product X → still goes in `4.tech_stack.md` but tagged with the product label inline (single-file convention); if a project-specific convention emerges (per-product tech stacks), revisit.
|
|
157
|
-
- Data structures → `core/data-structures/<X>.md`. Create the file if missing.
|
|
158
159
|
|
|
159
|
-
|
|
160
|
+
Data-structure observations are routed by **sleep-product** to `knowledge/data-structures/<X>.md` (or `default.md`) — flag them for sleep-product, don't write them here.
|
|
160
161
|
|
|
161
162
|
#### B1. Signal → file routing
|
|
162
163
|
|
|
@@ -167,7 +168,7 @@ Otherwise (no `product:` field, single-product project), data structures changes
|
|
|
167
168
|
| New project constraint or warning | `0.soul.md` | Rules / Warnings | two-observation |
|
|
168
169
|
| Technical decision worth preserving | `2.memory.md` | Technical Decisions | two-observation |
|
|
169
170
|
| Stack/dependency change | `4.tech_stack.md` | | single-observation |
|
|
170
|
-
| Schema / data-model change | `
|
|
171
|
+
| Schema / data-model change | flag for **sleep-product** → `knowledge/data-structures/<product>.md` (or `default.md`) | | single-observation |
|
|
171
172
|
| System flow / hook count change | `6.system_flow.md` | | single-observation |
|
|
172
173
|
| Style/branding token change | `3.style_guide_and_branding.md` | | single-observation |
|
|
173
174
|
|
|
@@ -181,22 +182,38 @@ dreamcontext trigger add "<when>" "<remind>" # context-dependent reminders
|
|
|
181
182
|
|
|
182
183
|
Cross-domain catches from your own changelog pass land here naturally — if you wrote a `feat` entry whose description revealed a preference enforced twice, write it into `1.user.md` in the same cycle (no flagging needed; you own both files).
|
|
183
184
|
|
|
184
|
-
|
|
185
|
+
### Pass B.5 — People detection (multi-person awareness)
|
|
186
|
+
|
|
187
|
+
dreamcontext defaults to single-person. When you have **corroborated evidence** that more than one human works in this project, record the roster so changelogs/tasks/memory can attribute work per person. This is **AI-driven detection** — there is no manual toggle and no persisted `multiPerson` flag (multi-person status is DERIVED from `people.length > 1`).
|
|
188
|
+
|
|
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):
|
|
185
190
|
|
|
186
|
-
|
|
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 (ignore bots/CI like `github-actions`, `dependabot`).
|
|
193
|
+
- **Distinct voice / handoff** — the transcript shows a clear authorship handoff or a different working style/voice than the established user.
|
|
187
194
|
|
|
188
195
|
```bash
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
cp "$LEGACY" "$NEW_DEFAULT"
|
|
194
|
-
# do NOT delete the legacy file here — leave it for WS-1 manifest cleanup (if system-installed)
|
|
195
|
-
# or the user to remove manually. Note the migration in your report.
|
|
196
|
-
fi
|
|
196
|
+
# Signal 2: distinct human git authors since the sleep epoch
|
|
197
|
+
git log --since="$CUTOFF" --format='%an' | sort -u
|
|
198
|
+
# Read the existing roster FIRST — you append, you never overwrite.
|
|
199
|
+
jq -r '.people // [] | join(", ")' _dream_context/state/.config.json 2>/dev/null
|
|
197
200
|
```
|
|
198
201
|
|
|
199
|
-
|
|
202
|
+
When the gate is met:
|
|
203
|
+
|
|
204
|
+
1. **Additive union to the roster — never overwrite.** Read the current `people` array first, then write the union (existing ∪ newly observed) back. Use kebab-case display-name slugs (`mehmet`, `ada`). A previously recorded person is NEVER dropped because they were quiet this cycle.
|
|
205
|
+
|
|
206
|
+
```bash
|
|
207
|
+
dreamcontext config # confirm current roster, then edit state/.config.json people[] = union
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
(There is no CLI writer for `people` yet — edit `_dream_context/state/.config.json` directly with Edit, preserving every existing key. Do NOT add a `multiPerson` key; it is derived.)
|
|
211
|
+
|
|
212
|
+
2. **Refresh `## People` in `1.user.md`** to enumerate the full roster. Use the `ensurePeopleSection(userMd, people)` helper semantics (idempotent insert/replace of a `## People` block; one bullet per person). This is a no-op for single-person projects.
|
|
213
|
+
|
|
214
|
+
3. **Attribute this cycle's changelog entries** — re-run Pass A's `dreamcontext core changelog add` with `--authors "<slugs>"` for each entry, attributing it to the person(s) who drove that cluster (Pass A and this pass share the git-author analysis).
|
|
215
|
+
|
|
216
|
+
**Single-person projects (gate NOT met): this entire pass is a NO-OP.** Do not create a roster, do not add a `## People` section, do not pass `--authors`. A solo project's `.config.json`, `1.user.md`, and changelog output must stay byte-identical to today. The cost of a false positive (spuriously attributing a solo user's work to a phantom teammate) is high — stay conservative.
|
|
200
217
|
|
|
201
218
|
### Pass C — Anti-bloat sweep + knowledge staleness flags
|
|
202
219
|
|
|
@@ -245,6 +262,10 @@ You do **not** edit knowledge files. Produce flags for `sleep-product` to act on
|
|
|
245
262
|
- 4.tech_stack.md: untouched
|
|
246
263
|
- Triggers added: 0
|
|
247
264
|
|
|
265
|
+
### People (multi-person detection)
|
|
266
|
+
- Roster: single-person (no multi-person signals this cycle) — no changes
|
|
267
|
+
| OR: detected 2 humans (signals: 2 distinct git authors + self-id in transcript) → roster updated mehmet, ada (additive union; ada appended, mehmet preserved); `## People` refreshed in 1.user.md; 3 changelog entries attributed via --authors
|
|
268
|
+
|
|
248
269
|
### Anti-bloat & staleness
|
|
249
270
|
- 2.memory.md at 287 lines — under ceiling, no extraction needed
|
|
250
271
|
- Knowledge staleness flags (for sleep-product):
|
|
@@ -259,7 +280,7 @@ You do **not** edit knowledge files. Produce flags for `sleep-product` to act on
|
|
|
259
280
|
1. **Be exhaustive on the diary.** Every meaningful change gets a changelog entry. Skipping is the failure state.
|
|
260
281
|
2. **Conservative on identity (preferences & decisions).** No-op is the right answer most cycles for `1.user.md` and `2.memory.md`.
|
|
261
282
|
3. **Two-observation gate for `1.user.md` / `2.memory.md`.** One observation is data; two is a pattern. Don't write a preference or decision from a single mention.
|
|
262
|
-
3a. **Single-observation gate for code-reality files** (`3.*`, `4.*`, `
|
|
283
|
+
3a. **Single-observation gate for code-reality files** (`3.*`, `4.*`, `6.*`). A diff that adds a dependency, route, or design primitive MUST be reflected in the same cycle. These files mirror code, not opinion. (Schema/data-model changes are the same kind of signal but live in `knowledge/data-structures/` — flag them for **sleep-product**.)
|
|
263
284
|
4. **Cluster commits, don't enumerate.** Logical groupings beat 1-commit-per-entry.
|
|
264
285
|
5. **Cover uncommitted work.** Don't wait for the user to commit.
|
|
265
286
|
6. **Never auto-release.** Surface readiness; the user decides.
|
|
@@ -98,6 +98,22 @@ dreamcontext tasks create "<descriptive-slug>" --status in_progress --priority m
|
|
|
98
98
|
|
|
99
99
|
Untracked, genuinely-separate work is invisible to future sessions — always link it. But a smaller slice of existing work belongs *inside* that task, never in a duplicate.
|
|
100
100
|
|
|
101
|
+
### 2.5. Person attribution (multi-person projects only)
|
|
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).
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
# Read the current roster
|
|
107
|
+
jq -r '.people // [] | join(", ")' _dream_context/state/.config.json 2>/dev/null
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
- **New task**: pass `--person <name>` to `dreamcontext tasks create` (the CLI injects a `person:<slug>` tag automatically).
|
|
111
|
+
- **Existing task**: add the tag directly via Edit on the task frontmatter `tags:` array, or via `dreamcontext tasks insert`.
|
|
112
|
+
|
|
113
|
+
When the person is already tagged on the task, no action is needed — the tag is additive. Do not remove a previously-set `person:` tag for a person who was quiet this cycle; they remain attributed for prior work.
|
|
114
|
+
|
|
115
|
+
**Single-person projects (`.config.json` `people` has 0 or 1 entry): this step is a NO-OP.** Never inject a `person:` tag on a solo project. The output must stay byte-identical to today.
|
|
116
|
+
|
|
101
117
|
### 3. Log progress AND reconcile the body — both required
|
|
102
118
|
|
|
103
119
|
**(a) Append a changelog entry** — what happened this session:
|
|
@@ -154,6 +170,7 @@ If every task linked to the active version is `completed` (or only `in_review` r
|
|
|
154
170
|
- Folded in (no new task): <existing-slug> — broadened scope + added 2 user stories / 1 criterion for <smaller-piece> instead of forking a duplicate
|
|
155
171
|
- Created: <slug> (status: in_progress, attached to vX.Y.Z) — genuinely separate concern
|
|
156
172
|
- Body reconciled: <slug> (dropped phase 1 from User Stories; replaced Technical Details auth section)
|
|
173
|
+
- Person attribution: <slug> tagged person:ada (multi-person project, ada drove this cycle's work) | OR: single-person project — no person tags injected
|
|
157
174
|
- Version readiness: vX.Y.Z — 4/5 tasks ready for review
|
|
158
175
|
- Cross-domain mentions: <slug> includes a memory-worthy decision about JWT — flagging for sleep-state
|
|
159
176
|
- Skipped: <session_id> had no actionable task signal
|
|
@@ -167,3 +184,4 @@ If every task linked to the active version is `completed` (or only `in_review` r
|
|
|
167
184
|
4. **Always attach to a planning version.** No orphan work.
|
|
168
185
|
5. **Stay in your lane.** If you spot non-task work worth preserving, flag it — don't write it.
|
|
169
186
|
6. **CLI first** for status/log/insert; **Edit** for surgical body reconciliation (including broadening `description:` / `## Why` when scope grows).
|
|
187
|
+
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.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{bs as jc,bt as I0,aM as pS,bu as xt,bv as Ip,bw as mS,bx as gS,by as _S,bz as xS,bA as yS,bp as vS,bq as bS,bB as B0,aC as SS,bC as TS,bD as MS,bE as ES,bF as xg,bG as yg,bH as AS,bI as k,bJ as $s,bK as wS,bL as RS,bM as CS,bN as NS}from"./index-
|
|
1
|
+
import{bs as jc,bt as I0,aM as pS,bu as xt,bv as Ip,bw as mS,bx as gS,by as _S,bz as xS,bA as yS,bp as vS,bq as bS,bB as B0,aC as SS,bC as TS,bD as MS,bE as ES,bF as xg,bG as yg,bH as AS,bI as k,bJ as $s,bK as wS,bL as RS,bM as CS,bN as NS}from"./index-Bo5CUa_M.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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{aJ as A,aK as S,a_ as P,aI as W,bX as ln,bY as gn,bZ as dn,b_ as z,b$ as hn,bS as pn,c0 as G,b1 as N,b6 as m,b9 as b,c1 as An,b0 as K,b4 as _n,c2 as wn,bV as on,aL as V,bT as On,c3 as R}from"./index-
|
|
1
|
+
import{aJ as A,aK as S,a_ as P,aI as W,bX as ln,bY as gn,bZ as dn,b_ as z,b$ as hn,bS as pn,c0 as G,b1 as N,b6 as m,b9 as b,c1 as An,b0 as K,b4 as _n,c2 as wn,bV as on,aL as V,bT as On,c3 as R}from"./index-Bo5CUa_M.js";function vn(n,r){for(var e=-1,i=n==null?0:n.length,f=Array(i);++e<i;)f[e]=r(n[e],e,n);return f}var U=P?P.prototype:void 0,B=U?U.toString:void 0;function k(n){if(typeof n=="string")return n;if(A(n))return vn(n,k)+"";if(S(n))return B?B.call(n):"";var r=n+"";return r=="0"&&1/n==-1/0?"-0":r}function Pn(){}function En(n,r){for(var e=-1,i=n==null?0:n.length;++e<i&&r(n[e],e,n)!==!1;);return n}function cn(n,r,e,i){for(var f=n.length,t=e+-1;++t<f;)if(r(n[t],t,n))return t;return-1}function yn(n){return n!==n}function Tn(n,r,e){for(var i=e-1,f=n.length;++i<f;)if(n[i]===r)return i;return-1}function bn(n,r,e){return r===r?Tn(n,r,e):cn(n,yn,e)}function In(n,r){var e=n==null?0:n.length;return!!e&&bn(n,r,0)>-1}function x(n){return W(n)?ln(n):gn(n)}var Rn=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Ln=/^\w*$/;function M(n,r){if(A(n))return!1;var e=typeof n;return e=="number"||e=="symbol"||e=="boolean"||n==null||S(n)?!0:Ln.test(n)||!Rn.test(n)||r!=null&&n in Object(r)}var Sn=500;function xn(n){var r=dn(n,function(i){return e.size===Sn&&e.clear(),i}),e=r.cache;return r}var Mn=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,$n=/\\(\\)?/g,Cn=xn(function(n){var r=[];return n.charCodeAt(0)===46&&r.push(""),n.replace(Mn,function(e,i,f,t){r.push(f?t.replace($n,"$1"):i||e)}),r});function Dn(n){return n==null?"":k(n)}function j(n,r){return A(n)?n:M(n,r)?[n]:Cn(Dn(n))}function I(n){if(typeof n=="string"||S(n))return n;var r=n+"";return r=="0"&&1/n==-1/0?"-0":r}function nn(n,r){r=j(r,n);for(var e=0,i=r.length;n!=null&&e<i;)n=n[I(r[e++])];return e&&e==i?n:void 0}function Fn(n,r,e){var i=n==null?void 0:nn(n,r);return i===void 0?e:i}function rn(n,r){for(var e=-1,i=r.length,f=n.length;++e<i;)n[f+e]=r[e];return n}var H=P?P.isConcatSpreadable:void 0;function Gn(n){return A(n)||z(n)||!!(H&&n&&n[H])}function Ur(n,r,e,i,f){var t=-1,u=n.length;for(e||(e=Gn),f||(f=[]);++t<u;){var s=n[t];e(s)?rn(f,s):i||(f[f.length]=s)}return f}function Nn(n,r,e,i){var f=-1,t=n==null?0:n.length;for(i&&t&&(e=n[++f]);++f<t;)e=r(e,n[f],f,n);return e}function en(n,r){for(var e=-1,i=n==null?0:n.length,f=0,t=[];++e<i;){var u=n[e];r(u,e,n)&&(t[f++]=u)}return t}function mn(){return[]}var Kn=Object.prototype,Un=Kn.propertyIsEnumerable,Z=Object.getOwnPropertySymbols,Bn=Z?function(n){return n==null?[]:(n=Object(n),en(Z(n),function(r){return Un.call(n,r)}))}:mn;function Hn(n,r,e){var i=r(n);return A(n)?i:rn(i,e(n))}function q(n){return Hn(n,x,Bn)}var Zn="__lodash_hash_undefined__";function qn(n){return this.__data__.set(n,Zn),this}function Yn(n){return this.__data__.has(n)}function E(n){var r=-1,e=n==null?0:n.length;for(this.__data__=new hn;++r<e;)this.add(n[r])}E.prototype.add=E.prototype.push=qn;E.prototype.has=Yn;function Xn(n,r){for(var e=-1,i=n==null?0:n.length;++e<i;)if(r(n[e],e,n))return!0;return!1}function tn(n,r){return n.has(r)}var Jn=1,Qn=2;function fn(n,r,e,i,f,t){var u=e&Jn,s=n.length,a=r.length;if(s!=a&&!(u&&a>s))return!1;var h=t.get(n),g=t.get(r);if(h&&g)return h==r&&g==n;var l=-1,d=!0,w=e&Qn?new E:void 0;for(t.set(n,r),t.set(r,n);++l<s;){var p=n[l],_=r[l];if(i)var o=u?i(_,p,l,r,n,t):i(p,_,l,n,r,t);if(o!==void 0){if(o)continue;d=!1;break}if(w){if(!Xn(r,function(O,v){if(!tn(w,v)&&(p===O||f(p,O,e,i,t)))return w.push(v)})){d=!1;break}}else if(!(p===_||f(p,_,e,i,t))){d=!1;break}}return t.delete(n),t.delete(r),d}function Wn(n){var r=-1,e=Array(n.size);return n.forEach(function(i,f){e[++r]=[f,i]}),e}function $(n){var r=-1,e=Array(n.size);return n.forEach(function(i){e[++r]=i}),e}var zn=1,Vn=2,kn="[object Boolean]",jn="[object Date]",nr="[object Error]",rr="[object Map]",er="[object Number]",ir="[object RegExp]",tr="[object Set]",fr="[object String]",ur="[object Symbol]",sr="[object ArrayBuffer]",ar="[object DataView]",Y=P?P.prototype:void 0,L=Y?Y.valueOf:void 0;function lr(n,r,e,i,f,t,u){switch(e){case ar:if(n.byteLength!=r.byteLength||n.byteOffset!=r.byteOffset)return!1;n=n.buffer,r=r.buffer;case sr:return!(n.byteLength!=r.byteLength||!t(new G(n),new G(r)));case kn:case jn:case er:return pn(+n,+r);case nr:return n.name==r.name&&n.message==r.message;case ir:case fr:return n==r+"";case rr:var s=Wn;case tr:var a=i&zn;if(s||(s=$),n.size!=r.size&&!a)return!1;var h=u.get(n);if(h)return h==r;i|=Vn,u.set(n,r);var g=fn(s(n),s(r),i,f,t,u);return u.delete(n),g;case ur:if(L)return L.call(n)==L.call(r)}return!1}var gr=1,dr=Object.prototype,hr=dr.hasOwnProperty;function pr(n,r,e,i,f,t){var u=e&gr,s=q(n),a=s.length,h=q(r),g=h.length;if(a!=g&&!u)return!1;for(var l=a;l--;){var d=s[l];if(!(u?d in r:hr.call(r,d)))return!1}var w=t.get(n),p=t.get(r);if(w&&p)return w==r&&p==n;var _=!0;t.set(n,r),t.set(r,n);for(var o=u;++l<a;){d=s[l];var O=n[d],v=r[d];if(i)var F=u?i(v,O,d,r,n,t):i(O,v,d,n,r,t);if(!(F===void 0?O===v||f(O,v,e,i,t):F)){_=!1;break}o||(o=d=="constructor")}if(_&&!o){var c=n.constructor,y=r.constructor;c!=y&&"constructor"in n&&"constructor"in r&&!(typeof c=="function"&&c instanceof c&&typeof y=="function"&&y instanceof y)&&(_=!1)}return t.delete(n),t.delete(r),_}var Ar=1,X="[object Arguments]",J="[object Array]",T="[object Object]",_r=Object.prototype,Q=_r.hasOwnProperty;function wr(n,r,e,i,f,t){var u=A(n),s=A(r),a=u?J:N(n),h=s?J:N(r);a=a==X?T:a,h=h==X?T:h;var g=a==T,l=h==T,d=a==h;if(d&&m(n)){if(!m(r))return!1;u=!0,g=!1}if(d&&!g)return t||(t=new b),u||An(n)?fn(n,r,e,i,f,t):lr(n,r,a,e,i,f,t);if(!(e&Ar)){var w=g&&Q.call(n,"__wrapped__"),p=l&&Q.call(r,"__wrapped__");if(w||p){var _=w?n.value():n,o=p?r.value():r;return t||(t=new b),f(_,o,e,i,t)}}return d?(t||(t=new b),pr(n,r,e,i,f,t)):!1}function C(n,r,e,i,f){return n===r?!0:n==null||r==null||!K(n)&&!K(r)?n!==n&&r!==r:wr(n,r,e,i,C,f)}var or=1,Or=2;function vr(n,r,e,i){var f=e.length,t=f;if(n==null)return!t;for(n=Object(n);f--;){var u=e[f];if(u[2]?u[1]!==n[u[0]]:!(u[0]in n))return!1}for(;++f<t;){u=e[f];var s=u[0],a=n[s],h=u[1];if(u[2]){if(a===void 0&&!(s in n))return!1}else{var g=new b,l;if(!(l===void 0?C(h,a,or|Or,i,g):l))return!1}}return!0}function un(n){return n===n&&!_n(n)}function Pr(n){for(var r=x(n),e=r.length;e--;){var i=r[e],f=n[i];r[e]=[i,f,un(f)]}return r}function sn(n,r){return function(e){return e==null?!1:e[n]===r&&(r!==void 0||n in Object(e))}}function Er(n){var r=Pr(n);return r.length==1&&r[0][2]?sn(r[0][0],r[0][1]):function(e){return e===n||vr(e,n,r)}}function cr(n,r){return n!=null&&r in Object(n)}function yr(n,r,e){r=j(r,n);for(var i=-1,f=r.length,t=!1;++i<f;){var u=I(r[i]);if(!(t=n!=null&&e(n,u)))break;n=n[u]}return t||++i!=f?t:(f=n==null?0:n.length,!!f&&wn(f)&&on(u,f)&&(A(n)||z(n)))}function Tr(n,r){return n!=null&&yr(n,r,cr)}var br=1,Ir=2;function Rr(n,r){return M(n)&&un(r)?sn(I(n),r):function(e){var i=Fn(e,n);return i===void 0&&i===r?Tr(e,n):C(r,i,br|Ir)}}function Lr(n){return function(r){return r==null?void 0:r[n]}}function Sr(n){return function(r){return nn(r,n)}}function xr(n){return M(n)?Lr(I(n)):Sr(n)}function an(n){return typeof n=="function"?n:n==null?V:typeof n=="object"?A(n)?Rr(n[0],n[1]):Er(n):xr(n)}function Mr(n,r){return n&&On(n,r,x)}function $r(n,r){return function(e,i){if(e==null)return e;if(!W(e))return n(e,i);for(var f=e.length,t=-1,u=Object(e);++t<f&&i(u[t],t,u)!==!1;);return e}}var D=$r(Mr);function Cr(n){return typeof n=="function"?n:V}function Br(n,r){var e=A(n)?En:D;return e(n,Cr(r))}function Dr(n,r){var e=[];return D(n,function(i,f,t){r(i,f,t)&&e.push(i)}),e}function Hr(n,r){var e=A(n)?en:Dr;return e(n,an(r))}function Fr(n,r,e,i,f){return f(n,function(t,u,s){e=i?(i=!1,t):r(e,t,u,s)}),e}function Zr(n,r,e){var i=A(n)?Nn:Fr,f=arguments.length<3;return i(n,an(r),e,f,D)}var Gr=1/0,Nr=R&&1/$(new R([,-0]))[1]==Gr?function(n){return new R(n)}:Pn,mr=200;function qr(n,r,e){var i=-1,f=In,t=n.length,u=!0,s=[],a=s;if(t>=mr){var h=r?null:Nr(n);if(h)return $(h);u=!1,f=tn,a=new E}else a=r?[]:s;n:for(;++i<t;){var g=n[i],l=r?r(g):g;if(g=g!==0?g:0,u&&l===l){for(var d=a.length;d--;)if(a[d]===l)continue n;r&&a.push(l),s.push(g)}else f(a,l,e)||(a!==s&&a.push(l),s.push(g))}return s}export{D as a,Ur as b,an as c,vn as d,rn as e,Hn as f,Bn as g,En as h,q as i,qr as j,x as k,Hr as l,Br as m,cn as n,Cr as o,Mr as p,yr as q,Zr as r,mn as s,j as t,I as u,nn as v,Tr as w,Dn as x};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a0 as ln,a1 as an,a2 as y,a3 as tn,a4 as H,a5 as q,a6 as _,a7 as un,a8 as rn,a9 as L,aa as o,ab as B,ac as sn,ad as on,ae as fn}from"./index-
|
|
1
|
+
import{a0 as ln,a1 as an,a2 as y,a3 as tn,a4 as H,a5 as q,a6 as _,a7 as un,a8 as rn,a9 as L,aa as o,ab as B,ac as sn,ad as on,ae as fn}from"./index-Bo5CUa_M.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function dn(l){return l.endAngle}function mn(l){return l&&l.padAngle}function pn(l,h,I,D,v,A,C,a){var O=I-l,i=D-h,n=C-v,d=a-A,u=d*O-n*i;if(!(u*u<y))return u=(n*(h-A)-d*(l-v))/u,[l+u*O,h+u*i]}function W(l,h,I,D,v,A,C){var a=l-I,O=h-D,i=(C?A:-A)/L(a*a+O*O),n=i*O,d=-i*a,u=l+n,s=h+d,f=I+n,c=D+d,F=(u+f)/2,t=(s+c)/2,m=f-u,g=c-s,R=m*m+g*g,T=v-A,P=u*c-f*s,S=(g<0?-1:1)*L(fn(0,T*T*R-P*P)),j=(P*g-m*S)/R,z=(-P*m-g*S)/R,w=(P*g+m*S)/R,p=(-P*m+g*S)/R,x=j-F,e=z-t,r=w-F,G=p-t;return x*x+e*e>r*r+G*G&&(j=w,z=p),{cx:j,cy:z,x01:-n,y01:-d,x11:j*(v/T-1),y11:z*(v/T-1)}}function hn(){var l=cn,h=yn,I=B(0),D=null,v=gn,A=dn,C=mn,a=null,O=ln(i);function i(){var n,d,u=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-an,c=A.apply(this,arguments)-an,F=un(c-f),t=c>f;if(a||(a=n=O()),s<u&&(d=s,s=u,u=d),!(s>y))a.moveTo(0,0);else if(F>tn-y)a.moveTo(s*H(f),s*q(f)),a.arc(0,0,s,f,c,!t),u>y&&(a.moveTo(u*H(c),u*q(c)),a.arc(0,0,u,c,f,t));else{var m=f,g=c,R=f,T=c,P=F,S=F,j=C.apply(this,arguments)/2,z=j>y&&(D?+D.apply(this,arguments):L(u*u+s*s)),w=_(un(s-u)/2,+I.apply(this,arguments)),p=w,x=w,e,r;if(z>y){var G=sn(z/u*q(j)),M=sn(z/s*q(j));(P-=G*2)>y?(G*=t?1:-1,R+=G,T-=G):(P=0,R=T=(f+c)/2),(S-=M*2)>y?(M*=t?1:-1,m+=M,g-=M):(S=0,m=g=(f+c)/2)}var J=s*H(m),K=s*q(m),N=u*H(T),Q=u*q(T);if(w>y){var U=s*H(g),V=s*q(g),X=u*H(R),Y=u*q(R),E;if(F<rn)if(E=pn(J,K,X,Y,U,V,N,Q)){var Z=J-E[0],$=K-E[1],b=U-E[0],k=V-E[1],nn=1/q(on((Z*b+$*k)/(L(Z*Z+$*$)*L(b*b+k*k)))/2),en=L(E[0]*E[0]+E[1]*E[1]);p=_(w,(u-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else p=x=0}S>y?x>y?(e=W(X,Y,J,K,s,x,t),r=W(U,V,N,Q,s,x,t),a.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,s,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),!t),a.arc(r.cx,r.cy,x,o(r.y11,r.x11),o(r.y01,r.x01),!t))):(a.moveTo(J,K),a.arc(0,0,s,m,g,!t)):a.moveTo(J,K),!(u>y)||!(P>y)?a.lineTo(N,Q):p>y?(e=W(N,Q,U,V,u,-p,t),r=W(J,K,X,Y,u,-p,t),a.lineTo(e.cx+e.x01,e.cy+e.y01),p<w?a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,u,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),t),a.arc(r.cx,r.cy,p,o(r.y11,r.x11),o(r.y01,r.x01),!t))):a.arc(0,0,u,T,R,t)}if(a.closePath(),n)return a=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,d=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-rn/2;return[H(d)*n,q(d)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:B(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:B(+n),i):h},i.cornerRadius=function(n){return arguments.length?(I=typeof n=="function"?n:B(+n),i):I},i.padRadius=function(n){return arguments.length?(D=n==null?null:typeof n=="function"?n:B(+n),i):D},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:B(+n),i):v},i.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:B(+n),i):A},i.padAngle=function(n){return arguments.length?(C=typeof n=="function"?n:B(+n),i):C},i.context=function(n){return arguments.length?(a=n??null,i):a},i}export{hn as d};
|