yarramate 0.14.0 → 0.16.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/README.md +184 -146
- package/catalogues/core-enrichment.yaml +98 -4
- package/dist/adapters/graphify-entry.d.ts +1 -1
- package/dist/adapters/graphify.d.ts +5 -0
- package/dist/adapters/likec4-export.js +1 -1
- package/dist/apply-command.js +1 -1
- package/dist/ask-command.js +31 -13
- package/dist/attestation-staleness.d.ts +6 -0
- package/dist/attestation-staleness.js +210 -0
- package/dist/brief.d.ts +3 -2
- package/dist/brief.js +66 -2
- package/dist/changed.d.ts +6 -0
- package/dist/changed.js +4 -2
- package/dist/check-command.js +13 -1
- package/dist/cli-support.d.ts +1 -1
- package/dist/cli-support.js +1 -1
- package/dist/cli.js +11 -1
- package/dist/compiler.d.ts +1 -0
- package/dist/compiler.js +228 -4
- package/dist/design-command.js +25 -6
- package/dist/evidence.d.ts +7 -3
- package/dist/evidence.js +13 -3
- package/dist/export-command.js +39 -7
- package/dist/index.d.ts +5 -3
- package/dist/index.js +4 -2
- package/dist/interrogate-command.d.ts +4 -0
- package/dist/interrogate-command.js +94 -3
- package/dist/profile.d.ts +15 -0
- package/dist/profile.js +23 -6
- package/dist/projection.d.ts +9 -1
- package/dist/projection.js +86 -11
- package/dist/reconciliation.d.ts +51 -2
- package/dist/reconciliation.js +114 -3
- package/dist/rtm.d.ts +90 -0
- package/dist/rtm.js +370 -0
- package/dist/subject-identity.d.ts +34 -0
- package/dist/subject-identity.js +222 -0
- package/package.json +3 -2
- package/schema/yarramate-ask-result.schema.json +13 -0
- package/schema/yarramate-design-step.schema.json +4 -0
- package/schema/yarramate-document.schema.json +62 -0
- package/schema/yarramate-evidence-report.schema.json +10 -0
- package/schema/yarramate-evidence.schema.json +15 -0
- package/schema/yarramate-operations.schema.json +63 -1
- package/schema/yarramate-profile.schema.json +23 -1
- package/schema/yarramate-projection-result.schema.json +19 -0
- package/schema/yarramate-projection.schema.json +50 -2
- package/schema/yarramate-question-catalogue.schema.json +17 -0
- package/schema/yarramate-reconciliation-report.schema.json +93 -1
- package/schema/yarramate-rtm.schema.json +204 -0
- package/skills/yarramate-architecture/SKILL.md +8 -1
- package/skills/yarramate-architecture/references/modelling-patterns.md +257 -0
- package/skills/yarramate-architecture/references/native-authoring.md +19 -2
package/README.md
CHANGED
|
@@ -5,168 +5,221 @@
|
|
|
5
5
|
[](https://github.com/yarrasys/yarramate/actions/workflows/codeql.yml)
|
|
6
6
|
[](LICENSE)
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
**[yarramate.dev](https://yarramate.dev)** ·
|
|
9
|
+
[Case study](docs/CASE-STUDY-CROSS-HARNESS.md) ·
|
|
10
|
+
[Documentation](docs/README.md)
|
|
9
11
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
12
|
+
Your coding agents re-derive your system's design every session — and each
|
|
13
|
+
one derives it a little differently. The design document that could stop
|
|
14
|
+
them says whatever it said the day someone last edited it.
|
|
15
|
+
|
|
16
|
+
YarraMate keeps the design as a small, checked model in git instead. Agents
|
|
17
|
+
and people read prose rendered from it — bounded briefs and open design
|
|
18
|
+
questions — write decisions back through validated batches, and the CLI
|
|
13
19
|
mechanically proves the model still matches the code as changes land.
|
|
14
20
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
21
|
+
There is no LLM inside and no service behind it: the engine is a
|
|
22
|
+
deterministic CLI, nothing leaves your repository, and git remains the only
|
|
23
|
+
governance — a proposed change becomes architecture when a human merges it.
|
|
18
24
|
|
|
19
25
|
> YarraMate is pre-release software. Interfaces may evolve before the first
|
|
20
26
|
> stable release.
|
|
21
27
|
|
|
22
|
-
##
|
|
28
|
+
## Two minutes to a model
|
|
23
29
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
on a real product: a Claude Code session worked the design interview all
|
|
27
|
-
day, then an OpenAI Codex session — no shared context, the tool never
|
|
28
|
-
named — resumed it from a ten-line pointer file and the published CLI. It
|
|
29
|
-
answered 63 open design questions, filed two genuine defect reports, and in
|
|
30
|
-
a later session reported that the model "was not merely documentation" — it
|
|
31
|
-
caught an approval-path regression before the release shipped.
|
|
30
|
+
```sh
|
|
31
|
+
npm install -g yarramate
|
|
32
32
|
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
yarramate init . # scaffold .yarramate/, write the agent pointer
|
|
34
|
+
yarramate design .yarramate/workspace.yaml # the interview: the top open design question
|
|
35
|
+
yarramate apply answers.yaml .yarramate/workspace.yaml # answers land as one atomic batch
|
|
36
|
+
yarramate check .yarramate/workspace.yaml # names resolve and rules hold — or it says where not
|
|
37
|
+
```
|
|
35
38
|
|
|
36
|
-
|
|
39
|
+
The whole surface is seven verbs, one per lifecycle stage:
|
|
37
40
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
+
```text
|
|
42
|
+
init → design → apply → ask → check → reconcile → export
|
|
43
|
+
create fill write read gate drift derive
|
|
44
|
+
```
|
|
41
45
|
|
|
42
|
-
|
|
46
|
+
`design` recomputes the next open question from the model itself — there is
|
|
47
|
+
no session state anywhere. That is the design bet: the model, not the
|
|
48
|
+
session, is the state, so any agent in any harness resumes the interview
|
|
49
|
+
cold, and a crashed session or a vendor switch costs nothing.
|
|
43
50
|
|
|
44
|
-
|
|
45
|
-
- design a solution before implementation and later reconcile intent with
|
|
46
|
-
evidence.
|
|
51
|
+
## Every fact is a claim
|
|
47
52
|
|
|
48
|
-
|
|
49
|
-
introduce a parallel governance workflow.
|
|
53
|
+
What you author — plain YAML in git:
|
|
50
54
|
|
|
51
|
-
|
|
55
|
+
```yaml
|
|
56
|
+
concepts:
|
|
57
|
+
- id: order-gateway
|
|
58
|
+
kind: applicationComponent
|
|
59
|
+
name: Order Gateway
|
|
60
|
+
status: current
|
|
61
|
+
```
|
|
52
62
|
|
|
53
|
-
|
|
63
|
+
What the engine checks — a claim in the compiled graph, with provenance:
|
|
54
64
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
65
|
+
```json
|
|
66
|
+
{
|
|
67
|
+
"subject": "orders#order-gateway",
|
|
68
|
+
"predicate": "yarramate/concept/kind",
|
|
69
|
+
"value": "yarramate/core@0.1#applicationComponent",
|
|
70
|
+
"origin": "declared",
|
|
71
|
+
"source": { "document": "orders", "line": 3, "column": 5 }
|
|
72
|
+
}
|
|
73
|
+
```
|
|
61
74
|
|
|
62
|
-
|
|
75
|
+
What an agent reads — deterministic prose rendered from the graph:
|
|
63
76
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
- separately governed compatibility profiles for external languages.
|
|
77
|
+
> "Order Gateway is an application component; it already exists in this
|
|
78
|
+
> system."
|
|
67
79
|
|
|
68
|
-
|
|
80
|
+
Every sentence stands on claims, and every claim cites the file and line it
|
|
81
|
+
came from. The same YAML compiles to a byte-identical graph and the same
|
|
82
|
+
sentence, every time. There is no other structure to learn: concepts,
|
|
83
|
+
relationships, statuses, owners, and evidence are all claims.
|
|
69
84
|
|
|
70
|
-
|
|
71
|
-
a registered trademark of The Open Group. LikeC4 and Graphify are independent
|
|
72
|
-
projects; their mention does not imply affiliation or endorsement.
|
|
85
|
+
## What structure buys
|
|
73
86
|
|
|
74
|
-
|
|
87
|
+
Three things prose alone can't do — and deliberately the whole list:
|
|
75
88
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
89
|
+
- **Identity** — a stable name every agent agrees on. References resolve or
|
|
90
|
+
the model doesn't compile; two sessions can't invent two names for the
|
|
91
|
+
same component.
|
|
92
|
+
- **Verifiability** — internal consistency and drift against the code,
|
|
93
|
+
checked mechanically. A claim of "current" without supporting evidence is
|
|
94
|
+
flagged the moment it becomes checkable, and `reconcile` reports both
|
|
95
|
+
sides of every disagreement without auto-fixing either.
|
|
96
|
+
- **Sliceability** — each implementer receives exactly its neighbourhood: a
|
|
97
|
+
bounded, deterministic brief rendered from the model, so parallel agents
|
|
98
|
+
share one map.
|
|
86
99
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
[glossary](docs/GLOSSARY.md).
|
|
100
|
+
Anything a good document does as well, we leave to your documents. The model
|
|
101
|
+
holds only what nothing can derive from code: what's planned, what was
|
|
102
|
+
deliberately retired, who owns what, and why.
|
|
91
103
|
|
|
92
|
-
##
|
|
104
|
+
## Proven across harnesses
|
|
105
|
+
|
|
106
|
+
We tested the handover bet adversarially on a real product: a Claude Code
|
|
107
|
+
session worked the design interview all day, then an OpenAI Codex session —
|
|
108
|
+
no shared context, the tool never named in the prompt — resumed it from a
|
|
109
|
+
ten-line pointer file and the published CLI. It answered 63 open design
|
|
110
|
+
questions, filed two genuine defect reports, and in a later session reported
|
|
111
|
+
that the model "was not merely documentation" — it caught an approval-path
|
|
112
|
+
regression before the release shipped.
|
|
113
|
+
|
|
114
|
+
The full story, with every commit, PR, and release attached:
|
|
115
|
+
[The model is the handover](docs/CASE-STUDY-CROSS-HARNESS.md).
|
|
93
116
|
|
|
94
|
-
|
|
117
|
+
## Research, honestly
|
|
95
118
|
|
|
96
|
-
|
|
97
|
-
- Corepack
|
|
119
|
+
We benchmark our own claims and publish the misses alongside the wins:
|
|
98
120
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
121
|
+
- **Held** — cross-harness handover; elicitation (tool-equipped agents
|
|
122
|
+
across three model tiers reached a green check first try, 5/5, and
|
|
123
|
+
converged on a design question zero freehand frontier runs ever asked);
|
|
124
|
+
lie resistance (five builds from deliberately corrupted models — zero
|
|
125
|
+
lies reached code).
|
|
126
|
+
- **Not held** — under a strong external spec, a checked model did not
|
|
127
|
+
measurably beat a good design document on build convergence. We ran that
|
|
128
|
+
experiment and published it.
|
|
104
129
|
|
|
105
|
-
|
|
106
|
-
|
|
130
|
+
Results with full transcripts, diffs, and the adjudication trail:
|
|
131
|
+
[docs/research/context-benchmark](docs/research/context-benchmark) and
|
|
132
|
+
[yarramate-bench-results](https://github.com/yarrasys/yarramate-bench-results).
|
|
133
|
+
|
|
134
|
+
And honestly: maintaining a model is rent. Two things make it payable —
|
|
135
|
+
agents do most of the authoring through the interview loop, and the engine
|
|
136
|
+
tells you exactly what's missing instead of leaving completeness to
|
|
137
|
+
discipline. It pays when more than one agent, session, or human has to
|
|
138
|
+
share the same map.
|
|
139
|
+
|
|
140
|
+
## For AI agents
|
|
107
141
|
|
|
108
|
-
|
|
142
|
+
If you are an agent working in a repository with a `.yarramate/` workspace,
|
|
143
|
+
orientation is one call and the loop is three:
|
|
109
144
|
|
|
110
145
|
```sh
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
pnpm self:evidence
|
|
116
|
-
pnpm self:reconcile
|
|
117
|
-
pnpm self:check:likec4
|
|
118
|
-
pnpm self:export:likec4
|
|
119
|
-
pnpm docs:dev
|
|
146
|
+
yarramate ask .yarramate/workspace.yaml # verdict, drift summary, backlog — one round-trip
|
|
147
|
+
yarramate design .yarramate/workspace.yaml # the top open design question + its model slice
|
|
148
|
+
# answer with an operations batch, then:
|
|
149
|
+
yarramate apply operations.yaml .yarramate/workspace.yaml
|
|
120
150
|
```
|
|
121
151
|
|
|
122
|
-
|
|
152
|
+
Re-run `design` for the next question. Stop with an uncommitted, reviewable
|
|
153
|
+
diff — merging is the human acceptance step, not yours.
|
|
154
|
+
|
|
155
|
+
- Every command takes `--json` and returns a versioned, schema-backed
|
|
156
|
+
envelope; writes are atomic batches that compile as a whole workspace or
|
|
157
|
+
are rejected outright, so you cannot half-corrupt a document.
|
|
158
|
+
- `ask` accepts free text (`yarramate ask <ws> "billing"`), `--subjects`
|
|
159
|
+
for the full roster, `--where` for evidence-backed pointing, and
|
|
160
|
+
`--changed <git-range>` for review slices.
|
|
161
|
+
- `export rtm <ws> --out <dir>` derives the requirements traceability
|
|
162
|
+
matrix: every requirement traced to its motivation, realizers, evidence
|
|
163
|
+
verdicts, and attestations, with a `path:line` citation per cell.
|
|
164
|
+
- `init` writes the discovery pointer into both `AGENTS.md` and
|
|
165
|
+
`CLAUDE.md`, so this section finds you rather than the reverse.
|
|
166
|
+
- `yarramate-mcp` exposes four read-only tools (ask/design/check/reconcile)
|
|
167
|
+
over MCP stdio.
|
|
168
|
+
- In Claude Code, this repository is its own plugin marketplace:
|
|
169
|
+
|
|
170
|
+
```sh
|
|
171
|
+
/plugin marketplace add yarrasys/yarramate
|
|
172
|
+
/plugin install yarramate-architecture@yarramate
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
The full agent contract is [docs/AGENT-INTERFACE.md](docs/AGENT-INTERFACE.md).
|
|
123
176
|
|
|
124
|
-
|
|
177
|
+
## Product boundaries
|
|
125
178
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
179
|
+
YarraMate Core owns native, versioned architecture documents; compiles a
|
|
180
|
+
claim-centred, tool-neutral semantic graph; checks deterministic correctness
|
|
181
|
+
rather than architectural taste; supports explicit workspaces, profiles,
|
|
182
|
+
projections, evidence, and architecture states; and exposes a stable CLI for
|
|
183
|
+
people, CI, skills, and agent harnesses.
|
|
129
184
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
185
|
+
Optional adapters provide LikeC4 visualization from semantic projections,
|
|
186
|
+
Graphify observations as evidence overlays, and separately governed
|
|
187
|
+
compatibility profiles for external languages. Core depends on none of them.
|
|
133
188
|
|
|
134
|
-
|
|
189
|
+
YarraMate is not affiliated with or certified by The Open Group. ArchiMate®
|
|
190
|
+
is a registered trademark of The Open Group. LikeC4 and Graphify are
|
|
191
|
+
independent projects; their mention does not imply affiliation or
|
|
192
|
+
endorsement.
|
|
135
193
|
|
|
136
|
-
|
|
137
|
-
init → design → apply → ask → check → reconcile → export
|
|
138
|
-
create fill write read gate drift derive
|
|
139
|
-
```
|
|
194
|
+
## Development
|
|
140
195
|
|
|
141
|
-
|
|
196
|
+
Requirements: Node.js 22 or newer, Corepack.
|
|
142
197
|
|
|
143
198
|
```sh
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
node dist/cli.js design .yarramate/workspace.yaml
|
|
148
|
-
node dist/cli.js apply operations.yaml .yarramate/workspace.yaml
|
|
149
|
-
node dist/cli.js ask .yarramate/workspace.yaml
|
|
150
|
-
node dist/cli.js ask .yarramate/workspace.yaml "free text about the model"
|
|
151
|
-
node dist/cli.js ask .yarramate/workspace.yaml --subjects
|
|
152
|
-
node dist/cli.js ask .yarramate/workspace.yaml --advise "a design question"
|
|
153
|
-
node dist/cli.js ask .yarramate/workspace.yaml --where "compiler"
|
|
154
|
-
node dist/cli.js check .yarramate/workspace.yaml --json
|
|
155
|
-
node dist/cli.js reconcile .yarramate/workspace.yaml
|
|
156
|
-
node dist/cli.js export graph .yarramate/workspace.yaml
|
|
157
|
-
node dist/cli.js export briefs .yarramate/projections/context.yaml .yarramate/workspace.yaml --out handoff
|
|
199
|
+
corepack enable
|
|
200
|
+
pnpm install --frozen-lockfile
|
|
201
|
+
pnpm run verify
|
|
158
202
|
```
|
|
159
203
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
derives persisted artifacts. `check --strict` additionally fails when
|
|
165
|
-
any evidence observation contradicts the model, for gates that want one
|
|
166
|
-
knob. The full contract is
|
|
167
|
-
[docs/AGENT-INTERFACE.md](docs/AGENT-INTERFACE.md).
|
|
204
|
+
The full CI command runs typechecking, tests, native self-validation, LikeC4
|
|
205
|
+
generation, and LikeC4 validation. Useful focused commands: `pnpm build`,
|
|
206
|
+
`pnpm test`, `pnpm typecheck`, `pnpm self:check`, `pnpm self:reconcile`,
|
|
207
|
+
`pnpm self:check:likec4`, `pnpm docs:dev`.
|
|
168
208
|
|
|
169
|
-
|
|
209
|
+
```text
|
|
210
|
+
src/ compiler, CLI, graph, and adapter sources
|
|
211
|
+
schema/ normative JSON Schemas
|
|
212
|
+
test/ tests and acceptance fixtures
|
|
213
|
+
skills/ portable architecture workflow for agent harnesses
|
|
214
|
+
.claude-plugin/ plugin marketplace manifest offering that skill
|
|
215
|
+
docs/ contracts, guides, and decisions
|
|
216
|
+
.yarramate/ canonical dogfooded architecture
|
|
217
|
+
.yarramate-out/ reproducible generated output (ignored)
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
When developing the repository, build and invoke the same executable
|
|
221
|
+
surface: `pnpm build`, then `node dist/cli.js <verb> …` mirrors every
|
|
222
|
+
command above. For a local consumer test:
|
|
170
223
|
|
|
171
224
|
```sh
|
|
172
225
|
pnpm pack --pack-destination /tmp/yarramate-package
|
|
@@ -174,16 +227,13 @@ npm install --global /tmp/yarramate-package/yarramate-*.tgz
|
|
|
174
227
|
yarramate --help
|
|
175
228
|
```
|
|
176
229
|
|
|
177
|
-
|
|
230
|
+
The [documentation index](docs/README.md) links the public guides and
|
|
231
|
+
maintainer material. Start semantic work with the
|
|
232
|
+
[product contract](docs/PRODUCT-CONTRACT.md) and
|
|
233
|
+
[glossary](docs/GLOSSARY.md). See
|
|
234
|
+
[Consuming YarraMate](docs/CONSUMING-YARRAMATE.md) for the packaged CLI,
|
|
178
235
|
schemas, agent skill, and optional adapters.
|
|
179
236
|
|
|
180
|
-
In Claude Code, this repository is its own plugin marketplace:
|
|
181
|
-
|
|
182
|
-
```sh
|
|
183
|
-
/plugin marketplace add yarrasys/yarramate
|
|
184
|
-
/plugin install yarramate-architecture@yarramate
|
|
185
|
-
```
|
|
186
|
-
|
|
187
237
|
## Library API
|
|
188
238
|
|
|
189
239
|
The typed library exposes the same deep compiler seam:
|
|
@@ -197,27 +247,15 @@ const result = compileWorkspace([
|
|
|
197
247
|
```
|
|
198
248
|
|
|
199
249
|
`compileWorkspaceWithProfileContext` additionally returns resolved profile
|
|
200
|
-
lineage for operations that explicitly require kind ancestry. Graph v2
|
|
201
|
-
the stable, graph-only interchange result.
|
|
202
|
-
|
|
203
|
-
Normative schemas are available through package exports such as
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
yarramate/schema/
|
|
207
|
-
yarramate/
|
|
208
|
-
yarramate/
|
|
209
|
-
yarramate/schema/graph-v2
|
|
210
|
-
yarramate/schema/projection
|
|
211
|
-
yarramate/schema/evidence
|
|
212
|
-
yarramate/schema/core-contract
|
|
213
|
-
```
|
|
214
|
-
|
|
215
|
-
Optional adapter entry points are exported from:
|
|
216
|
-
|
|
217
|
-
```text
|
|
218
|
-
yarramate/adapter/likec4
|
|
219
|
-
yarramate/adapter/graphify
|
|
220
|
-
```
|
|
250
|
+
lineage for operations that explicitly require kind ancestry. Graph v2
|
|
251
|
+
remains the stable, graph-only interchange result.
|
|
252
|
+
|
|
253
|
+
Normative schemas are available through package exports such as
|
|
254
|
+
`yarramate/schema/document`, `yarramate/schema/workspace`,
|
|
255
|
+
`yarramate/schema/graph-v2`, `yarramate/schema/projection`,
|
|
256
|
+
`yarramate/schema/evidence`, and `yarramate/schema/core-contract`. Optional
|
|
257
|
+
adapter entry points are exported from `yarramate/adapter/likec4` and
|
|
258
|
+
`yarramate/adapter/graphify`.
|
|
221
259
|
|
|
222
260
|
## Contributing and security
|
|
223
261
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
format: yarramate/question-catalogue/v1
|
|
2
2
|
id: core-enrichment
|
|
3
|
-
version: "0.
|
|
3
|
+
version: "0.7"
|
|
4
4
|
profile: yarramate/core@0.1
|
|
5
5
|
presentation:
|
|
6
6
|
title: Core enrichment interview
|
|
@@ -53,6 +53,9 @@ questions:
|
|
|
53
53
|
- yarramate/core@0.1#outcome
|
|
54
54
|
question: >-
|
|
55
55
|
What outcome justifies this system's existence?
|
|
56
|
+
askPlain: >-
|
|
57
|
+
What would success look like for this system? What should be
|
|
58
|
+
different in the business because it exists?
|
|
56
59
|
materiality: >-
|
|
57
60
|
Without a declared goal or outcome, no alternative can be selected or
|
|
58
61
|
rejected on grounds anyone can review; every later trade-off becomes
|
|
@@ -73,6 +76,9 @@ questions:
|
|
|
73
76
|
- yarramate/core@0.1#driver
|
|
74
77
|
question: >-
|
|
75
78
|
Which stakeholders and drivers shape this architecture?
|
|
79
|
+
askPlain: >-
|
|
80
|
+
Who cares about this system, and what outside pressures are
|
|
81
|
+
pushing on it: customers, regulators, costs, deadlines?
|
|
76
82
|
materiality: >-
|
|
77
83
|
Drivers decide which qualities dominate when requirements conflict;
|
|
78
84
|
unstated drivers get re-litigated in every review.
|
|
@@ -92,6 +98,9 @@ questions:
|
|
|
92
98
|
- yarramate/core@0.1#requirement
|
|
93
99
|
question: >-
|
|
94
100
|
Which constraints and requirements are non-negotiable?
|
|
101
|
+
askPlain: >-
|
|
102
|
+
What are the hard rules here? Is there anything we absolutely
|
|
103
|
+
must do, or must never do, no matter which option we pick?
|
|
95
104
|
materiality: >-
|
|
96
105
|
Non-negotiable constraints eliminate alternatives outright; discovering
|
|
97
106
|
them after design selection invalidates the selection.
|
|
@@ -116,6 +125,9 @@ questions:
|
|
|
116
125
|
question: >-
|
|
117
126
|
Nothing realizes {subject.name}. What fulfils it — or is it
|
|
118
127
|
aspirational?
|
|
128
|
+
askPlain: >-
|
|
129
|
+
Nothing in the plan currently delivers "{subject.name}". What is
|
|
130
|
+
going to get us there? Or is it more of an aspiration for now?
|
|
119
131
|
materiality: >-
|
|
120
132
|
An unrealized goal either reprioritizes the roadmap or should be
|
|
121
133
|
declared aspirational so it stops steering design.
|
|
@@ -124,7 +136,10 @@ questions:
|
|
|
124
136
|
Add realization relationships from the fulfilling capability or
|
|
125
137
|
service, record the aspirational status in the goal's description,
|
|
126
138
|
or retire the goal (status: retired) to record that it no longer
|
|
127
|
-
steers design.
|
|
139
|
+
steers design. A goal may also be authored retired from the start:
|
|
140
|
+
status retired with the rationale in its description is the
|
|
141
|
+
declared non-goal record, and exports render it under a Non-goals
|
|
142
|
+
heading (ADR 0073).
|
|
128
143
|
|
|
129
144
|
|
|
130
145
|
- id: goal-no-driver
|
|
@@ -146,6 +161,9 @@ questions:
|
|
|
146
161
|
- yarramate/core@0.1#stakeholder
|
|
147
162
|
question: >-
|
|
148
163
|
What pressure produces {subject.name}?
|
|
164
|
+
askPlain: >-
|
|
165
|
+
Why is "{subject.name}" a goal at all? Who or what is pushing
|
|
166
|
+
for it?
|
|
149
167
|
materiality: >-
|
|
150
168
|
A goal with no driver behind it cannot be reprioritized when the
|
|
151
169
|
environment changes; it floats free of the forces that would retire
|
|
@@ -169,6 +187,9 @@ questions:
|
|
|
169
187
|
direction: outgoing
|
|
170
188
|
question: >-
|
|
171
189
|
What does {subject.name} actually push on?
|
|
190
|
+
askPlain: >-
|
|
191
|
+
We say "{subject.name}" matters. What would we decide differently
|
|
192
|
+
because of it? If nothing, does it belong in this conversation?
|
|
172
193
|
materiality: >-
|
|
173
194
|
A driver that influences nothing cannot participate in any trade-off;
|
|
174
195
|
it is context theatre until it points at a goal or principle.
|
|
@@ -192,6 +213,9 @@ questions:
|
|
|
192
213
|
direction: any
|
|
193
214
|
question: >-
|
|
194
215
|
What does {subject.name} care about here?
|
|
216
|
+
askPlain: >-
|
|
217
|
+
What does {subject.name} actually care about in all this? What
|
|
218
|
+
would make them push back, and what would make them happy?
|
|
195
219
|
materiality: >-
|
|
196
220
|
A stakeholder with no stated concern cannot veto or endorse anything;
|
|
197
221
|
their objections will arrive as surprises at review time.
|
|
@@ -215,6 +239,9 @@ questions:
|
|
|
215
239
|
question: >-
|
|
216
240
|
Nothing realizes {subject.name}. What will fulfil it — or is it
|
|
217
241
|
out of scope?
|
|
242
|
+
askPlain: >-
|
|
243
|
+
Who or what is going to make "{subject.name}" happen? Or should
|
|
244
|
+
we agree to drop it?
|
|
218
245
|
materiality: >-
|
|
219
246
|
An unrealized requirement is either unplanned work hiding in plain
|
|
220
247
|
sight or scope that should be explicitly declined; both change the
|
|
@@ -224,8 +251,11 @@ questions:
|
|
|
224
251
|
Add realization from the fulfilling service, component, or
|
|
225
252
|
behavior; to descope instead, retire the requirement (status:
|
|
226
253
|
retired) — retirement preserves the decision on record and closes
|
|
227
|
-
the question (ADR 0064).
|
|
228
|
-
|
|
254
|
+
the question (ADR 0064). Descoping at inception is the same
|
|
255
|
+
motion: a requirement authored with status retired, rationale in
|
|
256
|
+
its description, is the standing non-goal record and exports
|
|
257
|
+
render it under a Non-goals heading (ADR 0073). Delete only when
|
|
258
|
+
the history itself is noise.
|
|
229
259
|
|
|
230
260
|
- id: principle-unapplied
|
|
231
261
|
wave: motivation
|
|
@@ -242,6 +272,9 @@ questions:
|
|
|
242
272
|
direction: any
|
|
243
273
|
question: >-
|
|
244
274
|
Where does {subject.name} bite?
|
|
275
|
+
askPlain: >-
|
|
276
|
+
Where does the principle "{subject.name}" actually change how we
|
|
277
|
+
work? Can you point to a decision it has shaped, or would shape?
|
|
245
278
|
materiality: >-
|
|
246
279
|
A principle applied nowhere constrains nothing; naming what it
|
|
247
280
|
influences is what makes it enforceable in review.
|
|
@@ -261,6 +294,9 @@ questions:
|
|
|
261
294
|
- condition: isolated
|
|
262
295
|
question: >-
|
|
263
296
|
What does the finding {subject.name} bear on?
|
|
297
|
+
askPlain: >-
|
|
298
|
+
We recorded the finding "{subject.name}". What does it actually
|
|
299
|
+
tell us, and what should change because of it?
|
|
264
300
|
materiality: >-
|
|
265
301
|
An assessment that touches nothing changes no decision; link it to
|
|
266
302
|
the driver or goal it evaluates or drop it.
|
|
@@ -284,6 +320,9 @@ questions:
|
|
|
284
320
|
question: >-
|
|
285
321
|
Has an accountable reviewer accepted {subject.name} as adequately
|
|
286
322
|
stated?
|
|
323
|
+
askPlain: >-
|
|
324
|
+
Is everyone happy with how "{subject.name}" is written up? Who in
|
|
325
|
+
this room is willing to put their name on it as correct?
|
|
287
326
|
materiality: >-
|
|
288
327
|
Linkage proves the wiring exists; only a recorded judgment says the
|
|
289
328
|
words are right. Without an attestation, adequacy is nobody's
|
|
@@ -311,6 +350,9 @@ questions:
|
|
|
311
350
|
direction: outgoing
|
|
312
351
|
question: >-
|
|
313
352
|
Who or what consumes {subject.name}?
|
|
353
|
+
askPlain: >-
|
|
354
|
+
Who actually uses "{subject.name}"? If we cannot name anyone,
|
|
355
|
+
why do we offer it?
|
|
314
356
|
materiality: >-
|
|
315
357
|
A service with no consumer is either the system boundary stated
|
|
316
358
|
implicitly, missing model detail, or scope to delete.
|
|
@@ -334,6 +376,9 @@ questions:
|
|
|
334
376
|
predicate: yarramate/ownership/owner
|
|
335
377
|
question: >-
|
|
336
378
|
Who is accountable for {subject.name}?
|
|
379
|
+
askPlain: >-
|
|
380
|
+
If something goes wrong with "{subject.name}", whose desk does
|
|
381
|
+
it land on?
|
|
337
382
|
materiality: >-
|
|
338
383
|
Ownership decides who accepts changes, budgets maintenance, and
|
|
339
384
|
adjudicates constraint conflicts for the subject.
|
|
@@ -357,6 +402,9 @@ questions:
|
|
|
357
402
|
direction: outgoing
|
|
358
403
|
question: >-
|
|
359
404
|
What behavior is {subject.name} actually responsible for?
|
|
405
|
+
askPlain: >-
|
|
406
|
+
What does {subject.name} actually do in this picture? What work
|
|
407
|
+
are they on the hook for day to day?
|
|
360
408
|
materiality: >-
|
|
361
409
|
An actor with no assignment is either decorative or hiding an
|
|
362
410
|
undeclared responsibility boundary.
|
|
@@ -381,6 +429,9 @@ questions:
|
|
|
381
429
|
direction: any
|
|
382
430
|
question: >-
|
|
383
431
|
Which behavior creates and maintains {subject.name}?
|
|
432
|
+
askPlain: >-
|
|
433
|
+
Where does "{subject.name}" come from? Who creates it, and who
|
|
434
|
+
keeps it up to date?
|
|
384
435
|
materiality: >-
|
|
385
436
|
Information nothing accesses cannot be owned, persisted, or exchanged
|
|
386
437
|
correctly; write responsibility determines consistency boundaries.
|
|
@@ -401,6 +452,9 @@ questions:
|
|
|
401
452
|
- yarramate/core@0.1#technologyService
|
|
402
453
|
question: >-
|
|
403
454
|
What does this system offer its environment, and to whom?
|
|
455
|
+
askPlain: >-
|
|
456
|
+
In plain terms: what does this system do for people, and who are
|
|
457
|
+
those people?
|
|
404
458
|
materiality: >-
|
|
405
459
|
Declared services define the solution boundary; without them the model
|
|
406
460
|
cannot say what is inside versus outside.
|
|
@@ -429,6 +483,9 @@ questions:
|
|
|
429
483
|
- yarramate/core@0.1#outcome
|
|
430
484
|
question: >-
|
|
431
485
|
Which requirement or goal does {subject.name} exist to satisfy?
|
|
486
|
+
askPlain: >-
|
|
487
|
+
Why do we have "{subject.name}" at all? If we dropped it
|
|
488
|
+
tomorrow, which goal or promise would suffer?
|
|
432
489
|
materiality: >-
|
|
433
490
|
A service with no motivation link cannot be traded off against
|
|
434
491
|
anything; when budgets tighten nobody can say what breaks if it
|
|
@@ -453,6 +510,9 @@ questions:
|
|
|
453
510
|
direction: incoming
|
|
454
511
|
question: >-
|
|
455
512
|
What starts {subject.name}?
|
|
513
|
+
askPlain: >-
|
|
514
|
+
How does "{subject.name}" get kicked off? Does somebody start
|
|
515
|
+
it, or does something happen that sets it in motion?
|
|
456
516
|
materiality: >-
|
|
457
517
|
A process nothing triggers or performs either runs on an undeclared
|
|
458
518
|
schedule or does not actually happen; both are design facts worth
|
|
@@ -484,6 +544,9 @@ questions:
|
|
|
484
544
|
- yarramate/core@0.1#capability
|
|
485
545
|
question: >-
|
|
486
546
|
What actually delivers {subject.name}?
|
|
547
|
+
askPlain: >-
|
|
548
|
+
We promise "{subject.name}". Walk me through how it actually
|
|
549
|
+
gets delivered today, or how it will be.
|
|
487
550
|
materiality: >-
|
|
488
551
|
A business service with no realizing behavior or application is a
|
|
489
552
|
promise with no mechanism; the gap is where delivery estimates go
|
|
@@ -965,6 +1028,37 @@ questions:
|
|
|
965
1028
|
Add a lifecycle status claim; planned subjects should also appear in a
|
|
966
1029
|
target architecture state where states are used.
|
|
967
1030
|
|
|
1031
|
+
- id: subjects-near-duplicate
|
|
1032
|
+
wave: hygiene
|
|
1033
|
+
since: "0.7"
|
|
1034
|
+
scope: subject
|
|
1035
|
+
subjects:
|
|
1036
|
+
kinds:
|
|
1037
|
+
- yarramate/core@0.1#capability
|
|
1038
|
+
- yarramate/core@0.1#businessService
|
|
1039
|
+
- yarramate/core@0.1#applicationService
|
|
1040
|
+
- yarramate/core@0.1#applicationComponent
|
|
1041
|
+
- yarramate/core@0.1#businessActor
|
|
1042
|
+
- yarramate/core@0.1#dataObject
|
|
1043
|
+
- yarramate/core@0.1#businessObject
|
|
1044
|
+
trigger:
|
|
1045
|
+
- condition: near-duplicate
|
|
1046
|
+
question: >-
|
|
1047
|
+
{subject.name} closely resembles {counterparts}. Is this one subject
|
|
1048
|
+
recorded twice, or are they genuinely different things?
|
|
1049
|
+
materiality: >-
|
|
1050
|
+
Identity is the first thing the model promises: one subject, one name,
|
|
1051
|
+
one place to change it. Two records for one thing silently fork every
|
|
1052
|
+
decision made about it, and both halves still pass check.
|
|
1053
|
+
authority: human
|
|
1054
|
+
resolution: >-
|
|
1055
|
+
If they are the same subject, keep one and delete or retire the other,
|
|
1056
|
+
moving its relationships across, and record the discarded name in the
|
|
1057
|
+
survivor's aka list so the old word still finds it. If they are
|
|
1058
|
+
genuinely different, say so in the model: add the counterpart's id to
|
|
1059
|
+
this subject's distinctFrom list. That answer is itself a claim, so it
|
|
1060
|
+
closes the question permanently and survives re-running the interview.
|
|
1061
|
+
|
|
968
1062
|
- id: states-undefined
|
|
969
1063
|
wave: hygiene
|
|
970
1064
|
since: "0.1"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { observeGraphify, type
|
|
1
|
+
export { observeGraphify, type GraphifyObservationIssue, type GraphifyGraph, type GraphifyObservationResult, } from './graphify.js';
|