@synap-core/workspace-templates 0.7.1 → 0.7.3
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/dist/index.d.ts +266 -8
- package/dist/index.js +2314 -1440
- package/dist/index.js.map +1 -1
- package/package.json +4 -3
- package/src/agent-fleet.yaml +666 -108
- package/src/blockchain-ecosystem.yaml +1 -0
- package/src/brand-library.yaml +127 -12
- package/src/builder.yaml +116 -12
- package/src/business-developer.yaml +110 -18
- package/src/catalog.test.ts +2 -2
- package/src/catalog.ts +13 -3
- package/src/communication.yaml +23 -453
- package/src/composition-graph.test.ts +28 -2
- package/src/concept-guard.test.ts +176 -0
- package/src/concept-guard.ts +219 -0
- package/src/content-os.yaml +103 -10
- package/src/content-studio.yaml +1 -0
- package/src/crm.yaml +1 -0
- package/src/define.ts +8 -8
- package/src/dev-dashboard.yaml +43 -9
- package/src/domains.test.ts +117 -0
- package/src/domains.ts +102 -0
- package/src/ecosystem.yaml +25 -5
- package/src/enterprise-os.yaml +1 -0
- package/src/finance.yaml +46 -5
- package/src/foundation.yaml +13 -1
- package/src/generate.d.mts +15 -0
- package/src/generate.mjs +86 -0
- package/src/grants.yaml +1 -0
- package/src/hr.yaml +61 -8
- package/src/index.ts +40 -0
- package/src/internal-runbook.yaml +36 -5
- package/src/legal.yaml +97 -12
- package/src/life-os.yaml +188 -27
- package/src/marketing.yaml +15 -2
- package/src/meetings-knowledge.yaml +143 -23
- package/src/operations.yaml +347 -0
- package/src/outreach-comms.yaml +11 -3
- package/src/project-management.yaml +840 -111
- package/src/research-base.yaml +516 -0
- package/src/research-decision.yaml +158 -0
- package/src/shared-role-ssot.test.ts +268 -0
- package/src/social.yaml +105 -37
- package/src/templates-freshness.test.ts +55 -0
- package/src/templates.ts +4620 -4278
- package/src/the-arch.yaml +1 -0
- package/src/types.ts +9 -0
- package/src/validate.test.ts +81 -0
- package/src/validate.ts +561 -0
- package/src/personal.yaml +0 -177
|
@@ -0,0 +1,516 @@
|
|
|
1
|
+
# Research workspace template — the agnostic research substrate
|
|
2
|
+
# ============================================================================
|
|
3
|
+
# This is the BASE of the research family: the data model + the knowledge map +
|
|
4
|
+
# the one universal playbook that turns a question into a fully-recorded
|
|
5
|
+
# investigation. It is domain-agnostic on purpose — a physicist, a founder doing
|
|
6
|
+
# market research, and someone learning a subject all use the SAME kinds
|
|
7
|
+
# (field / concept / source / hypothesis / finding) and the SAME graph.
|
|
8
|
+
#
|
|
9
|
+
# The design commitment: store the research PROCESS, not just the answer. Every
|
|
10
|
+
# source the agent considered is kept and ranked (rejected ones carry a reason —
|
|
11
|
+
# nothing is silently dropped); every hypothesis, its supporting AND
|
|
12
|
+
# contradicting evidence, and the reasoning are first-class linked entities. The
|
|
13
|
+
# reasoning-STYLE recipes (decision analysis, literature review, …) ship as thin
|
|
14
|
+
# OVERLAY templates that `compose` onto this base and add their own playbooks —
|
|
15
|
+
# so a user installs the substrate once and adds whichever methods they want.
|
|
16
|
+
#
|
|
17
|
+
# Reuses the pod-wide `question` and `research` kinds so an investigation started
|
|
18
|
+
# here lands where every other workspace already looks.
|
|
19
|
+
|
|
20
|
+
meta:
|
|
21
|
+
slug: research-base
|
|
22
|
+
domain: knowledge
|
|
23
|
+
name: Research
|
|
24
|
+
description: A research substrate — turn a question into a fully-recorded investigation. Sources ranked (nothing dropped), hypotheses weighed, findings mapped onto a living graph of fields and concepts.
|
|
25
|
+
icon: microscope
|
|
26
|
+
color: "#8B5CF6"
|
|
27
|
+
tags: [research, knowledge, graph, sources, evidence, learning]
|
|
28
|
+
isPublic: true
|
|
29
|
+
|
|
30
|
+
workspace:
|
|
31
|
+
name: Research
|
|
32
|
+
description: Turn a question into a fully-recorded investigation — sources ranked, hypotheses weighed, findings mapped onto a living graph of fields and concepts.
|
|
33
|
+
subtype: research-base
|
|
34
|
+
visibility: pod_visible
|
|
35
|
+
capabilities:
|
|
36
|
+
- research.graph
|
|
37
|
+
- research.sources
|
|
38
|
+
sourceRoles:
|
|
39
|
+
research: provider
|
|
40
|
+
|
|
41
|
+
profiles:
|
|
42
|
+
# ── Reused pod-wide kinds (declared minimally so views/links resolve) ───────
|
|
43
|
+
# The pod already seeds `question` and `research` as KINDS (the default); the
|
|
44
|
+
# applier SKIPS properties that already exist, so these declarations exist only
|
|
45
|
+
# to make the SLUG declarable here (the validator resolves view scopes and
|
|
46
|
+
# entityLink endpoints against this template's `profiles`) and to reuse the
|
|
47
|
+
# existing pod-wide row. They MUST be declared as plain kinds to match how the
|
|
48
|
+
# pod seeds them — declaring them as facet-roles conflicts with the existing
|
|
49
|
+
# kind, the resolver SKIPS them on that mismatch, and the views/links scoped to
|
|
50
|
+
# `question`/`research` then throw at provisioning. Enums mirror the live
|
|
51
|
+
# pod-wide ones exactly.
|
|
52
|
+
- slug: question
|
|
53
|
+
displayName: Question
|
|
54
|
+
icon: help-circle
|
|
55
|
+
color: blue
|
|
56
|
+
description: An open question driving an investigation — the thing research answers.
|
|
57
|
+
properties:
|
|
58
|
+
- slug: questionStatus
|
|
59
|
+
label: Status
|
|
60
|
+
valueType: string
|
|
61
|
+
inputType: select
|
|
62
|
+
enumValues: [open, exploring, answered, abandoned]
|
|
63
|
+
constraints: { defaultValue: open }
|
|
64
|
+
|
|
65
|
+
- slug: research
|
|
66
|
+
displayName: Research
|
|
67
|
+
icon: microscope
|
|
68
|
+
color: violet
|
|
69
|
+
description: An investigation — the sources consulted, the findings, the confidence, and the conclusion.
|
|
70
|
+
# A plain kind, same as `question` above — declared to match how the pod seeds it.
|
|
71
|
+
properties:
|
|
72
|
+
- slug: researchStatus
|
|
73
|
+
label: Status
|
|
74
|
+
valueType: string
|
|
75
|
+
inputType: select
|
|
76
|
+
enumValues: [ongoing, concluded, abandoned]
|
|
77
|
+
constraints: { defaultValue: ongoing }
|
|
78
|
+
- slug: conclusion
|
|
79
|
+
label: Conclusion
|
|
80
|
+
valueType: string
|
|
81
|
+
inputType: textarea
|
|
82
|
+
- slug: researchConfidence
|
|
83
|
+
label: Confidence
|
|
84
|
+
valueType: string
|
|
85
|
+
inputType: select
|
|
86
|
+
enumValues: [low, medium, high]
|
|
87
|
+
|
|
88
|
+
# ── The cartography layer — fields & concepts ───────────────────────────────
|
|
89
|
+
# The "big things that overlap and link". A field is a domain (Mathematics, AI,
|
|
90
|
+
# Philosophy); a concept is an atomic idea inside one or more fields. Their
|
|
91
|
+
# edges (part_of / overlaps_with / prerequisite_of) ARE the knowledge map.
|
|
92
|
+
- slug: field
|
|
93
|
+
displayName: Field
|
|
94
|
+
icon: layers
|
|
95
|
+
color: indigo
|
|
96
|
+
description: A domain of knowledge — Mathematics, Physics, AI, Philosophy. Fields overlap and feed each other.
|
|
97
|
+
properties:
|
|
98
|
+
- slug: description
|
|
99
|
+
label: Description
|
|
100
|
+
valueType: string
|
|
101
|
+
inputType: textarea
|
|
102
|
+
- slug: aliases
|
|
103
|
+
label: Also known as
|
|
104
|
+
valueType: array
|
|
105
|
+
inputType: tags
|
|
106
|
+
|
|
107
|
+
- slug: concept
|
|
108
|
+
displayName: Concept
|
|
109
|
+
icon: lightbulb
|
|
110
|
+
color: amber
|
|
111
|
+
description: An atomic idea — Bayesian inference, gradient descent, qualia. Belongs to one or more fields; has prerequisites.
|
|
112
|
+
properties:
|
|
113
|
+
- slug: definition
|
|
114
|
+
label: Definition
|
|
115
|
+
valueType: string
|
|
116
|
+
inputType: textarea
|
|
117
|
+
- slug: aliases
|
|
118
|
+
label: Also known as
|
|
119
|
+
valueType: array
|
|
120
|
+
inputType: tags
|
|
121
|
+
|
|
122
|
+
# ── The evidence layer — sources, hypotheses, findings ──────────────────────
|
|
123
|
+
# `source` is the "rank by quality, lose nothing" primitive: every artifact the
|
|
124
|
+
# agent consulted is kept, banded for credibility, and marked cited / considered
|
|
125
|
+
# / rejected (rejected carries a reason). The rejected pile is part of the work.
|
|
126
|
+
- slug: source
|
|
127
|
+
displayName: Source
|
|
128
|
+
icon: file-text
|
|
129
|
+
color: cyan
|
|
130
|
+
description: Anything consulted — a paper, article, dataset, or post. Ranked by credibility and NEVER discarded; rejected sources are kept with a reason.
|
|
131
|
+
properties:
|
|
132
|
+
- slug: url
|
|
133
|
+
label: URL
|
|
134
|
+
valueType: string
|
|
135
|
+
inputType: url
|
|
136
|
+
- slug: author
|
|
137
|
+
label: Author
|
|
138
|
+
valueType: string
|
|
139
|
+
inputType: text
|
|
140
|
+
- slug: publishedAt
|
|
141
|
+
label: Published
|
|
142
|
+
valueType: date
|
|
143
|
+
inputType: date
|
|
144
|
+
- slug: sourceType
|
|
145
|
+
label: Type
|
|
146
|
+
valueType: string
|
|
147
|
+
inputType: select
|
|
148
|
+
enumValues: [paper, article, book, dataset, blog, video, forum, other]
|
|
149
|
+
constraints: { defaultValue: article }
|
|
150
|
+
- slug: credibilityBand
|
|
151
|
+
label: Credibility
|
|
152
|
+
valueType: string
|
|
153
|
+
inputType: select
|
|
154
|
+
enumValues: [high, medium, low, unknown]
|
|
155
|
+
constraints: { defaultValue: unknown }
|
|
156
|
+
- slug: qualityScore
|
|
157
|
+
label: Quality (0–100)
|
|
158
|
+
valueType: number
|
|
159
|
+
inputType: number
|
|
160
|
+
constraints: { min: 0, max: 100 }
|
|
161
|
+
- slug: status
|
|
162
|
+
label: Status
|
|
163
|
+
valueType: string
|
|
164
|
+
inputType: select
|
|
165
|
+
enumValues: [cited, considered, rejected]
|
|
166
|
+
constraints: { defaultValue: considered }
|
|
167
|
+
- slug: whyRejected
|
|
168
|
+
label: Why rejected
|
|
169
|
+
valueType: string
|
|
170
|
+
inputType: textarea
|
|
171
|
+
- slug: retrievedAt
|
|
172
|
+
label: Retrieved
|
|
173
|
+
valueType: date
|
|
174
|
+
inputType: date
|
|
175
|
+
|
|
176
|
+
- slug: hypothesis
|
|
177
|
+
displayName: Hypothesis
|
|
178
|
+
icon: git-branch
|
|
179
|
+
color: violet
|
|
180
|
+
description: A candidate theory or answer under test — argued for and against by sources.
|
|
181
|
+
properties:
|
|
182
|
+
- slug: statement
|
|
183
|
+
label: Statement
|
|
184
|
+
valueType: string
|
|
185
|
+
inputType: textarea
|
|
186
|
+
- slug: stance
|
|
187
|
+
label: Stance
|
|
188
|
+
valueType: string
|
|
189
|
+
inputType: select
|
|
190
|
+
enumValues: [proposed, supported, contested, refuted, superseded]
|
|
191
|
+
constraints: { defaultValue: proposed }
|
|
192
|
+
- slug: confidence
|
|
193
|
+
label: Confidence
|
|
194
|
+
valueType: string
|
|
195
|
+
inputType: select
|
|
196
|
+
enumValues: [low, medium, high]
|
|
197
|
+
- slug: reasoning
|
|
198
|
+
label: Reasoning
|
|
199
|
+
valueType: string
|
|
200
|
+
inputType: textarea
|
|
201
|
+
|
|
202
|
+
- slug: finding
|
|
203
|
+
displayName: Finding
|
|
204
|
+
icon: check-circle
|
|
205
|
+
color: "#10B981"
|
|
206
|
+
description: A validated fact — the thing established between the question, the sources, and the reasoning. Carries calibrated confidence and links to its evidence.
|
|
207
|
+
properties:
|
|
208
|
+
- slug: claim
|
|
209
|
+
label: Claim
|
|
210
|
+
valueType: string
|
|
211
|
+
inputType: textarea
|
|
212
|
+
- slug: confidence
|
|
213
|
+
label: Confidence (0–1)
|
|
214
|
+
valueType: number
|
|
215
|
+
inputType: number
|
|
216
|
+
constraints: { min: 0, max: 1 }
|
|
217
|
+
- slug: evidenceSummary
|
|
218
|
+
label: Evidence summary
|
|
219
|
+
valueType: string
|
|
220
|
+
inputType: textarea
|
|
221
|
+
- slug: status
|
|
222
|
+
label: Status
|
|
223
|
+
valueType: string
|
|
224
|
+
inputType: select
|
|
225
|
+
enumValues: [validated, provisional, retracted]
|
|
226
|
+
constraints: { defaultValue: provisional }
|
|
227
|
+
|
|
228
|
+
views:
|
|
229
|
+
# The signature view — the living knowledge map. Fields and concepts and what
|
|
230
|
+
# we've established about them, as one navigable graph.
|
|
231
|
+
- name: Knowledge Map
|
|
232
|
+
slug: research-knowledge-map
|
|
233
|
+
type: graph
|
|
234
|
+
scopeProfileSlugs: [field, concept, finding]
|
|
235
|
+
description: The cartography — fields and concepts, their overlaps and prerequisites, and the findings attached to them.
|
|
236
|
+
defaultView: true
|
|
237
|
+
config:
|
|
238
|
+
layout: force
|
|
239
|
+
showRelations: true
|
|
240
|
+
# The daily driver — what still needs answering.
|
|
241
|
+
- name: Open Questions
|
|
242
|
+
slug: research-open-questions
|
|
243
|
+
type: list
|
|
244
|
+
scopeProfileSlug: question
|
|
245
|
+
description: Questions still open — the research backlog.
|
|
246
|
+
config:
|
|
247
|
+
filterBy: { field: questionStatus, operator: is, value: open }
|
|
248
|
+
# The evidence surface, ranked. Nothing is hidden — rejected sources show here
|
|
249
|
+
# too, with their reason.
|
|
250
|
+
- name: Sources
|
|
251
|
+
slug: research-sources
|
|
252
|
+
type: table
|
|
253
|
+
scopeProfileSlug: source
|
|
254
|
+
description: Every source consulted, ranked by credibility — including the ones that were considered and rejected.
|
|
255
|
+
config:
|
|
256
|
+
columns: [title, sourceType, credibilityBand, qualityScore, status]
|
|
257
|
+
- name: Hypotheses
|
|
258
|
+
slug: research-hypotheses
|
|
259
|
+
type: kanban
|
|
260
|
+
scopeProfileSlug: hypothesis
|
|
261
|
+
groupBy: stance
|
|
262
|
+
description: Candidate theories, grouped by where the evidence has left them.
|
|
263
|
+
config:
|
|
264
|
+
groupBy: stance
|
|
265
|
+
- name: Findings
|
|
266
|
+
slug: research-findings
|
|
267
|
+
type: table
|
|
268
|
+
scopeProfileSlug: finding
|
|
269
|
+
description: What's been established, with its confidence.
|
|
270
|
+
config:
|
|
271
|
+
columns: [title, confidence, status]
|
|
272
|
+
- name: Research Log
|
|
273
|
+
slug: research-log
|
|
274
|
+
type: table
|
|
275
|
+
scopeProfileSlug: research
|
|
276
|
+
description: Every investigation and where it stands.
|
|
277
|
+
config:
|
|
278
|
+
columns: [title, researchStatus, researchConfidence]
|
|
279
|
+
|
|
280
|
+
# Schema-level relations — the epistemic predicates. Novel `type`s auto-create
|
|
281
|
+
# their relation-defs on provisioning, so the graph and the relation picker have
|
|
282
|
+
# domain-specific edges from day one.
|
|
283
|
+
entityLinks:
|
|
284
|
+
# Cartography edges
|
|
285
|
+
- {
|
|
286
|
+
sourceProfileSlug: field,
|
|
287
|
+
targetProfileSlug: field,
|
|
288
|
+
type: overlaps_with,
|
|
289
|
+
label: Overlaps with,
|
|
290
|
+
}
|
|
291
|
+
- {
|
|
292
|
+
sourceProfileSlug: concept,
|
|
293
|
+
targetProfileSlug: field,
|
|
294
|
+
type: part_of,
|
|
295
|
+
label: Part of,
|
|
296
|
+
}
|
|
297
|
+
- {
|
|
298
|
+
sourceProfileSlug: concept,
|
|
299
|
+
targetProfileSlug: concept,
|
|
300
|
+
type: prerequisite_of,
|
|
301
|
+
label: Prerequisite of,
|
|
302
|
+
}
|
|
303
|
+
- {
|
|
304
|
+
sourceProfileSlug: concept,
|
|
305
|
+
targetProfileSlug: concept,
|
|
306
|
+
type: relates_to,
|
|
307
|
+
label: Relates to,
|
|
308
|
+
}
|
|
309
|
+
# Investigation edges
|
|
310
|
+
- {
|
|
311
|
+
sourceProfileSlug: research,
|
|
312
|
+
targetProfileSlug: question,
|
|
313
|
+
type: investigates,
|
|
314
|
+
label: Investigates,
|
|
315
|
+
}
|
|
316
|
+
- {
|
|
317
|
+
sourceProfileSlug: hypothesis,
|
|
318
|
+
targetProfileSlug: question,
|
|
319
|
+
type: answers,
|
|
320
|
+
label: Answers,
|
|
321
|
+
}
|
|
322
|
+
- {
|
|
323
|
+
sourceProfileSlug: research,
|
|
324
|
+
targetProfileSlug: source,
|
|
325
|
+
type: explored,
|
|
326
|
+
label: Explored,
|
|
327
|
+
}
|
|
328
|
+
- {
|
|
329
|
+
sourceProfileSlug: research,
|
|
330
|
+
targetProfileSlug: finding,
|
|
331
|
+
type: concluded,
|
|
332
|
+
label: Concluded,
|
|
333
|
+
}
|
|
334
|
+
# Evidence edges
|
|
335
|
+
- {
|
|
336
|
+
sourceProfileSlug: source,
|
|
337
|
+
targetProfileSlug: hypothesis,
|
|
338
|
+
type: supports,
|
|
339
|
+
label: Supports,
|
|
340
|
+
}
|
|
341
|
+
- {
|
|
342
|
+
sourceProfileSlug: source,
|
|
343
|
+
targetProfileSlug: hypothesis,
|
|
344
|
+
type: contradicts,
|
|
345
|
+
label: Contradicts,
|
|
346
|
+
}
|
|
347
|
+
- {
|
|
348
|
+
sourceProfileSlug: source,
|
|
349
|
+
targetProfileSlug: source,
|
|
350
|
+
type: cites,
|
|
351
|
+
label: Cites,
|
|
352
|
+
}
|
|
353
|
+
- {
|
|
354
|
+
sourceProfileSlug: finding,
|
|
355
|
+
targetProfileSlug: research,
|
|
356
|
+
type: derived_from,
|
|
357
|
+
label: Derived from,
|
|
358
|
+
}
|
|
359
|
+
- {
|
|
360
|
+
sourceProfileSlug: finding,
|
|
361
|
+
targetProfileSlug: source,
|
|
362
|
+
type: supported_by,
|
|
363
|
+
label: Supported by,
|
|
364
|
+
}
|
|
365
|
+
- {
|
|
366
|
+
sourceProfileSlug: finding,
|
|
367
|
+
targetProfileSlug: concept,
|
|
368
|
+
type: about,
|
|
369
|
+
label: About,
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
# The one universal playbook — bound to `question`, so any question can launch it
|
|
373
|
+
# from its detail page (see actionPlacements) or auto-match as a session. It runs
|
|
374
|
+
# the full method: gather + rank sources (keep the rejects), form and weigh
|
|
375
|
+
# hypotheses, emit findings with honest confidence, and place them on the map.
|
|
376
|
+
playbooks:
|
|
377
|
+
- name: Research a Question
|
|
378
|
+
description: Investigate a question end-to-end — gather and rank sources (keeping the rejected ones), weigh hypotheses, emit findings with calibrated confidence, and map them onto the knowledge graph.
|
|
379
|
+
goalTemplate: >-
|
|
380
|
+
Investigate the question {question} and record the WHOLE investigation, not
|
|
381
|
+
just the answer. Steps: (1) Use the source-triage skill to gather sources
|
|
382
|
+
widely via web search, classify each by type and credibility, and create a
|
|
383
|
+
`source` entity for every one — including the ones you rejected, marked
|
|
384
|
+
rejected with a reason (never silently drop a source). (2) Form the
|
|
385
|
+
candidate answers as `hypothesis` entities and link each to the question;
|
|
386
|
+
link every source that bears on a hypothesis with `supports` or
|
|
387
|
+
`contradicts`. (3) Use the evidence-synthesis skill to weigh the supporting
|
|
388
|
+
vs contradicting sources and emit `finding` entities with honestly
|
|
389
|
+
calibrated confidence, each `supported_by` its sources and `derived_from`
|
|
390
|
+
this research. (4) Use the concept-cartography skill to place the findings
|
|
391
|
+
onto the knowledge map — resolve or create the `field`/`concept` entities
|
|
392
|
+
and wire `about` / `part_of` / `overlaps_with` / `prerequisite_of` edges,
|
|
393
|
+
deduping against what already exists. (5) Create the `research` entity that
|
|
394
|
+
`investigates` the question and `explored` the sources, write its
|
|
395
|
+
conclusion and confidence, and set the question's status to answered. Every
|
|
396
|
+
write is proposal-gated and reviewable.
|
|
397
|
+
subjectProfile:
|
|
398
|
+
profileSlug: question
|
|
399
|
+
params:
|
|
400
|
+
- { name: question, type: entity, label: Question, required: true }
|
|
401
|
+
executor: is-agent
|
|
402
|
+
grants:
|
|
403
|
+
- source-triage
|
|
404
|
+
- evidence-synthesis
|
|
405
|
+
- concept-cartography
|
|
406
|
+
- exa_search
|
|
407
|
+
- entity.create
|
|
408
|
+
status: active
|
|
409
|
+
|
|
410
|
+
# A "Research this" action on every question's detail page — the entity is the
|
|
411
|
+
# starter of the flow, exactly as designed.
|
|
412
|
+
actionPlacements:
|
|
413
|
+
- profileSlug: question
|
|
414
|
+
surface: entity-detail
|
|
415
|
+
kind: playbook
|
|
416
|
+
ref: "Research a Question"
|
|
417
|
+
label: "Research this"
|
|
418
|
+
|
|
419
|
+
# Web search via Exa (source gathering) + the research method skills. The user
|
|
420
|
+
# connects Exa once on install; a missing key fails gracefully — the agent can
|
|
421
|
+
# still reason over provided/pod sources.
|
|
422
|
+
integrations:
|
|
423
|
+
- templateKey: research-methods
|
|
424
|
+
- templateKey: exa
|
|
425
|
+
|
|
426
|
+
onboarding:
|
|
427
|
+
goal: >
|
|
428
|
+
Seed the workspace with the first real questions worth researching and the
|
|
429
|
+
fields they live in — so the agent has something concrete to investigate, not
|
|
430
|
+
a blank graph.
|
|
431
|
+
framing: |
|
|
432
|
+
THE RESEARCH LEAD: Act as a sharp research lead who cares about the QUESTION
|
|
433
|
+
being well-formed and the EVIDENCE being honest. A vague question ("learn
|
|
434
|
+
about AI") produces vague research; push for a question with a real edge — one
|
|
435
|
+
a good answer would actually change. And insist the work keeps its
|
|
436
|
+
counter-evidence: research that only kept what agreed with it isn't research.
|
|
437
|
+
expertise:
|
|
438
|
+
starters:
|
|
439
|
+
- >
|
|
440
|
+
A researchable question names what would count as an answer. "Is X better
|
|
441
|
+
than Y for Z?" beats "tell me about X" — the first has a shape the
|
|
442
|
+
evidence can fill; the second is a topic, not a question.
|
|
443
|
+
- >
|
|
444
|
+
Name the field(s) the question lives in up front — even roughly. It's the
|
|
445
|
+
first anchor on the map, and it's what lets the system later surface the
|
|
446
|
+
neighbouring field you didn't think to look in.
|
|
447
|
+
blindSpots:
|
|
448
|
+
- >
|
|
449
|
+
The most valuable sources are often the ones that DISAGREE. If the founder
|
|
450
|
+
only wants confirmation, say plainly that a one-sided answer is a weaker
|
|
451
|
+
answer — the method keeps both sides on purpose.
|
|
452
|
+
- >
|
|
453
|
+
"I already know the answer" is where research quietly stops being
|
|
454
|
+
research. If the conclusion is decided before the sources are gathered,
|
|
455
|
+
flag it — the point is to be able to be wrong.
|
|
456
|
+
collect:
|
|
457
|
+
- profileSlug: question
|
|
458
|
+
what: The first real questions worth investigating — each with a genuine edge, not a topic.
|
|
459
|
+
cardinality: few
|
|
460
|
+
keyFields: [questionStatus]
|
|
461
|
+
- profileSlug: field
|
|
462
|
+
what: The fields these questions live in — the first anchors on the knowledge map.
|
|
463
|
+
cardinality: few
|
|
464
|
+
keyFields: [description]
|
|
465
|
+
openingQuestions:
|
|
466
|
+
- "What's a question you actually want a well-evidenced answer to — one where a good answer would change what you do?"
|
|
467
|
+
- "Which field(s) does it sit in — and is there a neighbouring field it might borrow from?"
|
|
468
|
+
- "What would count as a convincing answer, and what would change your mind?"
|
|
469
|
+
doneWhen: >
|
|
470
|
+
At least one well-formed question captured with its field(s) anchored on the
|
|
471
|
+
map, ready for the Research a Question playbook to run against.
|
|
472
|
+
|
|
473
|
+
app:
|
|
474
|
+
kind: stored
|
|
475
|
+
cellKey: entity-detail
|
|
476
|
+
|
|
477
|
+
layout:
|
|
478
|
+
defaultView: Knowledge Map
|
|
479
|
+
defaultApp: null
|
|
480
|
+
pinnedApps: [dashboard, data, chat]
|
|
481
|
+
sidebarItems:
|
|
482
|
+
- kind: view
|
|
483
|
+
viewName: Knowledge Map
|
|
484
|
+
label: Map
|
|
485
|
+
icon: layers
|
|
486
|
+
- kind: view
|
|
487
|
+
viewName: Open Questions
|
|
488
|
+
label: Questions
|
|
489
|
+
icon: help-circle
|
|
490
|
+
- kind: view
|
|
491
|
+
viewName: Sources
|
|
492
|
+
label: Sources
|
|
493
|
+
icon: file-text
|
|
494
|
+
- kind: view
|
|
495
|
+
viewName: Findings
|
|
496
|
+
label: Findings
|
|
497
|
+
icon: check-circle
|
|
498
|
+
- kind: app
|
|
499
|
+
appId: data
|
|
500
|
+
label: Data
|
|
501
|
+
icon: database
|
|
502
|
+
|
|
503
|
+
bento:
|
|
504
|
+
# Its own view row (distinct name from the embedded views, per the
|
|
505
|
+
# meetings-knowledge note — a shared name collides in the switcher).
|
|
506
|
+
viewName: Research Home
|
|
507
|
+
blocks:
|
|
508
|
+
- kind: view
|
|
509
|
+
viewName: Knowledge Map
|
|
510
|
+
pos: { x: 0, y: 0, w: 8, h: 6 }
|
|
511
|
+
- kind: view
|
|
512
|
+
viewName: Open Questions
|
|
513
|
+
pos: { x: 8, y: 0, w: 4, h: 3 }
|
|
514
|
+
- kind: view
|
|
515
|
+
viewName: Findings
|
|
516
|
+
pos: { x: 8, y: 3, w: 4, h: 3 }
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
# Decision Analysis overlay — a reasoning-STYLE that composes onto research-base
|
|
2
|
+
# ============================================================================
|
|
3
|
+
# One reasoning model, shipped as a thin overlay: IBIS (Issue → Positions →
|
|
4
|
+
# Arguments). It adds the "Decision Analysis" playbook + the decision-specific
|
|
5
|
+
# links to the SAME research substrate — it does NOT create a second workspace.
|
|
6
|
+
# `dependencies: [{ slug: research-base, relation: compose }]` layers this
|
|
7
|
+
# additively onto the research-base workspace (installing base first if absent).
|
|
8
|
+
#
|
|
9
|
+
# This is the pattern for the whole reasoning-model family: make each style its
|
|
10
|
+
# own overlay file (decision, literature-review/Toulmin, competitive scan,
|
|
11
|
+
# study-a-subject) and let the user compose whichever ones they want onto the one
|
|
12
|
+
# base. Here we ship the decision style — the one that fits "weigh option A vs B
|
|
13
|
+
# with the evidence, and keep why the loser lost".
|
|
14
|
+
|
|
15
|
+
meta:
|
|
16
|
+
slug: research-decision
|
|
17
|
+
domain: knowledge
|
|
18
|
+
name: Decision Analysis
|
|
19
|
+
description: Turn an open question into a decision — options weighed with evidence, and the roads-not-taken preserved with the reasons they lost. Composes onto the Research substrate.
|
|
20
|
+
icon: scale
|
|
21
|
+
color: "#F59E0B"
|
|
22
|
+
tags: [research, decision, ibis, analysis, evidence]
|
|
23
|
+
isPublic: true
|
|
24
|
+
|
|
25
|
+
workspace:
|
|
26
|
+
name: Research
|
|
27
|
+
description: Adds the IBIS decision-analysis method to the Research substrate — weigh options with evidence and record the decision, not just the winner.
|
|
28
|
+
subtype: research-base
|
|
29
|
+
|
|
30
|
+
# Layer additively onto the research-base workspace (no second workspace).
|
|
31
|
+
dependencies:
|
|
32
|
+
- slug: research-base
|
|
33
|
+
relation: compose
|
|
34
|
+
reason: Decision Analysis is a research method — it needs the Research substrate (question / source / hypothesis / finding) to work over.
|
|
35
|
+
|
|
36
|
+
profiles:
|
|
37
|
+
# Slugs this overlay references in its links / views / playbook must be
|
|
38
|
+
# declared here for the per-file validator (base owns their full schema; the
|
|
39
|
+
# applier skips already-existing properties). Enums mirror the pod-wide defs.
|
|
40
|
+
- slug: question
|
|
41
|
+
displayName: Question
|
|
42
|
+
icon: help-circle
|
|
43
|
+
color: blue
|
|
44
|
+
description: The open question being decided.
|
|
45
|
+
# Pod-wide `question` is a first-class KIND (Decision 1 — the manifest retired
|
|
46
|
+
# w4.convert.question to a keep no-op). Declared as a plain kind to match the
|
|
47
|
+
# seed + research-base and reuse the existing pod-wide row.
|
|
48
|
+
properties:
|
|
49
|
+
- slug: questionStatus
|
|
50
|
+
label: Status
|
|
51
|
+
valueType: string
|
|
52
|
+
inputType: select
|
|
53
|
+
enumValues: [open, exploring, answered, abandoned]
|
|
54
|
+
constraints: { defaultValue: open }
|
|
55
|
+
|
|
56
|
+
- slug: hypothesis
|
|
57
|
+
displayName: Option
|
|
58
|
+
icon: git-branch
|
|
59
|
+
color: violet
|
|
60
|
+
description: A candidate option under consideration — argued for and against by sources.
|
|
61
|
+
properties:
|
|
62
|
+
- slug: stance
|
|
63
|
+
label: Stance
|
|
64
|
+
valueType: string
|
|
65
|
+
inputType: select
|
|
66
|
+
enumValues: [proposed, supported, contested, refuted, superseded]
|
|
67
|
+
constraints: { defaultValue: proposed }
|
|
68
|
+
|
|
69
|
+
- slug: decision
|
|
70
|
+
displayName: Decision
|
|
71
|
+
icon: scale
|
|
72
|
+
color: amber
|
|
73
|
+
description: A resolved decision — the recommendation, why it won, and the alternatives that lost (and why).
|
|
74
|
+
# Pod-wide `decision` is a first-class KIND (Decision 1 — w4.convert.decision
|
|
75
|
+
# retired to a keep no-op). Declared as a plain kind to match the seed; the
|
|
76
|
+
# `resolves` / `considered_in` links resolve against the reused pod-wide row.
|
|
77
|
+
properties:
|
|
78
|
+
- slug: summary
|
|
79
|
+
label: Summary
|
|
80
|
+
valueType: string
|
|
81
|
+
inputType: text
|
|
82
|
+
- slug: rationale
|
|
83
|
+
label: Rationale
|
|
84
|
+
valueType: string
|
|
85
|
+
inputType: textarea
|
|
86
|
+
- slug: alternatives
|
|
87
|
+
label: Alternatives considered
|
|
88
|
+
valueType: string
|
|
89
|
+
inputType: textarea
|
|
90
|
+
- slug: decisionStatus
|
|
91
|
+
label: Status
|
|
92
|
+
valueType: string
|
|
93
|
+
inputType: select
|
|
94
|
+
enumValues: [proposed, accepted, superseded, rejected]
|
|
95
|
+
constraints: { defaultValue: proposed }
|
|
96
|
+
|
|
97
|
+
views:
|
|
98
|
+
- name: Decisions
|
|
99
|
+
slug: research-decisions
|
|
100
|
+
type: table
|
|
101
|
+
scopeProfileSlug: decision
|
|
102
|
+
description: Every decision reached, its recommendation, and where it stands.
|
|
103
|
+
config:
|
|
104
|
+
columns: [title, summary, decisionStatus]
|
|
105
|
+
|
|
106
|
+
entityLinks:
|
|
107
|
+
- {
|
|
108
|
+
sourceProfileSlug: decision,
|
|
109
|
+
targetProfileSlug: question,
|
|
110
|
+
type: resolves,
|
|
111
|
+
label: Resolves,
|
|
112
|
+
}
|
|
113
|
+
- {
|
|
114
|
+
sourceProfileSlug: hypothesis,
|
|
115
|
+
targetProfileSlug: decision,
|
|
116
|
+
type: considered_in,
|
|
117
|
+
label: Considered in,
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
playbooks:
|
|
121
|
+
- name: Decision Analysis
|
|
122
|
+
description: Structure an open question as a decision via IBIS — enumerate the options, argue each with evidence (keeping the rejected sources), weigh against explicit criteria, and record the decision with its roads-not-taken.
|
|
123
|
+
goalTemplate: >-
|
|
124
|
+
Analyze the question {question} as a DECISION and record the reasoning, not
|
|
125
|
+
just the verdict, using the ibis-decision-analysis skill. Steps: (1) State
|
|
126
|
+
the issue sharply so the options are genuinely mutually exclusive. (2)
|
|
127
|
+
Enumerate the real options — including the status-quo — as `hypothesis`
|
|
128
|
+
entities linked to the question, and to the resulting decision via
|
|
129
|
+
`considered_in`. (3) For each option, gather the sources that `supports` and
|
|
130
|
+
those that `contradicts` it (use source gathering; KEEP the rejected
|
|
131
|
+
sources with a reason — never drop the counter-evidence). (4) Weigh the
|
|
132
|
+
options against explicit, named criteria (cost, reversibility, risk, time,
|
|
133
|
+
evidence strength). (5) Record the recommendation as a `decision` entity
|
|
134
|
+
that `resolves` the question — its rationale explains why it won, and its
|
|
135
|
+
`alternatives` field preserves the options that lost and WHY. (6) Note what
|
|
136
|
+
evidence would change the decision. Every write is proposal-gated.
|
|
137
|
+
subjectProfile:
|
|
138
|
+
profileSlug: question
|
|
139
|
+
params:
|
|
140
|
+
- { name: question, type: entity, label: Question, required: true }
|
|
141
|
+
executor: is-agent
|
|
142
|
+
grants:
|
|
143
|
+
- ibis-decision-analysis
|
|
144
|
+
- source-triage
|
|
145
|
+
- exa_search
|
|
146
|
+
- entity.create
|
|
147
|
+
status: active
|
|
148
|
+
|
|
149
|
+
actionPlacements:
|
|
150
|
+
- profileSlug: question
|
|
151
|
+
surface: entity-detail
|
|
152
|
+
kind: playbook
|
|
153
|
+
ref: "Decision Analysis"
|
|
154
|
+
label: "Analyze as decision"
|
|
155
|
+
|
|
156
|
+
integrations:
|
|
157
|
+
- templateKey: research-methods
|
|
158
|
+
- templateKey: exa
|