@rse/specbook 1.5.2 → 1.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/LICENSE.txt +201 -0
  2. package/README.md +288 -43
  3. package/dst/specbook-api.d.ts +23 -3
  4. package/dst/specbook-api.js +133 -59
  5. package/dst/specbook-cli.js +93 -26
  6. package/dst/specbook-cmd-describe.js +4 -4
  7. package/dst/specbook-cmd-export-schema.d.ts +8 -0
  8. package/dst/specbook-cmd-export-schema.js +441 -0
  9. package/dst/specbook-cmd-export.js +23 -6
  10. package/dst/specbook-cmd-init-sample.d.ts +4 -0
  11. package/dst/specbook-cmd-init-sample.js +322 -0
  12. package/dst/specbook-cmd-init.d.ts +1 -0
  13. package/dst/specbook-cmd-init.js +42 -10
  14. package/dst/specbook-cmd-lint.js +46 -48
  15. package/dst/specbook-cmd-query.d.ts +30 -0
  16. package/dst/specbook-cmd-query.js +165 -0
  17. package/dst/specbook-config.d.ts +9 -1
  18. package/dst/specbook-config.js +135 -10
  19. package/dst/specbook-coverage.js +2 -2
  20. package/dst/specbook-diagram.d.ts +7 -5
  21. package/dst/specbook-diagram.js +546 -143
  22. package/dst/specbook-export-ast.d.ts +1 -1
  23. package/dst/specbook-export-ast.js +11 -8
  24. package/dst/specbook-export-code.js +3 -3
  25. package/dst/specbook-export-common.d.ts +1 -1
  26. package/dst/specbook-export-common.js +3 -2
  27. package/dst/specbook-export-diagram.d.ts +1 -1
  28. package/dst/specbook-export-diagram.js +25 -7
  29. package/dst/specbook-export-html-fold.d.ts +16 -6
  30. package/dst/specbook-export-html-fold.js +65 -44
  31. package/dst/specbook-export-html-render.js +107 -26
  32. package/dst/specbook-export-html-search.js +18 -20
  33. package/dst/specbook-export-html-template.js +38 -9
  34. package/dst/specbook-export-html-widget.d.ts +2 -0
  35. package/dst/specbook-export-html-widget.js +219 -19
  36. package/dst/specbook-export-html.css +208 -38
  37. package/dst/specbook-export-html.js +96 -53
  38. package/dst/specbook-export-md.d.ts +2 -1
  39. package/dst/specbook-export-md.js +7 -8
  40. package/dst/specbook-export-pdf.js +1 -1
  41. package/dst/specbook-files.d.ts +2 -0
  42. package/dst/specbook-files.js +41 -0
  43. package/dst/specbook-format-meta.yaml +401 -0
  44. package/dst/specbook-format-pm.yaml +1240 -0
  45. package/dst/specbook-format-schema.d.ts +33 -3
  46. package/dst/specbook-format-schema.js +49 -3
  47. package/dst/specbook-format.md +427 -47
  48. package/dst/specbook-format.yaml +524 -228
  49. package/dst/specbook-ignore.js +2 -2
  50. package/dst/specbook-link.d.ts +4 -0
  51. package/dst/specbook-link.js +61 -6
  52. package/dst/specbook-mcp.js +103 -19
  53. package/dst/specbook-parse-semantic.d.ts +1 -0
  54. package/dst/specbook-parse-semantic.js +11 -4
  55. package/dst/specbook-parse-syntax.d.ts +1 -0
  56. package/dst/specbook-parse-syntax.js +1 -1
  57. package/dst/specbook-parse.d.ts +1 -1
  58. package/dst/specbook-parse.js +3 -3
  59. package/dst/specbook-project.d.ts +2 -0
  60. package/dst/specbook-project.js +15 -5
  61. package/dst/specbook-remote.d.ts +28 -0
  62. package/dst/specbook-remote.js +429 -0
  63. package/package.json +32 -20
