pyegeria 5.4.0.26__py3-none-any.whl → 5.4.0.28__py3-none-any.whl

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 (46) hide show
  1. commands/cat/debug_log +868 -7794
  2. commands/cat/debug_log.2025-08-18_11-34-38_088636.zip +0 -0
  3. commands/cat/list_collections.py +1 -1
  4. commands/cat/list_format_set.py +6 -8
  5. commands/cli/egeria.py +2 -2
  6. commands/cli/egeria_cat.py +3 -2
  7. commands/ops/load_archive.py +2 -2
  8. md_processing/data/commands.json +7 -7
  9. md_processing/dr_egeria_inbox/dr_egeria_intro_part1.md +7 -7
  10. md_processing/dr_egeria_inbox/dr_egeria_intro_part2.md +36 -31
  11. md_processing/dr_egeria_outbox/friday/processed-2025-08-22 21:22-dr_egeria_intro_part1.md +312 -0
  12. md_processing/dr_egeria_outbox/friday/processed-2025-08-22 21:23-dr_egeria_intro_part1.md +265 -0
  13. md_processing/dr_egeria_outbox/friday/processed-2025-08-23 15:06-dr_egeria_intro_part1.md +230 -0
  14. md_processing/dr_egeria_outbox/friday/processed-2025-08-23 15:30-dr_egeria_intro_part1.md +296 -0
  15. md_processing/dr_egeria_outbox/friday/processed-2025-08-23 15:31-dr_egeria_intro_part1.md +253 -0
  16. md_processing/dr_egeria_outbox/friday/processed-2025-08-23 16:08-dr_egeria_intro_part2.md +343 -0
  17. md_processing/dr_egeria_outbox/friday/processed-2025-08-23 16:12-dr_egeria_intro_part2.md +343 -0
  18. md_processing/md_commands/glossary_commands.py +888 -951
  19. md_processing/md_commands/product_manager_commands.py +8 -270
  20. md_processing/md_commands/project_commands.py +1 -1
  21. md_processing/md_processing_utils/common_md_proc_utils.py +138 -64
  22. md_processing/md_processing_utils/common_md_utils.py +2 -1
  23. pyegeria/__init__.py +2 -3
  24. pyegeria/_client_new.py +4 -3
  25. pyegeria/_output_formats.py +5 -3
  26. pyegeria/collection_manager.py +32 -29
  27. pyegeria/{load_config.py → config.py} +7 -2
  28. pyegeria/data_designer.py +154 -194
  29. pyegeria/egeria_cat_client.py +46 -28
  30. pyegeria/egeria_client.py +71 -72
  31. pyegeria/egeria_config_client.py +37 -7
  32. pyegeria/egeria_my_client.py +45 -10
  33. pyegeria/egeria_tech_client.py +68 -57
  34. pyegeria/glossary_manager.py +495 -124
  35. pyegeria/governance_officer.py +2 -2
  36. pyegeria/logging_configuration.py +1 -4
  37. pyegeria/models.py +1 -1
  38. pyegeria/project_manager.py +359 -511
  39. pyegeria/utils.py +1 -3
  40. {pyegeria-5.4.0.26.dist-info → pyegeria-5.4.0.28.dist-info}/METADATA +1 -1
  41. {pyegeria-5.4.0.26.dist-info → pyegeria-5.4.0.28.dist-info}/RECORD +44 -38
  42. md_processing/md_processing_utils/solution_architect_log.log +0 -0
  43. pyegeria/glossary_browser.py +0 -1259
  44. {pyegeria-5.4.0.26.dist-info → pyegeria-5.4.0.28.dist-info}/LICENSE +0 -0
  45. {pyegeria-5.4.0.26.dist-info → pyegeria-5.4.0.28.dist-info}/WHEEL +0 -0
  46. {pyegeria-5.4.0.26.dist-info → pyegeria-5.4.0.28.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,312 @@
1
+ # Introduction to Dr.Egeria - an Egeria Markdown Processor
2
+
3
+
4
+ A constant challenge in managing information is gathering enough metadata about the information to
5
+ allow us to manage it. A common approach is to build fancy graphical user interfaces hoping that they
6
+ will be attractive enough and easy enough to use that people will do so.
7
+
8
+ Unfortunately, however, this ignores the fundamental fact that to use one of these nice GUI
9
+ applications, you have to step away from the tools and processes that you were in the midst of performing.
10
+ You have to leave your world and enter a new, often less familiar one.
11
+
12
+ Dr.Egeria, is an experiment in turning this around. Its not that fancy graphical user
13
+ interfaces don't have a role - but rather, to look at what we can do to support the
14
+ tools and approaches people already use. And maybe even make their day job a little
15
+ easier and a little more enjoyable.
16
+
17
+ So this is what we are exploring with Dr.Egeria. An Egeria Markdown language that allows
18
+ users to intermix requests to Egeria with other text through the use of standard Markdown. The markdown text
19
+ that we process can be in standard markdown (.md) files, in Jupyter notebooks, and perhaps other file formats.
20
+
21
+ This markdown file is an example. You will see that we intersperse normal narrative text (such as this)
22
+ with Commands to Egeria. We introduce a specific vocabulary to make Egeria requests.
23
+
24
+ In the example below we will create a new Egeria glossary to hold definitions related to Dr.Egeria.
25
+ We will then show how we can process this file which will record the information into Egeria and create a new
26
+ output file that acts as both a receipt showing what was processed as well as a starting point for making updates.
27
+
28
+ So here we go! First lets define a new Glossary::
29
+
30
+ ___
31
+
32
+
33
+ ## Reporting on Default Base Attributes - Perhaps couldn't find a valid combination of output_format_set and output_format?
34
+
35
+ # Update Glossary
36
+
37
+ ## Glossary Name
38
+
39
+ Egeria-Markdown
40
+
41
+ ## Display Name
42
+ Egeria-Markdown
43
+
44
+ ## Qualified Name
45
+ [Glossary::Egeria-Markdown](#c0eae997-3c0a-48c5-bc68-c32ffdc0577c)
46
+
47
+ ## Category
48
+ None
49
+
50
+ ## Description
51
+ Glossary to describe the vocabulary of Dr.Egeria - an Egeria Markdown language to support the exchange of metadata in a Markdown form.Dr.Egeria allows users to create metadata annotations using any text entry system that supports the entry of standard Markdownnotation and, through post-processingcommands, validates the Egeria content and sends the requests to be sent to Egeria.
52
+
53
+ ## GUID
54
+ c0eae997-3c0a-48c5-bc68-c32ffdc0577c
55
+
56
+ ## Type Name
57
+ Glossary
58
+
59
+ ## Metadata Collection Id
60
+ 9905c3cb-94c5-4494-9229-0d6f69c0b842
61
+
62
+ ## Metadata Collection Name
63
+ qs-metadata-store
64
+
65
+ ## Version Identifier
66
+ None
67
+
68
+ ## Classifications
69
+ []
70
+
71
+ ## Additional Properties
72
+ None
73
+
74
+ ## Created By
75
+ erinoverview
76
+
77
+ ## Create Time
78
+ 2025-08-23T02:22:14.592+00:00
79
+
80
+ ## Updated By
81
+ None
82
+
83
+ ## Update Time
84
+ None
85
+
86
+ ## Effective From
87
+ None
88
+
89
+ ## Effective To
90
+ None
91
+
92
+ ## Version
93
+ 1
94
+
95
+ ## Open Metadata Type Name
96
+ Glossary
97
+
98
+
99
+
100
+
101
+ # First Walk-Through
102
+ The block of markdown above is a request to create a new Egeria Glossary called `Egeria-Markdown`. Let's briefly walk
103
+ through. The command starts when we see `# Create Glossary`. This is a known phrase in Dr.Egeria. When we see this
104
+ phrase we recognize that this is an Egeria markdown request block. The request block ends if we encounter another `#` or
105
+ `___`, or run out of text. Within this request block we note some **attributes** that begin with a `## `. The first that we encounter is `## Glossary Name`. Not all attributes need to be filled in. Later, we'll process this file and demonstrate how to tell - but first, lets look at the attributes shown:
106
+
107
+ * `## Glossary Name` - this is the display name of the glossary. In this case the name is `Egeria-Markdown` As you can see, the value of the attribute is the plain text that follows it.
108
+ * `## Language` - what language will the terms of the glossary be in (yes there are ways to have mixed language but Dr.Egeria strives to be as simple as possible).
109
+ * `## Description` - a description of the glossary and its purpose.
110
+ * `## Usage` - how the glossary is meant to be used, and by whom.
111
+ * `## Qualified Name` - every element in Egeria must have a unique qualified name that we use to distinguish it from all other elements. The qualified name is meant to be understandable by humans, although it may follow formatting conventions. This attribute can be left blank for now - it will be automatically generated if empty.
112
+ * `## GUID` - same story as qualified name except that this is meant for automation and not people. It is always created for us.
113
+
114
+ And that's it. That's all we need to do to specify the creation of a new glossary (well - mostly - we'll reveal a few
115
+ more details a bit later).
116
+
117
+ ## Great! That was easy!
118
+
119
+ We now have a nice, clean, new...and empty...glossary - guess we better start filling it. Lets start filling it with terms.
120
+
121
+ ___
122
+
123
+ # Don't Create Term
124
+
125
+ ## Term Name
126
+
127
+ Command
128
+
129
+ ## In Glossary
130
+
131
+ Glossary::Egeria-Markdown
132
+
133
+
134
+ ## Summary
135
+
136
+ Commands are how a user of the Dr.Egeria markdown language request an action.
137
+
138
+ ## Description
139
+
140
+ Commands are how a user can request Egeria to take an action such as Create or Update an Egeria element. Dr.Egeria
141
+ provides a limited (but growing) set of commands. Dr.Egeria commands align with the pyegeria 'hey-egeria'
142
+ command line interface and, of course, the underlying Egeria REST API.
143
+
144
+ The commands currently use the following verbs to act on Egeria elements:
145
+
146
+ * Create
147
+ * Update
148
+ * List
149
+ * Provenance
150
+
151
+ ## Abbreviation
152
+
153
+ ## Examples
154
+
155
+ Create Glossary or
156
+ Update Glossary or
157
+ Create Term or
158
+ Update Term
159
+
160
+ ## Usage
161
+
162
+ Commands are used in the Dr.Egeria markdown language.
163
+
164
+ ## Version
165
+
166
+ 0.2
167
+
168
+ ## Status
169
+
170
+ ACTIVE
171
+
172
+ ## Qualified Name
173
+
174
+ ## GUID
175
+
176
+ ___
177
+
178
+ # Don't Create Term
179
+
180
+ ## In Glossary
181
+
182
+ Glossary::Egeria-Markdown
183
+
184
+ ## Term Name
185
+
186
+ Source
187
+
188
+ ## Summary
189
+
190
+ Source of the markdown content.
191
+
192
+ ## Description
193
+
194
+ Source of the markdown content - could be jupter or plain markdown file.
195
+
196
+ ## Abbreviation
197
+
198
+ ## Examples
199
+
200
+ ## Usage
201
+
202
+ ## Version
203
+
204
+ 0.2
205
+
206
+ ## Status
207
+
208
+ ACTIVE
209
+
210
+ ## Qualified Name
211
+
212
+ ## GUID
213
+
214
+
215
+ ___
216
+
217
+ # Don't Create Term
218
+
219
+ ## In Glossary
220
+
221
+ Glossary::Egeria-Markdown
222
+
223
+ ## Term Name
224
+
225
+ Directive
226
+
227
+ ## Summary
228
+
229
+ A directive defines how the command is to be processed.
230
+
231
+ ## Description
232
+
233
+ Directives are one of:
234
+
235
+ * display - just display what we've found
236
+ * validate - check the validity of the requested action
237
+ * process - process the requested action
238
+
239
+
240
+ ## Version
241
+
242
+ 0.1
243
+
244
+ ## Status
245
+
246
+ ACTIVE
247
+
248
+ ## Qualified Name
249
+
250
+ ## GUID
251
+
252
+ ___
253
+
254
+ # Some terms specified - Now what?
255
+
256
+ Ok - we've now defined a glossary and three terms to go into the glossary. A few observations.
257
+
258
+ * There is a degree of freedom in writing the definitions. The attributes aren't always in the same
259
+ order and optional attributes don't need to be specified at all. We try to make things as easy as possible.
260
+ * We can run a definition file through a validation process to check our proposed definition and provide feedback.
261
+ * When we process a definition we will use the same validation process before trying to update Egeria
262
+ with the requested definitions - requests may get rejected or altered - this will be consistent with the feedback we
263
+ provide during validation.
264
+
265
+ Here is what we'll do next.
266
+
267
+ ## Next
268
+ > Tip: An easy way to get started is by installing [Egeria Workspaces](https://github.com/odpi/egeria-workspaces) and
269
+ > using the hey_egeria command line interface. Tutorials are available at [Egeria-Workspaces](https://youtu.be/Dc5i5EpRusE).
270
+
271
+ We will run a small program called `dr_egeria_md.py` to operate on this markdown file.
272
+ When we run this program we tell it not just the name of the file to process but also provide a directive on what to do.
273
+ Currently we have the choice of:
274
+
275
+ 1. Display - just parse the file, breaking it down into request blocks, and display what we find
276
+ 2. Validate - parse the file and validate if the commands can be processed - showing information about what we observe.
277
+ 3. Process - parse the request blocks and execute the commands - and produce a new output file to simplify further processing.
278
+
279
+
280
+ # Great --> let's give it a try!
281
+
282
+ Ok - its processed the file and generated output to the console that shows us what it has done.
283
+ We also now have a new file in the designated outbox (specified by an Environment Variable).
284
+ If we review that file, we see that it has similar content to this original file except that
285
+ the **Create** statements have been replaced with **Update** statements and
286
+ attributes such as **Qualified Name** and **GUID** now contain the known values.
287
+
288
+ This means that if we want to make changes to the definitions that we have
289
+ created, all we need to do is to make changes to the updatable attributes in this
290
+ new document and resubmit it - pretty simple.
291
+
292
+ Here is a diagram of this process from the user perspective:
293
+
294
+ ```mermaid
295
+ flowchart TD
296
+ A[Text Editor or Jupyter Notebook] --> B(dr.egeria content)
297
+ B --> C{dr.egeria command}
298
+ C -->|display| D[console output]
299
+ C -->|validate| E[console validation output and file]
300
+ C -->|process| F[console output and processed output file]
301
+ F-->|Additional Updates|A
302
+ E-->|Additional Updates|A
303
+ ```
304
+
305
+ In the next section we'll see how we can update and extend what we have done by creating
306
+ some glossary categories and then assigning categories to the terms.
307
+ To do this we will copy the output document that we just created and call the
308
+ copy dr_egeria_intro_part2.md. The text of the document has also been updated
309
+ to reflect the purpose. Let's open that now!
310
+ # Provenance
311
+
312
+ * Results from processing file dr_egeria_intro_part1.md on 2025-08-22 21:22
@@ -0,0 +1,265 @@
1
+ # Introduction to Dr.Egeria - an Egeria Markdown Processor
2
+
3
+
4
+ A constant challenge in managing information is gathering enough metadata about the information to
5
+ allow us to manage it. A common approach is to build fancy graphical user interfaces hoping that they
6
+ will be attractive enough and easy enough to use that people will do so.
7
+
8
+ Unfortunately, however, this ignores the fundamental fact that to use one of these nice GUI
9
+ applications, you have to step away from the tools and processes that you were in the midst of performing.
10
+ You have to leave your world and enter a new, often less familiar one.
11
+
12
+ Dr.Egeria, is an experiment in turning this around. Its not that fancy graphical user
13
+ interfaces don't have a role - but rather, to look at what we can do to support the
14
+ tools and approaches people already use. And maybe even make their day job a little
15
+ easier and a little more enjoyable.
16
+
17
+ So this is what we are exploring with Dr.Egeria. An Egeria Markdown language that allows
18
+ users to intermix requests to Egeria with other text through the use of standard Markdown. The markdown text
19
+ that we process can be in standard markdown (.md) files, in Jupyter notebooks, and perhaps other file formats.
20
+
21
+ This markdown file is an example. You will see that we intersperse normal narrative text (such as this)
22
+ with Commands to Egeria. We introduce a specific vocabulary to make Egeria requests.
23
+
24
+ In the example below we will create a new Egeria glossary to hold definitions related to Dr.Egeria.
25
+ We will then show how we can process this file which will record the information into Egeria and create a new
26
+ output file that acts as both a receipt showing what was processed as well as a starting point for making updates.
27
+
28
+ So here we go! First lets define a new Glossary::
29
+
30
+ ___
31
+
32
+
33
+ # Update Data Specification
34
+
35
+ ## Data Specification Name
36
+
37
+ Egeria-Markdown
38
+
39
+ ## Display Name
40
+ Egeria-Markdown
41
+
42
+ ## Qualified Name
43
+ [Glossary::Egeria-Markdown](#c0eae997-3c0a-48c5-bc68-c32ffdc0577c)
44
+
45
+ ## Category
46
+ None
47
+
48
+ ## Description
49
+ Glossary to describe the vocabulary of Dr.Egeria - an Egeria Markdown language to support the exchange of metadata in a Markdown form.Dr.Egeria allows users to create metadata annotations using any text entry system that supports the entry of standard Markdownnotation and, through post-processingcommands, validates the Egeria content and sends the requests to be sent to Egeria.
50
+
51
+ [[Data Specification]]
52
+
53
+
54
+ # First Walk-Through
55
+ The block of markdown above is a request to create a new Egeria Glossary called `Egeria-Markdown`. Let's briefly walk
56
+ through. The command starts when we see `# Create Glossary`. This is a known phrase in Dr.Egeria. When we see this
57
+ phrase we recognize that this is an Egeria markdown request block. The request block ends if we encounter another `#` or
58
+ `___`, or run out of text. Within this request block we note some **attributes** that begin with a `## `. The first that we encounter is `## Glossary Name`. Not all attributes need to be filled in. Later, we'll process this file and demonstrate how to tell - but first, lets look at the attributes shown:
59
+
60
+ * `## Glossary Name` - this is the display name of the glossary. In this case the name is `Egeria-Markdown` As you can see, the value of the attribute is the plain text that follows it.
61
+ * `## Language` - what language will the terms of the glossary be in (yes there are ways to have mixed language but Dr.Egeria strives to be as simple as possible).
62
+ * `## Description` - a description of the glossary and its purpose.
63
+ * `## Usage` - how the glossary is meant to be used, and by whom.
64
+ * `## Qualified Name` - every element in Egeria must have a unique qualified name that we use to distinguish it from all other elements. The qualified name is meant to be understandable by humans, although it may follow formatting conventions. This attribute can be left blank for now - it will be automatically generated if empty.
65
+ * `## GUID` - same story as qualified name except that this is meant for automation and not people. It is always created for us.
66
+
67
+ And that's it. That's all we need to do to specify the creation of a new glossary (well - mostly - we'll reveal a few
68
+ more details a bit later).
69
+
70
+ ## Great! That was easy!
71
+
72
+ We now have a nice, clean, new...and empty...glossary - guess we better start filling it. Lets start filling it with terms.
73
+
74
+ ___
75
+
76
+ # Don't Create Term
77
+
78
+ ## Term Name
79
+
80
+ Command
81
+
82
+ ## In Glossary
83
+
84
+ Glossary::Egeria-Markdown
85
+
86
+
87
+ ## Summary
88
+
89
+ Commands are how a user of the Dr.Egeria markdown language request an action.
90
+
91
+ ## Description
92
+
93
+ Commands are how a user can request Egeria to take an action such as Create or Update an Egeria element. Dr.Egeria
94
+ provides a limited (but growing) set of commands. Dr.Egeria commands align with the pyegeria 'hey-egeria'
95
+ command line interface and, of course, the underlying Egeria REST API.
96
+
97
+ The commands currently use the following verbs to act on Egeria elements:
98
+
99
+ * Create
100
+ * Update
101
+ * List
102
+ * Provenance
103
+
104
+ ## Abbreviation
105
+
106
+ ## Examples
107
+
108
+ Create Glossary or
109
+ Update Glossary or
110
+ Create Term or
111
+ Update Term
112
+
113
+ ## Usage
114
+
115
+ Commands are used in the Dr.Egeria markdown language.
116
+
117
+ ## Version
118
+
119
+ 0.2
120
+
121
+ ## Status
122
+
123
+ ACTIVE
124
+
125
+ ## Qualified Name
126
+
127
+ ## GUID
128
+
129
+ ___
130
+
131
+ # Don't Create Term
132
+
133
+ ## In Glossary
134
+
135
+ Glossary::Egeria-Markdown
136
+
137
+ ## Term Name
138
+
139
+ Source
140
+
141
+ ## Summary
142
+
143
+ Source of the markdown content.
144
+
145
+ ## Description
146
+
147
+ Source of the markdown content - could be jupter or plain markdown file.
148
+
149
+ ## Abbreviation
150
+
151
+ ## Examples
152
+
153
+ ## Usage
154
+
155
+ ## Version
156
+
157
+ 0.2
158
+
159
+ ## Status
160
+
161
+ ACTIVE
162
+
163
+ ## Qualified Name
164
+
165
+ ## GUID
166
+
167
+
168
+ ___
169
+
170
+ # Don't Create Term
171
+
172
+ ## In Glossary
173
+
174
+ Glossary::Egeria-Markdown
175
+
176
+ ## Term Name
177
+
178
+ Directive
179
+
180
+ ## Summary
181
+
182
+ A directive defines how the command is to be processed.
183
+
184
+ ## Description
185
+
186
+ Directives are one of:
187
+
188
+ * display - just display what we've found
189
+ * validate - check the validity of the requested action
190
+ * process - process the requested action
191
+
192
+
193
+ ## Version
194
+
195
+ 0.1
196
+
197
+ ## Status
198
+
199
+ ACTIVE
200
+
201
+ ## Qualified Name
202
+
203
+ ## GUID
204
+
205
+ ___
206
+
207
+ # Some terms specified - Now what?
208
+
209
+ Ok - we've now defined a glossary and three terms to go into the glossary. A few observations.
210
+
211
+ * There is a degree of freedom in writing the definitions. The attributes aren't always in the same
212
+ order and optional attributes don't need to be specified at all. We try to make things as easy as possible.
213
+ * We can run a definition file through a validation process to check our proposed definition and provide feedback.
214
+ * When we process a definition we will use the same validation process before trying to update Egeria
215
+ with the requested definitions - requests may get rejected or altered - this will be consistent with the feedback we
216
+ provide during validation.
217
+
218
+ Here is what we'll do next.
219
+
220
+ ## Next
221
+ > Tip: An easy way to get started is by installing [Egeria Workspaces](https://github.com/odpi/egeria-workspaces) and
222
+ > using the hey_egeria command line interface. Tutorials are available at [Egeria-Workspaces](https://youtu.be/Dc5i5EpRusE).
223
+
224
+ We will run a small program called `dr_egeria_md.py` to operate on this markdown file.
225
+ When we run this program we tell it not just the name of the file to process but also provide a directive on what to do.
226
+ Currently we have the choice of:
227
+
228
+ 1. Display - just parse the file, breaking it down into request blocks, and display what we find
229
+ 2. Validate - parse the file and validate if the commands can be processed - showing information about what we observe.
230
+ 3. Process - parse the request blocks and execute the commands - and produce a new output file to simplify further processing.
231
+
232
+
233
+ # Great --> let's give it a try!
234
+
235
+ Ok - its processed the file and generated output to the console that shows us what it has done.
236
+ We also now have a new file in the designated outbox (specified by an Environment Variable).
237
+ If we review that file, we see that it has similar content to this original file except that
238
+ the **Create** statements have been replaced with **Update** statements and
239
+ attributes such as **Qualified Name** and **GUID** now contain the known values.
240
+
241
+ This means that if we want to make changes to the definitions that we have
242
+ created, all we need to do is to make changes to the updatable attributes in this
243
+ new document and resubmit it - pretty simple.
244
+
245
+ Here is a diagram of this process from the user perspective:
246
+
247
+ ```mermaid
248
+ flowchart TD
249
+ A[Text Editor or Jupyter Notebook] --> B(dr.egeria content)
250
+ B --> C{dr.egeria command}
251
+ C -->|display| D[console output]
252
+ C -->|validate| E[console validation output and file]
253
+ C -->|process| F[console output and processed output file]
254
+ F-->|Additional Updates|A
255
+ E-->|Additional Updates|A
256
+ ```
257
+
258
+ In the next section we'll see how we can update and extend what we have done by creating
259
+ some glossary categories and then assigning categories to the terms.
260
+ To do this we will copy the output document that we just created and call the
261
+ copy dr_egeria_intro_part2.md. The text of the document has also been updated
262
+ to reflect the purpose. Let's open that now!
263
+ # Provenance
264
+
265
+ * Results from processing file dr_egeria_intro_part1.md on 2025-08-22 21:23