kushi-agents 4.8.2 → 4.9.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 (38) hide show
  1. package/package.json +2 -2
  2. package/plugin/instructions/comprehensive-structured-capture.instructions.md +250 -0
  3. package/plugin/instructions/evidence-layout-canonical.instructions.md +20 -12
  4. package/plugin/instructions/evidence-thoroughness.instructions.md +119 -225
  5. package/plugin/instructions/identity-resolution.instructions.md +11 -8
  6. package/plugin/instructions/meetings-verbatim-required.instructions.md +6 -4
  7. package/plugin/instructions/scope-boundaries.instructions.md +1 -1
  8. package/plugin/instructions/snapshot-vs-stream.instructions.md +25 -1
  9. package/plugin/instructions/verbatim-by-default.instructions.md +21 -1
  10. package/plugin/instructions/weekly-csc.instructions.md +335 -0
  11. package/plugin/instructions/workiq-only.instructions.md +140 -1
  12. package/plugin/skills/ask-project/SKILL.md +26 -6
  13. package/plugin/skills/bootstrap-project/SKILL.md +17 -5
  14. package/plugin/skills/build-state/SKILL.md +30 -7
  15. package/plugin/skills/consolidate-evidence/SKILL.md +27 -4
  16. package/plugin/skills/pull-ado/SKILL.md +85 -9
  17. package/plugin/skills/pull-crm/SKILL.md +87 -10
  18. package/plugin/skills/pull-email/SKILL.md +75 -11
  19. package/plugin/skills/pull-meetings/SKILL.md +83 -8
  20. package/plugin/skills/pull-onenote/SKILL.md +86 -9
  21. package/plugin/skills/pull-sharepoint/SKILL.md +73 -10
  22. package/plugin/skills/pull-teams/SKILL.md +78 -9
  23. package/plugin/skills/refresh-project/SKILL.md +16 -5
  24. package/plugin/skills/self-check/SKILL.md +11 -0
  25. package/plugin/skills/self-check/run.ps1 +208 -0
  26. package/plugin/skills/setup/SKILL.md +16 -15
  27. package/plugin/templates/init/integrations.template.yml +38 -24
  28. package/plugin/templates/init/m365-auth.template.json +3 -3
  29. package/plugin/templates/init/project-evidence.template.yml +5 -5
  30. package/plugin/templates/snapshot/DEPRECATED-v4.9.0.md +37 -0
  31. package/plugin/templates/weekly/_index_entities.template.yml +26 -0
  32. package/plugin/templates/weekly/ado-csc.template.md +113 -0
  33. package/plugin/templates/weekly/crm-csc.template.md +103 -0
  34. package/plugin/templates/weekly/email-csc.template.md +114 -0
  35. package/plugin/templates/weekly/meetings-csc.template.md +112 -0
  36. package/plugin/templates/weekly/onenote-csc.template.md +95 -0
  37. package/plugin/templates/weekly/sharepoint-csc.template.md +98 -0
  38. package/plugin/templates/weekly/teams-csc.template.md +100 -0
@@ -1,11 +1,27 @@
1
1
  ---
2
2
  name: "build-state"
3
- version: "2.0.0"
4
- description: "Render <project>/State/*.md from existing Evidence (snapshot/ + stream/). No source pulls — pure re-render. Latest fact wins on conflicts. Every assertion cited. Always updates Open Questions."
3
+ version: "3.0.0"
4
+ description: "Render <project>/State/*.md from existing Evidence (v4.9.0+). 3-step reader fallback: _index/entities.yml → weekly/*.md → legacy snapshot/ + stream/. No source pulls — pure re-render. Latest fact wins on conflicts. Every assertion cited. Always updates Open Questions."
5
5
  ---
6
6
 
7
7
  # Skill: build-state
8
8
 
9
+ ## v4.9.0 — Reader fallback chain (HARD RULE; per `weekly-csc.instructions.md`)
10
+
11
+ For every `<alias>/<source>/` accessed:
12
+
13
+ 1. **Primary**: read `Evidence/<alias>/<source>/_index/entities.yml`. For each entity needed, pull `latest_csc_file` + `latest_csc_block_offset`; open the weekly file and read the CSC block by entity anchor.
14
+ 2. **Secondary (no _index/, but weekly/ exists)**: walk `Evidence/<alias>/<source>/weekly/*.md` newest-first; parse `## <name> {#<anchor>}` headings; build an in-memory entity index for this query.
15
+ 3. **Legacy fallback (pre-v4.9.0)**: if `weekly/` is empty BUT `snapshot/` or `stream/` exist, read those. Cite as legacy.
16
+
17
+ Citation form in this skill's output:
18
+ - **New (v4.9.0)**: `[source: <alias>/<source>/weekly/<YYYY-MM-DD>_<source>-csc.md#<entity-anchor> · <iso-ts>]`
19
+ - **Legacy (reading from snapshot/+stream/)**: append ` (legacy pre-v4.9.0 layout)` after the citation.
20
+
21
+ Mark the answer / output footer with `Source-layout: weekly-csc | weekly-csc-plus-legacy | legacy-only` so the user knows whether a refresh would update the layout.
22
+
23
+ Readers MUST NOT delete or modify legacy folders. Migration is out of scope for v4.9.0.
24
+
9
25
  Run this when the user says: "regenerate state for `<X>`", "rebuild State", "@Kushi state `<X>`". This skill makes NO source calls — it only reads Evidence and writes State.
10
26
 
11
27
  ## Inputs
@@ -16,9 +32,10 @@ Run this when the user says: "regenerate state for `<X>`", "rebuild State", "@Ku
16
32
 
17
33
  ### Step 1 — Read all Evidence
18
34
 
19
- For the resolved `<project>`:
20
- - Walk `Evidence/<alias>/<source>/snapshot/**/*.md` (current truth per entity).
21
- - Walk `Evidence/<alias>/<source>/stream/**/*.md` (chronological events).
35
+ For the resolved `<project>`, apply the v4.9.0 fallback chain for each `<alias>/<source>/`:
36
+ - **Primary**: read `Evidence/<alias>/<source>/_index/entities.yml`; load entities via `latest_csc_file` + offset.
37
+ - **Secondary**: if no `_index/`, walk `Evidence/<alias>/<source>/weekly/*.md` newest-first.
38
+ - **Legacy fallback**: if `weekly/` is empty, read `Evidence/<alias>/<source>/snapshot/**/*.md` (current truth per entity) and `Evidence/<alias>/<source>/stream/**/*.md` (chronological events). Cite as `(legacy pre-v4.9.0 layout)`.
22
39
  - Walk `Evidence/_Consolidated/**/*.md` (multi-user merged where present).
