kushi-agents 5.0.0 → 5.0.2

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 (54) hide show
  1. package/README.md +30 -7
  2. package/bin/cli.mjs +73 -45
  3. package/package.json +51 -51
  4. package/plugin/instructions/agentskills-compliance.instructions.md +144 -0
  5. package/plugin/instructions/multi-host-install.instructions.md +125 -0
  6. package/plugin/instructions/plan-validate-execute.instructions.md +75 -0
  7. package/plugin/instructions/release-genealogy.instructions.md +52 -0
  8. package/plugin/skills/aggregate-project/SKILL.md +11 -2
  9. package/plugin/skills/apply-ado-update/SKILL.md +11 -2
  10. package/plugin/skills/ask-project/SKILL.md +1 -1
  11. package/plugin/skills/bootstrap-project/SKILL.md +39 -127
  12. package/plugin/skills/bootstrap-project/references/discovery-sweep.md +40 -0
  13. package/plugin/skills/bootstrap-project/references/pull-dispatch.md +50 -0
  14. package/plugin/skills/bootstrap-project/references/registry-persistence.md +55 -0
  15. package/plugin/skills/build-state/SKILL.md +50 -2
  16. package/plugin/skills/consolidate-evidence/SKILL.md +11 -2
  17. package/plugin/skills/dashboard/SKILL.md +20 -1
  18. package/plugin/skills/emit-vertex/SKILL.md +10 -1
  19. package/plugin/skills/fde-intake/SKILL.md +10 -1
  20. package/plugin/skills/fde-report/SKILL.md +10 -1
  21. package/plugin/skills/fde-triage/SKILL.md +10 -1
  22. package/plugin/skills/intro/SKILL.md +1 -1
  23. package/plugin/skills/link-entities/SKILL.md +43 -1
  24. package/plugin/skills/project-status/SKILL.md +1 -1
  25. package/plugin/skills/propose-ado-update/SKILL.md +11 -2
  26. package/plugin/skills/pull-ado/SKILL.md +26 -9
  27. package/plugin/skills/pull-crm/SKILL.md +39 -125
  28. package/plugin/skills/pull-crm/references/dataverse-doctrine.md +108 -0
  29. package/plugin/skills/pull-crm/references/legacy-shape.md +28 -0
  30. package/plugin/skills/pull-email/SKILL.md +33 -79
  31. package/plugin/skills/pull-email/references/retrieval-order.md +43 -0
  32. package/plugin/skills/pull-email/references/two-pass-pull.md +41 -0
  33. package/plugin/skills/pull-loop/SKILL.md +194 -177
  34. package/plugin/skills/pull-meetings/SKILL.md +35 -72
  35. package/plugin/skills/pull-meetings/references/legacy-stream.md +15 -0
  36. package/plugin/skills/pull-meetings/references/verbatim-capture.md +61 -0
  37. package/plugin/skills/pull-misc/SKILL.md +24 -7
  38. package/plugin/skills/pull-onenote/SKILL.md +207 -555
  39. package/plugin/skills/pull-onenote/references/playwright-fallback.md +111 -0
  40. package/plugin/skills/pull-onenote/references/preflight.md +85 -0
  41. package/plugin/skills/pull-onenote/references/runtime-contract.md +118 -0
  42. package/plugin/skills/pull-sharepoint/SKILL.md +26 -9
  43. package/plugin/skills/pull-teams/SKILL.md +26 -9
  44. package/plugin/skills/refresh-project/SKILL.md +24 -2
  45. package/plugin/skills/self-check/SKILL.md +9 -1
  46. package/plugin/skills/self-check/run.ps1 +216 -4
  47. package/plugin/skills/setup/SKILL.md +14 -120
  48. package/plugin/skills/setup/references/onedrive-pin-sync.md +60 -0
  49. package/plugin/skills/setup/references/recovery-prompts.md +81 -0
  50. package/plugin/skills/tour/SKILL.md +18 -1
  51. package/plugin/skills/vertex-link/SKILL.md +1 -1
  52. package/src/constants.mjs +39 -1
  53. package/src/multi-host-install.test.mjs +170 -0
  54. package/src/multi-host.mjs +277 -0
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: "build-state"
3
3
  version: "4.0.0"
