@mnstry/atelier 0.2.0-alpha.13 → 0.2.0-alpha.14
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/CHANGELOG.md +233 -0
- package/README.md +22 -5
- package/docs/blocks/capability-stewardship.md +1 -1
- package/docs/blocks/learning-harnesses.md +1 -1
- package/docs/capability-stewardship.md +2 -4
- package/docs/ingestion.md +3 -3
- package/docs/inquiry-harnesses.md +2 -3
- package/docs/install.md +3 -3
- package/docs/learning-harnesses.md +2 -3
- package/docs/local-services.md +42 -3
- package/docs/obsidian-contract.md +23 -0
- package/docs/obsidian-plugin.md +214 -3
- package/docs/obsidian.md +271 -11
- package/docs/personal-workspace.md +13 -4
- package/docs/release-engineering.md +2 -1
- package/docs/repo-boundary-guard.md +26 -3
- package/docs/semantic-operation.md +4 -3
- package/docs/upgrade.md +174 -2
- package/fixtures/templates/local-library.v1.json +2 -1
- package/package.json +2 -1
- package/plugins/obsidian/main.js +57 -8
- package/plugins/obsidian/manifest.json +1 -1
- package/src/boundary/content-rules.mjs +532 -67
- package/src/boundary/policy.mjs +135 -56
- package/src/cli/run.mjs +3 -2
- package/src/commands/obsidian.mjs +23 -7
- package/src/graph/graph.mjs +13 -5
- package/src/graph/knowledge-graph.mjs +19 -1
- package/src/ingestion/optional/graphify/graphify_supplier.py +5 -0
- package/src/ingestion/optional/graphify/native-closure-pins.json +275 -0
- package/src/ingestion/optional/graphify/native-pins.json +306 -0
- package/src/knowledge-health/rule-identity.mjs +14 -9
- package/src/personal-workspace/index.mjs +1 -1
- package/src/personal-workspace/selection.mjs +17 -1
- package/src/project/path-match.mjs +2 -1
- package/src/projection/obsidian/materialize/prepare-view.mjs +87 -5
- package/src/projection/obsidian/personal-workspace.mjs +87 -4
- package/src/projection/obsidian/proposals/adapter.mjs +46 -23
- package/src/projection/obsidian/proposals/observation.mjs +40 -2
- package/src/projection/obsidian/publication/publisher.mjs +72 -5
- package/src/projection/project.mjs +3 -2
- package/src/runtime/obsidian/engine.mjs +293 -55
- package/src/runtime/obsidian/lifecycle.mjs +17 -12
- package/src/runtime/obsidian/login-item.mjs +4 -1
- package/src/runtime/obsidian/observation.mjs +36 -4
- package/src/runtime/obsidian/opening.mjs +3 -2
- package/src/runtime/obsidian/personal-selection.mjs +125 -0
- package/src/runtime/obsidian/pipeline.mjs +44 -3
- package/src/runtime/obsidian/private-lock.mjs +39 -4
- package/src/runtime/obsidian/service-main.mjs +58 -12
- package/src/runtime/obsidian/service.mjs +66 -6
- package/src/runtime/obsidian/view-permission.mjs +334 -0
- package/src/ui/control-system.mjs +201 -0
- package/src/ui/html-primitives.mjs +3 -0
- package/src/upgrade/closure-diagnostics.mjs +135 -0
- package/src/upgrade/closure.mjs +649 -0
- package/src/upgrade/upgrade.mjs +19 -7
- package/templates/external-project-workspace/pack-lifecycle.json +2 -1
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
{
|
|
2
|
+
"upstreamCommit": "1cd9a36c0c57a661d2d2234bc3207e887e1ba104",
|
|
3
|
+
"upstreamTree": "0b2f8588510d58e128ac56264c96dfd1fb4dd22b",
|
|
4
|
+
"modules": {
|
|
5
|
+
"graphify": {
|
|
6
|
+
"relativePath": "__init__.py",
|
|
7
|
+
"sha256": "5afcd670aa65337ae49735582a9bc482a721abdfbfc063fcad1d0ccc90b0838a"
|
|
8
|
+
},
|
|
9
|
+
"graphify.google_workspace": {
|
|
10
|
+
"relativePath": "google_workspace.py",
|
|
11
|
+
"sha256": "f5563580450aea0830159ebed58316594161b6bcb9539cd97d161ff529ceae9a"
|
|
12
|
+
},
|
|
13
|
+
"graphify.paths": {
|
|
14
|
+
"relativePath": "paths.py",
|
|
15
|
+
"sha256": "ba3eea308b902e9b1ec55c61e6cd2bb703dae425da9bfc80ccf7f104556d619c"
|
|
16
|
+
},
|
|
17
|
+
"graphify.detect": {
|
|
18
|
+
"relativePath": "detect.py",
|
|
19
|
+
"sha256": "0c539db73e11b93b14c9ae2a61d6094a3aae13a9dbd49158e3d5164a28b426a6"
|
|
20
|
+
},
|
|
21
|
+
"graphify.ids": {
|
|
22
|
+
"relativePath": "ids.py",
|
|
23
|
+
"sha256": "d9befd67479a2e484e0fdb884cdbfd77ee0c96487970196abda68751d4e69e4e"
|
|
24
|
+
},
|
|
25
|
+
"graphify.manifest_ingest": {
|
|
26
|
+
"relativePath": "manifest_ingest.py",
|
|
27
|
+
"sha256": "f03522373429d0a8dd54ea41ffa2dd48939b1dc516098186058fd4d258c50ca0"
|
|
28
|
+
},
|
|
29
|
+
"graphify.cache": {
|
|
30
|
+
"relativePath": "cache.py",
|
|
31
|
+
"sha256": "b630ce0c29cf5c00e2a43a7196492b7531ed905ac48c86f5f42c13e2ce841dbc"
|
|
32
|
+
},
|
|
33
|
+
"graphify.security": {
|
|
34
|
+
"relativePath": "security.py",
|
|
35
|
+
"sha256": "92c4c6447c855195aa3ca0f50fde8810843d62028240aa4ec0f45be2eb0336a3"
|
|
36
|
+
},
|
|
37
|
+
"graphify.extractors.base": {
|
|
38
|
+
"relativePath": "extractors/base.py",
|
|
39
|
+
"sha256": "cd11628d3d4c05dcf0df002823712595ba2fac848fa146517a3bf41ff68cc2e8"
|
|
40
|
+
},
|
|
41
|
+
"graphify.extractors.apex": {
|
|
42
|
+
"relativePath": "extractors/apex.py",
|
|
43
|
+
"sha256": "4881d0e160d98d4045cda155cef7e4047d74dd46cd5f20288583bd2776d9ef03"
|
|
44
|
+
},
|
|
45
|
+
"graphify.extractors.bash": {
|
|
46
|
+
"relativePath": "extractors/bash.py",
|
|
47
|
+
"sha256": "1062a69a5bd696149672d95b9128296fe83c5acf8b2b2dccdb1a8fbe190d220d"
|
|
48
|
+
},
|
|
49
|
+
"graphify.extractors.blade": {
|
|
50
|
+
"relativePath": "extractors/blade.py",
|
|
51
|
+
"sha256": "14cf2475faf9d956c3fc33441421d072dc39085ac3c4bd38eebfd1bac28ed576"
|
|
52
|
+
},
|
|
53
|
+
"graphify.extractors.cobol": {
|
|
54
|
+
"relativePath": "extractors/cobol.py",
|
|
55
|
+
"sha256": "7807e29e9e7f4e345bf108fa5edd9a6b5468eaec743acb978b503252ce94fa0b"
|
|
56
|
+
},
|
|
57
|
+
"graphify.extractors.commonlisp": {
|
|
58
|
+
"relativePath": "extractors/commonlisp.py",
|
|
59
|
+
"sha256": "bb77c4e0f8c2269cee49ad6a8d7972492023ad4757f0605ad422e00e88a67a09"
|
|
60
|
+
},
|
|
61
|
+
"graphify.extractors.dart": {
|
|
62
|
+
"relativePath": "extractors/dart.py",
|
|
63
|
+
"sha256": "4c95d7f78cf9c27ad628f1abf44ad8045fb6b55d793c5bdbd6ae1be939105666"
|
|
64
|
+
},
|
|
65
|
+
"graphify.extractors.dm": {
|
|
66
|
+
"relativePath": "extractors/dm.py",
|
|
67
|
+
"sha256": "f3da427b091028052afb9a7986e9ed16e79c05d5f2cf1638c8a815d3438bf0a4"
|
|
68
|
+
},
|
|
69
|
+
"graphify.extractors.elixir": {
|
|
70
|
+
"relativePath": "extractors/elixir.py",
|
|
71
|
+
"sha256": "6d4aaa32dceb5105ac7d42f6e61ff06c8ee990c4e6e5b23958056b949db3e815"
|
|
72
|
+
},
|
|
73
|
+
"graphify.extractors.erlang": {
|
|
74
|
+
"relativePath": "extractors/erlang.py",
|
|
75
|
+
"sha256": "c9eb5f779ad04ecea9c02ca17219d2118fdb4207ef3c7f16ee2909a487377eb4"
|
|
76
|
+
},
|
|
77
|
+
"graphify.extractors.fortran": {
|
|
78
|
+
"relativePath": "extractors/fortran.py",
|
|
79
|
+
"sha256": "b151c1bf6ee7b285bf88b55aecf5c3a5f89564df1681cda9c034e18b8828ed35"
|
|
80
|
+
},
|
|
81
|
+
"graphify.extractors.go": {
|
|
82
|
+
"relativePath": "extractors/go.py",
|
|
83
|
+
"sha256": "3d78726e946904b4c450545d18a93f6f97acf3a1a1e66a6d514e05cf163dc77f"
|
|
84
|
+
},
|
|
85
|
+
"graphify.extractors.json_config": {
|
|
86
|
+
"relativePath": "extractors/json_config.py",
|
|
87
|
+
"sha256": "3099dff7f78e044380699138a4087729cca423f423c96fea7ea791fa4c25b599"
|
|
88
|
+
},
|
|
89
|
+
"graphify.extractors.models": {
|
|
90
|
+
"relativePath": "extractors/models.py",
|
|
91
|
+
"sha256": "038cbf04e17aec6dc71d8e6d886ab57fcfeffc36bf8d5d4fb0aeed88a6fc4719"
|
|
92
|
+
},
|
|
93
|
+
"graphify.extractors.resolution": {
|
|
94
|
+
"relativePath": "extractors/resolution.py",
|
|
95
|
+
"sha256": "fb1e337225b14d0c442a8ca01b08a1a536b54cb220e34bacc74eaf0a5b3d8455"
|
|
96
|
+
},
|
|
97
|
+
"graphify.extractors.engine": {
|
|
98
|
+
"relativePath": "extractors/engine.py",
|
|
99
|
+
"sha256": "a731d4fa5bb62cfa9b9943e4c39b26dc2244ebd81a11f1822f74787b6d78c958"
|
|
100
|
+
},
|
|
101
|
+
"graphify.extractors.julia": {
|
|
102
|
+
"relativePath": "extractors/julia.py",
|
|
103
|
+
"sha256": "f2b4232178b74e9873ad9a09cdd1eaafde018b9db176175c0028279ba99f603c"
|
|
104
|
+
},
|
|
105
|
+
"graphify.extractors.markdown": {
|
|
106
|
+
"relativePath": "extractors/markdown.py",
|
|
107
|
+
"sha256": "30c980898b946fd4c6290fe82eb42f4bb22a05237ab887bc89287ed6edd226f0"
|
|
108
|
+
},
|
|
109
|
+
"graphify.extractors.objc": {
|
|
110
|
+
"relativePath": "extractors/objc.py",
|
|
111
|
+
"sha256": "98e868e1d0a55186caa7dbce0f0af1d7aebb8ebaa8a26b8b544acbb91d1c6203"
|
|
112
|
+
},
|
|
113
|
+
"graphify.extractors.pascal": {
|
|
114
|
+
"relativePath": "extractors/pascal.py",
|
|
115
|
+
"sha256": "3eae81396a536251c58bcf96d89f33d1583a87a6f4bf55d79289ccccde17e77d"
|
|
116
|
+
},
|
|
117
|
+
"graphify.extractors.pascal_forms": {
|
|
118
|
+
"relativePath": "extractors/pascal_forms.py",
|
|
119
|
+
"sha256": "ad68d27b5d4680c1d6b172ae17245601910eadc3ccb2c90e581764ad76107013"
|
|
120
|
+
},
|
|
121
|
+
"graphify.extractors.powershell": {
|
|
122
|
+
"relativePath": "extractors/powershell.py",
|
|
123
|
+
"sha256": "67f9d1b56019a198ceb15ccfb722ee31f263f051124e496145dea82974b218f8"
|
|
124
|
+
},
|
|
125
|
+
"graphify.extractors.r": {
|
|
126
|
+
"relativePath": "extractors/r.py",
|
|
127
|
+
"sha256": "716047e57bb6689423eb0b0c3dffedd278330e778f7d0b4e12787a72278ad2c9"
|
|
128
|
+
},
|
|
129
|
+
"graphify.extractors.razor": {
|
|
130
|
+
"relativePath": "extractors/razor.py",
|
|
131
|
+
"sha256": "82cc29516d4951741d3f34397f5612c55be019607339b1f268c22f2a215061f0"
|
|
132
|
+
},
|
|
133
|
+
"graphify.extractors.rust": {
|
|
134
|
+
"relativePath": "extractors/rust.py",
|
|
135
|
+
"sha256": "0f79a21f9213ee29cf825971d0df4a0734b2d3c966786e0fec3a3f8ba936855f"
|
|
136
|
+
},
|
|
137
|
+
"graphify.extractors.sln": {
|
|
138
|
+
"relativePath": "extractors/sln.py",
|
|
139
|
+
"sha256": "9b5987dacc793277ba5db7de4187c89a9a83b6f2ba07a90a85734e597112470a"
|
|
140
|
+
},
|
|
141
|
+
"graphify.extractors.solidity": {
|
|
142
|
+
"relativePath": "extractors/solidity.py",
|
|
143
|
+
"sha256": "abe14c5784d02cc0d8b6b4533d66bb736e0b8e914ecc8baa5251b58fe90c9e16"
|
|
144
|
+
},
|
|
145
|
+
"graphify.extractors.sql": {
|
|
146
|
+
"relativePath": "extractors/sql.py",
|
|
147
|
+
"sha256": "8186f36b85970a5394b1692a76cb4f2e6f8ce186cc806bc8757368a1d04c349f"
|
|
148
|
+
},
|
|
149
|
+
"graphify.extractors.terraform": {
|
|
150
|
+
"relativePath": "extractors/terraform.py",
|
|
151
|
+
"sha256": "1516abe54b424300daee68bcbc9a07059948863aa257395946ef8081b9b14211"
|
|
152
|
+
},
|
|
153
|
+
"graphify.extractors.verilog": {
|
|
154
|
+
"relativePath": "extractors/verilog.py",
|
|
155
|
+
"sha256": "f3d8a6ef6fed7eade3b845ff91ec5a0e7100d0afe3794b864e08775868a7b9f4"
|
|
156
|
+
},
|
|
157
|
+
"graphify.extractors.vbnet": {
|
|
158
|
+
"relativePath": "extractors/vbnet.py",
|
|
159
|
+
"sha256": "6a8e93ffe4a47620fb66931c7f668f480b3119b3812e50c14e7a2b60c3a59e78"
|
|
160
|
+
},
|
|
161
|
+
"graphify.extractors.zig": {
|
|
162
|
+
"relativePath": "extractors/zig.py",
|
|
163
|
+
"sha256": "a1c7c9bb72277aee57a39fd97a55359a40cd17a4d61ec401fcd12b4796111111"
|
|
164
|
+
},
|
|
165
|
+
"graphify.extractors": {
|
|
166
|
+
"relativePath": "extractors/__init__.py",
|
|
167
|
+
"sha256": "9c809d014a2c90d2f3e442afc51cfa5b5c8b2eae78e169fe84843283eb51b69a"
|
|
168
|
+
},
|
|
169
|
+
"graphify.mcp_ingest": {
|
|
170
|
+
"relativePath": "mcp_ingest.py",
|
|
171
|
+
"sha256": "7553845a7cae7c310803bf37d992b695b27d21e1b827c1c33dbed2b15971be61"
|
|
172
|
+
},
|
|
173
|
+
"graphify.resolver_registry": {
|
|
174
|
+
"relativePath": "resolver_registry.py",
|
|
175
|
+
"sha256": "bd5904412417ead6104852c1d79c3e8d1aebb7ab3f80a13330f19be7c18f307b"
|
|
176
|
+
},
|
|
177
|
+
"graphify.validate": {
|
|
178
|
+
"relativePath": "validate.py",
|
|
179
|
+
"sha256": "be068c6b2ff4e514f31663e0155a9d63f35096d154b98ab6c9c467a23febd6f7"
|
|
180
|
+
},
|
|
181
|
+
"graphify.build": {
|
|
182
|
+
"relativePath": "build.py",
|
|
183
|
+
"sha256": "8f4b17391c60331de1875a47d697191d5ebe50011f36d204341f53e60c210eda"
|
|
184
|
+
},
|
|
185
|
+
"graphify.ruby_resolution": {
|
|
186
|
+
"relativePath": "ruby_resolution.py",
|
|
187
|
+
"sha256": "3a300b61def823f78d2305a072ea26f27c4f1dd8cf67bc060ab151213e9142a2"
|
|
188
|
+
},
|
|
189
|
+
"graphify.csharp_dispatch": {
|
|
190
|
+
"relativePath": "csharp_dispatch.py",
|
|
191
|
+
"sha256": "9c67537a297c676f7b736423f854b62a32c686c4cd63e3b1a357116b013ebb7a"
|
|
192
|
+
},
|
|
193
|
+
"graphify.pascal_resolution": {
|
|
194
|
+
"relativePath": "pascal_resolution.py",
|
|
195
|
+
"sha256": "e4e9400ee20e6b410e521ad24bfe4c7e09742590ba1b0964cc84b49158d9318f"
|
|
196
|
+
},
|
|
197
|
+
"graphify.markdown_resolution": {
|
|
198
|
+
"relativePath": "markdown_resolution.py",
|
|
199
|
+
"sha256": "e582a66581b5a4eca3951ddddf33ca891979671f40f088e00788bee4eb6e1ed8"
|
|
200
|
+
},
|
|
201
|
+
"graphify.extractors.csharp": {
|
|
202
|
+
"relativePath": "extractors/csharp.py",
|
|
203
|
+
"sha256": "6f75b10512d1f7bcc51ec24790c6973e2e9356bac92a289f633400f551fb2535"
|
|
204
|
+
},
|
|
205
|
+
"graphify.extractors.ocaml": {
|
|
206
|
+
"relativePath": "extractors/ocaml.py",
|
|
207
|
+
"sha256": "2f35fb60394b4a73752d99d4a852bba7cdd9d4014071c5bfeb603d21578508df"
|
|
208
|
+
},
|
|
209
|
+
"graphify.extractors.robot": {
|
|
210
|
+
"relativePath": "extractors/robot.py",
|
|
211
|
+
"sha256": "5d3adab1d61ee2af37d5c77ee88be399d9271060e72a36b5e332704b01e47980"
|
|
212
|
+
},
|
|
213
|
+
"graphify.symbol_resolution": {
|
|
214
|
+
"relativePath": "symbol_resolution.py",
|
|
215
|
+
"sha256": "2430b652840912a77f9a1a234fa27e6a51a269bc43f810c8574ea826ed1d27fb"
|
|
216
|
+
},
|
|
217
|
+
"graphify.extract": {
|
|
218
|
+
"relativePath": "extract.py",
|
|
219
|
+
"sha256": "2facca59e22f735f68abc188bab0fa519427f4dc4deb2a235ed0e7c50ebe9c84"
|
|
220
|
+
},
|
|
221
|
+
"graphify._minhash": {
|
|
222
|
+
"relativePath": "_minhash.py",
|
|
223
|
+
"sha256": "eea373a21d8f9c97beecb08ca06f0e2d273cd40e2e91dfbcaec4972bd45fdf0c"
|
|
224
|
+
},
|
|
225
|
+
"graphify.dedup": {
|
|
226
|
+
"relativePath": "dedup.py",
|
|
227
|
+
"sha256": "7e65caa8ebc393db375e49c89764e6b089a77e88c10b18ff5f37fd440c7d1dfc"
|
|
228
|
+
},
|
|
229
|
+
"graphify.analyze": {
|
|
230
|
+
"relativePath": "analyze.py",
|
|
231
|
+
"sha256": "e6011dcbb35144134d8ebef12d17ea869e73749e79722caa9527ed30500edd4a"
|
|
232
|
+
},
|
|
233
|
+
"graphify.exporters": {
|
|
234
|
+
"relativePath": "exporters/__init__.py",
|
|
235
|
+
"sha256": "0a1e96c29d7601843980a62a1069a95c05cb9f07d6f431a054feb8664abf21e1"
|
|
236
|
+
},
|
|
237
|
+
"graphify.exporters.graphdb": {
|
|
238
|
+
"relativePath": "exporters/graphdb.py",
|
|
239
|
+
"sha256": "e80bb1a706568f85d1e97d72a649c96bdac708c9aa3c1d9ee9a59ad7a2acd0be"
|
|
240
|
+
},
|
|
241
|
+
"graphify.exporters.base": {
|
|
242
|
+
"relativePath": "exporters/base.py",
|
|
243
|
+
"sha256": "225e77141d4f3d568c652d7ae3177bbcd4aa7749259bb77dcb4f1f0414249140"
|
|
244
|
+
},
|
|
245
|
+
"graphify.exporters.html": {
|
|
246
|
+
"relativePath": "exporters/html.py",
|
|
247
|
+
"sha256": "415d96c0563769b89acf02e20043998c64edb977cd5049fbe3d1e319b7e359f8"
|
|
248
|
+
},
|
|
249
|
+
"graphify.export": {
|
|
250
|
+
"relativePath": "export.py",
|
|
251
|
+
"sha256": "312f4658900e33360e6d23a005ee4ed227a30ae7737bfeba13318f7f16af5576"
|
|
252
|
+
},
|
|
253
|
+
"graphify.cluster": {
|
|
254
|
+
"relativePath": "cluster.py",
|
|
255
|
+
"sha256": "bfbfeac12c0a59cb7824d081e32a77e7cdcadd5530e9e6d1bf82264b08a1a78f"
|
|
256
|
+
},
|
|
257
|
+
"graphify.serve": {
|
|
258
|
+
"relativePath": "serve.py",
|
|
259
|
+
"sha256": "a6df71d1c6efd3281d2938f8c234d987ba61a92270db585490688d194b7f6bec"
|
|
260
|
+
},
|
|
261
|
+
"graphify.affected": {
|
|
262
|
+
"relativePath": "affected.py",
|
|
263
|
+
"sha256": "c679c7e7f8881973e449fd885dd0ccc096dcc074f4c93f43962b1ce957ef77a7"
|
|
264
|
+
},
|
|
265
|
+
"graphify.ingest": {
|
|
266
|
+
"relativePath": "ingest.py",
|
|
267
|
+
"sha256": "24b3f65ce30c977e245473c75b75e12c23b423a83dcb9a318ac72a49d3888df6"
|
|
268
|
+
},
|
|
269
|
+
"graphify.reflect": {
|
|
270
|
+
"relativePath": "reflect.py",
|
|
271
|
+
"sha256": "53d877f8009344cfc721d400444bbf2c7f7fcdcd3c4f97580a369c4f79b06db0"
|
|
272
|
+
}
|
|
273
|
+
},
|
|
274
|
+
"thirdPartyDependencyAuthority": "Host-owned pinned public wheel/dependency environment; this manifest binds Graphify Python source, not arbitrary third-party native extensions."
|
|
275
|
+
}
|
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
{
|
|
2
|
+
"upstreamCommit": "1cd9a36c0c57a661d2d2234bc3207e887e1ba104",
|
|
3
|
+
"upstreamVersion": "0.9.72",
|
|
4
|
+
"operations": {
|
|
5
|
+
"discover": {
|
|
6
|
+
"module": "graphify.detect",
|
|
7
|
+
"function": "detect",
|
|
8
|
+
"family": "discovery",
|
|
9
|
+
"source": "Graphify-Labs/graphify/detect.py",
|
|
10
|
+
"sourceSha256": "0c539db73e11b93b14c9ae2a61d6094a3aae13a9dbd49158e3d5164a28b426a6",
|
|
11
|
+
"sourceLine": 1833,
|
|
12
|
+
"sourceEndLine": 2144,
|
|
13
|
+
"qualification": "source-inspected; installed native execution pending"
|
|
14
|
+
},
|
|
15
|
+
"discover-incremental": {
|
|
16
|
+
"module": "graphify.detect",
|
|
17
|
+
"function": "detect_incremental",
|
|
18
|
+
"family": "incremental",
|
|
19
|
+
"source": "Graphify-Labs/graphify/detect.py",
|
|
20
|
+
"sourceSha256": "0c539db73e11b93b14c9ae2a61d6094a3aae13a9dbd49158e3d5164a28b426a6",
|
|
21
|
+
"sourceLine": 2646,
|
|
22
|
+
"sourceEndLine": 2793,
|
|
23
|
+
"qualification": "source-inspected; installed native execution pending"
|
|
24
|
+
},
|
|
25
|
+
"extract-structure": {
|
|
26
|
+
"module": "graphify.extract",
|
|
27
|
+
"function": "extract",
|
|
28
|
+
"family": "extraction",
|
|
29
|
+
"source": "Graphify-Labs/graphify/extract.py",
|
|
30
|
+
"sourceSha256": "2facca59e22f735f68abc188bab0fa519427f4dc4deb2a235ed0e7c50ebe9c84",
|
|
31
|
+
"sourceLine": 7169,
|
|
32
|
+
"sourceEndLine": 8717,
|
|
33
|
+
"qualification": "source-inspected; installed native execution pending"
|
|
34
|
+
},
|
|
35
|
+
"extract-semantic": {
|
|
36
|
+
"module": "graphify.llm",
|
|
37
|
+
"function": "extract_corpus_parallel",
|
|
38
|
+
"family": "semantic/media extraction",
|
|
39
|
+
"source": "Graphify-Labs/graphify/llm.py",
|
|
40
|
+
"sourceSha256": "51e31802e36fbb1e6b849661cc79e1cb238c4f8caffaf805592ad0dee21f8a90",
|
|
41
|
+
"sourceLine": 2550,
|
|
42
|
+
"sourceEndLine": 2850,
|
|
43
|
+
"qualification": "source-inspected; installed native execution pending"
|
|
44
|
+
},
|
|
45
|
+
"build-native": {
|
|
46
|
+
"module": "graphify.build",
|
|
47
|
+
"function": "build",
|
|
48
|
+
"family": "construction",
|
|
49
|
+
"source": "Graphify-Labs/graphify/build.py",
|
|
50
|
+
"sourceSha256": "8f4b17391c60331de1875a47d697191d5ebe50011f36d204341f53e60c210eda",
|
|
51
|
+
"sourceLine": 1532,
|
|
52
|
+
"sourceEndLine": 1596,
|
|
53
|
+
"qualification": "source-inspected; installed native execution pending"
|
|
54
|
+
},
|
|
55
|
+
"build-accepted": {
|
|
56
|
+
"module": "graphify.build",
|
|
57
|
+
"function": "build",
|
|
58
|
+
"family": "accepted projection",
|
|
59
|
+
"source": "Graphify-Labs/graphify/build.py",
|
|
60
|
+
"sourceSha256": "8f4b17391c60331de1875a47d697191d5ebe50011f36d204341f53e60c210eda",
|
|
61
|
+
"sourceLine": 1532,
|
|
62
|
+
"sourceEndLine": 1596,
|
|
63
|
+
"qualification": "source-inspected; installed native execution pending"
|
|
64
|
+
},
|
|
65
|
+
"build-incremental": {
|
|
66
|
+
"module": "graphify.build",
|
|
67
|
+
"function": "build_merge",
|
|
68
|
+
"family": "incremental",
|
|
69
|
+
"source": "Graphify-Labs/graphify/build.py",
|
|
70
|
+
"sourceSha256": "8f4b17391c60331de1875a47d697191d5ebe50011f36d204341f53e60c210eda",
|
|
71
|
+
"sourceLine": 1921,
|
|
72
|
+
"sourceEndLine": 2358,
|
|
73
|
+
"qualification": "source-inspected; installed native execution pending"
|
|
74
|
+
},
|
|
75
|
+
"merge-raw": {
|
|
76
|
+
"module": "graphify.build",
|
|
77
|
+
"function": "merge_raw_extraction",
|
|
78
|
+
"family": "incremental",
|
|
79
|
+
"source": "Graphify-Labs/graphify/build.py",
|
|
80
|
+
"sourceSha256": "8f4b17391c60331de1875a47d697191d5ebe50011f36d204341f53e60c210eda",
|
|
81
|
+
"sourceLine": 1777,
|
|
82
|
+
"sourceEndLine": 1918,
|
|
83
|
+
"qualification": "source-inspected; installed native execution pending"
|
|
84
|
+
},
|
|
85
|
+
"dedup-proposals": {
|
|
86
|
+
"module": "graphify.dedup",
|
|
87
|
+
"function": "deduplicate_entities",
|
|
88
|
+
"family": "identity suggestions",
|
|
89
|
+
"source": "Graphify-Labs/graphify/dedup.py",
|
|
90
|
+
"sourceSha256": "7e65caa8ebc393db375e49c89764e6b089a77e88c10b18ff5f37fd440c7d1dfc",
|
|
91
|
+
"sourceLine": 557,
|
|
92
|
+
"sourceEndLine": 1039,
|
|
93
|
+
"qualification": "source-inspected; installed native execution pending"
|
|
94
|
+
},
|
|
95
|
+
"cluster": {
|
|
96
|
+
"module": "graphify.cluster",
|
|
97
|
+
"function": "cluster",
|
|
98
|
+
"family": "communities",
|
|
99
|
+
"source": "Graphify-Labs/graphify/cluster.py",
|
|
100
|
+
"sourceSha256": "bfbfeac12c0a59cb7824d081e32a77e7cdcadd5530e9e6d1bf82264b08a1a78f",
|
|
101
|
+
"sourceLine": 232,
|
|
102
|
+
"sourceEndLine": 334,
|
|
103
|
+
"qualification": "source-inspected; installed native execution pending"
|
|
104
|
+
},
|
|
105
|
+
"label-communities": {
|
|
106
|
+
"module": "graphify.cluster",
|
|
107
|
+
"function": "label_communities_by_hub",
|
|
108
|
+
"family": "communities",
|
|
109
|
+
"source": "Graphify-Labs/graphify/cluster.py",
|
|
110
|
+
"sourceSha256": "bfbfeac12c0a59cb7824d081e32a77e7cdcadd5530e9e6d1bf82264b08a1a78f",
|
|
111
|
+
"sourceLine": 184,
|
|
112
|
+
"sourceEndLine": 208,
|
|
113
|
+
"qualification": "source-inspected; installed native execution pending"
|
|
114
|
+
},
|
|
115
|
+
"cohesion": {
|
|
116
|
+
"module": "graphify.cluster",
|
|
117
|
+
"function": "score_all",
|
|
118
|
+
"family": "communities",
|
|
119
|
+
"source": "Graphify-Labs/graphify/cluster.py",
|
|
120
|
+
"sourceSha256": "bfbfeac12c0a59cb7824d081e32a77e7cdcadd5530e9e6d1bf82264b08a1a78f",
|
|
121
|
+
"sourceLine": 373,
|
|
122
|
+
"sourceEndLine": 374,
|
|
123
|
+
"qualification": "source-inspected; installed native execution pending"
|
|
124
|
+
},
|
|
125
|
+
"important-nodes": {
|
|
126
|
+
"module": "graphify.analyze",
|
|
127
|
+
"function": "god_nodes",
|
|
128
|
+
"family": "analysis",
|
|
129
|
+
"source": "Graphify-Labs/graphify/analyze.py",
|
|
130
|
+
"sourceSha256": "e6011dcbb35144134d8ebef12d17ea869e73749e79722caa9527ed30500edd4a",
|
|
131
|
+
"sourceLine": 112,
|
|
132
|
+
"sourceEndLine": 148,
|
|
133
|
+
"qualification": "source-inspected; installed native execution pending"
|
|
134
|
+
},
|
|
135
|
+
"surprising-connections": {
|
|
136
|
+
"module": "graphify.analyze",
|
|
137
|
+
"function": "surprising_connections",
|
|
138
|
+
"family": "analysis",
|
|
139
|
+
"source": "Graphify-Labs/graphify/analyze.py",
|
|
140
|
+
"sourceSha256": "e6011dcbb35144134d8ebef12d17ea869e73749e79722caa9527ed30500edd4a",
|
|
141
|
+
"sourceLine": 151,
|
|
142
|
+
"sourceEndLine": 180,
|
|
143
|
+
"qualification": "source-inspected; installed native execution pending"
|
|
144
|
+
},
|
|
145
|
+
"suggest-questions": {
|
|
146
|
+
"module": "graphify.analyze",
|
|
147
|
+
"function": "suggest_questions",
|
|
148
|
+
"family": "analysis",
|
|
149
|
+
"source": "Graphify-Labs/graphify/analyze.py",
|
|
150
|
+
"sourceSha256": "e6011dcbb35144134d8ebef12d17ea869e73749e79722caa9527ed30500edd4a",
|
|
151
|
+
"sourceLine": 446,
|
|
152
|
+
"sourceEndLine": 571,
|
|
153
|
+
"qualification": "source-inspected; installed native execution pending"
|
|
154
|
+
},
|
|
155
|
+
"graph-diff": {
|
|
156
|
+
"module": "graphify.analyze",
|
|
157
|
+
"function": "graph_diff",
|
|
158
|
+
"family": "change analysis",
|
|
159
|
+
"source": "Graphify-Labs/graphify/analyze.py",
|
|
160
|
+
"sourceSha256": "e6011dcbb35144134d8ebef12d17ea869e73749e79722caa9527ed30500edd4a",
|
|
161
|
+
"sourceLine": 574,
|
|
162
|
+
"sourceEndLine": 655,
|
|
163
|
+
"qualification": "source-inspected; installed native execution pending"
|
|
164
|
+
},
|
|
165
|
+
"import-cycles": {
|
|
166
|
+
"module": "graphify.analyze",
|
|
167
|
+
"function": "find_import_cycles",
|
|
168
|
+
"family": "code diagnostics",
|
|
169
|
+
"source": "Graphify-Labs/graphify/analyze.py",
|
|
170
|
+
"sourceSha256": "e6011dcbb35144134d8ebef12d17ea869e73749e79722caa9527ed30500edd4a",
|
|
171
|
+
"sourceLine": 658,
|
|
172
|
+
"sourceEndLine": 772,
|
|
173
|
+
"qualification": "source-inspected; installed native execution pending"
|
|
174
|
+
},
|
|
175
|
+
"impact": {
|
|
176
|
+
"module": "graphify.affected",
|
|
177
|
+
"function": "affected_nodes",
|
|
178
|
+
"family": "code diagnostics",
|
|
179
|
+
"source": "Graphify-Labs/graphify/affected.py",
|
|
180
|
+
"sourceSha256": "c679c7e7f8881973e449fd885dd0ccc096dcc074f4c93f43962b1ce957ef77a7",
|
|
181
|
+
"sourceLine": 190,
|
|
182
|
+
"sourceEndLine": 255,
|
|
183
|
+
"qualification": "source-inspected; installed native execution pending"
|
|
184
|
+
},
|
|
185
|
+
"query": {
|
|
186
|
+
"module": "graphify.serve",
|
|
187
|
+
"function": "_query_graph_text",
|
|
188
|
+
"family": "query",
|
|
189
|
+
"source": "Graphify-Labs/graphify/serve.py",
|
|
190
|
+
"sourceSha256": "a6df71d1c6efd3281d2938f8c234d987ba61a92270db585490688d194b7f6bec",
|
|
191
|
+
"sourceLine": 1361,
|
|
192
|
+
"sourceEndLine": 1420,
|
|
193
|
+
"qualification": "source-inspected; installed native execution pending"
|
|
194
|
+
},
|
|
195
|
+
"path": {
|
|
196
|
+
"module": "graphify.serve",
|
|
197
|
+
"function": "_shortest_path_text",
|
|
198
|
+
"family": "query",
|
|
199
|
+
"source": "Graphify-Labs/graphify/serve.py",
|
|
200
|
+
"sourceSha256": "a6df71d1c6efd3281d2938f8c234d987ba61a92270db585490688d194b7f6bec",
|
|
201
|
+
"sourceLine": 1664,
|
|
202
|
+
"sourceEndLine": 1762,
|
|
203
|
+
"qualification": "source-inspected; installed native execution pending"
|
|
204
|
+
},
|
|
205
|
+
"node": {
|
|
206
|
+
"module": "graphify.serve",
|
|
207
|
+
"function": "_resolve_single_node",
|
|
208
|
+
"family": "query",
|
|
209
|
+
"source": "Graphify-Labs/graphify/serve.py",
|
|
210
|
+
"sourceSha256": "a6df71d1c6efd3281d2938f8c234d987ba61a92270db585490688d194b7f6bec",
|
|
211
|
+
"sourceLine": 1638,
|
|
212
|
+
"sourceEndLine": 1661,
|
|
213
|
+
"qualification": "source-inspected; installed native execution pending"
|
|
214
|
+
},
|
|
215
|
+
"neighbors": {
|
|
216
|
+
"module": "graphify.serve",
|
|
217
|
+
"function": "_resolve_single_node",
|
|
218
|
+
"family": "query",
|
|
219
|
+
"source": "Graphify-Labs/graphify/serve.py",
|
|
220
|
+
"sourceSha256": "a6df71d1c6efd3281d2938f8c234d987ba61a92270db585490688d194b7f6bec",
|
|
221
|
+
"sourceLine": 1638,
|
|
222
|
+
"sourceEndLine": 1661,
|
|
223
|
+
"qualification": "source-inspected; installed native execution pending"
|
|
224
|
+
},
|
|
225
|
+
"cache-check": {
|
|
226
|
+
"module": "graphify.cache",
|
|
227
|
+
"function": "check_semantic_cache",
|
|
228
|
+
"family": "maintenance",
|
|
229
|
+
"source": "Graphify-Labs/graphify/cache.py",
|
|
230
|
+
"sourceSha256": "b630ce0c29cf5c00e2a43a7196492b7531ed905ac48c86f5f42c13e2ce841dbc",
|
|
231
|
+
"sourceLine": 1233,
|
|
232
|
+
"sourceEndLine": 1315,
|
|
233
|
+
"qualification": "source-inspected; installed native execution pending"
|
|
234
|
+
},
|
|
235
|
+
"export-json": {
|
|
236
|
+
"module": "graphify.export",
|
|
237
|
+
"function": "to_json",
|
|
238
|
+
"family": "export",
|
|
239
|
+
"source": "Graphify-Labs/graphify/export.py",
|
|
240
|
+
"sourceSha256": "312f4658900e33360e6d23a005ee4ed227a30ae7737bfeba13318f7f16af5576",
|
|
241
|
+
"sourceLine": 272,
|
|
242
|
+
"sourceEndLine": 417,
|
|
243
|
+
"qualification": "source-inspected; installed native execution pending"
|
|
244
|
+
},
|
|
245
|
+
"export-cypher": {
|
|
246
|
+
"module": "graphify.export",
|
|
247
|
+
"function": "to_cypher",
|
|
248
|
+
"family": "export",
|
|
249
|
+
"source": "Graphify-Labs/graphify/export.py",
|
|
250
|
+
"sourceSha256": "312f4658900e33360e6d23a005ee4ed227a30ae7737bfeba13318f7f16af5576",
|
|
251
|
+
"sourceLine": 480,
|
|
252
|
+
"sourceEndLine": 504,
|
|
253
|
+
"qualification": "source-inspected; installed native execution pending"
|
|
254
|
+
},
|
|
255
|
+
"export-obsidian": {
|
|
256
|
+
"module": "graphify.export",
|
|
257
|
+
"function": "to_obsidian",
|
|
258
|
+
"family": "export",
|
|
259
|
+
"source": "Graphify-Labs/graphify/export.py",
|
|
260
|
+
"sourceSha256": "312f4658900e33360e6d23a005ee4ed227a30ae7737bfeba13318f7f16af5576",
|
|
261
|
+
"sourceLine": 687,
|
|
262
|
+
"sourceEndLine": 1037,
|
|
263
|
+
"qualification": "source-inspected; installed native execution pending"
|
|
264
|
+
},
|
|
265
|
+
"export-canvas": {
|
|
266
|
+
"module": "graphify.export",
|
|
267
|
+
"function": "to_canvas",
|
|
268
|
+
"family": "export",
|
|
269
|
+
"source": "Graphify-Labs/graphify/export.py",
|
|
270
|
+
"sourceSha256": "312f4658900e33360e6d23a005ee4ed227a30ae7737bfeba13318f7f16af5576",
|
|
271
|
+
"sourceLine": 1040,
|
|
272
|
+
"sourceEndLine": 1215,
|
|
273
|
+
"qualification": "source-inspected; installed native execution pending"
|
|
274
|
+
},
|
|
275
|
+
"export-graphml": {
|
|
276
|
+
"module": "graphify.export",
|
|
277
|
+
"function": "to_graphml",
|
|
278
|
+
"family": "export",
|
|
279
|
+
"source": "Graphify-Labs/graphify/export.py",
|
|
280
|
+
"sourceSha256": "312f4658900e33360e6d23a005ee4ed227a30ae7737bfeba13318f7f16af5576",
|
|
281
|
+
"sourceLine": 1218,
|
|
282
|
+
"sourceEndLine": 1292,
|
|
283
|
+
"qualification": "source-inspected; installed native execution pending"
|
|
284
|
+
},
|
|
285
|
+
"export-svg": {
|
|
286
|
+
"module": "graphify.export",
|
|
287
|
+
"function": "to_svg",
|
|
288
|
+
"family": "export",
|
|
289
|
+
"source": "Graphify-Labs/graphify/export.py",
|
|
290
|
+
"sourceSha256": "312f4658900e33360e6d23a005ee4ed227a30ae7737bfeba13318f7f16af5576",
|
|
291
|
+
"sourceLine": 1295,
|
|
292
|
+
"sourceEndLine": 1362,
|
|
293
|
+
"qualification": "source-inspected; installed native execution pending"
|
|
294
|
+
},
|
|
295
|
+
"reflect": {
|
|
296
|
+
"module": "graphify.reflect",
|
|
297
|
+
"function": "reflect",
|
|
298
|
+
"family": "work memory",
|
|
299
|
+
"source": "Graphify-Labs/graphify/reflect.py",
|
|
300
|
+
"sourceSha256": "53d877f8009344cfc721d400444bbf2c7f7fcdcd3c4f97580a369c4f79b06db0",
|
|
301
|
+
"sourceLine": 564,
|
|
302
|
+
"sourceEndLine": 610,
|
|
303
|
+
"qualification": "source-inspected; installed native execution pending"
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export const ruleIdentity = Object.freeze({
|
|
2
2
|
"profile": "source-qualified-required-direction/r1",
|
|
3
|
-
"commit": "
|
|
4
|
-
"tree": "
|
|
3
|
+
"commit": "0a77cdc0f4f949d9aef29e3567303e2a6588a610",
|
|
4
|
+
"tree": "4aaadc77690868921c1748e15079e0965e06faae",
|
|
5
5
|
"files": [
|
|
6
6
|
{
|
|
7
7
|
"path": "src/knowledge/plan.mjs",
|
|
@@ -17,15 +17,15 @@ export const ruleIdentity = Object.freeze({
|
|
|
17
17
|
},
|
|
18
18
|
{
|
|
19
19
|
"path": "src/graph/graph.mjs",
|
|
20
|
-
"bytes":
|
|
21
|
-
"sha256": "
|
|
22
|
-
"blob": "
|
|
20
|
+
"bytes": 10397,
|
|
21
|
+
"sha256": "0200feb42d59aa8e0f2e9b0e7dd49bbd68f25bc09710aa1ecce92bc82596adb5",
|
|
22
|
+
"blob": "96f6f05f8df1b3cf9c75d050359d11e9bad39aa2"
|
|
23
23
|
},
|
|
24
24
|
{
|
|
25
25
|
"path": "src/graph/knowledge-graph.mjs",
|
|
26
|
-
"bytes":
|
|
27
|
-
"sha256": "
|
|
28
|
-
"blob": "
|
|
26
|
+
"bytes": 66377,
|
|
27
|
+
"sha256": "fce2815bbc851451fca187082238a286f4796742b917229ec1b55af85d9e8eb0",
|
|
28
|
+
"blob": "95cf2bf277c5a6599c0c95f046adea786cfc3f53"
|
|
29
29
|
},
|
|
30
30
|
{
|
|
31
31
|
"path": "templates/knowledge-workspace/knowledge-plan.schema.json",
|
|
@@ -39,6 +39,11 @@ export const ruleIdentity = Object.freeze({
|
|
|
39
39
|
"supersededQualification": {
|
|
40
40
|
"commit": "b1bdc9279a99f7c884ddfdfe0e2a24315d6f3666",
|
|
41
41
|
"tree": "2797f44baf89007d3808675d897e55a943fc0d65",
|
|
42
|
-
"note": "The supplier qualified against this earlier commit. The
|
|
42
|
+
"note": "The supplier qualified against this earlier commit. The pinned plan, context and schema files are byte-identical there and at the source authority above; src/graph/graph.mjs and src/graph/knowledge-graph.mjs are not, and that qualification does not cover their current bytes."
|
|
43
|
+
},
|
|
44
|
+
"previousSourceAuthority": {
|
|
45
|
+
"commit": "fcfdbe5ded672d41c717f49e0cfdf68b6060834d",
|
|
46
|
+
"tree": "400e181cd0cb55976f3ef7ab1a1405531dacd521",
|
|
47
|
+
"note": "Regenerated by the source owner for a changed candidate: the canonical graph build became a set of steps that a caller may run with waits between them (the census of Markdown sources), and buildKnowledgeGraph and buildCanonicalGraph run them through. Their results and errors are meant to be unchanged; the Knowledge Health tests pass on the current bytes."
|
|
43
48
|
}
|
|
44
49
|
})
|
|
@@ -26,7 +26,7 @@ const resolvedInputs = new WeakSet()
|
|
|
26
26
|
const plans = new WeakSet()
|
|
27
27
|
const freeze = (v) => { if (v && typeof v === 'object') { Object.values(v).forEach(freeze); Object.freeze(v) } return v }
|
|
28
28
|
|
|
29
|
-
export { selectPersonalGeneration, selectionConfirmDigest, readPersonalSelection, inventoryPersonalHome, planPersonalRestore, restorePersonalInputs } from './selection.mjs'
|
|
29
|
+
export { selectPersonalGeneration, selectionConfirmDigest, readPersonalSelection, readPersonalSelectionHead, inventoryPersonalHome, planPersonalRestore, restorePersonalInputs } from './selection.mjs'
|
|
30
30
|
export class PersonalWorkspaceRefusal extends Error {
|
|
31
31
|
constructor(code) { super(`Personal workspace refused: ${code}`); this.name = 'PersonalWorkspaceRefusal'; this.code = code }
|
|
32
32
|
}
|
|
@@ -45,8 +45,10 @@ function privateHome(personalHome) {
|
|
|
45
45
|
if (stat.uid !== process.getuid() || (stat.mode & 0o022) !== 0) refuse('not-private-location')
|
|
46
46
|
return personalHome
|
|
47
47
|
}
|
|
48
|
+
// Opened without waiting on it: a FIFO or a device in a record's place refuses instead of blocking the caller, which
|
|
49
|
+
// may be a service's event loop.
|
|
48
50
|
function readBytes(file, limit, tooLarge = 'malformed-input') {
|
|
49
|
-
const fd = fs.openSync(file, fs.constants.O_RDONLY | fs.constants.O_NOFOLLOW)
|
|
51
|
+
const fd = fs.openSync(file, fs.constants.O_RDONLY | fs.constants.O_NOFOLLOW | (fs.constants.O_NONBLOCK ?? 0))
|
|
50
52
|
try {
|
|
51
53
|
const stat = fs.fstatSync(fd)
|
|
52
54
|
if (!stat.isFile()) refuse('malformed-input')
|
|
@@ -182,6 +184,20 @@ export function readPersonalSelection(options) {
|
|
|
182
184
|
}, 'personal-home-unavailable')
|
|
183
185
|
}
|
|
184
186
|
|
|
187
|
+
// The current selection from the history alone. Nothing is composed, so nothing
|
|
188
|
+
// here says whether the selected generation is still eligible: a host that
|
|
189
|
+
// composes elsewhere reads this first, and reads it again to compare the head it
|
|
190
|
+
// acted on with the head now. `sequence` is 0 while nothing is selected.
|
|
191
|
+
export function readPersonalSelectionHead(options) {
|
|
192
|
+
return safe(() => {
|
|
193
|
+
const { personalHome } = options ?? {}
|
|
194
|
+
privateHome(personalHome)
|
|
195
|
+
const { records, head } = readHistory(personalHome)
|
|
196
|
+
const current = records.at(-1) ?? null
|
|
197
|
+
return freeze({ selected: current?.generationId ?? null, sequence: current?.sequence ?? 0, head })
|
|
198
|
+
}, 'personal-home-unavailable')
|
|
199
|
+
}
|
|
200
|
+
|
|
185
201
|
// Lists entries without failing the whole inventory: a concurrently removed entry
|
|
186
202
|
// is skipped; an unreadable, foreign or oversized one is reported without a digest.
|
|
187
203
|
function listFiles(dir, keep) {
|