23
40
 
24
41
  ### Step 2 — For each State file (00–08), regenerate
@@ -58,12 +75,18 @@ Update `<project>/State/09_open-questions.md`:
58
75
  Top of every State file:
59
76
 
60
77
  ```markdown
61
- > _As of: YYYY-MM-DD HH:mm. Regenerated by @Kushi build-state. Source: Evidence/ snapshots + streams._
78
+ > _As of: YYYY-MM-DD HH:mm. Regenerated by @Kushi build-state. Source: Evidence/ weekly CSC + legacy snapshots + streams._
62
79
  ```
63
80
 
81
+ `Source-layout: weekly-csc | weekly-csc-plus-legacy | legacy-only` (append to banner to reflect which layout was actually read).
82
+
64
83
  ## Triggers
65
84
 
66
85
  - "regenerate state for `<X>`"
67
86
  - "rebuild state"
68
87
  - "@Kushi state `<X>`"
69
- - "re-render State after I fixed `<file>`"
88
+ - "re-render State after I fixed `<file>`"
89
+
90
+ ## Changelog
91
+
92
+ - **v3.0.0 (kushi v4.9.0, 2026-05-26)**: 3-step reader fallback chain (`_index/entities.yml` → `weekly/*.md` → legacy `snapshot/` + `stream/`). New citation form `weekly/<YYYY-MM-DD>_<source>-csc.md#<anchor>`. Legacy citations suffixed `(legacy pre-v4.9.0 layout)`. Output marked with `Source-layout:` footer.
@@ -1,11 +1,27 @@
1
1
  ---
2
2
  name: "consolidate-evidence"
3
- version: "2.0.0"
4
- description: "Merge per-contributor evidence (snapshot + stream) into Evidence/_Consolidated/ for a window. Provenance tags on every merged claim. Used by refresh-project and bootstrap-project when multiple contributors exist."
3
+ version: "3.0.0"
4
+ description: "Merge per-contributor evidence into Evidence/_Consolidated/ for a window (v4.9.0+). 3-step reader fallback per source: _index/entities.yml → weekly/*.md → legacy snapshot/ + stream/. Provenance tags on every merged claim. Used by refresh-project and bootstrap-project when multiple contributors exist."
5
5
  ---
6
6
 
7
7
  # Skill: consolidate-evidence
8
8
 
9
+ ## v4.9.0 — Reader fallback chain (HARD RULE; per `weekly-csc.instructions.md`)
10
+
11
+ For every `<alias>/<source>/` accessed:
12
+
13
+ 1. **Primary**: read `Evidence/<alias>/<source>/_index/entities.yml`. For each entity needed, pull `latest_csc_file` + `latest_csc_block_offset`; open the weekly file and read the CSC block by entity anchor.
14
+ 2. **Secondary (no _index/, but weekly/ exists)**: walk `Evidence/<alias>/<source>/weekly/*.md` newest-first; parse `## <name> {#<anchor>}` headings; build an in-memory entity index for this query.
15
+ 3. **Legacy fallback (pre-v4.9.0)**: if `weekly/` is empty BUT `snapshot/` or `stream/` exist, read those. Cite as legacy.
16
+
17
+ Citation form in this skill's output:
18
+ - **New (v4.9.0)**: `[source: <alias>/<source>/weekly/<YYYY-MM-DD>_<source>-csc.md#<entity-anchor> · <iso-ts>]`
19
+ - **Legacy (reading from snapshot/+stream/)**: append ` (legacy pre-v4.9.0 layout)` after the citation.
20
+
21
+ Mark the answer / output footer with `Source-layout: weekly-csc | weekly-csc-plus-legacy | legacy-only` so the user knows whether a refresh would update the layout.
22
+
23
+ Readers MUST NOT delete or modify legacy folders. Migration is out of scope for v4.9.0.
24
+
9
25
  Run this when multiple contributors have evidence and the user wants a single merged view per source per week. Triggers from `refresh-project` automatically when `Evidence/contributors.yml` lists >1 alias with recent evidence; or directly via `@Kushi consolidate <X> last 7 days`.
10
26
 
11
27
  ## Inputs
@@ -17,11 +33,14 @@ Run this when multiple contributors have evidence and the user wants a single me
17
33
 
18
34
  ### Step 1 — Identify contributors with evidence in the window
19
35
 
20
- Read `Evidence/contributors.yml`. For each alias, check if `Evidence/<alias>/*/stream/<weeks-in-window>.md` exists.
36
+ Read `Evidence/contributors.yml`. For each alias, apply the v4.9.0 fallback chain per source:
37
+ - **Primary**: check `Evidence/<alias>/<source>/_index/entities.yml` for entries with `last_touched` in the window.
38
+ - **Secondary**: if no `_index/`, check if `Evidence/<alias>/<source>/weekly/*.md` files exist covering the window.
39
+ - **Legacy fallback**: if `weekly/` is empty, check `Evidence/<alias>/*/stream/<weeks-in-window>.md`.
21
40
 
22
41
  ### Step 2 — For each (week × source) in the window
23
42
 
24
- Read all per-contributor stream files for that (week, source). Merge into:
43
+ Apply the fallback chain: read per-contributor weekly CSC files (`Evidence/<alias>/<source>/weekly/<YYYY-MM-DD>_<source>-csc.md`) for that (week, source); fall back to legacy stream files (`Evidence/<alias>/<source>/stream/`) if no weekly/ file exists. Merge into:
25
44
  `Evidence/_Consolidated/<source>/<YYYY-MM-DD>_consolidated.md`
26
45
 
27
46
  Merge rules:
@@ -49,3 +68,7 @@ Append a `consolidation_runs:` entry: `{ window, contributors, files_written }`.
49
68
  ## Issue Recovery
50
69
 
51
70
  When this skill exposes a reusable defect (auth pattern, doctrine gap, layout mismatch), apply the [Issue Recovery Rule](../../instructions/issue-recovery.instructions.md): fix the smallest correct repo-owned artifact first, prefer durable fixes over per-run workarounds, then re-run the narrowest failed check. Do NOT use memory as a substitute for correcting the workflow surface.
71
+
72
+ ## Changelog
73
+
74
+ - **v3.0.0 (kushi v4.9.0, 2026-05-26)**: 3-step reader fallback chain (`_index/entities.yml` → `weekly/*.md` → legacy `snapshot/` + `stream/`). New citation form `weekly/<YYYY-MM-DD>_<source>-csc.md#<anchor>`. Legacy citations suffixed `(legacy pre-v4.9.0 layout)`. Output marked with `Source-layout:` footer.
@@ -1,19 +1,75 @@
1
1
  ---