@@ -0,0 +1,1240 @@
1
+ ##
2
+ ## Specification Book (SpecBook)
3
+ ## Copyright (c) 2026 Dr. Ralf S. Engelschall <rse@engelschall.com>
4
+ ## Licensed under Apache 2.0 <https://spdx.org/licenses/Apache-2.0>
5
+ ##
6
+
7
+ # This is the "Project Management" SpecBook schema.
8
+ #
9
+ # Modeling Purpose
10
+ # ----------------
11
+ #
12
+ # This schema allows specifying the management of a project delivering a
13
+ # solution, system, or software: the charter justifying and funding it, the
14
+ # organization of its parties and persons, the deliverables, the work
15
+ # breakdown of the scope, the schedule of the work, the risks threatening
16
+ # and the opportunities favoring it, the governance steering it, and the
17
+ # issues and changes it handles. It stands on its own (`specbook <cmd> -c pm`),
18
+ # beside the specification of the solution it delivers: the specification
19
+ # describes *what* is built, the project management handbook *who* builds it,
20
+ # *when*, and *how* the project is steered.
21
+ #
22
+ # Modeling Coverage
23
+ # -----------------
24
+ #
25
+ # | "Project Management" SpecBook | PMBOK Performance Domain | PRINCE2 Practice | IPMA ICB Practice Element |
26
+ # | ----------------------------- | ------------------------ | ---------------- | ------------------------------------- |
27
+ # | META: Title (TI) | | | |
28
+ # | ----------------------------- | ------------------------ | ---------------- | ------------------------------------- |
29
+ # | PM: Project Charter (PC) | Planning, Measurement | Business Case | Requirements and Objectives, Finance |
30
+ # | PM: Project Organization (PO) | Team, Stakeholders | Organizing | Organisation, Resources, Stakeholders |
31
+ # | PM: Governance Model (GM) | Project Work | Directing | Organisation, Plan and Control |
32
+ # | PM: Delivery Scope (DS) | Delivery, Measurement | Plans, Quality | Scope, Quality |
33
+ # | PM: Work Breakdown (WB) | Planning | Plans | Scope, Resources, Finance |
34
+ # | PM: Project Schedule (PS) | Planning, Measurement | Plans, Progress | Time, Plan and Control |
35
+ # | PM: Risk Register (RR) | Uncertainty | Risk | Risk and Opportunity |
36
+ # | PM: Change Log (CL) | Project Work | Issues | Plan and Control, Change |
37
+ #
38
+ # Modeling Decisions
39
+ # ------------------
40
+ #
41
+ # - The artifacts are ordered so that every reference points
42
+ # backward: the charter (why), the organization (who), the
43
+ # governance (how it is steered), the deliverables (what), the work
44
+ # breakdown (which work), the schedule (when), the risks (what could
45
+ # go wrong or turn out well), and the change log (what did change).
46
+ # Only the "referenced" and "coverage" constraints and the diagram
47
+ # node sets name later objects.
48
+ #
49
+ # - The governance precedes the plan, as the ceremonies steer
50
+ # whatever is planned and are set up with the organization: the
51
+ # milestones of the schedule hence name the gates held at them
52
+ # ("GATES"), instead of a ceremony naming its milestones, and the
53
+ # issues of the change log name the ceremony deciding on them.
54
+ #
55
+ # - The charter carries no owner references, as it precedes the
56
+ # team: the objectives are served by the deliverables (which
57
+ # trace back onto them through "SERVES"), not owned by persons.
58
+ #
59
+ # - The money lives at the ends of the chain: the charter fixes the
60
+ # total "BUDGET" and the "RESERVE" held back out of it, the work
61
+ # packages carry the non-labor "COST" (licenses, hardware, travel)
62
+ # beside their person-day "EFFORT", and the party "RATE" prices the
63
+ # person-days, so the budget is checkable against the priced
64
+ # efforts plus the costs plus the reserve without a cost model of
65
+ # its own.
66
+ #
67
+ # - The schedule runs in weeks from week 0, as a plan outlives its
68
+ # dates, while the optional "START" date of the Project Schedule
69
+ # artifact anchors week 0 onto the calendar, so that a "Time"
70
+ # constraint of the charter is checkable against the Gantt chart.
71
+ #
72
+ # - The dependencies of the tasks ("AFTER") are finish-to-start ones
73
+ # without a lag, the one relationship a Gantt chart draws as an
74
+ # arrow and the one a reader reconstructs from the bars alone: a
75
+ # start-to-start overlap is expressed by splitting the predecessor,
76
+ # and a lag by the earliest "START" of the successor.
77
+ #
78
+ # - The development approach of the project ("APPROACH" of the
79
+ # charter: predictive, agile, or hybrid) is stated, not modeled: the
80
+ # phases and tasks of the schedule carry a predictive plan as well
81
+ # as the sprints of an agile one, and the ceremonies the events of
82
+ # either, so the approach merely tells the reader how to read them.
83
+ #
84
+ # - The threats and the opportunities form one object kind "RISK",
85
+ # told apart by their "TYPE", as both are uncertain events rated by
86
+ # probability and impact, owned, and answered by a strategy, while
87
+ # the threat and the opportunity responses share the "STRATEGY"
88
+ # enumeration (the description naming which applies to which).
89
+ #
90
+ # - The issues (the change requests, the problems, and the
91
+ # off-specifications) form the "ISSUE" object kind of the Change
92
+ # Log, as the home of everything which happened instead of being
93
+ # planned: a risk which occurred refers to it through "CAUSED-BY",
94
+ # the decision on it names the ceremony taking it, and the
95
+ # affected objects of all other artifacts are referenced, which is
96
+ # why the Change Log closes the artifact chain.
97
+ #
98
+ # - The stakeholders are parties, too, instead of a roster of their
99
+ # own, as the customer and the contractor are stakeholders and
100
+ # parties alike: a party of kind "Stakeholder" is affected by the
101
+ # results without contributing members, every party is analyzed
102
+ # on the power/interest grid ("INFLUENCE", "INTEREST"), planned
103
+ # by its "ENGAGEMENT" and "ATTITUDE", engaged through the
104
+ # ceremonies naming it (a party with members has to be named
105
+ # itself, as a reference onto a member does not cover it), and
106
+ # threatened by the risks naming it.
107
+ #
108
+ # - A milestone is a task without a duration, so the tasks and the
109
+ # milestones of the plan form one object kind and depend on each
110
+ # other without a forward reference between two kinds.
111
+ #
112
+ # - The durations and starts of the plan are plain numbers of weeks
113
+ # (the time axis, coarse enough for a chart fitting onto a page),
114
+ # while the efforts of the work packages and the budgets of the
115
+ # phases are plain numbers of person-days (the work), as a package
116
+ # of ten person-days done by two persons spans one week; a party
117
+ # rate turns the person-days into money.
118
+ #
119
+ # - All artifacts are optional, so that the schema can back a single
120
+ # plan as well as a complete project handbook, and so that a freshly
121
+ # initialized specification already lints cleanly.
122
+ #
123
+ # - The progress is tracked by the optional "STATUS" of the
124
+ # deliverables and tasks (beside the one of the risks), whose
125
+ # absence means "Planned", so a plan written before the project
126
+ # starts carries no status at all and the statuses are added as
127
+ # the project proceeds.
128
+ #
129
+ # - The handbook carries the baseline, not the actuals: no actual
130
+ # effort of a package, no actual finish of a task, no percentage
131
+ # complete, as these figures change weekly and live in the time
132
+ # tracking and the status report (a "Report" ceremony), whose
133
+ # variance analysis compares them against the baseline stated
134
+ # here. A re-planning (a changed baseline) is an approved issue of
135
+ # the Change Log, and the plan is edited to match.
136
+ #
137
+
138
+ - kind: META
139
+ name: Title
140
+ id: TI
141
+ file: 00-TI-Title.md
142
+ desc: >
143
+ The top-level specification meta information.
144
+ Some of the information is rendered onto the title page.
145
+ optional: true
146
+ diagram:
147
+ type: graph
148
+ nodes: "[[PM:*]]"
149
+ deep: true
150
+ qualified: true
151
+ ordered: true
152
+ nest:
153
+ kind: true
154
+ crossing: target
155
+ config:
156
+ graph-columns-max: 2
157
+ props:
158
+ - name: LOGO
159
+ desc: The logo of the specification.
160
+ optional: true
161
+ - name: TITLE
162
+ desc: The title of the specification.
163
+ optional: true
164
+ - name: SUBTITLE
165
+ desc: The subtitle of the specification.
166
+ optional: true
167
+ - name: AUTHOR
168
+ desc: The author of the specification.
169
+ optional: true
170
+ - name: VERSION
171
+ desc: The version of the specification.
172
+ optional: true
173
+ - name: LANG
174
+ desc: The language of the specification texts (ISO 639-1 code).
175
+ value: /^[a-z]{2}(-[A-Za-z0-9]+)?$/
176
+ optional: true
177
+ - name: CHARSET
178
+ desc: The character set the embedded fonts are subsetted to.
179
+ value: enum(US-ASCII,ISO-8859-1,ISO-Latin-1,ISO-8859-15,ISO-Latin-15,UTF-8)
180
+ optional: true
181
+ - name: PAPER-SIZE
182
+ desc: The paper size the print/PDF rendering is targeted at.
183
+ value: enum(A4,Letter,Legal)
184
+ optional: true
185
+ - name: THEME-STYLE
186
+ desc: The theme style.
187
+ value: enum(Dark,Light)
188
+ optional: true
189
+ - name: THEME-TONE
190
+ desc: The theme color tone, optionally followed by the complement color tone (else derived).
191
+ value: /^#[0-9a-fA-F]{6}(\s+#[0-9a-fA-F]{6})?$/
192
+ optional: true
193
+
194
+ - kind: PM
195
+ name: Project Charter
196
+ id: PC
197
+ file: 01-PC-Project-Charter.md
198
+ desc: >
199
+ The justification of the project, defining *why* it is undertaken: the objectives it
200
+ pursues, each with the measurable criterion by which its success is judged, the
201
+ constraints it has to respect, and the assumptions it rests on, plus the development
202
+ approach it follows and the budget and the reserve funding it, so that every
203
+ deliverable serves a stated objective and the project is closed against its own success
204
+ criteria instead of against its last plan.
205
+ optional: true
206
+ refs: >
207
+ - PMI: A Guide to the Project Management Body of Knowledge (PMBOK Guide), 7th ed.: Planning, Measurement, and Development Approach and Life Cycle Performance Domains (2021),
208
+ https://www.pmi.org/standards/pmbok
209
+ - Axelos: Managing Successful Projects with PRINCE2, 7th ed.: Business Case (2023),
210
+ https://www.axelos.com/certifications/propath/prince2-project-management
211
+ - IPMA: Individual Competence Baseline (ICB), 4th ed.: Requirements and Objectives, Finance (2015),
212
+ https://www.ipma.world/individuals/standard/
213
+ - ISO 21502:2020: Project, programme and portfolio management -- Guidance on project management: Pre-project activities (2020),
214
+ https://www.iso.org/standard/74947.html
215
+ diagram:
216
+ type: tree
217
+ nodes: "[[OBJECTIVE:*]], [[CONSTRAINT:*]], [[ASSUMPTION:*]]"
218
+ links: []
219
+ markUncovered: referenced
220
+ nest:
221
+ kind: true
222
+ config:
223
+ tree-stack-min: 1
224
+ props:
225
+ - name: APPROACH
226
+ desc: |
227
+ The development approach of the project, one of:
228
+ - `Predictive`: The scope, the schedule, and the budget are planned upfront and
229
+ the results delivered at the end (the "waterfall").
230
+ - `Agile`: The scope evolves in iterations delivering increments, the
231
+ schedule and the budget being fixed per iteration.
232
+ - `Hybrid`: The phases and the milestones are predictive, while the
233
+ construction inside them runs in iterations.
234
+ Omitted where it is not stated, as the schedule carries either.
235
+ value: enum(Predictive,Agile,Hybrid)
236
+ optional: true
237
+ - name: BUDGET
238
+ desc: >
239
+ The total budget of the project as money (e.g. `240000 EUR`): the person-day
240
+ budgets of the phases priced by the `RATE` of the parties, the non-labor `COST`
241
+ of the work packages, and the `RESERVE`; omitted where no budget is fixed (e.g.
242
+ a time and material contract).
243
+ optional: true
244
+ - name: RESERVE
245
+ desc: >
246
+ The part of the `BUDGET` held back as money (e.g. `22500 EUR`) for the
247
+ contingencies of the risks and the approved changes of the Change Log, released
248
+ by the steering alone; omitted where no reserve is held.
249
+ optional: true
250
+ children:
251
+ - kind: OBJECTIVE
252
+ desc: >
253
+ A single objective of the project, named with a short (2-5 word) noun phrase of
254
+ the outcome (e.g. `Townhall Backchannel`, `Independent Operation`) and described
255
+ in a concise (1-3 sentence) paragraph by the benefit the customer gains once it is
256
+ reached, plus a 1-sentence rationale ("why") stating the need behind it. Every
257
+ objective is served by at least one deliverable of the Delivery Scope.
258
+ optional: true
259
+ format:
260
+ type: concise
261
+ maxTableColumns: 5
262
+ referenced:
263
+ - "[[DELIVERABLE:*]]"
264
+ props:
265
+ - name: PRIORITY
266
+ desc: >
267
+ The priority of the objective: `High` for one the project fails without,
268
+ `Medium` for one it is expected to reach, or `Low` for one it reaches if
269
+ the constraints permit.
270
+ value: enum(High,Medium,Low)
271
+ - name: SUCCESS
272
+ desc: >
273
+ The measurable criterion by which the objective is judged reached, stated
274
+ as an observable condition with its figure and its point in time (e.g.
275
+ `5000 attendees sustained in the load test before the go-live`), so that
276
+ the success of the project is a fact, not an opinion.
277
+ - kind: CONSTRAINT
278
+ desc: >
279
+ A single constraint of the project, named with a short (2-5 word) summary (e.g.
280
+ `Fixed Price`, `EU Data Residency`) and described in a concise (1-2 sentence)
281
+ paragraph by the limit it imposes and its origin (a contract, a law, a date, a
282
+ budget), so that the plan is checked against it instead of discovering it.
283
+ optional: true
284
+ format:
285
+ type: concise
286
+ maxTableColumns: 5
287
+ props:
288
+ - name: KIND
289
+ desc: |
290
+ The kind of the constraint, one of:
291
+ - `Time`: A fixed date or deadline the project has to meet.
292
+ - `Budget`: A limit of the money or effort the project may consume.
293
+ - `Scope`: A boundary of what the project does or does not deliver.
294
+ - `Quality`: A standard or level the results have to reach.
295
+ - `Resource`: A limit of the staff, skills, or facilities available to the project.
296
+ - `Technology`: A platform, product, or technology the project has to use.
297
+ - `Legal`: A law, regulation, or contract term the project has to obey.
298
+ value: enum(Time,Budget,Scope,Quality,Resource,Technology,Legal)
299
+ - kind: ASSUMPTION
300
+ desc: >
301
+ A single assumption of the project, named with a short (2-5 word) summary (e.g.
302
+ `Stream Provider Stays`) and described in a concise (1-2 sentence) paragraph by
303
+ the condition taken for granted and the part of the plan resting on it, so that
304
+ a refuted assumption is recognized as a change of the plan, not as a surprise.
305
+ optional: true
306
+ format:
307
+ type: concise
308
+ maxTableColumns: 5
309
+ props:
310
+ - name: STATUS
311
+ desc: |
312
+ The status of the assumption, one of:
313
+ - `Open`: The assumption is taken for granted but not yet verified.
314
+ - `Confirmed`: The assumption was verified to hold.
315
+ - `Refuted`: The assumption turned out not to hold, the plan is revised.
316
+ value: enum(Open,Confirmed,Refuted)
317
+
318
+ - kind: PM
319
+ name: Project Organization
320
+ id: PO
321
+ file: 02-PO-Project-Organization.md
322
+ desc: >
323
+ The parties taking part in or affected by the project and the members they contribute,
324
+ defining who commissions, delivers, supplies, steers, and is affected by the project,
325
+ which role every person plays in it, and how every party is analyzed and engaged as a
326
+ stakeholder, so that every deliverable, work package, task, risk, and ceremony can name
327
+ its owner, its participants, or the party it addresses.
328
+ optional: true
329
+ refs: >
330
+ - PMI: A Guide to the Project Management Body of Knowledge (PMBOK Guide), 7th ed.: Team Performance Domain (2021),
331
+ https://www.pmi.org/standards/pmbok
332
+ - Axelos: Managing Successful Projects with PRINCE2, 7th ed.: Organizing (2023),
333
+ https://www.axelos.com/certifications/propath/prince2-project-management
334
+ - ISO 21502:2020: Project, programme and portfolio management -- Guidance on project management (2020),
335
+ https://www.iso.org/standard/74947.html
336
+ diagram:
337
+ - type: tree
338
+ nodes: "[[PARTY:*]], [[MEMBER:*]]"
339
+ links: []
340
+ markUncovered: referenced
341
+ nest:
342
+ parent: true
343
+ config:
344
+ tree-stack-min: 1
345
+ - type: grid
346
+ nodes: "[[PARTY:*]]"
347
+ properties:
348
+ - INFLUENCE
349
+ - INTEREST
350
+ config:
351
+ size-node-width-max: 440
352
+ grid-columns-max: 4
353
+ children:
354
+ - kind: PARTY
355
+ desc: >
356
+ A single party of the project, named by its organization or organizational unit
357
+ (e.g. `ACME Corp.`, `Engineering Department`, `Works Council`) and described in a
358
+ concise (1-2 sentence) paragraph by its stake in the project, while its MEMBER
359
+ children are the persons it contributes (none for a party merely affected by the
360
+ results). Every party is engaged through at least one ceremony of the Governance
361
+ Model naming it (or, for a party contributing members, naming the party itself
362
+ beside them).
363
+ optional: true
364
+ badge: team
365
+ referenced:
366
+ - "[[CEREMONY:*]]"
367
+ props:
368
+ - name: KIND
369
+ desc: |
370
+ The kind of the party, one of:
371
+ - `Customer`: Commissions and accepts the project results.
372
+ - `Contractor`: Delivers the project results.
373
+ - `Supplier`: Provides products or services to the contractor.
374
+ - `Partner`: Shares the delivery with the contractor.
375
+ - `Authority`: Regulates, certifies, or audits the project results.
376
+ - `Stakeholder`: Is affected by the project results without contributing
377
+ to them (e.g. the end users, a works council, the operations
378
+ department, a neighboring project).
379
+ value: enum(Customer,Contractor,Supplier,Partner,Authority,Stakeholder)
380
+ - name: ROLE
381
+ desc: >
382
+ The role of the party in the project in a short (1-5 word) phrase (e.g.
383
+ `Commissioning party`, `Prime contractor`, `Hosting provider`, `End
384
+ users`).
385
+ - name: INFLUENCE
386
+ desc: >
387
+ The power of the party over the project (its decisions, budget, and
388
+ scope): `Low`, `Medium`, or `High`, the one axis of the power/interest
389
+ grid of the stakeholder analysis.
390
+ value: enum(Low,Medium,High)
391
+ - name: INTEREST
392
+ desc: >
393
+ The stake of the party in the outcome of the project: `Low`, `Medium`, or
394
+ `High`, the other axis of the power/interest grid, so that a party of high
395
+ influence and low interest is kept satisfied, one of high influence and
396
+ high interest managed closely, and so on.
397
+ value: enum(Low,Medium,High)
398
+ - name: ENGAGEMENT
399
+ desc: |
400
+ The chosen level of engaging the party (the stakeholder engagement plan),
401
+ one of:
402
+ - `Inform`: The party is kept informed of the progress and the decisions.
403
+ - `Consult`: The party is asked for its view before the decisions concerning it.
404
+ - `Involve`: The party takes part in the work concerning it.
405
+ - `Collaborate`: The party shares the decisions and their consequences.
406
+ Omitted where the power/interest grid alone implies it.
407
+ value: enum(Inform,Consult,Involve,Collaborate)
408
+ optional: true
409
+ - name: ATTITUDE
410
+ desc: >
411
+ The current attitude of the party towards the project (the stakeholder
412
+ engagement assessment): `Supportive`, `Neutral`, or `Resistant`, omitted
413
+ where it is not assessed; a gap between the attitude and the engagement
414
+ the project needs is what the engagement closes.
415
+ value: enum(Supportive,Neutral,Resistant)
416
+ optional: true
417
+ - name: RATE
418
+ desc: >
419
+ The price of one person-day of the members of the party (e.g. `950 EUR`),
420
+ so that the person-day budgets of the phases turn into money; omitted for
421
+ a party whose effort is not charged to the project.
422
+ optional: true
423
+ children:
424
+ - kind: MEMBER
425
+ desc: >
426
+ A single member of the project team, named by the person (or by the
427
+ position where the person is not yet known, e.g. `Tester 2`) and described
428
+ in a 1-sentence description of what the member is accountable for.
429
+ optional: true
430
+ badge: person
431
+ format:
432
+ type: concise
433
+ maxTableColumns: 5
434
+ referenced:
435
+ - "[[DELIVERABLE:*]]"
436
+ - "[[WORK-PACKAGE:*]]"
437
+ - "[[TASK:*]]"
438
+ - "[[RISK:*]]"
439
+ - "[[CEREMONY:*]]"
440
+ diagram:
441
+ type: hub
442
+ center: self
443
+ nodes: "[[MEMBER:*]], [[DELIVERABLE:*]], [[WORK-PACKAGE:*]], [[TASK:*]],
444
+ [[RISK:*]], [[CEREMONY:*]], [[ISSUE:*]]"
445
+ labeled: true
446
+ qualified: true
447
+ config:
448
+ size-node-width-max: 440
449
+ size-node-height-scale: 1.75
450
+ hub-node-count-max: 3
451
+ props:
452
+ - name: ROLE
453
+ desc: >
454
+ The role of the member in the project in a short (1-3 word) phrase
455
+ (e.g. `Sponsor`, `Product Owner`, `Project Manager`, `Architect`,
456
+ `Developer`, `Tester`), a person playing several roles listing all
457
+ of them.
458
+ - name: CAPACITY
459
+ desc: >
460
+ The share of the working time of the member available to the
461
+ project (e.g. `100%`, `2 days/week`), so that the effort of the
462
+ work packages owned by the member is plannable.
463
+ optional: true
464
+ - name: CONTACT
465
+ desc: >
466
+ The contact address of the member (e.g. an email address), omitted
467
+ for a position not yet staffed.
468
+ optional: true
469
+
470
+ - kind: PM
471
+ name: Governance Model
472
+ id: GM
473
+ file: 03-GM-Governance-Model.md
474
+ desc: >
475
+ The ceremonies through which the project is steered: the recurring meetings, reports, and
476
+ reviews, and the gates the milestones of the Project Schedule are decided at, each with
477
+ its cadence and its participants, so that the decisions of the project (the ones on the
478
+ issues of the Change Log included) are taken at known occasions by known people, and
479
+ where every member and every party of the Project Organization takes part in some ceremony (a
480
+ party as a whole being the audience of a report or a stakeholder without members).
481
+ optional: true
482
+ coverage:
483
+ - "[[MEMBER:*]]"
484
+ - "[[PARTY:*]]"
485
+ refs: >
486
+ - ISO 21505:2017: Project, programme and portfolio management -- Guidance on governance (2017),
487
+ https://www.iso.org/standard/63578.html
488
+ - Axelos: Managing Successful Projects with PRINCE2, 7th ed.: Directing a Project (2023),
489
+ https://www.axelos.com/certifications/propath/prince2-project-management
490
+ - IPMA: Individual Competence Baseline (ICB), 4th ed.: Organisation and Information, Plan and Control (2015),
491
+ https://www.ipma.world/individuals/standard/
492
+ - Schwaber/Sutherland: The Scrum Guide: Scrum Events (2020),
493
+ https://scrumguides.org/scrum-guide.html
494
+ diagram:
495
+ - type: grid
496
+ nodes: "[[CEREMONY:*]]"
497
+ properties:
498
+ - KIND
499
+ - CADENCE
500
+ config:
501
+ size-node-width-max: 440
502
+ grid-columns-max: 4
503
+ - type: graph
504
+ nodes: "[[CEREMONY:*]], [[MEMBER:*]], [[PARTY:*]], [[TASK:*]]"
505
+ links:
506
+ - PARTICIPANTS
507
+ - GATES
508
+ reverse:
509
+ - GATES
510
+ onlyConnected: true
511
+ nest:
512
+ kind: true
513
+ children:
514
+ - kind: CEREMONY
515
+ desc: >
516
+ A single ceremony, named with a short (1-4 word) summary (e.g. `Steering
517
+ Committee`, `Status Report`, `Sprint Review`) and described in a concise (1-2
518
+ sentence) paragraph by its purpose and the decisions or outputs it yields. A
519
+ ceremony of kind `Gate` is named by the milestones of the Project Schedule it is
520
+ held at.
521
+ optional: true
522
+ badge:
523
+ property: KIND
524
+ map:
525
+ Meeting: communication
526
+ Report: document
527
+ Review: team
528
+ Gate: clock
529
+ format:
530
+ type: compact
531
+ maxTableColumns: 5
532
+ diagram:
533
+ type: hub
534
+ center: self
535
+ nodes: "[[CEREMONY:*]], [[MEMBER:*]], [[PARTY:*]], [[TASK:*]], [[ISSUE:*]]"
536
+ labeled: true
537
+ qualified: true
538
+ config:
539
+ size-node-width-max: 440
540
+ size-node-height-scale: 1.75
541
+ hub-node-count-max: 3
542
+ props:
543
+ - name: KIND
544
+ desc: |
545
+ The kind of the ceremony, one of:
546
+ - `Meeting`: A synchronous gathering taking decisions.
547
+ - `Report`: A written status handed to its recipients.
548
+ - `Review`: An inspection of results yielding findings.
549
+ - `Gate`: A go/no-go decision at a milestone.
550
+ value: enum(Meeting,Report,Review,Gate)
551
+ - name: CADENCE
552
+ desc: >
553
+ The rhythm of the ceremony (e.g. `Weekly`, `Bi-weekly`, `Monthly`, `At
554
+ milestone`, `On demand`).
555
+ - name: PARTICIPANTS
556
+ desc: >
557
+ Comma-separated references to the PROJECT-ORGANIZATION members taking
558
+ part in the ceremony and/or the parties it addresses as a whole (the audience of
559
+ a report, a stakeholder without members), so that every party is engaged
560
+ through some ceremony.
561
+ value: list([[MEMBER:*]], [[PARTY:*]])
562
+
563
+ - kind: PM
564
+ name: Delivery Scope
565
+ id: DS
566
+ file: 04-DS-Delivery-Scope.md
567
+ desc: >
568
+ The results the project hands over, each with the criteria by which it is accepted and
569
+ the method by which it is verified against them,
570
+ defining *what* the project delivers (the documents, software, services, hardware,
571
+ training, and data) as opposed to the work producing it (the Work Breakdown) and the
572
+ time at which it is produced (the Project Schedule), tracing every result back to the
573
+ objectives of the Project Charter it serves, and listing the exclusions the project
574
+ explicitly does *not* deliver, so that a scope dispute is decided by the document.
575
+ optional: true
576
+ coverage:
577
+ - "[[OBJECTIVE:*]]"
578
+ refs: >
579
+ - PMI: A Guide to the Project Management Body of Knowledge (PMBOK Guide), 7th ed.: Delivery Performance Domain (2021),
580
+ https://www.pmi.org/standards/pmbok
581
+ - Axelos: Managing Successful Projects with PRINCE2, 7th ed.: Product-Based Planning, Quality (2023),
582
+ https://www.axelos.com/certifications/propath/prince2-project-management
583
+ - IPMA: Individual Competence Baseline (ICB), 4th ed.: Scope, Quality (2015),
584
+ https://www.ipma.world/individuals/standard/
585
+ - ISO 21502:2020: Project, programme and portfolio management -- Guidance on project management (2020),
586
+ https://www.iso.org/standard/74947.html
587
+ diagram:
588
+ type: grid
589
+ nodes: "[[DELIVERABLE:*]]"
590
+ markUncovered: referenced
591
+ properties:
592
+ - KIND
593
+ - STATUS
594
+ config:
595
+ size-node-width-max: 440
596
+ grid-columns-max: 4
597
+ children:
598
+ - kind: DELIVERABLE
599
+ desc: >
600
+ A single deliverable, named with a short (2-5 word) summary (e.g. `Operations
601
+ Manual`, `Production Release 1.0`) and described in a concise (1-3 sentence)
602
+ paragraph by its content and its recipient, plus a 1-sentence rationale ("why")
603
+ stating the need it satisfies.
604
+ optional: true
605
+ badge:
606
+ property: KIND
607
+ map:
608
+ Document: document
609
+ Software: package
610
+ Service: service
611
+ Hardware: device
612
+ Training: person
613
+ Data: database
614
+ format:
615
+ type: compact
616
+ maxTableColumns: 5
617
+ referenced:
618
+ - "[[WORK-PACKAGE:*]]"
619
+ diagram:
620
+ type: hub
621
+ center: self
622
+ nodes: "[[DELIVERABLE:*]], [[OBJECTIVE:*]], [[MEMBER:*]], [[WORK-PACKAGE:*]],
623
+ [[TASK:*]], [[RISK:*]], [[ISSUE:*]]"
624
+ labeled: true
625
+ qualified: true
626
+ config:
627
+ size-node-width-max: 440
628
+ size-node-height-scale: 1.75
629
+ hub-node-count-max: 3
630
+ props:
631
+ - name: KIND
632
+ desc: |
633
+ The kind of the deliverable, one of:
634
+ - `Document`: A written result (specification, manual, report).
635
+ - `Software`: An executable result (release, package, image).
636
+ - `Service`: An operated result (hosted system, support).
637
+ - `Hardware`: A physical result (device, installation).
638
+ - `Training`: A taught result (course, workshop, handover).
639
+ - `Data`: A migrated or compiled result (data set, content).
640
+ value: enum(Document,Software,Service,Hardware,Training,Data)
641
+ - name: FORMAT
642
+ desc: >
643
+ The form in which the deliverable is handed over (e.g. `PDF`, `OCI
644
+ image`, `Git tag`), omitted where the kind implies it.
645
+ optional: true
646
+ - name: OWNER
647
+ desc: >
648
+ Reference to the PROJECT-ORGANIZATION member accountable for producing
649
+ the deliverable (the producer).
650
+ value: "[[MEMBER:*]]"
651
+ - name: APPROVER
652
+ desc: >
653
+ Reference to the PROJECT-ORGANIZATION member accepting the deliverable
654
+ by its criteria (the approver), usually on the side of the customer and
655
+ never the `OWNER` producing it.
656
+ value: "[[MEMBER:*]]"
657
+ - name: SERVES
658
+ desc: >
659
+ Comma-separated references to the PROJECT-CHARTER objectives the
660
+ deliverable serves (in full or in part), so that every objective is
661
+ served by a result and no result is delivered for its own sake.
662
+ value: list([[OBJECTIVE:*]])
663
+ - name: ACCEPTANCE
664
+ desc: >
665
+ The criteria by which the recipient accepts the deliverable, stated as
666
+ observable conditions (e.g. `all acceptance tests pass in the QA
667
+ environment`), so that the acceptance is a decision, not a negotiation.
668
+ - name: VERIFICATION
669
+ desc: |
670
+ The method by which the deliverable is verified against its `ACCEPTANCE`
671
+ criteria before the `APPROVER` decides, one of:
672
+ - `Review`: The deliverable is inspected by its readers (a document).
673
+ - `Test`: The deliverable is executed against test cases (software, a service).
674
+ - `Demonstration`: The recipient performs with the deliverable (a manual, a training).
675
+ - `Audit`: A third party checks the deliverable against a standard.
676
+ Omitted where the criteria imply the method.
677
+ value: enum(Review,Test,Demonstration,Audit)
678
+ optional: true
679
+ - name: STATUS
680
+ desc: |
681
+ The progress of the deliverable, one of:
682
+ - `Planned`: The deliverable is defined, the work not yet started (the default).
683
+ - `In Progress`: The work producing the deliverable is underway.
684
+ - `Delivered`: The deliverable is handed over, the acceptance pending.
685
+ - `Accepted`: The recipient accepted the deliverable by its criteria.
686
+ - `Rejected`: The recipient rejected the deliverable by its criteria, the
687
+ work resumes (an off-specification of the Change Log).
688
+ value: enum(Planned,"In Progress",Delivered,Accepted,Rejected)
689
+ optional: true
690
+ - kind: EXCLUSION
691
+ desc: >
692
+ A single exclusion from the scope, named with a short (2-5 word) noun phrase of
693
+ the result the project explicitly does *not* deliver (e.g. `Native Mobile Apps`)
694
+ and described in one sentence stating what is excluded, plus a 1-sentence
695
+ rationale ("why") naming who delivers it instead or why nobody has to.
696
+ optional: true
697
+ format:
698
+ type: concise
699
+ maxTableColumns: 5
700
+
701
+ - kind: PM
702
+ name: Work Breakdown
703
+ id: WB
704
+ file: 05-WB-Work-Breakdown.md
705
+ desc: >
706
+ The hierarchical decomposition of the entire scope of the project into work packages,
707
+ defining *what work* has to be done (down to the packages which are estimated, owned,
708
+ and scheduled) as opposed to *when* it is done (the Project Schedule), where every package
709
+ is either decomposed into sub-packages or scheduled by a task, and the packages of one
710
+ level together cover their parent completely (the "100% rule"), and where every
711
+ deliverable of the Delivery Scope traces back to the packages producing it.
712
+ optional: true
713
+ coverage:
714
+ - "[[DELIVERABLE:*]]"
715
+ refs: >
716
+ - PMI: Practice Standard for Work Breakdown Structures, 3rd ed. (2019),
717
+ https://www.pmi.org/standards/wbs
718
+ - PMI: A Guide to the Project Management Body of Knowledge (PMBOK Guide), 7th ed.: Planning Performance Domain (2021),
719
+ https://www.pmi.org/standards/pmbok
720
+ - Axelos: Managing Successful Projects with PRINCE2, 7th ed.: Product Breakdown Structure (2023),
721
+ https://www.axelos.com/certifications/propath/prince2-project-management
722
+ - IPMA: Individual Competence Baseline (ICB), 4th ed.: Scope, Resources, Finance (2015),
723
+ https://www.ipma.world/individuals/standard/
724
+ diagram:
725
+ type: tree
726
+ nodes: "[[WORK-PACKAGE:*]]"
727
+ links: []
728
+ markUncovered: referenced
729
+ nest:
730
+ properties:
731
+ - PART-OF
732
+ config:
733
+ tree-stack-min: 1
734
+ children:
735
+ - kind: WORK-PACKAGE
736
+ desc: >
737
+ A single work package, named with a short (2-5 word) noun phrase of the work (e.g.
738
+ `Backend Implementation`, `Load Testing`) and described in a concise (1-3
739
+ sentence) paragraph by the work it comprises and the result it ends with, so that
740
+ its completion is decidable.
741
+ optional: true
742
+ format:
743
+ type: compact
744
+ maxTableColumns: 5
745
+ referenced:
746
+ - "[[WORK-PACKAGE:*]]"
747
+ - "[[TASK:*]]"
748
+ diagram:
749
+ type: hub
750
+ center: self
751
+ nodes: "[[WORK-PACKAGE:*]], [[MEMBER:*]], [[DELIVERABLE:*]], [[TASK:*]], [[RISK:*]],
752
+ [[ISSUE:*]]"
753
+ labeled: true
754
+ qualified: true
755
+ config:
756
+ size-node-width-max: 440
757
+ size-node-height-scale: 1.75
758
+ hub-node-count-max: 3
759
+ props:
760
+ - name: PART-OF
761
+ desc: >
762
+ Reference to the WORK-BREAKDOWN package this package is a part of, so that
763
+ the packages form a hierarchy (at most one parent, keeping it a tree);
764
+ omitted for a top-level package.
765
+ value: "[[WORK-PACKAGE:*]]"
766
+ optional: true
767
+ acyclic: true
768
+ - name: EFFORT
769
+ desc: >
770
+ The estimated effort of the package in person-days (PD) as a plain number
771
+ (e.g. `12`), stated on the packages which are not decomposed any further
772
+ (the effort of a decomposed package is the sum of its parts), and omitted
773
+ otherwise.
774
+ value: /^\d+(\.\d+)?$/
775
+ optional: true
776
+ - name: COST
777
+ desc: >
778
+ The non-labor cost of the package as money (e.g. `6000 EUR`): the
779
+ licenses, hardware, services, and travel it consumes beyond the
780
+ person-days of its `EFFORT`, stated on the packages which are not
781
+ decomposed any further (like the effort) and omitted where the package
782
+ consumes labor only.
783
+ optional: true
784
+ - name: OWNER
785
+ desc: >
786
+ Reference to the PROJECT-ORGANIZATION member accountable for the package.
787
+ value: "[[MEMBER:*]]"
788
+ optional: true
789
+ - name: PRODUCES
790
+ desc: >
791
+ Comma-separated references to the DELIVERY-SCOPE deliverables the
792
+ package produces (in full or in part), so that every deliverable traces
793
+ back to the work producing it.
794
+ value: list([[DELIVERABLE:*]])
795
+ optional: true
796
+
797
+ - kind: PM
798
+ name: Project Schedule
799
+ id: PS
800
+ file: 06-PS-Project-Schedule.md
801
+ desc: >
802
+ The schedule of the project as phases of tasks and milestones, defining *when* the work
803
+ of the Work Breakdown is done, in which order, and by whom, where the tasks depend on
804
+ each other and the critical path (the chain of tasks any delay of which delays the
805
+ project) follows from the dependencies and durations alone, in weeks from the start
806
+ date of the project, and where the
807
+ milestones date the deliverables of the Delivery Scope by accepting them and name the
808
+ gates of the Governance Model deciding on them.
809
+ optional: true
810
+ coverage:
811
+ - "[[DELIVERABLE:*]]"
812
+ refs: >
813
+ - Gantt: Organizing for Work (1919),
814
+ https://archive.org/details/organizingforwor00gantuoft
815
+ - Kelley/Walker: Critical-Path Planning and Scheduling (1959),
816
+ https://doi.org/10.1145/1460299.1460318
817
+ - PMI: A Guide to the Project Management Body of Knowledge (PMBOK Guide), 7th ed.: Planning Performance Domain (2021),
818
+ https://www.pmi.org/standards/pmbok
819
+ - Axelos: Managing Successful Projects with PRINCE2, 7th ed.: Plans (2023),
820
+ https://www.axelos.com/certifications/propath/prince2-project-management
821
+ - IPMA: Individual Competence Baseline (ICB), 4th ed.: Time, Plan and Control (2015),
822
+ https://www.ipma.world/individuals/standard/
823
+ diagram:
824
+ type: gantt
825
+ nodes: "[[PHASE:*]], [[TASK:*]]"
826
+ links:
827
+ - AFTER
828
+ reverse:
829
+ - AFTER
830
+ duration: DURATION
831
+ start: START
832
+ qualified: true
833
+ nest:
834
+ parent: true
835
+ config:
836
+ gantt-unit-name: weeks
837
+ props:
838
+ - name: START
839
+ desc: >
840
+ The calendar date (ISO 8601, e.g. `2026-08-24`, usually a Monday) at which week
841
+ `0` of the schedule starts, so that the week numbers of the tasks turn into
842
+ dates and the `Time` constraints of the Project Charter are checkable against
843
+ the schedule; omitted while the start of the project is not fixed.
844
+ value: /^\d{4}-\d{2}-\d{2}$/
845
+ optional: true
846
+ children:
847
+ - kind: PHASE
848
+ desc: >
849
+ A single phase of the project, named with a short (1-3 word) summary (e.g.
850
+ `Inception`, `Construction`, `Transition`) and described in a concise (1-2
851
+ sentence) paragraph by its purpose and the state of the project at its end,
852
+ while its TASK children, in document order, are the tasks and milestones it
853
+ comprises.
854
+ optional: true
855
+ props:
856
+ - name: GOAL
857
+ desc: >
858
+ The goal of the phase in one sentence, i.e. the observable state of the
859
+ project at the end of the phase (e.g. `the architecture is proven by a
860
+ walking skeleton`).
861
+ - name: BUDGET
862
+ desc: >
863
+ The budget of the phase in person-days (PD) as a plain number (e.g.
864
+ `120`), the same unit as the `EFFORT` of the work packages, so that the
865
+ packages the tasks of the phase realize are checkable against it;
866
+ omitted where no budget is fixed per phase.
867
+ value: /^\d+(\.\d+)?$/
868
+ optional: true
869
+ children:
870
+ - kind: TASK
871
+ desc: >
872
+ A single task of the phase, named with a short (2-5 word) summary of the
873
+ work (e.g. `Implement Backend`) or, for a milestone, of the event (e.g.
874
+ `Go-Live`), and described by a 1-sentence description of its outcome. A
875
+ task carries a `DURATION`, while a milestone carries none and marks a
876
+ point in time, usually the acceptance of deliverables at a gate.
877
+ optional: true
878
+ format:
879
+ type: compact
880
+ maxTableColumns: 5
881
+ diagram:
882
+ type: hub
883
+ center: self
884
+ nodes: "[[TASK:*]], [[MEMBER:*]], [[WORK-PACKAGE:*]], [[DELIVERABLE:*]],
885
+ [[RISK:*]], [[CEREMONY:*]], [[ISSUE:*]]"
886
+ labeled: true
887
+ qualified: true
888
+ config:
889
+ size-node-width-max: 440
890
+ size-node-height-scale: 1.75
891
+ hub-node-count-max: 3
892
+ props:
893
+ - name: DURATION
894
+ desc: >
895
+ The duration of the task in weeks as a plain number (e.g. `2` or
896
+ `0.5`), i.e. the elapsed time from its start to its end (not the
897
+ effort, which is the `EFFORT` of the work packages it realizes),
898
+ omitted for a milestone.
899
+ value: /^\d+(\.\d+)?$/
900
+ optional: true
901
+ - name: START
902
+ desc: >
903
+ The earliest start of the task in weeks from the start of the
904
+ project as a plain number (e.g. `4`), where the dependencies
905
+ alone do not fix it (e.g. a date agreed with the customer, or a
906
+ lag behind a predecessor), the project starting at week `0` (the
907
+ `START` date of the schedule).
908
+ value: /^\d+(\.\d+)?$/
909
+ optional: true
910
+ - name: AFTER
911
+ desc: >
912
+ Comma-separated references to the PROJECT-SCHEDULE tasks this task
913
+ starts after (once all of them are finished, i.e. finish-to-start
914
+ without a lag), omitted for a task
915
+ which can start right away; the dependencies form no cycle.
916
+ value: list([[TASK:*]])
917
+ optional: true
918
+ acyclic: true
919
+ - name: OWNER
920
+ desc: >
921
+ Reference to the PROJECT-ORGANIZATION member responsible for the
922
+ task, omitted where the owners of the realized work packages are.
923
+ value: "[[MEMBER:*]]"
924
+ optional: true
925
+ - name: STAFF
926
+ desc: >
927
+ Comma-separated references to the PROJECT-ORGANIZATION members
928
+ working on the task, so that their `CAPACITY` and the `DURATION` of the task
929
+ are reconcilable against the `EFFORT` of the realized packages;
930
+ omitted for a milestone.
931
+ value: list([[MEMBER:*]])
932
+ optional: true
933
+ - name: REALIZES
934
+ desc: >
935
+ Comma-separated references to the WORK-BREAKDOWN packages the
936
+ task realizes (in full or in part), so that every package is
937
+ scheduled; omitted for a milestone.
938
+ value: list([[WORK-PACKAGE:*]])
939
+ optional: true
940
+ - name: ACCEPTS
941
+ desc: >
942
+ Comma-separated references to the DELIVERY-SCOPE deliverables
943
+ accepted at this milestone (or at the end of this task), so that
944
+ every deliverable has a due date; omitted for a task accepting
945
+ none.
946
+ value: list([[DELIVERABLE:*]])
947
+ optional: true
948
+ - name: GATES
949
+ desc: >
950
+ Comma-separated references to the GOVERNANCE-MODEL ceremonies
951
+ (usually the gates) held at this milestone (or at the end of this
952
+ task), deciding on the accepted deliverables; omitted for a task
953
+ no ceremony is held at.
954
+ value: list([[CEREMONY:*]])
955
+ optional: true
956
+ - name: STATUS
957
+ desc: |
958
+ The progress of the task or milestone, one of:
959
+ - `Planned`: The task is scheduled, not yet started (the default).
960
+ - `Active`: The task is underway.
961
+ - `Blocked`: The task cannot proceed until an issue of the Change Log is resolved.
962
+ - `Done`: The task is finished, resp. the milestone is reached.
963
+ - `Cancelled`: The task was descoped by a decision of the Change Log, its work undone.
964
+ value: enum(Planned,Active,Blocked,Done,Cancelled)
965
+ optional: true
966
+
967
+ - kind: PM
968
+ name: Risk Register
969
+ id: RR
970
+ file: 07-RR-Risk-Register.md
971
+ desc: >
972
+ The uncertain events which, should they occur, affect the work, the deliverables, the
973
+ schedule, or the parties of the project -- the threats harming it and the opportunities
974
+ favoring it -- each rated by its probability and impact and answered by a strategy, a
975
+ mitigation (changing the probability or the impact beforehand), and a contingency (the
976
+ response once it occurred), so that the risks are managed instead of suffered and the
977
+ opportunities seized instead of missed.
978
+ optional: true
979
+ refs: >
980
+ - ISO 31000:2018: Risk management -- Guidelines (2018),
981
+ https://www.iso.org/standard/65694.html
982
+ - PMI: The Standard for Risk Management in Portfolios, Programs, and Projects (2019),
983
+ https://www.pmi.org/standards/risk-management
984
+ - Axelos: Managing Successful Projects with PRINCE2, 7th ed.: Risk (2023),
985
+ https://www.axelos.com/certifications/propath/prince2-project-management
986
+ - IPMA: Individual Competence Baseline (ICB), 4th ed.: Risk and Opportunity (2015),
987
+ https://www.ipma.world/individuals/standard/
988
+ diagram:
989
+ - type: grid
990
+ nodes: "[[RISK:*]]"
991
+ properties:
992
+ - PROBABILITY
993
+ - IMPACT
994
+ - STATUS
995
+ config:
996
+ size-node-width-max: 440
997
+ grid-columns-max: 4
998
+ - type: graph
999
+ nodes: "[[RISK:*]], [[WORK-PACKAGE:*]], [[DELIVERABLE:*]], [[TASK:*]], [[PARTY:*]]"
1000
+ links:
1001
+ - AFFECTS
1002
+ onlyConnected: true
1003
+ nest:
1004
+ kind: true
1005
+ children:
1006
+ - kind: RISK
1007
+ desc: >
1008
+ A single risk, named with a short (2-6 word) summary of the uncertain event (e.g.
1009
+ `Key Developer Unavailable`, `Late API Access`, or, for an opportunity, `Second
1010
+ Department Adopts Solution`) and described in a concise (1-3 sentence) paragraph
1011
+ by its cause and its effect on the project.
1012
+ optional: true
1013
+ format:
1014
+ type: compact
1015
+ maxTableColumns: 5
1016
+ diagram:
1017
+ type: hub
1018
+ center: self
1019
+ nodes: "[[RISK:*]], [[MEMBER:*]], [[WORK-PACKAGE:*]], [[DELIVERABLE:*]], [[TASK:*]],
1020
+ [[PARTY:*]], [[ISSUE:*]]"
1021
+ labeled: true
1022
+ qualified: true
1023
+ config:
1024
+ size-node-width-max: 440
1025
+ size-node-height-scale: 1.75
1026
+ hub-node-count-max: 3
1027
+ props:
1028
+ - name: TYPE
1029
+ desc: |
1030
+ The type of the risk, one of:
1031
+ - `Threat`: The event harms the project should it occur (the default).
1032
+ - `Opportunity`: The event benefits the project should it occur.
1033
+ value: enum(Threat,Opportunity)
1034
+ optional: true
1035
+ - name: PROBABILITY
1036
+ desc: >
1037
+ The likelihood that the risk occurs: `Low`, `Medium`, or `High`.
1038
+ value: enum(Low,Medium,High)
1039
+ - name: IMPACT
1040
+ desc: >
1041
+ The severity of the effect on the project should the risk occur (the
1042
+ harm of a threat, the benefit of an opportunity): `Low`, `Medium`, or
1043
+ `High`.
1044
+ value: enum(Low,Medium,High)
1045
+ - name: STATUS
1046
+ desc: |
1047
+ The status of the risk, one of:
1048
+ - `Open`: The risk is identified and watched.
1049
+ - `Mitigated`: The mitigation is in effect.
1050
+ - `Occurred`: The risk occurred (a threat turning into an issue of the
1051
+ Change Log naming it as its cause), the contingency applies.
1052
+ - `Closed`: The risk can no longer occur.
1053
+ value: enum(Open,Mitigated,Occurred,Closed)
1054
+ - name: OWNER
1055
+ desc: >
1056
+ Reference to the PROJECT-ORGANIZATION member watching the risk and
1057
+ triggering its responses.
1058
+ value: "[[MEMBER:*]]"
1059
+ - name: AFFECTS
1060
+ desc: >
1061
+ Comma-separated references to the WORK-BREAKDOWN packages, the
1062
+ DELIVERY-SCOPE deliverables, the PROJECT-SCHEDULE tasks, and/or the
1063
+ PROJECT-ORGANIZATION parties the risk threatens or favors (a schedule
1064
+ risk the tasks rather than the packages, a stakeholder risk the party
1065
+ whose support or acceptance is at stake).
1066
+ value: list([[WORK-PACKAGE:*]], [[DELIVERABLE:*]], [[TASK:*]], [[PARTY:*]])
1067
+ - name: TRIGGER
1068
+ desc: >
1069
+ The early-warning indicator telling that the risk is about to occur (e.g.
1070
+ `a developer reports more than three sick days in a sprint`), omitted
1071
+ where none is observable.
1072
+ optional: true
1073
+ - name: STRATEGY
1074
+ desc: |
1075
+ The type of the response to the risk, for a threat one of:
1076
+ - `Avoid`: The plan is changed so that the threat cannot occur.
1077
+ - `Reduce`: The probability or the impact is lowered beforehand.
1078
+ - `Transfer`: The impact is shifted onto a third party (contract, insurance).
1079
+ For an opportunity one of:
1080
+ - `Exploit`: The plan is changed so that the opportunity surely occurs.
1081
+ - `Enhance`: The probability or the impact is raised beforehand.
1082
+ - `Share`: The benefit is shared with a third party better placed to seize it.
1083
+ For either one of:
1084
+ - `Accept`: The risk is taken as it is and merely watched.
1085
+ - `Escalate`: The risk is beyond the project, its response is owned by
1086
+ the sponsor or the program.
1087
+ value: enum(Avoid,Reduce,Transfer,Exploit,Enhance,Share,Accept,Escalate)
1088
+ - name: MITIGATION
1089
+ desc: >
1090
+ The concrete action of the `STRATEGY` taken beforehand (e.g. `pair every
1091
+ key developer with a deputy`), for an accepted risk the watching alone and
1092
+ for an escalated one the handing over.
1093
+ - name: CONTINGENCY
1094
+ desc: >
1095
+ The response once the risk occurred (e.g. `the deputy takes over, the
1096
+ phase is extended by two weeks`, or, for an opportunity, `a follow-up
1097
+ project is offered`), omitted where none is prepared.
1098
+ optional: true
1099
+
1100
+ - kind: PM
1101
+ name: Change Log
1102
+ id: CL
1103
+ file: 08-CL-Change-Log.md
1104
+ desc: >
1105
+ The issues the project handles: the requests for a change of the agreed scope, the
1106
+ problems and concerns arising, and the off-specifications (results failing their
1107
+ criteria), each raised by someone, owned by someone, analyzed for its impact on the
1108
+ scope, the schedule, and the budget, decided at a ceremony, and tracked to its
1109
+ resolution, so that every deviation from the plan is a recorded decision instead of a
1110
+ silent drift, and where an occurred risk names the issue it caused.
1111
+ optional: true
1112
+ refs: >
1113
+ - PMI: A Guide to the Project Management Body of Knowledge (PMBOK Guide), 7th ed.: Project Work Performance Domain (2021),
1114
+ https://www.pmi.org/standards/pmbok
1115
+ - Axelos: Managing Successful Projects with PRINCE2, 7th ed.: Issues (2023),
1116
+ https://www.axelos.com/certifications/propath/prince2-project-management
1117
+ - IPMA: Individual Competence Baseline (ICB), 4th ed.: Plan and Control, Change and Transformation (2015),
1118
+ https://www.ipma.world/individuals/standard/
1119
+ - ISO 21502:2020: Project, programme and portfolio management -- Guidance on project management: Change control, Issues management (2020),
1120
+ https://www.iso.org/standard/74947.html
1121
+ diagram:
1122
+ - type: grid
1123
+ nodes: "[[ISSUE:*]]"
1124
+ properties:
1125
+ - KIND
1126
+ - STATUS
1127
+ config:
1128
+ size-node-width-max: 440
1129
+ grid-columns-max: 4
1130
+ - type: graph
1131
+ nodes: "[[ISSUE:*]], [[RISK:*]], [[OBJECTIVE:*]], [[CONSTRAINT:*]], [[ASSUMPTION:*]],
1132
+ [[DELIVERABLE:*]], [[WORK-PACKAGE:*]], [[TASK:*]], [[CEREMONY:*]]"
1133
+ links:
1134
+ - CAUSED-BY
1135
+ - CONCERNS
1136
+ - DECIDED-BY
1137
+ onlyConnected: true
1138
+ nest:
1139
+ kind: true
1140
+ children:
1141
+ - kind: ISSUE
1142
+ desc: >
1143
+ A single issue, named with a short (2-5 word) summary of the request, problem, or
1144
+ deviation (e.g. `Vote Result Export`, `Chat Latency Above Target`) and described
1145
+ in a concise (1-3 sentence) paragraph by what is asked, what happened, or what
1146
+ deviates, plus a 1-sentence rationale ("why") stating the need or the cause
1147
+ behind it.
1148
+ optional: true
1149
+ badge:
1150
+ property: KIND
1151
+ map:
1152
+ Request: mail
1153
+ Problem: security
1154
+ Off-Spec: document
1155
+ format:
1156
+ type: compact
1157
+ maxTableColumns: 5
1158
+ diagram:
1159
+ type: hub
1160
+ center: self
1161
+ nodes: "[[ISSUE:*]], [[MEMBER:*]], [[PARTY:*]], [[RISK:*]], [[OBJECTIVE:*]],
1162
+ [[CONSTRAINT:*]], [[ASSUMPTION:*]], [[DELIVERABLE:*]], [[WORK-PACKAGE:*]],
1163
+ [[TASK:*]], [[CEREMONY:*]]"
1164
+ labeled: true
1165
+ qualified: true
1166
+ config:
1167
+ size-node-width-max: 440
1168
+ size-node-height-scale: 1.75
1169
+ hub-node-count-max: 3
1170
+ props:
1171
+ - name: KIND
1172
+ desc: |
1173
+ The kind of the issue, one of:
1174
+ - `Request`: A request for a change of the agreed scope, schedule, or budget.
1175
+ - `Problem`: A problem or concern arising which the plan did not foresee
1176
+ (a refuted assumption, an occurred risk, an impediment).
1177
+ - `Off-Spec`: A result failing or about to fail its acceptance criteria
1178
+ or the specification.
1179
+ value: enum(Request,Problem,"Off-Spec")
1180
+ - name: WEEK
1181
+ desc: >
1182
+ The week of the project in which the issue was raised as a plain number
1183
+ (e.g. `7`, the project starting at week `0` of the Project Schedule),
1184
+ omitted where it does not matter.
1185
+ value: /^\d+(\.\d+)?$/
1186
+ optional: true
1187
+ - name: STATUS
1188
+ desc: |
1189
+ The status of the issue, one of:
1190
+ - `Open`: The issue is raised and analyzed, the decision pending.
1191
+ - `Approved`: The change is approved, its implementation underway.
1192
+ - `Rejected`: The change is rejected, the plan stands.
1193
+ - `Deferred`: The change is postponed beyond the project (e.g. to a later release).
1194
+ - `Resolved`: The issue is settled, the approved change implemented or
1195
+ the problem or off-specification fixed.
1196
+ value: enum(Open,Approved,Rejected,Deferred,Resolved)
1197
+ - name: RAISED-BY
1198
+ desc: >
1199
+ Reference to the PROJECT-ORGANIZATION member or party raising the issue
1200
+ (the one to answer).
1201
+ value: list([[MEMBER:*]], [[PARTY:*]])
1202
+ - name: OWNER
1203
+ desc: >
1204
+ Reference to the PROJECT-ORGANIZATION member analyzing the issue and
1205
+ carrying out its decision.
1206
+ value: "[[MEMBER:*]]"
1207
+ - name: CAUSED-BY
1208
+ desc: >
1209
+ Reference to the RISK-REGISTER risk which occurred and caused the issue
1210
+ (its status being `Occurred`), omitted for an issue no risk foresaw.
1211
+ value: "[[RISK:*]]"
1212
+ optional: true
1213
+ - name: CONCERNS
1214
+ desc: >
1215
+ Comma-separated references to the PROJECT-CHARTER objectives, constraints,
1216
+ or assumptions, the DELIVERY-SCOPE deliverables, the WORK-BREAKDOWN
1217
+ packages, and/or the PROJECT-SCHEDULE tasks the issue concerns, so that
1218
+ the impact of a decision is traceable onto the plan it changes (named
1219
+ apart from the `AFFECTS` of the risks, so the graphs of both stay apart).
1220
+ value: list([[OBJECTIVE:*]], [[CONSTRAINT:*]], [[ASSUMPTION:*]], [[DELIVERABLE:*]], [[WORK-PACKAGE:*]], [[TASK:*]])
1221
+ - name: IMPACT
1222
+ desc: >
1223
+ The analyzed effect of the issue on the scope, the schedule, and the
1224
+ budget of the project (e.g. `+4 PD on the backend, the go-live
1225
+ unchanged`), omitted while not yet analyzed.
1226
+ optional: true
1227
+ - name: DECIDED-BY
1228
+ desc: >
1229
+ Reference to the GOVERNANCE-MODEL ceremony taking the decision on the
1230
+ issue, omitted while the decision is pending or where the `OWNER` decides
1231
+ within the own authority.
1232
+ value: "[[CEREMONY:*]]"
1233
+ optional: true
1234
+ - name: DECISION
1235
+ desc: >
1236
+ The decision taken on the issue in one sentence, naming what was decided
1237
+ and when (e.g. `approved in week 8 as a scope change funded from the
1238
+ reserve`), omitted while the decision is pending.
1239
+ optional: true
1240
+