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,82 @@
|
|
|
1
|
+
# 04 · Mobilization Readiness Checklist — {{project_name}}
|
|
2
|
+
|
|
3
|
+
> **Bundle file 04 of 07.** Gating view for **mobilization readiness** — can the crew start on day 0 once approval is given?
|
|
4
|
+
>
|
|
5
|
+
> **NOT the same as stage-readiness.** Stage-readiness (separate `fde-report stage-readiness` shape) asks "should we advance the stage?" — mobilization readiness asks "if we got approval today, could the crew actually start?"
|
|
6
|
+
>
|
|
7
|
+
> **Generated by:** Kushi `fde-triage` v{{kushi_version}} on {{generated_at}}.
|
|
8
|
+
|
|
9
|
+
{{freshness_warning_block}}
|
|
10
|
+
|
|
11
|
+
## Overall verdict
|
|
12
|
+
|
|
13
|
+
**{{mobilization_verdict}}**
|
|
14
|
+
|
|
15
|
+
| Verdict | Meaning |
|
|
16
|
+
|---|---|
|
|
17
|
+
| READY-TO-MOBILIZE | All Hard items ✅ + ≥ 80% of Soft items ✅. Crew can start on day 0. |
|
|
18
|
+
| MOBILIZE-WITH-CAVEATS | All Hard items ✅, but some Soft items ⚠️ or ❓. Document caveats. |
|
|
19
|
+
| BLOCKED | ≥ 1 Hard item ❌ or ❓. Cannot mobilize until resolved. |
|
|
20
|
+
|
|
21
|
+
This engagement: **Hard items {{hard_pass}}/{{hard_total}}** · **Soft items {{soft_pass}}/{{soft_total}}**.
|
|
22
|
+
|
|
23
|
+
## Hard items (all required for mobilization)
|
|
24
|
+
|
|
25
|
+
| # | Item | Status | Evidence | Owner | Source |
|
|
26
|
+
|---|---|---|---|---|---|
|
|
27
|
+
| 1 | Executive sponsor identified and committed | {{h1_status}} | {{h1_evidence}} | {{h1_owner}} | {{h1_source}} |
|
|
28
|
+
| 2 | Customer dev team named (≥ 1 dev, ≥ 1 PM) | {{h2_status}} | {{h2_evidence}} | {{h2_owner}} | {{h2_source}} |
|
|
29
|
+
| 3 | Outcome hypothesis written and agreed | {{h3_status}} | {{h3_evidence}} | {{h3_owner}} | {{h3_source}} |
|
|
30
|
+
| 4 | Quantified success criteria (≥ 2 KPIs with numeric targets + baseline) | {{h4_status}} | {{h4_evidence}} | {{h4_owner}} | {{h4_source}} |
|
|
31
|
+
| 5 | Funding model agreed (MACC / ECIF / billable — line of sight to $) | {{h5_status}} | {{h5_evidence}} | {{h5_owner}} | {{h5_source}} |
|
|
32
|
+
| 6 | CWAA / contracting in place or path to in-place < 30 days | {{h6_status}} | {{h6_evidence}} | {{h6_owner}} | {{h6_source}} |
|
|
33
|
+
| 7 | Catcher team identified (who owns outcome after FDE leaves) | {{h7_status}} | {{h7_evidence}} | {{h7_owner}} | {{h7_source}} |
|
|
34
|
+
| 8 | Azure / MS platform commitment confirmed | {{h8_status}} | {{h8_evidence}} | {{h8_owner}} | {{h8_source}} |
|
|
35
|
+
|
|
36
|
+
## Soft items (preferred but not blocking)
|
|
37
|
+
|
|
38
|
+
| # | Item | Status | Evidence | Source |
|
|
39
|
+
|---|---|---|---|---|
|
|
40
|
+
| 1 | Azure landing zone provisioned | {{s1_status}} | {{s1_evidence}} | {{s1_source}} |
|
|
41
|
+
| 2 | Data access path identified (lake / Fabric / pipelines) | {{s2_status}} | {{s2_evidence}} | {{s2_source}} |
|
|
42
|
+
| 3 | Existing PoC or pre-work that informs scope | {{s3_status}} | {{s3_evidence}} | {{s3_source}} |
|
|
43
|
+
| 4 | Industry team alignment confirmed | {{s4_status}} | {{s4_evidence}} | {{s4_source}} |
|
|
44
|
+
| 5 | PG / product team aware (if relevant) | {{s5_status}} | {{s5_evidence}} | {{s5_source}} |
|
|
45
|
+
| 6 | Customer's own ROI estimate documented | {{s6_status}} | {{s6_evidence}} | {{s6_source}} |
|
|
46
|
+
| 7 | Value realization plan with checkpoints (30/60/90 day) | {{s7_status}} | {{s7_evidence}} | {{s7_source}} |
|
|
47
|
+
| 8 | Reusable-pattern flag set (industry-defining / frontier) | {{s8_status}} | {{s8_evidence}} | {{s8_source}} |
|
|
48
|
+
|
|
49
|
+
## Legend
|
|
50
|
+
|
|
51
|
+
- ✅ Met — evidence supports
|
|
52
|
+
- ⚠️ Partial — evidence supports some not all
|
|
53
|
+
- ❌ Not met — evidence does NOT support
|
|
54
|
+
- ❓ Unknown — evidence does not address
|
|
55
|
+
|
|
56
|
+
## Blockers to mobilization
|
|
57
|
+
|
|
58
|
+
(Sorted by Hard items first.)
|
|
59
|
+
|
|
60
|
+
{{blockers_block}}
|
|
61
|
+
|
|
62
|
+
## Required actions to reach READY-TO-MOBILIZE
|
|
63
|
+
|
|
64
|
+
| # | Action | Owner | By when | Hard/Soft |
|
|
65
|
+
|---|---|---|---|---|
|
|
66
|
+
{{required_actions_rows}}
|
|
67
|
+
|
|
68
|
+
## Open questions
|
|
69
|
+
|
|
70
|
+
{{open_questions_block}}
|
|
71
|
+
|
|
72
|
+
## Validation warnings (this file only)
|
|
73
|
+
|
|
74
|
+
{{validation_warnings_block}}
|
|
75
|
+
|
|
76
|
+
## Source coverage
|
|
77
|
+
|
|
78
|
+
{{source_coverage_block}}
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
> _For "should we advance to the next FDE stage?" use the `stage-readiness` report shape instead — different question._
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# 05 · Executive Consolidated Report — {{project_name}}
|
|
2
|
+
|
|
3
|
+
> **Bundle file 05 of 07.** Leadership-friendly combined readout. The single file an exec should read if they only read one.
|
|
4
|
+
> **Generated by:** Kushi `fde-triage` v{{kushi_version}} on {{generated_at}}.
|
|
5
|
+
|
|
6
|
+
{{freshness_warning_block}}
|
|
7
|
+
|
|
8
|
+
## Executive Summary
|
|
9
|
+
|
|
10
|
+
{{executive_summary_paragraph}}
|
|
11
|
+
|
|
12
|
+
### Key decisions requested from leadership
|
|
13
|
+
|
|
14
|
+
{{decisions_requested_list}}
|
|
15
|
+
|
|
16
|
+
### Recommendation
|
|
17
|
+
|
|
18
|
+
**{{overall_recommendation}}** — {{recommendation_one_liner}}
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## At a glance
|
|
23
|
+
|
|
24
|
+
<table>
|
|
25
|
+
<tbody>
|
|
26
|
+
<tr><th>Customer</th><td>{{customer_name}}</td><th>Engagement</th><td>{{engagement_title}}</td></tr>
|
|
27
|
+
<tr><th>FDE stage</th><td>{{current_stage}}</td><th>FDE fit</th><td>{{fit_overall}}</td></tr>
|
|
28
|
+
<tr><th>Mobilization readiness</th><td>{{mobilization_verdict}}</td><th>Top risk</th><td>{{top_risk_short}}</td></tr>
|
|
29
|
+
<tr><th>Customer ROI / yr</th><td>{{customer_roi}}</td><th>Expected MS ACR</th><td>{{acr_expected}}</td></tr>
|
|
30
|
+
<tr><th>MACC</th><td>{{macc_summary}}</td><th>Catcher team</th><td>{{catcher_team}}</td></tr>
|
|
31
|
+
</tbody>
|
|
32
|
+
</table>
|
|
33
|
+
|
|
34
|
+
## What FDE is being asked to do
|
|
35
|
+
|
|
36
|
+
{{ask_summary}}
|
|
37
|
+
|
|
38
|
+
## The outcome hypothesis
|
|
39
|
+
|
|
40
|
+
> {{outcome_hypothesis}}
|
|
41
|
+
|
|
42
|
+
## Why FDE here, and not <alternative>
|
|
43
|
+
|
|
44
|
+
{{why_fde_vs_alternative}}
|
|
45
|
+
|
|
46
|
+
## Top 3 strengths of this engagement
|
|
47
|
+
|
|
48
|
+
1. {{strength_1}}
|
|
49
|
+
2. {{strength_2}}
|
|
50
|
+
3. {{strength_3}}
|
|
51
|
+
|
|
52
|
+
## Top 3 risks / concerns
|
|
53
|
+
|
|
54
|
+
1. {{risk_1}}
|
|
55
|
+
2. {{risk_2}}
|
|
56
|
+
3. {{risk_3}}
|
|
57
|
+
|
|
58
|
+
## Asks of leadership
|
|
59
|
+
|
|
60
|
+
{{leadership_asks}}
|
|
61
|
+
|
|
62
|
+
## Companion files in this bundle
|
|
63
|
+
|
|
64
|
+
- `00-fde-analysis.md` — full analysis
|
|
65
|
+
- `01-fde-fitness.md` — 10-criterion scorecard
|
|
66
|
+
- `02-risk-analysis.md` — full risk view
|
|
67
|
+
- `03-6Q.md` — engagement framing
|
|
68
|
+
- `04-readiness-checklist.md` — mobilization readiness
|
|
69
|
+
- `06-global-opportunity-and-reuse.md` — repeatability lens
|
|
70
|
+
- `07-validation-warnings-checklist.md` — open warnings tracker
|
|
71
|
+
|
|
72
|
+
## Validation warnings (this file only — full list in `07-`)
|
|
73
|
+
|
|
74
|
+
{{validation_warnings_block}}
|
|
75
|
+
|
|
76
|
+
## Source coverage
|
|
77
|
+
|
|
78
|
+
{{source_coverage_block}}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# 06 · Global Opportunity & Reuse — {{project_name}}
|
|
2
|
+
|
|
3
|
+
> **Bundle file 06 of 07.** Repeatability, reuse, and commercialization view. Grounded in project Evidence plus public context where the broader-opportunity lens applies.
|
|
4
|
+
> **Generated by:** Kushi `fde-triage` v{{kushi_version}} on {{generated_at}}.
|
|
5
|
+
|
|
6
|
+
{{freshness_warning_block}}
|
|
7
|
+
|
|
8
|
+
## Is this engagement pattern reusable?
|
|
9
|
+
|
|
10
|
+
**{{reusability_verdict}}** — {{reusability_one_liner}}
|
|
11
|
+
|
|
12
|
+
| Verdict | Meaning |
|
|
13
|
+
|---|---|
|
|
14
|
+
| HIGH-REUSE | Pattern repeats across ≥ 5 known customers in same industry / use case. Strong PG accelerator candidate. |
|
|
15
|
+
| MEDIUM-REUSE | Pattern likely repeats across 2–4 customers. Worth a reusable accelerator after this engagement. |
|
|
16
|
+
| LOW-REUSE | Custom to this one customer. Unlikely to inform a broader pattern. |
|
|
17
|
+
| UNKNOWN | Insufficient evidence to assess. |
|
|
18
|
+
|
|
19
|
+
## Industry / segment lens
|
|
20
|
+
|
|
21
|
+
| Field | Value | Source |
|
|
22
|
+
|---|---|---|
|
|
23
|
+
| Industry | {{industry}} | {{industry_source}} |
|
|
24
|
+
| Sub-segment | {{sub_segment}} | {{sub_segment_source}} |
|
|
25
|
+
| Customer size (revenue / employees) | {{customer_size}} | {{customer_size_source}} |
|
|
26
|
+
| Geography | {{geography}} | {{geography_source}} |
|
|
27
|
+
|
|
28
|
+
## Pattern description
|
|
29
|
+
|
|
30
|
+
{{pattern_paragraph}}
|
|
31
|
+
|
|
32
|
+
## Similar customers / similar problems we know of
|
|
33
|
+
|
|
34
|
+
| Customer | How similar | Status (FDE / partner / un-engaged) | Source |
|
|
35
|
+
|---|---|---|---|
|
|
36
|
+
{{similar_customers_rows}}
|
|
37
|
+
|
|
38
|
+
(If from public context, cite the public source URL.)
|
|
39
|
+
|
|
40
|
+
## Reusable artifacts this engagement could produce
|
|
41
|
+
|
|
42
|
+
| Artifact | Reuse target | Description |
|
|
43
|
+
|---|---|---|
|
|
44
|
+
{{reusable_artifacts_rows}}
|
|
45
|
+
|
|
46
|
+
## Commercial opportunity at scale
|
|
47
|
+
|
|
48
|
+
If this pattern repeats across N similar customers:
|
|
49
|
+
|
|
50
|
+
- Estimated TAM (Microsoft ACR uplift): {{tam_acr}}
|
|
51
|
+
- Estimated number of similar customers: {{n_similar}}
|
|
52
|
+
- Source for sizing: {{tam_source}}
|
|
53
|
+
|
|
54
|
+
## PG / accelerator handoff candidates
|
|
55
|
+
|
|
56
|
+
| PG team / accelerator | Why this engagement is relevant | Source |
|
|
57
|
+
|---|---|---|
|
|
58
|
+
{{pg_handoff_rows}}
|
|
59
|
+
|
|
60
|
+
## Risks to reuse
|
|
61
|
+
|
|
62
|
+
{{reuse_risks_block}}
|
|
63
|
+
|
|
64
|
+
## Validation warnings (this file only)
|
|
65
|
+
|
|
66
|
+
{{validation_warnings_block}}
|
|
67
|
+
|
|
68
|
+
## Source coverage
|
|
69
|
+
|
|
70
|
+
{{source_coverage_block}}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# 07 · Validation Warnings Checklist — {{project_name}}
|
|
2
|
+
|
|
3
|
+
> **Bundle file 07 of 07.** Central tracker of every validation warning across the triage bundle.
|
|
4
|
+
> Warnings are mirrored here verbatim from companion files; updates to status (open / resolved / not-applicable) live here.
|
|
5
|
+
>
|
|
6
|
+
> **Generated by:** Kushi `fde-triage` v{{kushi_version}} on {{generated_at}}.
|
|
7
|
+
|
|
8
|
+
## Summary
|
|
9
|
+
|
|
10
|
+
| Status | Count |
|
|
11
|
+
|---|---|
|
|
12
|
+
| 🔴 Open | {{count_open}} |
|
|
13
|
+
| 🟢 Resolved | {{count_resolved}} |
|
|
14
|
+
| ⚪ Not applicable | {{count_na}} |
|
|
15
|
+
|
|
16
|
+
**Total warnings across bundle:** {{count_total}}
|
|
17
|
+
|
|
18
|
+
## Open warnings (blockers / action-needed)
|
|
19
|
+
|
|
20
|
+
| # | Bundle file | Rule | Description | Status | Owner | Action |
|
|
21
|
+
|---|---|---|---|---|---|---|
|
|
22
|
+
{{open_warnings_rows}}
|
|
23
|
+
|
|
24
|
+
## Resolved warnings
|
|
25
|
+
|
|
26
|
+
| # | Bundle file | Rule | Description | Resolved on | Resolution note |
|
|
27
|
+
|---|---|---|---|---|---|
|
|
28
|
+
{{resolved_warnings_rows}}
|
|
29
|
+
|
|
30
|
+
## Not-applicable warnings
|
|
31
|
+
|
|
32
|
+
| # | Bundle file | Rule | Description | Justification for NA |
|
|
33
|
+
|---|---|---|---|---|
|
|
34
|
+
{{na_warnings_rows}}
|
|
35
|
+
|
|
36
|
+
## Rule reference
|
|
37
|
+
|
|
38
|
+
[Source: reference-packs/fde/report-doctrine.md · packaged]
|
|
39
|
+
|
|
40
|
+
| Rule | Title |
|
|
41
|
+
|---|---|
|
|
42
|
+
| Rule 1.1 | Source resolution gate skipped for a required path |
|
|
43
|
+
| Rule 1.2 | Source attempted-failed for a path material to a claim |
|
|
44
|
+
| Rule 2.1 | Recency precedence violated (newer source ignored, older quoted) |
|
|
45
|
+
| Rule 3.1 | CRM field value reported as confirmed fact without customer cross-check |
|
|
46
|
+
| Rule 3.2 | CRM disagrees with latest customer-facing source |
|
|
47
|
+
| Rule 4.1 | Required role (ATU rep, Industry rep) missing |
|
|
48
|
+
| Rule 4.2 | Required commercial fact missing |
|
|
49
|
+
| Rule 4.3 | Required outcome metric (KPI, baseline, target) missing |
|
|
50
|
+
| Rule 5.1 | Stage claim not supported by stage gate / exit criteria |
|
|
51
|
+
| Rule 5.2 | FDE fit claim not grounded against the 10-row fitness checklist |
|
|
52
|
+
| Rule 6.1 | Customer engagement legal posture (CWAA / EMA / contract) absent |
|
|
53
|
+
| Rule 8.1 | Paragraph lacks inline `[source: …]` citation |
|
|
54
|
+
| Rule 9.1 | Other unresolved gap (free-text) |
|
|
55
|
+
|
|
56
|
+
## How to update this file
|
|
57
|
+
|
|
58
|
+
This file is **regenerated** every time `@Kushi fde-triage <project>` runs. To preserve status changes (open → resolved, NA justifications), edit and re-save **before** re-running triage — `fde-triage` merges existing status when found.
|
|
59
|
+
|
|
60
|
+
Or update individual warnings inline in the source bundle file (00 — 06) and re-run.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Azure DevOps connection — per-user filled. Lives at:
|
|
2
|
+
# <engagement-root>/.project-evidence/ado/config.yml
|
|
3
|
+
# NOT in repo. NOT in `.kushi/`.
|
|
4
|
+
|
|
5
|
+
tenantId: "72f988bf-86f1-41af-91ab-2d7cd011db47" # Microsoft tenant
|
|
6
|
+
organization: "https://dev.azure.com/<your-org>"
|
|
7
|
+
defaultProject: "<your-default-ado-project>"
|
|
8
|
+
apiVersion: "7.1"
|
|
9
|
+
|
|
10
|
+
# ADO scope GUID — fixed across tenants
|
|
11
|
+
azDevOpsResourceId: "499b84ac-1321-427f-aa17-267ca6975798"
|
|
12
|
+
|
|
13
|
+
# Saved queries / area paths can be overridden per project in
|
|
14
|
+
# <engagement-root>/<project>/integrations.yml under `ado:`
|
|
15
|
+
defaults:
|
|
16
|
+
queryId: ""
|
|
17
|
+
areaPath: ""
|
|
18
|
+
iterationPath: ""
|
|
19
|
+
|
|
20
|
+
auth:
|
|
21
|
+
strategy: "az-cli"
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# CRM (Dataverse) connection — per-user filled. Lives at:
|
|
2
|
+
# <engagement-root>/.project-evidence/crm/config.yml
|
|
3
|
+
# NOT in repo. NOT in `.kushi/`.
|
|
4
|
+
|
|
5
|
+
tenantId: "72f988bf-86f1-41af-91ab-2d7cd011db47" # Microsoft tenant
|
|
6
|
+
environmentUrl: "https://<your-org>.crm.dynamics.com"
|
|
7
|
+
apiVersion: "9.2"
|
|
8
|
+
|
|
9
|
+
# Default entity to query. Override per project in
|
|
10
|
+
# <engagement-root>/<project>/integrations.yml
|
|
11
|
+
defaultEntitySet: "msdyn_engagements"
|
|
12
|
+
|
|
13
|
+
# Authentication strategy. Currently only "az-cli" supported.
|
|
14
|
+
# kushi will run: az account get-access-token --resource <environmentUrl> --tenant <tenantId>
|
|
15
|
+
auth:
|
|
16
|
+
strategy: "az-cli"
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://kushi.dev/schemas/projects.v2.json",
|
|
3
|
+
"_comment": "Project list consumed by the Clawpilot automation 'Kushi weekly refresh'. Copy this template to ~/.copilot/kushi-projects.json and edit `projects[]`. Per project: set `force_refresh: true` to force a full re-pull on the NEXT run (ignores the run-log watermark) — the automation flips it back to false after a successful run. Set `mode: \"aggregate\"` for Evidence-only (pull + consolidate, no State/ rebuild) or `\"refresh\"` (default; pull + consolidate + build-state). The `aggregate` mode requires Kushi installed with the `core` profile or higher. To trigger on demand, set the flag(s) and tell Clawpilot 'kushi run again now' — it will call m_run_automation_now on the weekly automation.",
|
|
4
|
+
"version": 2,
|
|
5
|
+
"defaults": {
|
|
6
|
+
"force_refresh": false,
|
|
7
|
+
"window_days": 7,
|
|
8
|
+
"mode": "refresh"
|
|
9
|
+
},
|
|
10
|
+
"projects": [
|
|
11
|
+
{ "name": "<ProjectA>", "mode": "refresh", "force_refresh": false },
|
|
12
|
+
{ "name": "<ProjectB>", "mode": "aggregate", "force_refresh": false }
|
|
13
|
+
]
|
|
14
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_meta": {
|
|
3
|
+
"owner": "<alias>@microsoft.com",
|
|
4
|
+
"purpose": "STABLE per-user M365 defaults for Microsoft consultants. Tenant is Microsoft corp by default. Edit by hand only when defaults change. NOT auto-overwritten by skill runs.",
|
|
5
|
+
"consumers": ["project-evidence skill", "any future M365-context skill"],
|
|
6
|
+
"audience": "Microsoft internal — Industry Solutions Engineering and adjacent teams",
|
|
7
|
+
"schema_version": "1.0",
|
|
8
|
+
"last_reviewed": "<YYYY-MM-DD>"
|
|
9
|
+
},
|
|
10
|
+
"m365Auth": {
|
|
11
|
+
"defaultTenantId": "72f988bf-86f1-41af-91ab-2d7cd011db47",
|
|
12
|
+
"resources": {
|
|
13
|
+
"graph": "https://graph.microsoft.com",
|
|
14
|
+
"sharePoint": "https://microsoft-my.sharepoint.com",
|
|
15
|
+
"dataverse": "https://iscrm.crm.dynamics.com"
|
|
16
|
+
},
|
|
17
|
+
"oneNote": {
|
|
18
|
+
"defaultNotebookName": "",
|
|
19
|
+
"defaultNotebookId": "",
|
|
20
|
+
"defaultSectionResolverUrl": "",
|
|
21
|
+
"defaultNotebookRootLink": "",
|
|
22
|
+
"defaultLinkOwner": ""
|
|
23
|
+
},
|
|
24
|
+
"emailContext": {
|
|
25
|
+
"enabled": true,
|
|
26
|
+
"dateFloor": "",
|
|
27
|
+
"folders": [],
|
|
28
|
+
"includeSubfolders": true,
|
|
29
|
+
"sourceCoverageLabel": "",
|
|
30
|
+
"matchingPolicy": {
|
|
31
|
+
"mode": "hybrid",
|
|
32
|
+
"rankingOrder": ["exact", "prefix", "contains"],
|
|
33
|
+
"minConfidenceForFolderScopedSearch": "high",
|
|
34
|
+
"fallbackToFullRootScanWhenAmbiguous": true,
|
|
35
|
+
"alwaysFuzzy": true
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
"teamsChatContext": {
|
|
39
|
+
"enabled": true,
|
|
40
|
+
"dateFloor": "",
|
|
41
|
+
"scope": { "includeChats": true, "includeChannels": true },
|
|
42
|
+
"matchingPolicy": {
|
|
43
|
+
"mode": "thread-first",
|
|
44
|
+
"rankingOrder": ["exact", "prefix", "contains"],
|
|
45
|
+
"fallbackToBroaderSearchWhenAmbiguous": true,
|
|
46
|
+
"alwaysFuzzy": true
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
"calendarContext": {
|
|
50
|
+
"enabled": true,
|
|
51
|
+
"matchingPolicy": {
|
|
52
|
+
"mode": "subject-and-body-keywords",
|
|
53
|
+
"rankingOrder": ["exact", "prefix", "contains"],
|
|
54
|
+
"alwaysFuzzy": true
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
"sharePointContext": {
|
|
58
|
+
"enabled": true,
|
|
59
|
+
"localProjectsRoot": "",
|
|
60
|
+
"matchingPolicy": {
|
|
61
|
+
"mode": "fuzzy-folder-name",
|
|
62
|
+
"rankingOrder": ["exact", "prefix", "contains"],
|
|
63
|
+
"alwaysFuzzy": true
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_meta": {
|
|
3
|
+
"owner": "<alias>@microsoft.com",
|
|
4
|
+
"purpose": "MUTABLE per-project operational mappings (Microsoft internal). Auto-updated by the project-evidence skill at the end of every weekly run when high-confidence hints are discovered. Safe to hand-edit. New project entries are added under m365Mutable.knownSections during B2 bootstrap and populated incrementally as the skill discovers folders, sections, chats, etc.",
|
|
5
|
+
"audience": "Microsoft internal",
|
|
6
|
+
"matching": "case-insensitive on project key (exact > prefix > contains); fuzzy match always on",
|
|
7
|
+
"schema_version": "1.0",
|
|
8
|
+
"last_updated": "<YYYY-MM-DD>"
|
|
9
|
+
},
|
|
10
|
+
"m365Mutable": {
|
|
11
|
+
"metadata": {
|
|
12
|
+
"description": "Mutable M365 operational mappings used to speed and stabilize context retrieval.",
|
|
13
|
+
"defaultNotebookRef": "../m365/m365-auth.json -> m365Auth.oneNote.defaultNotebookId",
|
|
14
|
+
"matching": "case-insensitive by project key (exact/prefix/contains)",
|
|
15
|
+
"source": "Derived from project folder names, mailbox/Teams/OneNote discovery during bootstrap/refresh/retry runs."
|
|
16
|
+
},
|
|
17
|
+
"knownSections": {}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Contributors to the {{PROJECT_NAME}} project Evidence folder.
|
|
2
|
+
# Each contributor owns a subfolder named after their alias and is responsible for
|
|
3
|
+
# their own per-source extracts (Email, Teams-Chats, OneNote, Meetings).
|
|
4
|
+
# SharePoint extracts can be produced by any contributor (folder is shared).
|
|
5
|
+
|
|
6
|
+
project: {{PROJECT_NAME}}
|
|
7
|
+
project_folder: {{PROJECT_FOLDER_PATH}}
|
|
8
|
+
week_definition: Monday-Sunday
|
|
9
|
+
|
|
10
|
+
contributors:
|
|
11
|
+
- alias: {{alias}}
|
|
12
|
+
name: {{Full Name}}
|
|
13
|
+
email: {{email@domain.com}}
|
|
14
|
+
role: {{role}}
|
|
15
|
+
sources_owned: [Email, Teams-Chats, OneNote, SharePoint, Meetings]
|
|
16
|
+
last_run: null
|
|
17
|
+
notes: ""
|
|
18
|
+
|
|
19
|
+
consolidation:
|
|
20
|
+
output_folder: _Consolidated
|
|
21
|
+
cadence: weekly
|
|
22
|
+
owner: {{alias}} # the person who runs the merge step
|
|
23
|
+
rules:
|
|
24
|
+
- Union decisions, action items, open questions; de-duplicate by semantic match.
|
|
25
|
+
- Tag every fact with [source: <alias>/<source-folder>] for provenance.
|
|
26
|
+
- Surface conflicts in a "Conflicts / Discrepancies" section rather than silently picking one.
|
|
27
|
+
- Do NOT include other contributors' raw mailbox/chat content the consolidator can't see; rely on their summaries.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Personal config for Kushi.
|
|
2
|
+
# Copy to: ~/.copilot/project-evidence.yml (Linux/macOS)
|
|
3
|
+
# %USERPROFILE%\.copilot\project-evidence.yml (Windows)
|
|
4
|
+
#
|
|
5
|
+
# Each team member maintains their own copy. Nothing in here is a secret,
|
|
6
|
+
# but it IS personal — never commit a filled copy to a shared repo.
|
|
7
|
+
|
|
8
|
+
# Short id used as your evidence subfolder name (e.g. "alex", "jordan").
|
|
9
|
+
alias: <your-alias>
|
|
10
|
+
|
|
11
|
+
display_name: <Your Full Name>
|
|
12
|
+
email: your.email@example.com
|
|
13
|
+
|
|
14
|
+
# Where your engagement-root lives — i.e. the parent folder that contains
|
|
15
|
+
# one subfolder per project (typically synced from a team SharePoint library).
|
|
16
|
+
# Examples:
|
|
17
|
+
# Windows : 'C:\Users\<you>\OneDrive - <Tenant>\<Team>\Engagement Assets'
|
|
18
|
+
# macOS : '/Users/<you>/OneDrive - <Tenant>/<Team>/Engagement Assets'
|
|
19
|
+
projects_root: '<engagement-root>'
|
|
20
|
+
|
|
21
|
+
# Default OneNote notebook to scan for project pages.
|
|
22
|
+
default_onenote_notebook: <Your Notebook Name>
|
|
23
|
+
|
|
24
|
+
# Projects you actively work on. Kushi scans only these unless you ask otherwise.
|
|
25
|
+
# Match is fuzzy against subfolder names under projects_root.
|
|
26
|
+
active_projects:
|
|
27
|
+
- <ProjectA>
|
|
28
|
+
# - <ProjectB>
|
|
29
|
+
# - <add more here>
|
|
30
|
+
|
|
31
|
+
# (Optional) where the global integrations live, if not the default.
|
|
32
|
+
# integrations_root: '<USER_HOME>/.copilot/integrations'
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Per-project integration filter. Lives at: <project>\integrations.yml
|
|
2
|
+
# Tells the skill how to find THIS project's records in the (global) CRM and ADO.
|
|
3
|
+
# Connection / auth / field mappings are NOT here — those are global.
|
|
4
|
+
|
|
5
|
+
project: '{{PROJECT_NAME}}'
|
|
6
|
+
|
|
7
|
+
crm:
|
|
8
|
+
# Provide ONE of these:
|
|
9
|
+
record_id: '' # e.g. 00000000-0000-0000-0000-000000000000 (preferred)
|
|
10
|
+
request_id: '' # e.g. REQ-12345
|
|
11
|
+
title_contains: '{{PROJECT_NAME}}' # last-resort fuzzy
|
|
12
|
+
# Optional: override default app context
|
|
13
|
+
# app_id: 833534b8-5db0-4036-a029-4e4e4d7d4315
|
|
14
|
+
|
|
15
|
+
ado:
|
|
16
|
+
# Provide ONE primary locator (more specific = better):
|
|
17
|
+
engagement_id: 0 # ADO Engagement work item ID (preferred)
|
|
18
|
+
area_path: '' # e.g. 'IS Engagements\\<Project>'
|
|
19
|
+
tag: '' # e.g. 'noridian'
|
|
20
|
+
title_filter: '{{PROJECT_NAME}}' # used by items_changed_between WIQL
|
|
21
|
+
# Optional: ADO query you've saved
|
|
22
|
+
# query_id: ''
|
|
23
|
+
|
|
24
|
+
sharepoint:
|
|
25
|
+
# Optional online SharePoint site for this project (in addition to / instead of a local synced folder).
|
|
26
|
+
# If set, the SharePoint source pulls file metadata + activity via Graph (drives/items/lastModifiedDateTime)
|
|
27
|
+
# instead of (or in addition to) walking the local sync folder.
|
|
28
|
+
# Add via bootstrap, OR later by saying "add sharepoint <URL> to <project>".
|
|
29
|
+
sites:
|
|
30
|
+
# - url: 'https://contoso.sharepoint.com/sites/MyProject' # full site URL
|
|
31
|
+
# library: 'Documents' # document library name (default: Documents)
|
|
32
|
+
# folder: '' # optional sub-folder path inside the library
|
|
33
|
+
# include_subfolders: true
|
|
34
|
+
# recurse_depth: 5
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# Per-(project × user) settings.
|
|
2
|
+
# Lives at: <project>\Evidence\<alias>\.settings.yml
|
|
3
|
+
# Created and maintained by the bootstrap step (BOOTSTRAP.md).
|
|
4
|
+
# Anything left blank below will trigger a prompt next time the skill runs for this (project × user) pair.
|
|
5
|
+
# Nothing in here is secret — it's per-user query parameters and run state, not credentials.
|
|
6
|
+
|
|
7
|
+
project: '{{PROJECT_NAME}}'
|
|
8
|
+
alias: '{{ALIAS}}'
|
|
9
|
+
display_name: '{{FULL_NAME}}'
|
|
10
|
+
email: '{{EMAIL}}'
|
|
11
|
+
|
|
12
|
+
# ── Per-user query scope (your data only) ─────────────────────────────────────
|
|
13
|
+
mailbox:
|
|
14
|
+
folder: 'inbox' # well-known folder name or custom folder name
|
|
15
|
+
search_keywords: [] # extra search terms to OR with project name (e.g. ['MPXe','policy comments'])
|
|
16
|
+
|
|
17
|
+
teams_chats:
|
|
18
|
+
# Specific Teams chat IDs known to be project-relevant for THIS user.
|
|
19
|
+
# Leave empty to fall back to keyword search across recent chats.
|
|
20
|
+
chat_ids: [] # e.g. ['19:meeting_abc...@thread.v2']
|
|
21
|
+
search_keywords: []
|
|
22
|
+
|
|
23
|
+
onenote:
|
|
24
|
+
notebook: '{{ONENOTE_NOTEBOOK}}' # default from ~\.copilot\project-evidence.yml
|
|
25
|
+
section: '{{ONENOTE_SECTION}}' # e.g. 'Noridian.one'
|
|
26
|
+
page_filter: '' # optional substring filter
|
|
27
|
+
|
|
28
|
+
calendar:
|
|
29
|
+
organizer_filter: '' # optional — restrict to meetings organized by these emails
|
|
30
|
+
subject_keywords: [] # extra subject search terms beyond project name
|
|
31
|
+
|
|
32
|
+
sharepoint:
|
|
33
|
+
# Per-user filter on top of the project-shared sites in <project>\integrations.yml.
|
|
34
|
+
# Leave empty to include everything from the project's configured sites.
|
|
35
|
+
author_filter: [] # restrict to files authored/last-modified-by these emails (e.g. ['{{EMAIL}}'])
|
|
36
|
+
path_includes: [] # restrict to paths containing any of these substrings
|
|
37
|
+
path_excludes: ['_Archive', 'Old'] # skip paths containing these substrings
|
|
38
|
+
snapshot:
|
|
39
|
+
# Snapshot pass body-extraction depth. Tree.md ALWAYS captures full hierarchy.
|
|
40
|
+
# These knobs only control which files get a /snapshot/files/<path>.md body summary.
|
|
41
|
+
recent_n: 25 # capture body summaries for the top-N most-recently-modified files; 0 disables
|
|
42
|
+
always_include: [] # additional relative paths or substrings to always extract (e.g. ['Architecture/', 'SOW.docx'])
|
|
43
|
+
|
|
44
|
+
# ── Q&A behavior (ask-project skill) ──────────────────────────────────────────
|
|
45
|
+
chat:
|
|
46
|
+
freshness_warn_days: 14 # warn before answering if relevant source last-pulled > N days ago; never auto-refreshes
|
|
47
|
+
default_state_file: 'State/00_overview.md' # fallback file when question doesn't map to a specific State topic
|
|
48
|
+
redact_attendee_emails_in_answers: true # strip raw emails from chat answers (names OK)
|
|
49
|
+
max_files_per_answer: 8 # hard cap on files loaded per answer to keep responses focused
|
|
50
|
+
offer_refresh_on_stale: true # if stale, offer @Kushi refresh — but never auto-execute it
|
|
51
|
+
|
|
52
|
+
# ── Per-user privacy / outbound ───────────────────────────────────────────────
|
|
53
|
+
outbound:
|
|
54
|
+
allow_proactive_send: false # HARD DEFAULT: never send anything without explicit per-turn approval
|
|
55
|
+
notify_on_finding: false # if true, suggest (but do not send) outbound notifications when conflicts surface
|
|
56
|
+
preferred_review_doc: 'State/09_open-questions.md'
|
|
57
|
+
|
|
58
|
+
# ── Per-user run state ────────────────────────────────────────────────────────
|
|
59
|
+
last_runs: # populated by the skill after each run
|
|
60
|
+
email: null
|
|
61
|
+
teams_chats: null
|
|
62
|
+
onenote: null
|
|
63
|
+
sharepoint: null
|
|
64
|
+
meetings: null
|
|
65
|
+
crm: null
|
|
66
|
+
ado: null
|
|
67
|
+
|
|
68
|
+
# ── Per-user role on this project (optional) ──────────────────────────────────
|
|
69
|
+
role: '' # e.g. 'engagement lead', 'ISE engineer', 'observer'
|
|
70
|
+
sources_owned: [Email, Teams-Chats, OneNote, SharePoint, Meetings]
|
|
71
|
+
notes: ''
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
Paste-prompt template — emitted by pull-* skills when WorkIQ + retry both fail to produce
|
|
3
|
+
a thoroughness-compliant evidence file. The skill MUST customize the bracketed fields and
|
|
4
|
+
present this block verbatim to the user, then wait for paste.
|
|
5
|
+
-->
|
|
6
|
+
|
|
7
|
+
⚠️ **Thoroughness check failed for `<evidence-file-path>`**
|
|
8
|
+
|
|
9
|
+
WorkIQ returned thin content for this source even after a deeper-query retry. To meet the evidence thoroughness bar (full bodies, not just metadata), I need you to paste the source content directly.
|
|
10
|
+
|
|
11
|
+
**Failing checks:**
|
|
12
|
+
- `<check-id-1>` — `<one-line reason>`
|
|
13
|
+
- `<check-id-2>` — `<one-line reason>`
|
|
14
|
+
|
|
15
|
+
**What to paste**
|
|
16
|
+
|
|
17
|
+
For `<source>` (`<entity-name>`), open the source in `<Outlook / Teams / OneNote / SharePoint / CRM / ADO>` and paste:
|
|
18
|
+
|
|
19
|
+
- `<source-specific item 1, e.g. "Full email body of the 5 threads listed above">`
|
|
20
|
+
- `<source-specific item 2, e.g. "Reply chain for each thread, oldest → newest">`
|
|
21
|
+
- `<source-specific item 3, e.g. "Any attachments referenced">`
|
|
22
|
+
|
|
23
|
+
**Where to paste**
|
|
24
|
+
|
|
25
|
+
Paste between the markers below. I'll incorporate it into `<evidence-file-path>` and re-run the detector.
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
<<< PASTE START
|
|
29
|
+
... your paste here ...
|
|
30
|
+
PASTE END >>>
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
**Skip this entity?**
|
|
34
|
+
|
|
35
|
+
If this content genuinely isn't retrievable (deleted, permission-blocked, out of scope), reply `skip <entity-name>` and I'll mark the entry `[tree-only]` with a coverage note.
|