2
2
  name: "pull-ado"
3
- version: "2.3.2"
4
- description: "Pull ADO evidence as an engagement TREE (parent Engagement + every child WI). Per-item discussion comments + revision history (verbatim). Deterministic resolution; no parent-only summaries. Per ado-engagement-tree.instructions.md."
3
+ version: "3.0.0"
4
+ description: "v3.0.0 (kushi v4.9.0): Pull ADO evidence as Comprehensive Structured Capture (CSC) blocks written to weekly/YYYY-MM-DD_ado-csc.md. One block per work item touched that week, upserted in _index/entities.yml. ADO REST + tree expansion UNCHANGED — only output shape changes. WI fields CSC sections (AssignedTo→Participants, Description→Topics, State changes→Decisions, Comments→Q&A+Who Said What, etc.). No snapshot/+stream/ split. Per-contributor _index/. See weekly-csc + comprehensive-structured-capture doctrines."
5
5
  ---
6
6
 
7
7
  # Skill: pull-ado
8
8
 
9
9
 
10
- > **v3.7.6 contracts** — This skill operates under four HARD-rule doctrines:
11
- > - `verbatim-by-default.instructions.md`full bodies/notetext/fields by default; no preview-grade pulls accepted.
10
+ > **v4.9.0 contracts** — This skill operates under these HARD-rule doctrines:
11
+ > - **`comprehensive-structured-capture.instructions.md`**CSC block shape (canonical sections, bullets only, no prose).
12
+ > - **`weekly-csc.instructions.md`** — weekly/ + _index/ writer contract; multi-user safety.
13
+ > - `workiq-only.instructions.md` — when WorkIQ is used, the CSC canonical prompts (§ "CSC canonical prompts (kushi v4.9.0+)") apply. **ADO REST remains the preferred path** for fields + comments + updates + tree expansion.
14
+ > - `ado-engagement-tree.instructions.md` — tree expansion + per-item discussion + revision pulls UNCHANGED.
15
+ > - `evidence-thoroughness.instructions.md` (v2.0.0) — per-source minimum bullet thresholds; `low_signal: true` flag.
16
+ > - `citation-ledger.instructions.md` — citation format.
12
17
  > - `capture-learnings.instructions.md` — every fix/discovery is logged to `plugin/learnings/<source>.md` immediately.
13
- > - `cleanup-on-resolution.instructions.md` — when a value resolves, all stale `no-match` / `not yet` notes referencing the prior unresolved state must be rewritten in the same turn.
18
+ > - `cleanup-on-resolution.instructions.md` — stale `no-match` / `not yet` notes are rewritten on resolution.
14
19
  > - `run-reports.instructions.md` — every refresh writes a per-user report under `Evidence/<alias>/refresh-reports/YYYY-MM-DD-HHMM_refresh.md`.
15
-
16
- > **Canonical evidence layout** (HARD, kushi v3.12.1+): all artifacts produced by this skill MUST be written under `<project>/Evidence/<alias>/<source>/{snapshot,stream,...}/` sibling folders under `<project>/` (e.g. `<project>/<source>-context/`, `<project>/<source>/`, `<project>/_Weekly Summaries/`) are FORBIDDEN. See `evidence-layout-canonical.instructions.md`.
20
+ > - `evidence-layout-canonical.instructions.md` — `weekly/` + `_index/` are canonical in v4.9.0+.
21
+ > - `scope-boundaries.instructions.md`boundaries gate.
22
+ > - ~~`verbatim-by-default.instructions.md`~~ (LEGACY — superseded by CSC).
23
+ > - ~~`snapshot-vs-stream.instructions.md`~~ (LEGACY — superseded by weekly-csc).
24
+
25
+ ## v4.9.0 — Comprehensive Structured Capture (CSC) + weekly/ layout (HARD RULE; supersedes all snapshot/+stream/ guidance below)
26
+
27
+ Per `comprehensive-structured-capture.instructions.md` and `weekly-csc.instructions.md`:
28
+
29
+ - **Output target** (single file per source per ISO week):
30
+ `<engagement-root>/<project>/Evidence/<alias>/ado/weekly/<YYYY-MM-DD>_ado-csc.md`
31
+ where `<YYYY-MM-DD>` is the **Monday** of the ISO week the WI was touched.
32
+ Empty weeks produce no file.
33
+
34
+ - **Block shape (per WI touched that week)**: one CSC block per work item under `## <WI title> {#<entity-anchor>}` with canonical section order: Source basis → Coverage window → Last touched → Participants → Topics Discussed → Q&A → Who Said What → Decisions → Dates & Numbers Shared → Action Items → Next Steps → Open Questions → Risks/Blockers/Dependencies → Customer Asks → Artifacts/Links → Coverage Notes. Bullets only — no prose paragraphs.
35
+
36
+ - **Entity id (canonical for this source)**: `ado://org=<org>/project=<project>/workitemid=<int>`
37
+
38
+ - **ADO REST + tree expansion UNCHANGED**: Step 1 (resolve Engagement WI ID) + Step 2 (expand tree) + Step 3 (per-item fetch: core fields + paginated discussion comments + revision history + attachments) all unchanged. Only the OUTPUT SHAPE changes — the REST contract is identical.
39
+
40
+ - **_index/entities.yml upsert** (per-contributor, per-source): on every write, upsert one row per WI:
41
+ ```yaml
42
+ - id: 'ado://org=<org>/project=<project>/workitemid=<int>'
43
+ display_name: '<WI title>'
44
+ entity_anchor: '<slug>'
45
+ latest_csc_file: 'weekly/<YYYY-MM-DD>_ado-csc.md'
46
+ latest_csc_block_offset: <line>
47
+ last_touched: <ISO> # use System.ChangedDate
48
+ first_seen: <ISO> # use System.CreatedDate
49
+ weeks_touched: [<YYYY-MM-DD>, ...]
50
+ status: captured | body-not-exposed | unavailable | deferred
51
+ low_signal: false | true
52
+ ```
53
+ Path: `<engagement-root>/<project>/Evidence/<alias>/ado/_index/entities.yml`.
54
+
55
+ - **Idempotency**: same WI, same week, two runs → REPLACE the block in place (CSC reflects end-of-week state). Same WI, different weeks → each week's file gets its own block.
56
+
57
+ - **No body-fetch loop**: drop the AI Narrative Summary requirement and the dedicated verbatim comment-block reproduction. Comments are surfaced as Q&A and Who Said What bullets with citation; revisions surface as Decisions / Dates & Numbers. CSC bullets cite the ADO REST request URL.
58
+
59
+ - **Legacy `snapshot/` and `stream/` folders**: NOT written by this skill in v4.9.0. Pre-v4.9.0 folders on disk are left alone; readers fall back to them when `weekly/` is empty.
60
+
61
+ ### Source-specific notes (ado — REST stays)
62
+
63
+ - **ADO REST + tree expansion unchanged** (Steps 1–3 below). Hard prereqs unchanged; auth block unchanged; WIQL resolution unchanged; pagination of comments unchanged.
64
+ - **Output shape**: one CSC block per WI in `weekly/<Monday>_ado-csc.md`. The tree structure (parent + children) is preserved by surfacing each WI as its own entity block + cross-linking parent/child WIs in each block's `Artifacts/Links` section.
65
+ - **Map WI fields → CSC sections**:
66
+ - AssignedTo + commenters → **Participants**
67
+ - Title + description + acceptance criteria → **Topics Discussed**
68
+ - State changes (System.State revisions) → **Decisions**
69
+ - Iteration dates, story points, effort → **Dates & Numbers Shared**
70
+ - Discussion comments → **Q&A** (when Q-and-A pattern detected) + **Who Said What**
71
+ - Tags, related WIs, parent-child links, attachment metadata → **Artifacts/Links**
72
+ - Entity id: `ado://org=<org>/project=<project>/workitemid=<int>`.
17
73
 