4
- description: "Render <project>/State/ from existing Evidence. v5.0.0: emits BOTH the legacy 00–09 synthesis (retained for `full` profile parity) AND the new Karpathy-style layout (index.md + log.md + per-entity pages under people/ opportunities/ adoworkitems/ decisions/ risks/ customerasks/ meetings/ artifacts/, plus CLAUDE.md + AGENTS.md). 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. v5 pages are ADDITIVE and distinguished by `kushi_state_page: true` front-matter."
4
+ description: "USE WHEN the user says \"regenerate State for <X>\", \"rebuild State\", or \"@Kushi state <X>\" AND the project already has Evidence/ populated. DO NOT USE to pull new evidence (use refresh-project or pull-*). Capability: pure re-render reads Evidence/_index/entities.yml + weekly CSC + legacy fallback, writes <project>/State/ in BOTH legacy 00–09 synthesis (full profile) AND Karpathy layout (index.md + log.md + per-entity pages + CLAUDE.md/AGENTS.md). Plan-validate-execute writer."
5
5
  ---
6
6
 
7
7
  # Skill: build-state
@@ -28,8 +28,47 @@ Run this when the user says: "regenerate state for `<X>`", "rebuild State", "@Ku
28
28
 
29
29
  - `<project>` — already-bootstrapped project.
30
30
 
31
+ ## Plan / Validate / Execute
32
+
33
+ Per `plan-validate-execute.instructions.md`:
34
+
35
+ 1. **Plan** — before Step 2 (regenerate State files), serialize the proposed
36
+ state shape to `<project>/Evidence/_plan/build-state-plan.json`:
37
+ - `inputs[]` — every `_index/entities.yml` row, `weekly/*.md` file, and
38
+ legacy `snapshot/`/`stream/` fallback file the run intends to read.
39
+ Each entry: `{ source, alias, path, last_modified, included_in: [<state_file>, ...] }`.
40
+ - `proposed_state_files[]` — `{ id: "00..08", title, sections: [...],
41
+ citation_count, evidence_window: [from_iso, to_iso] }`.
42
+ - `proposed_open_questions[]` — `{ text, source_refs[] }` (the OQ list
43
+ Step 5 plans to write).
44
+ - `proposed_karpathy_emit[]` — the v5 Karpathy block paths planned for Step 6.
45
+ 2. **Validate** — for every `evidence_ref` in the plan, re-confirm the source
46
+ file exists and its `last_modified` matches the plan. Drop any reference
47
+ whose anchor no longer resolves (the underlying weekly file may have been
48
+ re-written between plan and execute). If validate drops > 20% of references
49
+ in any single State file, abort that file's write and surface the plan for
50
+ review.
51
+ 3. **Execute** — write `State/00..08_*.md` and the Karpathy outputs. Stamp each
52
+ State file's banner with the plan ID + validate-pass timestamp.
53
+
54
+ The `_plan/` file is overwritten on every run and is safe to delete between
55
+ runs — transient working artifact, not authoritative truth.
56
+
31
57
  ## Steps
32
58
 
59
+
60
+ ## Step checklist
61
+
62
+ Progress-trackable view of the steps below. Each `### Step` block expands the corresponding checkbox.
63
+
64
+ - [ ] Step 1 — Read all Evidence
65
+ - [ ] Step 2 — For each State file (00–08), regenerate
66
+ - [ ] Step 3 — Conflict resolution
67
+ - [ ] Step 4 — Citation density
68
+ - [ ] Step 5 — Open Questions (mandatory every run)
69
+ - [ ] Step 6 — v5 Karpathy emission (ADDITIVE; per `karpathy-state-layout.instructions.md`)
70
+ - [ ] Step 7 — Banner
71
+
33
72
  ### Step 1 — Read all Evidence
34
73
 
35
74
  For the resolved `<project>`, apply the v4.9.0 fallback chain for each `<alias>/<source>/`:
