@knowledge-bus/opencode 0.5.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -2
- package/references/agent-runtime.md +7 -3
- package/references/knowledge-bus-directory.md +27 -2
- package/references/knowledge-bus-protocol.yaml +90 -1
- package/references/product-development/type-guidance.kbp.yaml +22 -22
- package/references/product-development/universe.kbp.yaml +44 -23
- package/runtime/explorer-viewer.js +5415 -0
- package/runtime/explorer-viewer.json +6 -0
- package/runtime/kbp.py +20 -0
- package/runtime/knowledge_bus-0.8.0-py3-none-any.whl +0 -0
- package/runtime/requirements.json +4 -6
- package/skills/kb-check/SKILL.md +1 -1
- package/skills/kb-evolve/SKILL.md +4 -2
- package/skills/kb-explore/SKILL.md +32 -0
- package/skills/kb-ingest/SKILL.md +2 -6
- package/skills/kb-uncover-decision/SKILL.md +3 -3
- package/skills/kb-uncover-question/SKILL.md +2 -2
- package/runtime/knowledge_bus-0.5.0-py3-none-any.whl +0 -0
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@knowledge-bus/opencode",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"private": false,
|
|
5
|
-
"description": "Knowledge Bus
|
|
5
|
+
"description": "Define, inspect, and check Knowledge Bus expectations in OpenCode",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"type": "module",
|
|
8
8
|
"main": "./index.js",
|
|
@@ -18,11 +18,15 @@ Requires [uv](https://docs.astral.sh/uv/) and Python matching `requires_python`
|
|
|
18
18
|
```sh
|
|
19
19
|
python3 /absolute/runtime/kbp.py --validate /absolute/target/.knowledge-bus/
|
|
20
20
|
python3 /absolute/runtime/kbp.py --mint element 1 /absolute/target/.knowledge-bus/
|
|
21
|
+
python3 /absolute/runtime/kbp.py --inspect /absolute/target/.knowledge-bus/
|
|
22
|
+
python3 /absolute/runtime/kbp.py --explore --output /absolute/output /absolute/target/.knowledge-bus/
|
|
21
23
|
```
|
|
22
24
|
|
|
23
|
-
The bundled wheel supplies the checker and
|
|
25
|
+
The bundled wheel supplies the checker, protocol, and required Python code. The launcher uses bundled files without registry access, keeps its cache outside the installation, and preserves the caller's working directory and failure exit code. If a prerequisite is missing, report it; do not install tools without permission.
|
|
24
26
|
|
|
25
|
-
Supply an absolute
|
|
27
|
+
Supply an absolute universe file, knowledge-base folder, or its `.knowledge-bus/` folder when the shell is elsewhere. Checking never initializes a folder. `.knowledge-bus/` is the reserved Knowledge Bus configuration directory, not the knowledge base itself. `KNOWLEDGE_BUS_CACHE_DIR` optionally selects another cache location.
|
|
28
|
+
|
|
29
|
+
`--inspect` prints an Explorer model and writes nothing. When the scope contains several universes, select one with `--universe`. `--explore` requires an output directory and refuses existing output unless `--replace` is supplied. It builds an offline Explorer from the bundled viewer.
|
|
26
30
|
|
|
27
31
|
## References
|
|
28
32
|
|
|
@@ -32,4 +36,4 @@ The references directory containing this guide includes `knowledge-bus-protocol.
|
|
|
32
36
|
|
|
33
37
|
The checker first checks that its protocol is sound. It checks definitions and guidance for required fields, code collisions, references, version compatibility, and permitted structures. Include the universe when checking its guidance.
|
|
34
38
|
|
|
35
|
-
Each failure names the offending declaration or reference. Explain the
|
|
39
|
+
Each failure names the offending declaration or reference. Explain how to correct the reported problem. Report conformance and Explorer renderability separately. A passing result does not establish that a question is useful or that an answer is true. Answers and ingestion logs still require human review.
|
|
@@ -10,8 +10,14 @@ my-folder/
|
|
|
10
10
|
└── .knowledge-bus/
|
|
11
11
|
├── universe.kbp.yaml
|
|
12
12
|
├── type-guidance.kbp.yaml # optional
|
|
13
|
+
├── marks.explorer.yaml # optional presentation declarations
|
|
13
14
|
├── answers.yaml # when recording answers
|
|
14
|
-
|
|
15
|
+
├── ingest-log.md # when ingesting existing material
|
|
16
|
+
└── explorer/ # optional generated read-only projection
|
|
17
|
+
└── <universe-id>/
|
|
18
|
+
├── index.html
|
|
19
|
+
├── model.json
|
|
20
|
+
└── receipt.json
|
|
15
21
|
```
|
|
16
22
|
|
|
17
23
|
Any folder can contain a `.knowledge-bus/` directory. Git is not required. Define the structure before creating documents, or derive it from existing material through ingestion. Answers and an ingest log are not prerequisites for authoring a universe.
|
|
@@ -28,7 +34,26 @@ kbp --validate path/to/universe.kbp.yaml path/to/type-guidance.kbp.yaml
|
|
|
28
34
|
|
|
29
35
|
Without an explicit target, the checker searches the current folder and then its parents for `.knowledge-bus/`. It uses the first one found and does not combine definitions from different directories. Calls from inside `.knowledge-bus/` use that directory. An empty or incomplete nearer directory does not fall back to a parent's `.knowledge-bus/`.
|
|
30
36
|
|
|
31
|
-
The
|
|
37
|
+
The checker reads the `*.kbp.yaml` files directly inside the selected `.knowledge-bus/` directory together, so it can check guidance against its universe. Duplicate universe ids fail. Answers, logs, presentation marks, and Explorer outputs are not checker inputs. Explicit file targets select exactly those files; include the universe when checking guidance.
|
|
38
|
+
|
|
39
|
+
## Several Universes in One Scope
|
|
40
|
+
|
|
41
|
+
Several universes may be direct siblings in one `.knowledge-bus/`. Prefix filenames for people, but rely on semantic headers for identity and association:
|
|
42
|
+
|
|
43
|
+
```text
|
|
44
|
+
.knowledge-bus/
|
|
45
|
+
├── product-development.universe.kbp.yaml
|
|
46
|
+
├── product-development.type-guidance.kbp.yaml
|
|
47
|
+
├── product-development.marks.explorer.yaml
|
|
48
|
+
├── team-operations.universe.kbp.yaml
|
|
49
|
+
├── team-operations.type-guidance.kbp.yaml
|
|
50
|
+
├── team-operations.marks.explorer.yaml
|
|
51
|
+
└── explorer/
|
|
52
|
+
├── product-development/{index.html,model.json,receipt.json}
|
|
53
|
+
└── team-operations/{index.html,model.json,receipt.json}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
`universe.id` identifies a universe. `guidance.guides` and `marks.marks_for` associate its companion files. When the directory contains several universes, inspection requires an id or universe file. Duplicate ids and ambiguous companion files fail. Generated Explorers stay under their universe ids. Nested `.knowledge-bus/` directories remain separate.
|
|
32
57
|
|
|
33
58
|
A generic directory target without its own `.knowledge-bus/` still scans for `*.kbp.yaml` files, for example a reference collection or test corpus. It skips metadata directories and nested folders that contain their own `.knowledge-bus/`. Directory scans do not follow nested directory symlinks.
|
|
34
59
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
protocol:
|
|
2
2
|
id: kbp
|
|
3
3
|
name: Knowledge Bus Protocol
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.7
|
|
5
5
|
status: draft
|
|
6
6
|
purpose: >
|
|
7
7
|
The structured exchange of contextual knowledge rather than data. Defines what a
|
|
@@ -95,6 +95,24 @@ declarations:
|
|
|
95
95
|
scope: >
|
|
96
96
|
A predicate in a universe names frames only. A factor id is legal in a guidance
|
|
97
97
|
entry's `when` and nowhere else.
|
|
98
|
+
evaluation:
|
|
99
|
+
result: true | false | unknown
|
|
100
|
+
rules:
|
|
101
|
+
- Named dimensions and named facets are combined with AND.
|
|
102
|
+
- Values in each predicate list are alternatives combined with OR.
|
|
103
|
+
- An empty predicate is true; an empty alternatives list is false.
|
|
104
|
+
- >
|
|
105
|
+
Missing context is unknown, not false. AND is false if any operand is
|
|
106
|
+
false, true if all are true, and unknown otherwise.
|
|
107
|
+
- >
|
|
108
|
+
Context supplies one resolved value per dimension or facet at the scope
|
|
109
|
+
being evaluated. Consumers MUST NOT guess a missing value, merge distinct
|
|
110
|
+
outcome-components, or substitute an artifact's placement for an element's
|
|
111
|
+
ordering value. Evaluate each applicable scope separately.
|
|
112
|
+
- >
|
|
113
|
+
Invalid locally enumerated values and undeclared facets are errors, not
|
|
114
|
+
unknown. Source-backed values require resolution against their registry;
|
|
115
|
+
lack of that resolution leaves the affected context unknown.
|
|
98
116
|
|
|
99
117
|
universe:
|
|
100
118
|
document:
|
|
@@ -200,7 +218,27 @@ declarations:
|
|
|
200
218
|
relation_kind:
|
|
201
219
|
id: "<kind-id>"
|
|
202
220
|
ordered: true | false
|
|
221
|
+
phrasing:
|
|
222
|
+
forward: "<plain-text phrase>"
|
|
223
|
+
reverse: "<plain-text phrase>"
|
|
203
224
|
required: [id, ordered]
|
|
225
|
+
rules:
|
|
226
|
+
- ordered MUST be a boolean.
|
|
227
|
+
- >
|
|
228
|
+
phrasing is optional. When present it MUST be a mapping with exactly
|
|
229
|
+
forward for an unordered kind, or exactly forward and reverse for an
|
|
230
|
+
ordered kind. Each value MUST be a nonblank string.
|
|
231
|
+
- >
|
|
232
|
+
For an edge from A to B, forward reads A / phrase / B and reverse reads
|
|
233
|
+
B / phrase / A. An unordered kind uses forward from either endpoint.
|
|
234
|
+
Consumers choose the phrase by the displayed subject, not by selection
|
|
235
|
+
state. Phrases are plain text, without template interpretation or inferred
|
|
236
|
+
grammatical changes; endpoint names remain separate display components.
|
|
237
|
+
- >
|
|
238
|
+
Phrasing does not change the relation's meaning, direction or restrictions.
|
|
239
|
+
Shared kind contracts still apply. Without phrasing, consumers retain
|
|
240
|
+
shared explanations where defined and MUST NOT invent inverse wording for
|
|
241
|
+
custom kinds.
|
|
204
242
|
|
|
205
243
|
guidance:
|
|
206
244
|
document:
|
|
@@ -284,13 +322,41 @@ composition:
|
|
|
284
322
|
|
|
285
323
|
rules:
|
|
286
324
|
- An element appears at most once per artifact.
|
|
325
|
+
- An explicit entry strength MUST agree with its containing composition list.
|
|
287
326
|
- Exactly one artifact owns a given element instance; others link to the owner.
|
|
288
327
|
- Strength MAY be conditional on a frame predicate.
|
|
328
|
+
- >
|
|
329
|
+
On a core entry, when controls requiredness: true means core, false means
|
|
330
|
+
situationally available, and unknown means unresolved requiredness. A false
|
|
331
|
+
strength predicate does not exclude the element or require a second entry.
|
|
332
|
+
- >
|
|
333
|
+
On a situational entry, when controls situational availability: true means
|
|
334
|
+
available, false means excluded, and unknown means unresolved availability.
|
|
335
|
+
With no when, the entry has its containing list's strength and is available,
|
|
336
|
+
subject to the independent applicability rules below.
|
|
289
337
|
- A universe MAY disable an artifact type entirely under a frame predicate.
|
|
290
338
|
- >
|
|
291
339
|
A universe MUST be able to return the empty composition. Where no frame value
|
|
292
340
|
warrants structure, the conforming answer is no artifact.
|
|
293
341
|
|
|
342
|
+
evaluation:
|
|
343
|
+
precedence:
|
|
344
|
+
- >
|
|
345
|
+
Evaluate artifact disabled_when and universe empty_composition.when first.
|
|
346
|
+
A true disabled_when returns disabled; otherwise a true empty predicate
|
|
347
|
+
returns empty. Either definite outcome suppresses all members, even when
|
|
348
|
+
the other predicate is unknown. If neither is true and either is unknown,
|
|
349
|
+
the artifact result is unresolved, not an asserted usable composition.
|
|
350
|
+
- >
|
|
351
|
+
For an applicable artifact, evaluate each element gate at its applicable
|
|
352
|
+
scope. A false gate excludes the member regardless of strength; an unknown
|
|
353
|
+
gate leaves applicability unresolved. An absent gate allows the member.
|
|
354
|
+
- >
|
|
355
|
+
Apply the entry's strength/availability rule only to applicable members.
|
|
356
|
+
Preserve unresolved members as unresolved rather than silently discarding
|
|
357
|
+
or promoting them. These results describe requirements and availability;
|
|
358
|
+
they do not assert that instances exist or that the action is ready.
|
|
359
|
+
|
|
294
360
|
ordering:
|
|
295
361
|
declared_by: universe
|
|
296
362
|
attaches_to: element
|
|
@@ -301,6 +367,29 @@ composition:
|
|
|
301
367
|
|
|
302
368
|
relations:
|
|
303
369
|
|
|
370
|
+
kind_contracts:
|
|
371
|
+
scope: >
|
|
372
|
+
Universes still declare their kinds. The following ids have shared meanings
|
|
373
|
+
in this protocol version and MUST use the stated ordered value. Other ids
|
|
374
|
+
remain universe-defined; consumers MUST NOT infer a shared meaning from
|
|
375
|
+
their names. These contracts do not generate extra edges.
|
|
376
|
+
distinct-from:
|
|
377
|
+
ordered: false
|
|
378
|
+
meaning: >
|
|
379
|
+
The definitions answer different questions or enable different actions and
|
|
380
|
+
must not be substituted for one another. The distinction is symmetric.
|
|
381
|
+
limits: >
|
|
382
|
+
Not transitive. Does not imply opposites, disjoint contents or disjoint
|
|
383
|
+
instances. Different ids alone do not warrant emitting an edge.
|
|
384
|
+
feeds:
|
|
385
|
+
ordered: true
|
|
386
|
+
meaning: Knowledge from the source can inform the target.
|
|
387
|
+
limits: >
|
|
388
|
+
Source to recipient. Does not imply mandatory sequence, causation, proof,
|
|
389
|
+
ownership, copying or actual instance provenance. A feeds B and B feeds C
|
|
390
|
+
do not entail A feeds C. Gate, legality and freeze restrictions remain
|
|
391
|
+
attached and MUST NOT be lost when displaying or aggregating connections.
|
|
392
|
+
|
|
304
393
|
edge:
|
|
305
394
|
from: "<element-id | artifact-id>"
|
|
306
395
|
to: "<element-id | artifact-id>"
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
guidance:
|
|
2
2
|
id: product-development-guidance
|
|
3
3
|
label: Product development — type guidance
|
|
4
|
-
version: 0.
|
|
5
|
-
conforms_to: kbp/0.
|
|
4
|
+
version: 0.7
|
|
5
|
+
conforms_to: kbp/0.7
|
|
6
6
|
guides: product-development
|
|
7
7
|
|
|
8
8
|
guidance_kinds:
|
|
@@ -143,8 +143,8 @@ sources:
|
|
|
143
143
|
url: "https://github.com/google-labs-code/design.md/blob/main/docs/spec.md"
|
|
144
144
|
checked: 2026-08-18
|
|
145
145
|
dtcg:
|
|
146
|
-
cite: "Design Tokens Community Group — Design Tokens Format Module 2025.10,
|
|
147
|
-
url: "https://www.designtokens.org/TR/
|
|
146
|
+
cite: "Design Tokens Community Group — Design Tokens Format Module 2025.10, published version"
|
|
147
|
+
url: "https://www.designtokens.org/TR/2025.10/format/"
|
|
148
148
|
checked: 2026-08-18
|
|
149
149
|
hig:
|
|
150
150
|
cite: "Apple — Human Interface Guidelines, the Foundations topic list. Client-rendered; read through a headless browser"
|
|
@@ -178,7 +178,7 @@ sources:
|
|
|
178
178
|
cite: "GitLab Pajamas — a standing public brand guideline set"
|
|
179
179
|
url: "https://design.gitlab.com/"
|
|
180
180
|
scenario-walkthrough:
|
|
181
|
-
cite: "
|
|
181
|
+
cite: "Gardenia Durian — How to write a useful scenario walkthrough (Pivotal Labs, 2016)"
|
|
182
182
|
url: "https://medium.com/product-labs/how-to-write-a-useful-scenario-walkthrough-f48bf40b1b69"
|
|
183
183
|
adr:
|
|
184
184
|
cite: "Michael Nygard — Documenting Architecture Decisions (2011); templates at adr.github.io"
|
|
@@ -336,7 +336,7 @@ elements:
|
|
|
336
336
|
- { kind: convention, source: outcome,
|
|
337
337
|
claim: "The name stays singular: an effort steers by a scope-named product outcome — a behavioural measure within its own influence that drives the star — and sets its success criteria on that." }
|
|
338
338
|
- { kind: convention, source: omtm,
|
|
339
|
-
claim: "The
|
|
339
|
+
claim: "A North Star tracks customer value within its framework. The One Metric That Matters identifies the current metric to focus on and may change with the business stage or bottleneck; the names are not interchangeable." }
|
|
340
340
|
- { kind: convention, source: ns-checklist,
|
|
341
341
|
claim: "Represents vision and strategy without being either — a strong metric statement lets a reader recover both at a high level." }
|
|
342
342
|
- { kind: pitfall, source: asserted,
|
|
@@ -369,8 +369,8 @@ elements:
|
|
|
369
369
|
claim: "'Improve X' invites post-hoc rationalisation. Set a threshold and a measurement date." }
|
|
370
370
|
- { kind: heuristic, source: asserted,
|
|
371
371
|
claim: "What a PRD loosely calls a launch's success metrics is this element. A key result is this element wearing OKR vocabulary — a time-boxed threshold, typically on an input metric." }
|
|
372
|
-
- { kind:
|
|
373
|
-
claim: "
|
|
372
|
+
- { kind: heuristic, source: asserted,
|
|
373
|
+
claim: "KB recommendation: inherit shared metrics by reference and state local commitments explicitly." }
|
|
374
374
|
|
|
375
375
|
market-sizing:
|
|
376
376
|
- { kind: heuristic, source: asserted,
|
|
@@ -434,7 +434,7 @@ elements:
|
|
|
434
434
|
|
|
435
435
|
risks-and-assumptions:
|
|
436
436
|
- { kind: heuristic, source: asserted,
|
|
437
|
-
claim: "
|
|
437
|
+
claim: "For an assumption, state what is being relied on and how it will be checked. For a risk, state what could happen, its significance, and the response." }
|
|
438
438
|
- { kind: convention, source: premortem,
|
|
439
439
|
claim: "Pre-mortem sorting — real tigers versus paper tigers — resists both alarmism and optimism." }
|
|
440
440
|
- { kind: convention, source: rust-rfc,
|
|
@@ -498,9 +498,9 @@ elements:
|
|
|
498
498
|
|
|
499
499
|
alternatives-considered:
|
|
500
500
|
- { kind: convention, source: rust-rfc,
|
|
501
|
-
claim: "Standard in RFCs, decision documents and decision records.
|
|
502
|
-
- { kind: boundary, source:
|
|
503
|
-
claim: "
|
|
501
|
+
claim: "Standard in RFCs, decision documents and decision records. Describe the options considered, including the chosen option." }
|
|
502
|
+
- { kind: boundary, source: madr,
|
|
503
|
+
claim: "Describe and compare the options here, including the chosen option. Decision records the commitment and why it was chosen." }
|
|
504
504
|
- { kind: convention, source: y-statement,
|
|
505
505
|
claim: "Naming the rejected options is grammatically obligatory in the Y-statement form — 'and neglected …' — not an optional courtesy to the reader." }
|
|
506
506
|
- { kind: convention, source: spade,
|
|
@@ -540,19 +540,19 @@ elements:
|
|
|
540
540
|
- { kind: boundary, source: asserted,
|
|
541
541
|
claim: "Distinct from Risks & Assumptions: a consequence is accepted and expected, a risk is uncertain. Filing a known cost as a risk hides that someone chose it." }
|
|
542
542
|
- { kind: empty, source: asserted,
|
|
543
|
-
claim: "
|
|
543
|
+
claim: "An option can outperform every alternative and still have consequences. Distinguish none identified from not assessed; neither follows from the option dominating the comparison." }
|
|
544
544
|
|
|
545
545
|
reversal-condition:
|
|
546
546
|
- { kind: heuristic, source: asserted,
|
|
547
547
|
claim: "An observable condition, not a review date: what would have to be seen for this to stop holding. 'Revisit in six months' is a calendar entry; 'if median latency exceeds the budget for two consecutive quarters' is a condition." }
|
|
548
|
-
- { kind:
|
|
549
|
-
claim: "
|
|
548
|
+
- { kind: boundary, source: asserted,
|
|
549
|
+
claim: "Checking that a decision was implemented and deciding whether it should change are different activities. Implementation compliance is not itself a condition for reconsideration." }
|
|
550
550
|
- { kind: convention, source: azure-waf,
|
|
551
|
-
claim: "
|
|
551
|
+
claim: "Record uncertainty that may warrant revisiting the decision. New evidence or changed circumstances can justify reconsideration regardless of its original confidence." }
|
|
552
552
|
- { kind: boundary, source: asserted,
|
|
553
553
|
claim: "Distinct from Risks & Assumptions: a failing assumption is one trigger among several. A better alternative appearing, a constraint lifting, or an authority changing reopen the decision without any assumption having failed." }
|
|
554
554
|
- { kind: empty, source: asserted,
|
|
555
|
-
claim: "
|
|
555
|
+
claim: "State what would warrant reconsideration. If no trigger has been identified, say so; this does not establish that the commitment is irreversible." }
|
|
556
556
|
|
|
557
557
|
prior-art:
|
|
558
558
|
- { kind: convention, source: rust-rfc,
|
|
@@ -606,7 +606,7 @@ elements:
|
|
|
606
606
|
- { kind: heuristic, source: asserted,
|
|
607
607
|
claim: "The element holds the model, not the instances. Bulk enumeration beyond what makes the model legible is product content, not documentation." }
|
|
608
608
|
- { kind: heuristic, source: asserted,
|
|
609
|
-
claim: "
|
|
609
|
+
claim: "Canonical Model is assigned to Architecture in this universe. Referencing it from another artifact does not change its phase." }
|
|
610
610
|
|
|
611
611
|
artifacts:
|
|
612
612
|
|
|
@@ -650,7 +650,7 @@ artifacts:
|
|
|
650
650
|
- { kind: boundary, source: asserted,
|
|
651
651
|
claim: "The brand book's strategy half — values, personality, purpose — belongs to Product Vision and Positioning Statement by the split rule. This type takes only the rules for expressing it, visual and verbal alike." }
|
|
652
652
|
- { kind: convention, source: design-md,
|
|
653
|
-
claim: "
|
|
653
|
+
claim: "DESIGN.md represents visual design-system rules. It can supply the visual portion of a brand guide; it does not represent its verbal rules." }
|
|
654
654
|
- { kind: pitfall, source: asserted,
|
|
655
655
|
claim: "Instructions for revising the document are not part of the document. That is a process, and it belongs wherever the process is owned." }
|
|
656
656
|
- { kind: refresh, source: asserted,
|
|
@@ -658,7 +658,7 @@ artifacts:
|
|
|
658
658
|
|
|
659
659
|
scenario-walkthrough:
|
|
660
660
|
- { kind: convention, source: scenario-walkthrough,
|
|
661
|
-
claim: "
|
|
661
|
+
claim: "A useful scenario walkthrough follows a person pursuing a goal. It can help a team determine what the product should do early, without prescribing detailed interface design." }
|
|
662
662
|
- { kind: pitfall, source: asserted,
|
|
663
663
|
claim: "Distinct from three unrelated walkthroughs: the live usability exercise, ATAM's quality-attribute review, and the inspection meeting." }
|
|
664
664
|
|
|
@@ -672,7 +672,7 @@ artifacts:
|
|
|
672
672
|
|
|
673
673
|
system-context-diagram:
|
|
674
674
|
- { kind: convention, source: c4,
|
|
675
|
-
claim: "C4 level 1
|
|
675
|
+
claim: "Show people and external systems at C4 level 1. Use the Architecture Overview for internal containers and their interactions at level 2. C4 component-level detail is a further level." }
|
|
676
676
|
|
|
677
677
|
decision-brief:
|
|
678
678
|
- { kind: convention, source: daci,
|
|
@@ -708,4 +708,4 @@ artifacts:
|
|
|
708
708
|
- { kind: boundary, source: adr-boundary,
|
|
709
709
|
claim: "A decision record that grows into a design guide has stopped being a decision record." }
|
|
710
710
|
- { kind: refresh, source: asserted,
|
|
711
|
-
claim: "
|
|
711
|
+
claim: "Reassess the decision when a reconsideration trigger occurs or its supporting circumstances change. If a trigger cannot be evaluated, establish what evidence is missing. If the decision changes, create a superseding record and retain the original." }
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
universe:
|
|
2
2
|
id: product-development
|
|
3
3
|
label: Product development
|
|
4
|
-
version: 0.
|
|
5
|
-
conforms_to: kbp/0.
|
|
4
|
+
version: 0.8
|
|
5
|
+
conforms_to: kbp/0.7
|
|
6
6
|
ordering_frame: phase
|
|
7
7
|
overview:
|
|
8
8
|
covers: >
|
|
@@ -93,14 +93,44 @@ empty_composition:
|
|
|
93
93
|
when: { time-separation: [none], reversibility: [reversible] }
|
|
94
94
|
|
|
95
95
|
relation_kinds:
|
|
96
|
-
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
-
|
|
102
|
-
|
|
103
|
-
|
|
96
|
+
- id: presupposes
|
|
97
|
+
ordered: true
|
|
98
|
+
phrasing:
|
|
99
|
+
forward: Context from
|
|
100
|
+
reverse: Context for
|
|
101
|
+
- id: distinct-from
|
|
102
|
+
ordered: false
|
|
103
|
+
phrasing:
|
|
104
|
+
forward: Not interchangeable with
|
|
105
|
+
- id: counterweight-to
|
|
106
|
+
ordered: false
|
|
107
|
+
phrasing:
|
|
108
|
+
forward: Balances
|
|
109
|
+
- id: feeds
|
|
110
|
+
ordered: true
|
|
111
|
+
phrasing:
|
|
112
|
+
forward: Can inform
|
|
113
|
+
reverse: Can be informed by
|
|
114
|
+
- id: split-signal
|
|
115
|
+
ordered: true
|
|
116
|
+
phrasing:
|
|
117
|
+
forward: May need detail moved to
|
|
118
|
+
reverse: May receive detail moved from
|
|
119
|
+
- id: descendant-of
|
|
120
|
+
ordered: true
|
|
121
|
+
phrasing:
|
|
122
|
+
forward: Adapted from
|
|
123
|
+
reverse: Adapted into
|
|
124
|
+
- id: requires
|
|
125
|
+
ordered: true
|
|
126
|
+
phrasing:
|
|
127
|
+
forward: Needs
|
|
128
|
+
reverse: Needed by
|
|
129
|
+
- id: nests-under
|
|
130
|
+
ordered: true
|
|
131
|
+
phrasing:
|
|
132
|
+
forward: Within the scope of
|
|
133
|
+
reverse: Broader scope for
|
|
104
134
|
|
|
105
135
|
elements:
|
|
106
136
|
|
|
@@ -172,7 +202,7 @@ artifacts:
|
|
|
172
202
|
disabled_when: { uptake: [given] }
|
|
173
203
|
composition:
|
|
174
204
|
core: [product-vision, customer-segments, value-proposition, cost-structure, trade-offs,
|
|
175
|
-
north-star-metric, growth-mechanism, capabilities, unfair-advantage]
|
|
205
|
+
{ element: north-star-metric, mode: links }, growth-mechanism, capabilities, unfair-advantage]
|
|
176
206
|
situational: [positioning-statement, input-metrics, revenue-streams, case-for-change]
|
|
177
207
|
|
|
178
208
|
- id: business-model-canvas
|
|
@@ -202,7 +232,7 @@ artifacts:
|
|
|
202
232
|
disabled_when: { uptake: [given, chosen] }
|
|
203
233
|
composition:
|
|
204
234
|
core: [product-vision, customer-segments, value-proposition, cost-structure, trade-offs,
|
|
205
|
-
north-star-metric, growth-mechanism, capabilities, unfair-advantage, revenue-streams]
|
|
235
|
+
{ element: north-star-metric, mode: links }, growth-mechanism, capabilities, unfair-advantage, revenue-streams]
|
|
206
236
|
situational: [positioning-statement, input-metrics]
|
|
207
237
|
|
|
208
238
|
- id: swot-analysis
|
|
@@ -353,15 +383,6 @@ artifacts:
|
|
|
353
383
|
- { element: decision-criteria, mode: links, when: { authority: [approve, statutory] } }
|
|
354
384
|
situational: [constraints, prior-art, open-questions]
|
|
355
385
|
|
|
356
|
-
- id: working-note
|
|
357
|
-
code: axh9h
|
|
358
|
-
enablement: { action: "resume your own work after a gap without re-deriving it", actor: the author at a later time, timing: across sessions }
|
|
359
|
-
alias: { kind: none, reason: no-aligned-form }
|
|
360
|
-
disabled_when: { time-separation: [none] }
|
|
361
|
-
composition:
|
|
362
|
-
core: [constraints, scope-in-out, open-questions]
|
|
363
|
-
situational: [trade-offs, as-built-survey, success-criteria]
|
|
364
|
-
|
|
365
386
|
relations:
|
|
366
387
|
|
|
367
388
|
- { from: value-proposition, to: case-for-change, kind: distinct-from }
|
|
@@ -392,8 +413,8 @@ relations:
|
|
|
392
413
|
- { from: north-star-metric, to: input-metrics, kind: requires }
|
|
393
414
|
- { from: guardrail-health-metrics, to: input-metrics, kind: counterweight-to }
|
|
394
415
|
- { from: measurement-protocol, to: hypothesis, kind: presupposes }
|
|
395
|
-
- { from:
|
|
396
|
-
- { from:
|
|
416
|
+
- { from: macro-environment-factors, to: external-opportunities-threats, kind: feeds }
|
|
417
|
+
- { from: competitor-profile, to: external-opportunities-threats, kind: feeds }
|
|
397
418
|
- { from: as-built-survey, to: sequence-and-foreclosure, kind: feeds }
|
|
398
419
|
- { from: stepwise-trace, to: data-flows-and-integrations, kind: split-signal }
|
|
399
420
|
- { from: product-vision, to: product-vision, kind: nests-under, legality: permitted }
|