18
74
  Pulls **ado** evidence in two shapes per `snapshot-vs-stream.instructions.md`:
19
75
 
@@ -187,6 +243,8 @@ From `$item.relations` where `rel = 'AttachedFile'` — record `name`, `resource
187
243
 
188
244
  ### 3e — Write per-item snapshot file
189
245
 
246
+ > **LEGACY (pre-v4.9.0).** Superseded by v4.9.0 weekly/ + CSC writer above. The ADO REST fetches (3a–3d) still run; only the file write changes. Kept for historical reference; not executed.
247
+
190
248
  `<engagement-root>/<project>/Evidence/<alias>/ado/snapshot/items/<id>.md` (parent gets `engagement-<id>.md` at the snapshot root):
191
249
 
192
250
  - Header: id, type, title, state, areaPath, parent, assignee, last fetched.
@@ -199,17 +257,19 @@ From `$item.relations` where `rel = 'AttachedFile'` — record `name`, `resource
199
257
 
200
258
  ## Step 4 — Stream pass
201
259
 
260
+ > **LEGACY (pre-v4.9.0).** Superseded by v4.9.0 weekly/ + CSC writer above. Kept for historical reference; not executed.
261
+
202
262
  After all snapshots written, build the weekly stream from comments + updates whose `createdDate` / `revisedDate` fall in `<window>`. Bucket by Monday-of-ISO-week into `stream/<YYYY-MM-DD>_ado-stream.md` with AI Narrative Summary first then the verbatim entries grouped by WI.
203
263
 
204
264
  If a week file exists, MERGE (dedupe by `comment.id` and `update.rev`).
205
265
 
206
266
  ## Tools (in order)
207
267
 
208
- 1. **WorkIQ** — discovery only (asking "is there an Engagement WI for HCA?" before doing the WIQL). Never used for discussion-comment fetch — it summarizes.
268
+ 1. **WorkIQ** — discovery only (asking "is there an Engagement WI for HCA?" before doing the WIQL). When used for CSC, use the CSC canonical prompts from `workiq-only.instructions.md` § 'CSC canonical prompts (kushi v4.9.0+)'. The pre-v4.9.0 verbatim prompts are LEGACY (kept only for pull-meetings Half A). Never used for discussion-comment fetch — it summarizes.
209
269
  2. **ADO REST** — REQUIRED for fields + comments + updates + tree expansion (preferred path). Auth block above.
210
270
  3. **Ask user** — paste verbatim source content if REST returns 401 / 404 / persistent 5xx after 2 retries (3s/6s).
211
271
 
212
- Document which path succeeded under `## Source Basis` in each output file.
272
+ Document which path succeeded under `Source basis` (in the CSC block).
213
273
 
214
274
  ## Mutable hints to upsert (during the run, not at the end)
215
275
 
@@ -249,3 +309,19 @@ After successful pass:
249
309
  ## Issue Recovery
250
310
 
251
311
  When this skill exposes a reusable defect (auth pattern, doctrine gap, layout mismatch), apply the [Issue Recovery Rule](../../instructions/issue-recovery.instructions.md): fix the smallest correct repo-owned artifact first, prefer durable fixes over per-run workarounds, then re-run the narrowest failed check. Do NOT use memory as a substitute for correcting the workflow surface.
312
+
313
+ ## Depth bar (per `evidence-thoroughness.instructions.md` v2.0.0)
314
+
315
+ Per-source minimum bullet thresholds replace the v4.8 AI Narrative Summary depth bar. For ADO work items: **≥ 8 material bullets, ≥ 4 sections populated** (must include Participants (assignee + reporter), Topics, Action Items or Next Steps, Artifacts).
316
+
317
+ An entity that cannot meet the threshold is flagged `low_signal: true` in `_index/entities.yml` and rendered as heading + Coverage Notes only — do NOT pad.
318
+
319
+ ## Changelog
320
+
321
+ - **v3.0.0 (kushi v4.9.0, 2026-05-26)**: BREAKING. Output is now a single weekly CSC file per ISO week
322
+ (`weekly/<YYYY-MM-DD>_ado-csc.md`) + per-contributor `_index/entities.yml`. snapshot/items/ +
323
+ stream/ writes removed. ADO REST + tree expansion (Steps 1–3) UNCHANGED — only output shape
324
+ changes. WI fields mapped to CSC sections (AssignedTo→Participants, Description→Topics, State
325
+ changes→Decisions, Comments→Q&A+Who Said What, etc.). AI Narrative Summary requirement removed.
326
+ Legacy snapshot/+stream/ folders left readable; no migration.
327
+ - **v2.x.x**: prior snapshot/+stream/ + verbatim-by-default shape. See git history.
@@ -1,19 +1,76 @@
1
1
  ---
2
2
  name: "pull-crm"