@@ -128,4 +167,13 @@ Top of every State file:
128
167
  ## Changelog
129
168
 
130
169
  - **v4.0.0 (kushi v5.0.0, 2026-05-26)**: ADDITIVE Karpathy-style emission — per-entity pages under `State/<category>/`, `State/index.md`, `State/log.md`, `State/CLAUDE.md`, `State/AGENTS.md`. Distinguished by `kushi_state_page: true`. Legacy 00–09 synthesis is retained for `full` profile parity. Gated on `m365Mutable.state.layout` (default `karpathy`). See `..\..\instructions\karpathy-state-layout.instructions.md`.
131
- - **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.
170
+ - **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.
171
+
172
+ ## Validation loop
173
+
174
+ After writing outputs:
175
+
176
+ 1. Run self-check targeted at this skill: `pwsh plugin/skills/self-check/run.ps1 -Targeted state`
177
+ 2. If failures: fix and re-run the affected step (not the whole skill).
178
+ 3. Repeat until self-check exits 0.
179
+ 4. Only then update `run-log.yml` with success status.
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: "consolidate-evidence"
3
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."
4
+ description: "USE WHEN multiple contributors have pulled the same project AND the orchestrator (refresh-project / aggregate-project) needs a merged view at Evidence/_Consolidated/ for downstream skills (build-state, link-entities, ask-project). DO NOT USE manually it's an internal pass. Capability: merges per-contributor Evidence/<alias>/<source>/ into Evidence/_Consolidated/ for a window using the 3-step reader fallback (_index weekly legacy). Latest-fact-wins; cites originating alias."
5
5
  ---
6
6
 
7
7
  # Skill: consolidate-evidence
