kushi-agents 3.4.1
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/.github/config/m365-auth.json.example +56 -0
- package/.github/config/m365-mutable.json.example +11 -0
- package/LICENSE +201 -0
- package/README.md +159 -0
- package/bin/cli.mjs +75 -0
- package/package.json +35 -0
- package/plugin/agents/kushi.agent.md +147 -0
- package/plugin/instructions/answer-from-evidence.instructions.md +73 -0
- package/plugin/instructions/auth-and-retry.instructions.md +116 -0
- package/plugin/instructions/az-auth-conditional.instructions.md +39 -0
- package/plugin/instructions/azure-auth-patterns.instructions.md +226 -0
- package/plugin/instructions/citation-ledger.instructions.md +52 -0
- package/plugin/instructions/engagement-root-resolution.instructions.md +82 -0
- package/plugin/instructions/evidence-thoroughness.instructions.md +62 -0
- package/plugin/instructions/side-by-side-config.instructions.md +56 -0
- package/plugin/instructions/snapshot-vs-stream.instructions.md +87 -0
- package/plugin/instructions/thoroughness-detector.instructions.md +105 -0
- package/plugin/instructions/workiq-first.instructions.md +47 -0
- package/plugin/plugin.json +96 -0
- package/plugin/prompts/aggregate.prompt.md +24 -0
- package/plugin/prompts/ask.prompt.md +16 -0
- package/plugin/prompts/bootstrap.prompt.md +23 -0
- package/plugin/prompts/consolidate.prompt.md +21 -0
- package/plugin/prompts/fde-intake.prompt.md +41 -0
- package/plugin/prompts/fde-report.prompt.md +46 -0
- package/plugin/prompts/fde-triage.prompt.md +46 -0
- package/plugin/prompts/refresh.prompt.md +17 -0
- package/plugin/prompts/state.prompt.md +17 -0
- package/plugin/prompts/status.prompt.md +17 -0
- package/plugin/reference-packs/README.md +74 -0
- package/plugin/reference-packs/fde/README.md +62 -0
- package/plugin/reference-packs/fde/core-fde-reference.md +427 -0
- package/plugin/reference-packs/fde/intake-questions.md +168 -0
- package/plugin/reference-packs/fde/report-doctrine.md +189 -0
- package/plugin/skills/aggregate-project/SKILL.md +72 -0
- package/plugin/skills/ask-project/SKILL.md +162 -0
- package/plugin/skills/bootstrap-project/SKILL.md +129 -0
- package/plugin/skills/build-state/SKILL.md +69 -0
- package/plugin/skills/consolidate-evidence/SKILL.md +47 -0
- package/plugin/skills/fde-intake/SKILL.md +147 -0
- package/plugin/skills/fde-report/SKILL.md +159 -0
- package/plugin/skills/fde-triage/SKILL.md +114 -0
- package/plugin/skills/intro/SKILL.md +449 -0
- package/plugin/skills/project-status/SKILL.md +61 -0
- package/plugin/skills/pull-ado/SKILL.md +77 -0
- package/plugin/skills/pull-crm/SKILL.md +75 -0
- package/plugin/skills/pull-email/SKILL.md +75 -0
- package/plugin/skills/pull-meetings/SKILL.md +77 -0
- package/plugin/skills/pull-onenote/SKILL.md +82 -0
- package/plugin/skills/pull-sharepoint/SKILL.md +85 -0
- package/plugin/skills/pull-teams/SKILL.md +75 -0
- package/plugin/skills/refresh-project/SKILL.md +89 -0
- package/plugin/skills/self-check/SKILL.md +166 -0
- package/plugin/skills/self-check/run.ps1 +517 -0
- package/plugin/skills/self-check/run.sh +33 -0
- package/plugin/templates/fde/intake.md +114 -0
- package/plugin/templates/fde/report-fitness.md +151 -0
- package/plugin/templates/fde/report-long.md +109 -0
- package/plugin/templates/fde/report-short.md +45 -0
- package/plugin/templates/fde/report-stage-readiness.md +70 -0
- package/plugin/templates/fde/report-weekly.md +73 -0
- package/plugin/templates/fde/triage-00-fde-analysis.md +78 -0
- package/plugin/templates/fde/triage-02-risk-analysis.md +76 -0
- package/plugin/templates/fde/triage-03-6Q.md +40 -0
- package/plugin/templates/fde/triage-04-readiness-checklist.md +82 -0
- package/plugin/templates/fde/triage-05-executive-consolidated.md +78 -0
- package/plugin/templates/fde/triage-06-global-opportunity.md +70 -0
- package/plugin/templates/fde/triage-07-validation-warnings.md +60 -0
- package/plugin/templates/init/ado-config.template.yml +21 -0
- package/plugin/templates/init/crm-config.template.yml +16 -0
- package/plugin/templates/init/kushi-projects.template.json +14 -0
- package/plugin/templates/init/m365-auth.template.json +67 -0
- package/plugin/templates/init/m365-mutable.template.json +19 -0
- package/plugin/templates/init/project-contributors.template.yml +27 -0
- package/plugin/templates/init/project-evidence.template.yml +32 -0
- package/plugin/templates/init/project-integrations.template.yml +34 -0
- package/plugin/templates/init/project-user-settings.template.yml +71 -0
- package/plugin/templates/paste-prompt.md +35 -0
- package/plugin/templates/snapshot/ado-item.template.md +45 -0
- package/plugin/templates/snapshot/crm-record.template.md +34 -0
- package/plugin/templates/snapshot/meetings-series-index.template.md +32 -0
- package/plugin/templates/snapshot/onenote-page.template.md +28 -0
- package/plugin/templates/snapshot/sharepoint-file.template.md +31 -0
- package/plugin/templates/snapshot/sharepoint-tree.template.md +39 -0
- package/plugin/templates/snapshot/teams-roster.template.md +27 -0
- package/plugin/templates/state/00_overview.template.md +44 -0
- package/plugin/templates/state/01_decisions.template.md +41 -0
- package/plugin/templates/state/02_stakeholders.template.md +48 -0
- package/plugin/templates/state/03_architecture-and-solution.template.md +56 -0
- package/plugin/templates/state/04_workshops-and-key-meetings.template.md +43 -0
- package/plugin/templates/state/05_action-items.template.md +29 -0
- package/plugin/templates/state/06_risks-and-issues.template.md +43 -0
- package/plugin/templates/state/07_timeline-and-milestones.template.md +45 -0
- package/plugin/templates/state/08_artifacts-and-deliverables.template.md +55 -0
- package/plugin/templates/state/09_open-questions.template.md +62 -0
- package/plugin/templates/state/README.md +41 -0
- package/plugin/templates/weekly/ado-stream.template.md +71 -0
- package/plugin/templates/weekly/consolidated.template.md +98 -0
- package/plugin/templates/weekly/crm-stream.template.md +74 -0
- package/plugin/templates/weekly/email-stream.template.md +103 -0
- package/plugin/templates/weekly/meetings-stream.template.md +182 -0
- package/plugin/templates/weekly/onenote-stream.template.md +106 -0
- package/plugin/templates/weekly/run-log.template.md +88 -0
- package/plugin/templates/weekly/sharepoint-stream.template.md +121 -0
- package/plugin/templates/weekly/teams-stream.template.md +121 -0
- package/src/constants.mjs +49 -0
- package/src/copy-assets.mjs +183 -0
- package/src/main.mjs +262 -0
- package/src/profile-resolver.mjs +168 -0
- package/src/prompt.mjs +42 -0
- package/src/settings.mjs +77 -0
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
# FDE Report Doctrine
|
|
2
|
+
|
|
3
|
+
> The hard rules every Kushi FDE report (`fde-intake`, `fde-report`, `fde-triage`) must obey when grounding claims against project Evidence.
|
|
4
|
+
|
|
5
|
+
Cite as: `[source: reference-packs/fde/report-doctrine.md · packaged]`.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Rule 1 — Source Resolution Gate
|
|
10
|
+
|
|
11
|
+
Before drafting ANY FDE report, the skill MUST attempt the applicable retrieval paths and record what was retrieved vs what was attempted-and-empty vs what was attempted-and-failed. Reports that skip the gate cannot claim a complete view.
|
|
12
|
+
|
|
13
|
+
Applicable retrieval paths, in order:
|
|
14
|
+
|
|
15
|
+
1. **`State/` files** (if `full` profile and State/ exists) — `00_overview.md` → `09_open-questions.md`.
|
|
16
|
+
2. **`Evidence/_Consolidated/` latest week** — if it exists.
|
|
17
|
+
3. **`Evidence/<alias>/crm/snapshot/<record>.md`** — for CRM stage/status, MACC, ECIF, ownership.
|
|
18
|
+
4. **`Evidence/<alias>/ado/snapshot/items/`** — for engagement record + work items.
|
|
19
|
+
5. **`Evidence/<alias>/meetings/stream/<latest-week>.md`** — for the freshest customer-facing decisions.
|
|
20
|
+
6. **`Evidence/<alias>/teams/stream/<latest-week>.md`** — for asynchronous decisions / asks.
|
|
21
|
+
7. **`Evidence/<alias>/onenote/snapshot/pages/*.md`** — for durable artifacts (architecture, plans).
|
|
22
|
+
8. **`Evidence/<alias>/sharepoint/snapshot/files/*.md`** — for proposals, SOWs, business cases.
|
|
23
|
+
9. **`Evidence/<alias>/email/stream/<latest-week>.md`** — for sponsor / ATU correspondence.
|
|
24
|
+
|
|
25
|
+
Per-alias paths repeat for every contributor in `Evidence/contributors.yml`. The skill SHOULD prefer `_Consolidated/` over per-alias once it exists.
|
|
26
|
+
|
|
27
|
+
**Record per-source coverage** in the report's footer (a "Source Coverage" section). Use one of: `retrieved` / `attempted-empty` / `attempted-failed` / `not-applicable` / `not-attempted`. A report missing this section is a defect.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Rule 2 — Recency Precedence
|
|
32
|
+
|
|
33
|
+
When two sources disagree, **newer wins** — but never silently. The older signal MUST be marked **superseded** with a citation to both.
|
|
34
|
+
|
|
35
|
+
Recency order (most authoritative → least):
|
|
36
|
+
|
|
37
|
+
1. **Customer-facing transcript** (meetings/stream) — what was actually said.
|
|
38
|
+
2. **Async customer-visible decision** (teams/stream or email/stream) — what was confirmed in writing.
|
|
39
|
+
3. **CRM Confirmed Facts** — fields the FDE / EM / ATU has explicitly written-back AFTER the customer agreed.
|
|
40
|
+
4. **Local durable artifacts** — OneNote pages, SharePoint proposals (signed/approved).
|
|
41
|
+
5. **External links** — public references, partner sites.
|
|
42
|
+
6. **Historical CRM notes** older than the freshest customer-facing source.
|
|
43
|
+
|
|
44
|
+
**Do not average old and new** — pick the newest credible source, mark older as superseded.
|
|
45
|
+
|
|
46
|
+
Format:
|
|
47
|
+
|
|
48
|
+
```markdown
|
|
49
|
+
The stage is **3 — Triage Approved** [source: ushak/crm/snapshot/AGCO-eng.md · 2026-05-08].
|
|
50
|
+
|
|
51
|
+
> Older signal superseded: CRM note from 2026-04-12 said "Stage 2 — In Triage" — superseded by [source: ushak/meetings/stream/2026-05-04_meetings-stream.md · 2026-05-06 triage call decision].
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## Rule 3 — CRM Field Values vs Confirmed Facts
|
|
57
|
+
|
|
58
|
+
CRM field updates are **internal decisions**, not confirmed facts. The FDE intake plan / status / stage fields can be edited by anyone with CRM write access **without the customer ever being asked**.
|
|
59
|
+
|
|
60
|
+
Therefore: **never report a CRM field value as a confirmed fact** unless cross-referenced against the freshest customer-facing source (transcript, email, signed artifact).
|
|
61
|
+
|
|
62
|
+
States like:
|
|
63
|
+
|
|
64
|
+
- `Not Yet Requested`
|
|
65
|
+
- `Pending`
|
|
66
|
+
- `TBD`
|
|
67
|
+
- `In Review`
|
|
68
|
+
- `Draft`
|
|
69
|
+
|
|
70
|
+
…MUST NOT be reported as finalized. Surface them with the qualifier "CRM field value — not yet customer-confirmed".
|
|
71
|
+
|
|
72
|
+
When CRM disagrees with the latest customer-facing source, the report MUST call out the mismatch in `## Open Questions` AND embed a Rule 3 validation warning at the inline assertion (see Rule 4).
|
|
73
|
+
|
|
74
|
+
Format:
|
|
75
|
+
|
|
76
|
+
```markdown
|
|
77
|
+
MACC status: **Pending** (CRM field value — not yet customer-confirmed)
|
|
78
|
+
[source: ushak/crm/snapshot/AGCO-eng.md field=macc_status · 2026-05-08]
|
|
79
|
+
|
|
80
|
+
> ⚠️ VALIDATION WARNING — Rule 3: CRM field "macc_status" is "Pending" but the latest sponsor email [source: ushak/email/stream/2026-05-11_email-stream.md] says "MACC is locked at $4.2M, signed last Friday". Cross-check needed; the report cannot finalize MACC until the discrepancy is reconciled.
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## Rule 4 — Validation Warnings Protocol
|
|
86
|
+
|
|
87
|
+
For every unresolved evidence gap, missing role, missing owner, missing funding detail, blocked source, unresolved decision, or CRM-vs-customer mismatch that **materially affects interpretation** — embed a warning inline AND proceed. Do not block. Do not omit the warning.
|
|
88
|
+
|
|
89
|
+
Inline format (blockquote, MUST be machine-parsable):
|
|
90
|
+
|
|
91
|
+
```markdown
|
|
92
|
+
> ⚠️ VALIDATION WARNING — Rule X.Y: <one-line description>
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
The `Rule X.Y` reference MUST match one of:
|
|
96
|
+
|
|
97
|
+
- `Rule 1.1` — Source resolution gate skipped for a required path.
|
|
98
|
+
- `Rule 1.2` — Source attempted-failed for a path material to a claim.
|
|
99
|
+
- `Rule 2.1` — Recency precedence violated (newer source ignored, older quoted).
|
|
100
|
+
- `Rule 3.1` — CRM field value reported as confirmed fact without customer cross-check.
|
|
101
|
+
- `Rule 3.2` — CRM disagrees with latest customer-facing source.
|
|
102
|
+
- `Rule 4.1` — Required role (ATU rep, Industry rep) missing from stakeholder map.
|
|
103
|
+
- `Rule 4.2` — Required commercial fact (MACC, ECIF, funding model) missing.
|
|
104
|
+
- `Rule 4.3` — Required outcome metric (KPI, baseline, target) missing.
|
|
105
|
+
- `Rule 5.1` — Stage claim not supported by stage gate / exit criteria in `core-fde-reference.md`.
|
|
106
|
+
- `Rule 5.2` — FDE fit claim not grounded against the 10-row fitness checklist.
|
|
107
|
+
- `Rule 6.1` — Customer engagement legal posture (CWAA / EMA / contract status) absent.
|
|
108
|
+
- `Rule 9.1` — Other unresolved gap (free-text description required).
|
|
109
|
+
|
|
110
|
+
When the report is part of a triage bundle, every inline warning MUST also be mirrored to `07-validation-warnings-checklist.md` with status `open` / `resolved` / `not-applicable`.
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## Rule 5 — Stage Claims Must Be Grounded
|
|
115
|
+
|
|
116
|
+
Do not declare a project's FDE stage unless the Evidence supports the **exit criteria for the prior stage** as defined in `core-fde-reference.md § FDE Intake Stages, Gates, and Checklists`.
|
|
117
|
+
|
|
118
|
+
If CRM says Stage 4 but Evidence only supports Stage 3 exit criteria, the report MUST:
|
|
119
|
+
|
|
120
|
+
- State the CRM field value.
|
|
121
|
+
- State the Evidence-supported stage.
|
|
122
|
+
- Embed a `Rule 5.1` warning.
|
|
123
|
+
- Surface the mismatch in `## Open Questions`.
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## Rule 6 — Engagement Legal Posture
|
|
128
|
+
|
|
129
|
+
When customer delivery requires a legal working agreement (e.g. CWAA — Customer Workspace Access Agreement; EMA — Enterprise Master Agreement; or a specific SOW/MSA), the report MUST explicitly assess whether the agreement is already in place AND documented in current Evidence.
|
|
130
|
+
|
|
131
|
+
If absent or unclear → embed `Rule 6.1` warning AND surface in:
|
|
132
|
+
|
|
133
|
+
- `fde-fitness` report → "Commercial/legal gating" row.
|
|
134
|
+
- `risk-analysis` report → high-severity risk.
|
|
135
|
+
- `readiness-checklist` report → blocker.
|
|
136
|
+
- `executive-consolidated-report` → key risk callout.
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## Rule 7 — Read-Only Discipline
|
|
141
|
+
|
|
142
|
+
Every FDE report is **read-only against Evidence/**. The report skills MUST NOT:
|
|
143
|
+
|
|
144
|
+
- Trigger `pull-*` skills.
|
|
145
|
+
- Call WorkIQ for fresh data.
|
|
146
|
+
- Make Graph / CRM / ADO writes.
|
|
147
|
+
- Send any outbound message (mail, Teams DM, RSVP comment, CRM note, ADO comment).
|
|
148
|
+
|
|
149
|
+
If the freshest Evidence is older than `chat.freshness_warn_days` (default 14), the report MUST:
|
|
150
|
+
|
|
151
|
+
1. Warn the user at the top of the report (recommended phrasing: "Freshest evidence is N days old — consider `@Kushi refresh <project>` before relying on this report for high-stakes decisions").
|
|
152
|
+
2. Continue to generate the report from what's on disk.
|
|
153
|
+
3. Never silently auto-refresh.
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## Rule 8 — Citation Density
|
|
158
|
+
|
|
159
|
+
Every assertion (every fact, name, date, dollar figure, decision, stage claim, FDE-fit signal, risk) MUST carry a citation. Citations point to one of:
|
|
160
|
+
|
|
161
|
+
- `[source: <alias>/<source>/snapshot/<file>.md as of YYYY-MM-DD]`
|
|
162
|
+
- `[source: <alias>/<source>/stream/YYYY-MM-DD_<source>-stream.md · <event-id-or-timestamp>]`
|
|
163
|
+
- `[source: _Consolidated/YYYY-MM-DD_consolidated.md]`
|
|
164
|
+
- `[source: State/<NN>_<name>.md]` (full profile only)
|
|
165
|
+
- `[source: reference-packs/fde/<file>.md · packaged|user-override|project-override]`
|
|
166
|
+
|
|
167
|
+
A paragraph without at least one inline `[source: …]` is a defect. The FDE report skills MUST surface this defect as a `Rule 8.1` validation warning if any paragraph lacks citation at write time.
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## Rule 9 — Privacy Posture (External-Facing Reports)
|
|
172
|
+
|
|
173
|
+
For `customer` shape (or any report intended for an external audience):
|
|
174
|
+
|
|
175
|
+
- Suppress internal MACC/ECIF dollar figures unless previously shared with the customer (per CRM `commercial_shared_externally` field or explicit user confirmation).
|
|
176
|
+
- Suppress MS staffing detail (FDE crew composition, allocation %, cost rates).
|
|
177
|
+
- Suppress FDE-internal stage terminology ("Stage 3 — Triage Approved" → "currently in triage").
|
|
178
|
+
- Suppress CRM record IDs and internal ADO work item IDs.
|
|
179
|
+
- Suppress attendee emails (use display names only).
|
|
180
|
+
|
|
181
|
+
Internal reports (`weekly`, `short`, `long`, `handoff`, full triage bundle) include all of the above.
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
## See also
|
|
186
|
+
|
|
187
|
+
- `core-fde-reference.md` — the operating model these rules ground against (FDE definition, anti-patterns, fitness checklist, stage gates, CRM status meanings, risk categories).
|
|
188
|
+
- `intake-questions.md` — the 6 FDE Intake questions + role rules consumed by `fde-intake`.
|
|
189
|
+
- `README.md` — pack overview and 3-layer override.
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "aggregate-project"
|
|
3
|
+
version: "1.0.0"
|
|
4
|
+
description: "Pull-only multi-source aggregation for a project. Runs every enabled pull-* skill + consolidate-evidence, but DOES NOT run build-state. Produces a complete Evidence/ folder (the public contract) without Kushi's State/ overlay — intended for standalone use and for integration with external rollup systems."
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Skill: aggregate-project
|
|
8
|
+
|
|
9
|
+
## Purpose
|
|
10
|
+
|
|
11
|
+
`aggregate-project` is Kushi's **pull-only** producer. It captures evidence from every enabled source and merges per-user streams, but stops short of building State/. Use it when:
|
|
12
|
+
|
|
13
|
+
1. You want raw, multi-source evidence on disk and will render reports yourself (external rollup repo, BI tooling, custom templates).
|
|
14
|
+
2. You want to refresh evidence frequently but rebuild State/ only on a slower cadence (call `@Kushi state <project>` separately when needed).
|
|
15
|
+
3. You're installed at the `core` profile, where `build-state` doesn't exist.
|
|
16
|
+
|
|
17
|
+
This skill **never** writes to `State/`. It only writes to `Evidence/`.
|
|
18
|
+
|
|
19
|
+
## Sequence
|
|
20
|
+
|
|
21
|
+
1. **Resolve project** — fuzzy-match against `m365-mutable.json knownSections` -> `active_projects` -> `<engagement-root>` subfolders.
|
|
22
|
+
2. **Resolve window** — default = since last `aggregate`/`refresh`/`bootstrap` watermark in `Evidence/run-log.yml`; fallback 7 days if no watermark.
|
|
23
|
+
3. **Pull each enabled source in turn** (`pull-email`, `pull-teams`, `pull-meetings`, `pull-onenote`, `pull-sharepoint`, `pull-crm`, `pull-ado`) — each writes its own snapshot/ + stream/ files under `Evidence/<alias>/<source>/`.
|
|
24
|
+
4. **Run `consolidate-evidence`** — merges all aliases' streams into `Evidence/_Consolidated/<YYYY-MM-DD>_consolidated.md`. Skip silently if only one alias exists.
|
|
25
|
+
5. **Update `Evidence/run-log.yml`** — record this aggregate run, its watermark, the sources pulled, the alias that produced it.
|
|
26
|
+
6. **DO NOT run `build-state`.** State/ is not the concern of this skill.
|
|
27
|
+
|
|
28
|
+
## Output contract
|
|
29
|
+
|
|
30
|
+
After a successful run, the following exists on disk under `<engagement-root>/<project>/`:
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
Evidence/
|
|
34
|
+
├── run-log.yml <- manifest (public)
|
|
35
|
+
├── <alias>/
|
|
36
|
+
│ ├── email/stream/YYYY-MM-DD_email-stream.md <- stream shape
|
|
37
|
+
│ ├── teams/{snapshot,stream}/... <- snapshot + stream
|
|
38
|
+
│ ├── meetings/{snapshot,stream}/...
|
|
39
|
+
│ ├── onenote/{snapshot,stream}/...
|
|
40
|
+
│ ├── sharepoint/{snapshot,stream}/...
|
|
41
|
+
│ ├── crm/{snapshot,stream}/... <- if enabled
|
|
42
|
+
│ └── ado/{snapshot,stream}/... <- if enabled
|
|
43
|
+
└── _Consolidated/
|
|
44
|
+
└── YYYY-MM-DD_consolidated.md <- if multi-user
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
`State/` is **NOT** touched. Existing `State/*.md` files (from earlier `refresh`/`state` runs) remain unchanged.
|
|
48
|
+
|
|
49
|
+
See `docs/reference/evidence-contract.md` for the full schema (filename rules, frontmatter, citation format).
|
|
50
|
+
|
|
51
|
+
## What this skill never does
|
|
52
|
+
|
|
53
|
+
- Never runs `build-state`. If the user wants State/, they say `@Kushi state <project>` or `@Kushi refresh <project>` separately.
|
|
54
|
+
- Never sends outbound messages.
|
|
55
|
+
- Never reads/writes outside the resolved project's folder.
|
|
56
|
+
|
|
57
|
+
## How users invoke this
|
|
58
|
+
|
|
59
|
+
- `@Kushi aggregate <project>` (default — since last watermark)
|
|
60
|
+
- `@Kushi aggregate <project> last N days`
|
|
61
|
+
- `@Kushi aggregate <project> since <date>`
|
|
62
|
+
- `@Kushi aggregate <project> <from>..<to>`
|
|
63
|
+
|
|
64
|
+
## Relationship to other verbs
|
|
65
|
+
|
|
66
|
+
| Want to... | Use |
|
|
67
|
+
|---|---|
|
|
68
|
+
| Just capture evidence | `aggregate` |
|
|
69
|
+
| Capture + rebuild State/ | `refresh` (= aggregate + build-state) |
|
|
70
|
+
| Rebuild State/ only, no new pulls | `state` |
|
|
71
|
+
| Capture from one source only | `pull <source>` |
|
|
72
|
+
| Merge per-user streams without pulling | `consolidate` |
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "ask-project"
|
|
3
|
+
version: "2.0.0"
|
|
4
|
+
description: "Read-only Q&A over an already-bootstrapped project. Answers natural-language questions about a project (status, decisions, MACC, stakeholders, risks, action items, timeline, specific docs/meetings) using only the project's State/, Evidence/, and snapshot/ files. Cited; no source pulls; no outbound."
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Skill: ask-project
|
|
8
|
+
|
|
9
|
+
Run this whenever the user asks a question about a known project — even without an explicit verb.
|
|
10
|
+
|
|
11
|
+
The user does NOT need to type `/ask-project` or `@Kushi ask`. If the message:
|
|
12
|
+
|
|
13
|
+
1. **Names a project** (matches `<engagement-root>/<project>/Evidence/`, `TempAssets/<project>/external-context/`, or `discovery.project_aliases` in any `.settings.yml`), AND
|
|
14
|
+
2. **Asks a question or requests a fact / status / summary** (interrogatives: what / who / when / where / why / how / status of / list / show / summarize / compare across the same project)
|
|
15
|
+
|
|
16
|
+
…then dispatch here. **Producer verbs (bootstrap / refresh / pull / state / consolidate / status) win over `ask` if the message is unambiguously a producer verb.** When ambiguous, ask the user.
|
|
17
|
+
|
|
18
|
+
## Hard rules
|
|
19
|
+
|
|
20
|
+
- **Read-only.** No `pull-*`, no Graph writes, no WorkIQ calls during answering. Source pulls are a separate user-initiated step.
|
|
21
|
+
- **No cross-project bleed.** Answer only from the resolved project's own folders. If the question requires comparing two projects, ask the user to confirm and run `ask-project` per project, then merge in the answer.
|
|
22
|
+
- **Citation Ledger applies.** Every fact, decision, person, date, $ figure carries inline `[source: <alias>/<folder>/<file> · YYYY-MM-DD]` per `instructions/citation-ledger.instructions.md` and `instructions/answer-from-evidence.instructions.md`. If the corpus does not support an answer, say so explicitly — never invent.
|
|
23
|
+
- **Privacy posture.** Same as Kushi global: no outbound messages, no leaking attendee emails into anything visible to others. Answer goes to chat only.
|
|
24
|
+
- **Freshness gate, not freshness auto-fix.** If the freshest source relevant to the question is older than `chat.freshness_warn_days` (default 14), warn the user and offer `@Kushi refresh <project>` — but NEVER auto-refresh.
|
|
25
|
+
- **Reference packs may be consulted for domain doctrine.** When the question maps to a known reference-pack domain (currently only `fde/` — FDE stages, fitness, CRM status meanings, intake gates, risk categories, "MACC", "is this FDE-fit"), ALSO load the matching reference pack as additional grounding using the 3-layer override order (project → user → packaged). Cite reference-pack assertions with `[source: reference-packs/<pack>/<file>.md · <layer>]` where layer is `packaged` / `user-override` / `project-override`. Reference-pack content NEVER overrides project Evidence/ for facts about *this* project; it only provides definitions, gates, and rubrics.
|
|
26
|
+
|
|
27
|
+
## Inputs
|
|
28
|
+
|
|
29
|
+
- `<project>` — fuzzy-matched project name. If multiple plausible matches, ask the user.
|
|
30
|
+
- `<question>` — the user's natural-language question. May span topics; pick the dominant topic for primary file selection.
|
|
31
|
+
|
|
32
|
+
## Steps
|
|
33
|
+
|
|
34
|
+
### Step 1 — Resolve project root
|
|
35
|
+
|
|
36
|
+
In order, stop on first hit:
|
|
37
|
+
|
|
38
|
+
1. Exact `<engagement-root>/<project>/Evidence/` folder.
|
|
39
|
+
2. Fuzzy match against `discovery.project_aliases` in any `<engagement-root>/<project>/Evidence/<alias>/.settings.yml`.
|
|
40
|
+
3. `<engagement-root>/<project>/external-context/` (lighter-weight projects without full bootstrap).
|
|
41
|
+
4. `~/.copilot/project-evidence.yml` `active_projects` list.
|
|
42
|
+
|
|
43
|
+
If zero matches → ask user. If multiple → list candidates and ask user to pick. **Echo the resolved root path before answering** so the user can confirm.
|
|
44
|
+
|
|
45
|
+
### Step 2 — Classify the question
|
|
46
|
+
|
|
47
|
+
Map the question to one or more **answer kinds**, which determines which files to load:
|
|
48
|
+
|
|
49
|
+
| Question shape | Primary files |
|
|
50
|
+
|---|---|
|
|
51
|
+
| "what is the status of …", "where are we on …" | `State/00_overview.md`, latest `Evidence/<alias>/_Consolidated/`, `Evidence/run-log.yml` |
|
|
52
|
+
| "what's been decided about …", "did we decide …" | `State/01_decisions.md` |
|
|
53
|
+
| "who is the EM / FDE / stakeholder for …", "who's working on …" | `State/02_stakeholders.md`, `Evidence/contributors.yml` |
|
|
54
|
+
| "what's the architecture / solution / approach …" | `State/03_architecture-and-solution.md`, snapshot SharePoint files matching `Architecture/` |
|
|
55
|
+
| "what happened in the meeting on …", "what was discussed at …" | `Evidence/<alias>/Meetings/<date>_*.md` matching the date/topic |
|
|
56
|
+
| "what action items / next steps / open asks …" | `State/05_action-items.md`, `State/09_open-questions.md` |
|
|
57
|
+
| "what risks / blockers / dependencies …" | `State/06_risks-and-issues.md` |
|
|
58
|
+
| "what's the timeline / when is …", "milestone for …" | `State/07_timeline-and-milestones.md` |
|
|
59
|
+
| "what's the MACC / ECIF / commercials / $ size for …" | grep `MACC`, `ECIF`, `\$[0-9]`, `consumption commitment` across `State/` + `Evidence/<alias>/_Consolidated/` |
|
|
60
|
+
| "what does the deck / SOW / doc say about …" | `<project>/SharePoint/snapshot/files/*.md` matching the doc name; fallback to `tree.md` to locate |
|
|
61
|
+
| "what was in the email from X about Y" | grep across `Evidence/<alias>/Email/` |
|
|
62
|
+
| "what's in OneNote about …" | `Evidence/<alias>/OneNote/` + `external-context/*onenote*.md` |
|
|
63
|
+
| "summary of the project" | `State/00_overview.md` (this file IS the answer) |
|
|
64
|
+
|
|
65
|
+
If the question doesn't fit, default to: `State/00_overview.md` + greppable scan of all `State/*.md` for topic keywords.
|
|
66
|
+
|
|
67
|
+
### Step 3 — Load files (cheapest → richest, stop when sufficient)
|
|
68
|
+
|
|
69
|
+
1. Load the **primary files** identified in Step 2.
|
|
70
|
+
2. If primary files don't have the answer, expand to: latest week's `Evidence/<alias>/_Consolidated/` file.
|
|
71
|
+
3. If still insufficient, expand to per-source latest week files for the relevant source.
|
|
72
|
+
4. If still insufficient, scan `external-context/`.
|
|
73
|
+
5. If still insufficient, scan `<project>/SharePoint/snapshot/files/` (these are AI-summarized doc bodies).
|
|
74
|
+
6. If still insufficient → answer **"I don't have evidence for that. Want me to refresh `<source>` for `<project>`?"**
|
|
75
|
+
|
|
76
|
+
**Do not** read every file in the project — that's wasteful. Stop as soon as the answer is supported by ≥1 cited source.
|
|
77
|
+
|
|
78
|
+
### Step 4 — Freshness gate
|
|
79
|
+
|
|
80
|
+
Before answering, read `Evidence/run-log.yml` (or `.settings.yml` `last_runs:`). For each source actually used in the answer:
|
|
81
|
+
|
|
82
|
+
- If `last_pulled` is within `chat.freshness_warn_days` (default 14) → no warning.
|
|
83
|
+
- If older → emit a one-liner before the answer: `> ⚠️ Freshness: <source> last pulled <YYYY-MM-DD> (<N> days ago). Answer reflects evidence as of that date. Run @Kushi refresh <project> to update.`
|
|
84
|
+
|
|
85
|
+
### Step 5 — Compose the answer
|
|
86
|
+
|
|
87
|
+
Format:
|
|
88
|
+
|
|
89
|
+
```
|
|
90
|
+
**<project>** — <one-line restatement of the question>
|
|
91
|
+
|
|
92
|
+
<answer in plain prose or short bullets, every assertion cited inline>
|
|
93
|
+
|
|
94
|
+
**Sources used**
|
|
95
|
+
- `<alias>/<folder>/<file>` · YYYY-MM-DD
|
|
96
|
+
- `<alias>/<folder>/<file>` · YYYY-MM-DD
|
|
97
|
+
|
|
98
|
+
**Confidence**: high | medium | low — <one-line reason>
|
|
99
|
+
|
|
100
|
+
<optional: "Want me to refresh X to get fresher evidence?" or "I noticed open question Y in 09_open-questions.md — want me to surface it?">
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
**Confidence rubric**:
|
|
104
|
+
- **high** — answer comes from `State/*.md` (already curated + cited), or from ≥2 corroborating Evidence files, AND freshness OK.
|
|
105
|
+
- **medium** — answer comes from a single Evidence file, OR State file is older than the underlying Evidence change, OR freshness 14–30 days.
|
|
106
|
+
- **low** — answer is partial/inferred from snapshot summaries only, OR freshness >30 days, OR conflicting evidence.
|
|
107
|
+
|
|
108
|
+
### Step 6 — Surface follow-ups (no sends)
|
|
109
|
+
|
|
110
|
+
If the answer touches a Pending Outbound, an Open Question, or a Risk, mention it as a one-liner suggestion. **Never offer to send anything.** Per global rule, recommendations go into `State/09_open-questions.md` only — `ask-project` does not write either, it just points.
|
|
111
|
+
|
|
112
|
+
## Stop conditions
|
|
113
|
+
|
|
114
|
+
- Project unresolved → ask user.
|
|
115
|
+
- Question is actually a producer verb in disguise ("refresh AGCO", "pull email for X") → defer to that verb's skill.
|
|
116
|
+
- Corpus does not support the answer → say so + offer refresh.
|
|
117
|
+
- Evidence folder missing entirely → reply: "Project `<X>` is not bootstrapped. Run `@Kushi bootstrap <X>` first."
|
|
118
|
+
|
|
119
|
+
## Triggers
|
|
120
|
+
|
|
121
|
+
Auto-trigger when the user message contains a project name AND any of:
|
|
122
|
+
|
|
123
|
+
- "what is …", "what's …", "what was …"
|
|
124
|
+
- "who is …", "who's …", "who was …"
|
|
125
|
+
- "when is …", "when did …", "when's …"
|
|
126
|
+
- "status of …", "where are we on …", "where do we stand on …"
|
|
127
|
+
- "show me …", "list …", "summarize …"
|
|
128
|
+
- "is there …", "do we have …", "did we …", "was there …"
|
|
129
|
+
- "tell me about …"
|
|
130
|
+
- Bare project-name + topic (e.g. "AGCO MACC", "Noridian risks", "HCA next steps")
|
|
131
|
+
|
|
132
|
+
Explicit triggers also accepted:
|
|
133
|
+
|
|
134
|
+
- `@Kushi ask <project> <question>`
|
|
135
|
+
- `/ask-project <project> <question>`
|
|
136
|
+
- `ask kushi about <project>: <question>`
|
|
137
|
+
|
|
138
|
+
## Examples
|
|
139
|
+
|
|
140
|
+
### Example 1 — Status question
|
|
141
|
+
> User: "what's the status of AGCO?"
|
|
142
|
+
> → Resolve `Engagement Assets/AGCO/`. Load `State/00_overview.md` + `run-log.yml`. Answer with cited bullets + freshness line.
|
|
143
|
+
|
|
144
|
+
### Example 2 — Specific fact
|
|
145
|
+
> User: "what's the MACC for AGCO and is it confirmed?"
|
|
146
|
+
> → Load `State/00_overview.md`, `State/01_decisions.md`, grep `MACC` across `_Consolidated/`. Answer with $ figure + confirmation status, citing each.
|
|
147
|
+
|
|
148
|
+
### Example 3 — Doc question
|
|
149
|
+
> User: "what does the FDE intake deck say about Noridian's MPXe scope?"
|
|
150
|
+
> → Resolve Noridian. Read `SharePoint/snapshot/files/` matching "intake" + "MPXe". Cite slide-level if available.
|
|
151
|
+
|
|
152
|
+
### Example 4 — Cross-project (refused)
|
|
153
|
+
> User: "compare AGCO and HCA on MACC sizing"
|
|
154
|
+
> → "I'll answer per project to keep evidence boundaries clean. First AGCO: … Then HCA: …"
|
|
155
|
+
|
|
156
|
+
### Example 5 — Stale evidence
|
|
157
|
+
> User: "what's the latest on Noridian?" (last pull was 21 days ago)
|
|
158
|
+
> → Emit freshness warning, then answer from what's there, then offer `@Kushi refresh Noridian`.
|
|
159
|
+
|
|
160
|
+
### Example 6 — Missing evidence
|
|
161
|
+
> User: "what did Mark say in last week's call about pricing?"
|
|
162
|
+
> → If no Meetings file for that week: "I don't have a meetings transcript for week of YYYY-MM-DD. Want me to pull meetings for AGCO since YYYY-MM-DD?"
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "bootstrap-project"
|
|
3
|
+
version: "2.1.0"
|
|
4
|
+
description: "First-time setup for a project: machine preflight (WorkIQ check, optional az login), side-by-side config (templates -> live filled), engagement-root + project resolution, initial 30d snapshot+stream pull across all enabled sources. Builds State/ only on the `full` profile (skipped on `standard`). Idempotent — safe to re-run."
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Skill: bootstrap-project
|
|
8
|
+
|
|
9
|
+
Run this when the user says any of: "bootstrap a new project", "set up project evidence for `<X>`", "add me to project `<X>`", "I'm new to `<X>`", "do it all for `<X>`" (and the project has no Evidence/ folder yet).
|
|
10
|
+
|
|
11
|
+
## Profile-aware behavior
|
|
12
|
+
|
|
13
|
+
This skill is **profile-aware** as of Kushi v3.3.0:
|
|
14
|
+
|
|
15
|
+
- On `standard` profile (the default) — Step 6 (build-state) is **skipped**. The project's `State/` folder is NOT scaffolded; Evidence/ is the public contract.
|
|
16
|
+
- On `full` profile — Step 6 runs and `State/` is scaffolded + built.
|
|
17
|
+
|
|
18
|
+
The active profile is read from `kushi-install.json#profile` next to this agent file. If absent, default to `standard`.
|
|
19
|
+
|
|
20
|
+
## Inputs
|
|
21
|
+
|
|
22
|
+
- `<project>` — engagement name (fuzzy-matched per `engagement-root-resolution.instructions.md`).
|
|
23
|
+
- `<window>` — defaults to **last 30 days** (override with `last N days` / `since <date>`).
|
|
24
|
+
- Implicit: current contributor `<alias>` (from personal config).
|
|
25
|
+
|
|
26
|
+
## Steps
|
|
27
|
+
|
|
28
|
+
### Step 1 — Machine preflight (SETUP)
|
|
29
|
+
|
|
30
|
+
Verify in order. Stop on hard failures.
|
|
31
|
+
|
|
32
|
+
1. **OS + host runtime** — display OS + Node/PowerShell version. Informational.
|
|
33
|
+
2. **WorkIQ install (REQUIRED, hard stop)** — read `<USER_HOME>/.copilot/project-evidence.yml workiq.cli_path`. If missing, probe known paths:
|
|
34
|
+
- `$HOME\.copilot\bin\workiq.cmd`
|
|
35
|
+
- `$env:LOCALAPPDATA\Programs\WorkIQ\workiq.cmd`
|
|
36
|
+
- `$env:ProgramFiles\WorkIQ\workiq.cmd`
|
|
37
|
+
If found, persist path. If not found, ask user for path (or to install). Test with `<workiq.cli_path> --help`. Without WorkIQ, M365 sources will all fail — STOP.
|
|
38
|
+
3. **Conditional az login** — only if `<engagement-root>/.project-evidence/crm/config.yml` OR `<engagement-root>/.project-evidence/ado/config.yml` exists. Per `az-auth-conditional.instructions.md`. Soft warning on failure, never blocking.
|
|
39
|
+
4. **Engagement-root resolution** — per `engagement-root-resolution.instructions.md`. Persist to `<USER_HOME>/.copilot/project-evidence.yml engagement_root` if newly resolved.
|
|
40
|
+
|
|
41
|
+
Display SETUP summary table with ✅ / ⚙️ / ❌ / ⚠️ / ➖ markers.
|
|
42
|
+
|
|
43
|
+
### Step 2 — Side-by-side config bootstrap
|
|
44
|
+
|
|
45
|
+
Per `side-by-side-config.instructions.md`. For each missing live file, copy the template into place and ask the user ONLY for blank required fields. Group questions logically.
|
|
46
|
+
|
|
47
|
+
Required live files:
|
|
48
|
+
|
|
49
|
+
| Live file | Template source |
|
|
50
|
+
|---|---|
|
|
51
|
+
| `<USER_HOME>/.copilot/project-evidence.yml` | `templates/init/project-evidence.template.yml` |
|
|
52
|
+
| `<engagement-root>/.project-evidence/m365/m365-auth.json` | `templates/init/m365-auth.template.json` |
|
|
53
|
+
| `<engagement-root>/.project-evidence/m365/m365-mutable.json` | `templates/init/m365-mutable.template.json` |
|
|
54
|
+
| `<engagement-root>/<project>/integrations.yml` | `templates/init/project-integrations.template.yml` |
|
|
55
|
+
| `<engagement-root>/<project>/Evidence/contributors.yml` | `templates/init/project-contributors.template.yml` |
|
|
56
|
+
| `<engagement-root>/<project>/Evidence/<alias>/.settings.yml` | `templates/init/project-user-settings.template.yml` |
|
|
57
|
+
|
|
58
|
+
Optional (only if user enables CRM/ADO):
|
|
59
|
+
|
|
60
|
+
| Live file | Template source |
|
|
61
|
+
|---|---|
|
|
62
|
+
| `<engagement-root>/.project-evidence/crm/config.yml` | `templates/init/crm-config.template.yml` |
|
|
63
|
+
| `<engagement-root>/.project-evidence/ado/config.yml` | `templates/init/ado-config.template.yml` |
|
|
64
|
+
|
|
65
|
+
### Step 3 — Project folder scaffold
|
|
66
|
+
|
|
67
|
+
Create the project folder structure (per `engagement-root-resolution.instructions.md`):
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
<engagement-root>/<project>/
|
|
71
|
+
integrations.yml
|
|
72
|
+
Evidence/
|
|
73
|
+
run-log.yml ← initial: empty watermarks
|
|
74
|
+
contributors.yml
|
|
75
|
+
<alias>/.settings.yml
|
|
76
|
+
State/ ← FULL PROFILE ONLY
|
|
77
|
+
00_overview.md 01_decisions.md 02_stakeholders.md
|
|
78
|
+
03_architecture-and-solution.md 04_workshops-and-key-meetings.md
|
|
79
|
+
05_action-items.md 06_risks-and-issues.md
|
|
80
|
+
07_timeline-and-milestones.md 08_artifacts-and-deliverables.md
|
|
81
|
+
09_open-questions.md
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
The `State/` subtree is created **only on `full` profile**. On `standard`, only `Evidence/` is scaffolded. State files (when scaffolded) come from `templates/state/*.template.md`.
|
|
85
|
+
|
|
86
|
+
### Step 4 — Initial pull (last 30 days)
|
|
87
|
+
|
|
88
|
+
Dispatch to each enabled per-source skill with `--window last 30 days`:
|
|
89
|
+
|
|
90
|
+
1. `pull-email`
|
|
91
|
+
2. `pull-teams`
|
|
92
|
+
3. `pull-meetings`
|
|
93
|
+
4. `pull-onenote`
|
|
94
|
+
5. `pull-sharepoint`
|
|
95
|
+
6. `pull-crm` (if enabled)
|
|
96
|
+
7. `pull-ado` (if enabled)
|
|
97
|
+
|
|
98
|
+
Each produces snapshot/ + stream/ output per `snapshot-vs-stream.instructions.md`.
|
|
99
|
+
|
|
100
|
+
### Step 5 — Consolidate (single contributor = no-op)
|
|
101
|
+
|
|
102
|
+
If multiple contributors already exist, dispatch `consolidate-evidence`. For first-time bootstrap (one user), skip.
|
|
103
|
+
|
|
104
|
+
### Step 6 — Build state (FULL PROFILE ONLY)
|
|
105
|
+
|
|
106
|
+
If `kushi-install.json#profile` is `full` → dispatch `build-state` to render `State/*.md` from the freshly-pulled Evidence.
|
|
107
|
+
|
|
108
|
+
If `standard` (or `core`) → **skip this step**. Note in the run summary: *"State/ rollup skipped (profile = `standard`). To enable, re-install with `npx github:gim-home/kushi --clawpilot --profile full --force`."*
|
|
109
|
+
|
|
110
|
+
### Step 7 — Verify + summary
|
|
111
|
+
|
|
112
|
+
Per `side-by-side-config.instructions.md` "Verification" rule, list all live config files (path + size + last-write time). Show:
|
|
113
|
+
- SETUP summary table
|
|
114
|
+
- Side-by-side config table (templates ↔ live files)
|
|
115
|
+
- Per-source pull table (snapshot count + stream weeks covered)
|
|
116
|
+
- New Open Questions count
|
|
117
|
+
|
|
118
|
+
End with a one-liner pointing at Q&A:
|
|
119
|
+
|
|
120
|
+
> ✅ `<project>` is bootstrapped. You can now ask questions naturally — e.g. *"what's the status of `<project>`?"*, *"who is the EM on `<project>`?"*, *"what's the MACC for `<project>`?"*. No `@Kushi ask` prefix needed; the `ask-project` skill auto-dispatches when a project name + question is detected.
|
|
121
|
+
|
|
122
|
+
## Triggers
|
|
123
|
+
|
|
124
|
+
- "bootstrap a new project"
|
|
125
|
+
- "set up project evidence for `<name>`"
|
|
126
|
+
- "add me to project `<name>`"
|
|
127
|
+
- "I'm new to `<name>`, set me up"
|
|
128
|
+
- "do it all for `<name>`" (when project has no Evidence/ folder yet)
|
|
129
|
+
- "redo onboarding for `<name>`" (forces re-prompt of all config questions)
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
---
|
|
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."
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Skill: build-state
|
|
8
|
+
|
|
9
|
+
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
|
+
|
|
11
|
+
## Inputs
|
|
12
|
+
|
|
13
|
+
- `<project>` — already-bootstrapped project.
|
|
14
|
+
|
|
15
|
+
## Steps
|
|
16
|
+
|
|
17
|
+
### Step 1 — Read all Evidence
|
|
18
|
+
|
|
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).
|
|
22
|
+
- Walk `Evidence/_Consolidated/**/*.md` (multi-user merged where present).
|
|
23
|
+
|
|
24
|
+
### Step 2 — For each State file (00–08), regenerate
|
|
25
|
+
|
|
26
|
+
| State file | Pulls primarily from |
|
|
27
|
+
|---|---|
|
|
28
|
+
| 00_overview.md | snapshot/CRM/<id>.md, snapshot/sharepoint/files/*overview*.md, snapshot/onenote/pages/*overview*.md |
|
|
29
|
+
| 01_decisions.md | stream/meetings/* (decision lines), stream/teams/* (decision lines), stream/email/* (decision lines), snapshot/ado/items/* (state changes) |
|
|
30
|
+
| 02_stakeholders.md | snapshot/teams/chat-roster.md, snapshot/crm/<id>.md (engagement contacts), stream/email/* (sender/recipient analysis) |
|
|
31
|
+
| 03_architecture-and-solution.md | snapshot/onenote/pages/*architecture*.md, snapshot/sharepoint/files/*arch*.md, stream/meetings/* (arch discussions) |
|
|
32
|
+
| 04_workshops-and-key-meetings.md | snapshot/meetings/series-index.md, stream/meetings/* (per-meeting blocks) |
|
|
33
|
+
| 05_action-items.md | stream/meetings/* (action lines), stream/teams/* (action lines), snapshot/ado/items/* |
|
|
34
|
+
| 06_risks-and-issues.md | stream/meetings/* (risk lines), stream/email/* (escalations), snapshot/ado/items/* (risk-tagged) |
|
|
35
|
+
| 07_timeline-and-milestones.md | snapshot/crm/<id>.md (milestones), snapshot/ado/items/* (iterations), stream/meetings/* (date commits) |
|
|
36
|
+
| 08_artifacts-and-deliverables.md | snapshot/sharepoint/tree.md + files/*, snapshot/onenote/pages/* |
|
|
37
|
+
|
|
38
|
+
### Step 3 — Conflict resolution
|
|
39
|
+
|
|
40
|
+
- Latest fact wins on conflicts (compare `as of YYYY-MM-DD` snapshots and stream event timestamps).
|
|
41
|
+
- Preserve superseded values via `Supersedes:` line under the new entry.
|
|
42
|
+
- Each State file ends with a `## Conflicts` section listing every superseded value with both citations.
|
|
43
|
+
|
|
44
|
+
### Step 4 — Citation density
|
|
45
|
+
|
|
46
|
+
Per `citation-ledger.instructions.md`: every assertion in every State file MUST have an inline citation. Snapshot citations use `as of YYYY-MM-DD`; stream citations use `· YYYY-MM-DD`. Where a fact is BOTH "currently true" AND "decided on date X", cite both.
|
|
47
|
+
|
|
48
|
+
### Step 5 — Open Questions (mandatory every run)
|
|
49
|
+
|
|
50
|
+
Update `<project>/State/09_open-questions.md`:
|
|
51
|
+
- Scan new evidence for items that are conflicting, second-hand, low-fidelity, or that prompt a follow-up question → add as new `Q-NNN` rows under 🔴 Open / 🟡 Partial. Set Fidelity (Low/Medium/High), Category, Source, Asked Of, Needed By.
|
|
52
|
+
- For every existing 🔴/🟡 row, check if new evidence answers it. If yes: flip to 🟢 Resolved, fill Answer + Source of Answer + Resolved On, fold the answer into the appropriate State file (00–08), record path in **Folded Into**. Never delete rows.
|
|
53
|
+
- If a question is no longer relevant (scope cut, decision overtaken), flip to ⚫ Stale with reason.
|
|
54
|
+
- Bump the file's `As of:` line. Briefly mention in run-log how many opened / partial / resolved / staled.
|
|
55
|
+
|
|
56
|
+
### Step 6 — Banner
|
|
57
|
+
|
|
58
|
+
Top of every State file:
|
|
59
|
+
|
|
60
|
+
```markdown
|
|
61
|
+
> _As of: YYYY-MM-DD HH:mm. Regenerated by @Kushi build-state. Source: Evidence/ snapshots + streams._
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Triggers
|
|
65
|
+
|
|
66
|
+
- "regenerate state for `<X>`"
|
|
67
|
+
- "rebuild state"
|
|
68
|
+
- "@Kushi state `<X>`"
|
|
69
|
+
- "re-render State after I fixed `<file>`"
|