3
- version: "2.3.2"
4
- description: "Pull CRM (Dataverse) evidence (snapshot: engagement record VERBATIM long-text fields + ALL annotations with formatted values; stream: notes/activities/status changes). Per-record explicit $select + formatted-value annotations. FDE entity sets use crm-field-manifest.md. v2.3.0: exhaustive 4-step resolution sequence (title account[s] → wide-text recent-slice ask). Anti-patterns codified: no statecode filter, new_companyname is NOT a field, never disable from one shallow probe."
3
+ version: "3.0.0"
4
+ description: "v3.0.0 (kushi v4.9.0): Pull CRM (Dataverse) evidence as Comprehensive Structured Capture (CSC) blocks written to weekly/YYYY-MM-DD_crm-csc.md. One block per record modified that week, upserted in _index/entities.yml. Dataverse REST retrieval doctrine (Rules 1-6) UNCHANGED only output shape changes. Record fields CSC sections (ownerParticipants, long-text→Topics, statecodeDecisions, etc.). No snapshot/+stream/ split. Per-contributor _index/. See weekly-csc + comprehensive-structured-capture doctrines."
5
5
  ---
6
6
 
7
7
  # Skill: pull-crm
8
8
 
9
9
 
10
- > **v3.7.6 contracts** — This skill operates under four HARD-rule doctrines:
11
- > - `verbatim-by-default.instructions.md`full bodies/notetext/fields by default; no preview-grade pulls accepted.
10
+ > **v4.9.0 contracts** — This skill operates under these HARD-rule doctrines:
11
+ > - **`comprehensive-structured-capture.instructions.md`**CSC block shape (canonical sections, bullets only, no prose).
12
+ > - **`weekly-csc.instructions.md`** — weekly/ + _index/ writer contract; multi-user safety.
13
+ > - `workiq-only.instructions.md` — when WorkIQ is used, the CSC canonical prompts (§ "CSC canonical prompts (kushi v4.9.0+)") apply. **Dataverse REST remains the preferred path for CRM** (gives explicit `$select` + `$expand` control).
14
+ > - `evidence-thoroughness.instructions.md` (v2.0.0) — per-source minimum bullet thresholds; `low_signal: true` flag.
15
+ > - `citation-ledger.instructions.md` — citation format.
12
16
  > - `capture-learnings.instructions.md` — every fix/discovery is logged to `plugin/learnings/<source>.md` immediately.
13
- > - `cleanup-on-resolution.instructions.md` — when a value resolves, all stale `no-match` / `not yet` notes referencing the prior unresolved state must be rewritten in the same turn.
17
+ > - `cleanup-on-resolution.instructions.md` — stale `no-match` / `not yet` notes are rewritten on resolution.
14
18
  > - `run-reports.instructions.md` — every refresh writes a per-user report under `Evidence/<alias>/refresh-reports/YYYY-MM-DD-HHMM_refresh.md`.
15
-
16
- > **Canonical evidence layout** (HARD, kushi v3.12.1+): all artifacts produced by this skill MUST be written under `<project>/Evidence/<alias>/<source>/{snapshot,stream,...}/` sibling folders under `<project>/` (e.g. `<project>/<source>-context/`, `<project>/<source>/`, `<project>/_Weekly Summaries/`) are FORBIDDEN. See `evidence-layout-canonical.instructions.md`.
19
+ > - `evidence-layout-canonical.instructions.md` — `weekly/` + `_index/` are canonical in v4.9.0+.
20
+ > - `scope-boundaries.instructions.md`boundaries gate.
21
+ > - ~~`verbatim-by-default.instructions.md`~~ (LEGACY — superseded by CSC).
22
+ > - ~~`snapshot-vs-stream.instructions.md`~~ (LEGACY — superseded by weekly-csc).
23
+
24
+ ## v4.9.0 — Comprehensive Structured Capture (CSC) + weekly/ layout (HARD RULE; supersedes all snapshot/+stream/ guidance below)
25
+
26
+ Per `comprehensive-structured-capture.instructions.md` and `weekly-csc.instructions.md`:
27
+
28
+ - **Output target** (single file per source per ISO week):
29
+ `<engagement-root>/<project>/Evidence/<alias>/crm/weekly/<YYYY-MM-DD>_crm-csc.md`
30
+ where `<YYYY-MM-DD>` is the **Monday** of the ISO week the record was modified.
31
+ Empty weeks produce no file.
32
+
33
+ - **Block shape (per record touched that week)**: one CSC block under `## <Record title> {#<entity-anchor>}` with canonical section order: Source basis → Coverage window → Last touched → Participants → Topics Discussed → Decisions → Dates & Numbers Shared → Action Items → Next Steps → Open Questions → Risks/Blockers/Dependencies → Customer Asks → Artifacts/Links → Coverage Notes. (Q&A and Who Said What omitted per CSC per-source applicability.) Bullets only — no prose paragraphs.
34
+
35
+ - **Entity id (canonical for this source)**: `crm://entity=<logicalName>/id=<guid>`
36
+
37
+ - **Dataverse REST retrieval doctrine (Rules 1–6) UNCHANGED**: formatted-values annotations, `PSObject.Properties[...]` indexer, one-row inspect-before-widen, one-field-at-a-time, always include `statecode`/`statuscode`, prefer formatted values in rendered output. Only the OUTPUT SHAPE changes — the REST contract is identical.
38
+
39
+ - **_index/entities.yml upsert** (per-contributor, per-source): on every write, upsert one row per record:
40
+ ```yaml
41
+ - id: 'crm://entity=<logicalName>/id=<guid>'
42
+ display_name: '<record title>'
43
+ entity_anchor: '<slug>'
44
+ latest_csc_file: 'weekly/<YYYY-MM-DD>_crm-csc.md'
45
+ latest_csc_block_offset: <line>
46
+ last_touched: <ISO> # use record.modifiedon
47
+ first_seen: <ISO> # use record.createdon
48
+ weeks_touched: [<YYYY-MM-DD>, ...]
49
+ status: captured | body-not-exposed | unavailable | deferred
50
+ low_signal: false | true
51
+ ```
52
+ Path: `<engagement-root>/<project>/Evidence/<alias>/crm/_index/entities.yml`.
53
+
54
+ - **Idempotency**: same record, same week, two runs → REPLACE the block in place (CSC reflects end-of-week state). Same record, different weeks → each week's file gets its own block.
55
+
56
+ - **No body-fetch loop**: drop the AI Narrative Summary requirement and the dedicated verbatim long-text dump. Long-text fields are surfaced as bulleted Topics Discussed entries; annotations become sub-bullets under Topics + entries in Who Said What (note author + first material sentence). CSC bullets cite the Dataverse REST request-id / WorkIQ request-id.
57
+
58
+ - **Legacy `snapshot/` and `stream/` folders**: NOT written by this skill in v4.9.0. Pre-v4.9.0 folders on disk are left alone; readers fall back to them when `weekly/` is empty.
59
+
60
+ ### Source-specific notes (crm — REST stays)
61
+
62
+ - **Dataverse REST retrieval doctrine (Rules 1–6) unchanged** (see below). The 4-step resolution sequence (title → account[s] → wide-text → recent-slice → ask) and anti-patterns (no `statecode` filter at discovery; `new_companyname` is NOT a field; never disable from one shallow probe) all UNCHANGED.
63
+ - **Output shape changes**: instead of `snapshot/<entitySet>/<record-id>.md` + `stream/<YYYY-MM-DD>_crm-stream.md`, write **one CSC block per record** in `weekly/<Monday>_crm-csc.md`.
64
+ - **Map record fields → CSC sections**:
65
+ - Owner + contacts + assignedTo → **Participants**
66
+ - Long-text engagement fields (objectives, scenario, blockers) → **Topics Discussed**
67
+ - `statecode`/`statuscode` changes, decisions captured in notes → **Decisions**
68
+ - `createdon`/`modifiedon`, dollar amounts, percentages → **Dates & Numbers Shared**
69
+ - Annotations (notes) added in week → **Topics Discussed** sub-bullets + **Who Said What** (note author + first material sentence). _(Who Said What is normally omitted for crm per per-source table, but annotations are the carve-out where attribution is material — render only when present.)_
70
+ - Open questions in notes → **Open Questions**
71
+ - Customer-stated requirements → **Customer Asks**
72
+ - Related records → **Artifacts/Links**
73
+ - Entity id: `crm://entity=<logicalName>/id=<guid>`.
17
74
 