@@ -71,4 +71,13 @@ When this skill exposes a reusable defect (auth pattern, doctrine gap, layout mi
71
71
 
72
72
  ## Changelog
73
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.
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.
75
+
76
+ ## Validation loop
77
+
78
+ After writing outputs:
79
+
80
+ 1. Run self-check targeted at this skill: `pwsh plugin/skills/self-check/run.ps1 -Targeted consolidate-evidence`
81
+ 2. If failures: fix and re-run the affected step (not the whole skill).
82
+ 3. Repeat until self-check exits 0.
83
+ 4. Only then update `run-log.yml` with success status.
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: "dashboard"
3
3
  version: "1.0.0"
4
- description: "v5.0.0 Render an interactive HTML dashboard for a project. Reads Evidence/_graph/project-graph.json + per-source _index/entities.yml + State/index.md and emits a single self-contained <project>/dashboard.html via plugin/templates/dashboard/dashboard.template.html. Uses Cytoscape.js v3 + cose-bilkent layout (inlined), Clawpilot theme variables (per the web-artifacts-builder skill), two-view tabs (Graph + Timeline), source/alias/date filters, fuzzy search, side panel with cited CSC blocks. Idempotent — fully regenerated each run."
4
+ description: "USE WHEN the user says \"@Kushi dashboard <X>\" OR after refresh-project/bootstrap-project completes AND <project>/Evidence/_graph/project-graph.json exists. DO NOT USE before link-entities has produced a graph (no-op without it). Capability: renders single self-contained <project>/dashboard.html via Cytoscape.js v3 + cose-bilkent, Clawpilot theme variables, two-view tabs (Graph + Timeline), source/alias/date filters, fuzzy search, side panel with cited CSC blocks."
5
5
  ---
6
6
 
7
7
  # Skill: dashboard
@@ -38,6 +38,16 @@ description: "v5.0.0 — Render an interactive HTML dashboard for a project. Rea
38
38
 
39
39
  ## Steps
40
40
 
41
+
42
+ ## Step checklist
43
+
44
+ Progress-trackable view of the steps below. Each `### Step` block expands the corresponding checkbox.
45
+
46
+ - [ ] Step 1 — Verify inputs
47
+ - [ ] Step 2 — Collect data
48
+ - [ ] Step 3 — Render
49
+ - [ ] Step 4 — Verify
50
+
41
51
  ### Step 1 — Verify inputs
42
52
 
43
53
  If `<project>/Evidence/_graph/project-graph.json` does not exist, exit
@@ -111,3 +121,12 @@ re-run self-check D22.dashboard.
111
121
  - **v1.0.0 (kushi v5.0.0, 2026-05-26)**: initial release. Cytoscape.js v3 +
112
122
  cose-bilkent + Clawpilot theme variables; two-view tabs; side panel;
113
123
  filters; fuzzy search.
124
+
125
+ ## Validation loop
126
+
127
+ After writing outputs:
128
+
129
+ 1. Run self-check targeted at this skill: `pwsh plugin/skills/self-check/run.ps1 -Targeted dashboard`
130
+ 2. If failures: fix and re-run the affected step (not the whole skill).
131
+ 3. Repeat until self-check exits 0.
132
+ 4. Only then update `run-log.yml` with success status.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: "emit-vertex"
3
- description: "Render vertex-shaped artifacts from kushi Evidence/+State/ weekly status, decisions, workshops, comms, living-doc PR proposals. Stages first, validates against vertex's own schemas, applies on demand."
3
+ description: "USE WHEN the user says \"emit vertex artifacts for <project>\", \"stage a vertex weekly status\", \"promote a kushi decision to vertex\" AND the project has been linked to vertex via vertex-link. DO NOT USE for projects with no kushi.yaml#vertex block (run vertex-link first). Capability: renders vertex-shaped artifacts (weekly status, decisions, workshops, comms, living-doc PR proposals) from kushi Evidence/ + State/; stages first; user reviews before commit."
4
4
  applyTo: ["emit-vertex"]
5
5
  version: "1.1.0"
6
6
  maturity: "preview"
@@ -171,3 +171,12 @@ Per `issue-recovery.instructions.md`. emit-vertex's pre-flight failures, schema
171
171
  - [`vertex-link/SKILL.md`](../vertex-link/SKILL.md) — sister skill that populates `kushi.yaml#vertex` mapping
172
172
  - [`docs/concepts/kushi-with-vertex.md`](../../../docs/concepts/kushi-with-vertex.md) — outcome-based user-facing guide
173
173
  - [vertex repo](https://github.com/commercial-software-engineering/vertex)
174
+
175
+ ## Validation loop
176
+
177
+ After writing outputs:
178
+
179
+ 1. Run self-check targeted at this skill: `pwsh plugin/skills/self-check/run.ps1 -Targeted emit-vertex`
180
+ 2. If failures: fix and re-run the affected step (not the whole skill).
181
+ 3. Repeat until self-check exits 0.
182
+ 4. Only then update `run-log.yml` with success status.
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: "fde-intake"
3
3
  version: "1.0.0"
4
- description: "Author or update the FDE Intake document the first artifact in any FDE engagement. Reads project Evidence + the FDE reference pack (intake-questions + report-doctrine + core-fde-reference) and produces a single strategic brief that answers the 6 canonical FDE Intake questions. Read-only against the project; never refreshes sources; never sends outbound."
4
+ description: "USE WHEN an FDE engagement begins AND the user says \"author the intake doc for <X>\", \"update the FDE intake\", \"kick off FDE for <X>\". DO NOT USE for non-FDE engagements or for the triage/report stages (use fde-triage / fde-report). Capability: authors or updates the FDE Intake document the first artifact in any FDE engagement. Reads project Evidence + FDE reference pack (intake schema); fills missing fields by re-extracting from Evidence with citations."
5
5
  ---
6
6
 
7
7
  # Skill: fde-intake
@@ -145,3 +145,12 @@ Display:
145
145
  - "draft the fde intake for `<project>`"
146
146
  - "update the intake for `<project>`"
147
147
  - "@Kushi fde-intake `<project>`"
148
+
149
+ ## Validation loop
150
+
151
+ After writing outputs:
152
+
153
+ 1. Run self-check targeted at this skill: `pwsh plugin/skills/self-check/run.ps1 -Targeted fde-intake`
154
+ 2. If failures: fix and re-run the affected step (not the whole skill).
155
+ 3. Repeat until self-check exits 0.
156
+ 4. Only then update `run-log.yml` with success status.
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: "fde-report"
3
3
  version: "1.0.0"
4
- description: "Generate FDE-shaped engagement reports in one of five shapes (weekly / short / long / fitness / stage-readiness), grounded in the project's Evidence/ folder AND the FDE reference pack (operating model, doctrine, intake questions, anti-patterns, fitness criteria, stage gates, CRM status meanings, risk categories). Read-only; no source pulls; no outbound."
4
+ description: "USE WHEN the user asks for an \"FDE report\" / \"weekly status for <X>\" / \"stage-readiness report\" / \"fitness report\" / \"long-form FDE writeup\" for an FDE engagement. DO NOT USE for non-FDE reporting (use ask-project for Q&A). Capability: generates one of five FDE report shapes (weekly / short / long / fitness / stage-readiness), grounded in the project's Evidence/+State/, per the FDE reference pack templates."
5
5
  ---
6
6
 
7
7
  # Skill: fde-report
@@ -157,3 +157,12 @@ Display:
157
157
  - "fde fitness for `<project>`"
158
158
  - "stage readiness for `<project>`"
159
159
  - "@Kushi fde-report `<project>` [`<shape>`]"
160
+
161
+ ## Validation loop
162
+
163
+ After writing outputs:
164
+
165
+ 1. Run self-check targeted at this skill: `pwsh plugin/skills/self-check/run.ps1 -Targeted fde-report`
166
+ 2. If failures: fix and re-run the affected step (not the whole skill).
167
+ 3. Repeat until self-check exits 0.
168
+ 4. Only then update `run-log.yml` with success status.
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: "fde-triage"
3
3
  version: "1.0.0"
4
- description: "Produce the full FDE Triage bundle — 7 companion files at <project>/Reports/triage/<YYYY-MM-DD>/ covering analysis, fitness, risk, 6Q framing, mobilization readiness, executive readout, global reuse, and a central validation warnings tracker. Grounded in project Evidence + the FDE reference pack. Read-only; no outbound."
4
+ description: "USE WHEN an FDE engagement reaches the triage stage AND the user says \"run FDE triage for <X>\", \"produce the triage bundle\", \"do the 6Q triage\". DO NOT USE for non-FDE engagements or for one-off reports (use fde-report). Capability: produces the full FDE Triage bundle — 7 companion files at <project>/Reports/triage/<YYYY-MM-DD>/ covering analysis, fitness, risk, 6Q framing, and recommendations."
5
5
  ---
6
6
 
7
7
  # Skill: fde-triage
@@ -112,3 +112,12 @@ Display:
112
112
  - "triage bundle for `<project>`"
113
113
  - "do the full fde triage for `<project>`"
114
114
  - "@Kushi fde-triage `<project>`"
115
+
116
+ ## Validation loop
117
+
118
+ After writing outputs:
119
+
120
+ 1. Run self-check targeted at this skill: `pwsh plugin/skills/self-check/run.ps1 -Targeted fde-triage`
121
+ 2. If failures: fix and re-run the affected step (not the whole skill).
122
+ 3. Repeat until self-check exits 0.
123
+ 4. Only then update `run-log.yml` with success status.
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: "intro"
3
3
  version: "2.1.0"
4
- description: "Use when a user asks about Kushi, what it does, what its skills are, or wants a hands-on tour. Offers a quick overview OR an interactive walkthrough of every kushi verb (including Q&A and FDE authoring) with copy-and-send demo prompts."
4
+ description: "USE WHEN the user asks \"what is Kushi?\", \"what can you do?\", \"show me the skills\", \"give me a tour\", or any first-touch onboarding question AND the user appears unfamiliar with kushi. DO NOT USE for project-specific work or for users already mid-workflow. Capability: offers a quick overview OR an interactive walkthrough picks a known-bootstrapped project, runs a guided demo across ask, refresh, dashboard, tour."
5
5
  triggers:
6
6
  - "what is kushi"
7
7
  - "what can kushi do"
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: "link-entities"
3
3
  version: "1.0.0"
4
- description: "v5.0.0 Build the cross-source entity graph. Walks every contributor's Evidence/<alias>/<source>/_index/entities.yml + weekly/*.md files, runs deterministic extractors (ADO URLs, Teams meeting URLs, CRM record URLs, OneNote deep-links, conversation-id tokens, ADO/CRM token patterns), and emits Evidence/_graph/project-graph.json per entity-graph.instructions.md. LLM-augment pass is opt-in via m365Auth.linkEntities.llmInfer: true. Deterministic-first; idempotent (regenerates fully each run); multi-user safe (merges nodes by id, edges by (from,to,kind))."
4
+ description: "USE WHEN refresh-project / bootstrap-project completes AND every enabled pull-* has written its weekly/_index pair, OR when the user says \"@Kushi link entities <X>\" / \"rebuild the graph for <X>\". DO NOT USE before any source has been pulled. Capability: walks per-contributor _index/entities.yml + weekly CSC, runs deterministic extractors, emits Evidence/_graph/project-graph.json with closed edge taxonomy. Plan-validate-execute writer (Evidence/_plan/link-entities-plan.json validate write graph)."
5
5
  ---
6
6
 
7
7
  # Skill: link-entities
@@ -37,8 +37,41 @@ modifies `<alias>/<source>/weekly/` or `<alias>/<source>/_index/`.
37
37
  - `<engagement-root>/<project>/Evidence/_graph/project-graph.json` —
38
38
  per `entity-graph.instructions.md` schema.
39
39
 
40
+ ## Plan / Validate / Execute
41
+
42
+ Per `plan-validate-execute.instructions.md`:
43
+
44
+ 1. **Plan** — before Step 5 (merge+write), serialize the proposed merges to
45
+ `<project>/Evidence/_plan/link-entities-plan.json`:
46
+ - `nodes_in[]` — every node loaded from `_index/entities.yml` across contributors.
47
+ - `proposed_edges[]` — `{ from_id, to_id, kind, score, evidence_refs[] }`.
48
+ - `proposed_aliases[]` — `{ canonical_id, alias_ids[], confidence }`.
49
+ - `tombstones[]` — entries that would be removed/superseded.
50
+ 2. **Validate** — re-read each `evidence_ref` in `proposed_edges[]` against
51
+ the source `<alias>/<source>/_index/entities.yml` and `weekly/*.md`. Drop
52
+ any edge whose anchor no longer resolves. Drop alias rows whose confidence
53
+ falls below `link-entities.alias_min_confidence` (default 0.85).
54
+ 3. **Execute** — only after validate passes, write
55
+ `<project>/Evidence/_graph/project-graph.json` and the per-source
56
+ `entity-links.yml` upserts. If validate drops > 20% of proposed edges,
57
+ abort and surface the plan file for human review (do NOT execute).
58
+
59
+ The `_plan/` file is overwritten on every run and is safe to delete between
60
+ runs — transient working artifact, not authoritative truth.
61
+
40
62
  ## Steps
41
63
 
64
+
65
+ ## Step checklist
66
+
67
+ Progress-trackable view of the steps below. Each `### Step` block expands the corresponding checkbox.
68
+
69
+ - [ ] Step 1 — Discover contributors + sources
70
+ - [ ] Step 2 — Load nodes from `_index/entities.yml`
71
+ - [ ] Step 3 — Run deterministic extractors over `weekly/*.md`
72
+ - [ ] Step 4 — LLM augment (opt-in)
73
+ - [ ] Step 5 — Merge + write
74
+
42
75
  ### Step 1 — Discover contributors + sources
43
76
 
44
77
  Walk `<project>/Evidence/` for direct subdirectories (excluding names
@@ -214,3 +247,12 @@ the merge predicate), then re-run with `-Json` and inspect the envelope.
214
247
 
215
248
  - **v1.0.0 (kushi v5.0.0, 2026-05-26)**: initial release. Deterministic-first
216
249
  graph producer; opt-in LLM augment; multi-user merge.
250
+
251
+ ## Validation loop
252
+
253
+ After writing outputs:
254
+
255
+ 1. Run self-check targeted at this skill: `pwsh plugin/skills/self-check/run.ps1 -Targeted graph`
256
+ 2. If failures: fix and re-run the affected step (not the whole skill).
257
+ 3. Repeat until self-check exits 0.
258
+ 4. Only then update `run-log.yml` with success status.
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: "project-status"
3
3
  version: "2.0.0"
4
- description: "Show the run-log status for a project: per-source watermarks, last-pulled, item counts, weekly_files index, recent errors. No source calls."
4
+ description: "USE WHEN the user asks \"what's the status of <X>?\", \"when was <X> last refreshed?\", \"any errors in <X>?\", \"show the run-log for <X>\" for an already-bootstrapped project. DO NOT USE to answer substantive questions about project content (use ask-project). Capability: read-only — shows per-source watermarks, last-pulled, item counts, weekly_files index, recent errors from run-log.yml. No source calls."
5
5
  ---
6
6
 
7
7
  # Skill: project-status
@@ -2,7 +2,7 @@
2
2
  name: "propose-ado-update"
3
3
  version: "0.1.0-preview"
4
4
  status: "preview"
5
- description: "Read-only generator: reads the latest <project>/Evidence/_Consolidated/ and produces <project>/ado-updates/<YYYY-MM-DD>/proposed.md a Markdown preview of the proposed ADO Initiative updates (FDE Status Summary field + Discussion comment). Performs NO writes to ADO. Safe to run unattended on the same Monday-9am schedule as refresh."
5
+ description: "USE WHEN the user says \"propose ADO updates for <X>\", \"draft work-item edits from this week's evidence\", \"what should I update in ADO for <X>?\" AND <project>/Evidence/_Consolidated/ exists. DO NOT USE to push edits to ADO (use apply-ado-update). Capability: read-only generator reads latest Consolidated evidence, produces <project>/ado-updates/<YYYY-MM-DD>/proposed.md with a Markdown diff per work-item field."
6
6
  ---
7
7
 
8
8
  # Skill: propose-ado-update
@@ -110,4 +110,13 @@ Refuse to produce `proposed.md` and tell the user exactly what's missing if any
110
110
 
111
111
  ## Issue Recovery
112
112
 
113
- 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.
113
+ 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.
114
+
115
+ ## Validation loop
116
+
117
+ After writing outputs:
118
+
119
+ 1. Run self-check targeted at this skill: `pwsh plugin/skills/self-check/run.ps1 -Targeted propose-ado-update`
120
+ 2. If failures: fix and re-run the affected step (not the whole skill).
121
+ 3. Repeat until self-check exits 0.
122
+ 4. Only then update `run-log.yml` with success status.
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: "pull-ado"
3
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."
4
+ description: "USE WHEN refresh-project / bootstrap-project dispatches ADO source OR the user says \"pull ADO for <X>\" AND the project has integrations.yml#boundaries.ado.org_project set. DO NOT USE for non-kushi ADO queries or for write operations (use propose-ado-update / apply-ado-update). Capability: pulls 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. WorkIQ-only."
5
5
  ---
6
6
 
7
7
  # Skill: pull-ado
@@ -22,6 +22,14 @@ description: "v3.0.0 (kushi v4.9.0): Pull ADO evidence as Comprehensive Structur
22
22
  > - ~~`verbatim-by-default.instructions.md`~~ (LEGACY — superseded by CSC).
23
23
  > - ~~`snapshot-vs-stream.instructions.md`~~ (LEGACY — superseded by weekly-csc).
24
24
 
25
+ ## Gotchas
26
+
27
+ - **Work-item URL is the canonical id** — `ado://org=<o>/project=<p>/workitem=<id>`. Title is not stable across edits.
28
+ - **Discussion comments are stream-only** — comments don''t change `Changed Date` on the parent work item. Use the comments collection for incrementality; CSC bullets cite per-comment timestamps.
29
+ - **ADO-not-complete is a first-class state** — when WorkIQ returns partial work-item data (e.g. missing custom fields), log `ado-not-complete` in `_index/entities.yml#status` and retry next refresh. Do NOT fabricate field values.
30
+ - **Parent/child links use different relation names per process template** — `System.LinkTypes.Hierarchy-Forward` vs `Microsoft.VSTS.Common.TestedBy-Forward`. Don''t hard-code; read the relation list and classify.
31
+ - **Iteration paths contain slashes that look like file paths** — escape when rendering citations: `<Org>\<Project>\<Iter>` not `<Org>/<Project>/<Iter>`.
32
+
25
33
  ## v4.9.0 — Comprehensive Structured Capture (CSC) + weekly/ layout (HARD RULE; supersedes all snapshot/+stream/ guidance below)
26
34
 
27
35
  Per `comprehensive-structured-capture.instructions.md` and `weekly-csc.instructions.md`:
@@ -69,8 +77,8 @@ Per `comprehensive-structured-capture.instructions.md` and `weekly-csc.instructi
69
77
  - Iteration dates, story points, effort → **Dates & Numbers Shared**
70
78
  - Discussion comments → **Q&A** (when Q-and-A pattern detected) + **Who Said What**
71
79
  - Tags, related WIs, parent-child links, attachment metadata → **Artifacts/Links**
72
- - Entity id: `ado://org=<org>/project=<project>/workitemid=<int>`.
73
-
80
+ - Entity id: `ado://org=<org>/project=<project>/workitemid=<int>`.
81
+
74
82
  Pulls **ado** evidence in two shapes per `snapshot-vs-stream.instructions.md`:
75
83
 
76
84
  - **snapshot/** — engagement TREE: parent Engagement + every child WI; each item gets full fields + every discussion comment verbatim + full revision history
@@ -299,11 +307,11 @@ After successful pass:
299
307
  - Step 1 returns zero candidates → record `no-match` + WIQL + `next_step`, stop.
300
308
  - A child WI fetch fails → mark `❌ item-fetch-failed` in `tree.md`, continue tree.
301
309
  - Discussion paging fails mid-stream → record `❌ comments-partial — N/M fetched` and continue.
302
-
303
- ## References (v4.4.7)
304
-
305
- - Name → ID resolution follows ..\..\instructions\fuzzy-disambiguation.instructions.md (universal fuzzy contract).
306
- - After this pull completes, the per-source verification gate runs: ..\..\instructions\per-source-verification-gate.instructions.md (retry once, then write FOLLOW-UPS.md).
310
+
311
+ ## References (v4.4.7)
312
+
313
+ - Name → ID resolution follows ..\..\instructions\fuzzy-disambiguation.instructions.md (universal fuzzy contract).
314
+ - After this pull completes, the per-source verification gate runs: ..\..\instructions\per-source-verification-gate.instructions.md (retry once, then write FOLLOW-UPS.md).
307
315
 
308
316
 
309
317
  ## Issue Recovery
@@ -324,4 +332,13 @@ An entity that cannot meet the threshold is flagged `low_signal: true` in `_inde
324
332
  changes. WI fields mapped to CSC sections (AssignedTo→Participants, Description→Topics, State
325
333
  changes→Decisions, Comments→Q&A+Who Said What, etc.). AI Narrative Summary requirement removed.
326
334
  Legacy snapshot/+stream/ folders left readable; no migration.
327
- - **v2.x.x**: prior snapshot/+stream/ + verbatim-by-default shape. See git history.
335
+ - **v2.x.x**: prior snapshot/+stream/ + verbatim-by-default shape. See git history.
336
+
337
+ ## Validation loop
338
+
339
+ After writing outputs:
340
+
341
+ 1. Run self-check targeted at this skill: `pwsh plugin/skills/self-check/run.ps1 -Targeted pull-ado`
342
+ 2. If failures: fix and re-run the affected step (not the whole skill).
343
+ 3. Repeat until self-check exits 0.
344
+ 4. Only then update `run-log.yml` with success status.