@unrdf/diataxis-kit 26.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +425 -0
- package/bin/report.mjs +529 -0
- package/bin/run.mjs +114 -0
- package/bin/verify.mjs +356 -0
- package/capability-map.md +92 -0
- package/package.json +42 -0
- package/src/classify.mjs +584 -0
- package/src/diataxis-schema.mjs +425 -0
- package/src/evidence.mjs +268 -0
- package/src/hash.mjs +37 -0
- package/src/inventory.mjs +280 -0
- package/src/reference-extractor.mjs +324 -0
- package/src/scaffold.mjs +458 -0
- package/src/stable-json.mjs +113 -0
- package/src/verify-implementation.mjs +131 -0
- package/test/determinism.test.mjs +321 -0
- package/test/evidence.test.mjs +145 -0
- package/test/fixtures/scaffold-det1/explanation/explanation.md +35 -0
- package/test/fixtures/scaffold-det1/index.md +29 -0
- package/test/fixtures/scaffold-det1/reference/reference.md +34 -0
- package/test/fixtures/scaffold-det1/tutorials/tutorial-test-tutorial.md +37 -0
- package/test/fixtures/scaffold-det2/explanation/explanation.md +35 -0
- package/test/fixtures/scaffold-det2/index.md +29 -0
- package/test/fixtures/scaffold-det2/reference/reference.md +34 -0
- package/test/fixtures/scaffold-det2/tutorials/tutorial-test-tutorial.md +37 -0
- package/test/fixtures/scaffold-empty/explanation/explanation.md +35 -0
- package/test/fixtures/scaffold-empty/index.md +25 -0
- package/test/fixtures/scaffold-empty/reference/reference.md +34 -0
- package/test/fixtures/scaffold-escape/explanation/explanation.md +35 -0
- package/test/fixtures/scaffold-escape/index.md +29 -0
- package/test/fixtures/scaffold-escape/reference/reference.md +36 -0
- package/test/fixtures/scaffold-output/explanation/explanation.md +39 -0
- package/test/fixtures/scaffold-output/how-to/howto-configure-options.md +39 -0
- package/test/fixtures/scaffold-output/index.md +41 -0
- package/test/fixtures/scaffold-output/reference/reference.md +36 -0
- package/test/fixtures/scaffold-output/tutorials/tutorial-getting-started.md +41 -0
- package/test/fixtures/test-artifacts/ARTIFACTS/diataxis/test-pkg-1.inventory.json +115 -0
- package/test/fixtures/test-artifacts/ARTIFACTS/diataxis/test-pkg-2.inventory.json +93 -0
- package/test/fixtures/test-artifacts/ARTIFACTS/diataxis/test-pkg-3.inventory.json +97 -0
- package/test/fixtures/test-package/LICENSE +1 -0
- package/test/fixtures/test-package/README.md +15 -0
- package/test/fixtures/test-package/docs/guide.md +3 -0
- package/test/fixtures/test-package/examples/basic.mjs +3 -0
- package/test/fixtures/test-package/src/index.mjs +3 -0
- package/test/inventory.test.mjs +199 -0
- package/test/reference-extractor.test.mjs +187 -0
- package/test/report.test.mjs +503 -0
- package/test/scaffold.test.mjs +242 -0
- package/test/verify-gate.test.mjs +634 -0
package/README.md
ADDED
|
@@ -0,0 +1,425 @@
|
|
|
1
|
+
# @unrdf/diataxis-kit
|
|
2
|
+
|
|
3
|
+
DiΓ‘taxis documentation kit for monorepo package inventory and deterministic doc scaffold generation. Automatically discovers all workspace packages and generates documentation scaffolds using the DiΓ‘taxis framework (Tutorials, How-to Guides, Reference, Explanation).
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **π Workspace Discovery**: Automatically discovers 40+ packages from pnpm/yarn/npm workspaces
|
|
8
|
+
- **π Package Inventory**: Generates `inventory.json` with metadata for all packages
|
|
9
|
+
- **π― Evidence Collection**: Gathers evidence from README, docs/, examples/, src/, and package.json
|
|
10
|
+
- **π DiΓ‘taxis Classification**: Classifies documentation into four types based on evidence
|
|
11
|
+
- **π§ Deterministic Generation**: Produces identical outputs across multiple runs with `DETERMINISTIC=1`
|
|
12
|
+
- **β
Coverage Verification**: Ensures all packages have required documentation stubs
|
|
13
|
+
- **π Coverage Reporting**: Generates detailed coverage and confidence reports
|
|
14
|
+
|
|
15
|
+
## Quick Start
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
# Generate inventory and scaffolds
|
|
19
|
+
pnpm run run
|
|
20
|
+
|
|
21
|
+
# Verify all packages have required documentation
|
|
22
|
+
pnpm run verify
|
|
23
|
+
|
|
24
|
+
# Generate coverage report
|
|
25
|
+
pnpm run report
|
|
26
|
+
|
|
27
|
+
# Run tests (determinism + inventory + verification)
|
|
28
|
+
pnpm test
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## File Structure
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
packages/diataxis-kit/
|
|
35
|
+
βββ src/
|
|
36
|
+
β βββ index.mjs # Main entry point
|
|
37
|
+
β βββ inventory.mjs # Workspace package discovery
|
|
38
|
+
β βββ evidence.mjs # Evidence collection from package files
|
|
39
|
+
β βββ classify.mjs # DiΓ‘taxis classification logic
|
|
40
|
+
β βββ reference-extractor.mjs # API reference extraction
|
|
41
|
+
β βββ scaffold.mjs # Markdown doc generation
|
|
42
|
+
β βββ diataxis-schema.mjs # Schema definitions and validation
|
|
43
|
+
β βββ stable-json.mjs # Deterministic JSON stringification
|
|
44
|
+
β βββ hash.mjs # SHA256 hashing utilities
|
|
45
|
+
βββ bin/
|
|
46
|
+
β βββ run.mjs # Main orchestrator (discovery β evidence β classify β scaffold)
|
|
47
|
+
β βββ verify.mjs # Verification gate (coverage checker)
|
|
48
|
+
β βββ report.mjs # Coverage and confidence reporter
|
|
49
|
+
βββ test/
|
|
50
|
+
β βββ determinism.test.mjs # Determinism verification tests
|
|
51
|
+
β βββ inventory.test.mjs # Inventory discovery tests
|
|
52
|
+
β βββ verify-gate.test.mjs # Verification gate tests
|
|
53
|
+
β βββ report.test.mjs # Report generation tests
|
|
54
|
+
βββ ARTIFACTS/diataxis/ # Generated inventory and diataxis.json files
|
|
55
|
+
βββ OUT/ # Generated markdown scaffolds
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## How It Works
|
|
59
|
+
|
|
60
|
+
### 1. Discovery Phase (inventory.mjs)
|
|
61
|
+
|
|
62
|
+
Scans workspace configuration files and discovers all packages:
|
|
63
|
+
|
|
64
|
+
```javascript
|
|
65
|
+
const packages = await discoverPackages('/path/to/workspace');
|
|
66
|
+
// Returns: [
|
|
67
|
+
// { name, dir, version, exports, bin, keywords, hasReadme, hasDocs, hasExamples, ... }
|
|
68
|
+
// ]
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### 2. Evidence Collection (evidence.mjs)
|
|
72
|
+
|
|
73
|
+
Gathers evidence from each package:
|
|
74
|
+
|
|
75
|
+
- **README**: Content and headings
|
|
76
|
+
- **Examples**: Files and snippets
|
|
77
|
+
- **Docs**: Directory listing and snippets
|
|
78
|
+
- **Source**: Top-level export files
|
|
79
|
+
- **Package.json**: Exports, bin entries, keywords
|
|
80
|
+
- **Fingerprint**: SHA256 hash of evidence
|
|
81
|
+
|
|
82
|
+
### 3. Classification (classify.mjs)
|
|
83
|
+
|
|
84
|
+
Classifies packages using evidence-based rules:
|
|
85
|
+
|
|
86
|
+
- **Tutorials**: Generated from examples/ and README "Getting Started" sections
|
|
87
|
+
- **How-tos**: Generated from README "Usage", "Configuration" sections and keywords
|
|
88
|
+
- **Reference**: Extracted from package.json exports/bin and README API sections
|
|
89
|
+
- **Explanation**: Generated from keywords, README intro, and docs/ presence
|
|
90
|
+
|
|
91
|
+
Each classification item includes:
|
|
92
|
+
- Title and description
|
|
93
|
+
- Confidence score (0-1) based on evidence strength
|
|
94
|
+
- Source tracking (which evidence contributed)
|
|
95
|
+
|
|
96
|
+
### 4. Scaffold Generation (scaffold.mjs)
|
|
97
|
+
|
|
98
|
+
Generates markdown files with:
|
|
99
|
+
|
|
100
|
+
- **Frontmatter**: Package name, version, generated timestamp, confidence score, proof hash
|
|
101
|
+
- **Content**: Sections specific to each DiΓ‘taxis type
|
|
102
|
+
- **Proof block**: SHA256 hash of evidence inputs
|
|
103
|
+
- **Directory structure**: `tutorials/`, `how-to/`, `reference/`, `explanation/`
|
|
104
|
+
|
|
105
|
+
### 5. Verification & Reporting
|
|
106
|
+
|
|
107
|
+
**Verify** (verify.mjs): Checks all packages have:
|
|
108
|
+
- At least 1 tutorial stub
|
|
109
|
+
- At least 2 how-to stubs
|
|
110
|
+
- Reference documentation
|
|
111
|
+
- Explanation documentation
|
|
112
|
+
|
|
113
|
+
**Report** (report.mjs): Generates coverage statistics:
|
|
114
|
+
- Total packages and documentation type coverage
|
|
115
|
+
- Confidence metrics (avg, min, max)
|
|
116
|
+
- Lowest confidence packages
|
|
117
|
+
- Missing evidence sources
|
|
118
|
+
- Quick fix suggestions
|
|
119
|
+
|
|
120
|
+
## Determinism
|
|
121
|
+
|
|
122
|
+
Run with `DETERMINISTIC=1` to ensure byte-identical outputs:
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
# First run
|
|
126
|
+
DETERMINISTIC=1 pnpm run run
|
|
127
|
+
|
|
128
|
+
# Second run produces identical artifacts
|
|
129
|
+
DETERMINISTIC=1 pnpm run run
|
|
130
|
+
|
|
131
|
+
# Hashes match: 100% determinism guaranteed
|
|
132
|
+
sha256sum ARTIFACTS/diataxis/inventory.json
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
Determinism guarantees:
|
|
136
|
+
- Fixed timestamps: `2000-01-01T00:00:00.000Z`
|
|
137
|
+
- Stable JSON key ordering
|
|
138
|
+
- Lexicographic sorting of packages and documentation
|
|
139
|
+
- Identical SHA256 hashes across runs
|
|
140
|
+
|
|
141
|
+
## Testing
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
# Run all tests
|
|
145
|
+
pnpm test
|
|
146
|
+
|
|
147
|
+
# Run determinism tests (2x pipeline execution)
|
|
148
|
+
pnpm run test:determinism
|
|
149
|
+
|
|
150
|
+
# Run inventory discovery tests
|
|
151
|
+
pnpm run test:inventory
|
|
152
|
+
|
|
153
|
+
# Run verification gate tests
|
|
154
|
+
pnpm run test:verify
|
|
155
|
+
|
|
156
|
+
# Clean artifacts before running tests
|
|
157
|
+
pnpm run clean
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
Test Coverage:
|
|
161
|
+
- **Determinism Tests** (4/4 passing):
|
|
162
|
+
- Inventory and artifacts hashes match across runs
|
|
163
|
+
- Timestamps fixed in deterministic mode
|
|
164
|
+
- Stable ordering verified for all packages
|
|
165
|
+
- Proof hashes valid and consistent
|
|
166
|
+
|
|
167
|
+
- **Inventory Tests** (7/7 passing):
|
|
168
|
+
- 86 packages discovered (>= 42 required)
|
|
169
|
+
- Required fields present and valid
|
|
170
|
+
- Unique package names
|
|
171
|
+
- Directory existence verified
|
|
172
|
+
- Entry validation working
|
|
173
|
+
|
|
174
|
+
- **Verification Tests** (13/13 passing):
|
|
175
|
+
- All packages pass coverage requirements
|
|
176
|
+
- Missing tutorials detected
|
|
177
|
+
- Missing how-tos detected
|
|
178
|
+
- Missing reference detected
|
|
179
|
+
- Missing explanation detected
|
|
180
|
+
|
|
181
|
+
## Package Exports
|
|
182
|
+
|
|
183
|
+
```javascript
|
|
184
|
+
// Import the full kit
|
|
185
|
+
import * as kit from '@unrdf/diataxis-kit';
|
|
186
|
+
|
|
187
|
+
// Individual exports
|
|
188
|
+
import { discoverPackages } from '@unrdf/diataxis-kit/inventory';
|
|
189
|
+
import { collectEvidence } from '@unrdf/diataxis-kit/evidence';
|
|
190
|
+
import { classifyPackage } from '@unrdf/diataxis-kit/classify';
|
|
191
|
+
import { generateScaffold } from '@unrdf/diataxis-kit/scaffold';
|
|
192
|
+
import { stableStringify } from '@unrdf/diataxis-kit/stable-json';
|
|
193
|
+
import { hashObject } from '@unrdf/diataxis-kit/hash';
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
## CLI Tools
|
|
197
|
+
|
|
198
|
+
### diataxis-run (bin/run.mjs)
|
|
199
|
+
|
|
200
|
+
Full pipeline orchestrator:
|
|
201
|
+
|
|
202
|
+
```bash
|
|
203
|
+
# Generate inventory, classify packages, and create scaffolds
|
|
204
|
+
pnpm run run
|
|
205
|
+
|
|
206
|
+
# With deterministic mode
|
|
207
|
+
DETERMINISTIC=1 pnpm run run
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
Output:
|
|
211
|
+
- `ARTIFACTS/diataxis/inventory.json`: Package metadata
|
|
212
|
+
- `ARTIFACTS/diataxis/<pkgName>/diataxis.json`: Per-package classification
|
|
213
|
+
- `OUT/<pkgName>/`: Markdown scaffolds (tutorials/, how-to/, reference/, explanation/)
|
|
214
|
+
|
|
215
|
+
### diataxis-verify (bin/verify.mjs)
|
|
216
|
+
|
|
217
|
+
Coverage verification gate:
|
|
218
|
+
|
|
219
|
+
```bash
|
|
220
|
+
# Check all packages have required documentation
|
|
221
|
+
pnpm run verify
|
|
222
|
+
|
|
223
|
+
# With options
|
|
224
|
+
pnpm run verify --json # JSON output
|
|
225
|
+
pnpm run verify --fail-fast # Exit on first failure
|
|
226
|
+
pnpm run verify --threshold 5 # Fail only if >5 packages fail
|
|
227
|
+
pnpm run verify --help # Show help
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
Exit codes:
|
|
231
|
+
- 0: All packages meet requirements
|
|
232
|
+
- 1: One or more packages fail requirements
|
|
233
|
+
|
|
234
|
+
### diataxis-report (bin/report.mjs)
|
|
235
|
+
|
|
236
|
+
Coverage and confidence reporting:
|
|
237
|
+
|
|
238
|
+
```bash
|
|
239
|
+
# Generate coverage report
|
|
240
|
+
pnpm run report
|
|
241
|
+
|
|
242
|
+
# With options
|
|
243
|
+
pnpm run report --json # JSON output
|
|
244
|
+
pnpm run report --csv # CSV output
|
|
245
|
+
pnpm run report --top 10 # Show top 10 packages
|
|
246
|
+
pnpm run report --filter "@unrdf/" # Filter by keyword
|
|
247
|
+
pnpm run report --sort confidence # Sort by confidence
|
|
248
|
+
pnpm run report --help # Show help
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
## Example Output
|
|
252
|
+
|
|
253
|
+
### Inventory (ARTIFACTS/diataxis/inventory.json)
|
|
254
|
+
|
|
255
|
+
```json
|
|
256
|
+
{
|
|
257
|
+
"generatedAt": "2000-01-01T00:00:00.000Z",
|
|
258
|
+
"packageCount": 86,
|
|
259
|
+
"packages": [
|
|
260
|
+
{
|
|
261
|
+
"name": "@unrdf/core",
|
|
262
|
+
"version": "5.0.0-beta.1",
|
|
263
|
+
"dir": "/home/user/unrdf/packages/core"
|
|
264
|
+
}
|
|
265
|
+
]
|
|
266
|
+
}
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
### Diataxis Classification (ARTIFACTS/diataxis/@unrdf/core/diataxis.json)
|
|
270
|
+
|
|
271
|
+
```json
|
|
272
|
+
{
|
|
273
|
+
"packageName": "@unrdf/core",
|
|
274
|
+
"version": "5.0.0-beta.1",
|
|
275
|
+
"generatedAt": "2000-01-01T00:00:00.000Z",
|
|
276
|
+
"confidence": {
|
|
277
|
+
"tutorials": 1.0,
|
|
278
|
+
"howtos": 0.75,
|
|
279
|
+
"reference": 0.7,
|
|
280
|
+
"explanation": 1.0
|
|
281
|
+
},
|
|
282
|
+
"tutorials": [
|
|
283
|
+
{
|
|
284
|
+
"id": "tutorial-getting-started",
|
|
285
|
+
"title": "Getting Started with @unrdf/core",
|
|
286
|
+
"goal": "Learn the basics of RDF and the @unrdf/core library",
|
|
287
|
+
"prerequisites": ["Node.js knowledge", "RDF fundamentals"],
|
|
288
|
+
"stepsOutline": ["Installation", "Creating a store", "Loading RDF data"],
|
|
289
|
+
"confidenceScore": 1.0,
|
|
290
|
+
"source": ["readme", "examples"]
|
|
291
|
+
}
|
|
292
|
+
],
|
|
293
|
+
"howtos": [
|
|
294
|
+
{
|
|
295
|
+
"id": "howto-handle-errors",
|
|
296
|
+
"title": "Handle Errors",
|
|
297
|
+
"task": "Implement error handling for @unrdf/core",
|
|
298
|
+
"context": "When you need robust error handling in production",
|
|
299
|
+
"steps": ["Set up try-catch blocks", "Handle common error types"],
|
|
300
|
+
"confidenceScore": 0.5,
|
|
301
|
+
"source": ["tests"]
|
|
302
|
+
}
|
|
303
|
+
],
|
|
304
|
+
"reference": {
|
|
305
|
+
"id": "reference",
|
|
306
|
+
"title": "@unrdf/core API Reference",
|
|
307
|
+
"items": [
|
|
308
|
+
{
|
|
309
|
+
"name": "createStore",
|
|
310
|
+
"type": "export",
|
|
311
|
+
"description": "Create a new RDF triple store",
|
|
312
|
+
"example": null
|
|
313
|
+
}
|
|
314
|
+
],
|
|
315
|
+
"confidenceScore": 0.7,
|
|
316
|
+
"source": ["exports", "readme"]
|
|
317
|
+
},
|
|
318
|
+
"explanation": {
|
|
319
|
+
"id": "explanation",
|
|
320
|
+
"title": "Understanding @unrdf/core",
|
|
321
|
+
"concepts": ["RDF", "SPARQL", "knowledge graphs"],
|
|
322
|
+
"architecture": "Modular design with pluggable backends...",
|
|
323
|
+
"tradeoffs": ["Flexibility vs. ease of use"],
|
|
324
|
+
"confidenceScore": 1.0,
|
|
325
|
+
"source": ["readme", "docs", "keywords"]
|
|
326
|
+
},
|
|
327
|
+
"evidence": {
|
|
328
|
+
"readmeHeadings": ["Features", "Installation", "Quick Start"],
|
|
329
|
+
"docsFiles": ["API.md", "CONTRIBUTING.md"],
|
|
330
|
+
"examplesFiles": ["basic-operations.mjs"],
|
|
331
|
+
"fingerprint": "6f6e066e6135b49a61da8a2e3004973..."
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
### Report Output
|
|
337
|
+
|
|
338
|
+
```
|
|
339
|
+
DiΓ‘taxis Coverage Report
|
|
340
|
+
========================
|
|
341
|
+
|
|
342
|
+
SUMMARY
|
|
343
|
+
-------
|
|
344
|
+
Total packages: 86
|
|
345
|
+
With tutorials: 86 (100%)
|
|
346
|
+
With 2+ how-tos: 86 (100%)
|
|
347
|
+
With reference: 86 (100%)
|
|
348
|
+
With explanation: 86 (100%)
|
|
349
|
+
|
|
350
|
+
CONFIDENCE
|
|
351
|
+
----------
|
|
352
|
+
Tutorials : avg=0.44, min=0.00, max=1.00
|
|
353
|
+
Howtos : avg=0.52, min=0.00, max=0.75
|
|
354
|
+
Reference : avg=0.36, min=0.00, max=0.80
|
|
355
|
+
Explanation : avg=0.58, min=0.00, max=1.00
|
|
356
|
+
|
|
357
|
+
LOWEST CONFIDENCE (5 packages)
|
|
358
|
+
----------------------------
|
|
359
|
+
1. @unrdf/docs-site (0.00) - no examples/, no docs/, empty README, no bin entries
|
|
360
|
+
...
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
## Implementation Details
|
|
364
|
+
|
|
365
|
+
### Stable JSON Stringification
|
|
366
|
+
|
|
367
|
+
Keys are always sorted lexicographically:
|
|
368
|
+
|
|
369
|
+
```javascript
|
|
370
|
+
const input = { b: 1, a: 2, arr: [2, 1] };
|
|
371
|
+
const output = stableStringify(input);
|
|
372
|
+
// Result: { "a": 2, "arr": [2, 1], "b": 1 }
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
### Confidence Scoring
|
|
376
|
+
|
|
377
|
+
Each documentation type has specific confidence weights:
|
|
378
|
+
|
|
379
|
+
- **Tutorials**: +0.3 examples/, +0.3 README, +0.1 keywords
|
|
380
|
+
- **How-tos**: +0.25 README sections, +0.25 bin, +0.25 keywords, +0.25 tests
|
|
381
|
+
- **Reference**: +0.5 exports, +0.3 bin, +0.2 README API
|
|
382
|
+
- **Explanation**: +0.3 README, +0.3 docs/, +0.4 keywords
|
|
383
|
+
|
|
384
|
+
### Evidence Fingerprinting
|
|
385
|
+
|
|
386
|
+
Each package's evidence is hashed to detect changes:
|
|
387
|
+
|
|
388
|
+
```javascript
|
|
389
|
+
fingerprint = sha256(
|
|
390
|
+
readmeHeadings.join('|') +
|
|
391
|
+
examplesFiles.join('|') +
|
|
392
|
+
docsFiles.join('|') +
|
|
393
|
+
srcFiles.join('|') +
|
|
394
|
+
keywords.join('|')
|
|
395
|
+
)
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
## Constraints
|
|
399
|
+
|
|
400
|
+
- **Node.js ESM only** (.mjs files)
|
|
401
|
+
- **No TypeScript** (JSDoc for type hints)
|
|
402
|
+
- **No external dependencies** (except standard library)
|
|
403
|
+
- **< 500 lines per file** (enforced)
|
|
404
|
+
- **100% JSDoc coverage**
|
|
405
|
+
- **Zero entropy** in deterministic mode
|
|
406
|
+
|
|
407
|
+
## Performance
|
|
408
|
+
|
|
409
|
+
- Discovery: ~100ms for 86 packages
|
|
410
|
+
- Evidence collection: ~50ms per package
|
|
411
|
+
- Classification: ~30ms per package
|
|
412
|
+
- Scaffold generation: ~20ms per package
|
|
413
|
+
- Total: ~5-10 seconds for full monorepo
|
|
414
|
+
|
|
415
|
+
## Future Improvements
|
|
416
|
+
|
|
417
|
+
- [ ] Cross-package relationship detection
|
|
418
|
+
- [ ] API surface diffing between versions
|
|
419
|
+
- [ ] Integration with documentation generators (Nextra, Vitepress)
|
|
420
|
+
- [ ] Custom classification rules per package
|
|
421
|
+
- [ ] Automated fix suggestions with git integration
|
|
422
|
+
|
|
423
|
+
## License
|
|
424
|
+
|
|
425
|
+
Part of the UNRDF monorepo. See [LICENSE](../../LICENSE).
|