@kitelev/exocortex-cli 16.170.3 → 16.170.4

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 CHANGED
@@ -54,6 +54,7 @@ The following v15 verbs were **removed**: `batch`, `batch-repair`, `command`, `d
54
54
  | [`resolve`](#resolve) | Resolve a UUID (full or partial) to a file path |
55
55
  | [`workflow`](#workflow) | List / show / validate workflow definitions |
56
56
  | [`recover`](#recover) | Detect and recover orphaned claude-child tmux sessions |
57
+ | [`scaffold`](#scaffold) | Scaffold homoiconic configuration assets (validation-check settings) |
57
58
  | [`audit`](#audit) | Regression-pattern audits (`co-location`, `ontology-imports`) |
58
59
  | [`apply-profile`](#apply-profile) | Apply an `exo__Profile` (mount-state filesystem mutation) |
59
60
  | [`bootstrap`](#bootstrap) | Bootstrap a vault with the SDK floor AssetSpace |
@@ -62,6 +63,7 @@ The following v15 verbs were **removed**: `batch`, `batch-repair`, `command`, `d
62
63
  | [`exosync`](#exosync) | Sync / pull / push the materialized AssetSpace set over the GitHub REST API |
63
64
  | [`exosync-parity`](#exosync-parity) | Read-only ExoSync divergence report (M1/M2 parity check) |
64
65
  | [`resolve-deps`](#resolve-deps) | Resolve an AssetSpace's transitive `dependsOn` closure from the registry (CI gate) |
66
+ | [`requirements`](#requirements) | Requirements↔test traceability checker (RFC 0003) |
65
67
 
66
68
  ---
67
69
 
@@ -385,6 +387,22 @@ npx @kitelev/exocortex-cli recover --apply --vault ~/vault-2025
385
387
  | `--dry-run` | — | List orphans without applying changes (default behavior) |
386
388
  | `--apply` | off | Apply recovery: set Failed + kill the tmux session |
387
389
 
390
+ ### scaffold
391
+
392
+ Scaffold homoiconic configuration assets. Currently exposes one subcommand, `validation-settings`, which materializes the four validation-check `setting__Setting` instances (`uid-uniqueness=true`, the rest `false`) co-located in the chosen ontology's folder, so `validate vault` has an enabled-set to read (RFC f402002b).
393
+
394
+ ```bash
395
+ npx @kitelev/exocortex-cli scaffold validation-settings \
396
+ --vault ~/vault-2025 \
397
+ --ontology <ontology-uid>
398
+ ```
399
+
400
+ | Option | Default | Description |
401
+ | ------------------ | ------------ | --------------------------------------------------------------------- |
402
+ | `--vault <path>` | **required** | Vault root directory |
403
+ | `--ontology <uid>` | **required** | UID of the ontology whose folder the check settings are co-located in |
404
+ | `--output <type>` | `text` | Response format: `text` \| `json` |
405
+
388
406
  ---
389
407
 
390
408
  ## Vault Management Commands
@@ -548,6 +566,24 @@ npx @kitelev/exocortex-cli resolve-deps \
548
566
  | `--format <type>` | `urls` | Output format: `urls` (one clone URL per line) or `json` (full diagnostics) |
549
567
  | `--strict` | off | Exit non-zero (`2`) when `self` is not registered, instead of validating standalone |
550
568
 
569
+ ### requirements
570
+
571
+ Requirements-management tooling (RFC 0003). The `requirements audit` subcommand checks requirement↔test traceability — orphan requirements, dangling `@req:<uid>` tags, duplicate bindings, the binding-class floor, coverage, and P0 ramp-readiness. Used by the `requirements-trace` CI job.
572
+
573
+ ```bash
574
+ npx @kitelev/exocortex-cli requirements audit \
575
+ --reqs ./exoas-exo-reqs \
576
+ --tests .
577
+ ```
578
+
579
+ | Option | Default | Description |
580
+ | ----------------- | ------------ | -------------------------------------------------------------------------------------- |
581
+ | `--reqs <path>` | **required** | Directory tree containing `req__Requirement` assets (a vault or a reqs assetspace) |
582
+ | `--tests <path>` | `.` | Test-corpus root scanned for `@req:<uid>` tags |
583
+ | `--output <type>` | `text` | Response format: `text` \| `json` |
584
+ | `--strict` | off | Also exit `1` on orphan requirements |
585
+ | `--gate <mode>` | `soft` | Gate mode: `soft` (warn only) \| `hard` (also block when the P0 checklist isn't ready) |
586
+
551
587
  ---
552
588
 
553
589
  ## Exit Codes
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- // @kitelev/exocortex-cli v16.170.3
2
+ // @kitelev/exocortex-cli v16.170.4
3
3
  // CLI tool for Exocortex knowledge management system - SPARQL queries, task management, and more
4
4
  // License: MIT
5
5
 
@@ -637,7 +637,7 @@ Duplicate bindings (${n.duplicates.length}) \u2014 uid claimed by >1 test (warni
637
637
  Skipped floor check for ${n.unknownPriority} requirement(s) with unparseable priority (fail-open).`),n.clean?e==="hard"&&!n.rampReady?console.error(`
638
638
  FAIL (hard gate): ramp not ready \u2014 ${n.p0Orphans} P0 requirement(s) unbound`+(n.p0Total===0?" (no P0 requirements found)":"")+"."):console.log(`
639
639
  OK: no hard findings (dangling tags + binding-class floor are clean).`):console.error(`
640
- FAIL: ${n.dangling.length} dangling + ${n.floorViolations.length} floor violation(s) + ${n.activeViolations.length} active-requirement invariant violation(s) + ${n.danglingEvidence.length} dangling evidence link(s).`)}a(noe,"renderText");function ioe(n,e,t){return!n.clean||t&&n.orphans.length>0||e==="hard"&&!n.rampReady}a(ioe,"isHardFail");function w9(){return new ke("audit").description("Audit requirement\u2194test traceability: orphans, dangling @req tags, duplicate bindings, binding-class floor, coverage, P0 ramp-readiness").requiredOption("--reqs <path>","Directory tree containing req__Requirement assets (a vault or a reqs assetspace clone)").option("--tests <path>","Test-corpus root scanned for @req:<uid> tags",".").option("--output <type>","Response format: text|json","text").option("--strict","Also exit 1 on orphan requirements",!1).option("--gate <mode>","Gate mode: soft (warn only on hard findings) | hard (also block when the P0 checklist is not ramp-ready)","soft").action(async n=>{let e=n.output??"text";Se.setFormat(e);let t=n.gate==="hard"?"hard":"soft";try{let r=(0,Ba.resolve)(n.reqs);if(!(0,Va.existsSync)(r)||!(0,Va.statSync)(r).isDirectory())throw new Ze(r);let i=(0,Ba.resolve)(n.tests??".");if(!(0,Va.existsSync)(i)||!(0,Va.statSync)(i).isDirectory())throw new Ze(i);let[s,o]=await Promise.all([Jse(r),eoe(i)]),c=toe(s,o);e==="json"?console.log(JSON.stringify({...c,gate:t},null,2)):noe(c,t),ioe(c,t,n.strict===!0)&&(process.exitCode=1)}catch(r){Se.handle(r)}})}a(w9,"requirementsAuditCommand");function v9(){let n=new ke("requirements").description("Requirements-management tooling (RFC 0003): traceability checker");return n.addCommand(w9()),n}a(v9,"requirementsCommand");function I_(n){let e=new ke;return e.name("exocortex").description("CLI tool for Exocortex knowledge management system").version(n??"16.170.3"),e.addCommand(gj()),e.addCommand(Ij()),e.addCommand(h4()),e.addCommand(y4()),e.addCommand($4()),e.addCommand(_4()),e.addCommand(V4()),e.addCommand(X4()),e.addCommand(Z4()),e.addCommand(hj()),e.addCommand(Vj()),e.addCommand(Wj()),e.addCommand(a9()),e.addCommand(l9()),e.addCommand(d9()),e.addCommand(h9()),e.addCommand(y9()),e.addCommand(Jj()),e.addCommand(i9()),e.addCommand(v9()),e}a(I_,"createProgram");I_().parse();0&&(module.exports={createProgram});
640
+ FAIL: ${n.dangling.length} dangling + ${n.floorViolations.length} floor violation(s) + ${n.activeViolations.length} active-requirement invariant violation(s) + ${n.danglingEvidence.length} dangling evidence link(s).`)}a(noe,"renderText");function ioe(n,e,t){return!n.clean||t&&n.orphans.length>0||e==="hard"&&!n.rampReady}a(ioe,"isHardFail");function w9(){return new ke("audit").description("Audit requirement\u2194test traceability: orphans, dangling @req tags, duplicate bindings, binding-class floor, coverage, P0 ramp-readiness").requiredOption("--reqs <path>","Directory tree containing req__Requirement assets (a vault or a reqs assetspace clone)").option("--tests <path>","Test-corpus root scanned for @req:<uid> tags",".").option("--output <type>","Response format: text|json","text").option("--strict","Also exit 1 on orphan requirements",!1).option("--gate <mode>","Gate mode: soft (warn only on hard findings) | hard (also block when the P0 checklist is not ramp-ready)","soft").action(async n=>{let e=n.output??"text";Se.setFormat(e);let t=n.gate==="hard"?"hard":"soft";try{let r=(0,Ba.resolve)(n.reqs);if(!(0,Va.existsSync)(r)||!(0,Va.statSync)(r).isDirectory())throw new Ze(r);let i=(0,Ba.resolve)(n.tests??".");if(!(0,Va.existsSync)(i)||!(0,Va.statSync)(i).isDirectory())throw new Ze(i);let[s,o]=await Promise.all([Jse(r),eoe(i)]),c=toe(s,o);e==="json"?console.log(JSON.stringify({...c,gate:t},null,2)):noe(c,t),ioe(c,t,n.strict===!0)&&(process.exitCode=1)}catch(r){Se.handle(r)}})}a(w9,"requirementsAuditCommand");function v9(){let n=new ke("requirements").description("Requirements-management tooling (RFC 0003): traceability checker");return n.addCommand(w9()),n}a(v9,"requirementsCommand");function I_(n){let e=new ke;return e.name("exocortex").description("CLI tool for Exocortex knowledge management system - SPARQL queries, task management, and more").version(n??"16.170.4"),e.addCommand(gj()),e.addCommand(Ij()),e.addCommand(h4()),e.addCommand(y4()),e.addCommand($4()),e.addCommand(_4()),e.addCommand(V4()),e.addCommand(X4()),e.addCommand(Z4()),e.addCommand(hj()),e.addCommand(Vj()),e.addCommand(Wj()),e.addCommand(a9()),e.addCommand(l9()),e.addCommand(d9()),e.addCommand(h9()),e.addCommand(y9()),e.addCommand(Jj()),e.addCommand(i9()),e.addCommand(v9()),e}a(I_,"createProgram");I_().parse();0&&(module.exports={createProgram});
641
641
  /*! Bundled license information:
642
642
 
643
643
  reflect-metadata/Reflect.js:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kitelev/exocortex-cli",
3
- "version": "16.170.3",
3
+ "version": "16.170.4",
4
4
  "description": "CLI tool for Exocortex knowledge management system - SPARQL queries, task management, and more",
5
5
  "main": "dist/index.js",
6
6
  "bin": {