18
75
  Pulls **crm** evidence in two shapes per `snapshot-vs-stream.instructions.md`:
19
76
 
@@ -176,6 +233,8 @@ If the response is summarized (heuristics: any long-text field appears trimmed,
176
233
 
177
234
  ### Step C — Write snapshot file (one per record)
178
235
 
236
+ > **LEGACY (pre-v4.9.0).** Superseded by v4.9.0 weekly/ + CSC writer above. The Dataverse REST fetch (Step A + Step B) still runs; only the file write changes. Kept for historical reference; not executed.
237
+
179
238
  Write `snapshot/<entitySet>/<record-id>.md` with:
180
239
 
181
240
  - File header (record id, MSX opp, status, owner, last-fetched timestamp).
@@ -196,6 +255,8 @@ Use template: `templates/snapshot/crm-<kind>.template.md` (FDE entities: shape c
196
255
 
197
256
  ## Stream pass
198
257
 
258
+ > **LEGACY (pre-v4.9.0).** Superseded by v4.9.0 weekly/ + CSC writer above. Kept for historical reference; not executed.
259
+
199
260
  Per `evidence-thoroughness.instructions.md`: stream files (per-week) start with an **AI Narrative Summary** covering what changed and what it means, then every annotation verbatim with author + timestamp + every field-level change with old → new + actor + timestamp. Bucketed by ISO week into `stream/<record-id>/<YYYY-MM-DD>_crm-stream.md`.
200
261
 
201
262
  Write to: `<engagement-root>/<project>/Evidence/<alias>/crm/stream/<YYYY-MM-DD>_crm-stream.md` (date = Monday of the ISO week the events fall in).
@@ -206,12 +267,12 @@ If a week file already exists, MERGE (dedupe by event ID, append new events, kee
206
267
 
207
268
  ## Tools (in order)
208
269
 
209
- 1. **Dataverse REST Web API** (preferred for snapshot — gives explicit `$select` + `$expand` control) via `az account get-access-token` against the configured tenant. Read connection from `<workspace>/.kushi/config/shared/integrations.yml`.
210
- 2. **WorkIQ** — only when REST is unavailable; phrase queries to demand verbatim long-text + every annotation (see Step B template above). WorkIQ summarizes by default, so use this path only as fallback.
270
+ 1. **Dataverse REST Web API** (preferred — gives explicit `$select` + `$expand` control) via `az account get-access-token` against the configured tenant. Read connection from `<workspace>/.kushi/config/shared/integrations.yml`. Doctrine Rules 1–6 above MUST be followed.
271
+ 2. **WorkIQ** — only when REST is unavailable. Use CSC canonical prompts from `workiq-only.instructions.md` § 'CSC canonical prompts (kushi v4.9.0+)'. The pre-v4.9.0 verbatim prompts are LEGACY (kept only for pull-meetings Half A).
211
272
  3. **Graph REST** — last resort, soft-fail per `auth-and-retry.instructions.md`.
212
273
  4. **Ask user** — paste verbatim source content if all above fail.
213
274
 
214
- Document which path succeeded under `## Source Basis` in each output file.
275
+ Document which path succeeded under `Source basis` (in the CSC block) and in run-log.
215
276
 
216
277
  ## Mutable hints to upsert (during the run, not at the end)
217
278
 
@@ -247,3 +308,19 @@ After successful pass:
247
308
  ## Issue Recovery
248
309
 
249
310
  When this skill exposes a reusable defect (auth pattern, doctrine gap, layout mismatch), apply the [Issue Recovery Rule](../../instructions/issue-recovery.instructions.md): fix the smallest correct repo-owned artifact first, prefer durable fixes over per-run workarounds, then re-run the narrowest failed check. Do NOT use memory as a substitute for correcting the workflow surface.
311
+
312
+ ## Depth bar (per `evidence-thoroughness.instructions.md` v2.0.0)
313
+
314
+ Per-source minimum bullet thresholds replace the v4.8 AI Narrative Summary depth bar. For CRM records: **≥ 12 material bullets, ≥ 5 sections populated** (must include Participants, Dates & Numbers, Next Steps, Customer Asks, Artifacts).
315
+
316
+ An entity that cannot meet the threshold is flagged `low_signal: true` in `_index/entities.yml` and rendered as heading + Coverage Notes only — do NOT pad.
317
+
318
+ ## Changelog
319
+
320
+ - **v3.0.0 (kushi v4.9.0, 2026-05-26)**: BREAKING. Output is now a single weekly CSC file per ISO week
321
+ (`weekly/<YYYY-MM-DD>_crm-csc.md`) + per-contributor `_index/entities.yml`. snapshot/`<entitySet>`/
322
+ + stream/ writes removed. Dataverse REST retrieval doctrine (Rules 1–6) and 4-step resolution
323
+ UNCHANGED — only output shape changes. Record fields mapped to CSC sections
324
+ (Owner→Participants, long-text→Topics, statecode→Decisions, etc.). AI Narrative Summary requirement
325
+ removed. Legacy snapshot/+stream/ folders left readable; no migration.
326
+ - **v2.x.x**: prior snapshot/+stream/ + verbatim-by-default shape. See git history.
@@ -1,19 +1,68 @@
1
1
  ---
2
2
  name: "pull-email"
3
- version: "2.3.1"
4
- description: "Pull Email evidence (stream only emails ARE events). WorkIQ-ONLY per workiq-only.instructions.md (m365_get_email / m365_search_emails / Graph REST FORBIDDEN near-100% failure in this workspace). Folder-scoped fast path → root-scope WorkIQ fallback. Enumerate-then-fetch via two WorkIQ calls per project. Mutable folder-hint upsert during run. Throttle-aware. User-paste is a first-class fallback, NOT Graph."
3
+ version: "3.0.0"
4
+ description: "v3.0.0 (kushi v4.9.0): Pull Email evidence as Comprehensive Structured Capture (CSC) blocks written to weekly/YYYY-MM-DD_email-csc.md. One block per email thread touched that week, upserted in _index/entities.yml. WorkIQ-ONLY via CSC canonical prompts. No snapshot/+stream/ split. Per-contributor _index/. See weekly-csc + comprehensive-structured-capture doctrines."
5
5
  ---
6
6
 
7
7
  # Skill: pull-email
8
8
 
9
9
 
10
- > **v3.7.6 + v3.11.0 contracts** — This skill operates under five HARD-rule doctrines:
11
- > - `verbatim-by-default.instructions.md`full bodies/notetext/fields by default; no preview-grade pulls accepted.
12
- > - **`workiq-only.instructions.md` (v3.11.0)** email list + body fetch go through WorkIQ ONLY. `m365_get_email`, `m365_search_emails`, `m365_list_emails`, and Graph REST URLs are FORBIDDEN as fallbacks (they fail nearly every call in this workspace). The canonical WorkIQ prompts (folder-scoped enumerate, root-scope fallback, per-message body fetch) are codified in that instruction — do not re-discover them.
10
+ > **v4.9.0 contracts** — This skill operates under these HARD-rule doctrines:
11
+ > - **`comprehensive-structured-capture.instructions.md`**CSC block shape (canonical sections, bullets only, no prose).
12
+ > - **`weekly-csc.instructions.md`**weekly/ + _index/ writer contract; multi-user safety.
13
+ > - **`workiq-only.instructions.md`** — email enumeration + per-thread CSC capture go through WorkIQ ONLY via the CSC canonical prompts (§ "CSC canonical prompts (kushi v4.9.0+)"). `m365_get_email`, `m365_search_emails`, `m365_list_emails`, and Graph REST URLs remain FORBIDDEN.
14
+ > - `evidence-thoroughness.instructions.md` (v2.0.0) — per-source minimum bullet thresholds; `low_signal: true` flag for shallow entities.
15
+ > - `citation-ledger.instructions.md` — citation format.
13
16
  > - `capture-learnings.instructions.md` — every fix/discovery is logged to `plugin/learnings/<source>.md` immediately.
14
- > - `cleanup-on-resolution.instructions.md` — when a value resolves, all stale `no-match` / `not yet` notes referencing the prior unresolved state must be rewritten in the same turn.
17
+ > - `cleanup-on-resolution.instructions.md` — stale `no-match` / `not yet` notes are rewritten on resolution.
15
18
  > - `run-reports.instructions.md` — every refresh writes a per-user report under `Evidence/<alias>/refresh-reports/YYYY-MM-DD-HHMM_refresh.md`.
16
- > - `evidence-layout-canonical.instructions.md` (kushi v3.12.1+) ALL email artifacts MUST be written under `<project>/Evidence/<alias>/email/{snapshot,stream,_index,_legacy_*}/`. Writing to `<project>/email-context/`, `<project>/email/`, `<project>/_Weekly Summaries/`, or any other sibling path under `<project>/` is a DEFECT.
19
+ > - `evidence-layout-canonical.instructions.md` — `weekly/` + `_index/` are canonical in v4.9.0+.
20
+ > - `scope-boundaries.instructions.md` — boundaries gate.
21
+ > - ~~`verbatim-by-default.instructions.md`~~ (LEGACY — superseded by CSC).
22
+ > - ~~`snapshot-vs-stream.instructions.md`~~ (LEGACY — superseded by weekly-csc).
23
+
24
+ ## v4.9.0 — Comprehensive Structured Capture (CSC) + weekly/ layout (HARD RULE; supersedes all snapshot/+stream/ guidance below)
25
+
26
+ Per `comprehensive-structured-capture.instructions.md` and `weekly-csc.instructions.md`:
27
+
28
+ - **Output target** (single file per source per ISO week):
29
+ `<engagement-root>/<project>/Evidence/<alias>/email/weekly/<YYYY-MM-DD>_email-csc.md`
30
+ where `<YYYY-MM-DD>` is the **Monday** of the ISO week the entities were touched.
31
+ Empty weeks produce no file.
32
+
33
+ - **Block shape (per entity touched that week)**: one CSC block under `## <Entity title> {#<entity-anchor>}` with canonical section order: Source basis → Coverage window → Last touched → Participants → Topics Discussed → Q&A → Who Said What → Decisions → Dates & Numbers Shared → Action Items → Next Steps → Open Questions → Risks/Blockers/Dependencies → Customer Asks → Artifacts/Links → Coverage Notes. Bullets only — no prose paragraphs. Inapplicable sections omitted; empty-but-applicable sections rendered as `_None surfaced._`.
34
+
35
+ - **Entity id (canonical for this source)**: `email://conversation_id=<conversationId>`
36
+
37
+ - **WorkIQ prompts**: REPLACED by the CSC canonical prompts in `workiq-only.instructions.md` § "CSC canonical prompts (kushi v4.9.0+)". Do NOT use the v4.8 verbatim prompts.
38
+
39
+ - **_index/entities.yml upsert** (per-contributor, per-source): on every write, upsert one row per entity:
40
+ ```yaml
41
+ - id: 'email://conversation_id=<conversationId>'
42
+ display_name: '<thread subject>'
43
+ entity_anchor: '<slug>'
44
+ latest_csc_file: 'weekly/<YYYY-MM-DD>_email-csc.md'
45
+ latest_csc_block_offset: <line>
46
+ last_touched: <ISO>
47
+ first_seen: <ISO>
48
+ weeks_touched: [<YYYY-MM-DD>, ...]
49
+ status: captured | body-not-exposed | unavailable | deferred
50
+ low_signal: false | true
51
+ ```
52
+ Path: `<engagement-root>/<project>/Evidence/<alias>/email/_index/entities.yml`.
53
+
54
+ - **Idempotency**: same entity, same week, two runs → REPLACE the block in place (current-week CSC reflects end-of-week state). Same entity, different weeks → each week's file gets its own block.
55
+
56
+ - **No body-fetch loop**: drop the per-message verbatim body fetch and the AI Narrative Summary requirement. CSC bullets sourced directly from WorkIQ CSC output.
57
+
58
+ - **Legacy `snapshot/` and `stream/` folders**: NOT written by this skill in v4.9.0. Pre-v4.9.0 folders on disk are left alone (no migration); readers fall back to them when `weekly/` is empty.
59
+
60
+ ### Source-specific notes (email)
61
+
62
+ - Step A enumeration WorkIQ prompt is unchanged (lists conversations in scope).
63
+ - Replace per-message body fetch with **one CSC call per conversationId** using the CSC canonical email prompt.
64
+ - Persist message-index to `_index/message-index_<YYYY-MM-DD>.md` (optional — `_index/entities.yml` is the authoritative current-state file).
65
+ - Drop "Group by conversationId" + AI Narrative Summary references (legacy below).
17
66
  Pulls **email** evidence in two shapes per `snapshot-vs-stream.instructions.md`:
18
67
 
19
68
  - **snapshot/** — (none — emails ARE events, no snapshot)
@@ -137,10 +186,14 @@ After all bodies fetched, group messages by `conversationId`. For each thread:
137
186
 
138
187
  ## Snapshot pass
139
188
 
189
+ > **LEGACY (pre-v4.9.0).** Superseded by v4.9.0 weekly/ + CSC writer above. Kept for historical reference; not executed.
190
+
140
191
  _(no snapshot for email — emails are inherently event-stream)_
141
192
 
142
193
  ## Stream pass output
143
194
 
195
+ > **LEGACY (pre-v4.9.0).** Superseded by v4.9.0 weekly/ + CSC writer above. Kept for historical reference; not executed.
196
+
144
197
  Write to: `<engagement-root>/<project>/Evidence/<alias>/email/stream/<YYYY-MM-DD>_email-stream.md` (date = Monday of the ISO week the events fall in).
145
198
 
146
199
  Write the message index to: `<engagement-root>/<project>/Evidence/<alias>/email/_index/<YYYY-MM-DD>_message-index.md`.
@@ -151,7 +204,7 @@ If a week file already exists, MERGE (dedupe by `internetMessageId`, append new
151
204
 
152
205
  ## Tools (WorkIQ ONLY — per `workiq-only.instructions.md`)
153
206
 
154
- 1. **WorkIQ (`workiq ask`)** — the ONLY allowed path for both enumeration (Step A) and per-message body fetch (Step B). Always include the boundary keys + the verbatim/no-summary phrasing. Use the canonical prompts codified in `plugin/instructions/workiq-only.instructions.md` (Email Bodies section) do NOT re-derive them.
207
+ 1. **WorkIQ (`workiq ask`)** — the ONLY allowed path for both enumeration (Step A) and per-thread CSC capture. Use CSC canonical prompts from `workiq-only.instructions.md` § 'CSC canonical prompts (kushi v4.9.0+)'. The pre-v4.9.0 verbatim prompts are LEGACY (kept only for pull-meetings Half A).
155
208
  2. **Ask user (paste verbatim)** — first-class fallback when WorkIQ doubled-strict retry fails or returns `body-unavailable`. NOT a degradation; coverage.md labels it `Source: User paste on <ISO>`.
156
209
 
157
210
  **FORBIDDEN** for this skill (per workiq-only.instructions.md): `m365_get_email`, `m365_search_emails`, `m365_list_emails`, `m365_list_mail_folders`, `m365_search_mail`, Graph REST `https://graph.microsoft.com/v1.0/me/messages*`, Graph REST `https://graph.microsoft.com/v1.0/me/mailFolders*`. These tools have a near-100% failure rate in this workspace. Calling them is a DEFECT; coverage.md must NOT show them in the attempt trail.
@@ -181,11 +234,13 @@ After successful pass:
181
234
  - `sources.email.threads = <N>` — number of conversations grouped
182
235
  - For each week touched, add to `weekly_files` index.
183
236
 
184
- ## Depth bar (per `evidence-thoroughness.instructions.md`)
237
+ ## Depth bar (per `evidence-thoroughness.instructions.md` v2.0.0)
238
+
239
+ Per-source minimum bullet thresholds replace the v4.8 AI Narrative Summary depth bar. For email threads: **≥ 8 material bullets, ≥ 4 sections populated** (must include Participants, Topics, Action Items or Next Steps, Decisions or Q&A).
185
240
 
186
- The pre-Step-C anti-summary doctrine + the Step-C AI Narrative Summary per thread together produce the depth users expect. Empty thread bodies are a defect if Step B couldn't fetch a body, the message gets a `❌ body-unavailable` marker, NOT a paraphrase from the index row.
241
+ An entity that cannot meet the threshold is flagged `low_signal: true` in `_index/entities.yml` and rendered as heading + Coverage Notes onlydo NOT pad.
187
242
 
188
- **Completeness bar:** `messages_enumerated` should equal `messages_fetched + messages_failed`. Drift surfaces in run-log; consolidate skill renders it as a Coverage Note.
243
+ **Completeness bar:** `messages_enumerated` should equal the sum of conversations captured + `body-not-exposed` + `deferred`. Drift surfaces in run-log; consolidate skill renders it as a Coverage Note.
189
244
 
190
245
  ## Stop conditions
191
246
 
@@ -204,3 +259,12 @@ The pre-Step-C anti-summary doctrine + the Step-C AI Narrative Summary per threa
204
259
  ## Issue Recovery
205
260
 
206
261
  When this skill exposes a reusable defect (auth pattern, doctrine gap, layout mismatch), apply the [Issue Recovery Rule](../../instructions/issue-recovery.instructions.md): fix the smallest correct repo-owned artifact first, prefer durable fixes over per-run workarounds, then re-run the narrowest failed check. Do NOT use memory as a substitute for correcting the workflow surface.
262
+
263
+ ## Changelog
264
+
265
+ - **v3.0.0 (kushi v4.9.0, 2026-05-26)**: BREAKING. Output is now a single weekly CSC file per ISO week
266
+ (`weekly/<YYYY-MM-DD>_email-csc.md`) + per-contributor `_index/entities.yml`. snapshot/ and stream/
267
+ writes removed. WorkIQ prompts switched to CSC canonical prompts. AI Narrative Summary requirement
268
+ removed (CSC bulleted sections carry the load). Verbatim body-fetch loop removed.
269
+ Legacy snapshot/+stream/ folders left readable; no migration.
270
+ - **v2.x.x**: prior snapshot/+stream/ + verbatim-by-default shape. See git history.