@fulmenhq/tsfulmen 0.3.3 → 0.4.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 (123) hide show
  1. package/CHANGELOG.md +76 -1
  2. package/README.md +30 -1
  3. package/config/crucible-ts/taxonomy/metrics.yaml +1 -1
  4. package/dist/appidentity/index.js +9 -2209
  5. package/dist/appidentity/index.js.map +1 -1
  6. package/dist/assets/index.d.ts +184 -0
  7. package/dist/assets/index.js +4 -0
  8. package/dist/assets/index.js.map +1 -0
  9. package/dist/bin/prometheus-cli.js +15 -9139
  10. package/dist/bin/prometheus-cli.js.map +1 -1
  11. package/dist/bin/schema-cli.js +4 -6098
  12. package/dist/bin/schema-cli.js.map +1 -1
  13. package/dist/bin/signals-cli.js +15 -1910
  14. package/dist/bin/signals-cli.js.map +1 -1
  15. package/dist/chunk-24BAF63H.js +194 -0
  16. package/dist/chunk-24BAF63H.js.map +1 -0
  17. package/dist/chunk-3HISR2XI.js +36 -0
  18. package/dist/chunk-3HISR2XI.js.map +1 -0
  19. package/dist/chunk-56F2EEAG.js +328 -0
  20. package/dist/chunk-56F2EEAG.js.map +1 -0
  21. package/dist/chunk-5HZEJGZ5.js +725 -0
  22. package/dist/chunk-5HZEJGZ5.js.map +1 -0
  23. package/dist/chunk-7YWACZEJ.js +837 -0
  24. package/dist/chunk-7YWACZEJ.js.map +1 -0
  25. package/dist/chunk-BCO3FUUO.js +682 -0
  26. package/dist/chunk-BCO3FUUO.js.map +1 -0
  27. package/dist/chunk-GOTEQYAD.js +410 -0
  28. package/dist/chunk-GOTEQYAD.js.map +1 -0
  29. package/dist/chunk-HY6JQOFN.js +32 -0
  30. package/dist/chunk-HY6JQOFN.js.map +1 -0
  31. package/dist/chunk-LMNAUTW7.js +43 -0
  32. package/dist/chunk-LMNAUTW7.js.map +1 -0
  33. package/dist/chunk-LWAH2UG7.js +103 -0
  34. package/dist/chunk-LWAH2UG7.js.map +1 -0
  35. package/dist/chunk-OHE2AOH4.js +273 -0
  36. package/dist/chunk-OHE2AOH4.js.map +1 -0
  37. package/dist/chunk-P3DNOZOG.js +1488 -0
  38. package/dist/chunk-P3DNOZOG.js.map +1 -0
  39. package/dist/chunk-PQ6TKPUN.js +27 -0
  40. package/dist/chunk-PQ6TKPUN.js.map +1 -0
  41. package/dist/chunk-QCCN6POA.js +211 -0
  42. package/dist/chunk-QCCN6POA.js.map +1 -0
  43. package/dist/chunk-QGTNV4U2.js +985 -0
  44. package/dist/chunk-QGTNV4U2.js.map +1 -0
  45. package/dist/chunk-RSLFR4TO.js +631 -0
  46. package/dist/chunk-RSLFR4TO.js.map +1 -0
  47. package/dist/chunk-SNV5WG5V.js +9412 -0
  48. package/dist/chunk-SNV5WG5V.js.map +1 -0
  49. package/dist/chunk-UP2VWCW5.js +33 -0
  50. package/dist/chunk-UP2VWCW5.js.map +1 -0
  51. package/dist/chunk-VJIGX7MH.js +208 -0
  52. package/dist/chunk-VJIGX7MH.js.map +1 -0
  53. package/dist/chunk-WCCMRVZF.js +130 -0
  54. package/dist/chunk-WCCMRVZF.js.map +1 -0
  55. package/dist/chunk-WSMVLWLB.js +269 -0
  56. package/dist/chunk-WSMVLWLB.js.map +1 -0
  57. package/dist/config/index.js +6 -1220
  58. package/dist/config/index.js.map +1 -1
  59. package/dist/crucible/fulpack/index.js +2 -25
  60. package/dist/crucible/fulpack/index.js.map +1 -1
  61. package/dist/crucible/index.js +13 -1129
  62. package/dist/crucible/index.js.map +1 -1
  63. package/dist/docscribe/index.js +2 -680
  64. package/dist/docscribe/index.js.map +1 -1
  65. package/dist/errors/index.js +5 -1831
  66. package/dist/errors/index.js.map +1 -1
  67. package/dist/errors-D7KXV3QW.js +4 -0
  68. package/dist/errors-D7KXV3QW.js.map +1 -0
  69. package/dist/errors-R7ZODJXS.js +8 -0
  70. package/dist/errors-R7ZODJXS.js.map +1 -0
  71. package/dist/export-EA3RNQNS.js +6 -0
  72. package/dist/export-EA3RNQNS.js.map +1 -0
  73. package/dist/foundry/index.js +340 -3949
  74. package/dist/foundry/index.js.map +1 -1
  75. package/dist/foundry/similarity/index.js +3 -134
  76. package/dist/foundry/similarity/index.js.map +1 -1
  77. package/dist/fulencode/index.js +3 -319
  78. package/dist/fulencode/index.js.map +1 -1
  79. package/dist/fulhash/index.js +3 -611
  80. package/dist/fulhash/index.js.map +1 -1
  81. package/dist/fulpack/index.js +3 -1515
  82. package/dist/fulpack/index.js.map +1 -1
  83. package/dist/hash-YOJYVOWH.js +4 -0
  84. package/dist/hash-YOJYVOWH.js.map +1 -0
  85. package/dist/index.d.ts +1 -1
  86. package/dist/index.js +14 -4395
  87. package/dist/index.js.map +1 -1
  88. package/dist/loader-VP2ZIC4O.js +9 -0
  89. package/dist/loader-VP2ZIC4O.js.map +1 -0
  90. package/dist/logging/index.js +2 -723
  91. package/dist/logging/index.js.map +1 -1
  92. package/dist/pathfinder/index.js +18 -2341
  93. package/dist/pathfinder/index.js.map +1 -1
  94. package/dist/prom-client-PNEBGD3G.js +4801 -0
  95. package/dist/prom-client-PNEBGD3G.js.map +1 -0
  96. package/dist/reports/license-inventory.csv +1 -1
  97. package/dist/schema/index.d.ts +19 -6
  98. package/dist/schema/index.js +4 -6148
  99. package/dist/schema/index.js.map +1 -1
  100. package/dist/signals/index.js +8 -2767
  101. package/dist/signals/index.js.map +1 -1
  102. package/dist/similarity/index.js +3 -134
  103. package/dist/similarity/index.js.map +1 -1
  104. package/dist/telemetry/http/index.js +9 -930
  105. package/dist/telemetry/http/index.js.map +1 -1
  106. package/dist/telemetry/index.js +4 -1561
  107. package/dist/telemetry/index.js.map +1 -1
  108. package/dist/telemetry/prometheus/index.js +7 -8422
  109. package/dist/telemetry/prometheus/index.js.map +1 -1
  110. package/dist/validator-I3ASDVDB.js +6 -0
  111. package/dist/validator-I3ASDVDB.js.map +1 -0
  112. package/package.json +5 -1
  113. package/schemas/crucible-ts/library/module-manifest/v1.0.0/module-manifest.schema.json +1 -1
  114. package/schemas/crucible-ts/observability/logging/v1.0.0/definitions.schema.json +1 -1
  115. package/schemas/crucible-ts/observability/logging/v1.0.0/log-event.schema.json +13 -13
  116. package/schemas/crucible-ts/observability/logging/v1.0.0/logger-config.schema.json +2 -2
  117. package/schemas/crucible-ts/observability/logging/v1.0.0/logging-policy.schema.json +1 -1
  118. package/schemas/crucible-ts/observability/logging/v1.0.0/middleware-config.schema.json +2 -2
  119. package/schemas/crucible-ts/observability/logging/v1.0.0/severity-filter.schema.json +3 -3
  120. package/schemas/crucible-ts/upstream/3leaps/crucible/PROVENANCE.md +3 -3
  121. package/schemas/crucible-ts/upstream/3leaps/crucible/docs/catalog/classifiers/README.md +1 -1
  122. package/schemas/crucible-ts/upstream/3leaps/crucible/docs/standards/classifiers-framework.md +1 -1
  123. package/schemas/crucible-ts/upstream/3leaps/crucible/docs/standards/data-sensitivity-classification.md +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/telemetry/counter.ts","../src/telemetry/gauge.ts","../src/assets/generated/taxonomy.generated.ts","../src/telemetry/embedded-assets.ts","../src/telemetry/taxonomy.ts","../src/telemetry/histogram.ts","../src/telemetry/registry.ts","../src/telemetry/types.ts","../src/schema/ajv-formats.ts","../src/schema/utils.ts","../src/schema/goneat-bridge.ts","../src/schema/normalizer.ts","../src/assets/generated/metaschema.generated.ts","../src/assets/generated/schemas.generated.ts","../src/schema/embedded-assets.ts","../src/schema/registry.ts","../src/schema/validator.ts","../src/schema/cli.ts","../src/schema/export.ts","../src/schema/index.ts","../src/telemetry/validators.ts","../src/telemetry/index.ts"],"names":["parseYaml","isValidMetricName","parseYAML","manifest","registered","readFile","validateSchema","exportSchema","SchemaExportError","SchemaValidationError","stringifyYAML","extname","access","writeFile","VERSION"],"mappings":"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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,IACxF,oFAAA,EAAsF,swMAAA;AAAA,IACtF,yEAAA,EAA2E,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,IAC3E,kDAAA,EAAoD,01CAAA;AAAA,IACpD,4FAAA,EAA8F,6zBAAA;AAAA,IAC9F,8EAAA,EAAgF,0jEAAA;AAAA,IAChF,gFAAA,EAAkF,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,IAClF,qEAAA,EAAuE,o2KAAA;AAAA,IACvE,oEAAA,EAAsE,6nJAAA;AAAA,IACtE,kEAAA,EAAoE,grIAAA;AAAA,IACpE,qEAAA,EAAuE,koJAAA;AAAA,IACvE,iEAAA,EAAmE,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,IACnE,6DAAA,EAA+D,0qTAAA;AAAA,IAC/D,0DAAA,EAA4D,ugPAAA;AAAA,IAC5D,yDAAA,EAA2D,00LAAA;AAAA,IAC3D,8DAAA,EAAgE,yuPAAA;AAAA,IAChE,mFAAA,EAAqF,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,IACrF,yFAAA,EAA2F,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,IAC3F,+EAAA,EAAiF,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,IACjF,+EAAA,EAAiF,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,IACjF,kFAAA,EAAoF,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,IACpF,+EAAA,EAAiF,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,IACjF,kEAAA,EAAoE,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,IACpE,sEAAA,EAAwE,++EAAA;AAAA,IACxE,sEAAA,EAAwE,61CAAA;AAAA,IACxE,mEAAA,EAAqE,iuSAAA;AAAA,IACrE,2EAAA,EAA6E,s0DAAA;AAAA,IAC7E,mEAAA,EAAqE,i8CAAA;AAAA,IACrE,iEAAA,EAAmE,okFAAA;AAAA,IACnE,mFAAA,EAAqF,+pIAAA;AAAA,IACrF,gEAAA,EAAkE,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,IACxE,4DAAA,EAA8D,0vFAAA;AAAA,IAC9D,0EAAA,EAA4E,2nIAAA;AAAA,IAC5E,wEAAA,EAA0E,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,IAC1E,4EAAA,EAA8E,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,IAChF,8EAAA,EAAgF,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,IAChF,kFAAA,EAAoF,myBAAA;AAAA,IACpF,uFAAA,EAAyF,opCAAA;AAAA,IACzF,uFAAA,EAAyF,+8EAAA;AAAA,IACzF,yFAAA,EAA2F,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,IAC3F,mFAAA,EAAqF,6hLAAA;AAAA,IACrF,4FAAA,EAA8F,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,IAC9F,sGAAA,EAAwG,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,IACxG,mGAAA,EAAqG,otGAAA;AAAA,IACrG,+FAAA,EAAiG,kzDAAA;AAAA,IACjG,iGAAA,EAAmG,qiGAAA;AAAA,IACnG,8FAAA,EAAgG,ksCAAA;AAAA,IAChG,sFAAA,EAAwF,+1LAAA;AAAA,IACxF,mEAAA,EAAqE,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,IACrE,iEAAA,EAAmE,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA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","file":"chunk-SNV5WG5V.js","sourcesContent":["/**\n * Counter metric implementation\n *\n * Monotonically increasing counter for counting events\n */\n\nimport type { MetricName } from \"./types.js\";\n\n/**\n * Counter metric\n *\n * Monotonically increasing value for counting events.\n * Supports labeled metrics (Crucible v0.2.7+).\n * Use for metrics like request counts, error counts, etc.\n */\nexport class Counter {\n private value = 0;\n private labeledValues = new Map<string, number>();\n\n constructor(public readonly name: MetricName) {}\n\n /**\n * Increment counter by delta (default: 1)\n *\n * @param delta - Amount to increment (must be non-negative)\n * @param labels - Optional label dimensions for this observation\n * @throws {Error} If delta is negative\n *\n * @example\n * ```typescript\n * counter.inc(); // Increment unlabeled by 1\n * counter.inc(5); // Increment unlabeled by 5\n * counter.inc(1, { status: '200' }); // Increment labeled instance\n * counter.inc(1, { result: 'success' }); // Different label set\n * ```\n */\n inc(delta = 1, labels?: Record<string, string>): void {\n if (delta < 0) {\n throw new Error(`Counter delta must be non-negative, got: ${delta}`);\n }\n\n if (labels && Object.keys(labels).length > 0) {\n // Labeled metric - track per label combination\n const labelKey = this.serializeLabels(labels);\n const current = this.labeledValues.get(labelKey) || 0;\n this.labeledValues.set(labelKey, current + delta);\n } else {\n // Unlabeled metric\n this.value += delta;\n }\n }\n\n /**\n * Get current counter value (unlabeled)\n */\n getValue(): number {\n return this.value;\n }\n\n /**\n * Get all labeled values\n * @returns Map of serialized label keys to values\n */\n getLabeledValues(): Map<string, number> {\n return new Map(this.labeledValues);\n }\n\n /**\n * Get value for specific label combination\n */\n getValueForLabels(labels: Record<string, string>): number {\n const labelKey = this.serializeLabels(labels);\n return this.labeledValues.get(labelKey) || 0;\n }\n\n /**\n * Reset counter to zero (all label combinations)\n */\n reset(): void {\n this.value = 0;\n this.labeledValues.clear();\n }\n\n /**\n * Serialize labels to deterministic string key\n * Format: key1=value1,key2=value2 (sorted by key)\n */\n private serializeLabels(labels: Record<string, string>): string {\n return Object.entries(labels)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([k, v]) => `${k}=${v}`)\n .join(\",\");\n }\n}\n","/**\n * Gauge metric implementation\n *\n * Gauge for arbitrary values that can go up and down\n */\n\nimport type { MetricName } from \"./types.js\";\n\n/**\n * Gauge metric\n *\n * Arbitrary value that can increase or decrease.\n * Supports labeled metrics (Crucible v0.2.7+).\n * Use for metrics like current connections, memory usage, temperature, etc.\n */\nexport class Gauge {\n private value = 0;\n private labeledValues = new Map<string, number>();\n\n constructor(public readonly name: MetricName) {}\n\n /**\n * Set gauge to specific value\n *\n * @param value - New gauge value (can be any number, including negative)\n * @param labels - Optional label dimensions for this observation\n *\n * @example\n * ```typescript\n * gauge.set(42); // Set unlabeled to 42\n * gauge.set(-10); // Negative values allowed\n * gauge.set(1, { phase: 'collect' }); // Set labeled instance\n * ```\n */\n set(value: number, labels?: Record<string, string>): void {\n if (labels && Object.keys(labels).length > 0) {\n const labelKey = this.serializeLabels(labels);\n this.labeledValues.set(labelKey, value);\n } else {\n this.value = value;\n }\n }\n\n /**\n * Increment gauge by delta (default: 1)\n *\n * @param delta - Amount to increment (can be negative)\n * @param labels - Optional label dimensions for this observation\n */\n inc(delta = 1, labels?: Record<string, string>): void {\n if (labels && Object.keys(labels).length > 0) {\n const labelKey = this.serializeLabels(labels);\n const current = this.labeledValues.get(labelKey) || 0;\n this.labeledValues.set(labelKey, current + delta);\n } else {\n this.value += delta;\n }\n }\n\n /**\n * Decrement gauge by delta (default: 1)\n *\n * @param delta - Amount to decrement (can be negative)\n * @param labels - Optional label dimensions for this observation\n */\n dec(delta = 1, labels?: Record<string, string>): void {\n if (labels && Object.keys(labels).length > 0) {\n const labelKey = this.serializeLabels(labels);\n const current = this.labeledValues.get(labelKey) || 0;\n this.labeledValues.set(labelKey, current - delta);\n } else {\n this.value -= delta;\n }\n }\n\n /**\n * Get current gauge value (unlabeled)\n */\n getValue(): number {\n return this.value;\n }\n\n /**\n * Get all labeled values\n * @returns Map of serialized label keys to values\n */\n getLabeledValues(): Map<string, number> {\n return new Map(this.labeledValues);\n }\n\n /**\n * Get value for specific label combination\n */\n getValueForLabels(labels: Record<string, string>): number {\n const labelKey = this.serializeLabels(labels);\n return this.labeledValues.get(labelKey) || 0;\n }\n\n /**\n * Reset gauge to zero (all label combinations)\n */\n reset(): void {\n this.value = 0;\n this.labeledValues.clear();\n }\n\n /**\n * Serialize labels to deterministic string key\n * Format: key1=value1,key2=value2 (sorted by key)\n */\n private serializeLabels(labels: Record<string, string>): string {\n return Object.entries(labels)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([k, v]) => `${k}=${v}`)\n .join(\",\");\n }\n}\n","// AUTO-GENERATED by scripts/embed-assets.ts. DO NOT EDIT.\n// Run `make embed-assets` to regenerate after `make sync-ssot`.\n// Domain: taxonomy (1 assets)\nimport type { EmbeddedAssetManifest } from \"../types.js\";\n\nexport const manifest: EmbeddedAssetManifest = {\n domain: \"taxonomy\",\n files: {\n \"config/crucible-ts/taxonomy/metrics.yaml\": \"$schema: https://json-schema.org/draft/2020-12/schema\\n$id: https://schemas.fulmenhq.dev/config/taxonomy/metrics-v1.0.0.schema.json\\ntitle: Fulmen Metrics Taxonomy\\ndescription: Canonical registry of metric identifiers and default units used by Fulmen helper libraries.\\ntype: object\\n$defs:\\n metricName:\\n type: string\\n enum:\\n - schema_validations\\n - schema_validation_errors\\n - config_load_ms\\n - config_load_errors\\n - pathfinder_find_ms\\n - pathfinder_validation_errors\\n - pathfinder_security_warnings\\n - foundry_lookup_count\\n - logging_emit_count\\n - logging_emit_latency_ms\\n - goneat_command_duration_ms\\n - prometheus_exporter_refresh_duration_seconds\\n - prometheus_exporter_refresh_total\\n - prometheus_exporter_refresh_errors_total\\n - prometheus_exporter_refresh_inflight\\n - prometheus_exporter_http_requests_total\\n - prometheus_exporter_http_errors_total\\n - prometheus_exporter_restarts_total\\n - foundry_mime_detections_total_json\\n - foundry_mime_detections_total_xml\\n - foundry_mime_detections_total_yaml\\n - foundry_mime_detections_total_csv\\n - foundry_mime_detections_total_plain_text\\n - foundry_mime_detections_total_unknown\\n - foundry_mime_detection_ms_json\\n - foundry_mime_detection_ms_xml\\n - foundry_mime_detection_ms_yaml\\n - foundry_mime_detection_ms_csv\\n - foundry_mime_detection_ms_plain_text\\n - foundry_mime_detection_ms_unknown\\n - error_handling_wraps_total\\n - error_handling_wrap_ms\\n - fulhash_operations_total_xxh3_128\\n - fulhash_operations_total_sha256\\n - fulhash_hash_string_total\\n - fulhash_bytes_hashed_total\\n - fulhash_operation_ms\\n - fulencode_operation_total\\n - fulencode_operation_duration_seconds\\n - fulencode_bytes_processed_total\\n - fulencode_expansion_ratio_percent\\n - fulencode_detect_result_total\\n - fulencode_detect_duration_seconds\\n - fulencode_normalize_total\\n - fulencode_normalize_semantic_changes_total\\n - fulencode_security_violations_total\\n - fulencode_corrections_total\\n - fulencode_bom_operations_total\\n - fulencode_bom_mismatches_total\\n - fulencode_errors_total\\n - http_requests_total\\n - http_request_duration_seconds\\n - http_request_size_bytes\\n - http_response_size_bytes\\n - http_active_requests\\n metricUnit:\\n type: string\\n enum:\\n - count\\n - ms\\n - bytes\\n - percent\\n - s\\nproperties:\\n version:\\n type: string\\n description: Taxonomy version (SemVer, aligned with Crucible releases).\\n pattern: \\\"^\\\\\\\\d+\\\\\\\\.\\\\\\\\d+\\\\\\\\.\\\\\\\\d+$\\\"\\n defaults:\\n type: object\\n description: Default configuration applied across metrics.\\n properties:\\n histogram_buckets:\\n type: object\\n description: Default histogram bucket boundaries grouped by metric suffix or unit.\\n properties:\\n ms_metrics:\\n type: array\\n description: Default millisecond buckets used when metric name ends with `_ms`.\\n items:\\n type: number\\n seconds_metrics:\\n type: array\\n description: Default second buckets used when metric unit is `s` (for HTTP latency and duration metrics).\\n items:\\n type: number\\n bytes_metrics:\\n type: array\\n description: Default byte buckets used when metric name ends with `_bytes` (for HTTP request/response size metrics).\\n items:\\n type: number\\n additionalProperties: false\\n additionalProperties: false\\n metrics:\\n type: array\\n description: Canonical metric entries.\\n items:\\n type: object\\n properties:\\n name:\\n $ref: \\\"#/$defs/metricName\\\"\\n unit:\\n $ref: \\\"#/$defs/metricUnit\\\"\\n description:\\n type: string\\n required:\\n - name\\n - unit\\n additionalProperties: false\\n minItems: 1\\nrequired:\\n - version\\n - metrics\\nadditionalProperties: false\\nversion: \\\"0.4.15\\\"\\ndefaults:\\n histogram_buckets:\\n ms_metrics:\\n - 1\\n - 5\\n - 10\\n - 50\\n - 100\\n - 500\\n - 1000\\n - 5000\\n - 10000\\n seconds_metrics:\\n - 0.005\\n - 0.01\\n - 0.025\\n - 0.05\\n - 0.1\\n - 0.25\\n - 0.5\\n - 1\\n - 2.5\\n - 5\\n - 10\\n bytes_metrics:\\n - 1024\\n - 10240\\n - 102400\\n - 1048576\\n - 10485760\\n - 104857600\\nmetrics:\\n - name: schema_validations\\n unit: count\\n description: Total schema validation attempts.\\n - name: schema_validation_errors\\n unit: count\\n description: Failed schema validation attempts.\\n - name: config_load_ms\\n unit: ms\\n description: Duration of configuration load operations.\\n - name: config_load_errors\\n unit: count\\n description: Failed configuration load attempts.\\n - name: pathfinder_find_ms\\n unit: ms\\n description: Duration of pathfinder file discovery operations.\\n - name: pathfinder_validation_errors\\n unit: count\\n description: Failed pathfinder validation attempts.\\n - name: pathfinder_security_warnings\\n unit: count\\n description: Pathfinder security warnings (e.g., path traversal attempts).\\n - name: foundry_lookup_count\\n unit: count\\n description: Number of catalog lookups performed.\\n - name: logging_emit_count\\n unit: count\\n description: Total structured log events emitted.\\n - name: logging_emit_latency_ms\\n unit: ms\\n description: Time spent emitting structured log events.\\n - name: goneat_command_duration_ms\\n unit: ms\\n description: Duration of goneat command execution (instrumentation helper).\\n - name: prometheus_exporter_refresh_duration_seconds\\n unit: s\\n description: >\\n Time to refresh/export registry data into Prometheus collectors. Uses ADR-0007 buckets converted to seconds: [0.001, 0.005, 0.01, 0.05, 0.1, 0.5, 1.0, 5.0, 10.0]. Required labels: phase (collect|convert|export), result (success|error). Optional labels: error_type.\\n\\n - name: prometheus_exporter_refresh_total\\n unit: count\\n description: >\\n Total refresh cycles attempted. Use with result label for success/error breakdown. Exporters SHOULD emit both this and prometheus_exporter_refresh_errors_total. Required labels: result (success|error). Optional labels: error_type.\\n\\n - name: prometheus_exporter_refresh_errors_total\\n unit: count\\n description: >\\n Failed refresh cycles with detailed error classification. Sum MUST equal prometheus_exporter_refresh_total{result=\\\"error\\\"}. Required labels: error_type (validation|io|timeout|other). Optional labels: phase.\\n\\n - name: prometheus_exporter_refresh_inflight\\n unit: count\\n description: >\\n Number of concurrent refresh operations currently running. Optional labels: phase.\\n\\n - name: prometheus_exporter_http_requests_total\\n unit: count\\n description: >\\n HTTP scrape/exposition requests handled by exporter. Distinct from prom-client defaults; recommend disabling client defaults when using this. Required labels: status (HTTP code), path. Optional labels: client (high cardinality warning).\\n\\n - name: prometheus_exporter_http_errors_total\\n unit: count\\n description: >\\n HTTP exposition failures (5xx, auth failures, timeouts). Required labels: status (HTTP code), path. Optional labels: client (high cardinality warning).\\n\\n - name: prometheus_exporter_restarts_total\\n unit: count\\n description: >\\n Exporter refresh loop or HTTP server restarts. Required labels: reason (config_change|error|manual|other).\\n\\n - name: foundry_mime_detections_total_json\\n unit: count\\n description: >\\n Total JSON MIME type detections performed by the Foundry module. Tracks usage patterns for JSON content processing.\\n\\n - name: foundry_mime_detections_total_xml\\n unit: count\\n description: >\\n Total XML MIME type detections performed by the Foundry module. Tracks usage patterns for XML content processing.\\n\\n - name: foundry_mime_detections_total_yaml\\n unit: count\\n description: >\\n Total YAML MIME type detections performed by the Foundry module. Tracks usage patterns for YAML content processing.\\n\\n - name: foundry_mime_detections_total_csv\\n unit: count\\n description: >\\n Total CSV MIME type detections performed by the Foundry module. Tracks usage patterns for CSV content processing.\\n\\n - name: foundry_mime_detections_total_plain_text\\n unit: count\\n description: >\\n Total plain text MIME type detections performed by the Foundry module. Tracks usage patterns for plain text content processing.\\n\\n - name: foundry_mime_detections_total_unknown\\n unit: count\\n description: >\\n Total unknown/binary MIME type detections performed by the Foundry module. Tracks usage patterns for unknown content types.\\n\\n - name: foundry_mime_detection_ms_json\\n unit: ms\\n description: >\\n JSON MIME type detection latency in milliseconds. Uses ADR-0007 buckets: [1, 5, 10, 50, 100, 500, 1000, 5000, 10000]. Enables performance analysis for JSON detection algorithms.\\n\\n - name: foundry_mime_detection_ms_xml\\n unit: ms\\n description: >\\n XML MIME type detection latency in milliseconds. Uses ADR-0007 buckets: [1, 5, 10, 50, 100, 500, 1000, 5000, 10000]. Enables performance analysis for XML detection algorithms.\\n\\n - name: foundry_mime_detection_ms_yaml\\n unit: ms\\n description: >\\n YAML MIME type detection latency in milliseconds. Uses ADR-0007 buckets: [1, 5, 10, 50, 100, 500, 1000, 5000, 10000]. Enables performance analysis for YAML detection algorithms.\\n\\n - name: foundry_mime_detection_ms_csv\\n unit: ms\\n description: >\\n CSV MIME type detection latency in milliseconds. Uses ADR-0007 buckets: [1, 5, 10, 50, 100, 500, 1000, 5000, 10000]. Enables performance analysis for CSV detection algorithms.\\n\\n - name: foundry_mime_detection_ms_plain_text\\n unit: ms\\n description: >\\n Plain text MIME type detection latency in milliseconds. Uses ADR-0007 buckets: [1, 5, 10, 50, 100, 500, 1000, 5000, 10000]. Enables performance analysis for plain text detection algorithms.\\n\\n - name: foundry_mime_detection_ms_unknown\\n unit: ms\\n description: >\\n Unknown/binary MIME type detection latency in milliseconds. Uses ADR-0007 buckets: [1, 5, 10, 50, 100, 500, 1000, 5000, 10000]. Enables performance analysis for fallback detection logic.\\n\\n - name: error_handling_wraps_total\\n unit: count\\n description: >\\n Total error wrap operations performed by the Error Handling module. Tracks error handling patterns and frequency across the application.\\n\\n - name: error_handling_wrap_ms\\n unit: ms\\n description: >\\n Error wrap operation latency in milliseconds. Uses ADR-0007 buckets: [1, 5, 10, 50, 100, 500, 1000, 5000, 10000]. Enables detection of error handling performance regressions.\\n\\n - name: fulhash_operations_total_xxh3_128\\n unit: count\\n description: >\\n Total XXH3-128 hash operations performed by the FulHash module. Tracks usage of the fast, non-cryptographic hash algorithm for performance-oriented scenarios.\\n\\n - name: fulhash_operations_total_sha256\\n unit: count\\n description: >\\n Total SHA256 hash operations performed by the FulHash module. Tracks usage of the cryptographic hash algorithm for security-oriented scenarios.\\n\\n - name: fulhash_hash_string_total\\n unit: count\\n description: >\\n Total string hash operations performed by the FulHash module (any algorithm). Tracks the common use case of hashing string data.\\n\\n - name: fulhash_bytes_hashed_total\\n unit: bytes\\n description: >\\n Total bytes processed across all hash operations by the FulHash module. Counter value represents cumulative byte count. Enables capacity planning and throughput analysis.\\n\\n - name: fulhash_operation_ms\\n unit: ms\\n description: >\\n Hash operation latency in milliseconds for all algorithms. Uses ADR-0007 buckets: [1, 5, 10, 50, 100, 500, 1000, 5000, 10000]. Enables performance benchmarking across XXH3-128 and SHA256.\\n\\n - name: fulencode_operation_total\\n unit: count\\n description: >\\n Total Fulencode operations executed. Required tags: operation (encode|decode|detect|normalize|bom), result (success|error). Optional tags: format (bounded set from EncodingFormat).\\n\\n - name: fulencode_operation_duration_seconds\\n unit: s\\n description: >\\n Fulencode operation duration in seconds. Histogram metric. Required tags: operation (encode|decode|detect|normalize|bom), result (success|error). Optional tags: format. Uses default seconds buckets.\\n\\n - name: fulencode_bytes_processed_total\\n unit: bytes\\n description: >\\n Total bytes processed by Fulencode. Counter or histogram payloads are permitted depending on implementation. Required tags: operation (encode|decode), direction (in|out), result (success|error). Optional tags: format.\\n\\n - name: fulencode_expansion_ratio_percent\\n unit: percent\\n description: >\\n Expansion ratio (output/input) expressed as a percentage for encode/decode operations. Histogram metric. Required tags: operation (encode|decode), result (success|error). Optional tags: format. Implementations MUST emit value as ratio*100 (e.g., 250 = 2.5x expansion).\\n\\n - name: fulencode_detect_result_total\\n unit: count\\n description: >\\n Total encoding detection outcomes. Required tags: encoding (detected encoding or unknown), confidence (high|medium|low), result (success|error). Optional tags: source (bom|validation|heuristic|multibase).\\n\\n - name: fulencode_detect_duration_seconds\\n unit: s\\n description: >\\n Encoding detection duration in seconds. Histogram metric. Required tags: result (success|error). Optional tags: sample_size_bucket (<1kb|1-10kb|10-100kb|>100kb). Uses default seconds buckets.\\n\\n - name: fulencode_normalize_total\\n unit: count\\n description: >\\n Total normalization operations executed. Required tags: profile (nfc|nfd|nfkc|nfkd|custom profile name), result (success|error).\\n\\n - name: fulencode_normalize_semantic_changes_total\\n unit: count\\n description: >\\n Total semantic changes detected during normalization (typically NFKC/NFKD). Required tags: profile (nfkc|nfkd), change_type (ligatures|superscripts_subscripts|roman_numerals|circled_numbers|enclosed_alphanumerics|fractions|other).\\n\\n - name: fulencode_security_violations_total\\n unit: count\\n description: >\\n Total security violations detected by Fulencode. Required tags: type (invalid_utf8|invalid_utf16|encoding_bomb|excessive_combining|zero_width|bidi_controls|bom_mismatch|other), operation (encode|decode|detect|normalize|bom).\\n\\n - name: fulencode_corrections_total\\n unit: count\\n description: >\\n Total corrections applied in non-strict modes (replace/fallback). Required tags: error_mode (replace|fallback|ignore), error_type (invalid_utf8|invalid_utf16|invalid_encoding|bom_mismatch|other).\\n\\n - name: fulencode_bom_operations_total\\n unit: count\\n description: >\\n Total BOM operations executed. Required tags: operation (detect|remove|add|validate|correct), bom_type (utf-8|utf-16le|utf-16be|utf-32le|utf-32be|none), result (success|error).\\n\\n - name: fulencode_bom_mismatches_total\\n unit: count\\n description: >\\n Total BOM mismatch events detected. Required tags: detected_bom, expected_encoding, action (error|fix|ignore).\\n\\n - name: fulencode_errors_total\\n unit: count\\n description: >\\n Total Fulencode errors by canonical error code. Required tags: operation (encode|decode|detect|normalize|bom), code (canonical FulencodeError code).\\n\\n - name: http_requests_total\\n unit: count\\n description: >\\n Total HTTP server requests received. Counter metric tracking all HTTP requests by method, route, status, and service. Required labels: method (GET/POST/etc), route (templated path like /users/:id to avoid cardinality), status (HTTP status code), service (service identifier). Optional labels: outcome (2xx/4xx/5xx grouping derived from status). IMPORTANT: Use normalized/templated routes (e.g., /users/:id, not /users/123) to prevent cardinality explosion. Helpers SHOULD provide route normalization utilities.\\n\\n - name: http_request_duration_seconds\\n unit: s\\n description: >\\n HTTP server request duration in seconds. Histogram metric measuring request latency from receipt to response. Uses default seconds buckets: [0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1, 2.5, 5, 10]. Required labels: method, route (templated), status, service. Optional labels: outcome. Helpers exposing millisecond APIs MUST document unit conversion (1 second = 1000 ms). Use templated routes to control cardinality.\\n\\n - name: http_request_size_bytes\\n unit: bytes\\n description: >\\n HTTP server request body size in bytes. Histogram metric measuring incoming request payload sizes. Uses default bytes buckets: [1024, 10240, 102400, 1048576, 10485760, 104857600] (1KB to 100MB). Required labels: method, route (templated), service. Enables monitoring payload patterns and capacity planning. Use templated routes to avoid cardinality issues.\\n\\n - name: http_response_size_bytes\\n unit: bytes\\n description: >\\n HTTP server response body size in bytes. Histogram metric measuring outgoing response payload sizes. Uses default bytes buckets: [1024, 10240, 102400, 1048576, 10485760, 104857600] (1KB to 100MB). Required labels: method, route (templated), status, service. Optional labels: outcome. Tracks bandwidth usage and response patterns. Use templated routes to prevent cardinality explosion.\\n\\n - name: http_active_requests\\n unit: count\\n description: >\\n Number of HTTP requests currently being processed. Gauge metric tracking concurrent request load. Required labels: service. Intentionally minimal labels to avoid cardinality. Helps monitor server capacity and saturation. Increment on request start, decrement on completion.\\n\",\n },\n};\n\nexport default manifest;\n","/**\n * Static per-subpath embedded-asset registration for the telemetry subpath (v0.4.0).\n *\n * Registers only the `taxonomy` domain (metrics taxonomy). Unused in filesystem\n * mode; required for metrics-taxonomy loading inside a `bun --compile` binary.\n */\n\nimport { manifest as taxonomyManifest } from \"../assets/generated/taxonomy.generated.js\";\nimport { registerEmbeddedAssets } from \"../assets/index.js\";\n\nlet registered = false;\n\n/** Register the telemetry taxonomy domain (idempotent). */\nexport function ensureTelemetryAssetsRegistered(): void {\n if (registered) {\n return;\n }\n registerEmbeddedAssets(taxonomyManifest);\n registered = true;\n}\n","/**\n * Taxonomy loader for metrics definitions\n *\n * Loads and caches metrics taxonomy from config/crucible-ts/taxonomy/metrics.yaml\n * Provides default histogram buckets per ADR-0007\n */\n\nimport { parse as parseYaml } from \"yaml\";\nimport { getAssetResolver } from \"../assets/index.js\";\nimport { ensureTelemetryAssetsRegistered } from \"./embedded-assets.js\";\nimport type { MetricName, MetricUnit } from \"./types.js\";\n\n/**\n * Metric definition from taxonomy\n */\nexport interface MetricDefinition {\n name: MetricName;\n unit: MetricUnit;\n description: string;\n}\n\n/**\n * Taxonomy structure\n */\nexport interface MetricsTaxonomy {\n version: string;\n defaults: {\n histogram_buckets: {\n ms_metrics: number[];\n };\n };\n metrics: MetricDefinition[];\n}\n\n/**\n * Default histogram buckets for _ms metrics (ADR-0007)\n * [1, 5, 10, 50, 100, 500, 1000, 5000, 10000] milliseconds\n */\nexport const DEFAULT_MS_BUCKETS = [1, 5, 10, 50, 100, 500, 1000, 5000, 10000];\n\n/**\n * Singleton taxonomy loader\n */\nclass TaxonomyLoader {\n private static instance: TaxonomyLoader;\n private taxonomy: MetricsTaxonomy | null = null;\n private loadPromise: Promise<MetricsTaxonomy> | null = null;\n private loadError: Error | null = null;\n\n private constructor() {\n // Private constructor for singleton\n }\n\n /**\n * Get singleton instance\n */\n static getInstance(): TaxonomyLoader {\n if (!TaxonomyLoader.instance) {\n TaxonomyLoader.instance = new TaxonomyLoader();\n }\n return TaxonomyLoader.instance;\n }\n\n /**\n * Load taxonomy from YAML file\n */\n private async load(): Promise<MetricsTaxonomy> {\n if (this.taxonomy !== null) {\n return this.taxonomy;\n }\n\n if (this.loadError !== null) {\n throw this.loadError;\n }\n\n if (this.loadPromise) {\n return this.loadPromise;\n }\n\n this.loadPromise = (async () => {\n try {\n ensureTelemetryAssetsRegistered();\n const resolver = getAssetResolver();\n const content = await resolver.read(\"config/crucible-ts/taxonomy/metrics.yaml\");\n this.taxonomy = parseYaml(content) as MetricsTaxonomy;\n\n return this.taxonomy;\n } catch (err) {\n this.loadError = err instanceof Error ? err : new Error(String(err));\n throw new Error(`Failed to load metrics taxonomy: ${this.loadError.message}`);\n }\n })();\n\n return this.loadPromise;\n }\n\n /**\n * Get taxonomy (async)\n */\n async getTaxonomy(): Promise<MetricsTaxonomy> {\n return this.load();\n }\n\n /**\n * Get metric definition by name\n */\n async getMetric(name: MetricName): Promise<MetricDefinition | undefined> {\n const taxonomy = await this.load();\n return taxonomy.metrics.find((m) => m.name === name);\n }\n\n /**\n * Get default unit for metric\n */\n async getDefaultUnit(name: MetricName): Promise<MetricUnit | undefined> {\n const metric = await this.getMetric(name);\n return metric?.unit;\n }\n\n /**\n * Get default histogram buckets for metric\n * Returns ADR-0007 buckets for _ms metrics, undefined for others\n */\n async getDefaultBuckets(name: MetricName): Promise<number[] | undefined> {\n // Check if metric name ends with _ms\n if (name.endsWith(\"_ms\")) {\n const taxonomy = await this.load();\n return taxonomy.defaults.histogram_buckets.ms_metrics;\n }\n return undefined;\n }\n\n /**\n * Check if metric name is valid (exists in taxonomy)\n */\n async isValidMetricName(name: string): Promise<boolean> {\n try {\n const taxonomy = await this.load();\n return taxonomy.metrics.some((m) => m.name === name);\n } catch {\n return false;\n }\n }\n\n /**\n * Reset loader state (for testing)\n * @internal\n */\n static _reset(): void {\n TaxonomyLoader.instance = new TaxonomyLoader();\n }\n}\n\n/**\n * Get metrics taxonomy\n *\n * @returns Promise resolving to taxonomy\n */\nexport async function getTaxonomy(): Promise<MetricsTaxonomy> {\n return TaxonomyLoader.getInstance().getTaxonomy();\n}\n\n/**\n * Get metric definition by name\n *\n * @param name - Metric name\n * @returns Promise resolving to metric definition or undefined\n */\nexport async function getMetric(name: MetricName): Promise<MetricDefinition | undefined> {\n return TaxonomyLoader.getInstance().getMetric(name);\n}\n\n/**\n * Get default unit for metric from taxonomy\n *\n * @param name - Metric name\n * @returns Promise resolving to unit or undefined\n */\nexport async function getDefaultUnit(name: MetricName): Promise<MetricUnit | undefined> {\n return TaxonomyLoader.getInstance().getDefaultUnit(name);\n}\n\n/**\n * Get default histogram buckets for metric\n *\n * Returns ADR-0007 buckets ([1, 5, 10, 50, 100, 500, 1000, 5000, 10000]) for\n * metrics ending with _ms, undefined for others.\n *\n * @param name - Metric name\n * @returns Promise resolving to bucket array or undefined\n *\n * @example\n * ```typescript\n * const buckets = await getDefaultBuckets('config_load_ms');\n * // Returns [1, 5, 10, 50, 100, 500, 1000, 5000, 10000]\n * ```\n */\nexport async function getDefaultBuckets(name: MetricName): Promise<number[] | undefined> {\n return TaxonomyLoader.getInstance().getDefaultBuckets(name);\n}\n\n/**\n * Check if metric name is valid (exists in taxonomy)\n *\n * @param name - Metric name to check\n * @returns Promise resolving to true if valid\n */\nexport async function isValidMetricName(name: string): Promise<boolean> {\n return TaxonomyLoader.getInstance().isValidMetricName(name);\n}\n\n// Export for testing\nexport { TaxonomyLoader };\n","/**\n * Histogram metric implementation\n *\n * Histogram with OTLP-compatible cumulative buckets, auto-applying ADR-0007\n * default buckets for _ms metrics.\n */\n\nimport { DEFAULT_MS_BUCKETS } from \"./taxonomy.js\";\nimport type { HistogramBucket, HistogramOptions, HistogramSummary, MetricName } from \"./types.js\";\n\n/**\n * Labeled histogram state\n */\ninterface LabeledHistogramState {\n count: number;\n sum: number;\n bucketCounts: Map<number, number>;\n}\n\n/**\n * Histogram metric\n *\n * Tracks distribution of values using cumulative buckets (OTLP-compatible).\n * Automatically applies ADR-0007 default buckets for _ms metrics.\n * Supports labeled metrics (Crucible v0.2.7+).\n */\nexport class Histogram {\n private count = 0;\n private sum = 0;\n private bucketCounts: Map<number, number> = new Map();\n private labeledStates = new Map<string, LabeledHistogramState>();\n private readonly buckets: number[];\n\n constructor(\n public readonly name: MetricName,\n options?: HistogramOptions,\n ) {\n // Determine buckets: custom > ADR-0007 defaults for _ms metrics > empty\n if (options?.buckets) {\n this.buckets = [...options.buckets].sort((a, b) => a - b);\n } else if (name.endsWith(\"_ms\") || name.endsWith(\"_seconds\")) {\n this.buckets = [...DEFAULT_MS_BUCKETS];\n } else {\n this.buckets = [];\n }\n\n // Initialize bucket counts\n for (const bucket of this.buckets) {\n this.bucketCounts.set(bucket, 0);\n }\n }\n\n /**\n * Record an observation\n *\n * @param value - Value to observe (typically a duration in ms or seconds)\n * @param labels - Optional label dimensions for this observation\n *\n * @example\n * ```typescript\n * const start = performance.now();\n * // ... operation ...\n * histogram.observe(performance.now() - start);\n * histogram.observe(duration, { phase: 'collect', result: 'success' });\n * ```\n */\n observe(value: number, labels?: Record<string, string>): void {\n if (labels && Object.keys(labels).length > 0) {\n // Labeled observation\n const labelKey = this.serializeLabels(labels);\n let state = this.labeledStates.get(labelKey);\n\n if (!state) {\n // Initialize new labeled state\n state = {\n count: 0,\n sum: 0,\n bucketCounts: new Map(),\n };\n for (const bucket of this.buckets) {\n state.bucketCounts.set(bucket, 0);\n }\n this.labeledStates.set(labelKey, state);\n }\n\n state.count++;\n state.sum += value;\n\n // Update cumulative bucket counts\n for (const bucket of this.buckets) {\n if (value <= bucket) {\n state.bucketCounts.set(bucket, (state.bucketCounts.get(bucket) || 0) + 1);\n }\n }\n } else {\n // Unlabeled observation\n this.count++;\n this.sum += value;\n\n // Update cumulative bucket counts\n for (const bucket of this.buckets) {\n if (value <= bucket) {\n this.bucketCounts.set(bucket, (this.bucketCounts.get(bucket) || 0) + 1);\n }\n }\n }\n }\n\n /**\n * Get histogram summary\n *\n * Returns OTLP-compatible histogram summary with cumulative bucket counts.\n */\n getSummary(): HistogramSummary {\n const buckets: HistogramBucket[] = this.buckets.map((le) => ({\n le,\n count: this.bucketCounts.get(le) || 0,\n }));\n\n return {\n count: this.count,\n sum: this.sum,\n buckets,\n };\n }\n\n /**\n * Get current observation count\n */\n getCount(): number {\n return this.count;\n }\n\n /**\n * Get sum of all observed values\n */\n getSum(): number {\n return this.sum;\n }\n\n /**\n * Get average of observed values\n */\n getAverage(): number {\n return this.count > 0 ? this.sum / this.count : 0;\n }\n\n /**\n * Get all labeled summaries\n * @returns Map of serialized label keys to histogram summaries\n */\n getLabeledSummaries(): Map<string, HistogramSummary> {\n const summaries = new Map<string, HistogramSummary>();\n\n for (const [labelKey, state] of this.labeledStates) {\n const buckets: HistogramBucket[] = this.buckets.map((le) => ({\n le,\n count: state.bucketCounts.get(le) || 0,\n }));\n\n summaries.set(labelKey, {\n count: state.count,\n sum: state.sum,\n buckets,\n });\n }\n\n return summaries;\n }\n\n /**\n * Get summary for specific label combination\n */\n getSummaryForLabels(labels: Record<string, string>): HistogramSummary | null {\n const labelKey = this.serializeLabels(labels);\n const state = this.labeledStates.get(labelKey);\n\n if (!state) {\n return null;\n }\n\n const buckets: HistogramBucket[] = this.buckets.map((le) => ({\n le,\n count: state.bucketCounts.get(le) || 0,\n }));\n\n return {\n count: state.count,\n sum: state.sum,\n buckets,\n };\n }\n\n /**\n * Reset histogram to initial state (all label combinations)\n */\n reset(): void {\n this.count = 0;\n this.sum = 0;\n for (const bucket of this.buckets) {\n this.bucketCounts.set(bucket, 0);\n }\n this.labeledStates.clear();\n }\n\n /**\n * Serialize labels to deterministic string key\n * Format: key1=value1,key2=value2 (sorted by key)\n */\n private serializeLabels(labels: Record<string, string>): string {\n return Object.entries(labels)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([k, v]) => `${k}=${v}`)\n .join(\",\");\n }\n}\n","/**\n * Metrics registry - central registry for all metrics\n *\n * Provides singleton registry for counters, gauges, and histograms.\n * Exports events in schema-compliant format.\n */\n\nimport { Counter } from \"./counter.js\";\nimport { Gauge } from \"./gauge.js\";\nimport { Histogram } from \"./histogram.js\";\nimport { getDefaultUnit } from \"./taxonomy.js\";\nimport type { FlushOptions, HistogramOptions, MetricName, MetricsEvent } from \"./types.js\";\n\n/**\n * Metrics registry\n *\n * Central registry for all metrics. Provides factory methods for counters,\n * gauges, and histograms. Exports metrics as schema-compliant events.\n */\nexport class MetricsRegistry {\n private counters: Map<MetricName, Counter> = new Map();\n private gauges: Map<MetricName, Gauge> = new Map();\n private histograms: Map<MetricName, Histogram> = new Map();\n\n /**\n * Get or create a counter\n *\n * @param name - Metric name from taxonomy\n * @returns Counter instance\n *\n * @example\n * ```typescript\n * const counter = registry.counter('schema_validations');\n * counter.inc();\n * ```\n */\n counter(name: MetricName): Counter {\n let counter = this.counters.get(name);\n if (!counter) {\n counter = new Counter(name);\n this.counters.set(name, counter);\n }\n return counter;\n }\n\n /**\n * Get or create a gauge\n *\n * @param name - Metric name from taxonomy\n * @returns Gauge instance\n *\n * @example\n * ```typescript\n * const gauge = registry.gauge('foundry_lookup_count');\n * gauge.set(42);\n * ```\n */\n gauge(name: MetricName): Gauge {\n let gauge = this.gauges.get(name);\n if (!gauge) {\n gauge = new Gauge(name);\n this.gauges.set(name, gauge);\n }\n return gauge;\n }\n\n /**\n * Get or create a histogram\n *\n * @param name - Metric name from taxonomy\n * @param options - Optional histogram options\n * @returns Histogram instance\n *\n * @example\n * ```typescript\n * // Auto-applies ADR-0007 buckets for _ms metrics\n * const histogram = registry.histogram('config_load_ms');\n * histogram.observe(42.5);\n *\n * // Custom buckets\n * const custom = registry.histogram('custom_metric', {\n * buckets: [10, 50, 100, 500, 1000]\n * });\n * ```\n */\n histogram(name: MetricName, options?: HistogramOptions): Histogram {\n let histogram = this.histograms.get(name);\n if (!histogram) {\n histogram = new Histogram(name, options);\n this.histograms.set(name, histogram);\n }\n return histogram;\n }\n\n /**\n * Export all metrics as events\n *\n * Returns array of schema-compliant MetricsEvent objects.\n * Does not clear metrics (use flush() to clear after export).\n *\n * @returns Promise resolving to array of metrics events\n *\n * @example\n * ```typescript\n * const events = await registry.export();\n * console.log(JSON.stringify(events, null, 2));\n * ```\n */\n async export(): Promise<MetricsEvent[]> {\n const events: MetricsEvent[] = [];\n const timestamp = new Date().toISOString();\n\n // Export counters (unlabeled + labeled) - Crucible v0.2.7+\n for (const [name, counter] of this.counters) {\n const unit = await getDefaultUnit(name);\n\n // Always export unlabeled value (for backwards compatibility)\n events.push({\n timestamp,\n name,\n value: counter.getValue(),\n unit,\n });\n\n // Export labeled values (only if > 0)\n for (const [labelKey, value] of counter.getLabeledValues()) {\n if (value > 0) {\n const tags = this.deserializeLabels(labelKey);\n events.push({\n timestamp,\n name,\n value,\n tags,\n unit,\n });\n }\n }\n }\n\n // Export gauges (unlabeled + labeled) - Crucible v0.2.7+\n for (const [name, gauge] of this.gauges) {\n const unit = await getDefaultUnit(name);\n\n // Export unlabeled value (always export gauges, even if zero)\n events.push({\n timestamp,\n name,\n value: gauge.getValue(),\n unit,\n });\n\n // Export labeled values\n for (const [labelKey, value] of gauge.getLabeledValues()) {\n const tags = this.deserializeLabels(labelKey);\n events.push({\n timestamp,\n name,\n value,\n tags,\n unit,\n });\n }\n }\n\n // Export histograms (unlabeled + labeled) - Crucible v0.2.7+\n for (const [name, histogram] of this.histograms) {\n const unit = await getDefaultUnit(name);\n\n // Always export unlabeled summary (for backwards compatibility)\n events.push({\n timestamp,\n name,\n value: histogram.getSummary(),\n unit,\n });\n\n // Export labeled summaries (only if count > 0)\n for (const [labelKey, summary] of histogram.getLabeledSummaries()) {\n if (summary.count > 0) {\n const tags = this.deserializeLabels(labelKey);\n events.push({\n timestamp,\n name,\n value: summary,\n tags,\n unit,\n });\n }\n }\n }\n\n return events;\n }\n\n /**\n * Deserialize label key back to tags object\n * Format: key1=value1,key2=value2 → {key1: \"value1\", key2: \"value2\"}\n */\n private deserializeLabels(labelKey: string): Record<string, string> {\n if (!labelKey) {\n return {};\n }\n\n const tags: Record<string, string> = {};\n for (const pair of labelKey.split(\",\")) {\n const [key, value] = pair.split(\"=\");\n if (key && value) {\n tags[key] = value;\n }\n }\n return tags;\n }\n\n /**\n * Export and clear all metrics\n *\n * Exports metrics as events, optionally emits them via logger,\n * then resets all metrics to zero.\n *\n * @param options - Flush options\n * @returns Promise resolving to array of exported events\n *\n * @example\n * ```typescript\n * // Export and clear\n * const events = await registry.flush();\n *\n * // Export, emit to logger, and clear\n * const events = await registry.flush({\n * emit: (events) => console.log(JSON.stringify(events))\n * });\n * ```\n */\n async flush(options?: FlushOptions): Promise<MetricsEvent[]> {\n const events = await this.export();\n\n try {\n // Emit if logger provided\n if (options?.emit) {\n options.emit(events);\n }\n } finally {\n // Always clear metrics, even if emit throws\n this.clear();\n }\n\n return events;\n }\n\n /**\n * Clear all metrics (reset to zero)\n *\n * Resets all counters, gauges, and histograms to their initial state.\n */\n clear(): void {\n for (const counter of this.counters.values()) {\n counter.reset();\n }\n for (const gauge of this.gauges.values()) {\n gauge.reset();\n }\n for (const histogram of this.histograms.values()) {\n histogram.reset();\n }\n }\n\n /**\n * Get all registered metric names\n *\n * Returns array of all metric names that have been accessed\n * (counters, gauges, or histograms).\n */\n getMetricNames(): MetricName[] {\n const names = new Set<MetricName>();\n for (const name of this.counters.keys()) {\n names.add(name);\n }\n for (const name of this.gauges.keys()) {\n names.add(name);\n }\n for (const name of this.histograms.keys()) {\n names.add(name);\n }\n return Array.from(names);\n }\n\n /**\n * Get total count of registered metrics\n */\n getMetricCount(): number {\n return this.counters.size + this.gauges.size + this.histograms.size;\n }\n}\n","/**\n * Telemetry types - TypeScript types for metrics events\n *\n * Based on schemas/crucible-ts/observability/metrics/v1.0.0/metrics-event.schema.json\n * and config/crucible-ts/taxonomy/metrics.yaml\n */\n\n/**\n * Metric name from taxonomy\n * Aligned with config/crucible-ts/taxonomy/metrics.yaml#/$defs/metricName\n * Updated for Crucible v0.2.18 (HTTP server metrics)\n */\nexport type MetricName =\n // Core module metrics\n | \"schema_validations\"\n | \"schema_validation_errors\"\n | \"config_load_ms\"\n | \"config_load_errors\"\n | \"pathfinder_find_ms\"\n | \"pathfinder_validation_errors\"\n | \"pathfinder_security_warnings\"\n | \"foundry_lookup_count\"\n | \"logging_emit_count\"\n | \"logging_emit_latency_ms\"\n | \"goneat_command_duration_ms\"\n // Prometheus exporter metrics\n | \"prometheus_exporter_refresh_duration_seconds\"\n | \"prometheus_exporter_refresh_total\"\n | \"prometheus_exporter_refresh_errors_total\"\n | \"prometheus_exporter_refresh_inflight\"\n | \"prometheus_exporter_http_requests_total\"\n | \"prometheus_exporter_http_errors_total\"\n | \"prometheus_exporter_restarts_total\"\n // Foundry MIME detection metrics\n | \"foundry_mime_detections_total_json\"\n | \"foundry_mime_detections_total_xml\"\n | \"foundry_mime_detections_total_yaml\"\n | \"foundry_mime_detections_total_csv\"\n | \"foundry_mime_detections_total_plain_text\"\n | \"foundry_mime_detections_total_unknown\"\n | \"foundry_mime_detection_ms_json\"\n | \"foundry_mime_detection_ms_xml\"\n | \"foundry_mime_detection_ms_yaml\"\n | \"foundry_mime_detection_ms_csv\"\n | \"foundry_mime_detection_ms_plain_text\"\n | \"foundry_mime_detection_ms_unknown\"\n // Error handling metrics\n | \"error_handling_wraps_total\"\n | \"error_handling_wrap_ms\"\n // FulHash metrics\n | \"fulhash_operations_total_xxh3_128\"\n | \"fulhash_operations_total_sha256\"\n | \"fulhash_hash_string_total\"\n | \"fulhash_bytes_hashed_total\"\n | \"fulhash_operation_ms\"\n // HTTP server metrics (v0.2.18)\n | \"http_requests_total\"\n | \"http_request_duration_seconds\"\n | \"http_request_size_bytes\"\n | \"http_response_size_bytes\"\n | \"http_active_requests\";\n\n/**\n * Metric unit from taxonomy\n * Aligned with config/crucible-ts/taxonomy/metrics.yaml#/$defs/metricUnit\n * Updated for Crucible v0.2.7 (adds 's' for seconds)\n */\nexport type MetricUnit = \"count\" | \"ms\" | \"bytes\" | \"percent\" | \"s\";\n\n/**\n * Histogram bucket for OTLP-compatible histograms\n */\nexport interface HistogramBucket {\n /** Upper bound (less-than-or-equal) for the bucket */\n le: number;\n /** Cumulative count up to and including this bucket */\n count: number;\n}\n\n/**\n * Histogram summary payload\n */\nexport interface HistogramSummary {\n /** Total count of observations */\n count: number;\n /** Sum of all observed values */\n sum: number;\n /** Ordered buckets with cumulative counts (OTLP-compatible) */\n buckets: HistogramBucket[];\n}\n\n/**\n * Metric value (scalar or histogram)\n */\nexport type MetricValue = number | HistogramSummary;\n\n/**\n * Metrics event structure\n * Aligned with schemas/crucible-ts/observability/metrics/v1.0.0/metrics-event.schema.json\n */\nexport interface MetricsEvent {\n /** RFC3339 timestamp of metric emission */\n timestamp: string;\n /** Metric identifier from taxonomy */\n name: MetricName;\n /** Measurement payload (scalar or histogram summary) */\n value: MetricValue;\n /** Optional key/value dimensions */\n tags?: Record<string, string>;\n /** Optional metric unit (defaults to taxonomy default) */\n unit?: MetricUnit;\n}\n\n/**\n * Histogram options for customization\n */\nexport interface HistogramOptions {\n /** Custom bucket boundaries (overrides default ADR-0007 buckets) */\n buckets?: number[];\n}\n\n/**\n * Flush options for metrics registry\n */\nexport interface FlushOptions {\n /** Optional logger function to emit metrics */\n emit?: (events: MetricsEvent[]) => void;\n}\n\n/**\n * Type guard to check if value is a histogram summary\n */\nexport function isHistogramSummary(value: unknown): value is HistogramSummary {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"count\" in value &&\n \"sum\" in value &&\n \"buckets\" in value\n );\n}\n\n/**\n * Type guard to check if metric name is valid\n * Aligned with Crucible v0.2.18 taxonomy\n */\nexport function isValidMetricName(name: string): name is MetricName {\n const validNames: MetricName[] = [\n // Core module metrics\n \"schema_validations\",\n \"schema_validation_errors\",\n \"config_load_ms\",\n \"config_load_errors\",\n \"pathfinder_find_ms\",\n \"pathfinder_validation_errors\",\n \"pathfinder_security_warnings\",\n \"foundry_lookup_count\",\n \"logging_emit_count\",\n \"logging_emit_latency_ms\",\n \"goneat_command_duration_ms\",\n // Prometheus exporter metrics\n \"prometheus_exporter_refresh_duration_seconds\",\n \"prometheus_exporter_refresh_total\",\n \"prometheus_exporter_refresh_errors_total\",\n \"prometheus_exporter_refresh_inflight\",\n \"prometheus_exporter_http_requests_total\",\n \"prometheus_exporter_http_errors_total\",\n \"prometheus_exporter_restarts_total\",\n // Foundry MIME detection metrics\n \"foundry_mime_detections_total_json\",\n \"foundry_mime_detections_total_xml\",\n \"foundry_mime_detections_total_yaml\",\n \"foundry_mime_detections_total_csv\",\n \"foundry_mime_detections_total_plain_text\",\n \"foundry_mime_detections_total_unknown\",\n \"foundry_mime_detection_ms_json\",\n \"foundry_mime_detection_ms_xml\",\n \"foundry_mime_detection_ms_yaml\",\n \"foundry_mime_detection_ms_csv\",\n \"foundry_mime_detection_ms_plain_text\",\n \"foundry_mime_detection_ms_unknown\",\n // Error handling metrics\n \"error_handling_wraps_total\",\n \"error_handling_wrap_ms\",\n // FulHash metrics\n \"fulhash_operations_total_xxh3_128\",\n \"fulhash_operations_total_sha256\",\n \"fulhash_hash_string_total\",\n \"fulhash_bytes_hashed_total\",\n \"fulhash_operation_ms\",\n // HTTP server metrics\n \"http_requests_total\",\n \"http_request_duration_seconds\",\n \"http_request_size_bytes\",\n \"http_response_size_bytes\",\n \"http_active_requests\",\n ];\n return validNames.includes(name as MetricName);\n}\n\n/**\n * Type guard to check if unit is valid\n */\nexport function isValidMetricUnit(unit: string): unit is MetricUnit {\n const validUnits: MetricUnit[] = [\"count\", \"ms\", \"bytes\", \"percent\", \"s\"];\n return validUnits.includes(unit as MetricUnit);\n}\n","import type Ajv from \"ajv\";\nimport addFormats from \"ajv-formats\";\n\nexport interface FulmenAjvFormatsOptions {\n mode?: \"fast\" | \"full\";\n formats?: string[];\n}\n\nconst DEFAULT_FORMATS = [\n \"date-time\",\n \"email\",\n \"hostname\",\n \"ipv4\",\n \"ipv6\",\n \"uri\",\n \"uri-reference\",\n \"uuid\",\n];\n\n/**\n * Apply Fulmen-standard AJV format support.\n *\n * Useful when configuring AJV in other frameworks (e.g. Fastify) so JSON Schema\n * `format` keywords are enforced consistently.\n */\nexport function applyFulmenAjvFormats(ajv: Ajv, options: FulmenAjvFormatsOptions = {}): Ajv {\n const mode = options.mode ?? \"fast\";\n const formats = options.formats ?? DEFAULT_FORMATS;\n\n // ajv-formats types use a string-literal union; allow callers to supply strings.\n // The `as never` on ajv works around ajv-formats bundling its own older ajv types\n // that diverge from ajv@8.18+ (CodeKeywordDefinition.code parameter incompatibility).\n addFormats(ajv as never, { mode, formats: formats as unknown as never[] });\n return ajv;\n}\n","/**\n * Schema validation utilities - helper functions for formatting and validation\n */\n\nimport { SchemaValidationError } from \"./errors.js\";\nimport type { SchemaValidationDiagnostic, SchemaValidationResult } from \"./types.js\";\n\n/**\n * Format validation diagnostics for display\n */\nexport function formatDiagnostics(diagnostics: SchemaValidationDiagnostic[]): string {\n if (diagnostics.length === 0) {\n return \"No validation issues found.\";\n }\n\n const lines: string[] = [];\n const errors = diagnostics.filter((d) => d.severity === \"ERROR\");\n const warnings = diagnostics.filter((d) => d.severity === \"WARN\");\n\n if (errors.length > 0) {\n lines.push(`❌ ${errors.length} error(s) found:`);\n errors.forEach((diag, index) => {\n lines.push(` ${index + 1}. ${diag.message}`);\n if (diag.pointer) {\n lines.push(` at ${diag.pointer}`);\n }\n if (diag.keyword) {\n lines.push(` keyword: ${diag.keyword}`);\n }\n });\n }\n\n if (warnings.length > 0) {\n lines.push(\"\");\n lines.push(`⚠️ ${warnings.length} warning(s) found:`);\n warnings.forEach((diag, index) => {\n lines.push(` ${index + 1}. ${diag.message}`);\n if (diag.pointer) {\n lines.push(` at ${diag.pointer}`);\n }\n });\n }\n\n return lines.join(\"\\n\");\n}\n\n/**\n * Format validation result for display\n */\nexport function formatValidationResult(result: SchemaValidationResult): string {\n if (result.valid) {\n return \"✅ Validation passed\";\n }\n\n const output: string[] = [];\n output.push(\"❌ Validation failed\");\n output.push(formatDiagnostics(result.diagnostics));\n output.push(`\\nSource: ${result.source}`);\n\n return output.join(\"\\n\");\n}\n\n/**\n * Check if value is a SchemaValidationError\n */\nexport function isValidationError(error: unknown): error is SchemaValidationError {\n return error instanceof SchemaValidationError;\n}\n\n/**\n * Extract validation result from error or return success\n */\nexport function extractValidationResult(error: unknown): {\n valid: boolean;\n diagnostics: SchemaValidationDiagnostic[];\n source: \"ajv\" | \"goneat\";\n} {\n if (isValidationError(error)) {\n return {\n valid: false,\n diagnostics: error.diagnostics,\n source: error.diagnostics[0]?.source || \"ajv\",\n };\n }\n\n return {\n valid: true,\n diagnostics: [],\n source: \"ajv\",\n };\n}\n\n/**\n * Normalize JSON pointer path for display\n */\nexport function normalizePointer(pointer: string): string {\n if (pointer === \"\") {\n return \"root\";\n }\n return pointer.replace(/^\\//, \"\").replace(/\\//g, \".\");\n}\n\n/**\n * Create a validation diagnostic\n */\nexport function createDiagnostic(\n pointer: string,\n message: string,\n keyword: string,\n severity: \"ERROR\" | \"WARN\" = \"ERROR\",\n source: \"ajv\" | \"goneat\" = \"ajv\",\n data?: unknown,\n): SchemaValidationDiagnostic {\n return {\n pointer,\n message,\n keyword,\n severity,\n source,\n data,\n };\n}\n\n/**\n * Group diagnostics by severity\n */\nexport function groupDiagnosticsBySeverity(diagnostics: SchemaValidationDiagnostic[]): {\n errors: SchemaValidationDiagnostic[];\n warnings: SchemaValidationDiagnostic[];\n} {\n return {\n errors: diagnostics.filter((d) => d.severity === \"ERROR\"),\n warnings: diagnostics.filter((d) => d.severity === \"WARN\"),\n };\n}\n\n/**\n * Count diagnostics by severity\n */\nexport function countDiagnostics(diagnostics: SchemaValidationDiagnostic[]): {\n total: number;\n errors: number;\n warnings: number;\n} {\n const grouped = groupDiagnosticsBySeverity(diagnostics);\n return {\n total: diagnostics.length,\n errors: grouped.errors.length,\n warnings: grouped.warnings.length,\n };\n}\n","/**\n * Goneat bridge - Optional integration for CLI-only goneat validation\n *\n * Provides goneat validation as an opt-in alternative for CLI exploration.\n * NOT used by library consumers - AJV validation is the primary implementation.\n */\n\nimport { spawn } from \"node:child_process\";\nimport { access } from \"node:fs/promises\";\nimport type { SchemaValidationDiagnostic, SchemaValidationResult } from \"./types.js\";\nimport { createDiagnostic } from \"./utils.js\";\n\n/**\n * Goneat validation output structure\n */\ninterface GoneatValidationOutput {\n valid: boolean;\n errors?: Array<{\n path: string;\n message: string;\n keyword?: string;\n }>;\n}\n\n/**\n * Detect goneat binary location\n */\nexport async function detectGoneat(customPath?: string): Promise<string | null> {\n // Try custom path first\n if (customPath) {\n try {\n await access(customPath);\n return customPath;\n } catch {\n return null;\n }\n }\n\n // Try GONEAT_PATH environment variable\n if (process.env.GONEAT_PATH) {\n try {\n await access(process.env.GONEAT_PATH);\n return process.env.GONEAT_PATH;\n } catch {\n // Continue to next option\n }\n }\n\n // Try local bin/goneat\n try {\n await access(\"./bin/goneat\");\n return \"./bin/goneat\";\n } catch {\n // Continue to next option\n }\n\n // Try system PATH (assume 'goneat' command available)\n return \"goneat\";\n}\n\n/**\n * Check if goneat is available\n *\n * If goneatPath is provided, use it directly to test availability.\n * Otherwise, detect goneat location first.\n */\nexport async function isGoneatAvailable(goneatPath?: string): Promise<boolean> {\n let pathToTest: string | null;\n\n if (goneatPath) {\n // Use provided path directly - don't re-detect\n // This allows testing 'goneat' command from PATH\n pathToTest = goneatPath;\n } else {\n // Detect goneat location\n pathToTest = await detectGoneat();\n if (!pathToTest) return false;\n }\n\n return new Promise((resolve) => {\n const proc = spawn(pathToTest as string, [\"version\"], { stdio: \"ignore\" });\n\n // Timeout after 5 seconds to prevent hanging in CI\n const timeout = setTimeout(() => {\n proc.kill();\n resolve(false);\n }, 5000);\n\n proc.on(\"close\", (code) => {\n clearTimeout(timeout);\n resolve(code === 0);\n });\n proc.on(\"error\", () => {\n clearTimeout(timeout);\n resolve(false);\n });\n });\n}\n\n/**\n * Run goneat schema validation (CLI-only, opt-in)\n *\n * This is NOT used by library validation - it's purely for CLI comparison.\n * Library users get full AJV validation without goneat dependency.\n */\nexport async function runGoneatValidation(\n schemaPath: string,\n dataPath: string,\n goneatPath?: string,\n): Promise<SchemaValidationResult> {\n const detected = await detectGoneat(goneatPath);\n\n if (!detected) {\n return {\n valid: false,\n diagnostics: [\n createDiagnostic(\n \"\",\n \"goneat binary not found. Install goneat or specify path with --goneat-path\",\n \"goneat-unavailable\",\n \"ERROR\",\n \"goneat\",\n ),\n ],\n source: \"goneat\",\n };\n }\n\n // Check availability using the detected path directly\n if (!(await isGoneatAvailable(detected))) {\n return {\n valid: false,\n diagnostics: [\n createDiagnostic(\n \"\",\n `goneat binary found at '${detected}' but not executable or version check failed`,\n \"goneat-not-executable\",\n \"ERROR\",\n \"goneat\",\n ),\n ],\n source: \"goneat\",\n };\n }\n\n return new Promise((resolve) => {\n const args = [\n \"schema\",\n \"validate\",\n \"--schema\",\n schemaPath,\n \"--data\",\n dataPath,\n \"--format\",\n \"json\",\n ];\n const proc = spawn(detected, args);\n\n let stdout = \"\";\n let stderr = \"\";\n\n proc.stdout.on(\"data\", (data) => {\n stdout += data.toString();\n });\n\n proc.stderr.on(\"data\", (data) => {\n stderr += data.toString();\n });\n\n proc.on(\"close\", (code: number | null) => {\n // Parse goneat output\n let output: GoneatValidationOutput;\n\n try {\n output = JSON.parse(stdout) as GoneatValidationOutput;\n } catch {\n // Failed to parse output, treat as error\n resolve({\n valid: false,\n diagnostics: [\n createDiagnostic(\n \"\",\n `goneat validation failed: ${stderr || \"unknown error\"}`,\n \"goneat-error\",\n \"ERROR\",\n \"goneat\",\n ),\n ],\n source: \"goneat\",\n });\n return;\n }\n\n // Convert goneat errors to our diagnostic format\n const diagnostics: SchemaValidationDiagnostic[] =\n output.errors?.map((error) =>\n createDiagnostic(\n error.path || \"\",\n error.message,\n error.keyword || \"validation\",\n \"ERROR\",\n \"goneat\",\n ),\n ) || [];\n\n resolve({\n valid: code === 0 && output.valid,\n diagnostics,\n source: \"goneat\",\n });\n });\n\n proc.on(\"error\", (error) => {\n resolve({\n valid: false,\n diagnostics: [\n createDiagnostic(\n \"\",\n `Failed to execute goneat: ${error.message}`,\n \"goneat-spawn-error\",\n \"ERROR\",\n \"goneat\",\n ),\n ],\n source: \"goneat\",\n });\n });\n });\n}\n","/**\n * Schema normalizer - implements schema normalization per Fulmen standard\n *\n * Provides utilities for canonicalizing and comparing schemas across\n * JSON and YAML formats with comment preservation and deterministic output.\n */\n\nimport { parse as parseYAML } from \"yaml\";\nimport { SchemaValidationError } from \"./errors.js\";\nimport type { SchemaInput, SchemaNormalizationOptions } from \"./types.js\";\n\n/**\n * Parse schema input to object\n */\nfunction parseSchemaInput(input: SchemaInput): Record<string, unknown> {\n if (!input) {\n throw SchemaValidationError.parseFailed(\n { type: \"string\", content: \"\" },\n new Error(\"schema content is empty\"),\n );\n }\n\n try {\n if (typeof input === \"string\") {\n // Try JSON first, fall back to YAML\n try {\n return JSON.parse(input) as Record<string, unknown>;\n } catch {\n return parseYAML(input) as Record<string, unknown>;\n }\n }\n\n if (Buffer.isBuffer(input)) {\n const content = input.toString(\"utf-8\");\n try {\n return JSON.parse(content) as Record<string, unknown>;\n } catch {\n return parseYAML(content) as Record<string, unknown>;\n }\n }\n\n // Already an object\n return input as Record<string, unknown>;\n } catch (error) {\n throw SchemaValidationError.parseFailed(\n {\n type: typeof input === \"string\" ? \"string\" : \"object\",\n content: typeof input === \"string\" ? input : JSON.stringify(input),\n },\n error as Error,\n );\n }\n}\n\n/**\n * Sort object keys recursively in lexicographical order\n */\nfunction sortObjectKeys(obj: unknown): unknown {\n if (obj === null || typeof obj !== \"object\") {\n return obj;\n }\n\n if (Array.isArray(obj)) {\n return obj.map(sortObjectKeys);\n }\n\n const sorted: Record<string, unknown> = {};\n const keys = Object.keys(obj).sort();\n\n for (const key of keys) {\n sorted[key] = sortObjectKeys((obj as Record<string, unknown>)[key]);\n }\n\n return sorted;\n}\n\n/**\n * Normalize schema to canonical JSON format\n *\n * Per Fulmen Schema Normalization Standard:\n * - Accepts YAML or JSON input\n * - Strips comments while preserving semantic structure\n * - Sorts keys lexicographically\n * - Produces deterministic, pretty-printed JSON (or compact if requested)\n */\nexport function normalizeSchema(\n input: SchemaInput,\n options: SchemaNormalizationOptions = {},\n): string {\n try {\n // Parse input to object\n const parsed = parseSchemaInput(input);\n\n // Sort keys recursively\n const sorted = sortObjectKeys(parsed);\n\n // Serialize to JSON with optional compact mode\n if (options.compact) {\n return JSON.stringify(sorted);\n }\n\n // Default: pretty-printed with 2-space indentation\n return JSON.stringify(sorted, null, 2);\n } catch (error) {\n if (error instanceof SchemaValidationError) {\n throw error;\n }\n throw SchemaValidationError.parseFailed(\n {\n type: typeof input === \"string\" ? \"string\" : \"object\",\n content: typeof input === \"string\" ? input : JSON.stringify(input),\n },\n error as Error,\n );\n }\n}\n\n/**\n * Compare two schemas for semantic equality\n *\n * Normalizes both schemas and compares the canonical JSON output.\n * Returns equality result along with normalized versions for debugging.\n */\nexport function compareSchemas(\n schemaA: SchemaInput,\n schemaB: SchemaInput,\n options: SchemaNormalizationOptions = {},\n): { equal: boolean; normalizedA: string; normalizedB: string } {\n const normalizedA = normalizeSchema(schemaA, options);\n const normalizedB = normalizeSchema(schemaB, options);\n\n return {\n equal: normalizedA === normalizedB,\n normalizedA,\n normalizedB,\n };\n}\n","// AUTO-GENERATED by scripts/embed-assets.ts. DO NOT EDIT.\n// Run `make embed-assets` to regenerate after `make sync-ssot`.\n// Domain: metaschema (19 assets)\nimport type { EmbeddedAssetManifest } from \"../types.js\";\n\nexport const manifest: EmbeddedAssetManifest = {\n domain: \"metaschema\",\n files: {\n \"schemas/crucible-ts/meta/draft-04/schema.json\": \"{\\n \\\"id\\\": \\\"http://json-schema.org/draft-04/schema#\\\",\\n \\\"$schema\\\": \\\"http://json-schema.org/draft-04/schema#\\\",\\n \\\"description\\\": \\\"Core schema meta-schema\\\",\\n \\\"definitions\\\": {\\n \\\"schemaArray\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"minItems\\\": 1,\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"#\\\"\\n }\\n },\\n \\\"positiveInteger\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0\\n },\\n \\\"positiveIntegerDefault0\\\": {\\n \\\"allOf\\\": [\\n {\\n \\\"$ref\\\": \\\"#/definitions/positiveInteger\\\"\\n },\\n {\\n \\\"default\\\": 0\\n }\\n ]\\n },\\n \\\"simpleTypes\\\": {\\n \\\"enum\\\": [\\n \\\"array\\\",\\n \\\"boolean\\\",\\n \\\"integer\\\",\\n \\\"null\\\",\\n \\\"number\\\",\\n \\\"object\\\",\\n \\\"string\\\"\\n ]\\n },\\n \\\"stringArray\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"minItems\\\": 1,\\n \\\"uniqueItems\\\": true\\n }\\n },\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"id\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"$schema\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"title\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"default\\\": {},\\n \\\"multipleOf\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"minimum\\\": 0,\\n \\\"exclusiveMinimum\\\": true\\n },\\n \\\"maximum\\\": {\\n \\\"type\\\": \\\"number\\\"\\n },\\n \\\"exclusiveMaximum\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"default\\\": false\\n },\\n \\\"minimum\\\": {\\n \\\"type\\\": \\\"number\\\"\\n },\\n \\\"exclusiveMinimum\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"default\\\": false\\n },\\n \\\"maxLength\\\": {\\n \\\"$ref\\\": \\\"#/definitions/positiveInteger\\\"\\n },\\n \\\"minLength\\\": {\\n \\\"$ref\\\": \\\"#/definitions/positiveIntegerDefault0\\\"\\n },\\n \\\"pattern\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"regex\\\"\\n },\\n \\\"additionalItems\\\": {\\n \\\"anyOf\\\": [\\n {\\n \\\"type\\\": \\\"boolean\\\"\\n },\\n {\\n \\\"$ref\\\": \\\"#\\\"\\n }\\n ],\\n \\\"default\\\": {}\\n },\\n \\\"items\\\": {\\n \\\"anyOf\\\": [\\n {\\n \\\"$ref\\\": \\\"#\\\"\\n },\\n {\\n \\\"$ref\\\": \\\"#/definitions/schemaArray\\\"\\n }\\n ],\\n \\\"default\\\": {}\\n },\\n \\\"maxItems\\\": {\\n \\\"$ref\\\": \\\"#/definitions/positiveInteger\\\"\\n },\\n \\\"minItems\\\": {\\n \\\"$ref\\\": \\\"#/definitions/positiveIntegerDefault0\\\"\\n },\\n \\\"uniqueItems\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"default\\\": false\\n },\\n \\\"maxProperties\\\": {\\n \\\"$ref\\\": \\\"#/definitions/positiveInteger\\\"\\n },\\n \\\"minProperties\\\": {\\n \\\"$ref\\\": \\\"#/definitions/positiveIntegerDefault0\\\"\\n },\\n \\\"required\\\": {\\n \\\"$ref\\\": \\\"#/definitions/stringArray\\\"\\n },\\n \\\"additionalProperties\\\": {\\n \\\"anyOf\\\": [\\n {\\n \\\"type\\\": \\\"boolean\\\"\\n },\\n {\\n \\\"$ref\\\": \\\"#\\\"\\n }\\n ],\\n \\\"default\\\": {}\\n },\\n \\\"definitions\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": {\\n \\\"$ref\\\": \\\"#\\\"\\n },\\n \\\"default\\\": {}\\n },\\n \\\"properties\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": {\\n \\\"$ref\\\": \\\"#\\\"\\n },\\n \\\"default\\\": {}\\n },\\n \\\"patternProperties\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": {\\n \\\"$ref\\\": \\\"#\\\"\\n },\\n \\\"default\\\": {}\\n },\\n \\\"dependencies\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": {\\n \\\"anyOf\\\": [\\n {\\n \\\"$ref\\\": \\\"#\\\"\\n },\\n {\\n \\\"$ref\\\": \\\"#/definitions/stringArray\\\"\\n }\\n ]\\n }\\n },\\n \\\"enum\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"minItems\\\": 1,\\n \\\"uniqueItems\\\": true\\n },\\n \\\"type\\\": {\\n \\\"anyOf\\\": [\\n {\\n \\\"$ref\\\": \\\"#/definitions/simpleTypes\\\"\\n },\\n {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"#/definitions/simpleTypes\\\"\\n },\\n \\\"minItems\\\": 1,\\n \\\"uniqueItems\\\": true\\n }\\n ]\\n },\\n \\\"format\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"allOf\\\": {\\n \\\"$ref\\\": \\\"#/definitions/schemaArray\\\"\\n },\\n \\\"anyOf\\\": {\\n \\\"$ref\\\": \\\"#/definitions/schemaArray\\\"\\n },\\n \\\"oneOf\\\": {\\n \\\"$ref\\\": \\\"#/definitions/schemaArray\\\"\\n },\\n \\\"not\\\": {\\n \\\"$ref\\\": \\\"#\\\"\\n }\\n },\\n \\\"dependencies\\\": {\\n \\\"exclusiveMaximum\\\": [\\n \\\"maximum\\\"\\n ],\\n \\\"exclusiveMinimum\\\": [\\n \\\"minimum\\\"\\n ]\\n },\\n \\\"default\\\": {}\\n}\\n\",\n \"schemas/crucible-ts/meta/draft-06/schema.json\": \"{\\n \\\"$schema\\\": \\\"http://json-schema.org/draft-06/schema#\\\",\\n \\\"$id\\\": \\\"http://json-schema.org/draft-06/schema#\\\",\\n \\\"title\\\": \\\"Core schema meta-schema\\\",\\n \\\"definitions\\\": {\\n \\\"schemaArray\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"minItems\\\": 1,\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"#\\\"\\n }\\n },\\n \\\"nonNegativeInteger\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0\\n },\\n \\\"nonNegativeIntegerDefault0\\\": {\\n \\\"allOf\\\": [\\n {\\n \\\"$ref\\\": \\\"#/definitions/nonNegativeInteger\\\"\\n },\\n {\\n \\\"default\\\": 0\\n }\\n ]\\n },\\n \\\"simpleTypes\\\": {\\n \\\"enum\\\": [\\n \\\"array\\\",\\n \\\"boolean\\\",\\n \\\"integer\\\",\\n \\\"null\\\",\\n \\\"number\\\",\\n \\\"object\\\",\\n \\\"string\\\"\\n ]\\n },\\n \\\"stringArray\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"uniqueItems\\\": true,\\n \\\"default\\\": []\\n }\\n },\\n \\\"type\\\": [\\n \\\"object\\\",\\n \\\"boolean\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"$id\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"uri-reference\\\"\\n },\\n \\\"$schema\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"uri\\\"\\n },\\n \\\"$ref\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"uri-reference\\\"\\n },\\n \\\"title\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"default\\\": {},\\n \\\"examples\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {}\\n },\\n \\\"multipleOf\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"exclusiveMinimum\\\": 0\\n },\\n \\\"maximum\\\": {\\n \\\"type\\\": \\\"number\\\"\\n },\\n \\\"exclusiveMaximum\\\": {\\n \\\"type\\\": \\\"number\\\"\\n },\\n \\\"minimum\\\": {\\n \\\"type\\\": \\\"number\\\"\\n },\\n \\\"exclusiveMinimum\\\": {\\n \\\"type\\\": \\\"number\\\"\\n },\\n \\\"maxLength\\\": {\\n \\\"$ref\\\": \\\"#/definitions/nonNegativeInteger\\\"\\n },\\n \\\"minLength\\\": {\\n \\\"$ref\\\": \\\"#/definitions/nonNegativeIntegerDefault0\\\"\\n },\\n \\\"pattern\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"regex\\\"\\n },\\n \\\"additionalItems\\\": {\\n \\\"$ref\\\": \\\"#\\\"\\n },\\n \\\"items\\\": {\\n \\\"anyOf\\\": [\\n {\\n \\\"$ref\\\": \\\"#\\\"\\n },\\n {\\n \\\"$ref\\\": \\\"#/definitions/schemaArray\\\"\\n }\\n ],\\n \\\"default\\\": {}\\n },\\n \\\"maxItems\\\": {\\n \\\"$ref\\\": \\\"#/definitions/nonNegativeInteger\\\"\\n },\\n \\\"minItems\\\": {\\n \\\"$ref\\\": \\\"#/definitions/nonNegativeIntegerDefault0\\\"\\n },\\n \\\"uniqueItems\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"default\\\": false\\n },\\n \\\"contains\\\": {\\n \\\"$ref\\\": \\\"#\\\"\\n },\\n \\\"maxProperties\\\": {\\n \\\"$ref\\\": \\\"#/definitions/nonNegativeInteger\\\"\\n },\\n \\\"minProperties\\\": {\\n \\\"$ref\\\": \\\"#/definitions/nonNegativeIntegerDefault0\\\"\\n },\\n \\\"required\\\": {\\n \\\"$ref\\\": \\\"#/definitions/stringArray\\\"\\n },\\n \\\"additionalProperties\\\": {\\n \\\"$ref\\\": \\\"#\\\"\\n },\\n \\\"definitions\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": {\\n \\\"$ref\\\": \\\"#\\\"\\n },\\n \\\"default\\\": {}\\n },\\n \\\"properties\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": {\\n \\\"$ref\\\": \\\"#\\\"\\n },\\n \\\"default\\\": {}\\n },\\n \\\"patternProperties\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": {\\n \\\"$ref\\\": \\\"#\\\"\\n },\\n \\\"propertyNames\\\": {\\n \\\"format\\\": \\\"regex\\\"\\n },\\n \\\"default\\\": {}\\n },\\n \\\"dependencies\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": {\\n \\\"anyOf\\\": [\\n {\\n \\\"$ref\\\": \\\"#\\\"\\n },\\n {\\n \\\"$ref\\\": \\\"#/definitions/stringArray\\\"\\n }\\n ]\\n }\\n },\\n \\\"propertyNames\\\": {\\n \\\"$ref\\\": \\\"#\\\"\\n },\\n \\\"const\\\": {},\\n \\\"enum\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"minItems\\\": 1,\\n \\\"uniqueItems\\\": true\\n },\\n \\\"type\\\": {\\n \\\"anyOf\\\": [\\n {\\n \\\"$ref\\\": \\\"#/definitions/simpleTypes\\\"\\n },\\n {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"#/definitions/simpleTypes\\\"\\n },\\n \\\"minItems\\\": 1,\\n \\\"uniqueItems\\\": true\\n }\\n ]\\n },\\n \\\"format\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"allOf\\\": {\\n \\\"$ref\\\": \\\"#/definitions/schemaArray\\\"\\n },\\n \\\"anyOf\\\": {\\n \\\"$ref\\\": \\\"#/definitions/schemaArray\\\"\\n },\\n \\\"oneOf\\\": {\\n \\\"$ref\\\": \\\"#/definitions/schemaArray\\\"\\n },\\n \\\"not\\\": {\\n \\\"$ref\\\": \\\"#\\\"\\n }\\n },\\n \\\"default\\\": {}\\n}\\n\",\n \"schemas/crucible-ts/meta/draft-07/schema.json\": \"{\\n \\\"$schema\\\": \\\"http://json-schema.org/draft-07/schema#\\\",\\n \\\"$id\\\": \\\"http://json-schema.org/draft-07/schema#\\\",\\n \\\"title\\\": \\\"Core schema meta-schema\\\",\\n \\\"definitions\\\": {\\n \\\"schemaArray\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"minItems\\\": 1,\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"#\\\"\\n }\\n },\\n \\\"nonNegativeInteger\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0\\n },\\n \\\"nonNegativeIntegerDefault0\\\": {\\n \\\"allOf\\\": [\\n {\\n \\\"$ref\\\": \\\"#/definitions/nonNegativeInteger\\\"\\n },\\n {\\n \\\"default\\\": 0\\n }\\n ]\\n },\\n \\\"simpleTypes\\\": {\\n \\\"enum\\\": [\\n \\\"array\\\",\\n \\\"boolean\\\",\\n \\\"integer\\\",\\n \\\"null\\\",\\n \\\"number\\\",\\n \\\"object\\\",\\n \\\"string\\\"\\n ]\\n },\\n \\\"stringArray\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"uniqueItems\\\": true,\\n \\\"default\\\": []\\n }\\n },\\n \\\"type\\\": [\\n \\\"object\\\",\\n \\\"boolean\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"$id\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"uri-reference\\\"\\n },\\n \\\"$schema\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"uri\\\"\\n },\\n \\\"$ref\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"uri-reference\\\"\\n },\\n \\\"$comment\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"title\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"default\\\": true,\\n \\\"readOnly\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"default\\\": false\\n },\\n \\\"writeOnly\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"default\\\": false\\n },\\n \\\"examples\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": true\\n },\\n \\\"multipleOf\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"exclusiveMinimum\\\": 0\\n },\\n \\\"maximum\\\": {\\n \\\"type\\\": \\\"number\\\"\\n },\\n \\\"exclusiveMaximum\\\": {\\n \\\"type\\\": \\\"number\\\"\\n },\\n \\\"minimum\\\": {\\n \\\"type\\\": \\\"number\\\"\\n },\\n \\\"exclusiveMinimum\\\": {\\n \\\"type\\\": \\\"number\\\"\\n },\\n \\\"maxLength\\\": {\\n \\\"$ref\\\": \\\"#/definitions/nonNegativeInteger\\\"\\n },\\n \\\"minLength\\\": {\\n \\\"$ref\\\": \\\"#/definitions/nonNegativeIntegerDefault0\\\"\\n },\\n \\\"pattern\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"regex\\\"\\n },\\n \\\"additionalItems\\\": {\\n \\\"$ref\\\": \\\"#\\\"\\n },\\n \\\"items\\\": {\\n \\\"anyOf\\\": [\\n {\\n \\\"$ref\\\": \\\"#\\\"\\n },\\n {\\n \\\"$ref\\\": \\\"#/definitions/schemaArray\\\"\\n }\\n ],\\n \\\"default\\\": true\\n },\\n \\\"maxItems\\\": {\\n \\\"$ref\\\": \\\"#/definitions/nonNegativeInteger\\\"\\n },\\n \\\"minItems\\\": {\\n \\\"$ref\\\": \\\"#/definitions/nonNegativeIntegerDefault0\\\"\\n },\\n \\\"uniqueItems\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"default\\\": false\\n },\\n \\\"contains\\\": {\\n \\\"$ref\\\": \\\"#\\\"\\n },\\n \\\"maxProperties\\\": {\\n \\\"$ref\\\": \\\"#/definitions/nonNegativeInteger\\\"\\n },\\n \\\"minProperties\\\": {\\n \\\"$ref\\\": \\\"#/definitions/nonNegativeIntegerDefault0\\\"\\n },\\n \\\"required\\\": {\\n \\\"$ref\\\": \\\"#/definitions/stringArray\\\"\\n },\\n \\\"additionalProperties\\\": {\\n \\\"$ref\\\": \\\"#\\\"\\n },\\n \\\"definitions\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": {\\n \\\"$ref\\\": \\\"#\\\"\\n },\\n \\\"default\\\": {}\\n },\\n \\\"properties\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": {\\n \\\"$ref\\\": \\\"#\\\"\\n },\\n \\\"default\\\": {}\\n },\\n \\\"patternProperties\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": {\\n \\\"$ref\\\": \\\"#\\\"\\n },\\n \\\"propertyNames\\\": {\\n \\\"format\\\": \\\"regex\\\"\\n },\\n \\\"default\\\": {}\\n },\\n \\\"dependencies\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": {\\n \\\"anyOf\\\": [\\n {\\n \\\"$ref\\\": \\\"#\\\"\\n },\\n {\\n \\\"$ref\\\": \\\"#/definitions/stringArray\\\"\\n }\\n ]\\n }\\n },\\n \\\"propertyNames\\\": {\\n \\\"$ref\\\": \\\"#\\\"\\n },\\n \\\"const\\\": true,\\n \\\"enum\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": true,\\n \\\"minItems\\\": 1,\\n \\\"uniqueItems\\\": true\\n },\\n \\\"type\\\": {\\n \\\"anyOf\\\": [\\n {\\n \\\"$ref\\\": \\\"#/definitions/simpleTypes\\\"\\n },\\n {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"#/definitions/simpleTypes\\\"\\n },\\n \\\"minItems\\\": 1,\\n \\\"uniqueItems\\\": true\\n }\\n ]\\n },\\n \\\"format\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"contentMediaType\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"contentEncoding\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"if\\\": {\\n \\\"$ref\\\": \\\"#\\\"\\n },\\n \\\"then\\\": {\\n \\\"$ref\\\": \\\"#\\\"\\n },\\n \\\"else\\\": {\\n \\\"$ref\\\": \\\"#\\\"\\n },\\n \\\"allOf\\\": {\\n \\\"$ref\\\": \\\"#/definitions/schemaArray\\\"\\n },\\n \\\"anyOf\\\": {\\n \\\"$ref\\\": \\\"#/definitions/schemaArray\\\"\\n },\\n \\\"oneOf\\\": {\\n \\\"$ref\\\": \\\"#/definitions/schemaArray\\\"\\n },\\n \\\"not\\\": {\\n \\\"$ref\\\": \\\"#\\\"\\n }\\n },\\n \\\"default\\\": true\\n}\\n\",\n \"schemas/crucible-ts/meta/draft-2019-09/meta/applicator.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2019-09/schema\\\",\\n \\\"$id\\\": \\\"https://json-schema.org/draft/2019-09/meta/applicator\\\",\\n \\\"$recursiveAnchor\\\": true,\\n \\\"title\\\": \\\"Applicator vocabulary meta-schema\\\",\\n \\\"type\\\": [\\n \\\"object\\\",\\n \\\"boolean\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"additionalItems\\\": {\\n \\\"$recursiveRef\\\": \\\"#\\\"\\n },\\n \\\"unevaluatedItems\\\": {\\n \\\"$recursiveRef\\\": \\\"#\\\"\\n },\\n \\\"items\\\": {\\n \\\"anyOf\\\": [\\n {\\n \\\"$recursiveRef\\\": \\\"#\\\"\\n },\\n {\\n \\\"$ref\\\": \\\"#/$defs/schemaArray\\\"\\n }\\n ]\\n },\\n \\\"contains\\\": {\\n \\\"$recursiveRef\\\": \\\"#\\\"\\n },\\n \\\"additionalProperties\\\": {\\n \\\"$recursiveRef\\\": \\\"#\\\"\\n },\\n \\\"unevaluatedProperties\\\": {\\n \\\"$recursiveRef\\\": \\\"#\\\"\\n },\\n \\\"properties\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": {\\n \\\"$recursiveRef\\\": \\\"#\\\"\\n },\\n \\\"default\\\": {}\\n },\\n \\\"patternProperties\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": {\\n \\\"$recursiveRef\\\": \\\"#\\\"\\n },\\n \\\"propertyNames\\\": {\\n \\\"format\\\": \\\"regex\\\"\\n },\\n \\\"default\\\": {}\\n },\\n \\\"dependentSchemas\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": {\\n \\\"$recursiveRef\\\": \\\"#\\\"\\n }\\n },\\n \\\"propertyNames\\\": {\\n \\\"$recursiveRef\\\": \\\"#\\\"\\n },\\n \\\"if\\\": {\\n \\\"$recursiveRef\\\": \\\"#\\\"\\n },\\n \\\"then\\\": {\\n \\\"$recursiveRef\\\": \\\"#\\\"\\n },\\n \\\"else\\\": {\\n \\\"$recursiveRef\\\": \\\"#\\\"\\n },\\n \\\"allOf\\\": {\\n \\\"$ref\\\": \\\"#/$defs/schemaArray\\\"\\n },\\n \\\"anyOf\\\": {\\n \\\"$ref\\\": \\\"#/$defs/schemaArray\\\"\\n },\\n \\\"oneOf\\\": {\\n \\\"$ref\\\": \\\"#/$defs/schemaArray\\\"\\n },\\n \\\"not\\\": {\\n \\\"$recursiveRef\\\": \\\"#\\\"\\n }\\n },\\n \\\"$defs\\\": {\\n \\\"schemaArray\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"minItems\\\": 1,\\n \\\"items\\\": {\\n \\\"$recursiveRef\\\": \\\"#\\\"\\n }\\n }\\n }\\n}\\n\",\n \"schemas/crucible-ts/meta/draft-2019-09/meta/content.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2019-09/schema\\\",\\n \\\"$id\\\": \\\"https://json-schema.org/draft/2019-09/meta/content\\\",\\n \\\"$recursiveAnchor\\\": true,\\n \\\"title\\\": \\\"Content vocabulary meta-schema\\\",\\n \\\"type\\\": [\\n \\\"object\\\",\\n \\\"boolean\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"contentMediaType\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"contentEncoding\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"contentSchema\\\": {\\n \\\"$recursiveRef\\\": \\\"#\\\"\\n }\\n }\\n}\\n\",\n \"schemas/crucible-ts/meta/draft-2019-09/meta/core.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2019-09/schema\\\",\\n \\\"$id\\\": \\\"https://json-schema.org/draft/2019-09/meta/core\\\",\\n \\\"$recursiveAnchor\\\": true,\\n \\\"title\\\": \\\"Core vocabulary meta-schema\\\",\\n \\\"type\\\": [\\n \\\"object\\\",\\n \\\"boolean\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"$id\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"uri-reference\\\",\\n \\\"$comment\\\": \\\"Non-empty fragments not allowed.\\\",\\n \\\"pattern\\\": \\\"^[^#]*#?$\\\"\\n },\\n \\\"$schema\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"uri\\\"\\n },\\n \\\"$anchor\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[A-Za-z][-A-Za-z0-9.:_]*$\\\"\\n },\\n \\\"$ref\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"uri-reference\\\"\\n },\\n \\\"$recursiveRef\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"uri-reference\\\"\\n },\\n \\\"$recursiveAnchor\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"default\\\": false\\n },\\n \\\"$vocabulary\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"propertyNames\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"uri\\\"\\n },\\n \\\"additionalProperties\\\": {\\n \\\"type\\\": \\\"boolean\\\"\\n }\\n },\\n \\\"$comment\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"$defs\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": {\\n \\\"$recursiveRef\\\": \\\"#\\\"\\n },\\n \\\"default\\\": {}\\n }\\n }\\n}\\n\",\n \"schemas/crucible-ts/meta/draft-2019-09/meta/format.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2019-09/schema\\\",\\n \\\"$id\\\": \\\"https://json-schema.org/draft/2019-09/meta/format\\\",\\n \\\"$recursiveAnchor\\\": true,\\n \\\"title\\\": \\\"Format vocabulary meta-schema\\\",\\n \\\"type\\\": [\\n \\\"object\\\",\\n \\\"boolean\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"format\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n }\\n}\\n\",\n \"schemas/crucible-ts/meta/draft-2019-09/meta/meta-data.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2019-09/schema\\\",\\n \\\"$id\\\": \\\"https://json-schema.org/draft/2019-09/meta/meta-data\\\",\\n \\\"$recursiveAnchor\\\": true,\\n \\\"title\\\": \\\"Meta-data vocabulary meta-schema\\\",\\n \\\"type\\\": [\\n \\\"object\\\",\\n \\\"boolean\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"title\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"default\\\": true,\\n \\\"deprecated\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"default\\\": false\\n },\\n \\\"readOnly\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"default\\\": false\\n },\\n \\\"writeOnly\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"default\\\": false\\n },\\n \\\"examples\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": true\\n }\\n }\\n}\\n\",\n \"schemas/crucible-ts/meta/draft-2019-09/meta/validation.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2019-09/schema\\\",\\n \\\"$id\\\": \\\"https://json-schema.org/draft/2019-09/meta/validation\\\",\\n \\\"$recursiveAnchor\\\": true,\\n \\\"title\\\": \\\"Validation vocabulary meta-schema\\\",\\n \\\"type\\\": [\\n \\\"object\\\",\\n \\\"boolean\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"multipleOf\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"exclusiveMinimum\\\": 0\\n },\\n \\\"maximum\\\": {\\n \\\"type\\\": \\\"number\\\"\\n },\\n \\\"exclusiveMaximum\\\": {\\n \\\"type\\\": \\\"number\\\"\\n },\\n \\\"minimum\\\": {\\n \\\"type\\\": \\\"number\\\"\\n },\\n \\\"exclusiveMinimum\\\": {\\n \\\"type\\\": \\\"number\\\"\\n },\\n \\\"maxLength\\\": {\\n \\\"$ref\\\": \\\"#/$defs/nonNegativeInteger\\\"\\n },\\n \\\"minLength\\\": {\\n \\\"$ref\\\": \\\"#/$defs/nonNegativeIntegerDefault0\\\"\\n },\\n \\\"pattern\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"regex\\\"\\n },\\n \\\"maxItems\\\": {\\n \\\"$ref\\\": \\\"#/$defs/nonNegativeInteger\\\"\\n },\\n \\\"minItems\\\": {\\n \\\"$ref\\\": \\\"#/$defs/nonNegativeIntegerDefault0\\\"\\n },\\n \\\"uniqueItems\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"default\\\": false\\n },\\n \\\"maxContains\\\": {\\n \\\"$ref\\\": \\\"#/$defs/nonNegativeInteger\\\"\\n },\\n \\\"minContains\\\": {\\n \\\"$ref\\\": \\\"#/$defs/nonNegativeInteger\\\",\\n \\\"default\\\": 1\\n },\\n \\\"maxProperties\\\": {\\n \\\"$ref\\\": \\\"#/$defs/nonNegativeInteger\\\"\\n },\\n \\\"minProperties\\\": {\\n \\\"$ref\\\": \\\"#/$defs/nonNegativeIntegerDefault0\\\"\\n },\\n \\\"required\\\": {\\n \\\"$ref\\\": \\\"#/$defs/stringArray\\\"\\n },\\n \\\"dependentRequired\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": {\\n \\\"$ref\\\": \\\"#/$defs/stringArray\\\"\\n }\\n },\\n \\\"const\\\": true,\\n \\\"enum\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": true\\n },\\n \\\"type\\\": {\\n \\\"anyOf\\\": [\\n {\\n \\\"$ref\\\": \\\"#/$defs/simpleTypes\\\"\\n },\\n {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"#/$defs/simpleTypes\\\"\\n },\\n \\\"minItems\\\": 1,\\n \\\"uniqueItems\\\": true\\n }\\n ]\\n }\\n },\\n \\\"$defs\\\": {\\n \\\"nonNegativeInteger\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0\\n },\\n \\\"nonNegativeIntegerDefault0\\\": {\\n \\\"$ref\\\": \\\"#/$defs/nonNegativeInteger\\\",\\n \\\"default\\\": 0\\n },\\n \\\"simpleTypes\\\": {\\n \\\"enum\\\": [\\n \\\"array\\\",\\n \\\"boolean\\\",\\n \\\"integer\\\",\\n \\\"null\\\",\\n \\\"number\\\",\\n \\\"object\\\",\\n \\\"string\\\"\\n ]\\n },\\n \\\"stringArray\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"uniqueItems\\\": true,\\n \\\"default\\\": []\\n }\\n }\\n}\\n\",\n \"schemas/crucible-ts/meta/draft-2019-09/offline.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2019-09/schema\\\",\\n \\\"$id\\\": \\\"https://json-schema.org/draft/2019-09/schema\\\",\\n \\\"title\\\": \\\"Offline meta-schema (subset)\\\",\\n \\\"description\\\": \\\"Subset of the JSON Schema 2019-09 meta-schema for offline validation.\\\",\\n \\\"type\\\": [\\n \\\"object\\\",\\n \\\"boolean\\\"\\n ],\\n \\\"$defs\\\": {\\n \\\"simpleType\\\": {\\n \\\"enum\\\": [\\n \\\"array\\\",\\n \\\"boolean\\\",\\n \\\"integer\\\",\\n \\\"null\\\",\\n \\\"number\\\",\\n \\\"object\\\",\\n \\\"string\\\"\\n ]\\n },\\n \\\"schemaArray\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"minItems\\\": 1,\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"#\\\"\\n }\\n },\\n \\\"stringArray\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"uniqueItems\\\": true,\\n \\\"default\\\": []\\n }\\n },\\n \\\"properties\\\": {\\n \\\"$id\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"$schema\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"$ref\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"$recursiveAnchor\\\": {\\n \\\"type\\\": [\\n \\\"boolean\\\",\\n \\\"string\\\"\\n ]\\n },\\n \\\"$recursiveRef\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"title\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"default\\\": {},\\n \\\"examples\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {}\\n },\\n \\\"type\\\": {\\n \\\"anyOf\\\": [\\n {\\n \\\"$ref\\\": \\\"#/$defs/simpleType\\\"\\n },\\n {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"#/$defs/simpleType\\\"\\n },\\n \\\"minItems\\\": 1,\\n \\\"uniqueItems\\\": true\\n }\\n ]\\n },\\n \\\"enum\\\": {\\n \\\"type\\\": \\\"array\\\"\\n },\\n \\\"allOf\\\": {\\n \\\"$ref\\\": \\\"#/$defs/schemaArray\\\"\\n },\\n \\\"anyOf\\\": {\\n \\\"$ref\\\": \\\"#/$defs/schemaArray\\\"\\n },\\n \\\"oneOf\\\": {\\n \\\"$ref\\\": \\\"#/$defs/schemaArray\\\"\\n },\\n \\\"not\\\": {\\n \\\"$ref\\\": \\\"#\\\"\\n },\\n \\\"definitions\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": {\\n \\\"$ref\\\": \\\"#\\\"\\n },\\n \\\"default\\\": {}\\n },\\n \\\"$defs\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": {\\n \\\"$ref\\\": \\\"#\\\"\\n },\\n \\\"default\\\": {}\\n },\\n \\\"properties\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": {\\n \\\"$ref\\\": \\\"#\\\"\\n },\\n \\\"default\\\": {}\\n },\\n \\\"items\\\": {\\n \\\"anyOf\\\": [\\n {\\n \\\"$ref\\\": \\\"#\\\"\\n },\\n {\\n \\\"$ref\\\": \\\"#/$defs/schemaArray\\\"\\n }\\n ],\\n \\\"default\\\": {}\\n },\\n \\\"required\\\": {\\n \\\"$ref\\\": \\\"#/$defs/stringArray\\\"\\n },\\n \\\"dependencies\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": {\\n \\\"anyOf\\\": [\\n {\\n \\\"$ref\\\": \\\"#\\\"\\n },\\n {\\n \\\"$ref\\\": \\\"#/$defs/stringArray\\\"\\n }\\n ]\\n },\\n \\\"default\\\": {}\\n }\\n }\\n}\\n\",\n \"schemas/crucible-ts/meta/draft-2019-09/schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2019-09/schema\\\",\\n \\\"$id\\\": \\\"https://json-schema.org/draft/2019-09/schema\\\",\\n \\\"$vocabulary\\\": {\\n \\\"https://json-schema.org/draft/2019-09/vocab/core\\\": true,\\n \\\"https://json-schema.org/draft/2019-09/vocab/applicator\\\": true,\\n \\\"https://json-schema.org/draft/2019-09/vocab/validation\\\": true,\\n \\\"https://json-schema.org/draft/2019-09/vocab/meta-data\\\": true,\\n \\\"https://json-schema.org/draft/2019-09/vocab/format\\\": false,\\n \\\"https://json-schema.org/draft/2019-09/vocab/content\\\": true\\n },\\n \\\"$recursiveAnchor\\\": true,\\n \\\"title\\\": \\\"Core and Validation specifications meta-schema\\\",\\n \\\"allOf\\\": [\\n {\\n \\\"$ref\\\": \\\"meta/core\\\"\\n },\\n {\\n \\\"$ref\\\": \\\"meta/applicator\\\"\\n },\\n {\\n \\\"$ref\\\": \\\"meta/validation\\\"\\n },\\n {\\n \\\"$ref\\\": \\\"meta/meta-data\\\"\\n },\\n {\\n \\\"$ref\\\": \\\"meta/format\\\"\\n },\\n {\\n \\\"$ref\\\": \\\"meta/content\\\"\\n }\\n ],\\n \\\"type\\\": [\\n \\\"object\\\",\\n \\\"boolean\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"definitions\\\": {\\n \\\"$comment\\\": \\\"While no longer an official keyword as it is replaced by $defs, this keyword is retained in the meta-schema to prevent incompatible extensions as it remains in common use.\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": {\\n \\\"$recursiveRef\\\": \\\"#\\\"\\n },\\n \\\"default\\\": {}\\n },\\n \\\"dependencies\\\": {\\n \\\"$comment\\\": \\\"\\\\\\\"dependencies\\\\\\\" is no longer a keyword, but schema authors should avoid redefining it to facilitate a smooth transition to \\\\\\\"dependentSchemas\\\\\\\" and \\\\\\\"dependentRequired\\\\\\\"\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": {\\n \\\"anyOf\\\": [\\n {\\n \\\"$recursiveRef\\\": \\\"#\\\"\\n },\\n {\\n \\\"$ref\\\": \\\"meta/validation#/$defs/stringArray\\\"\\n }\\n ]\\n }\\n }\\n }\\n}\\n\",\n \"schemas/crucible-ts/meta/draft-2020-12/meta/applicator.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://json-schema.org/draft/2020-12/meta/applicator\\\",\\n \\\"$dynamicAnchor\\\": \\\"meta\\\",\\n \\\"title\\\": \\\"Applicator vocabulary meta-schema\\\",\\n \\\"type\\\": [\\n \\\"object\\\",\\n \\\"boolean\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"prefixItems\\\": {\\n \\\"$ref\\\": \\\"#/$defs/schemaArray\\\"\\n },\\n \\\"items\\\": {\\n \\\"$dynamicRef\\\": \\\"#meta\\\"\\n },\\n \\\"contains\\\": {\\n \\\"$dynamicRef\\\": \\\"#meta\\\"\\n },\\n \\\"additionalProperties\\\": {\\n \\\"$dynamicRef\\\": \\\"#meta\\\"\\n },\\n \\\"properties\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": {\\n \\\"$dynamicRef\\\": \\\"#meta\\\"\\n },\\n \\\"default\\\": {}\\n },\\n \\\"patternProperties\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": {\\n \\\"$dynamicRef\\\": \\\"#meta\\\"\\n },\\n \\\"propertyNames\\\": {\\n \\\"format\\\": \\\"regex\\\"\\n },\\n \\\"default\\\": {}\\n },\\n \\\"dependentSchemas\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": {\\n \\\"$dynamicRef\\\": \\\"#meta\\\"\\n },\\n \\\"default\\\": {}\\n },\\n \\\"propertyNames\\\": {\\n \\\"$dynamicRef\\\": \\\"#meta\\\"\\n },\\n \\\"if\\\": {\\n \\\"$dynamicRef\\\": \\\"#meta\\\"\\n },\\n \\\"then\\\": {\\n \\\"$dynamicRef\\\": \\\"#meta\\\"\\n },\\n \\\"else\\\": {\\n \\\"$dynamicRef\\\": \\\"#meta\\\"\\n },\\n \\\"allOf\\\": {\\n \\\"$ref\\\": \\\"#/$defs/schemaArray\\\"\\n },\\n \\\"anyOf\\\": {\\n \\\"$ref\\\": \\\"#/$defs/schemaArray\\\"\\n },\\n \\\"oneOf\\\": {\\n \\\"$ref\\\": \\\"#/$defs/schemaArray\\\"\\n },\\n \\\"not\\\": {\\n \\\"$dynamicRef\\\": \\\"#meta\\\"\\n }\\n },\\n \\\"$defs\\\": {\\n \\\"schemaArray\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"minItems\\\": 1,\\n \\\"items\\\": {\\n \\\"$dynamicRef\\\": \\\"#meta\\\"\\n }\\n }\\n }\\n}\\n\",\n \"schemas/crucible-ts/meta/draft-2020-12/meta/content.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://json-schema.org/draft/2020-12/meta/content\\\",\\n \\\"$dynamicAnchor\\\": \\\"meta\\\",\\n \\\"title\\\": \\\"Content vocabulary meta-schema\\\",\\n \\\"type\\\": [\\n \\\"object\\\",\\n \\\"boolean\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"contentEncoding\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"contentMediaType\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"contentSchema\\\": {\\n \\\"$dynamicRef\\\": \\\"#meta\\\"\\n }\\n }\\n}\\n\",\n \"schemas/crucible-ts/meta/draft-2020-12/meta/core.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://json-schema.org/draft/2020-12/meta/core\\\",\\n \\\"$dynamicAnchor\\\": \\\"meta\\\",\\n \\\"title\\\": \\\"Core vocabulary meta-schema\\\",\\n \\\"type\\\": [\\n \\\"object\\\",\\n \\\"boolean\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"$id\\\": {\\n \\\"$ref\\\": \\\"#/$defs/uriReferenceString\\\",\\n \\\"$comment\\\": \\\"Non-empty fragments not allowed.\\\",\\n \\\"pattern\\\": \\\"^[^#]*#?$\\\"\\n },\\n \\\"$schema\\\": {\\n \\\"$ref\\\": \\\"#/$defs/uriString\\\"\\n },\\n \\\"$ref\\\": {\\n \\\"$ref\\\": \\\"#/$defs/uriReferenceString\\\"\\n },\\n \\\"$anchor\\\": {\\n \\\"$ref\\\": \\\"#/$defs/anchorString\\\"\\n },\\n \\\"$dynamicRef\\\": {\\n \\\"$ref\\\": \\\"#/$defs/uriReferenceString\\\"\\n },\\n \\\"$dynamicAnchor\\\": {\\n \\\"$ref\\\": \\\"#/$defs/anchorString\\\"\\n },\\n \\\"$vocabulary\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"propertyNames\\\": {\\n \\\"$ref\\\": \\\"#/$defs/uriString\\\"\\n },\\n \\\"additionalProperties\\\": {\\n \\\"type\\\": \\\"boolean\\\"\\n }\\n },\\n \\\"$comment\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"$defs\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": {\\n \\\"$dynamicRef\\\": \\\"#meta\\\"\\n }\\n }\\n },\\n \\\"$defs\\\": {\\n \\\"anchorString\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[A-Za-z_][-A-Za-z0-9._]*$\\\"\\n },\\n \\\"uriString\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"uri\\\"\\n },\\n \\\"uriReferenceString\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"uri-reference\\\"\\n }\\n }\\n}\\n\",\n \"schemas/crucible-ts/meta/draft-2020-12/meta/format-annotation.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://json-schema.org/draft/2020-12/meta/format-annotation\\\",\\n \\\"$dynamicAnchor\\\": \\\"meta\\\",\\n \\\"title\\\": \\\"Format vocabulary meta-schema for annotation results\\\",\\n \\\"type\\\": [\\n \\\"object\\\",\\n \\\"boolean\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"format\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n }\\n}\\n\",\n \"schemas/crucible-ts/meta/draft-2020-12/meta/meta-data.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://json-schema.org/draft/2020-12/meta/meta-data\\\",\\n \\\"$dynamicAnchor\\\": \\\"meta\\\",\\n \\\"title\\\": \\\"Meta-data vocabulary meta-schema\\\",\\n \\\"type\\\": [\\n \\\"object\\\",\\n \\\"boolean\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"title\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"default\\\": true,\\n \\\"deprecated\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"default\\\": false\\n },\\n \\\"readOnly\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"default\\\": false\\n },\\n \\\"writeOnly\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"default\\\": false\\n },\\n \\\"examples\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": true\\n }\\n }\\n}\\n\",\n \"schemas/crucible-ts/meta/draft-2020-12/meta/unevaluated.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://json-schema.org/draft/2020-12/meta/unevaluated\\\",\\n \\\"$dynamicAnchor\\\": \\\"meta\\\",\\n \\\"title\\\": \\\"Unevaluated applicator vocabulary meta-schema\\\",\\n \\\"type\\\": [\\n \\\"object\\\",\\n \\\"boolean\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"unevaluatedItems\\\": {\\n \\\"$dynamicRef\\\": \\\"#meta\\\"\\n },\\n \\\"unevaluatedProperties\\\": {\\n \\\"$dynamicRef\\\": \\\"#meta\\\"\\n }\\n }\\n}\\n\",\n \"schemas/crucible-ts/meta/draft-2020-12/meta/validation.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://json-schema.org/draft/2020-12/meta/validation\\\",\\n \\\"$dynamicAnchor\\\": \\\"meta\\\",\\n \\\"title\\\": \\\"Validation vocabulary meta-schema\\\",\\n \\\"type\\\": [\\n \\\"object\\\",\\n \\\"boolean\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"type\\\": {\\n \\\"anyOf\\\": [\\n {\\n \\\"$ref\\\": \\\"#/$defs/simpleTypes\\\"\\n },\\n {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"#/$defs/simpleTypes\\\"\\n },\\n \\\"minItems\\\": 1,\\n \\\"uniqueItems\\\": true\\n }\\n ]\\n },\\n \\\"const\\\": true,\\n \\\"enum\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": true\\n },\\n \\\"multipleOf\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"exclusiveMinimum\\\": 0\\n },\\n \\\"maximum\\\": {\\n \\\"type\\\": \\\"number\\\"\\n },\\n \\\"exclusiveMaximum\\\": {\\n \\\"type\\\": \\\"number\\\"\\n },\\n \\\"minimum\\\": {\\n \\\"type\\\": \\\"number\\\"\\n },\\n \\\"exclusiveMinimum\\\": {\\n \\\"type\\\": \\\"number\\\"\\n },\\n \\\"maxLength\\\": {\\n \\\"$ref\\\": \\\"#/$defs/nonNegativeInteger\\\"\\n },\\n \\\"minLength\\\": {\\n \\\"$ref\\\": \\\"#/$defs/nonNegativeIntegerDefault0\\\"\\n },\\n \\\"pattern\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"regex\\\"\\n },\\n \\\"maxItems\\\": {\\n \\\"$ref\\\": \\\"#/$defs/nonNegativeInteger\\\"\\n },\\n \\\"minItems\\\": {\\n \\\"$ref\\\": \\\"#/$defs/nonNegativeIntegerDefault0\\\"\\n },\\n \\\"uniqueItems\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"default\\\": false\\n },\\n \\\"maxContains\\\": {\\n \\\"$ref\\\": \\\"#/$defs/nonNegativeInteger\\\"\\n },\\n \\\"minContains\\\": {\\n \\\"$ref\\\": \\\"#/$defs/nonNegativeInteger\\\",\\n \\\"default\\\": 1\\n },\\n \\\"maxProperties\\\": {\\n \\\"$ref\\\": \\\"#/$defs/nonNegativeInteger\\\"\\n },\\n \\\"minProperties\\\": {\\n \\\"$ref\\\": \\\"#/$defs/nonNegativeIntegerDefault0\\\"\\n },\\n \\\"required\\\": {\\n \\\"$ref\\\": \\\"#/$defs/stringArray\\\"\\n },\\n \\\"dependentRequired\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": {\\n \\\"$ref\\\": \\\"#/$defs/stringArray\\\"\\n }\\n }\\n },\\n \\\"$defs\\\": {\\n \\\"nonNegativeInteger\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0\\n },\\n \\\"nonNegativeIntegerDefault0\\\": {\\n \\\"$ref\\\": \\\"#/$defs/nonNegativeInteger\\\",\\n \\\"default\\\": 0\\n },\\n \\\"simpleTypes\\\": {\\n \\\"enum\\\": [\\n \\\"array\\\",\\n \\\"boolean\\\",\\n \\\"integer\\\",\\n \\\"null\\\",\\n \\\"number\\\",\\n \\\"object\\\",\\n \\\"string\\\"\\n ]\\n },\\n \\\"stringArray\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"uniqueItems\\\": true,\\n \\\"default\\\": []\\n }\\n }\\n}\\n\",\n \"schemas/crucible-ts/meta/draft-2020-12/schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$vocabulary\\\": {\\n \\\"https://json-schema.org/draft/2020-12/vocab/core\\\": true,\\n \\\"https://json-schema.org/draft/2020-12/vocab/applicator\\\": true,\\n \\\"https://json-schema.org/draft/2020-12/vocab/unevaluated\\\": true,\\n \\\"https://json-schema.org/draft/2020-12/vocab/validation\\\": true,\\n \\\"https://json-schema.org/draft/2020-12/vocab/meta-data\\\": true,\\n \\\"https://json-schema.org/draft/2020-12/vocab/format-annotation\\\": true,\\n \\\"https://json-schema.org/draft/2020-12/vocab/content\\\": true\\n },\\n \\\"$dynamicAnchor\\\": \\\"meta\\\",\\n \\\"title\\\": \\\"Core and Validation specifications meta-schema\\\",\\n \\\"allOf\\\": [\\n {\\n \\\"$ref\\\": \\\"meta/core\\\"\\n },\\n {\\n \\\"$ref\\\": \\\"meta/applicator\\\"\\n },\\n {\\n \\\"$ref\\\": \\\"meta/unevaluated\\\"\\n },\\n {\\n \\\"$ref\\\": \\\"meta/validation\\\"\\n },\\n {\\n \\\"$ref\\\": \\\"meta/meta-data\\\"\\n },\\n {\\n \\\"$ref\\\": \\\"meta/format-annotation\\\"\\n },\\n {\\n \\\"$ref\\\": \\\"meta/content\\\"\\n }\\n ],\\n \\\"type\\\": [\\n \\\"object\\\",\\n \\\"boolean\\\"\\n ],\\n \\\"$comment\\\": \\\"This meta-schema also defines keywords that have appeared in previous drafts in order to prevent incompatible extensions as they remain in common use.\\\",\\n \\\"properties\\\": {\\n \\\"definitions\\\": {\\n \\\"$comment\\\": \\\"\\\\\\\"definitions\\\\\\\" has been replaced by \\\\\\\"$defs\\\\\\\".\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": {\\n \\\"$dynamicRef\\\": \\\"#meta\\\"\\n },\\n \\\"deprecated\\\": true,\\n \\\"default\\\": {}\\n },\\n \\\"dependencies\\\": {\\n \\\"$comment\\\": \\\"\\\\\\\"dependencies\\\\\\\" has been split and replaced by \\\\\\\"dependentSchemas\\\\\\\" and \\\\\\\"dependentRequired\\\\\\\" in order to serve their differing semantics.\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": {\\n \\\"anyOf\\\": [\\n {\\n \\\"$dynamicRef\\\": \\\"#meta\\\"\\n },\\n {\\n \\\"$ref\\\": \\\"meta/validation#/$defs/stringArray\\\"\\n }\\n ]\\n },\\n \\\"deprecated\\\": true,\\n \\\"default\\\": {}\\n },\\n \\\"$recursiveAnchor\\\": {\\n \\\"$comment\\\": \\\"\\\\\\\"$recursiveAnchor\\\\\\\" has been replaced by \\\\\\\"$dynamicAnchor\\\\\\\".\\\",\\n \\\"$ref\\\": \\\"meta/core#/$defs/anchorString\\\",\\n \\\"deprecated\\\": true\\n },\\n \\\"$recursiveRef\\\": {\\n \\\"$comment\\\": \\\"\\\\\\\"$recursiveRef\\\\\\\" has been replaced by \\\\\\\"$dynamicRef\\\\\\\".\\\",\\n \\\"$ref\\\": \\\"meta/core#/$defs/uriReferenceString\\\",\\n \\\"deprecated\\\": true\\n }\\n }\\n}\\n\",\n },\n};\n\nexport default manifest;\n","// AUTO-GENERATED by scripts/embed-assets.ts. DO NOT EDIT.\n// Run `make embed-assets` to regenerate after `make sync-ssot`.\n// Domain: schemas (114 assets)\nimport type { EmbeddedAssetManifest } from \"../types.js\";\n\nexport const manifest: EmbeddedAssetManifest = {\n domain: \"schemas\",\n files: {\n \"schemas/crucible-ts/ascii/v1.0.0/box-chars.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/ascii/box-chars-v1.0.0.json\\\",\\n \\\"title\\\": \\\"BoxChars\\\",\\n \\\"description\\\": \\\"Characters used for drawing ASCII boxes and borders\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"topLeft\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Top-left corner character\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 1\\n },\\n \\\"topRight\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Top-right corner character\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 1\\n },\\n \\\"bottomLeft\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Bottom-left corner character\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 1\\n },\\n \\\"bottomRight\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Bottom-right corner character\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 1\\n },\\n \\\"horizontal\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Horizontal line character\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 1\\n },\\n \\\"vertical\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Vertical line character\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 1\\n },\\n \\\"cross\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Cross/intersection character\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 1\\n }\\n },\\n \\\"required\\\": [\\n \\\"topLeft\\\",\\n \\\"topRight\\\",\\n \\\"bottomLeft\\\",\\n \\\"bottomRight\\\",\\n \\\"horizontal\\\",\\n \\\"vertical\\\",\\n \\\"cross\\\"\\n ]\\n}\\n\",\n \"schemas/crucible-ts/ascii/v1.0.0/string-analysis.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/ascii/string-analysis-v1.0.0.json\\\",\\n \\\"title\\\": \\\"StringAnalysis\\\",\\n \\\"description\\\": \\\"Analysis results for string properties including Unicode-aware width calculation\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"length\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"description\\\": \\\"Total character length of the string\\\"\\n },\\n \\\"width\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"description\\\": \\\"Display width accounting for Unicode characters\\\"\\n },\\n \\\"hasUnicode\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Whether the string contains Unicode characters\\\"\\n },\\n \\\"lineCount\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"description\\\": \\\"Number of lines in the string\\\"\\n },\\n \\\"wordCount\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"description\\\": \\\"Number of words in the string\\\"\\n },\\n \\\"isMultiline\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Whether the string contains multiple lines\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"length\\\",\\n \\\"width\\\",\\n \\\"hasUnicode\\\",\\n \\\"lineCount\\\",\\n \\\"wordCount\\\",\\n \\\"isMultiline\\\"\\n ]\\n}\\n\",\n \"schemas/crucible-ts/assessment/v1.0.0/severity-definitions.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/assessment/severity-definitions-v1.0.0.json\\\",\\n \\\"title\\\": \\\"Assessment Severity Definitions\\\",\\n \\\"description\\\": \\\"Shared severity definitions for assessment and analysis tooling.\\\",\\n \\\"$comment\\\": \\\"Implementations MUST compare severities using severityLevel, not lexical ordering of severityName.\\\",\\n \\\"$defs\\\": {\\n \\\"severityName\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"info\\\",\\n \\\"low\\\",\\n \\\"medium\\\",\\n \\\"high\\\",\\n \\\"critical\\\"\\n ],\\n \\\"description\\\": \\\"Assessment severity name from lowest (info) to highest (critical).\\\"\\n },\\n \\\"severityLevel\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"enum\\\": [\\n 0,\\n 1,\\n 2,\\n 3,\\n 4\\n ],\\n \\\"description\\\": \\\"Numeric severity level for sorting and comparison (info=0, critical=4).\\\"\\n },\\n \\\"severityMapping\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Canonical mapping of severity names to numeric levels.\\\",\\n \\\"additionalProperties\\\": false,\\n \\\"properties\\\": {\\n \\\"info\\\": {\\n \\\"const\\\": 0\\n },\\n \\\"low\\\": {\\n \\\"const\\\": 1\\n },\\n \\\"medium\\\": {\\n \\\"const\\\": 2\\n },\\n \\\"high\\\": {\\n \\\"const\\\": 3\\n },\\n \\\"critical\\\": {\\n \\\"const\\\": 4\\n }\\n },\\n \\\"required\\\": [\\n \\\"info\\\",\\n \\\"low\\\",\\n \\\"medium\\\",\\n \\\"high\\\",\\n \\\"critical\\\"\\n ]\\n }\\n }\\n}\\n\",\n \"schemas/crucible-ts/config/fulmen-ecosystem/v1.0.0/fulmen-config-paths.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/config/fulmen-ecosystem/fulmen-config-paths-v1.0.0.json\\\",\\n \\\"title\\\": \\\"Fulmen Config Paths\\\",\\n \\\"description\\\": \\\"Describes shared configuration directories for Fulmen tools\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"platforms\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"version\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Schema version or manifest revision\\\"\\n },\\n \\\"platforms\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": false,\\n \\\"required\\\": [\\n \\\"linux\\\",\\n \\\"macos\\\",\\n \\\"windows\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"linux\\\": {\\n \\\"$ref\\\": \\\"#/definitions/platformPaths\\\"\\n },\\n \\\"macos\\\": {\\n \\\"$ref\\\": \\\"#/definitions/platformPaths\\\"\\n },\\n \\\"windows\\\": {\\n \\\"$ref\\\": \\\"#/definitions/platformPaths\\\"\\n }\\n }\\n }\\n },\\n \\\"definitions\\\": {\\n \\\"platformPaths\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"config\\\",\\n \\\"data\\\",\\n \\\"cache\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"config\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Default configuration directory\\\"\\n },\\n \\\"data\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Default data directory\\\"\\n },\\n \\\"cache\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Default cache directory\\\"\\n }\\n },\\n \\\"additionalProperties\\\": false\\n }\\n }\\n}\\n\",\n \"schemas/crucible-ts/config/repository-category/codex/v1.0.0/codex-config.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/config/repository-category/codex/v1.0.0/codex-config.schema.json\\\",\\n \\\"title\\\": \\\"Codex Configuration Schema\\\",\\n \\\"description\\\": \\\"Configuration schema for Fulmen codex templates (documentation sites, schema registries, knowledge hubs)\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"project\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"project\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Project metadata and configuration\\\",\\n \\\"required\\\": [\\n \\\"name\\\",\\n \\\"type\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"name\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Full formal name of the codex (e.g., 'Forge Codex Pulsar', 'Specomate Schema Registry')\\\",\\n \\\"minLength\\\": 1,\\n \\\"examples\\\": [\\n \\\"Forge Codex Pulsar\\\",\\n \\\"My Documentation Hub\\\"\\n ]\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Brief description of the codex purpose\\\",\\n \\\"examples\\\": [\\n \\\"Production-grade documentation and knowledge hub\\\",\\n \\\"API reference documentation\\\"\\n ]\\n },\\n \\\"type\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"codex\\\",\\n \\\"registry\\\",\\n \\\"docs\\\"\\n ],\\n \\\"description\\\": \\\"Type of codex site: codex (general knowledge hub), registry (schema/API catalog), docs (product documentation)\\\",\\n \\\"default\\\": \\\"codex\\\"\\n },\\n \\\"baseUrl\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"uri\\\",\\n \\\"description\\\": \\\"Base URL for the deployed site (used for $id generation, sitemaps, canonical URLs)\\\",\\n \\\"examples\\\": [\\n \\\"https://docs.example.dev\\\",\\n \\\"https://schemas.fulmenhq.dev\\\"\\n ]\\n }\\n }\\n },\\n \\\"extensions\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"List of enabled extensions (pluggable features for specialized functionality)\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"schema-registry\\\"\\n ],\\n \\\"description\\\": \\\"Extension name (governed by Crucible; new extensions added via standard process)\\\"\\n },\\n \\\"default\\\": [],\\n \\\"uniqueItems\\\": true,\\n \\\"examples\\\": [\\n [\\n \\\"schema-registry\\\"\\n ],\\n []\\n ]\\n },\\n \\\"schemaRegistry\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Schema registry extension configuration (active when 'schema-registry' in extensions array)\\\",\\n \\\"properties\\\": {\\n \\\"enabled\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Enable schema registry features (redundant with extensions array; deprecated in v2)\\\",\\n \\\"default\\\": false,\\n \\\"deprecated\\\": true\\n },\\n \\\"baseUrl\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"uri\\\",\\n \\\"description\\\": \\\"Base URL for schema $id URLs (defaults to project.baseUrl if not specified)\\\",\\n \\\"examples\\\": [\\n \\\"https://schemas.example.dev\\\"\\n ]\\n },\\n \\\"formats\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Supported schema formats\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"json-schema\\\",\\n \\\"openapi\\\",\\n \\\"asyncapi\\\"\\n ]\\n },\\n \\\"default\\\": [\\n \\\"json-schema\\\"\\n ],\\n \\\"uniqueItems\\\": true\\n },\\n \\\"sourcePaths\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Paths to schema source directories (relative to project root)\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[^/].*[^/]$\\\"\\n },\\n \\\"default\\\": [\\n \\\"schemas/\\\"\\n ],\\n \\\"examples\\\": [\\n [\\n \\\"schemas/\\\"\\n ],\\n [\\n \\\"src/schemas/\\\",\\n \\\"external/schemas/\\\"\\n ]\\n ]\\n },\\n \\\"catalogOutput\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Output path for catalog manifest (relative to build output)\\\",\\n \\\"default\\\": \\\"catalog/index.json\\\",\\n \\\"examples\\\": [\\n \\\"catalog/index.json\\\",\\n \\\"public/catalog.json\\\"\\n ]\\n },\\n \\\"validation\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Schema validation options\\\",\\n \\\"properties\\\": {\\n \\\"enforceIdMatch\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Fail build if schema $id doesn't match canonical URL pattern\\\",\\n \\\"default\\\": true\\n },\\n \\\"strictMode\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Enable strict validation rules (no additional properties, etc.)\\\",\\n \\\"default\\\": true\\n }\\n },\\n \\\"default\\\": {\\n \\\"enforceIdMatch\\\": true,\\n \\\"strictMode\\\": true\\n }\\n },\\n \\\"smokeTests\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Post-deploy smoke test configuration\\\",\\n \\\"properties\\\": {\\n \\\"enabled\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Run smoke tests after deployment (validates schemas are accessible)\\\",\\n \\\"default\\\": false\\n },\\n \\\"sampleSize\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"description\\\": \\\"Number of random schemas to test\\\",\\n \\\"minimum\\\": 1,\\n \\\"maximum\\\": 100,\\n \\\"default\\\": 10\\n }\\n }\\n }\\n }\\n },\\n \\\"features\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Core feature configuration (available to all codex templates)\\\",\\n \\\"properties\\\": {\\n \\\"search\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Search functionality configuration\\\",\\n \\\"properties\\\": {\\n \\\"provider\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"starlight-default\\\",\\n \\\"algolia\\\",\\n \\\"pagefind\\\"\\n ],\\n \\\"description\\\": \\\"Search provider to use\\\",\\n \\\"default\\\": \\\"starlight-default\\\"\\n },\\n \\\"algolia\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Algolia DocSearch configuration (required when provider=algolia)\\\",\\n \\\"properties\\\": {\\n \\\"appId\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Algolia application ID\\\"\\n },\\n \\\"apiKey\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Algolia search-only API key\\\"\\n },\\n \\\"indexName\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Algolia index name\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"appId\\\",\\n \\\"apiKey\\\",\\n \\\"indexName\\\"\\n ]\\n }\\n }\\n },\\n \\\"i18n\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Internationalization configuration\\\",\\n \\\"properties\\\": {\\n \\\"enabled\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Enable multi-language support\\\",\\n \\\"default\\\": false\\n },\\n \\\"defaultLocale\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Default locale code (ISO 639-1 or BCP 47)\\\",\\n \\\"default\\\": \\\"en\\\",\\n \\\"pattern\\\": \\\"^[a-z]{2}(-[A-Z]{2})?$\\\",\\n \\\"examples\\\": [\\n \\\"en\\\",\\n \\\"es\\\",\\n \\\"fr\\\",\\n \\\"en-US\\\"\\n ]\\n },\\n \\\"locales\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Supported locale codes\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[a-z]{2}(-[A-Z]{2})?$\\\"\\n },\\n \\\"uniqueItems\\\": true,\\n \\\"examples\\\": [\\n [\\n \\\"en\\\",\\n \\\"es\\\",\\n \\\"fr\\\"\\n ]\\n ]\\n }\\n }\\n },\\n \\\"analytics\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Analytics integration configuration\\\",\\n \\\"properties\\\": {\\n \\\"enabled\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Enable analytics\\\",\\n \\\"default\\\": false\\n },\\n \\\"provider\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"plausible\\\",\\n \\\"umami\\\",\\n \\\"google-analytics\\\"\\n ],\\n \\\"description\\\": \\\"Analytics provider (privacy-respecting options preferred)\\\"\\n },\\n \\\"siteId\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Analytics site/property ID\\\"\\n }\\n }\\n }\\n }\\n }\\n }\\n}\\n\",\n \"schemas/crucible-ts/config/repository/app-identity/v1.0.0/app-identity.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/config/repository/app-identity/v1.0.0/app-identity.schema.json\\\",\\n \\\"title\\\": \\\"Fulmen Application Identity\\\",\\n \\\"description\\\": \\\"Application identity metadata for Fulmen ecosystem projects\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"app\\\"\\n ],\\n \\\"additionalProperties\\\": false,\\n \\\"properties\\\": {\\n \\\"app\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"binary_name\\\",\\n \\\"vendor\\\",\\n \\\"env_prefix\\\",\\n \\\"config_name\\\",\\n \\\"description\\\"\\n ],\\n \\\"additionalProperties\\\": false,\\n \\\"properties\\\": {\\n \\\"binary_name\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[a-z][a-z0-9-]{0,62}[a-z0-9]$\\\",\\n \\\"minLength\\\": 2,\\n \\\"maxLength\\\": 64,\\n \\\"description\\\": \\\"Lowercase slug for binary/executable name (kebab-case)\\\"\\n },\\n \\\"vendor\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[a-z0-9]{2,64}$\\\",\\n \\\"minLength\\\": 2,\\n \\\"maxLength\\\": 64,\\n \\\"description\\\": \\\"Lowercase vendor namespace (alphanumeric only, no hyphens). Leading digits permitted - vendor is used for filesystem paths and config directories, not language-specific package imports. Examples: 'fulmenhq', '3leaps', '37signals'.\\\"\\n },\\n \\\"env_prefix\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[A-Z][A-Z0-9_]*_$\\\",\\n \\\"minLength\\\": 2,\\n \\\"maxLength\\\": 64,\\n \\\"description\\\": \\\"Uppercase environment variable prefix (must end with underscore)\\\"\\n },\\n \\\"config_name\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[a-z][a-z0-9-]{0,62}[a-z0-9]$\\\",\\n \\\"minLength\\\": 2,\\n \\\"maxLength\\\": 64,\\n \\\"description\\\": \\\"Filesystem-safe config directory name (usually matches binary_name)\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"minLength\\\": 10,\\n \\\"maxLength\\\": 200,\\n \\\"description\\\": \\\"One-line description of the application\\\"\\n }\\n }\\n },\\n \\\"metadata\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": true,\\n \\\"properties\\\": {\\n \\\"project_url\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"uri\\\",\\n \\\"description\\\": \\\"Primary project URL (repository, documentation site)\\\"\\n },\\n \\\"support_email\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"email\\\",\\n \\\"description\\\": \\\"Support/contact email for the project\\\"\\n },\\n \\\"license\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"SPDX license identifier (e.g., MIT, Apache-2.0)\\\"\\n },\\n \\\"repository_category\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"cli\\\",\\n \\\"workhorse\\\",\\n \\\"service\\\",\\n \\\"library\\\",\\n \\\"pipeline\\\",\\n \\\"codex\\\",\\n \\\"sdk\\\"\\n ],\\n \\\"description\\\": \\\"Repository category from Fulmen taxonomy\\\"\\n },\\n \\\"registry_id\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"uuid\\\",\\n \\\"description\\\": \\\"Optional UUIDv7 for future registry/orchestration (experimental)\\\"\\n },\\n \\\"telemetry_namespace\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[a-z][a-z0-9_]{0,62}[a-z0-9]$\\\",\\n \\\"description\\\": \\\"Namespace for metrics/logging (defaults to binary_name if not specified)\\\"\\n },\\n \\\"python\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": false,\\n \\\"properties\\\": {\\n \\\"distribution_name\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[a-z][a-z0-9-]{0,62}[a-z0-9]$\\\",\\n \\\"description\\\": \\\"PyPI distribution name (for setup.py/pyproject.toml)\\\"\\n },\\n \\\"package_name\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[a-z][a-z0-9_]{0,62}[a-z0-9]$\\\",\\n \\\"description\\\": \\\"Python import package name (must be valid Python identifier)\\\"\\n },\\n \\\"console_scripts\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"name\\\",\\n \\\"entry_point\\\"\\n ],\\n \\\"additionalProperties\\\": false,\\n \\\"properties\\\": {\\n \\\"name\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Console script command name\\\"\\n },\\n \\\"entry_point\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Python entry point (module:function)\\\"\\n }\\n }\\n },\\n \\\"description\\\": \\\"Console script entry points for setup.py/pyproject.toml\\\"\\n }\\n },\\n \\\"description\\\": \\\"Python-specific packaging metadata (optional, for PyPI projects)\\\"\\n },\\n \\\"typescript\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": false,\\n \\\"properties\\\": {\\n \\\"package_name\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^(?:@[a-z0-9][a-z0-9._-]*/)?[a-z0-9][a-z0-9._-]*$\\\",\\n \\\"description\\\": \\\"npm package name (scoped or unscoped, e.g. @fulmenhq/tsfulmen)\\\"\\n },\\n \\\"console_scripts\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"name\\\",\\n \\\"entry_point\\\"\\n ],\\n \\\"additionalProperties\\\": false,\\n \\\"properties\\\": {\\n \\\"name\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Bin command name (maps to a package.json `bin` key)\\\"\\n },\\n \\\"entry_point\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Path to the executable entry relative to package root (package.json `bin` value, e.g. ./dist/bin/cli.js)\\\"\\n }\\n }\\n },\\n \\\"description\\\": \\\"Executable bin entries (maps to package.json `bin`)\\\"\\n }\\n },\\n \\\"description\\\": \\\"TypeScript/npm-specific packaging metadata (optional, for npm projects)\\\"\\n }\\n },\\n \\\"description\\\": \\\"Optional metadata - additional properties allowed for extensibility\\\"\\n }\\n }\\n}\\n\",\n \"schemas/crucible-ts/config/standards/v1.0.0/adr-frontmatter.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/standards/adr-frontmatter-v1.0.0.json\\\",\\n \\\"title\\\": \\\"ADR Frontmatter Schema\\\",\\n \\\"description\\\": \\\"Required frontmatter structure for Architecture Decision Records (ADRs) in the Fulmen ecosystem. Ensures consistency, enables validation, and supports tooling.\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"id\\\",\\n \\\"title\\\",\\n \\\"status\\\",\\n \\\"date\\\",\\n \\\"deciders\\\",\\n \\\"scope\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"id\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^ADR-[0-9]{4}$\\\",\\n \\\"description\\\": \\\"Unique ADR identifier. Format: ADR-XXXX (e.g., ADR-0001, ADR-0042). Sequential numbering within scope. Must match filename pattern: ADR-XXXX-slug-compatible-title.md where slug uses lowercase alphanumerics and hyphens only, no consecutive separators.\\\",\\n \\\"examples\\\": [\\n \\\"ADR-0001\\\",\\n \\\"ADR-0023\\\"\\n ]\\n },\\n \\\"title\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"minLength\\\": 5,\\n \\\"maxLength\\\": 100,\\n \\\"description\\\": \\\"Brief, descriptive title of the architectural decision.\\\",\\n \\\"examples\\\": [\\n \\\"Triple-Index Catalog Strategy\\\",\\n \\\"Progressive Logging Profiles\\\"\\n ]\\n },\\n \\\"status\\\": {\\n \\\"$ref\\\": \\\"https://schemas.fulmenhq.dev/crucible/standards/adr-lifecycle-status-v1.0.0.json\\\",\\n \\\"description\\\": \\\"Current lifecycle status of this ADR. Drives adoption guidance and deprecation warnings.\\\"\\n },\\n \\\"date\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"date\\\",\\n \\\"description\\\": \\\"Date when the decision was initially made (ISO 8601 format: YYYY-MM-DD).\\\",\\n \\\"examples\\\": [\\n \\\"2025-10-15\\\"\\n ]\\n },\\n \\\"last_updated\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"date\\\",\\n \\\"description\\\": \\\"Date of last significant update to this ADR (ISO 8601 format: YYYY-MM-DD). Required if status changes or content is substantially revised.\\\",\\n \\\"examples\\\": [\\n \\\"2025-10-20\\\"\\n ]\\n },\\n \\\"deciders\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"minItems\\\": 1,\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^@[a-zA-Z0-9_-]+$\\\"\\n },\\n \\\"description\\\": \\\"GitHub handles of individuals who made or approved this decision. Format: @username\\\",\\n \\\"examples\\\": [\\n [\\n \\\"@3leapsdave\\\",\\n \\\"@pipeline-architect\\\"\\n ]\\n ]\\n },\\n \\\"scope\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"Ecosystem\\\",\\n \\\"gofulmen\\\",\\n \\\"pyfulmen\\\",\\n \\\"tsfulmen\\\",\\n \\\"rsfulmen\\\",\\n \\\"csfulmen\\\"\\n ],\\n \\\"description\\\": \\\"Scope of this ADR. 'Ecosystem' for cross-language decisions (Crucible). Library name for local decisions.\\\",\\n \\\"examples\\\": [\\n \\\"Ecosystem\\\",\\n \\\"gofulmen\\\"\\n ]\\n },\\n \\\"supersedes\\\": {\\n \\\"oneOf\\\": [\\n {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^(ADR-[0-9]{4}|(gofulmen|pyfulmen|tsfulmen|rsfulmen|csfulmen):[0-9]{4})$\\\"\\n },\\n {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^(ADR-[0-9]{4}|(gofulmen|pyfulmen|tsfulmen|rsfulmen|csfulmen):[0-9]{4})$\\\"\\n },\\n \\\"minItems\\\": 1,\\n \\\"uniqueItems\\\": true\\n }\\n ],\\n \\\"description\\\": \\\"ID(s) of ADR(s) that this decision replaces. Format: 'ADR-XXXX' for ecosystem ADRs (including when one ecosystem ADR supersedes another), 'scope:XXXX' for local ADRs from helper libraries (e.g., 'pyfulmen:0003'). Can be a single string or array. Use scoped references when an ecosystem ADR consolidates local ADRs from specific libraries.\\\",\\n \\\"examples\\\": [\\n \\\"ADR-0003\\\",\\n [\\n \\\"ADR-0003\\\",\\n \\\"ADR-0005\\\"\\n ],\\n [\\n \\\"gofulmen:0007\\\",\\n \\\"pyfulmen:0012\\\",\\n \\\"tsfulmen:0009\\\"\\n ]\\n ]\\n },\\n \\\"superseded_by\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^ADR-[0-9]{4}$\\\",\\n \\\"description\\\": \\\"ID of ADR that replaces this decision. Automatically set when status becomes 'superseded'.\\\",\\n \\\"examples\\\": [\\n \\\"ADR-0007\\\"\\n ]\\n },\\n \\\"deprecation_date\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"date\\\",\\n \\\"description\\\": \\\"Date when this ADR will be deprecated. Used for planning migrations. Set when status is 'deprecated'.\\\",\\n \\\"examples\\\": [\\n \\\"2026-01-01\\\"\\n ]\\n },\\n \\\"tags\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"minLength\\\": 2\\n },\\n \\\"uniqueItems\\\": true,\\n \\\"description\\\": \\\"Tags for categorization and filtering (e.g., 'catalog', 'logging', 'performance').\\\",\\n \\\"examples\\\": [\\n [\\n \\\"catalog\\\",\\n \\\"indexing\\\",\\n \\\"performance\\\"\\n ]\\n ]\\n },\\n \\\"related_adrs\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^ADR-[0-9]{4}$\\\"\\n },\\n \\\"uniqueItems\\\": true,\\n \\\"description\\\": \\\"IDs of related ADRs. Use for cross-referencing dependent or complementary decisions.\\\",\\n \\\"examples\\\": [\\n [\\n \\\"ADR-0001\\\",\\n \\\"ADR-0003\\\"\\n ]\\n ]\\n },\\n \\\"adoption\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Per-library adoption status tracking. Keys are library names, values are adoption status. Used for ecosystem ADRs only.\\\",\\n \\\"additionalProperties\\\": {\\n \\\"$ref\\\": \\\"https://schemas.fulmenhq.dev/crucible/standards/adr-adoption-status-v1.0.0.json\\\"\\n },\\n \\\"examples\\\": [\\n {\\n \\\"gofulmen\\\": \\\"verified\\\",\\n \\\"pyfulmen\\\": \\\"implemented\\\",\\n \\\"tsfulmen\\\": \\\"in-progress\\\"\\n }\\n ]\\n }\\n },\\n \\\"allOf\\\": [\\n {\\n \\\"if\\\": {\\n \\\"properties\\\": {\\n \\\"status\\\": {\\n \\\"const\\\": \\\"deprecated\\\"\\n }\\n }\\n },\\n \\\"then\\\": {\\n \\\"required\\\": [\\n \\\"deprecation_date\\\"\\n ]\\n }\\n },\\n {\\n \\\"if\\\": {\\n \\\"properties\\\": {\\n \\\"status\\\": {\\n \\\"const\\\": \\\"superseded\\\"\\n }\\n }\\n },\\n \\\"then\\\": {\\n \\\"required\\\": [\\n \\\"superseded_by\\\"\\n ]\\n }\\n },\\n {\\n \\\"if\\\": {\\n \\\"properties\\\": {\\n \\\"scope\\\": {\\n \\\"const\\\": \\\"Ecosystem\\\"\\n }\\n }\\n },\\n \\\"then\\\": {\\n \\\"properties\\\": {\\n \\\"adoption\\\": {\\n \\\"description\\\": \\\"Adoption tracking is recommended for Ecosystem ADRs to monitor cross-library implementation.\\\"\\n }\\n }\\n }\\n }\\n ],\\n \\\"$comment\\\": \\\"This schema enables CI validation of ADR frontmatter, automated index generation, and adoption matrix visualization. Version 1.0.0 established 2025-10-15.\\\"\\n}\\n\",\n \"schemas/crucible-ts/config/sync-keys.schema.yaml\": \"$schema: https://json-schema.org/draft/2020-12/schema\\n$id: https://schemas.fulmenhq.dev/config/sync-keys-v1.0.0.json\\ntitle: Fulmen Sync Keys Metadata\\ndescription: Canonical metadata describing available sync keys published by SSOT repositories.\\ntype: object\\nrequired:\\n - version\\n - keys\\nproperties:\\n version:\\n type: string\\n keys:\\n type: array\\n items:\\n $ref: '#/$defs/key'\\nadditionalProperties: false\\n$defs:\\n key:\\n type: object\\n required:\\n - id\\n - description\\n - basePath\\n properties:\\n id:\\n type: string\\n description:\\n type: string\\n basePath:\\n type: string\\n recommendedOutput:\\n type: string\\n tags:\\n type: array\\n items:\\n type: string\\n metadata:\\n type: object\\n description: Optional metadata for sync tooling\\n properties:\\n sourceRepo:\\n type: string\\n description: Source repository URL or 'local' for development references\\n sourcePathBase:\\n type: string\\n description: Base path within source repository for this sync key\\n notes:\\n type: string\\n description: Human-readable notes about usage, constraints, or caveats\\n additionalProperties: true\\n additionalProperties: false\\n\",\n \"schemas/crucible-ts/content/binary-embed-manifest/v1.0.0/binary-embed-manifest.schema.yaml\": \"$schema: 'https://json-schema.org/draft/2020-12/schema'\\n$id: 'https://schemas.fulmen.dev/embed-content-config-v1.0.0'\\ntitle: FulDX Embed Content Configuration\\ntype: object\\nadditionalProperties: False\\nrequired:\\n - version\\n - topics\\nproperties:\\n version:\\n type: string\\n const: 1.0.0\\n topics:\\n type: object\\n minProperties: 1\\n additionalProperties:\\n type: object\\n additionalProperties: False\\n required:\\n - title\\n - description\\n - include\\n properties:\\n title:\\n type: string\\n minLength: 1\\n description:\\n type: string\\n minLength: 1\\n include:\\n type: array\\n minItems: 1\\n items:\\n type: string\\n minLength: 1\\n uniqueItems: True\\n\",\n \"schemas/crucible-ts/content/embed-manifest/v1.1.0/embed-manifest.schema.yaml\": \"$schema: \\\"https://json-schema.org/draft/2020-12/schema\\\"\\n$id: \\\"https://schemas.goneat.dev/content/embed-manifest-v1.1.0\\\"\\ntitle: \\\"Goneat Content Embed Manifest\\\"\\ntype: object\\nadditionalProperties: false\\nrequired:\\n - version\\n - topics\\nproperties:\\n version:\\n type: string\\n const: \\\"1.1.0\\\"\\n asset_type:\\n type: string\\n description: \\\"Name of the asset preset to apply when resolving content\\\"\\n content_types:\\n type: array\\n description: \\\"Glob patterns that constrain which files are eligible across topics\\\"\\n items:\\n type: string\\n minLength: 1\\n uniqueItems: true\\n exclude_patterns:\\n type: array\\n description: \\\"Global exclude patterns applied to every topic\\\"\\n items:\\n type: string\\n minLength: 1\\n uniqueItems: true\\n target:\\n type: string\\n description: \\\"Destination directory for embedded output (relative to repository root)\\\"\\n topics:\\n type: object\\n minProperties: 1\\n additionalProperties:\\n type: object\\n additionalProperties: false\\n required:\\n - include\\n properties:\\n title:\\n type: string\\n description:\\n type: string\\n asset_type:\\n type: string\\n description: \\\"Topic-specific asset type preset\\\"\\n content_types:\\n type: array\\n items:\\n type: string\\n minLength: 1\\n uniqueItems: true\\n include:\\n type: array\\n minItems: 1\\n items:\\n type: string\\n minLength: 1\\n exclude:\\n type: array\\n items:\\n type: string\\n minLength: 1\\n uniqueItems: true\\n tags:\\n type: array\\n items:\\n type: string\\n pattern: \\\"^\\\\\\\\S+$\\\"\\n uniqueItems: true\\n target:\\n type: string\\n description: \\\"Override the manifest-level target for this topic\\\"\\n override:\\n type: boolean\\n description: \\\"Allow this topic to override files claimed by other manifests\\\"\\n\",\n \"schemas/crucible-ts/content/ssot-provenance/v1.0.0/ssot-provenance.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/content/ssot-provenance/v1.0.0/ssot-provenance.schema.json\\\",\\n \\\"title\\\": \\\"SSOT Sync Provenance Metadata\\\",\\n \\\"description\\\": \\\"Aggregate provenance metadata for SSOT sync operations capturing source information for audit trails\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"schema\\\",\\n \\\"generated_at\\\",\\n \\\"sources\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"schema\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"name\\\",\\n \\\"version\\\",\\n \\\"url\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"name\\\": {\\n \\\"const\\\": \\\"goneat.ssot.provenance\\\"\\n },\\n \\\"version\\\": {\\n \\\"const\\\": \\\"v1\\\"\\n },\\n \\\"url\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"uri\\\"\\n }\\n }\\n },\\n \\\"generated_at\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"date-time\\\",\\n \\\"description\\\": \\\"ISO 8601 timestamp when the provenance was generated\\\"\\n },\\n \\\"sources\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"minItems\\\": 1,\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"#/$defs/sourceMetadata\\\"\\n }\\n }\\n },\\n \\\"$defs\\\": {\\n \\\"sourceMetadata\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"name\\\",\\n \\\"slug\\\",\\n \\\"method\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"name\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Human-readable source name\\\"\\n },\\n \\\"slug\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[a-z0-9-]+$\\\",\\n \\\"description\\\": \\\"URL-safe slug derived from source name\\\"\\n },\\n \\\"method\\\": {\\n \\\"enum\\\": [\\n \\\"local_path\\\",\\n \\\"git_ref\\\",\\n \\\"git_tag\\\",\\n \\\"archive\\\"\\n ],\\n \\\"description\\\": \\\"Sync method used for this source\\\"\\n },\\n \\\"repo_url\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"uri\\\",\\n \\\"description\\\": \\\"Repository URL (e.g., https://github.com/org/repo)\\\"\\n },\\n \\\"local_path\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Local filesystem path used for sync\\\"\\n },\\n \\\"ref\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Git ref (branch/tag) requested or detected\\\"\\n },\\n \\\"commit\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[a-f0-9]{40}$\\\",\\n \\\"description\\\": \\\"Full 40-character Git commit SHA\\\"\\n },\\n \\\"dirty\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Whether the source had uncommitted changes\\\"\\n },\\n \\\"dirty_reason\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"worktree-dirty\\\",\\n \\\"non-git\\\",\\n \\\"no-head\\\",\\n \\\"no-worktree\\\",\\n \\\"status-error\\\"\\n ],\\n \\\"description\\\": \\\"Reason for dirty status if applicable\\\"\\n },\\n \\\"version_file\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Version file name that was read (e.g., VERSION)\\\"\\n },\\n \\\"version\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Version string detected from version file\\\"\\n },\\n \\\"version_source\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Source of version information (file name or 'not-found')\\\"\\n },\\n \\\"outputs\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": \\\"Map of asset type to destination path\\\"\\n }\\n }\\n }\\n }\\n}\\n\",\n \"schemas/crucible-ts/design/core/v1.0.0/component-states.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/design/core/v1.0.0/component-states.schema.json\\\",\\n \\\"title\\\": \\\"Component States Vocabulary\\\",\\n \\\"description\\\": \\\"Universal component state definitions for design systems. Implementation-agnostic vocabulary shared across TUI and web contexts.\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"$defs\\\": {\\n \\\"interactiveState\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"default\\\",\\n \\\"hover\\\",\\n \\\"focus\\\",\\n \\\"focus-visible\\\",\\n \\\"active\\\",\\n \\\"disabled\\\",\\n \\\"loading\\\",\\n \\\"selected\\\",\\n \\\"checked\\\",\\n \\\"indeterminate\\\",\\n \\\"expanded\\\",\\n \\\"collapsed\\\"\\n ],\\n \\\"description\\\": \\\"Interactive component states\\\"\\n },\\n \\\"validationState\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"valid\\\",\\n \\\"invalid\\\",\\n \\\"warning\\\",\\n \\\"pending\\\"\\n ],\\n \\\"description\\\": \\\"Form/input validation states\\\"\\n },\\n \\\"feedbackState\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"success\\\",\\n \\\"error\\\",\\n \\\"warning\\\",\\n \\\"info\\\",\\n \\\"neutral\\\"\\n ],\\n \\\"description\\\": \\\"User feedback states (for alerts, toasts, etc.)\\\"\\n },\\n \\\"visibilityState\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"visible\\\",\\n \\\"hidden\\\",\\n \\\"entering\\\",\\n \\\"exiting\\\"\\n ],\\n \\\"description\\\": \\\"Visibility/transition states\\\"\\n },\\n \\\"stateDefinition\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"A state definition with semantic meaning\\\",\\n \\\"properties\\\": {\\n \\\"state\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"State identifier\\\"\\n },\\n \\\"category\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"interactive\\\",\\n \\\"validation\\\",\\n \\\"feedback\\\",\\n \\\"visibility\\\"\\n ],\\n \\\"description\\\": \\\"State category\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"When this state applies\\\"\\n },\\n \\\"aria_mapping\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Corresponding ARIA attribute/state\\\"\\n },\\n \\\"visual_indicators\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": \\\"Required visual indicators for this state\\\"\\n },\\n \\\"can_combine_with\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": \\\"States that can coexist with this one\\\"\\n },\\n \\\"mutually_exclusive_with\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": \\\"States that cannot coexist with this one\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"state\\\",\\n \\\"category\\\"\\n ]\\n },\\n \\\"stateTransition\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Valid state transition\\\",\\n \\\"properties\\\": {\\n \\\"from\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Source state\\\"\\n },\\n \\\"to\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Target state\\\"\\n },\\n \\\"trigger\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"What triggers this transition\\\"\\n },\\n \\\"reversible\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Whether transition can be reversed\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"from\\\",\\n \\\"to\\\",\\n \\\"trigger\\\"\\n ]\\n }\\n },\\n \\\"properties\\\": {\\n \\\"$schema\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"JSON Schema reference\\\"\\n },\\n \\\"version\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[vV]?\\\\\\\\d+\\\\\\\\.\\\\\\\\d+\\\\\\\\.\\\\\\\\d+$\\\",\\n \\\"description\\\": \\\"Semantic version of the component states vocabulary\\\"\\n },\\n \\\"interactive_states\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Interactive state definitions\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"#/$defs/stateDefinition\\\"\\n }\\n },\\n \\\"validation_states\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Validation state definitions\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"#/$defs/stateDefinition\\\"\\n }\\n },\\n \\\"feedback_states\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Feedback state definitions\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"#/$defs/stateDefinition\\\"\\n }\\n },\\n \\\"state_transitions\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Valid state transitions\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"#/$defs/stateTransition\\\"\\n }\\n },\\n \\\"accessibility_requirements\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Accessibility requirements for states\\\",\\n \\\"properties\\\": {\\n \\\"focus_visible_required\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Whether focus-visible indicator is required\\\"\\n },\\n \\\"disabled_announcement\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Whether disabled state must be announced to AT\\\"\\n },\\n \\\"state_change_announcement\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Whether state changes should be announced\\\"\\n }\\n }\\n },\\n \\\"extensions\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Implementation-specific extensions\\\",\\n \\\"additionalProperties\\\": true\\n }\\n },\\n \\\"required\\\": [\\n \\\"version\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n}\\n\",\n \"schemas/crucible-ts/design/core/v1.0.0/semantic-colors.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/design/core/v1.0.0/semantic-colors.schema.json\\\",\\n \\\"title\\\": \\\"Semantic Color Vocabulary\\\",\\n \\\"description\\\": \\\"Universal semantic color roles for design systems. Implementation-agnostic vocabulary shared across TUI and web contexts.\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"$defs\\\": {\\n \\\"semanticColorRole\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"primary\\\",\\n \\\"secondary\\\",\\n \\\"accent\\\",\\n \\\"success\\\",\\n \\\"warning\\\",\\n \\\"error\\\",\\n \\\"info\\\",\\n \\\"muted\\\"\\n ],\\n \\\"description\\\": \\\"Standard semantic color roles\\\"\\n },\\n \\\"surfaceRole\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"background\\\",\\n \\\"surface\\\",\\n \\\"surface-elevated\\\",\\n \\\"surface-sunken\\\",\\n \\\"overlay\\\"\\n ],\\n \\\"description\\\": \\\"Surface/background color roles\\\"\\n },\\n \\\"textRole\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"text-primary\\\",\\n \\\"text-secondary\\\",\\n \\\"text-muted\\\",\\n \\\"text-inverse\\\",\\n \\\"text-link\\\",\\n \\\"text-on-primary\\\",\\n \\\"text-on-secondary\\\",\\n \\\"text-on-accent\\\"\\n ],\\n \\\"description\\\": \\\"Text color roles for different contexts\\\"\\n },\\n \\\"borderRole\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"border-default\\\",\\n \\\"border-subtle\\\",\\n \\\"border-strong\\\",\\n \\\"border-focus\\\",\\n \\\"border-error\\\"\\n ],\\n \\\"description\\\": \\\"Border color roles\\\"\\n },\\n \\\"interactiveRole\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"interactive-default\\\",\\n \\\"interactive-hover\\\",\\n \\\"interactive-active\\\",\\n \\\"interactive-disabled\\\"\\n ],\\n \\\"description\\\": \\\"Interactive element state colors\\\"\\n },\\n \\\"contrastRequirement\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"WCAG contrast ratio requirements\\\",\\n \\\"properties\\\": {\\n \\\"level\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"AA\\\",\\n \\\"AAA\\\"\\n ],\\n \\\"description\\\": \\\"WCAG conformance level\\\"\\n },\\n \\\"min_ratio\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"minimum\\\": 1,\\n \\\"maximum\\\": 21,\\n \\\"description\\\": \\\"Minimum contrast ratio (e.g., 4.5 for AA normal text)\\\"\\n },\\n \\\"context\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"normal-text\\\",\\n \\\"large-text\\\",\\n \\\"ui-component\\\",\\n \\\"graphical\\\"\\n ],\\n \\\"description\\\": \\\"Context for contrast requirement\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"level\\\",\\n \\\"min_ratio\\\",\\n \\\"context\\\"\\n ]\\n },\\n \\\"colorIntent\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Semantic intent and accessibility metadata for a color\\\",\\n \\\"properties\\\": {\\n \\\"role\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Semantic role from one of the role enums\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Human-readable description of when to use this color\\\"\\n },\\n \\\"pairs_with\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": \\\"Recommended color roles to pair with (for contrast)\\\"\\n },\\n \\\"wcag_contrast\\\": {\\n \\\"$ref\\\": \\\"#/$defs/contrastRequirement\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"role\\\"\\n ]\\n }\\n },\\n \\\"properties\\\": {\\n \\\"$schema\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"JSON Schema reference\\\"\\n },\\n \\\"version\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[vV]?\\\\\\\\d+\\\\\\\\.\\\\\\\\d+\\\\\\\\.\\\\\\\\d+$\\\",\\n \\\"description\\\": \\\"Semantic version of the color vocabulary\\\"\\n },\\n \\\"semantic_roles\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Defined semantic color roles with metadata\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"#/$defs/colorIntent\\\"\\n }\\n },\\n \\\"surface_roles\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Defined surface/background roles\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"#/$defs/colorIntent\\\"\\n }\\n },\\n \\\"text_roles\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Defined text color roles\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"#/$defs/colorIntent\\\"\\n }\\n },\\n \\\"border_roles\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Defined border color roles\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"#/$defs/colorIntent\\\"\\n }\\n },\\n \\\"extensions\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Implementation-specific extensions (TUI, web)\\\",\\n \\\"additionalProperties\\\": true\\n }\\n },\\n \\\"required\\\": [\\n \\\"version\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n}\\n\",\n \"schemas/crucible-ts/design/core/v1.0.0/spacing-scale.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/design/core/v1.0.0/spacing-scale.schema.json\\\",\\n \\\"title\\\": \\\"Spacing Scale Vocabulary\\\",\\n \\\"description\\\": \\\"Universal spacing and sizing scale for design systems. Implementation-agnostic vocabulary shared across TUI and web contexts.\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"$defs\\\": {\\n \\\"spacingToken\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"none\\\",\\n \\\"3xs\\\",\\n \\\"2xs\\\",\\n \\\"xs\\\",\\n \\\"sm\\\",\\n \\\"md\\\",\\n \\\"lg\\\",\\n \\\"xl\\\",\\n \\\"2xl\\\",\\n \\\"3xl\\\"\\n ],\\n \\\"description\\\": \\\"Standard spacing scale tokens\\\"\\n },\\n \\\"sizeToken\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"xs\\\",\\n \\\"sm\\\",\\n \\\"md\\\",\\n \\\"lg\\\",\\n \\\"xl\\\",\\n \\\"full\\\"\\n ],\\n \\\"description\\\": \\\"Component size tokens\\\"\\n },\\n \\\"spacingDefinition\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"A spacing token definition with semantic meaning\\\",\\n \\\"properties\\\": {\\n \\\"token\\\": {\\n \\\"$ref\\\": \\\"#/$defs/spacingToken\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"When to use this spacing value\\\"\\n },\\n \\\"use_cases\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": \\\"Example use cases for this token\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"token\\\"\\n ]\\n },\\n \\\"responsiveTier\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"compact\\\",\\n \\\"default\\\",\\n \\\"comfortable\\\",\\n \\\"spacious\\\"\\n ],\\n \\\"description\\\": \\\"Responsive density tiers\\\"\\n },\\n \\\"breakpointDefinition\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Abstract breakpoint definition (implementation provides units)\\\",\\n \\\"properties\\\": {\\n \\\"name\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Breakpoint name\\\"\\n },\\n \\\"tier\\\": {\\n \\\"$ref\\\": \\\"#/$defs/responsiveTier\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"When this breakpoint applies\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"name\\\",\\n \\\"tier\\\"\\n ]\\n }\\n },\\n \\\"properties\\\": {\\n \\\"$schema\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"JSON Schema reference\\\"\\n },\\n \\\"version\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[vV]?\\\\\\\\d+\\\\\\\\.\\\\\\\\d+\\\\\\\\.\\\\\\\\d+$\\\",\\n \\\"description\\\": \\\"Semantic version of the spacing vocabulary\\\"\\n },\\n \\\"spacing_tokens\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Defined spacing tokens with metadata\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"#/$defs/spacingDefinition\\\"\\n }\\n },\\n \\\"size_tokens\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Defined size tokens for components\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"token\\\": {\\n \\\"$ref\\\": \\\"#/$defs/sizeToken\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"token\\\"\\n ]\\n }\\n },\\n \\\"breakpoints\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Responsive breakpoint definitions\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"#/$defs/breakpointDefinition\\\"\\n }\\n },\\n \\\"density_scale\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"How spacing scales across density tiers\\\",\\n \\\"properties\\\": {\\n \\\"compact\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"description\\\": \\\"Multiplier for compact density (e.g., 0.75)\\\"\\n },\\n \\\"default\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"description\\\": \\\"Multiplier for default density (1.0)\\\"\\n },\\n \\\"comfortable\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"description\\\": \\\"Multiplier for comfortable density (e.g., 1.25)\\\"\\n },\\n \\\"spacious\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"description\\\": \\\"Multiplier for spacious density (e.g., 1.5)\\\"\\n }\\n }\\n },\\n \\\"extensions\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Implementation-specific extensions\\\",\\n \\\"additionalProperties\\\": true\\n }\\n },\\n \\\"required\\\": [\\n \\\"version\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n}\\n\",\n \"schemas/crucible-ts/design/core/v1.0.0/typography-roles.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/design/core/v1.0.0/typography-roles.schema.json\\\",\\n \\\"title\\\": \\\"Typography Roles Vocabulary\\\",\\n \\\"description\\\": \\\"Universal typographic semantic roles for design systems. Implementation-agnostic vocabulary shared across TUI and web contexts.\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"$defs\\\": {\\n \\\"textRole\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"display\\\",\\n \\\"headline\\\",\\n \\\"title\\\",\\n \\\"subtitle\\\",\\n \\\"body\\\",\\n \\\"body-emphasis\\\",\\n \\\"caption\\\",\\n \\\"overline\\\",\\n \\\"code\\\",\\n \\\"code-block\\\",\\n \\\"label\\\",\\n \\\"button\\\"\\n ],\\n \\\"description\\\": \\\"Semantic text roles\\\"\\n },\\n \\\"fontWeight\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"thin\\\",\\n \\\"light\\\",\\n \\\"regular\\\",\\n \\\"medium\\\",\\n \\\"semibold\\\",\\n \\\"bold\\\",\\n \\\"extrabold\\\"\\n ],\\n \\\"description\\\": \\\"Font weight tokens (implementation maps to numeric values)\\\"\\n },\\n \\\"textEmphasis\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"normal\\\",\\n \\\"italic\\\",\\n \\\"bold\\\",\\n \\\"bold-italic\\\",\\n \\\"underline\\\",\\n \\\"strikethrough\\\",\\n \\\"dim\\\",\\n \\\"inverse\\\"\\n ],\\n \\\"description\\\": \\\"Text emphasis/decoration styles\\\"\\n },\\n \\\"textAlignment\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"start\\\",\\n \\\"center\\\",\\n \\\"end\\\",\\n \\\"justify\\\"\\n ],\\n \\\"description\\\": \\\"Text alignment (direction-agnostic)\\\"\\n },\\n \\\"textTransform\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"none\\\",\\n \\\"uppercase\\\",\\n \\\"lowercase\\\",\\n \\\"capitalize\\\"\\n ],\\n \\\"description\\\": \\\"Text transformation\\\"\\n },\\n \\\"typographyRoleDefinition\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"A typography role definition with semantic meaning\\\",\\n \\\"properties\\\": {\\n \\\"role\\\": {\\n \\\"$ref\\\": \\\"#/$defs/textRole\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"When to use this typography role\\\"\\n },\\n \\\"semantic_level\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 1,\\n \\\"maximum\\\": 6,\\n \\\"description\\\": \\\"Heading level for accessibility (1-6, optional for non-headings)\\\"\\n },\\n \\\"default_weight\\\": {\\n \\\"$ref\\\": \\\"#/$defs/fontWeight\\\"\\n },\\n \\\"default_emphasis\\\": {\\n \\\"$ref\\\": \\\"#/$defs/textEmphasis\\\"\\n },\\n \\\"use_cases\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": \\\"Example use cases\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"role\\\"\\n ]\\n },\\n \\\"lineHeightToken\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"tight\\\",\\n \\\"snug\\\",\\n \\\"normal\\\",\\n \\\"relaxed\\\",\\n \\\"loose\\\"\\n ],\\n \\\"description\\\": \\\"Line height tokens\\\"\\n },\\n \\\"letterSpacingToken\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"tighter\\\",\\n \\\"tight\\\",\\n \\\"normal\\\",\\n \\\"wide\\\",\\n \\\"wider\\\",\\n \\\"widest\\\"\\n ],\\n \\\"description\\\": \\\"Letter spacing tokens\\\"\\n }\\n },\\n \\\"properties\\\": {\\n \\\"$schema\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"JSON Schema reference\\\"\\n },\\n \\\"version\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[vV]?\\\\\\\\d+\\\\\\\\.\\\\\\\\d+\\\\\\\\.\\\\\\\\d+$\\\",\\n \\\"description\\\": \\\"Semantic version of the typography vocabulary\\\"\\n },\\n \\\"text_roles\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Defined typography roles with metadata\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"#/$defs/typographyRoleDefinition\\\"\\n }\\n },\\n \\\"font_weights\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Available font weights\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"token\\\": {\\n \\\"$ref\\\": \\\"#/$defs/fontWeight\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"token\\\"\\n ]\\n }\\n },\\n \\\"line_heights\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Line height tokens\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"token\\\": {\\n \\\"$ref\\\": \\\"#/$defs/lineHeightToken\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"token\\\"\\n ]\\n }\\n },\\n \\\"extensions\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Implementation-specific extensions\\\",\\n \\\"additionalProperties\\\": true\\n }\\n },\\n \\\"required\\\": [\\n \\\"version\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n}\\n\",\n \"schemas/crucible-ts/design/tui/v1.0.0/color-palette.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/design/tui/v1.0.0/color-palette.schema.json\\\",\\n \\\"title\\\": \\\"TUI Color Palette\\\",\\n \\\"description\\\": \\\"Terminal color palette with capability-based fallback support (truecolor -> 256 -> 16 -> basic)\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"$defs\\\": {\\n \\\"hexColor\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^#[0-9A-Fa-f]{6}$\\\",\\n \\\"description\\\": \\\"6-digit hex color (truecolor capable terminals)\\\"\\n },\\n \\\"ansi256\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 255,\\n \\\"description\\\": \\\"ANSI 256-color palette index\\\"\\n },\\n \\\"ansi16\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"black\\\",\\n \\\"red\\\",\\n \\\"green\\\",\\n \\\"yellow\\\",\\n \\\"blue\\\",\\n \\\"magenta\\\",\\n \\\"cyan\\\",\\n \\\"white\\\",\\n \\\"bright-black\\\",\\n \\\"bright-red\\\",\\n \\\"bright-green\\\",\\n \\\"bright-yellow\\\",\\n \\\"bright-blue\\\",\\n \\\"bright-magenta\\\",\\n \\\"bright-cyan\\\",\\n \\\"bright-white\\\"\\n ],\\n \\\"description\\\": \\\"ANSI 16-color name\\\"\\n },\\n \\\"basicColor\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"default\\\",\\n \\\"inverse\\\"\\n ],\\n \\\"description\\\": \\\"Basic terminal color (no color support)\\\"\\n },\\n \\\"terminalColor\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Terminal color with fallback chain\\\",\\n \\\"properties\\\": {\\n \\\"truecolor\\\": {\\n \\\"$ref\\\": \\\"#/$defs/hexColor\\\",\\n \\\"description\\\": \\\"24-bit color for modern terminals\\\"\\n },\\n \\\"ansi256\\\": {\\n \\\"$ref\\\": \\\"#/$defs/ansi256\\\",\\n \\\"description\\\": \\\"256-color fallback\\\"\\n },\\n \\\"ansi16\\\": {\\n \\\"$ref\\\": \\\"#/$defs/ansi16\\\",\\n \\\"description\\\": \\\"16-color fallback\\\"\\n },\\n \\\"basic\\\": {\\n \\\"$ref\\\": \\\"#/$defs/basicColor\\\",\\n \\\"description\\\": \\\"No-color fallback\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"truecolor\\\",\\n \\\"ansi16\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n },\\n \\\"semanticColorDefinition\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"A semantic color with terminal-specific values\\\",\\n \\\"properties\\\": {\\n \\\"role\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Semantic role (references core/semantic-colors)\\\"\\n },\\n \\\"foreground\\\": {\\n \\\"$ref\\\": \\\"#/$defs/terminalColor\\\",\\n \\\"description\\\": \\\"Foreground/text color\\\"\\n },\\n \\\"background\\\": {\\n \\\"$ref\\\": \\\"#/$defs/terminalColor\\\",\\n \\\"description\\\": \\\"Background color\\\"\\n },\\n \\\"wcag_contrast_ratio\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"minimum\\\": 1,\\n \\\"maximum\\\": 21,\\n \\\"description\\\": \\\"Calculated contrast ratio between fg/bg\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"role\\\",\\n \\\"foreground\\\"\\n ]\\n },\\n \\\"colorCapability\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"truecolor\\\",\\n \\\"256\\\",\\n \\\"16\\\",\\n \\\"basic\\\"\\n ],\\n \\\"description\\\": \\\"Terminal color capability level\\\"\\n }\\n },\\n \\\"properties\\\": {\\n \\\"$schema\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"JSON Schema reference\\\"\\n },\\n \\\"version\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[vV]?\\\\\\\\d+\\\\\\\\.\\\\\\\\d+\\\\\\\\.\\\\\\\\d+$\\\",\\n \\\"description\\\": \\\"Semantic version of the color palette\\\"\\n },\\n \\\"name\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Palette name (e.g., 'fulmen-dark', 'high-contrast')\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Palette description and intended use\\\"\\n },\\n \\\"min_capability\\\": {\\n \\\"$ref\\\": \\\"#/$defs/colorCapability\\\",\\n \\\"description\\\": \\\"Minimum terminal capability required for this palette\\\"\\n },\\n \\\"semantic_colors\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Semantic color definitions\\\",\\n \\\"properties\\\": {\\n \\\"primary\\\": {\\n \\\"$ref\\\": \\\"#/$defs/semanticColorDefinition\\\"\\n },\\n \\\"secondary\\\": {\\n \\\"$ref\\\": \\\"#/$defs/semanticColorDefinition\\\"\\n },\\n \\\"accent\\\": {\\n \\\"$ref\\\": \\\"#/$defs/semanticColorDefinition\\\"\\n },\\n \\\"success\\\": {\\n \\\"$ref\\\": \\\"#/$defs/semanticColorDefinition\\\"\\n },\\n \\\"warning\\\": {\\n \\\"$ref\\\": \\\"#/$defs/semanticColorDefinition\\\"\\n },\\n \\\"error\\\": {\\n \\\"$ref\\\": \\\"#/$defs/semanticColorDefinition\\\"\\n },\\n \\\"info\\\": {\\n \\\"$ref\\\": \\\"#/$defs/semanticColorDefinition\\\"\\n },\\n \\\"muted\\\": {\\n \\\"$ref\\\": \\\"#/$defs/semanticColorDefinition\\\"\\n }\\n },\\n \\\"additionalProperties\\\": {\\n \\\"$ref\\\": \\\"#/$defs/semanticColorDefinition\\\"\\n }\\n },\\n \\\"surface_colors\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Surface/background color definitions\\\",\\n \\\"properties\\\": {\\n \\\"background\\\": {\\n \\\"$ref\\\": \\\"#/$defs/terminalColor\\\"\\n },\\n \\\"surface\\\": {\\n \\\"$ref\\\": \\\"#/$defs/terminalColor\\\"\\n },\\n \\\"surface_elevated\\\": {\\n \\\"$ref\\\": \\\"#/$defs/terminalColor\\\"\\n },\\n \\\"surface_sunken\\\": {\\n \\\"$ref\\\": \\\"#/$defs/terminalColor\\\"\\n },\\n \\\"overlay\\\": {\\n \\\"$ref\\\": \\\"#/$defs/terminalColor\\\"\\n }\\n },\\n \\\"additionalProperties\\\": {\\n \\\"$ref\\\": \\\"#/$defs/terminalColor\\\"\\n }\\n },\\n \\\"text_colors\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Text color definitions\\\",\\n \\\"properties\\\": {\\n \\\"primary\\\": {\\n \\\"$ref\\\": \\\"#/$defs/terminalColor\\\"\\n },\\n \\\"secondary\\\": {\\n \\\"$ref\\\": \\\"#/$defs/terminalColor\\\"\\n },\\n \\\"muted\\\": {\\n \\\"$ref\\\": \\\"#/$defs/terminalColor\\\"\\n },\\n \\\"inverse\\\": {\\n \\\"$ref\\\": \\\"#/$defs/terminalColor\\\"\\n },\\n \\\"link\\\": {\\n \\\"$ref\\\": \\\"#/$defs/terminalColor\\\"\\n }\\n },\\n \\\"additionalProperties\\\": {\\n \\\"$ref\\\": \\\"#/$defs/terminalColor\\\"\\n }\\n },\\n \\\"border_colors\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Border color definitions\\\",\\n \\\"properties\\\": {\\n \\\"default\\\": {\\n \\\"$ref\\\": \\\"#/$defs/terminalColor\\\"\\n },\\n \\\"subtle\\\": {\\n \\\"$ref\\\": \\\"#/$defs/terminalColor\\\"\\n },\\n \\\"strong\\\": {\\n \\\"$ref\\\": \\\"#/$defs/terminalColor\\\"\\n },\\n \\\"focus\\\": {\\n \\\"$ref\\\": \\\"#/$defs/terminalColor\\\"\\n }\\n },\\n \\\"additionalProperties\\\": {\\n \\\"$ref\\\": \\\"#/$defs/terminalColor\\\"\\n }\\n },\\n \\\"ansi_overrides\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Optional overrides for standard ANSI colors (for themed terminals)\\\",\\n \\\"properties\\\": {\\n \\\"black\\\": {\\n \\\"$ref\\\": \\\"#/$defs/hexColor\\\"\\n },\\n \\\"red\\\": {\\n \\\"$ref\\\": \\\"#/$defs/hexColor\\\"\\n },\\n \\\"green\\\": {\\n \\\"$ref\\\": \\\"#/$defs/hexColor\\\"\\n },\\n \\\"yellow\\\": {\\n \\\"$ref\\\": \\\"#/$defs/hexColor\\\"\\n },\\n \\\"blue\\\": {\\n \\\"$ref\\\": \\\"#/$defs/hexColor\\\"\\n },\\n \\\"magenta\\\": {\\n \\\"$ref\\\": \\\"#/$defs/hexColor\\\"\\n },\\n \\\"cyan\\\": {\\n \\\"$ref\\\": \\\"#/$defs/hexColor\\\"\\n },\\n \\\"white\\\": {\\n \\\"$ref\\\": \\\"#/$defs/hexColor\\\"\\n },\\n \\\"bright_black\\\": {\\n \\\"$ref\\\": \\\"#/$defs/hexColor\\\"\\n },\\n \\\"bright_red\\\": {\\n \\\"$ref\\\": \\\"#/$defs/hexColor\\\"\\n },\\n \\\"bright_green\\\": {\\n \\\"$ref\\\": \\\"#/$defs/hexColor\\\"\\n },\\n \\\"bright_yellow\\\": {\\n \\\"$ref\\\": \\\"#/$defs/hexColor\\\"\\n },\\n \\\"bright_blue\\\": {\\n \\\"$ref\\\": \\\"#/$defs/hexColor\\\"\\n },\\n \\\"bright_magenta\\\": {\\n \\\"$ref\\\": \\\"#/$defs/hexColor\\\"\\n },\\n \\\"bright_cyan\\\": {\\n \\\"$ref\\\": \\\"#/$defs/hexColor\\\"\\n },\\n \\\"bright_white\\\": {\\n \\\"$ref\\\": \\\"#/$defs/hexColor\\\"\\n }\\n },\\n \\\"additionalProperties\\\": false\\n }\\n },\\n \\\"required\\\": [\\n \\\"version\\\",\\n \\\"name\\\",\\n \\\"semantic_colors\\\",\\n \\\"surface_colors\\\",\\n \\\"text_colors\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n}\\n\",\n \"schemas/crucible-ts/design/tui/v1.0.0/component.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/design/tui/v1.0.0/component.schema.json\\\",\\n \\\"title\\\": \\\"TUI Component Patterns\\\",\\n \\\"description\\\": \\\"Terminal UI component/widget patterns with state styling and extensibility\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"$defs\\\": {\\n \\\"componentState\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"default\\\",\\n \\\"hover\\\",\\n \\\"focus\\\",\\n \\\"active\\\",\\n \\\"disabled\\\",\\n \\\"selected\\\",\\n \\\"error\\\",\\n \\\"success\\\",\\n \\\"loading\\\"\\n ],\\n \\\"description\\\": \\\"Component state (references core/component-states)\\\"\\n },\\n \\\"stateStyle\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Styling for a component state\\\",\\n \\\"properties\\\": {\\n \\\"foreground\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Foreground color reference (semantic or literal)\\\"\\n },\\n \\\"background\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Background color reference\\\"\\n },\\n \\\"border\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Border color reference\\\"\\n },\\n \\\"emphasis\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"bold\\\",\\n \\\"dim\\\",\\n \\\"italic\\\",\\n \\\"underline\\\",\\n \\\"inverse\\\",\\n \\\"strikethrough\\\"\\n ]\\n },\\n \\\"description\\\": \\\"Text emphasis attributes\\\"\\n },\\n \\\"prefix\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"State indicator prefix\\\"\\n },\\n \\\"suffix\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"State indicator suffix\\\"\\n }\\n }\\n },\\n \\\"componentDefinition\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"A component type definition\\\",\\n \\\"properties\\\": {\\n \\\"id\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[a-z][a-z0-9-]*$\\\",\\n \\\"description\\\": \\\"Component type identifier\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Component purpose and usage\\\"\\n },\\n \\\"states\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Styling for each state\\\",\\n \\\"additionalProperties\\\": {\\n \\\"$ref\\\": \\\"#/$defs/stateStyle\\\"\\n }\\n },\\n \\\"variants\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Component variants (e.g., size, intent)\\\",\\n \\\"additionalProperties\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"states\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": {\\n \\\"$ref\\\": \\\"#/$defs/stateStyle\\\"\\n }\\n }\\n }\\n }\\n },\\n \\\"anatomy\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Component parts/slots\\\",\\n \\\"additionalProperties\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"required\\\": {\\n \\\"type\\\": \\\"boolean\\\"\\n }\\n }\\n }\\n }\\n },\\n \\\"required\\\": [\\n \\\"id\\\",\\n \\\"states\\\"\\n ]\\n },\\n \\\"buttonComponent\\\": {\\n \\\"allOf\\\": [\\n {\\n \\\"$ref\\\": \\\"#/$defs/componentDefinition\\\"\\n },\\n {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"min_width\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"description\\\": \\\"Minimum button width in columns\\\"\\n },\\n \\\"padding_horizontal\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"description\\\": \\\"Horizontal padding in columns\\\"\\n }\\n }\\n }\\n ]\\n },\\n \\\"inputComponent\\\": {\\n \\\"allOf\\\": [\\n {\\n \\\"$ref\\\": \\\"#/$defs/componentDefinition\\\"\\n },\\n {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"cursor_char\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"maxLength\\\": 1,\\n \\\"description\\\": \\\"Cursor character\\\"\\n },\\n \\\"placeholder_style\\\": {\\n \\\"$ref\\\": \\\"#/$defs/stateStyle\\\"\\n },\\n \\\"selection_style\\\": {\\n \\\"$ref\\\": \\\"#/$defs/stateStyle\\\"\\n }\\n }\\n }\\n ]\\n },\\n \\\"listComponent\\\": {\\n \\\"allOf\\\": [\\n {\\n \\\"$ref\\\": \\\"#/$defs/componentDefinition\\\"\\n },\\n {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"item_prefix\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Prefix for list items\\\"\\n },\\n \\\"selected_prefix\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Prefix for selected item\\\"\\n },\\n \\\"scrollbar\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"track_char\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"maxLength\\\": 1\\n },\\n \\\"thumb_char\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"maxLength\\\": 1\\n },\\n \\\"position\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"left\\\",\\n \\\"right\\\"\\n ]\\n }\\n }\\n }\\n }\\n }\\n ]\\n },\\n \\\"tableComponent\\\": {\\n \\\"allOf\\\": [\\n {\\n \\\"$ref\\\": \\\"#/$defs/componentDefinition\\\"\\n },\\n {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"header_style\\\": {\\n \\\"$ref\\\": \\\"#/$defs/stateStyle\\\"\\n },\\n \\\"row_alternate\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Alternate row styling\\\"\\n },\\n \\\"row_alternate_style\\\": {\\n \\\"$ref\\\": \\\"#/$defs/stateStyle\\\"\\n },\\n \\\"cell_padding\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"description\\\": \\\"Cell padding in columns\\\"\\n },\\n \\\"border_style\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"none\\\",\\n \\\"ascii\\\",\\n \\\"single\\\",\\n \\\"double\\\",\\n \\\"rounded\\\"\\n ],\\n \\\"description\\\": \\\"Table border style\\\"\\n }\\n }\\n }\\n ]\\n }\\n },\\n \\\"properties\\\": {\\n \\\"$schema\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"JSON Schema reference\\\"\\n },\\n \\\"version\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[vV]?\\\\\\\\d+\\\\\\\\.\\\\\\\\d+\\\\\\\\.\\\\\\\\d+$\\\",\\n \\\"description\\\": \\\"Semantic version of the component patterns\\\"\\n },\\n \\\"components\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Component definitions by type\\\",\\n \\\"properties\\\": {\\n \\\"button\\\": {\\n \\\"$ref\\\": \\\"#/$defs/buttonComponent\\\"\\n },\\n \\\"input\\\": {\\n \\\"$ref\\\": \\\"#/$defs/inputComponent\\\"\\n },\\n \\\"select\\\": {\\n \\\"$ref\\\": \\\"#/$defs/inputComponent\\\"\\n },\\n \\\"checkbox\\\": {\\n \\\"$ref\\\": \\\"#/$defs/componentDefinition\\\"\\n },\\n \\\"radio\\\": {\\n \\\"$ref\\\": \\\"#/$defs/componentDefinition\\\"\\n },\\n \\\"toggle\\\": {\\n \\\"$ref\\\": \\\"#/$defs/componentDefinition\\\"\\n },\\n \\\"list\\\": {\\n \\\"$ref\\\": \\\"#/$defs/listComponent\\\"\\n },\\n \\\"table\\\": {\\n \\\"$ref\\\": \\\"#/$defs/tableComponent\\\"\\n },\\n \\\"tabs\\\": {\\n \\\"$ref\\\": \\\"#/$defs/componentDefinition\\\"\\n },\\n \\\"modal\\\": {\\n \\\"$ref\\\": \\\"#/$defs/componentDefinition\\\"\\n },\\n \\\"toast\\\": {\\n \\\"$ref\\\": \\\"#/$defs/componentDefinition\\\"\\n },\\n \\\"progress\\\": {\\n \\\"$ref\\\": \\\"#/$defs/componentDefinition\\\"\\n },\\n \\\"spinner\\\": {\\n \\\"$ref\\\": \\\"#/$defs/componentDefinition\\\"\\n },\\n \\\"tooltip\\\": {\\n \\\"$ref\\\": \\\"#/$defs/componentDefinition\\\"\\n },\\n \\\"menu\\\": {\\n \\\"$ref\\\": \\\"#/$defs/listComponent\\\"\\n },\\n \\\"breadcrumb\\\": {\\n \\\"$ref\\\": \\\"#/$defs/componentDefinition\\\"\\n },\\n \\\"panel\\\": {\\n \\\"$ref\\\": \\\"#/$defs/componentDefinition\\\"\\n },\\n \\\"card\\\": {\\n \\\"$ref\\\": \\\"#/$defs/componentDefinition\\\"\\n }\\n },\\n \\\"additionalProperties\\\": {\\n \\\"$ref\\\": \\\"#/$defs/componentDefinition\\\"\\n }\\n },\\n \\\"focus_ring\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Focus indicator styling\\\",\\n \\\"properties\\\": {\\n \\\"style\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"outline\\\",\\n \\\"background\\\",\\n \\\"underline\\\",\\n \\\"bracket\\\"\\n ],\\n \\\"description\\\": \\\"Focus indicator style\\\"\\n },\\n \\\"color\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Focus ring color reference\\\"\\n },\\n \\\"char_left\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"maxLength\\\": 1,\\n \\\"description\\\": \\\"Left bracket character (for bracket style)\\\"\\n },\\n \\\"char_right\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"maxLength\\\": 1,\\n \\\"description\\\": \\\"Right bracket character (for bracket style)\\\"\\n }\\n }\\n },\\n \\\"icons\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Component icon definitions\\\",\\n \\\"additionalProperties\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"nerd_font\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"unicode\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"ascii\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"ascii\\\"\\n ]\\n }\\n }\\n },\\n \\\"required\\\": [\\n \\\"version\\\",\\n \\\"components\\\"\\n ],\\n \\\"additionalProperties\\\": true\\n}\\n\",\n \"schemas/crucible-ts/design/tui/v1.0.0/layout.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/design/tui/v1.0.0/layout.schema.json\\\",\\n \\\"title\\\": \\\"TUI Layout\\\",\\n \\\"description\\\": \\\"Terminal layout configuration with cell-based dimensions and responsive breakpoints\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"$defs\\\": {\\n \\\"cellDimension\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"description\\\": \\\"Dimension in terminal cells (characters/rows)\\\"\\n },\\n \\\"spacingValue\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Spacing value in cells\\\",\\n \\\"properties\\\": {\\n \\\"cols\\\": {\\n \\\"$ref\\\": \\\"#/$defs/cellDimension\\\",\\n \\\"description\\\": \\\"Horizontal spacing in columns\\\"\\n },\\n \\\"rows\\\": {\\n \\\"$ref\\\": \\\"#/$defs/cellDimension\\\",\\n \\\"description\\\": \\\"Vertical spacing in rows\\\"\\n }\\n },\\n \\\"additionalProperties\\\": false\\n },\\n \\\"terminalBreakpoint\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Terminal size breakpoint\\\",\\n \\\"properties\\\": {\\n \\\"name\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Breakpoint identifier\\\"\\n },\\n \\\"min_cols\\\": {\\n \\\"$ref\\\": \\\"#/$defs/cellDimension\\\",\\n \\\"description\\\": \\\"Minimum terminal width in columns\\\"\\n },\\n \\\"min_rows\\\": {\\n \\\"$ref\\\": \\\"#/$defs/cellDimension\\\",\\n \\\"description\\\": \\\"Minimum terminal height in rows\\\"\\n },\\n \\\"tier\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"compact\\\",\\n \\\"default\\\",\\n \\\"comfortable\\\",\\n \\\"spacious\\\"\\n ],\\n \\\"description\\\": \\\"Density tier (references core/spacing-scale)\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Typical use case for this breakpoint\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"name\\\",\\n \\\"min_cols\\\",\\n \\\"tier\\\"\\n ]\\n },\\n \\\"ribbonPosition\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"top\\\",\\n \\\"bottom\\\",\\n \\\"left\\\",\\n \\\"right\\\"\\n ],\\n \\\"description\\\": \\\"Ribbon/chrome position\\\"\\n },\\n \\\"ribbonDefinition\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"UI chrome/ribbon area definition\\\",\\n \\\"properties\\\": {\\n \\\"id\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Ribbon identifier\\\"\\n },\\n \\\"position\\\": {\\n \\\"$ref\\\": \\\"#/$defs/ribbonPosition\\\"\\n },\\n \\\"size\\\": {\\n \\\"$ref\\\": \\\"#/$defs/cellDimension\\\",\\n \\\"description\\\": \\\"Height (for top/bottom) or width (for left/right)\\\"\\n },\\n \\\"visible\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Whether ribbon is visible by default\\\"\\n },\\n \\\"collapsible\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Whether ribbon can be collapsed\\\"\\n },\\n \\\"min_terminal_cols\\\": {\\n \\\"$ref\\\": \\\"#/$defs/cellDimension\\\",\\n \\\"description\\\": \\\"Minimum terminal width to show this ribbon\\\"\\n },\\n \\\"min_terminal_rows\\\": {\\n \\\"$ref\\\": \\\"#/$defs/cellDimension\\\",\\n \\\"description\\\": \\\"Minimum terminal height to show this ribbon\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"id\\\",\\n \\\"position\\\",\\n \\\"size\\\"\\n ]\\n },\\n \\\"panelDefinition\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Content panel definition\\\",\\n \\\"properties\\\": {\\n \\\"id\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Panel identifier\\\"\\n },\\n \\\"flex\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"minimum\\\": 0,\\n \\\"description\\\": \\\"Flex grow factor for available space\\\"\\n },\\n \\\"min_cols\\\": {\\n \\\"$ref\\\": \\\"#/$defs/cellDimension\\\",\\n \\\"description\\\": \\\"Minimum width in columns\\\"\\n },\\n \\\"max_cols\\\": {\\n \\\"$ref\\\": \\\"#/$defs/cellDimension\\\",\\n \\\"description\\\": \\\"Maximum width in columns\\\"\\n },\\n \\\"min_rows\\\": {\\n \\\"$ref\\\": \\\"#/$defs/cellDimension\\\",\\n \\\"description\\\": \\\"Minimum height in rows\\\"\\n },\\n \\\"max_rows\\\": {\\n \\\"$ref\\\": \\\"#/$defs/cellDimension\\\",\\n \\\"description\\\": \\\"Maximum height in rows\\\"\\n },\\n \\\"scrollable\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Whether panel content can scroll\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"id\\\"\\n ]\\n },\\n \\\"alignmentValue\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"start\\\",\\n \\\"center\\\",\\n \\\"end\\\",\\n \\\"stretch\\\"\\n ],\\n \\\"description\\\": \\\"Alignment value\\\"\\n }\\n },\\n \\\"properties\\\": {\\n \\\"$schema\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"JSON Schema reference\\\"\\n },\\n \\\"version\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[vV]?\\\\\\\\d+\\\\\\\\.\\\\\\\\d+\\\\\\\\.\\\\\\\\d+$\\\",\\n \\\"description\\\": \\\"Semantic version of the layout configuration\\\"\\n },\\n \\\"breakpoints\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Terminal size breakpoints (ordered small to large)\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"#/$defs/terminalBreakpoint\\\"\\n },\\n \\\"minItems\\\": 1\\n },\\n \\\"spacing\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Spacing scale in terminal cells\\\",\\n \\\"properties\\\": {\\n \\\"none\\\": {\\n \\\"$ref\\\": \\\"#/$defs/spacingValue\\\"\\n },\\n \\\"xs\\\": {\\n \\\"$ref\\\": \\\"#/$defs/spacingValue\\\"\\n },\\n \\\"sm\\\": {\\n \\\"$ref\\\": \\\"#/$defs/spacingValue\\\"\\n },\\n \\\"md\\\": {\\n \\\"$ref\\\": \\\"#/$defs/spacingValue\\\"\\n },\\n \\\"lg\\\": {\\n \\\"$ref\\\": \\\"#/$defs/spacingValue\\\"\\n },\\n \\\"xl\\\": {\\n \\\"$ref\\\": \\\"#/$defs/spacingValue\\\"\\n }\\n },\\n \\\"additionalProperties\\\": {\\n \\\"$ref\\\": \\\"#/$defs/spacingValue\\\"\\n }\\n },\\n \\\"ribbons\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"UI chrome areas (status bars, sidebars, etc.)\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"#/$defs/ribbonDefinition\\\"\\n }\\n },\\n \\\"panels\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Main content panel definitions\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"#/$defs/panelDefinition\\\"\\n }\\n },\\n \\\"constraints\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Layout constraints\\\",\\n \\\"properties\\\": {\\n \\\"min_content_cols\\\": {\\n \\\"$ref\\\": \\\"#/$defs/cellDimension\\\",\\n \\\"description\\\": \\\"Minimum usable content width\\\"\\n },\\n \\\"min_content_rows\\\": {\\n \\\"$ref\\\": \\\"#/$defs/cellDimension\\\",\\n \\\"description\\\": \\\"Minimum usable content height\\\"\\n },\\n \\\"max_content_cols\\\": {\\n \\\"$ref\\\": \\\"#/$defs/cellDimension\\\",\\n \\\"description\\\": \\\"Maximum content width (for readability)\\\"\\n },\\n \\\"padding\\\": {\\n \\\"$ref\\\": \\\"#/$defs/spacingValue\\\",\\n \\\"description\\\": \\\"Default content padding\\\"\\n },\\n \\\"gap\\\": {\\n \\\"$ref\\\": \\\"#/$defs/spacingValue\\\",\\n \\\"description\\\": \\\"Default gap between elements\\\"\\n }\\n }\\n },\\n \\\"responsive_behavior\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Behavior at different terminal sizes\\\",\\n \\\"properties\\\": {\\n \\\"collapse_sidebars_below\\\": {\\n \\\"$ref\\\": \\\"#/$defs/cellDimension\\\",\\n \\\"description\\\": \\\"Column width below which sidebars collapse\\\"\\n },\\n \\\"hide_chrome_below\\\": {\\n \\\"$ref\\\": \\\"#/$defs/cellDimension\\\",\\n \\\"description\\\": \\\"Column width below which chrome is hidden\\\"\\n },\\n \\\"stack_panels_below\\\": {\\n \\\"$ref\\\": \\\"#/$defs/cellDimension\\\",\\n \\\"description\\\": \\\"Column width below which panels stack vertically\\\"\\n }\\n }\\n }\\n },\\n \\\"required\\\": [\\n \\\"version\\\",\\n \\\"breakpoints\\\",\\n \\\"spacing\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n}\\n\",\n \"schemas/crucible-ts/design/tui/v1.0.0/theme.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/design/tui/v1.0.0/theme.schema.json\\\",\\n \\\"title\\\": \\\"TUI Theme\\\",\\n \\\"description\\\": \\\"Root composition schema for Terminal UI themes, aggregating color palette, typography, layout, and component patterns\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"$schema\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"JSON Schema reference for validation\\\"\\n },\\n \\\"version\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[vV]?\\\\\\\\d+\\\\\\\\.\\\\\\\\d+\\\\\\\\.\\\\\\\\d+$\\\",\\n \\\"description\\\": \\\"Theme version (SemVer)\\\"\\n },\\n \\\"schema_version\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"const\\\": \\\"1.0.0\\\",\\n \\\"description\\\": \\\"TUI design system schema version this theme conforms to\\\"\\n },\\n \\\"metadata\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Theme metadata\\\",\\n \\\"properties\\\": {\\n \\\"name\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Theme display name\\\"\\n },\\n \\\"id\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[a-z][a-z0-9-]*$\\\",\\n \\\"description\\\": \\\"Theme identifier (kebab-case)\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Theme description and intended use\\\"\\n },\\n \\\"author\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Theme author or organization\\\"\\n },\\n \\\"license\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Theme license\\\"\\n },\\n \\\"tags\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": \\\"Theme tags for categorization\\\"\\n },\\n \\\"dark_mode\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Whether this is a dark mode theme\\\"\\n },\\n \\\"high_contrast\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Whether this is a high contrast theme\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"name\\\",\\n \\\"id\\\"\\n ]\\n },\\n \\\"requirements\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Terminal capability requirements\\\",\\n \\\"properties\\\": {\\n \\\"min_color_capability\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"basic\\\",\\n \\\"16\\\",\\n \\\"256\\\",\\n \\\"truecolor\\\"\\n ],\\n \\\"description\\\": \\\"Minimum color capability for this theme\\\"\\n },\\n \\\"min_charset\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"ascii\\\",\\n \\\"extended-ascii\\\",\\n \\\"unicode-basic\\\",\\n \\\"unicode-full\\\"\\n ],\\n \\\"description\\\": \\\"Minimum character set required\\\"\\n },\\n \\\"nerd_font_recommended\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Whether Nerd Font is recommended\\\"\\n },\\n \\\"min_cols\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 40,\\n \\\"description\\\": \\\"Minimum terminal width\\\"\\n },\\n \\\"min_rows\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 10,\\n \\\"description\\\": \\\"Minimum terminal height\\\"\\n }\\n }\\n },\\n \\\"colors\\\": {\\n \\\"$ref\\\": \\\"color-palette.schema.json\\\",\\n \\\"description\\\": \\\"Color palette configuration\\\"\\n },\\n \\\"typography\\\": {\\n \\\"$ref\\\": \\\"typography.schema.json\\\",\\n \\\"description\\\": \\\"Typography configuration\\\"\\n },\\n \\\"layout\\\": {\\n \\\"$ref\\\": \\\"layout.schema.json\\\",\\n \\\"description\\\": \\\"Layout configuration\\\"\\n },\\n \\\"components\\\": {\\n \\\"$ref\\\": \\\"component.schema.json\\\",\\n \\\"description\\\": \\\"Component pattern configuration\\\"\\n },\\n \\\"platform_overrides\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Platform-specific overrides\\\",\\n \\\"properties\\\": {\\n \\\"windows_terminal\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Windows Terminal specific overrides\\\",\\n \\\"additionalProperties\\\": true\\n },\\n \\\"iterm2\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"iTerm2 specific overrides\\\",\\n \\\"additionalProperties\\\": true\\n },\\n \\\"ghostty\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Ghostty specific overrides\\\",\\n \\\"additionalProperties\\\": true\\n },\\n \\\"apple_terminal\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Apple Terminal specific overrides\\\",\\n \\\"additionalProperties\\\": true\\n },\\n \\\"linux_console\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Linux console specific overrides\\\",\\n \\\"additionalProperties\\\": true\\n }\\n },\\n \\\"additionalProperties\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": true\\n }\\n },\\n \\\"accessibility\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Accessibility configuration\\\",\\n \\\"properties\\\": {\\n \\\"wcag_level\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"A\\\",\\n \\\"AA\\\",\\n \\\"AAA\\\"\\n ],\\n \\\"description\\\": \\\"WCAG conformance target\\\"\\n },\\n \\\"min_contrast_ratio\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"minimum\\\": 1,\\n \\\"maximum\\\": 21,\\n \\\"description\\\": \\\"Minimum contrast ratio for text\\\"\\n },\\n \\\"focus_visible_required\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Whether focus indicators must be visible\\\"\\n },\\n \\\"motion_reduced\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Whether animations are reduced/disabled\\\"\\n },\\n \\\"color_blind_safe\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Whether theme is safe for common color blindness\\\"\\n }\\n }\\n },\\n \\\"extensions\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Application-specific extensions\\\",\\n \\\"additionalProperties\\\": true\\n }\\n },\\n \\\"required\\\": [\\n \\\"version\\\",\\n \\\"schema_version\\\",\\n \\\"metadata\\\",\\n \\\"colors\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n}\\n\",\n \"schemas/crucible-ts/design/tui/v1.0.0/typography.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/design/tui/v1.0.0/typography.schema.json\\\",\\n \\\"title\\\": \\\"TUI Typography\\\",\\n \\\"description\\\": \\\"Terminal typography configuration with charset support, glyph handling, and CJK width considerations\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"$defs\\\": {\\n \\\"charsetLevel\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"ascii\\\",\\n \\\"extended-ascii\\\",\\n \\\"unicode-basic\\\",\\n \\\"unicode-full\\\"\\n ],\\n \\\"description\\\": \\\"Character set capability level\\\"\\n },\\n \\\"boxDrawingSet\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"ascii\\\",\\n \\\"single\\\",\\n \\\"double\\\",\\n \\\"rounded\\\",\\n \\\"heavy\\\",\\n \\\"double-single\\\"\\n ],\\n \\\"description\\\": \\\"Box drawing character set preference\\\"\\n },\\n \\\"boxCharacters\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Box drawing character definitions\\\",\\n \\\"properties\\\": {\\n \\\"horizontal\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"maxLength\\\": 1\\n },\\n \\\"vertical\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"maxLength\\\": 1\\n },\\n \\\"top_left\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"maxLength\\\": 1\\n },\\n \\\"top_right\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"maxLength\\\": 1\\n },\\n \\\"bottom_left\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"maxLength\\\": 1\\n },\\n \\\"bottom_right\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"maxLength\\\": 1\\n },\\n \\\"cross\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"maxLength\\\": 1\\n },\\n \\\"t_down\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"maxLength\\\": 1\\n },\\n \\\"t_up\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"maxLength\\\": 1\\n },\\n \\\"t_left\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"maxLength\\\": 1\\n },\\n \\\"t_right\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"maxLength\\\": 1\\n }\\n },\\n \\\"additionalProperties\\\": false\\n },\\n \\\"textEmphasis\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"normal\\\",\\n \\\"bold\\\",\\n \\\"dim\\\",\\n \\\"italic\\\",\\n \\\"underline\\\",\\n \\\"blink\\\",\\n \\\"inverse\\\",\\n \\\"hidden\\\",\\n \\\"strikethrough\\\"\\n ],\\n \\\"description\\\": \\\"Terminal text emphasis (SGR attributes)\\\"\\n },\\n \\\"glyphCategory\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"status\\\",\\n \\\"navigation\\\",\\n \\\"file-type\\\",\\n \\\"git\\\",\\n \\\"weather\\\",\\n \\\"powerline\\\",\\n \\\"devicon\\\",\\n \\\"custom\\\"\\n ],\\n \\\"description\\\": \\\"Glyph category for icon fonts\\\"\\n },\\n \\\"glyphDefinition\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"A glyph with fallback chain\\\",\\n \\\"properties\\\": {\\n \\\"name\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Glyph identifier\\\"\\n },\\n \\\"category\\\": {\\n \\\"$ref\\\": \\\"#/$defs/glyphCategory\\\"\\n },\\n \\\"nerd_font\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Nerd Font glyph (requires Nerd Font)\\\"\\n },\\n \\\"unicode\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Standard Unicode fallback\\\"\\n },\\n \\\"ascii\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"ASCII fallback\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"What this glyph represents\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"name\\\",\\n \\\"ascii\\\"\\n ]\\n },\\n \\\"typographyRoleStyle\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Terminal styling for a typography role\\\",\\n \\\"properties\\\": {\\n \\\"role\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Typography role (references core/typography-roles)\\\"\\n },\\n \\\"emphasis\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"#/$defs/textEmphasis\\\"\\n },\\n \\\"description\\\": \\\"Applied text emphasis\\\"\\n },\\n \\\"prefix\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Optional prefix glyph/text\\\"\\n },\\n \\\"suffix\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Optional suffix glyph/text\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"role\\\"\\n ]\\n },\\n \\\"cjkWidthMode\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"narrow\\\",\\n \\\"wide\\\",\\n \\\"ambiguous-narrow\\\",\\n \\\"ambiguous-wide\\\"\\n ],\\n \\\"description\\\": \\\"CJK character width handling mode\\\"\\n }\\n },\\n \\\"properties\\\": {\\n \\\"$schema\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"JSON Schema reference\\\"\\n },\\n \\\"version\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[vV]?\\\\\\\\d+\\\\\\\\.\\\\\\\\d+\\\\\\\\.\\\\\\\\d+$\\\",\\n \\\"description\\\": \\\"Semantic version of the typography configuration\\\"\\n },\\n \\\"charset_level\\\": {\\n \\\"$ref\\\": \\\"#/$defs/charsetLevel\\\",\\n \\\"description\\\": \\\"Required character set capability\\\"\\n },\\n \\\"box_drawing\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Box drawing configuration\\\",\\n \\\"properties\\\": {\\n \\\"preferred_set\\\": {\\n \\\"$ref\\\": \\\"#/$defs/boxDrawingSet\\\"\\n },\\n \\\"fallback_set\\\": {\\n \\\"$ref\\\": \\\"#/$defs/boxDrawingSet\\\"\\n },\\n \\\"custom_chars\\\": {\\n \\\"$ref\\\": \\\"#/$defs/boxCharacters\\\"\\n }\\n }\\n },\\n \\\"text_roles\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Terminal styling for typography roles\\\",\\n \\\"additionalProperties\\\": {\\n \\\"$ref\\\": \\\"#/$defs/typographyRoleStyle\\\"\\n }\\n },\\n \\\"glyphs\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Glyph library with fallbacks\\\",\\n \\\"properties\\\": {\\n \\\"nerd_font_enabled\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Whether Nerd Font glyphs are available\\\"\\n },\\n \\\"definitions\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"#/$defs/glyphDefinition\\\"\\n }\\n }\\n }\\n },\\n \\\"cjk_handling\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"CJK and wide character handling\\\",\\n \\\"properties\\\": {\\n \\\"width_mode\\\": {\\n \\\"$ref\\\": \\\"#/$defs/cjkWidthMode\\\"\\n },\\n \\\"emoji_width\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"enum\\\": [\\n 1,\\n 2\\n ],\\n \\\"description\\\": \\\"Display width of emoji characters\\\"\\n },\\n \\\"ambiguous_width\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"enum\\\": [\\n 1,\\n 2\\n ],\\n \\\"description\\\": \\\"Display width of ambiguous-width characters\\\"\\n }\\n }\\n },\\n \\\"spinners\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Loading spinner character sequences\\\",\\n \\\"additionalProperties\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"frames\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": \\\"Animation frames\\\"\\n },\\n \\\"interval_ms\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 50,\\n \\\"description\\\": \\\"Frame interval in milliseconds\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"frames\\\",\\n \\\"interval_ms\\\"\\n ]\\n }\\n },\\n \\\"progress_chars\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Progress bar characters\\\",\\n \\\"properties\\\": {\\n \\\"filled\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"maxLength\\\": 1\\n },\\n \\\"empty\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"maxLength\\\": 1\\n },\\n \\\"head\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"maxLength\\\": 1\\n },\\n \\\"left_bracket\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"maxLength\\\": 1\\n },\\n \\\"right_bracket\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"maxLength\\\": 1\\n }\\n }\\n }\\n },\\n \\\"required\\\": [\\n \\\"version\\\",\\n \\\"charset_level\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n}\\n\",\n \"schemas/crucible-ts/devsecops/lorage-central/activity/v1.0.0/activity.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/devsecops/lorage-central/activity/v1.0.0/activity.schema.json\\\",\\n \\\"title\\\": \\\"L'Orage Central Activity Record\\\",\\n \\\"description\\\": \\\"Schema for audit events in L'Orage Central (e.g., unlock success, deploy start). Emitted via gofulmen observability; stored in policy.audit backend (e.g., structured logs to Turso). No sensitive data.\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"id\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Slug-compatible unique event ID (UUID-like)\\\",\\n \\\"pattern\\\": \\\"^[a-z0-9-]+$\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 127\\n },\\n \\\"timestamp\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"ISO 8601 UTC timestamp\\\",\\n \\\"pattern\\\": \\\"^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$\\\"\\n },\\n \\\"tenant\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Scoped tenant (from policy.tenant)\\\",\\n \\\"pattern\\\": \\\"^[a-z0-9-]+$\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 127\\n },\\n \\\"eventType\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Action type (e.g., unlock for MFA success)\\\",\\n \\\"enum\\\": [\\n \\\"unlock\\\",\\n \\\"deploy\\\",\\n \\\"seed\\\",\\n \\\"query\\\",\\n \\\"validate\\\",\\n \\\"error\\\"\\n ]\\n },\\n \\\"outcome\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Result (e.g., success for valid deploy)\\\",\\n \\\"enum\\\": [\\n \\\"success\\\",\\n \\\"failure\\\",\\n \\\"warning\\\"\\n ]\\n },\\n \\\"metadata\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Non-sensitive details (e.g., op duration, IP; no secrets)\\\",\\n \\\"properties\\\": {\\n \\\"sessionId\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Slug-compatible session ID (from REPL token)\\\",\\n \\\"pattern\\\": \\\"^[a-z0-9-]+$\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 127\\n },\\n \\\"userId\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Anonymized user (e.g., user-123; from MFA)\\\",\\n \\\"pattern\\\": \\\"^[a-z0-9-]+$\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 63\\n },\\n \\\"duration\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Op duration (e.g., 2.5s; for metrics)\\\",\\n \\\"pattern\\\": \\\"^[0-9.]+[smhd]$\\\"\\n },\\n \\\"ip\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Client IP (anonymized; for audit)\\\",\\n \\\"pattern\\\": \\\"^[0-9]{1,3}\\\\\\\\.[0-9]{1,3}\\\\\\\\.[0-9]{1,3}\\\\\\\\.[0-9]{1,3}$\\\"\\n },\\n \\\"details\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Op-specific details (e.g., recipe name for deploy)\\\",\\n \\\"additionalProperties\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n }\\n },\\n \\\"required\\\": [\\n \\\"sessionId\\\",\\n \\\"userId\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n },\\n \\\"backend\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Audit storage (refs policy.audit)\\\",\\n \\\"properties\\\": {\\n \\\"level\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"simple\\\",\\n \\\"structured\\\"\\n ]\\n },\\n \\\"retain\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^([0-9]+)([smhdwMy])$\\\"\\n }\\n },\\n \\\"additionalProperties\\\": false\\n }\\n },\\n \\\"required\\\": [\\n \\\"id\\\",\\n \\\"timestamp\\\",\\n \\\"tenant\\\",\\n \\\"eventType\\\",\\n \\\"outcome\\\",\\n \\\"metadata\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n}\\n\",\n \"schemas/crucible-ts/devsecops/lorage-central/credentials/v1.0.0/credentials.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/devsecops/lorage-central/credentials/v1.0.0/credentials.schema.json\\\",\\n \\\"title\\\": \\\"L'Orage Central Root Credentials Metadata\\\",\\n \\\"description\\\": \\\"Schema for root credential metadata (e.g., GPG/Vaultwarden keys for tenant bootstrap). Loaded via gofulmen shim; used in REPL unlock/seeding. Values opaque (refs only); metadata enables expiry/audit without exposure.\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"id\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Slug-compatible credential ID (unique per tenant)\\\",\\n \\\"pattern\\\": \\\"^[a-z0-9-]+$\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 127\\n },\\n \\\"tenant\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Linked tenant (from policy.tenant; enforces isolation)\\\",\\n \\\"pattern\\\": \\\"^[a-z0-9-]+$\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 127\\n },\\n \\\"type\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Credential type (matches policy.isolation.store or auth-methods)\\\",\\n \\\"enum\\\": [\\n \\\"gpg-key\\\",\\n \\\"vaultwarden-token\\\",\\n \\\"turso-root\\\",\\n \\\"yubikey-seed\\\"\\n ]\\n },\\n \\\"ref\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Opaque reference (e.g., gpg://keyring/acme-bootstrap; decrypted by microtool)\\\",\\n \\\"pattern\\\": \\\"^[a-z0-9:/.-]+$\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 255\\n },\\n \\\"metadata\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Non-sensitive metadata (e.g., expiry, created; for validation/audit)\\\",\\n \\\"properties\\\": {\\n \\\"created\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"ISO 8601 timestamp\\\",\\n \\\"pattern\\\": \\\"^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$\\\"\\n },\\n \\\"expires\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Expiry timestamp (enforced in REPL)\\\",\\n \\\"pattern\\\": \\\"^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$\\\"\\n },\\n \\\"purpose\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Usage (e.g., tenant-bootstrap)\\\",\\n \\\"pattern\\\": \\\"^[a-z0-9-]+$\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 127\\n },\\n \\\"rotation\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Rotation policy (optional; e.g., auto-rotate every 90d)\\\",\\n \\\"properties\\\": {\\n \\\"interval\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Rotation frequency (e.g., 90d)\\\",\\n \\\"pattern\\\": \\\"^([0-9]+)([smhdwMy])$\\\"\\n },\\n \\\"method\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"auto\\\",\\n \\\"manual\\\"\\n ],\\n \\\"default\\\": \\\"manual\\\"\\n }\\n },\\n \\\"additionalProperties\\\": false\\n }\\n },\\n \\\"required\\\": [\\n \\\"created\\\",\\n \\\"expires\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n },\\n \\\"backend\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Storage backend (refs policy.isolation.store; for root-specific overrides)\\\",\\n \\\"properties\\\": {\\n \\\"type\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"libsql\\\",\\n \\\"turso\\\",\\n \\\"gpg-file\\\",\\n \\\"vaultwarden\\\"\\n ]\\n },\\n \\\"conn\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": true\\n },\\n \\\"enc\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"default\\\": false\\n }\\n },\\n \\\"required\\\": [\\n \\\"type\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n }\\n },\\n \\\"required\\\": [\\n \\\"id\\\",\\n \\\"tenant\\\",\\n \\\"type\\\",\\n \\\"ref\\\",\\n \\\"metadata\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n}\\n\",\n \"schemas/crucible-ts/devsecops/lorage-central/policy/v1.0.0/policy.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/devsecops/lorage-central/policy/v1.0.0/policy.schema.json\\\",\\n \\\"title\\\": \\\"L'Orage Central Tenant Policy\\\",\\n \\\"description\\\": \\\"Defines rules for tenant-scoped sessions in L'Orage Central REPL/CLI. Loaded via gofulmen shim from Crucible; enforced at unlock/deploy. Supports pluggable secrets (e.g., Turso for HA, GPG for cloud-free). No persistence MVP—force re-unlock per session.\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"tenant\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Public tenant ID (from registry; obscure for confidential clients)\\\",\\n \\\"pattern\\\": \\\"^[a-z0-9-]+$\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 127\\n },\\n \\\"session\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"In-memory session rules (no disk persistence; TTL enforces re-unlock)\\\",\\n \\\"properties\\\": {\\n \\\"ttl\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Token TTL (parsed as duration; e.g., '15m' = 15 minutes)\\\",\\n \\\"properties\\\": {\\n \\\"default\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Default TTL (force re-unlock per REPL session)\\\",\\n \\\"pattern\\\": \\\"^([0-9]+)([smhd])$\\\"\\n },\\n \\\"ops\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Overrides per operation (e.g., 'deploy' gets 1h)\\\",\\n \\\"additionalProperties\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^([0-9]+)([smhd])$\\\"\\n }\\n }\\n },\\n \\\"required\\\": [\\n \\\"default\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n },\\n \\\"maxConcurrent\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"description\\\": \\\"Max simultaneous sessions (1 for strict isolation)\\\",\\n \\\"minimum\\\": 1,\\n \\\"maximum\\\": 10,\\n \\\"default\\\": 1\\n }\\n },\\n \\\"required\\\": [\\n \\\"ttl\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n },\\n \\\"mfa\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Unlock MFA requirements (integrated with CLI/web pop-up)\\\",\\n \\\"properties\\\": {\\n \\\"required\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"MFA mandatory for unlock (false for dev/local only; auto-true if registry.dataSensitivity.pii=true)\\\",\\n \\\"default\\\": true\\n },\\n \\\"methods\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Preferred order (first available used; from auth-methods taxonomy)\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"../../../../taxonomy/devsecops/auth-methods/v1.0.0/auth-methods-key.schema.json\\\"\\n },\\n \\\"minItems\\\": 1,\\n \\\"uniqueItems\\\": true\\n },\\n \\\"fallback\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"If all methods fail (e.g., 'none' for air-gapped, risky)\\\",\\n \\\"enum\\\": [\\n \\\"cli-prompt\\\",\\n \\\"none\\\"\\n ],\\n \\\"default\\\": \\\"cli-prompt\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"required\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n },\\n \\\"isolation\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Tenant data separation (separate stores, no cross-access)\\\",\\n \\\"properties\\\": {\\n \\\"store\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Secrets backend config (opaque refs decrypted at runtime)\\\",\\n \\\"properties\\\": {\\n \\\"type\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Backend type (Turso for HA, GPG for local)\\\",\\n \\\"enum\\\": [\\n \\\"libsql\\\",\\n \\\"turso\\\",\\n \\\"gpg-file\\\",\\n \\\"vaultwarden\\\"\\n ],\\n \\\"default\\\": \\\"turso\\\"\\n },\\n \\\"conn\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Connection details (e.g., URL/auth ref; encrypted in storage)\\\",\\n \\\"additionalProperties\\\": true\\n },\\n \\\"enc\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Enable GPG file-level encryption (true for cloud-free HA via CR-SQLite)\\\",\\n \\\"default\\\": false\\n }\\n },\\n \\\"required\\\": [\\n \\\"type\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n },\\n \\\"crossAccess\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Allow admin cross-tenant ops (false for strict multi-tenant)\\\",\\n \\\"default\\\": false\\n }\\n },\\n \\\"required\\\": [\\n \\\"store\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n },\\n \\\"geoRestrictions\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Enforced geo (from tenant.registry.geo; e.g., EU-only for PII)\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"../../../../taxonomy/devsecops/geo/v1.0.0/geo-key.schema.json\\\"\\n },\\n \\\"uniqueItems\\\": true\\n },\\n \\\"cloudRestrictions\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Allowed clouds (from tenant.registry.cloud; multi-OK)\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"../../../../taxonomy/devsecops/infra-providers/v1.0.0/infra-providers-key.schema.json\\\"\\n },\\n \\\"uniqueItems\\\": true\\n },\\n \\\"dataSensitivityGuards\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Auto-guards from registry.dataSensitivity (e.g., encrypt if PHI=true)\\\",\\n \\\"properties\\\": {\\n \\\"pii\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Enforce PII rules (e.g., mfa.required=true, geo EU-only)\\\",\\n \\\"default\\\": false\\n },\\n \\\"phi\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Enforce PHI (e.g., HIPAA encrypt/audit)\\\",\\n \\\"default\\\": false\\n }\\n },\\n \\\"additionalProperties\\\": false\\n },\\n \\\"audit\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Observability rules (integrates gofulmen logging schemas)\\\",\\n \\\"properties\\\": {\\n \\\"level\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Log profile (structured for REPL sessions)\\\",\\n \\\"enum\\\": [\\n \\\"simple\\\",\\n \\\"structured\\\"\\n ],\\n \\\"default\\\": \\\"structured\\\"\\n },\\n \\\"retain\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Audit retention (e.g., '30d' for compliance)\\\",\\n \\\"pattern\\\": \\\"^([0-9]+)([smhdwMy])$\\\",\\n \\\"default\\\": \\\"30d\\\"\\n }\\n },\\n \\\"additionalProperties\\\": false\\n }\\n },\\n \\\"required\\\": [\\n \\\"tenant\\\",\\n \\\"session\\\",\\n \\\"mfa\\\",\\n \\\"isolation\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n}\\n\",\n \"schemas/crucible-ts/devsecops/lorage-central/recipe/v1.0.0/recipe.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/devsecops/lorage-central/recipe/v1.0.0/recipe.schema.json\\\",\\n \\\"title\\\": \\\"L'Orage Central Recipe\\\",\\n \\\"description\\\": \\\"Schema-driven recipe for L'Orage Central deployments/seeding. Loaded via gofulmen shim; executed in REPL. Heavily declarative (components/secrets/validate); procedural opt-in via actions (e.g., bootstrap scripts). Phases/layering via infra-phases taxonomy for dep ordering/review (keys → network → buckets → assets).\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"name\\\",\\n \\\"type\\\",\\n \\\"target\\\",\\n \\\"components\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"name\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Slug-compatible recipe ID (lowercase hyphens; e.g., 'mattermost-stack').\\\",\\n \\\"pattern\\\": \\\"^[a-z0-9-]+$\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 127,\\n \\\"examples\\\": [\\n \\\"mattermost-stack\\\",\\n \\\"open-edx-k3s\\\"\\n ]\\n },\\n \\\"type\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"deploy\\\",\\n \\\"seed\\\"\\n ],\\n \\\"description\\\": \\\"Recipe subtype (deploy: infra/stack; seed: dataset population).\\\",\\n \\\"default\\\": \\\"deploy\\\"\\n },\\n \\\"target\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Provider/cloud target (focus DO/AWS/GCP; pluggable via taxonomy).\\\",\\n \\\"required\\\": [\\n \\\"provider\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"provider\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Provider ID (from infra-providers taxonomy).\\\",\\n \\\"$ref\\\": \\\"../../../../taxonomy/devsecops/infra-providers/v1.0.0/infra-providers-key.schema.json\\\"\\n },\\n \\\"region\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Region (e.g., 'nyc3' for DO; validate against provider.regions).\\\",\\n \\\"pattern\\\": \\\"^[a-z0-9-]+$\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 63,\\n \\\"examples\\\": [\\n \\\"us-east-1\\\",\\n \\\"nyc3\\\"\\n ]\\n },\\n \\\"backend\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Execution toolchain (e.g., 'opentofu', 'terraform', 'pulumi').\\\",\\n \\\"pattern\\\": \\\"^[a-z0-9-]+$\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 63,\\n \\\"default\\\": \\\"opentofu\\\",\\n \\\"examples\\\": [\\n \\\"opentofu\\\",\\n \\\"terraform\\\",\\n \\\"pulumi\\\"\\n ]\\n }\\n },\\n \\\"additionalProperties\\\": false\\n },\\n \\\"components\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Ordered stack (e.g., postgres -> mattermost); dependencies enforced via phases/dependsOn.\\\",\\n \\\"minItems\\\": 1,\\n \\\"items\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"name\\\",\\n \\\"image\\\",\\n \\\"phase\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"name\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Slug-compatible component ID (e.g., 'postgres').\\\",\\n \\\"pattern\\\": \\\"^[a-z0-9-]+$\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 63\\n },\\n \\\"image\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Container/image (e.g., 'postgres:15').\\\"\\n },\\n \\\"phase\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Infra phase (from infra-phases taxonomy; auto-orders DAG).\\\",\\n \\\"$ref\\\": \\\"../../../../taxonomy/devsecops/infra-phases/v1.0.0/infra-phases-key.schema.json\\\"\\n },\\n \\\"ports\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 1,\\n \\\"maximum\\\": 65535\\n },\\n \\\"description\\\": \\\"Exposed ports (e.g., [5432]).\\\"\\n },\\n \\\"env\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Env vars (refs for secrets).\\\",\\n \\\"additionalProperties\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"examples\\\": [\\n {\\n \\\"POSTGRES_DB\\\": \\\"mattermost\\\"\\n }\\n ]\\n },\\n \\\"secrets\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Secret refs (decrypted via policy backend).\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"ref\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"ref\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Opaque ref (e.g., 'gpg://keyring/acme/db-pass').\\\",\\n \\\"pattern\\\": \\\"^[a-z0-9:/.-]+$\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 255\\n },\\n \\\"injectAs\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Env var name (e.g., 'DB_PASS').\\\",\\n \\\"pattern\\\": \\\"^[A-Z_][A-Z0-9_]*$\\\"\\n }\\n },\\n \\\"additionalProperties\\\": false\\n }\\n },\\n \\\"dependsOn\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[a-z0-9-]+$\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 63\\n },\\n \\\"description\\\": \\\"Predecessors (e.g., ['postgres'] for mattermost; refs other components.name or phases.id).\\\"\\n },\\n \\\"module\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Tofu/Pulumi module slug (e.g., 'vpc-network'; web-key safe).\\\",\\n \\\"pattern\\\": \\\"^[a-z0-9-]+$\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 127\\n }\\n },\\n \\\"additionalProperties\\\": false\\n }\\n },\\n \\\"actions\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Procedural steps (opt-in for bootstrapping/pain points; runs before/after components by phase).\\\",\\n \\\"minItems\\\": 0,\\n \\\"items\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"type\\\",\\n \\\"phase\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"type\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"script\\\",\\n \\\"sdk-call\\\",\\n \\\"bootstrap\\\"\\n ],\\n \\\"description\\\": \\\"Action type (script: bash/python; sdk-call: provider API; bootstrap: init keys/network).\\\"\\n },\\n \\\"phase\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Associated infra phase (from taxonomy; orders execution).\\\",\\n \\\"$ref\\\": \\\"../../../../taxonomy/devsecops/infra-phases/v1.0.0/infra-phases-key.schema.json\\\"\\n },\\n \\\"cmd\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"For script/bootstrap (e.g., 'gpg --gen-key acme'; runs in REPL context).\\\",\\n \\\"pattern\\\": \\\"^[a-zA-Z0-9 /.-]+$\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 1024\\n },\\n \\\"params\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"For sdk-call (e.g., {resource: 'vpc', action: 'create'}).\\\",\\n \\\"additionalProperties\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n },\\n \\\"dependsOn\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[a-z0-9-]+$\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 63\\n },\\n \\\"description\\\": \\\"Predecessor steps (components.name or other actions.id).\\\"\\n }\\n },\\n \\\"additionalProperties\\\": false\\n }\\n },\\n \\\"secrets\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Global secrets for recipe (per policy isolation).\\\",\\n \\\"properties\\\": {\\n \\\"backend\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Secret storage backend (e.g., 'gpg-keyring', 'vault', 'aws-secrets-manager').\\\",\\n \\\"pattern\\\": \\\"^[a-z0-9-]+$\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 63,\\n \\\"examples\\\": [\\n \\\"gpg-keyring\\\",\\n \\\"vault\\\",\\n \\\"aws-secrets-manager\\\"\\n ]\\n },\\n \\\"globalRefs\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"ref\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"ref\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Slug-compatible global secret ref (e.g., 'turso-shared-db').\\\",\\n \\\"pattern\\\": \\\"^[a-z0-9:/.-]+$\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 255\\n }\\n },\\n \\\"additionalProperties\\\": false\\n }\\n }\\n },\\n \\\"additionalProperties\\\": false\\n },\\n \\\"validate\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Post-deploy checks (e.g., health endpoints, DB connect).\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"type\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"type\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"health\\\",\\n \\\"connect\\\",\\n \\\"custom\\\"\\n ]\\n },\\n \\\"endpoint\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"For health/connect (e.g., 'http://localhost:8065/health').\\\",\\n \\\"pattern\\\": \\\"^https?://[a-z0-9./:-]+$\\\"\\n },\\n \\\"script\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"For custom (e.g., 'check-db.sh'; slug-safe).\\\",\\n \\\"pattern\\\": \\\"^[a-z0-9.-]+$\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 255\\n }\\n },\\n \\\"additionalProperties\\\": false\\n }\\n },\\n \\\"diff\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"For seed type—immutable diffs for dataset versioning/migrations.\\\",\\n \\\"required\\\": [\\n \\\"from\\\",\\n \\\"to\\\",\\n \\\"changes\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"from\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Starting version slug (e.g., 'v1-0').\\\",\\n \\\"pattern\\\": \\\"^[a-z0-9.-]+$\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 63\\n },\\n \\\"to\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Target version slug (e.g., 'v1-1').\\\",\\n \\\"pattern\\\": \\\"^[a-z0-9.-]+$\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 63\\n },\\n \\\"changes\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"JSON Patch operations (add/remove/replace for secrets/datasets).\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"op\\\",\\n \\\"path\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"op\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"add\\\",\\n \\\"remove\\\",\\n \\\"replace\\\",\\n \\\"move\\\",\\n \\\"copy\\\",\\n \\\"test\\\"\\n ]\\n },\\n \\\"path\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"JSON Pointer (e.g., '/entries/db-pass').\\\",\\n \\\"pattern\\\": \\\"^/[a-z0-9/-]+$\\\"\\n },\\n \\\"value\\\": {\\n \\\"description\\\": \\\"New value (encrypted ref for secrets).\\\"\\n }\\n },\\n \\\"additionalProperties\\\": false\\n }\\n }\\n },\\n \\\"additionalProperties\\\": false\\n }\\n },\\n \\\"additionalProperties\\\": false\\n}\\n\",\n \"schemas/crucible-ts/devsecops/lorage-central/runbooks/v1.0.0/runbook.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/devsecops/lorage-central/runbooks/v1.0.0/runbook.schema.json\\\",\\n \\\"title\\\": \\\"L'Orage Central Runbook\\\",\\n \\\"description\\\": \\\"Schema for operational runbooks (e.g., tenant provisioning, global-network setup). Loaded via gofulmen shim; executed in REPL (serializes Markdown prototypes). Structured steps with phases/actions; tenant-scoped. Ties to recipe/policy (e.g., refs infra-phases for ordering, credentials for bootstrap).\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"id\\\",\\n \\\"title\\\",\\n \\\"tenantScope\\\",\\n \\\"phases\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"id\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Slug-compatible runbook ID (unique; e.g., 'global-network').\\\",\\n \\\"pattern\\\": \\\"^[a-z0-9-]+$\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 127,\\n \\\"examples\\\": [\\n \\\"global-network\\\",\\n \\\"tenant-bootstrap\\\"\\n ]\\n },\\n \\\"title\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Human-readable title (e.g., 'Global Enterprise Network Setup').\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 255,\\n \\\"examples\\\": [\\n \\\"Global Enterprise Picture with Tenants\\\"\\n ]\\n },\\n \\\"tenantScope\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Applicable tenants (from registry.publicId; multi-OK, e.g., all for global).\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Tenant public ID (slug-compatible)\\\",\\n \\\"pattern\\\": \\\"^[a-z0-9-]+$\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 127\\n },\\n \\\"uniqueItems\\\": true,\\n \\\"minItems\\\": 1,\\n \\\"examples\\\": [\\n [\\n \\\"tnt-uuid-123-prod-us\\\",\\n \\\"tnt-uuid-456-dev-eu\\\"\\n ]\\n ]\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Overview (Markdown serialized; e.g., from prototypes).\\\",\\n \\\"minLength\\\": 10,\\n \\\"maxLength\\\": 2000,\\n \\\"examples\\\": [\\n \\\"Beginnings of the Runbook: Global Enterprise Picture with Tenants...\\\"\\n ]\\n },\\n \\\"phases\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Ordered phases (refs infra-phases; steps within for execution).\\\",\\n \\\"minItems\\\": 1,\\n \\\"items\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"id\\\",\\n \\\"steps\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"id\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Phase ID (from infra-phases taxonomy; e.g., 'network').\\\",\\n \\\"$ref\\\": \\\"../../../../taxonomy/devsecops/infra-phases/v1.0.0/infra-phases-key.schema.json\\\"\\n },\\n \\\"title\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Phase title (e.g., 'Core Components').\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 255\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Phase overview (Markdown; e.g., 'Networking: Zero-trust backbone...').\\\",\\n \\\"minLength\\\": 10,\\n \\\"maxLength\\\": 1000\\n },\\n \\\"steps\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Executable steps (declarative/procedural; ties to recipe.actions).\\\",\\n \\\"minItems\\\": 1,\\n \\\"items\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"id\\\",\\n \\\"type\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"id\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Slug-compatible step ID (e.g., 'vpc-peering').\\\",\\n \\\"pattern\\\": \\\"^[a-z0-9-]+$\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 63\\n },\\n \\\"type\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"text\\\",\\n \\\"table\\\",\\n \\\"script\\\",\\n \\\"action\\\",\\n \\\"diagram\\\"\\n ],\\n \\\"description\\\": \\\"Step type (text: Markdown; table: Data like tenants; script: Bash; action: Recipe ref; diagram: ASCII/Mermaid).\\\"\\n },\\n \\\"content\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"For text/script/diagram (e.g., Markdown table for tenants, bash for VPC create).\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 5000,\\n \\\"examples\\\": [\\n \\\"| Tenant | Type | Focus | Clouds |\\\\n|--------|------|-------|--------|\\\\n| fulmenhq | Ecosystem | Tonnerre | AWS/GCP |\\\"\\n ]\\n },\\n \\\"ref\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"For action type (e.g., ref recipe 'mattermost-stack' or credential 'acme-key').\\\",\\n \\\"pattern\\\": \\\"^[a-z0-9-]+$\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 127\\n },\\n \\\"dependsOn\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[a-z0-9-]+$\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 63\\n },\\n \\\"description\\\": \\\"Predecessor steps (within phase or cross-phase).\\\"\\n },\\n \\\"parallel\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Allow concurrent with same-phase steps (if phase.parallel=true).\\\",\\n \\\"default\\\": false\\n },\\n \\\"validate\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Post-step check (refs recipe.validate).\\\",\\n \\\"required\\\": [\\n \\\"type\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"type\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"health\\\",\\n \\\"connect\\\",\\n \\\"custom\\\"\\n ]\\n },\\n \\\"endpoint\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"For health/connect (e.g., 'http://localhost:8065/health').\\\",\\n \\\"pattern\\\": \\\"^https?://[a-z0-9./:-]+$\\\"\\n },\\n \\\"script\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"For custom (e.g., 'check-db.sh'; slug-safe).\\\",\\n \\\"pattern\\\": \\\"^[a-z0-9.-]+$\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 255\\n }\\n },\\n \\\"additionalProperties\\\": false\\n }\\n },\\n \\\"additionalProperties\\\": false\\n }\\n }\\n },\\n \\\"additionalProperties\\\": false\\n }\\n },\\n \\\"audit\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Runbook-specific audit (refs activity schema; e.g., log step execution).\\\",\\n \\\"properties\\\": {\\n \\\"backend\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Audit backend (e.g., 'local-json', 'postgres', 'loki').\\\",\\n \\\"pattern\\\": \\\"^[a-z0-9-]+$\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 63,\\n \\\"examples\\\": [\\n \\\"local-json\\\",\\n \\\"postgres\\\",\\n \\\"loki\\\"\\n ]\\n },\\n \\\"retention\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"description\\\": \\\"Retention period in days for audit logs.\\\",\\n \\\"minimum\\\": 1,\\n \\\"maximum\\\": 3650,\\n \\\"default\\\": 365\\n }\\n },\\n \\\"additionalProperties\\\": false\\n }\\n },\\n \\\"additionalProperties\\\": false\\n}\\n\",\n \"schemas/crucible-ts/devsecops/lorage-central/tenant/v1.0.0/tenant.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/devsecops/lorage-central/tenant/v1.0.0/tenant.schema.json\\\",\\n \\\"title\\\": \\\"L'Orage Central Tenant Registry\\\",\\n \\\"description\\\": \\\"Schema for tenant registry (multiple per client; confidential public IDs for no exposure). Loaded via gofulmen shim; enforced in REPL for scoping. Global uniqueness required (e.g., UUID for anon clients). Geo/cloud flags for restrictions (e.g., EU-only for GDPR); PII/PHI for guards.\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"client\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Owning client/organization (internal; not exposed in public IDs)\\\",\\n \\\"properties\\\": {\\n \\\"id\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Internal client ID (slug; confidential)\\\",\\n \\\"pattern\\\": \\\"^[a-z0-9-]+$\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 63\\n },\\n \\\"name\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Client name (confidential; for internal reference only)\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 255\\n },\\n \\\"confidential\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Flag for full anonymization (public IDs must obscure; e.g., no name hints)\\\",\\n \\\"default\\\": false\\n }\\n },\\n \\\"required\\\": [\\n \\\"id\\\",\\n \\\"name\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n },\\n \\\"tenants\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"List of tenants (infra instantiations; e.g., acme-prod-us, acme-dev-eu)\\\",\\n \\\"minItems\\\": 1,\\n \\\"uniqueItems\\\": true,\\n \\\"items\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"publicId\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Globally unique public ID (slug; obscure for confidential clients)\\\",\\n \\\"pattern\\\": \\\"^[a-z0-9-]+$\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 127\\n },\\n \\\"purpose\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Tenant purpose (e.g., production-api, dev-testing)\\\",\\n \\\"pattern\\\": \\\"^[a-z0-9-]+$\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 127\\n },\\n \\\"geo\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Allowed geographic regions (from geo taxonomy; e.g., EU-only for compliance)\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"../../../../taxonomy/devsecops/geo/v1.0.0/geo-key.schema.json\\\"\\n },\\n \\\"uniqueItems\\\": true,\\n \\\"minItems\\\": 1\\n },\\n \\\"cloud\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Allowed cloud providers (from infra-providers taxonomy)\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"../../../../taxonomy/devsecops/infra-providers/v1.0.0/infra-providers-key.schema.json\\\"\\n },\\n \\\"uniqueItems\\\": true,\\n \\\"minItems\\\": 1\\n },\\n \\\"dataSensitivity\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Flags for PII/PHI/compliance (aids policy guards, e.g., encrypt PHI)\\\",\\n \\\"properties\\\": {\\n \\\"pii\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Contains PII (e.g., GDPR tagging; enforce EU geo)\\\",\\n \\\"default\\\": false\\n },\\n \\\"phi\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Contains PHI (e.g., HIPAA; encrypt + audit)\\\",\\n \\\"default\\\": false\\n },\\n \\\"other\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Additional sensitivities (e.g., pci-dss, soc2)\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[a-z0-9-]+$\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 63\\n },\\n \\\"uniqueItems\\\": true\\n }\\n },\\n \\\"required\\\": [\\n \\\"pii\\\",\\n \\\"phi\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n }\\n },\\n \\\"required\\\": [\\n \\\"publicId\\\",\\n \\\"purpose\\\",\\n \\\"geo\\\",\\n \\\"cloud\\\",\\n \\\"dataSensitivity\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n }\\n },\\n \\\"globalUniqueness\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Registry enforces unique publicIds across all clients (UUID recommended for anon)\\\",\\n \\\"default\\\": true\\n }\\n },\\n \\\"required\\\": [\\n \\\"client\\\",\\n \\\"tenants\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n}\\n\",\n \"schemas/crucible-ts/devsecops/secrets/v1.0.0/secrets.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/devsecops/secrets/v1.0.0/secrets.schema.json\\\",\\n \\\"title\\\": \\\"DevSecOps Project Secrets Schema\\\",\\n \\\"description\\\": \\\"Schema for project-scoped secrets files supporting plaintext and encrypted modes with environment variable injection patterns. Used by fulmen-secrets (fulsecrets) CLI tool and DevSecOps microtools.\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"schema_version\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"schema_version\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Schema version for compatibility and migration tracking\\\",\\n \\\"const\\\": \\\"v1.0.0\\\"\\n },\\n \\\"env_prefix\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Global environment variable prefix applied to all projects (e.g., 'MYAPP_'). Optional, can be overridden at project level.\\\",\\n \\\"pattern\\\": \\\"^[A-Z_][A-Z0-9_]*$\\\",\\n \\\"maxLength\\\": 32\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Multi-line description of the secrets file, including contact info, purpose, or usage notes.\\\",\\n \\\"maxLength\\\": 4096\\n },\\n \\\"projects\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Array of project configurations with credentials (plaintext mode only - mutually exclusive with ciphertext)\\\",\\n \\\"minItems\\\": 1,\\n \\\"maxItems\\\": 256,\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"#/$defs/ProjectConfig\\\"\\n }\\n },\\n \\\"encryption\\\": {\\n \\\"$ref\\\": \\\"#/$defs/EncryptionMetadata\\\",\\n \\\"description\\\": \\\"Encryption metadata (present when file is encrypted)\\\"\\n },\\n \\\"ciphertext\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Encrypted payload containing projects array (encrypted mode only - mutually exclusive with projects). Base64-encoded or PGP-armored format depending on encryption method.\\\",\\n \\\"minLength\\\": 1\\n },\\n \\\"policies\\\": {\\n \\\"$ref\\\": \\\"#/$defs/PolicyConfig\\\",\\n \\\"description\\\": \\\"Policy enforcement configuration\\\"\\n }\\n },\\n \\\"oneOf\\\": [\\n {\\n \\\"description\\\": \\\"Plaintext mode: projects array is present, no encryption/ciphertext\\\",\\n \\\"required\\\": [\\n \\\"projects\\\"\\n ],\\n \\\"not\\\": {\\n \\\"anyOf\\\": [\\n {\\n \\\"required\\\": [\\n \\\"encryption\\\"\\n ]\\n },\\n {\\n \\\"required\\\": [\\n \\\"ciphertext\\\"\\n ]\\n }\\n ]\\n }\\n },\\n {\\n \\\"description\\\": \\\"Encrypted mode: encryption metadata and ciphertext are present, no projects array\\\",\\n \\\"required\\\": [\\n \\\"encryption\\\",\\n \\\"ciphertext\\\"\\n ],\\n \\\"not\\\": {\\n \\\"required\\\": [\\n \\\"projects\\\"\\n ]\\n }\\n }\\n ],\\n \\\"$defs\\\": {\\n \\\"ProjectConfig\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Configuration for a single project including slug, credentials, and optional env prefix\\\",\\n \\\"required\\\": [\\n \\\"project_slug\\\",\\n \\\"credentials\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"project_slug\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Slugified project identifier (lowercase alphanumeric + hyphens/underscores, used for filtering in CLI). Examples: 'myapp-prod', 'api_staging', 'worker-dev', 'my_service-v2'\\\",\\n \\\"pattern\\\": \\\"^[a-z0-9]([a-z0-9_-]*[a-z0-9])?$\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 64\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Multi-line description of the project, including purpose or usage notes.\\\",\\n \\\"maxLength\\\": 4096\\n },\\n \\\"env_prefix\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Optional prefix for all environment variables in this project. Example: 'APP_' results in APP_DATABASE_URL, APP_API_KEY, etc. Overrides global env_prefix if set.\\\",\\n \\\"pattern\\\": \\\"^[A-Z_][A-Z0-9_]*$\\\",\\n \\\"maxLength\\\": 32\\n },\\n \\\"credentials\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Map of credential names to credential objects. Keys are environment variable names (UPPER_SNAKE_CASE), values are credential objects with type, value/ref, and optional metadata.\\\",\\n \\\"minProperties\\\": 1,\\n \\\"maxProperties\\\": 1024,\\n \\\"additionalProperties\\\": {\\n \\\"$ref\\\": \\\"#/$defs/Credential\\\"\\n },\\n \\\"propertyNames\\\": {\\n \\\"pattern\\\": \\\"^[A-Z_][A-Z0-9_]*$\\\",\\n \\\"maxLength\\\": 255,\\n \\\"description\\\": \\\"Environment variable names must be UPPER_SNAKE_CASE with max length 255 (OS limit)\\\"\\n }\\n }\\n },\\n \\\"additionalProperties\\\": false\\n },\\n \\\"Credential\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Structured credential with type, value/reference, and optional lifecycle metadata\\\",\\n \\\"required\\\": [\\n \\\"type\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"type\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Credential type for smart masking and validation. api_key: show prefix (sk_live_...xyz), token: show suffix (...1234), password: full redaction (***REDACTED***)\\\",\\n \\\"enum\\\": [\\n \\\"api_key\\\",\\n \\\"password\\\",\\n \\\"token\\\"\\n ]\\n },\\n \\\"value\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Plaintext credential value. Mutually exclusive with 'ref'. Required if 'ref' is not provided.\\\",\\n \\\"contentEncoding\\\": \\\"utf-8\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 65536\\n },\\n \\\"ref\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"External reference to credential (e.g., vault path, secret manager ARN). Mutually exclusive with 'value'. Required if 'value' is not provided.\\\",\\n \\\"pattern\\\": \\\"^[ -~]+$\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 2048\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Human-readable description of the credential's purpose or usage.\\\",\\n \\\"maxLength\\\": 4096\\n },\\n \\\"metadata\\\": {\\n \\\"$ref\\\": \\\"#/$defs/CredentialMetadata\\\",\\n \\\"description\\\": \\\"Optional lifecycle and ownership metadata for tracking credential lifecycle.\\\"\\n },\\n \\\"rotation\\\": {\\n \\\"$ref\\\": \\\"#/$defs/RotationPolicy\\\",\\n \\\"description\\\": \\\"Optional rotation policy for credential lifecycle management.\\\"\\n }\\n },\\n \\\"oneOf\\\": [\\n {\\n \\\"required\\\": [\\n \\\"value\\\"\\n ],\\n \\\"not\\\": {\\n \\\"required\\\": [\\n \\\"ref\\\"\\n ]\\n }\\n },\\n {\\n \\\"required\\\": [\\n \\\"ref\\\"\\n ],\\n \\\"not\\\": {\\n \\\"required\\\": [\\n \\\"value\\\"\\n ]\\n }\\n }\\n ],\\n \\\"additionalProperties\\\": false\\n },\\n \\\"CredentialMetadata\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Lifecycle and ownership metadata for credential tracking\\\",\\n \\\"properties\\\": {\\n \\\"created\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"date-time\\\",\\n \\\"description\\\": \\\"ISO 8601 timestamp when credential was created\\\",\\n \\\"examples\\\": [\\n \\\"2025-01-15T10:00:00Z\\\"\\n ]\\n },\\n \\\"expires\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"date-time\\\",\\n \\\"description\\\": \\\"ISO 8601 timestamp when credential expires\\\",\\n \\\"examples\\\": [\\n \\\"2026-01-15T10:00:00Z\\\"\\n ]\\n },\\n \\\"last_rotated\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"date-time\\\",\\n \\\"description\\\": \\\"ISO 8601 timestamp when credential was last rotated\\\",\\n \\\"examples\\\": [\\n \\\"2025-10-15T10:00:00Z\\\"\\n ]\\n },\\n \\\"next_rotation\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"date-time\\\",\\n \\\"description\\\": \\\"ISO 8601 timestamp when credential should next be rotated\\\",\\n \\\"examples\\\": [\\n \\\"2026-01-15T10:00:00Z\\\"\\n ]\\n },\\n \\\"rotation_count\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"description\\\": \\\"Number of times this credential has been rotated\\\",\\n \\\"minimum\\\": 0\\n },\\n \\\"purpose\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Purpose slug for categorization (e.g., 'primary-database', 'payment-processing')\\\",\\n \\\"pattern\\\": \\\"^[a-z0-9]+(-[a-z0-9]+)*$\\\",\\n \\\"maxLength\\\": 64\\n },\\n \\\"tags\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Categorization tags for filtering and grouping (e.g., ['production', 'critical'])\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[a-z0-9]+(-[a-z0-9]+)*$\\\",\\n \\\"maxLength\\\": 32\\n }\\n },\\n \\\"owner\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Owner or team identifier (e.g., 'platform-team', 'security@example.com')\\\",\\n \\\"maxLength\\\": 128\\n },\\n \\\"service_name\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Name of the external service this credential authenticates to (e.g., 'Stripe', 'GitHub API', 'AWS S3')\\\",\\n \\\"maxLength\\\": 128\\n },\\n \\\"service_url\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"uri\\\",\\n \\\"description\\\": \\\"URL of the service this credential authenticates to (e.g., 'https://api.stripe.com')\\\",\\n \\\"maxLength\\\": 2048\\n },\\n \\\"required_scope\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"OAuth/API scope or permissions required for this credential (e.g., 'repo:write', 'payments:read')\\\",\\n \\\"maxLength\\\": 256\\n },\\n \\\"compliance_tags\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Compliance framework tags (e.g., ['pci-dss', 'soc2', 'hipaa'])\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[a-z0-9]+(-[a-z0-9]+)*$\\\",\\n \\\"maxLength\\\": 64\\n },\\n \\\"maxItems\\\": 20\\n },\\n \\\"environment\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Deployment environment (e.g., 'production', 'staging', 'development')\\\",\\n \\\"enum\\\": [\\n \\\"production\\\",\\n \\\"staging\\\",\\n \\\"development\\\",\\n \\\"test\\\",\\n \\\"qa\\\",\\n \\\"demo\\\"\\n ]\\n },\\n \\\"tier\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Service tier or criticality level (e.g., 'critical', 'high', 'medium', 'low')\\\",\\n \\\"enum\\\": [\\n \\\"critical\\\",\\n \\\"high\\\",\\n \\\"medium\\\",\\n \\\"low\\\"\\n ]\\n }\\n },\\n \\\"additionalProperties\\\": false\\n },\\n \\\"RotationPolicy\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Rotation policy for credential lifecycle management\\\",\\n \\\"properties\\\": {\\n \\\"interval\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Rotation interval (e.g., '30d', '90d', '180d')\\\",\\n \\\"pattern\\\": \\\"^[0-9]+[dwmy]$\\\",\\n \\\"examples\\\": [\\n \\\"30d\\\",\\n \\\"90d\\\",\\n \\\"6m\\\",\\n \\\"1y\\\"\\n ]\\n },\\n \\\"method\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Rotation method: auto (automated rotation) or manual (manual rotation required)\\\",\\n \\\"enum\\\": [\\n \\\"auto\\\",\\n \\\"manual\\\"\\n ]\\n }\\n },\\n \\\"additionalProperties\\\": false\\n },\\n \\\"EncryptionMetadata\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Metadata tracking encryption method, key, and timestamp for roundtrip plaintext ↔ ciphertext operations\\\",\\n \\\"required\\\": [\\n \\\"method\\\",\\n \\\"encrypted_at\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"method\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Encryption method used for ciphertext\\\",\\n \\\"enum\\\": [\\n \\\"gpg\\\",\\n \\\"age\\\",\\n \\\"passphrase\\\"\\n ],\\n \\\"examples\\\": [\\n \\\"gpg\\\",\\n \\\"age\\\",\\n \\\"passphrase\\\"\\n ]\\n },\\n \\\"key_id\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Key identifier for decryption. For GPG: key fingerprint (e.g., '7A8B9C0D1E2F3A4B'). For age: public key (e.g., 'age1ql3z...'). Omit for passphrase-based encryption.\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 256\\n },\\n \\\"encrypted_at\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"ISO 8601 timestamp when encryption was performed\\\",\\n \\\"format\\\": \\\"date-time\\\",\\n \\\"examples\\\": [\\n \\\"2025-11-15T10:00:00Z\\\",\\n \\\"2025-11-15T14:30:00-05:00\\\"\\n ]\\n },\\n \\\"cipher\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Cipher algorithm used (e.g., 'AES-256-GCM', 'ChaCha20-Poly1305'). Optional but recommended for auditability.\\\",\\n \\\"maxLength\\\": 64,\\n \\\"examples\\\": [\\n \\\"AES-256-GCM\\\",\\n \\\"ChaCha20-Poly1305\\\"\\n ]\\n }\\n },\\n \\\"additionalProperties\\\": false\\n },\\n \\\"PolicyConfig\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Policy enforcement configuration for secrets files\\\",\\n \\\"properties\\\": {\\n \\\"allow_plain_secrets\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Whether to allow plaintext (unencrypted) secrets files. Set to false for production/compliance environments to enforce encryption ('FIPS mode'). Defaults to true.\\\",\\n \\\"default\\\": true\\n }\\n },\\n \\\"additionalProperties\\\": false\\n }\\n },\\n \\\"examples\\\": [\\n {\\n \\\"$comment\\\": \\\"Example 1: Minimal plaintext mode with single project\\\",\\n \\\"schema_version\\\": \\\"v1.0.0\\\",\\n \\\"env_prefix\\\": \\\"APP_\\\",\\n \\\"projects\\\": [\\n {\\n \\\"project_slug\\\": \\\"myapp-dev\\\",\\n \\\"credentials\\\": {\\n \\\"DATABASE_URL\\\": {\\n \\\"type\\\": \\\"password\\\",\\n \\\"value\\\": \\\"postgres://localhost:5432/myapp_dev\\\"\\n },\\n \\\"API_KEY\\\": {\\n \\\"type\\\": \\\"api_key\\\",\\n \\\"value\\\": \\\"dev_key_12345\\\"\\n }\\n }\\n }\\n ],\\n \\\"policies\\\": {\\n \\\"allow_plain_secrets\\\": true\\n }\\n },\\n {\\n \\\"$comment\\\": \\\"Example 2: Full-featured credentials with metadata and rotation\\\",\\n \\\"schema_version\\\": \\\"v1.0.0\\\",\\n \\\"description\\\": \\\"Production secrets for MyApp\\\\nContact: devops@example.com\\\",\\n \\\"projects\\\": [\\n {\\n \\\"project_slug\\\": \\\"backend_api\\\",\\n \\\"description\\\": \\\"Backend API services\\\",\\n \\\"credentials\\\": {\\n \\\"STRIPE_API_KEY\\\": {\\n \\\"type\\\": \\\"api_key\\\",\\n \\\"value\\\": \\\"sk_live_abc123def456\\\",\\n \\\"description\\\": \\\"Live Stripe API key for payments\\\",\\n \\\"metadata\\\": {\\n \\\"created\\\": \\\"2025-01-15T10:00:00Z\\\",\\n \\\"expires\\\": \\\"2026-01-15T10:00:00Z\\\",\\n \\\"purpose\\\": \\\"payment-processing\\\",\\n \\\"tags\\\": [\\n \\\"payment\\\",\\n \\\"critical\\\"\\n ],\\n \\\"owner\\\": \\\"payments-team\\\"\\n },\\n \\\"rotation\\\": {\\n \\\"interval\\\": \\\"90d\\\",\\n \\\"method\\\": \\\"auto\\\"\\n }\\n },\\n \\\"DATABASE_PASSWORD\\\": {\\n \\\"type\\\": \\\"password\\\",\\n \\\"value\\\": \\\"super-secure-password\\\",\\n \\\"description\\\": \\\"Primary database password\\\",\\n \\\"metadata\\\": {\\n \\\"expires\\\": \\\"2025-12-31T23:59:59Z\\\"\\n },\\n \\\"rotation\\\": {\\n \\\"interval\\\": \\\"30d\\\",\\n \\\"method\\\": \\\"manual\\\"\\n }\\n },\\n \\\"JWT_SECRET\\\": {\\n \\\"type\\\": \\\"token\\\",\\n \\\"value\\\": \\\"bearer-token-abc123\\\",\\n \\\"description\\\": \\\"JWT signing secret\\\"\\n }\\n }\\n }\\n ]\\n },\\n {\\n \\\"$comment\\\": \\\"Example 3: Multiple projects with external references\\\",\\n \\\"schema_version\\\": \\\"v1.0.0\\\",\\n \\\"projects\\\": [\\n {\\n \\\"project_slug\\\": \\\"api-staging\\\",\\n \\\"credentials\\\": {\\n \\\"DATABASE_URL\\\": {\\n \\\"type\\\": \\\"password\\\",\\n \\\"ref\\\": \\\"vault://secrets/staging/db-url\\\",\\n \\\"description\\\": \\\"Database URL from Vault\\\"\\n },\\n \\\"REDIS_URL\\\": {\\n \\\"type\\\": \\\"password\\\",\\n \\\"value\\\": \\\"redis://staging.example.com:6379\\\"\\n },\\n \\\"API_KEY\\\": {\\n \\\"type\\\": \\\"api_key\\\",\\n \\\"value\\\": \\\"sk_staging_xyz789\\\"\\n }\\n }\\n },\\n {\\n \\\"project_slug\\\": \\\"worker-staging\\\",\\n \\\"credentials\\\": {\\n \\\"DATABASE_URL\\\": {\\n \\\"type\\\": \\\"password\\\",\\n \\\"ref\\\": \\\"vault://secrets/staging/db-url\\\"\\n },\\n \\\"QUEUE_URL\\\": {\\n \\\"type\\\": \\\"password\\\",\\n \\\"value\\\": \\\"amqp://staging.example.com:5672\\\"\\n },\\n \\\"WORKER_TOKEN\\\": {\\n \\\"type\\\": \\\"token\\\",\\n \\\"value\\\": \\\"worker_staging_token\\\"\\n }\\n }\\n }\\n ]\\n },\\n {\\n \\\"$comment\\\": \\\"Example 4: Encrypted mode with GPG\\\",\\n \\\"schema_version\\\": \\\"v1.0.0\\\",\\n \\\"encryption\\\": {\\n \\\"method\\\": \\\"gpg\\\",\\n \\\"key_id\\\": \\\"7A8B9C0D1E2F3A4B\\\",\\n \\\"encrypted_at\\\": \\\"2025-11-15T10:00:00Z\\\",\\n \\\"cipher\\\": \\\"AES-256-GCM\\\"\\n },\\n \\\"ciphertext\\\": \\\"-----BEGIN PGP MESSAGE-----\\\\nhQIMA3xQvBF2g8NSAQ//ZQWJ...[truncated for example]\\\\n-----END PGP MESSAGE-----\\\"\\n },\\n {\\n \\\"$comment\\\": \\\"Example 5: Encrypted mode with age\\\",\\n \\\"schema_version\\\": \\\"v1.0.0\\\",\\n \\\"encryption\\\": {\\n \\\"method\\\": \\\"age\\\",\\n \\\"key_id\\\": \\\"age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p\\\",\\n \\\"encrypted_at\\\": \\\"2025-11-15T14:30:00-05:00\\\",\\n \\\"cipher\\\": \\\"ChaCha20-Poly1305\\\"\\n },\\n \\\"ciphertext\\\": \\\"YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBE...[base64 encoded]\\\"\\n },\\n {\\n \\\"$comment\\\": \\\"Example 6: Production file with encryption enforcement policy\\\",\\n \\\"schema_version\\\": \\\"v1.0.0\\\",\\n \\\"encryption\\\": {\\n \\\"method\\\": \\\"gpg\\\",\\n \\\"key_id\\\": \\\"PROD123ABC456DEF\\\",\\n \\\"encrypted_at\\\": \\\"2025-11-15T12:00:00Z\\\"\\n },\\n \\\"ciphertext\\\": \\\"-----BEGIN PGP MESSAGE-----\\\\n...[encrypted projects array]...\\\\n-----END PGP MESSAGE-----\\\",\\n \\\"policies\\\": {\\n \\\"allow_plain_secrets\\\": false\\n }\\n }\\n ]\\n}\\n\",\n \"schemas/crucible-ts/error-handling/v1.0.0/error-response.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/error-handling/v1.0.0/error-response.schema.json\\\",\\n \\\"title\\\": \\\"Fulmen Error Response\\\",\\n \\\"description\\\": \\\"Extends the Pathfinder error envelope with optional telemetry fields used across Fulmen libraries.\\\",\\n \\\"$comment\\\": \\\"Consumers SHOULD continue to emit the pathfinder base fields; new fields are optional and additive.\\\",\\n \\\"allOf\\\": [\\n {\\n \\\"$ref\\\": \\\"../../pathfinder/v1.0.0/error-response.schema.json\\\"\\n },\\n {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"severity\\\": {\\n \\\"$ref\\\": \\\"../../assessment/v1.0.0/severity-definitions.schema.json#/$defs/severityName\\\",\\n \\\"description\\\": \\\"Optional severity classification aligned with assessment severity levels.\\\"\\n },\\n \\\"severity_level\\\": {\\n \\\"$ref\\\": \\\"../../assessment/v1.0.0/severity-definitions.schema.json#/$defs/severityLevel\\\",\\n \\\"description\\\": \\\"Numeric severity for sorting/comparison (info=0 … critical=4).\\\"\\n },\\n \\\"correlation_id\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Correlation identifier used by observability logging integrations.\\\"\\n },\\n \\\"trace_id\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Optional tracing identifier (OTel trace/span).\\\"\\n },\\n \\\"exit_code\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 255,\\n \\\"description\\\": \\\"Optional process exit code associated with the error.\\\"\\n },\\n \\\"context\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Structured context key/values (non-sensitive).\\\",\\n \\\"additionalProperties\\\": {\\n \\\"oneOf\\\": [\\n {\\n \\\"type\\\": \\\"string\\\"\\n },\\n {\\n \\\"type\\\": \\\"number\\\"\\n },\\n {\\n \\\"type\\\": \\\"boolean\\\"\\n },\\n {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n }\\n ]\\n }\\n },\\n \\\"original\\\": {\\n \\\"description\\\": \\\"Optional serialized form of the wrapped/original error.\\\",\\n \\\"oneOf\\\": [\\n {\\n \\\"type\\\": \\\"string\\\"\\n },\\n {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": true\\n }\\n ]\\n }\\n },\\n \\\"additionalProperties\\\": true\\n }\\n ]\\n}\\n\",\n \"schemas/crucible-ts/library/foundry/v1.0.0/country-codes.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/library/foundry/v1.0.0/country-codes.schema.json\\\",\\n \\\"title\\\": \\\"ISO Country Codes\\\",\\n \\\"description\\\": \\\"ISO 3166 country code records\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"$schema\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"version\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[vV]?\\\\\\\\d+\\\\\\\\.\\\\\\\\d+\\\\\\\\.\\\\\\\\d+$\\\"\\n },\\n \\\"countries\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"minItems\\\": 1,\\n \\\"items\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"alpha2\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[A-Z]{2}$\\\"\\n },\\n \\\"alpha3\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[A-Z]{3}$\\\"\\n },\\n \\\"numeric\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^\\\\\\\\d{3}$\\\"\\n },\\n \\\"name\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"officialName\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"alpha2\\\",\\n \\\"alpha3\\\",\\n \\\"numeric\\\",\\n \\\"name\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n }\\n }\\n },\\n \\\"required\\\": [\\n \\\"version\\\",\\n \\\"countries\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n}\\n\",\n \"schemas/crucible-ts/library/foundry/v1.0.0/exit-codes.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/library/foundry/v1.0.0/exit-codes.schema.json\\\",\\n \\\"title\\\": \\\"Exit Codes Catalog\\\",\\n \\\"description\\\": \\\"Standardized process exit codes for Fulmen ecosystem\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"$schema\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"JSON Schema reference\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Catalog description\\\"\\n },\\n \\\"version\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[vV]?\\\\\\\\d+\\\\\\\\.\\\\\\\\d+\\\\\\\\.\\\\\\\\d+$\\\",\\n \\\"description\\\": \\\"Semantic version of the exit codes catalog\\\"\\n },\\n \\\"categories\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"minItems\\\": 1,\\n \\\"description\\\": \\\"Exit code categories organized by domain\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"id\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[a-z0-9][a-z0-9-]*[a-z0-9]$\\\",\\n \\\"description\\\": \\\"Category identifier (kebab-case)\\\"\\n },\\n \\\"name\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Human-readable category name\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Category purpose and usage\\\"\\n },\\n \\\"range\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Reserved code range for this category\\\",\\n \\\"properties\\\": {\\n \\\"min\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 255,\\n \\\"description\\\": \\\"Minimum exit code value in range\\\"\\n },\\n \\\"max\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 255,\\n \\\"description\\\": \\\"Maximum exit code value in range\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"min\\\",\\n \\\"max\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n },\\n \\\"codes\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"minItems\\\": 1,\\n \\\"description\\\": \\\"Exit codes in this category\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"code\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 255,\\n \\\"description\\\": \\\"Exit code value (0-255)\\\"\\n },\\n \\\"name\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^EXIT_[A-Z0-9_]+$\\\",\\n \\\"description\\\": \\\"Constant name (UPPER_SNAKE_CASE with EXIT_ prefix)\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"What this exit code indicates\\\"\\n },\\n \\\"context\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"When/where this code should be used\\\"\\n },\\n \\\"bsd_equivalent\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Corresponding BSD sysexits.h constant (if applicable)\\\"\\n },\\n \\\"retry_hint\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"retry\\\",\\n \\\"no_retry\\\",\\n \\\"investigate\\\"\\n ],\\n \\\"description\\\": \\\"Classification for automation retry behavior\\\"\\n },\\n \\\"python_note\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Python-specific implementation notes\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"code\\\",\\n \\\"name\\\",\\n \\\"description\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n }\\n }\\n },\\n \\\"required\\\": [\\n \\\"id\\\",\\n \\\"name\\\",\\n \\\"range\\\",\\n \\\"codes\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n }\\n },\\n \\\"bsd_compatibility\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"BSD sysexits.h compatibility mappings\\\",\\n \\\"properties\\\": {\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"BSD compatibility mapping explanation\\\"\\n },\\n \\\"mappings\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Mappings between BSD and Fulmen exit codes\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"bsd_code\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 255,\\n \\\"description\\\": \\\"BSD sysexits.h code\\\"\\n },\\n \\\"bsd_name\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"BSD constant name (e.g., EX_USAGE)\\\"\\n },\\n \\\"fulmen_code\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 255,\\n \\\"description\\\": \\\"Fulmen exit code mapping\\\"\\n },\\n \\\"fulmen_name\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Fulmen constant name\\\"\\n },\\n \\\"category\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Fulmen category\\\"\\n },\\n \\\"notes\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Mapping rationale and usage notes\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"bsd_code\\\",\\n \\\"bsd_name\\\",\\n \\\"fulmen_code\\\",\\n \\\"fulmen_name\\\",\\n \\\"category\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n }\\n }\\n },\\n \\\"additionalProperties\\\": false\\n },\\n \\\"extensions\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Reserved ranges for application-specific extensions\\\",\\n \\\"properties\\\": {\\n \\\"ranges\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Reserved code ranges\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"range\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"min\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 255\\n },\\n \\\"max\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 255\\n }\\n },\\n \\\"required\\\": [\\n \\\"min\\\",\\n \\\"max\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n },\\n \\\"purpose\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"What this range is reserved for\\\"\\n },\\n \\\"sizing_guidance\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Guidance on range sizing and usage\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"range\\\",\\n \\\"purpose\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n }\\n }\\n },\\n \\\"additionalProperties\\\": false\\n },\\n \\\"simplified_modes\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Simplified exit code mappings for novice-friendly tools\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"id\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[a-z0-9][a-z0-9-]*[a-z0-9]$\\\",\\n \\\"description\\\": \\\"Simplified mode identifier (kebab-case)\\\"\\n },\\n \\\"name\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Mode display name\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"When to use this simplified mode\\\"\\n },\\n \\\"mappings\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Map detailed codes to simplified codes\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"simplified_code\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 255,\\n \\\"description\\\": \\\"Simplified exit code value\\\"\\n },\\n \\\"simplified_name\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Simplified code name\\\"\\n },\\n \\\"maps_from\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"List of detailed codes that map to this simplified code\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 255\\n },\\n \\\"minItems\\\": 1\\n }\\n },\\n \\\"required\\\": [\\n \\\"simplified_code\\\",\\n \\\"simplified_name\\\",\\n \\\"maps_from\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n }\\n }\\n },\\n \\\"required\\\": [\\n \\\"id\\\",\\n \\\"name\\\",\\n \\\"mappings\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n }\\n }\\n },\\n \\\"required\\\": [\\n \\\"version\\\",\\n \\\"categories\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n}\\n\",\n \"schemas/crucible-ts/library/foundry/v1.0.0/http-status-groups.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/library/foundry/v1.0.0/http-status-groups.schema.json\\\",\\n \\\"title\\\": \\\"HTTP Status Groups\\\",\\n \\\"description\\\": \\\"Grouped HTTP status codes for reuse in helper libraries\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"$schema\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"version\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[vV]?\\\\\\\\d+\\\\\\\\.\\\\\\\\d+\\\\\\\\.\\\\\\\\d+$\\\"\\n },\\n \\\"groups\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"minItems\\\": 1,\\n \\\"items\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"id\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[a-z0-9][a-z0-9-]*[a-z0-9]$\\\"\\n },\\n \\\"name\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"codes\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"minItems\\\": 1,\\n \\\"items\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"value\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 100,\\n \\\"maximum\\\": 599\\n },\\n \\\"reason\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"value\\\",\\n \\\"reason\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n }\\n }\\n },\\n \\\"required\\\": [\\n \\\"id\\\",\\n \\\"name\\\",\\n \\\"codes\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n }\\n }\\n },\\n \\\"required\\\": [\\n \\\"version\\\",\\n \\\"groups\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n}\\n\",\n \"schemas/crucible-ts/library/foundry/v1.0.0/mime-types.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/library/foundry/v1.0.0/mime-types.schema.json\\\",\\n \\\"title\\\": \\\"MIME Types Catalog\\\",\\n \\\"description\\\": \\\"Curated set of media types for helper libraries\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"$schema\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"version\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[vV]?\\\\\\\\d+\\\\\\\\.\\\\\\\\d+\\\\\\\\.\\\\\\\\d+$\\\"\\n },\\n \\\"types\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"minItems\\\": 1,\\n \\\"items\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"id\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[a-z0-9][a-z0-9-]*[a-z0-9]$\\\"\\n },\\n \\\"mime\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[a-z0-9.+-]+/[a-z0-9.+-]+$\\\"\\n },\\n \\\"name\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"extensions\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[a-z0-9]+$\\\"\\n },\\n \\\"uniqueItems\\\": true\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"id\\\",\\n \\\"mime\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n }\\n }\\n },\\n \\\"required\\\": [\\n \\\"version\\\",\\n \\\"types\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n}\\n\",\n \"schemas/crucible-ts/library/foundry/v1.0.0/patterns.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/library/foundry/v1.0.0/patterns.schema.json\\\",\\n \\\"title\\\": \\\"Foundry Pattern Catalog\\\",\\n \\\"description\\\": \\\"Language-agnostic catalog of reusable patterns (regex, glob, etc.)\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"$schema\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"version\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Catalog version (CalVer or SemVer)\\\",\\n \\\"pattern\\\": \\\"^[vV]?\\\\\\\\d+\\\\\\\\.\\\\\\\\d+\\\\\\\\.\\\\\\\\d+$\\\"\\n },\\n \\\"patterns\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"minItems\\\": 1,\\n \\\"items\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"id\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[a-z0-9][a-z0-9-]*[a-z0-9]$\\\",\\n \\\"description\\\": \\\"Unique identifier (kebab-case)\\\"\\n },\\n \\\"name\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Human-readable label\\\"\\n },\\n \\\"kind\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"regex\\\",\\n \\\"glob\\\",\\n \\\"literal\\\"\\n ],\\n \\\"description\\\": \\\"Pattern type\\\"\\n },\\n \\\"pattern\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Pattern string in canonical form\\\"\\n },\\n \\\"flags\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Optional flags per language runtime\\\",\\n \\\"additionalProperties\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"unicode\\\": {\\n \\\"type\\\": \\\"boolean\\\"\\n },\\n \\\"ignoreCase\\\": {\\n \\\"type\\\": \\\"boolean\\\"\\n },\\n \\\"multiline\\\": {\\n \\\"type\\\": \\\"boolean\\\"\\n },\\n \\\"dotAll\\\": {\\n \\\"type\\\": \\\"boolean\\\"\\n }\\n },\\n \\\"additionalProperties\\\": {\\n \\\"type\\\": \\\"boolean\\\"\\n }\\n }\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Usage notes\\\"\\n },\\n \\\"examples\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n }\\n },\\n \\\"required\\\": [\\n \\\"id\\\",\\n \\\"name\\\",\\n \\\"kind\\\",\\n \\\"pattern\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n }\\n }\\n },\\n \\\"required\\\": [\\n \\\"version\\\",\\n \\\"patterns\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n}\\n\",\n \"schemas/crucible-ts/library/foundry/v1.0.0/signal-resolution-fixtures.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/library/foundry/v1.0.0/signal-resolution-fixtures.schema.json\\\",\\n \\\"title\\\": \\\"Signal Resolution Test Fixtures\\\",\\n \\\"description\\\": \\\"Cross-language test vectors for signal name resolution interfaces\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"$schema\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"JSON Schema reference\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Fixture file description\\\"\\n },\\n \\\"version\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[vV]?\\\\\\\\d+\\\\\\\\.\\\\\\\\d+\\\\\\\\.\\\\\\\\d+$\\\",\\n \\\"description\\\": \\\"Semantic version of the fixture file\\\"\\n },\\n \\\"resolve_signal_tests\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Test cases for resolveSignal() function\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"input\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Input string to resolve\\\"\\n },\\n \\\"expect_name\\\": {\\n \\\"type\\\": [\\n \\\"string\\\",\\n \\\"null\\\"\\n ],\\n \\\"description\\\": \\\"Expected signal name (null if no match expected)\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Human-readable description of test case\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"input\\\",\\n \\\"expect_name\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n }\\n },\\n \\\"list_signal_names_tests\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Test cases for listSignalNames() function\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Human-readable description of test case\\\"\\n },\\n \\\"expect_contains\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": \\\"Signal names that must be present in result\\\"\\n },\\n \\\"expect_min_count\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 1,\\n \\\"description\\\": \\\"Minimum number of signals expected\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"description\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n }\\n },\\n \\\"match_signal_names_tests\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Test cases for matchSignalNames() glob function\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"pattern\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Glob pattern to match (* and ? wildcards)\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Human-readable description of test case\\\"\\n },\\n \\\"expect_contains\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": \\\"Signal names that must be present in result\\\"\\n },\\n \\\"expect_not_contains\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": \\\"Signal names that must NOT be present in result\\\"\\n },\\n \\\"expect_count\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"description\\\": \\\"Exact number of matches expected\\\"\\n },\\n \\\"expect_min_count\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"description\\\": \\\"Minimum number of matches expected\\\"\\n },\\n \\\"expect_empty\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"If true, expect empty result array\\\"\\n },\\n \\\"expect_equals_list_signal_names\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"If true, expect result to equal listSignalNames()\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"pattern\\\",\\n \\\"description\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n }\\n }\\n },\\n \\\"required\\\": [\\n \\\"description\\\",\\n \\\"version\\\",\\n \\\"resolve_signal_tests\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n}\\n\",\n \"schemas/crucible-ts/library/foundry/v1.0.0/signals.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/library/foundry/v1.0.0/signals.schema.json\\\",\\n \\\"title\\\": \\\"Signal Handling Catalog\\\",\\n \\\"description\\\": \\\"Standardized signal handling semantics for Fulmen ecosystem\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"$schema\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"JSON Schema reference\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Catalog description\\\"\\n },\\n \\\"version\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[vV]?\\\\\\\\d+\\\\\\\\.\\\\\\\\d+\\\\\\\\.\\\\\\\\d+$\\\",\\n \\\"description\\\": \\\"Semantic version of the signal handling catalog\\\"\\n },\\n \\\"signals\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"minItems\\\": 1,\\n \\\"description\\\": \\\"Standard signals with OS mappings and behaviors\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"id\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[a-z0-9][a-z0-9-]*[a-z0-9]$|^[a-z]$\\\",\\n \\\"description\\\": \\\"Signal identifier (kebab-case)\\\"\\n },\\n \\\"name\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^SIG[A-Z0-9]+$\\\",\\n \\\"description\\\": \\\"Signal name (e.g., SIGTERM, SIGINT)\\\"\\n },\\n \\\"unix_number\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 1,\\n \\\"maximum\\\": 64,\\n \\\"description\\\": \\\"Unix signal number (Linux standard)\\\"\\n },\\n \\\"platform_overrides\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Platform-specific signal number overrides\\\",\\n \\\"properties\\\": {\\n \\\"darwin\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 1,\\n \\\"maximum\\\": 64,\\n \\\"description\\\": \\\"macOS signal number override\\\"\\n },\\n \\\"freebsd\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 1,\\n \\\"maximum\\\": 64,\\n \\\"description\\\": \\\"FreeBSD signal number override\\\"\\n }\\n },\\n \\\"additionalProperties\\\": false\\n },\\n \\\"windows_event\\\": {\\n \\\"type\\\": [\\n \\\"string\\\",\\n \\\"null\\\"\\n ],\\n \\\"description\\\": \\\"Windows console event name (null if unsupported)\\\"\\n },\\n \\\"windows_fallback\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Fallback behavior for Windows when signal is unsupported\\\",\\n \\\"properties\\\": {\\n \\\"fallback_behavior\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"http_admin_endpoint\\\",\\n \\\"exception_handling\\\",\\n \\\"timer_api\\\"\\n ],\\n \\\"description\\\": \\\"Type of fallback mechanism for this signal on Windows\\\"\\n },\\n \\\"log_level\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"DEBUG\\\",\\n \\\"INFO\\\",\\n \\\"WARN\\\",\\n \\\"ERROR\\\"\\n ],\\n \\\"description\\\": \\\"Log level for unsupported signal notification (recommended: INFO)\\\"\\n },\\n \\\"log_message\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Human-readable message explaining Windows fallback\\\"\\n },\\n \\\"log_template\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Structured log template for consistent formatting across languages\\\"\\n },\\n \\\"operation_hint\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Operational guidance for Windows users (e.g., 'POST /admin/signal with signal=HUP')\\\"\\n },\\n \\\"telemetry_event\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Telemetry event name for tracking unsupported signals (standard: fulmen.signal.unsupported)\\\"\\n },\\n \\\"telemetry_tags\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Structured tags for telemetry event (must include signal, platform, fallback_behavior)\\\",\\n \\\"additionalProperties\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n }\\n },\\n \\\"required\\\": [\\n \\\"fallback_behavior\\\",\\n \\\"log_level\\\",\\n \\\"log_message\\\",\\n \\\"log_template\\\",\\n \\\"operation_hint\\\",\\n \\\"telemetry_event\\\",\\n \\\"telemetry_tags\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Signal purpose and usage\\\"\\n },\\n \\\"default_behavior\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"graceful_shutdown\\\",\\n \\\"graceful_shutdown_with_double_tap\\\",\\n \\\"reload_via_restart\\\",\\n \\\"immediate_exit\\\",\\n \\\"custom\\\",\\n \\\"observe_only\\\"\\n ],\\n \\\"description\\\": \\\"Default handling behavior for this signal\\\"\\n },\\n \\\"exit_code\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 255,\\n \\\"description\\\": \\\"Process exit code (128+N pattern for signals)\\\"\\n },\\n \\\"timeout_seconds\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"description\\\": \\\"Graceful shutdown timeout in seconds\\\"\\n },\\n \\\"cleanup_actions\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Ordered list of cleanup actions to perform\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n },\\n \\\"double_tap_window_seconds\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"description\\\": \\\"Time window for double-tap detection (SIGINT only)\\\"\\n },\\n \\\"double_tap_message\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Message shown to user on first signal (double-tap pattern)\\\"\\n },\\n \\\"double_tap_behavior\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"immediate_exit\\\"\\n ],\\n \\\"description\\\": \\\"Behavior when signal received twice within window\\\"\\n },\\n \\\"double_tap_exit_code\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 255,\\n \\\"description\\\": \\\"Exit code for forced double-tap exit\\\"\\n },\\n \\\"reload_strategy\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"restart_based\\\"\\n ],\\n \\\"description\\\": \\\"Configuration reload strategy (SIGHUP only)\\\"\\n },\\n \\\"validation_required\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Whether config validation is required before reload (SIGHUP only)\\\"\\n },\\n \\\"usage_notes\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Additional usage guidance and context\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"id\\\",\\n \\\"name\\\",\\n \\\"unix_number\\\",\\n \\\"description\\\",\\n \\\"default_behavior\\\",\\n \\\"exit_code\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n }\\n },\\n \\\"behaviors\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"minItems\\\": 1,\\n \\\"description\\\": \\\"Signal handling behavior definitions\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"id\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[a-z0-9][a-z0-9_]*[a-z0-9]$|^[a-z]$\\\",\\n \\\"description\\\": \\\"Behavior identifier (snake_case)\\\"\\n },\\n \\\"name\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Human-readable behavior name\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Behavior purpose and execution pattern\\\"\\n },\\n \\\"phases\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"minItems\\\": 1,\\n \\\"description\\\": \\\"Ordered execution phases for this behavior\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"name\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Phase name\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Phase actions and purpose\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"name\\\",\\n \\\"description\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n }\\n }\\n },\\n \\\"required\\\": [\\n \\\"id\\\",\\n \\\"name\\\",\\n \\\"description\\\",\\n \\\"phases\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n }\\n },\\n \\\"os_mappings\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Operating system signal and event mappings\\\",\\n \\\"properties\\\": {\\n \\\"unix\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Unix signal numbers (Linux standard)\\\",\\n \\\"additionalProperties\\\": {\\n \\\"type\\\": \\\"integer\\\"\\n }\\n },\\n \\\"windows\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Windows console event codes\\\",\\n \\\"additionalProperties\\\": {\\n \\\"type\\\": \\\"integer\\\"\\n }\\n },\\n \\\"platform_overrides\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Platform-specific signal number overrides\\\",\\n \\\"properties\\\": {\\n \\\"darwin\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"macOS signal number overrides\\\",\\n \\\"additionalProperties\\\": {\\n \\\"type\\\": \\\"integer\\\"\\n }\\n },\\n \\\"freebsd\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"FreeBSD signal number overrides\\\",\\n \\\"additionalProperties\\\": {\\n \\\"type\\\": \\\"integer\\\"\\n }\\n }\\n },\\n \\\"additionalProperties\\\": false\\n },\\n \\\"signal_to_event\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Unix signal to Windows event mapping table\\\",\\n \\\"additionalProperties\\\": {\\n \\\"type\\\": [\\n \\\"string\\\",\\n \\\"null\\\"\\n ]\\n }\\n }\\n },\\n \\\"required\\\": [\\n \\\"unix\\\",\\n \\\"windows\\\",\\n \\\"signal_to_event\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n },\\n \\\"platform_support\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Platform support matrix for each signal\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"signal\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^SIG[A-Z0-9]+$\\\",\\n \\\"description\\\": \\\"Signal name\\\"\\n },\\n \\\"linux\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"native\\\",\\n \\\"unsupported\\\"\\n ],\\n \\\"description\\\": \\\"Linux support level\\\"\\n },\\n \\\"macos\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"native\\\",\\n \\\"unsupported\\\"\\n ],\\n \\\"description\\\": \\\"macOS support level\\\"\\n },\\n \\\"freebsd\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"native\\\",\\n \\\"unsupported\\\"\\n ],\\n \\\"description\\\": \\\"FreeBSD support level\\\"\\n },\\n \\\"windows\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"native\\\",\\n \\\"mapped\\\",\\n \\\"unsupported\\\"\\n ],\\n \\\"description\\\": \\\"Windows support level\\\"\\n },\\n \\\"fallback\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"http_admin_endpoint\\\",\\n \\\"exception_handling\\\",\\n \\\"timer_api\\\"\\n ],\\n \\\"description\\\": \\\"Fallback mechanism for unsupported platforms\\\"\\n },\\n \\\"notes\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Platform support notes and guidance\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"signal\\\",\\n \\\"linux\\\",\\n \\\"macos\\\",\\n \\\"freebsd\\\",\\n \\\"windows\\\",\\n \\\"notes\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n }\\n },\\n \\\"exit_codes\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Signal to exit code mapping (128+N pattern)\\\",\\n \\\"properties\\\": {\\n \\\"SIGTERM\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 255\\n },\\n \\\"SIGINT\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 255\\n },\\n \\\"SIGHUP\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 255\\n },\\n \\\"SIGQUIT\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 255\\n },\\n \\\"SIGPIPE\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 255\\n },\\n \\\"SIGALRM\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 255\\n },\\n \\\"SIGUSR1\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 255\\n },\\n \\\"SIGUSR2\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 255\\n },\\n \\\"SIGKILL\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 255\\n },\\n \\\"note\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Explanation of exit code pattern and cross-references\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"SIGTERM\\\",\\n \\\"SIGINT\\\",\\n \\\"SIGHUP\\\",\\n \\\"note\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n }\\n },\\n \\\"required\\\": [\\n \\\"description\\\",\\n \\\"version\\\",\\n \\\"signals\\\",\\n \\\"behaviors\\\",\\n \\\"os_mappings\\\",\\n \\\"exit_codes\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n}\\n\",\n \"schemas/crucible-ts/library/fulencode/v1.0.0/bom-result.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/library/fulencode/v1.0.0/bom-result.schema.json\\\",\\n \\\"title\\\": \\\"Fulencode BOM Result\\\",\\n \\\"description\\\": \\\"Result payload for fulencode BOM detection\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"bom_type\\\": {\\n \\\"description\\\": \\\"Detected BOM type or null when none.\\\",\\n \\\"oneOf\\\": [\\n {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"utf-8\\\",\\n \\\"utf-16le\\\",\\n \\\"utf-16be\\\",\\n \\\"utf-32le\\\",\\n \\\"utf-32be\\\"\\n ]\\n },\\n {\\n \\\"type\\\": \\\"null\\\"\\n }\\n ]\\n },\\n \\\"byte_length\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0\\n },\\n \\\"encoding_implied\\\": {\\n \\\"description\\\": \\\"Encoding implied by the BOM when present.\\\",\\n \\\"oneOf\\\": [\\n {\\n \\\"type\\\": \\\"string\\\"\\n },\\n {\\n \\\"type\\\": \\\"null\\\"\\n }\\n ]\\n }\\n },\\n \\\"required\\\": [\\n \\\"bom_type\\\",\\n \\\"byte_length\\\",\\n \\\"encoding_implied\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n}\\n\",\n \"schemas/crucible-ts/library/fulencode/v1.0.0/decode-options.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/library/fulencode/v1.0.0/decode-options.schema.json\\\",\\n \\\"title\\\": \\\"Fulencode Decode Options\\\",\\n \\\"description\\\": \\\"Options for fulencode decode() operation\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"verify_checksum\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Verify embedded checksum when present.\\\"\\n },\\n \\\"compute_checksum\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Checksum algorithm to compute on decoded output.\\\",\\n \\\"enum\\\": [\\n \\\"xxh3-128\\\",\\n \\\"sha256\\\",\\n \\\"sha512\\\",\\n \\\"sha1\\\",\\n \\\"md5\\\"\\n ]\\n },\\n \\\"max_decoded_size\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"description\\\": \\\"Maximum decoded output size in bytes.\\\",\\n \\\"minimum\\\": 1024\\n },\\n \\\"max_expansion_ratio\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"description\\\": \\\"Maximum decode expansion ratio (encoding bomb protection).\\\",\\n \\\"minimum\\\": 1.0\\n },\\n \\\"on_error\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Error handling mode.\\\",\\n \\\"enum\\\": [\\n \\\"strict\\\",\\n \\\"replace\\\",\\n \\\"ignore\\\",\\n \\\"fallback\\\"\\n ]\\n },\\n \\\"fallback_formats\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Fallback formats to attempt when on_error is fallback.\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n },\\n \\\"ignore_whitespace\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Ignore ASCII whitespace in encoded input when supported.\\\"\\n },\\n \\\"validate_padding\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Require correct padding when supported.\\\"\\n }\\n },\\n \\\"additionalProperties\\\": false\\n}\\n\",\n \"schemas/crucible-ts/library/fulencode/v1.0.0/decoding-result.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/library/fulencode/v1.0.0/decoding-result.schema.json\\\",\\n \\\"title\\\": \\\"Fulencode Decoding Result\\\",\\n \\\"description\\\": \\\"Result payload for fulencode decode()\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"data\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 255\\n }\\n },\\n \\\"format\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"base64\\\",\\n \\\"base64url\\\",\\n \\\"base64_raw\\\",\\n \\\"base32\\\",\\n \\\"base32hex\\\",\\n \\\"hex\\\",\\n \\\"utf-8\\\",\\n \\\"utf-16le\\\",\\n \\\"utf-16be\\\",\\n \\\"iso-8859-1\\\",\\n \\\"cp1252\\\",\\n \\\"ascii\\\"\\n ]\\n },\\n \\\"input_size\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0\\n },\\n \\\"output_size\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0\\n },\\n \\\"checksum\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"checksum_verified\\\": {\\n \\\"type\\\": \\\"boolean\\\"\\n },\\n \\\"checksum_algorithm\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"warnings\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n },\\n \\\"corrections_applied\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0\\n }\\n },\\n \\\"required\\\": [\\n \\\"data\\\",\\n \\\"format\\\",\\n \\\"input_size\\\",\\n \\\"output_size\\\",\\n \\\"warnings\\\",\\n \\\"corrections_applied\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n}\\n\",\n \"schemas/crucible-ts/library/fulencode/v1.0.0/detect-options.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/library/fulencode/v1.0.0/detect-options.schema.json\\\",\\n \\\"title\\\": \\\"Fulencode Detect Options\\\",\\n \\\"description\\\": \\\"Options for fulencode detect() operation\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"max_sample_size\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"description\\\": \\\"Maximum bytes to analyze.\\\",\\n \\\"minimum\\\": 32\\n },\\n \\\"min_confidence\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"description\\\": \\\"Minimum confidence threshold for a non-error detection result.\\\",\\n \\\"minimum\\\": 0.0,\\n \\\"maximum\\\": 1.0\\n },\\n \\\"recognize_multibase\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Recognize multibase prefixes (detection only; encoding may require extension module).\\\"\\n }\\n },\\n \\\"additionalProperties\\\": false\\n}\\n\",\n \"schemas/crucible-ts/library/fulencode/v1.0.0/detection-result.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/library/fulencode/v1.0.0/detection-result.schema.json\\\",\\n \\\"title\\\": \\\"Fulencode Detection Result\\\",\\n \\\"description\\\": \\\"Result payload for fulencode detect()\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"encoding\\\": {\\n \\\"description\\\": \\\"Detected encoding or null when unknown.\\\",\\n \\\"oneOf\\\": [\\n {\\n \\\"type\\\": \\\"string\\\"\\n },\\n {\\n \\\"type\\\": \\\"null\\\"\\n }\\n ]\\n },\\n \\\"confidence\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"minimum\\\": 0.0,\\n \\\"maximum\\\": 1.0\\n },\\n \\\"level\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"high\\\",\\n \\\"medium\\\",\\n \\\"low\\\"\\n ]\\n },\\n \\\"multibase_prefix\\\": {\\n \\\"description\\\": \\\"Detected multibase prefix if present.\\\",\\n \\\"oneOf\\\": [\\n {\\n \\\"type\\\": \\\"string\\\"\\n },\\n {\\n \\\"type\\\": \\\"null\\\"\\n }\\n ]\\n },\\n \\\"warnings\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n }\\n },\\n \\\"required\\\": [\\n \\\"encoding\\\",\\n \\\"confidence\\\",\\n \\\"level\\\",\\n \\\"warnings\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n}\\n\",\n \"schemas/crucible-ts/library/fulencode/v1.0.0/encode-options.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/library/fulencode/v1.0.0/encode-options.schema.json\\\",\\n \\\"title\\\": \\\"Fulencode Encode Options\\\",\\n \\\"description\\\": \\\"Options for fulencode encode() operation\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"padding\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Enable/disable padding when supported (Base64/Base32).\\\"\\n },\\n \\\"case\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Hex output case.\\\",\\n \\\"enum\\\": [\\n \\\"upper\\\",\\n \\\"lower\\\"\\n ]\\n },\\n \\\"line_length\\\": {\\n \\\"description\\\": \\\"Optional line wrap length for text output.\\\",\\n \\\"oneOf\\\": [\\n {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 1\\n },\\n {\\n \\\"type\\\": \\\"null\\\"\\n }\\n ]\\n },\\n \\\"line_ending\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Line ending to use when line wrapping.\\\",\\n \\\"enum\\\": [\\n \\\"\\\\n\\\",\\n \\\"\\\\r\\\\n\\\"\\n ]\\n },\\n \\\"max_encoded_size\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"description\\\": \\\"Maximum encoded output size in bytes.\\\",\\n \\\"minimum\\\": 1024\\n },\\n \\\"compute_checksum\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Checksum algorithm to compute on encoded output.\\\",\\n \\\"enum\\\": [\\n \\\"xxh3-128\\\",\\n \\\"sha256\\\",\\n \\\"sha512\\\",\\n \\\"sha1\\\",\\n \\\"md5\\\"\\n ]\\n },\\n \\\"embed_checksum\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Whether to embed checksum alongside encoded output (implementation-defined framing).\\\"\\n },\\n \\\"on_error\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Error handling mode when encoding text inputs.\\\",\\n \\\"enum\\\": [\\n \\\"strict\\\",\\n \\\"replace\\\",\\n \\\"ignore\\\"\\n ]\\n }\\n },\\n \\\"additionalProperties\\\": false\\n}\\n\",\n \"schemas/crucible-ts/library/fulencode/v1.0.0/encoding-result.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/library/fulencode/v1.0.0/encoding-result.schema.json\\\",\\n \\\"title\\\": \\\"Fulencode Encoding Result\\\",\\n \\\"description\\\": \\\"Result payload for fulencode encode()\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"data\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"format\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"base64\\\",\\n \\\"base64url\\\",\\n \\\"base64_raw\\\",\\n \\\"base32\\\",\\n \\\"base32hex\\\",\\n \\\"hex\\\",\\n \\\"utf-8\\\",\\n \\\"utf-16le\\\",\\n \\\"utf-16be\\\",\\n \\\"iso-8859-1\\\",\\n \\\"cp1252\\\",\\n \\\"ascii\\\"\\n ]\\n },\\n \\\"input_size\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0\\n },\\n \\\"output_size\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0\\n },\\n \\\"checksum\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"checksum_algorithm\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"warnings\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n }\\n },\\n \\\"required\\\": [\\n \\\"data\\\",\\n \\\"format\\\",\\n \\\"input_size\\\",\\n \\\"output_size\\\",\\n \\\"warnings\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n}\\n\",\n \"schemas/crucible-ts/library/fulencode/v1.0.0/fulencode-config.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/library/fulencode/fulencode-config-v1.0.0.json\\\",\\n \\\"title\\\": \\\"Fulencode Module Configuration\\\",\\n \\\"description\\\": \\\"Configuration schema for fulencode module limits and defaults\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"limits\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"max_decoded_size\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"description\\\": \\\"Maximum decoded output size in bytes\\\",\\n \\\"default\\\": 104857600,\\n \\\"minimum\\\": 1024\\n },\\n \\\"max_encoded_size\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"description\\\": \\\"Maximum encoded output size in bytes\\\",\\n \\\"default\\\": 524288000,\\n \\\"minimum\\\": 1024\\n },\\n \\\"max_expansion_ratio\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"description\\\": \\\"Maximum decode expansion ratio (encoding bomb detection)\\\",\\n \\\"default\\\": 10.0,\\n \\\"minimum\\\": 1.0\\n },\\n \\\"max_combining_marks\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"description\\\": \\\"Maximum combining marks per base character\\\",\\n \\\"default\\\": 10,\\n \\\"minimum\\\": 1,\\n \\\"maximum\\\": 100\\n }\\n },\\n \\\"additionalProperties\\\": false\\n },\\n \\\"defaults\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"on_error\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"strict\\\",\\n \\\"replace\\\",\\n \\\"ignore\\\",\\n \\\"fallback\\\"\\n ],\\n \\\"description\\\": \\\"Default error handling mode\\\",\\n \\\"default\\\": \\\"strict\\\"\\n },\\n \\\"checksum_algorithm\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"xxh3-128\\\",\\n \\\"sha256\\\",\\n \\\"sha512\\\",\\n \\\"sha1\\\",\\n \\\"md5\\\"\\n ],\\n \\\"description\\\": \\\"Default checksum algorithm for integrity checks\\\",\\n \\\"default\\\": \\\"sha256\\\"\\n },\\n \\\"normalization_profile\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Default normalization profile\\\",\\n \\\"default\\\": \\\"nfc\\\"\\n }\\n },\\n \\\"additionalProperties\\\": false\\n },\\n \\\"detection\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"min_confidence\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"description\\\": \\\"Minimum detection confidence threshold\\\",\\n \\\"default\\\": 0.5,\\n \\\"minimum\\\": 0.0,\\n \\\"maximum\\\": 1.0\\n },\\n \\\"max_sample_size\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"description\\\": \\\"Maximum bytes to analyze for detection\\\",\\n \\\"default\\\": 8192,\\n \\\"minimum\\\": 32\\n }\\n },\\n \\\"additionalProperties\\\": false\\n }\\n },\\n \\\"additionalProperties\\\": false\\n}\\n\",\n \"schemas/crucible-ts/library/fulencode/v1.0.0/fulencode-error.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/library/fulencode/v1.0.0/fulencode-error.schema.json\\\",\\n \\\"title\\\": \\\"Fulencode Error\\\",\\n \\\"description\\\": \\\"Canonical error envelope for Fulencode operations\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"code\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"message\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"operation\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"input_format\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"output_format\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"details\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"byte_offset\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0\\n },\\n \\\"codepoint_offset\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0\\n },\\n \\\"detected_encoding\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"confidence\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"minimum\\\": 0.0,\\n \\\"maximum\\\": 1.0\\n },\\n \\\"invalid_bytes\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 255\\n }\\n },\\n \\\"expected\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"actual\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n },\\n \\\"additionalProperties\\\": true\\n }\\n },\\n \\\"required\\\": [\\n \\\"code\\\",\\n \\\"message\\\",\\n \\\"operation\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n}\\n\",\n \"schemas/crucible-ts/library/fulencode/v1.0.0/normalization-result.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/library/fulencode/v1.0.0/normalization-result.schema.json\\\",\\n \\\"title\\\": \\\"Fulencode Normalization Result\\\",\\n \\\"description\\\": \\\"Result payload for fulencode normalize()\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"text\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"profile\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"input_length\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0\\n },\\n \\\"output_length\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0\\n },\\n \\\"transformations_applied\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n },\\n \\\"semantic_changes\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"position\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0\\n },\\n \\\"original\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"normalized\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"reason\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"position\\\",\\n \\\"original\\\",\\n \\\"normalized\\\",\\n \\\"reason\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n }\\n },\\n \\\"warnings\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n }\\n },\\n \\\"required\\\": [\\n \\\"text\\\",\\n \\\"profile\\\",\\n \\\"input_length\\\",\\n \\\"output_length\\\",\\n \\\"transformations_applied\\\",\\n \\\"semantic_changes\\\",\\n \\\"warnings\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n}\\n\",\n \"schemas/crucible-ts/library/fulencode/v1.0.0/normalize-options.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/library/fulencode/v1.0.0/normalize-options.schema.json\\\",\\n \\\"title\\\": \\\"Fulencode Normalize Options\\\",\\n \\\"description\\\": \\\"Options for fulencode normalize() operation\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"warn_semantic_change\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Warn when normalization performs semantic-changing transforms (NFKC/NFKD).\\\"\\n },\\n \\\"reject_zero_width\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Reject zero-width characters when true.\\\"\\n },\\n \\\"reject_bidi_controls\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Reject bidi control characters (override/isolate) when true.\\\"\\n },\\n \\\"max_combining_marks\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"description\\\": \\\"Maximum combining marks per base character.\\\",\\n \\\"minimum\\\": 1,\\n \\\"maximum\\\": 100\\n },\\n \\\"strip_accents\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Remove combining marks/diacritics when true.\\\"\\n },\\n \\\"case_fold\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Apply Unicode case folding when true.\\\"\\n },\\n \\\"remove_punctuation\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Remove punctuation and symbol categories when true.\\\"\\n },\\n \\\"compress_whitespace\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Collapse consecutive whitespace to a single space when true.\\\"\\n }\\n },\\n \\\"additionalProperties\\\": false\\n}\\n\",\n \"schemas/crucible-ts/library/fulhash/v1.0.0/checksum-string.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/library/fulhash/v1.0.0/checksum-string.schema.json\\\",\\n \\\"title\\\": \\\"FulHash Checksum String\\\",\\n \\\"description\\\": \\\"Canonical checksum string '<algorithm>:<hex>'\\\",\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^(xxh3-128:[0-9a-f]{32}|crc32:[0-9a-f]{8}|crc32c:[0-9a-f]{8}|sha256:[0-9a-f]{64})$\\\"\\n}\\n\",\n \"schemas/crucible-ts/library/fulhash/v1.0.0/digest.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/library/fulhash/v1.0.0/digest.schema.json\\\",\\n \\\"title\\\": \\\"FulHash Digest\\\",\\n \\\"description\\\": \\\"Standard digest payload returned by FulHash helpers\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"algorithm\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"xxh3-128\\\",\\n \\\"crc32\\\",\\n \\\"crc32c\\\",\\n \\\"sha256\\\"\\n ],\\n \\\"description\\\": \\\"Hash algorithm identifier\\\"\\n },\\n \\\"hex\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Lowercase hexadecimal representation of the digest\\\"\\n },\\n \\\"formatted\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Canonical string representation '<algorithm>:<hex>'\\\"\\n },\\n \\\"bytes\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Raw digest bytes (optional)\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 255\\n }\\n }\\n },\\n \\\"required\\\": [\\n \\\"algorithm\\\",\\n \\\"hex\\\",\\n \\\"formatted\\\"\\n ],\\n \\\"additionalProperties\\\": false,\\n \\\"allOf\\\": [\\n {\\n \\\"if\\\": {\\n \\\"properties\\\": {\\n \\\"algorithm\\\": {\\n \\\"const\\\": \\\"xxh3-128\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"algorithm\\\"\\n ]\\n },\\n \\\"then\\\": {\\n \\\"properties\\\": {\\n \\\"hex\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[0-9a-f]{32}$\\\"\\n },\\n \\\"formatted\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^xxh3-128:[0-9a-f]{32}$\\\"\\n },\\n \\\"bytes\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"minItems\\\": 16,\\n \\\"maxItems\\\": 16\\n }\\n }\\n }\\n },\\n {\\n \\\"if\\\": {\\n \\\"properties\\\": {\\n \\\"algorithm\\\": {\\n \\\"const\\\": \\\"sha256\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"algorithm\\\"\\n ]\\n },\\n \\\"then\\\": {\\n \\\"properties\\\": {\\n \\\"hex\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[0-9a-f]{64}$\\\"\\n },\\n \\\"formatted\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^sha256:[0-9a-f]{64}$\\\"\\n },\\n \\\"bytes\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"minItems\\\": 32,\\n \\\"maxItems\\\": 32\\n }\\n }\\n }\\n },\\n {\\n \\\"if\\\": {\\n \\\"properties\\\": {\\n \\\"algorithm\\\": {\\n \\\"const\\\": \\\"crc32\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"algorithm\\\"\\n ]\\n },\\n \\\"then\\\": {\\n \\\"properties\\\": {\\n \\\"hex\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[0-9a-f]{8}$\\\"\\n },\\n \\\"formatted\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^crc32:[0-9a-f]{8}$\\\"\\n },\\n \\\"bytes\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"minItems\\\": 4,\\n \\\"maxItems\\\": 4\\n }\\n }\\n }\\n },\\n {\\n \\\"if\\\": {\\n \\\"properties\\\": {\\n \\\"algorithm\\\": {\\n \\\"const\\\": \\\"crc32c\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"algorithm\\\"\\n ]\\n },\\n \\\"then\\\": {\\n \\\"properties\\\": {\\n \\\"hex\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[0-9a-f]{8}$\\\"\\n },\\n \\\"formatted\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^crc32c:[0-9a-f]{8}$\\\"\\n },\\n \\\"bytes\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"minItems\\\": 4,\\n \\\"maxItems\\\": 4\\n }\\n }\\n }\\n }\\n ]\\n}\\n\",\n \"schemas/crucible-ts/library/fulhash/v1.0.0/fixtures.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/library/fulhash/v1.0.0/fixtures.schema.json\\\",\\n \\\"title\\\": \\\"FulHash Fixture File\\\",\\n \\\"description\\\": \\\"Shared test fixtures for FulHash implementations\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"$schema\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"uri\\\"\\n },\\n \\\"version\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Fixture specification version\\\",\\n \\\"pattern\\\": \\\"^\\\\\\\\d+\\\\\\\\.\\\\\\\\d+\\\\\\\\.\\\\\\\\d+$\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"fixtures\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"minItems\\\": 1,\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"#/$defs/blockFixture\\\"\\n }\\n },\\n \\\"streaming_fixtures\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"#/$defs/streamingFixture\\\"\\n }\\n },\\n \\\"error_fixtures\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"#/$defs/errorFixture\\\"\\n }\\n },\\n \\\"format_fixtures\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"#/$defs/formatFixture\\\"\\n }\\n },\\n \\\"notes\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"version\\\",\\n \\\"fixtures\\\"\\n ],\\n \\\"additionalProperties\\\": false,\\n \\\"$defs\\\": {\\n \\\"checksum\\\": {\\n \\\"$ref\\\": \\\"checksum-string.schema.json\\\"\\n },\\n \\\"blockFixture\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"name\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"input\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"encoding\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"input_bytes\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 255\\n }\\n },\\n \\\"xxh3_128\\\": {\\n \\\"$ref\\\": \\\"#/$defs/checksum\\\"\\n },\\n \\\"sha256\\\": {\\n \\\"$ref\\\": \\\"#/$defs/checksum\\\"\\n },\\n \\\"notes\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"name\\\",\\n \\\"encoding\\\",\\n \\\"xxh3_128\\\",\\n \\\"sha256\\\"\\n ],\\n \\\"allOf\\\": [\\n {\\n \\\"anyOf\\\": [\\n {\\n \\\"required\\\": [\\n \\\"input\\\"\\n ]\\n },\\n {\\n \\\"required\\\": [\\n \\\"input_bytes\\\"\\n ]\\n }\\n ]\\n }\\n ],\\n \\\"additionalProperties\\\": false\\n },\\n \\\"streamingFixture\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"name\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"chunks\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"minItems\\\": 1,\\n \\\"items\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"value\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"encoding\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"size\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0\\n },\\n \\\"pattern\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n },\\n \\\"additionalProperties\\\": false\\n }\\n },\\n \\\"expected_xxh3_128\\\": {\\n \\\"$ref\\\": \\\"#/$defs/checksum\\\"\\n },\\n \\\"expected_sha256\\\": {\\n \\\"$ref\\\": \\\"#/$defs/checksum\\\"\\n },\\n \\\"notes\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"name\\\",\\n \\\"chunks\\\",\\n \\\"expected_xxh3_128\\\",\\n \\\"expected_sha256\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n },\\n \\\"errorFixture\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"name\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"input\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"algorithm\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"checksum\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"expected_error\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"error_message_contains\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n }\\n },\\n \\\"required\\\": [\\n \\\"name\\\",\\n \\\"expected_error\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n },\\n \\\"formatFixture\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"name\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"algorithm\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"hex\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"formatted\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"expected_formatted\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"expected_algorithm\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"expected_hex\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"name\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n }\\n }\\n}\\n\",\n \"schemas/crucible-ts/library/fulpack/v1.0.0/archive-entry.schema.json\": \"{\\n \\\"$schema\\\": \\\"http://json-schema.org/draft-07/schema#\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/library/fulpack/v1.0.0/archive-entry\\\",\\n \\\"title\\\": \\\"Archive Entry\\\",\\n \\\"description\\\": \\\"Metadata for a single archive entry (returned by scan operation)\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"path\\\",\\n \\\"type\\\",\\n \\\"size\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"path\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"minLength\\\": 1,\\n \\\"description\\\": \\\"Normalized entry path within archive\\\"\\n },\\n \\\"type\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"file\\\",\\n \\\"directory\\\",\\n \\\"symlink\\\"\\n ],\\n \\\"description\\\": \\\"Entry type from entry-types taxonomy\\\"\\n },\\n \\\"size\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"description\\\": \\\"Uncompressed size in bytes\\\"\\n },\\n \\\"compressed_size\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"description\\\": \\\"Compressed size in bytes (if available)\\\"\\n },\\n \\\"modified\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"date-time\\\",\\n \\\"description\\\": \\\"Modification timestamp (ISO 8601 format)\\\"\\n },\\n \\\"checksum\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[a-f0-9]{64}$\\\",\\n \\\"description\\\": \\\"SHA-256 checksum (64 hex characters)\\\"\\n },\\n \\\"mode\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^0[0-7]{3,4}$\\\",\\n \\\"description\\\": \\\"Unix file permissions (octal string, e.g., '0644')\\\"\\n },\\n \\\"symlink_target\\\": {\\n \\\"type\\\": [\\n \\\"string\\\",\\n \\\"null\\\"\\n ],\\n \\\"description\\\": \\\"Target path if type is symlink, null otherwise\\\"\\n }\\n },\\n \\\"additionalProperties\\\": false\\n}\\n\",\n \"schemas/crucible-ts/library/fulpack/v1.0.0/archive-info.schema.json\": \"{\\n \\\"$schema\\\": \\\"http://json-schema.org/draft-07/schema#\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/library/fulpack/v1.0.0/archive-info\\\",\\n \\\"title\\\": \\\"Archive Info\\\",\\n \\\"description\\\": \\\"Metadata about an archive file\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"format\\\",\\n \\\"entry_count\\\",\\n \\\"total_size\\\",\\n \\\"compressed_size\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"format\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"tar\\\",\\n \\\"tar.gz\\\",\\n \\\"zip\\\",\\n \\\"gzip\\\"\\n ],\\n \\\"description\\\": \\\"Archive format from archive-formats taxonomy\\\"\\n },\\n \\\"compression\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"gzip\\\",\\n \\\"deflate\\\",\\n \\\"none\\\"\\n ],\\n \\\"description\\\": \\\"Compression algorithm used\\\"\\n },\\n \\\"entry_count\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"description\\\": \\\"Total number of entries in the archive\\\"\\n },\\n \\\"total_size\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"description\\\": \\\"Total uncompressed size in bytes\\\"\\n },\\n \\\"compressed_size\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"description\\\": \\\"Compressed archive file size in bytes\\\"\\n },\\n \\\"compression_ratio\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"minimum\\\": 0,\\n \\\"description\\\": \\\"Compression ratio (total_size / compressed_size)\\\"\\n },\\n \\\"has_checksums\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Whether the archive contains checksums\\\"\\n },\\n \\\"checksum_algorithm\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"xxh3-128\\\",\\n \\\"sha256\\\",\\n \\\"sha512\\\",\\n \\\"sha1\\\",\\n \\\"md5\\\"\\n ],\\n \\\"description\\\": \\\"Checksum algorithm used from fulhash module (xxh3-128 and sha256 are standard, others may require optional extensions)\\\"\\n },\\n \\\"created\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"date-time\\\",\\n \\\"description\\\": \\\"Archive creation timestamp (ISO 8601 format)\\\"\\n }\\n },\\n \\\"additionalProperties\\\": false\\n}\\n\",\n \"schemas/crucible-ts/library/fulpack/v1.0.0/archive-manifest.schema.json\": \"{\\n \\\"$schema\\\": \\\"http://json-schema.org/draft-07/schema#\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/library/fulpack/v1.0.0/archive-manifest\\\",\\n \\\"title\\\": \\\"Archive Manifest\\\",\\n \\\"description\\\": \\\"Complete archive table of contents (for large archives and caching)\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"format\\\",\\n \\\"version\\\",\\n \\\"generated\\\",\\n \\\"entry_count\\\",\\n \\\"entries\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"format\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"tar\\\",\\n \\\"tar.gz\\\",\\n \\\"zip\\\",\\n \\\"gzip\\\"\\n ],\\n \\\"description\\\": \\\"Archive format from archive-formats taxonomy\\\"\\n },\\n \\\"version\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^\\\\\\\\d+\\\\\\\\.\\\\\\\\d+\\\\\\\\.\\\\\\\\d+$\\\",\\n \\\"description\\\": \\\"Manifest schema version (semantic versioning)\\\"\\n },\\n \\\"generated\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"date-time\\\",\\n \\\"description\\\": \\\"Manifest generation timestamp (ISO 8601 format)\\\"\\n },\\n \\\"entry_count\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"description\\\": \\\"Total number of entries in manifest\\\"\\n },\\n \\\"total_size\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"description\\\": \\\"Total uncompressed size in bytes\\\"\\n },\\n \\\"compressed_size\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"description\\\": \\\"Compressed archive file size in bytes\\\"\\n },\\n \\\"entries\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"https://schemas.fulmenhq.dev/crucible/library/fulpack/v1.0.0/archive-entry\\\"\\n },\\n \\\"description\\\": \\\"Array of archive entries\\\"\\n },\\n \\\"index\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Optional searchable index for fast lookups\\\",\\n \\\"properties\\\": {\\n \\\"by_path\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0\\n },\\n \\\"description\\\": \\\"Map of entry paths to array indices\\\"\\n },\\n \\\"by_type\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"file\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0\\n }\\n },\\n \\\"directory\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0\\n }\\n },\\n \\\"symlink\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0\\n }\\n }\\n },\\n \\\"description\\\": \\\"Map of entry types to array indices\\\"\\n },\\n \\\"by_extension\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0\\n }\\n },\\n \\\"description\\\": \\\"Map of file extensions to array indices\\\"\\n }\\n },\\n \\\"additionalProperties\\\": false\\n }\\n },\\n \\\"additionalProperties\\\": false\\n}\\n\",\n \"schemas/crucible-ts/library/fulpack/v1.0.0/create-options.schema.json\": \"{\\n \\\"$schema\\\": \\\"http://json-schema.org/draft-07/schema#\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/library/fulpack/v1.0.0/create-options\\\",\\n \\\"title\\\": \\\"Create Options\\\",\\n \\\"description\\\": \\\"Options for archive creation operation\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"compression_level\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 1,\\n \\\"maximum\\\": 9,\\n \\\"default\\\": 6,\\n \\\"description\\\": \\\"Compression level (1=fastest, 9=best compression, format-dependent)\\\"\\n },\\n \\\"include_patterns\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": \\\"Glob patterns for files to include (e.g., ['**/*.py', '**/*.md'])\\\"\\n },\\n \\\"exclude_patterns\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": \\\"Glob patterns for files to exclude (e.g., ['**/__pycache__', '**/.git'])\\\"\\n },\\n \\\"checksum_algorithm\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"xxh3-128\\\",\\n \\\"sha256\\\",\\n \\\"sha512\\\",\\n \\\"sha1\\\",\\n \\\"md5\\\"\\n ],\\n \\\"default\\\": \\\"sha256\\\",\\n \\\"description\\\": \\\"Checksum algorithm for entry verification (xxh3-128 and sha256 are standard via fulhash module, others may require optional extensions)\\\"\\n },\\n \\\"preserve_permissions\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"default\\\": true,\\n \\\"description\\\": \\\"Preserve Unix file permissions in archive\\\"\\n },\\n \\\"follow_symlinks\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"default\\\": false,\\n \\\"description\\\": \\\"Follow symbolic links and archive their targets\\\"\\n }\\n },\\n \\\"additionalProperties\\\": false\\n}\\n\",\n \"schemas/crucible-ts/library/fulpack/v1.0.0/extract-options.schema.json\": \"{\\n \\\"$schema\\\": \\\"http://json-schema.org/draft-07/schema#\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/library/fulpack/v1.0.0/extract-options\\\",\\n \\\"title\\\": \\\"Extract Options\\\",\\n \\\"description\\\": \\\"Options for archive extraction operation\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"overwrite\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"error\\\",\\n \\\"skip\\\",\\n \\\"overwrite\\\"\\n ],\\n \\\"default\\\": \\\"error\\\",\\n \\\"description\\\": \\\"How to handle existing files (error=fail, skip=keep existing, overwrite=replace)\\\"\\n },\\n \\\"verify_checksums\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"default\\\": true,\\n \\\"description\\\": \\\"Verify checksums during extraction if available\\\"\\n },\\n \\\"preserve_permissions\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"default\\\": true,\\n \\\"description\\\": \\\"Preserve Unix file permissions from archive\\\"\\n },\\n \\\"include_patterns\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": \\\"Glob patterns for entries to extract (e.g., ['**/*.csv'])\\\"\\n },\\n \\\"max_size\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"default\\\": 1073741824,\\n \\\"description\\\": \\\"Maximum total decompressed size in bytes (decompression bomb protection)\\\"\\n },\\n \\\"max_entries\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"default\\\": 10000,\\n \\\"description\\\": \\\"Maximum number of entries to extract (decompression bomb protection)\\\"\\n }\\n },\\n \\\"additionalProperties\\\": false\\n}\\n\",\n \"schemas/crucible-ts/library/fulpack/v1.0.0/extract-result.schema.json\": \"{\\n \\\"$schema\\\": \\\"http://json-schema.org/draft-07/schema#\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/library/fulpack/v1.0.0/extract-result\\\",\\n \\\"title\\\": \\\"Extract Result\\\",\\n \\\"description\\\": \\\"Result of archive extraction operation\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"extracted_count\\\",\\n \\\"skipped_count\\\",\\n \\\"error_count\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"extracted_count\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"description\\\": \\\"Number of entries successfully extracted\\\"\\n },\\n \\\"skipped_count\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"description\\\": \\\"Number of entries skipped (e.g., already exists)\\\"\\n },\\n \\\"error_count\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"description\\\": \\\"Number of entries that failed to extract\\\"\\n },\\n \\\"errors\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": \\\"Array of error messages for failed extractions\\\"\\n },\\n \\\"warnings\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": \\\"Array of warning messages (e.g., skipped files)\\\"\\n },\\n \\\"checksums_verified\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"description\\\": \\\"Number of checksums successfully verified during extraction\\\"\\n },\\n \\\"total_bytes\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"description\\\": \\\"Total bytes extracted\\\"\\n }\\n },\\n \\\"additionalProperties\\\": false\\n}\\n\",\n \"schemas/crucible-ts/library/fulpack/v1.0.0/scan-options.schema.json\": \"{\\n \\\"$schema\\\": \\\"http://json-schema.org/draft-07/schema#\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/library/fulpack/v1.0.0/scan-options\\\",\\n \\\"title\\\": \\\"Scan Options\\\",\\n \\\"description\\\": \\\"Options for archive scanning operation (for Pathfinder integration)\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"include_metadata\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"default\\\": true,\\n \\\"description\\\": \\\"Include metadata (size, checksum, modified timestamp) in results\\\"\\n },\\n \\\"entry_types\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"file\\\",\\n \\\"directory\\\",\\n \\\"symlink\\\"\\n ]\\n },\\n \\\"description\\\": \\\"Filter entries by type (from entry-types taxonomy)\\\"\\n },\\n \\\"max_depth\\\": {\\n \\\"type\\\": [\\n \\\"integer\\\",\\n \\\"null\\\"\\n ],\\n \\\"minimum\\\": 0,\\n \\\"default\\\": null,\\n \\\"description\\\": \\\"Maximum depth for directory traversal (null = unlimited)\\\"\\n },\\n \\\"max_entries\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"default\\\": 100000,\\n \\\"description\\\": \\\"Safety limit for maximum entries to return\\\"\\n }\\n },\\n \\\"additionalProperties\\\": false\\n}\\n\",\n \"schemas/crucible-ts/library/fulpack/v1.0.0/validation-result.schema.json\": \"{\\n \\\"$schema\\\": \\\"http://json-schema.org/draft-07/schema#\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/library/fulpack/v1.0.0/validation-result\\\",\\n \\\"title\\\": \\\"Validation Result\\\",\\n \\\"description\\\": \\\"Result of archive integrity verification (from verify operation)\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"valid\\\",\\n \\\"errors\\\",\\n \\\"warnings\\\",\\n \\\"entry_count\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"valid\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Whether the archive is valid and intact\\\"\\n },\\n \\\"errors\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": \\\"Array of validation errors (empty if valid)\\\"\\n },\\n \\\"warnings\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": \\\"Array of non-critical warnings (e.g., missing checksums)\\\"\\n },\\n \\\"entry_count\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"description\\\": \\\"Number of entries validated\\\"\\n },\\n \\\"checksums_verified\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"description\\\": \\\"Number of checksums successfully verified\\\"\\n },\\n \\\"checks_performed\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"structure_valid\\\",\\n \\\"checksums_verified\\\",\\n \\\"no_path_traversal\\\",\\n \\\"no_decompression_bomb\\\",\\n \\\"symlinks_safe\\\"\\n ]\\n },\\n \\\"description\\\": \\\"List of security and integrity checks performed\\\"\\n }\\n },\\n \\\"additionalProperties\\\": false\\n}\\n\",\n \"schemas/crucible-ts/library/module-manifest/v1.0.0/module-manifest.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/library/module-manifest/v1.0.0/module-manifest.schema.json\\\",\\n \\\"title\\\": \\\"Fulmen Library Module Manifest\\\",\\n \\\"description\\\": \\\"Defines required and optional helper modules across Fulmen languages\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"$defs\\\": {\\n \\\"moduleId\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"config-path-api\\\",\\n \\\"three-layer-config\\\",\\n \\\"schema-validation\\\",\\n \\\"crucible-shim\\\",\\n \\\"fuldx-bootstrap\\\",\\n \\\"ssot-sync\\\",\\n \\\"observability-logging\\\",\\n \\\"foundry-patterns\\\",\\n \\\"docscribe\\\",\\n \\\"cloud-storage\\\",\\n \\\"error-handling-propagation\\\",\\n \\\"pathfinder\\\",\\n \\\"ascii-helpers\\\",\\n \\\"telemetry-metrics\\\"\\n ]\\n },\\n \\\"language\\\": {\\n \\\"$ref\\\": \\\"https://schemas.fulmenhq.dev/crucible/taxonomy/language/v1.0.0/language-key.schema.json\\\"\\n }\\n },\\n \\\"properties\\\": {\\n \\\"version\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Manifest version (CalVer)\\\",\\n \\\"pattern\\\": \\\"^\\\\\\\\d{4}\\\\\\\\.\\\\\\\\d{2}\\\\\\\\.\\\\\\\\d+$\\\"\\n },\\n \\\"lastUpdated\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"date\\\"\\n },\\n \\\"modules\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"minItems\\\": 1,\\n \\\"items\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"id\\\": {\\n \\\"$ref\\\": \\\"#/$defs/moduleId\\\"\\n },\\n \\\"tier\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"core\\\",\\n \\\"extension\\\"\\n ]\\n },\\n \\\"requirement\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"mandatory\\\",\\n \\\"recommended\\\",\\n \\\"optional\\\"\\n ]\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"coverage\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"language\\\": {\\n \\\"$ref\\\": \\\"#/$defs/language\\\"\\n },\\n \\\"target\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 100\\n }\\n },\\n \\\"required\\\": [\\n \\\"language\\\",\\n \\\"target\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n }\\n }\\n },\\n \\\"required\\\": [\\n \\\"id\\\",\\n \\\"tier\\\",\\n \\\"requirement\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n }\\n },\\n \\\"languageOverrides\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"language\\\": {\\n \\\"$ref\\\": \\\"#/$defs/language\\\"\\n },\\n \\\"unsupported\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {}\\n },\\n \\\"planned\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"#/$defs/moduleId\\\"\\n }\\n },\\n \\\"notes\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"language\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n }\\n }\\n },\\n \\\"required\\\": [\\n \\\"version\\\",\\n \\\"modules\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n}\\n\",\n \"schemas/crucible-ts/library/similarity/v1.0.0/similarity.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/library/similarity/v1.0.0/similarity.schema.json\\\",\\n \\\"title\\\": \\\"Similarity Fixtures\\\",\\n \\\"description\\\": \\\"Test fixtures for text similarity and normalization utilities (v2.0)\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"version\\\",\\n \\\"test_cases\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"version\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Schema version (CalVer)\\\",\\n \\\"pattern\\\": \\\"^\\\\\\\\d{4}\\\\\\\\.\\\\\\\\d{1,2}\\\\\\\\.\\\\\\\\d{1,2}$\\\",\\n \\\"examples\\\": [\\n \\\"2025.10.3\\\"\\n ]\\n },\\n \\\"test_cases\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Organized test cases by category\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"#/definitions/TestCaseGroup\\\"\\n },\\n \\\"minItems\\\": 1\\n },\\n \\\"notes\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Optional notes about fixture generation methodology\\\"\\n }\\n },\\n \\\"definitions\\\": {\\n \\\"TestCaseGroup\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"category\\\",\\n \\\"cases\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"category\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"levenshtein\\\",\\n \\\"damerau\\\",\\n \\\"jaro_winkler\\\",\\n \\\"substring\\\",\\n \\\"normalization\\\",\\n \\\"suggestions\\\"\\n ],\\n \\\"description\\\": \\\"Test case category (v2.0: split distance into specific metrics)\\\"\\n },\\n \\\"cases\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Test cases in this category\\\",\\n \\\"items\\\": {\\n \\\"oneOf\\\": [\\n {\\n \\\"$ref\\\": \\\"#/definitions/LevenshteinTestCase\\\"\\n },\\n {\\n \\\"$ref\\\": \\\"#/definitions/DamerauTestCase\\\"\\n },\\n {\\n \\\"$ref\\\": \\\"#/definitions/JaroWinklerTestCase\\\"\\n },\\n {\\n \\\"$ref\\\": \\\"#/definitions/SubstringTestCase\\\"\\n },\\n {\\n \\\"$ref\\\": \\\"#/definitions/NormalizationTestCase\\\"\\n },\\n {\\n \\\"$ref\\\": \\\"#/definitions/SuggestionTestCase\\\"\\n }\\n ]\\n },\\n \\\"minItems\\\": 1\\n }\\n }\\n },\\n \\\"DistanceTestCase\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"input_a\\\",\\n \\\"input_b\\\",\\n \\\"expected_distance\\\",\\n \\\"expected_score\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"input_a\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"First input string\\\"\\n },\\n \\\"input_b\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Second input string\\\"\\n },\\n \\\"expected_distance\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"description\\\": \\\"Expected Levenshtein distance\\\"\\n },\\n \\\"expected_score\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 1,\\n \\\"description\\\": \\\"Expected similarity score (0.0-1.0)\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Human-readable test case description\\\"\\n },\\n \\\"tags\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": \\\"Optional tags for categorization\\\"\\n }\\n }\\n },\\n \\\"NormalizationTestCase\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"input\\\",\\n \\\"expected\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"input\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Input string to normalize\\\"\\n },\\n \\\"options\\\": {\\n \\\"$ref\\\": \\\"#/definitions/NormalizeOptions\\\",\\n \\\"description\\\": \\\"Normalization options\\\"\\n },\\n \\\"expected\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Expected normalized output\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Human-readable test case description\\\"\\n },\\n \\\"tags\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": \\\"Optional tags for categorization\\\"\\n }\\n }\\n },\\n \\\"SuggestionTestCase\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"input\\\",\\n \\\"candidates\\\",\\n \\\"expected\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"input\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Input string to find suggestions for\\\"\\n },\\n \\\"candidates\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": \\\"Candidate strings to match against\\\",\\n \\\"minItems\\\": 1\\n },\\n \\\"options\\\": {\\n \\\"$ref\\\": \\\"#/definitions/SuggestOptions\\\",\\n \\\"description\\\": \\\"Suggestion options\\\"\\n },\\n \\\"expected\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"#/definitions/Suggestion\\\"\\n },\\n \\\"description\\\": \\\"Expected suggestions in order\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Human-readable test case description\\\"\\n },\\n \\\"tags\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": \\\"Optional tags for categorization\\\"\\n }\\n }\\n },\\n \\\"NormalizeOptions\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"strip_accents\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"default\\\": false,\\n \\\"description\\\": \\\"Whether to strip diacritics\\\"\\n },\\n \\\"locale\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"default\\\": \\\"\\\",\\n \\\"description\\\": \\\"Locale for case folding (empty = simple casefold)\\\"\\n }\\n },\\n \\\"additionalProperties\\\": false\\n },\\n \\\"SuggestOptions\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"min_score\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 1,\\n \\\"default\\\": 0.6,\\n \\\"description\\\": \\\"Minimum similarity score threshold\\\"\\n },\\n \\\"max_suggestions\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 1,\\n \\\"default\\\": 3,\\n \\\"description\\\": \\\"Maximum number of suggestions to return\\\"\\n },\\n \\\"normalize\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"default\\\": true,\\n \\\"description\\\": \\\"Whether to normalize input and candidates\\\"\\n }\\n },\\n \\\"additionalProperties\\\": false\\n },\\n \\\"Suggestion\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"value\\\",\\n \\\"score\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"value\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Suggested candidate value\\\"\\n },\\n \\\"score\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 1,\\n \\\"description\\\": \\\"Similarity score (0.0-1.0)\\\"\\n }\\n },\\n \\\"additionalProperties\\\": false\\n }\\n }\\n}\\n\",\n \"schemas/crucible-ts/library/similarity/v2.0.0/similarity.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/library/similarity/v2.0.0/similarity.schema.json\\\",\\n \\\"title\\\": \\\"Similarity Fixtures v2.0\\\",\\n \\\"description\\\": \\\"Test fixtures for text similarity and normalization utilities (v2.0 - breaking changes)\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"version\\\",\\n \\\"test_cases\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"version\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Schema version (CalVer)\\\",\\n \\\"pattern\\\": \\\"^\\\\\\\\d{4}\\\\\\\\.\\\\\\\\d{1,2}\\\\\\\\.\\\\\\\\d{1,2}$\\\",\\n \\\"examples\\\": [\\n \\\"2025.10.3\\\"\\n ]\\n },\\n \\\"test_cases\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Organized test cases by metric category\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"#/definitions/TestCaseGroup\\\"\\n },\\n \\\"minItems\\\": 1\\n },\\n \\\"notes\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Notes about fixture generation methodology and reference implementations\\\"\\n },\\n \\\"generator\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Metadata about automated fixture generation (optional, omit for hand-written fixtures)\\\",\\n \\\"properties\\\": {\\n \\\"tool\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Name of the generator tool\\\",\\n \\\"examples\\\": [\\n \\\"similarity-validator\\\",\\n \\\"pyfulmen-fixture-gen\\\"\\n ]\\n },\\n \\\"tool_version\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Version of the generator tool (semver)\\\",\\n \\\"pattern\\\": \\\"^\\\\\\\\d+\\\\\\\\.\\\\\\\\d+\\\\\\\\.\\\\\\\\d+(-[a-zA-Z0-9.]+)?$\\\",\\n \\\"examples\\\": [\\n \\\"0.1.0\\\",\\n \\\"1.2.3-beta.1\\\"\\n ]\\n },\\n \\\"source_library\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Canonical implementation library used for generation\\\",\\n \\\"examples\\\": [\\n \\\"rapidfuzz-rs\\\",\\n \\\"rapidfuzz\\\",\\n \\\"strsim-rs\\\"\\n ]\\n },\\n \\\"source_version\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Version of the source library\\\",\\n \\\"examples\\\": [\\n \\\"3.0.5\\\",\\n \\\"0.11.1\\\"\\n ]\\n },\\n \\\"generated_at\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"date-time\\\",\\n \\\"description\\\": \\\"ISO 8601 timestamp of generation\\\",\\n \\\"examples\\\": [\\n \\\"2025-10-27T20:15:00Z\\\"\\n ]\\n },\\n \\\"command\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Command used to generate (for reproducibility)\\\",\\n \\\"examples\\\": [\\n \\\"similarity-validator generate --input basic.yaml --output basic.yaml --overwrite\\\"\\n ]\\n }\\n },\\n \\\"required\\\": [\\n \\\"tool\\\",\\n \\\"tool_version\\\",\\n \\\"source_library\\\",\\n \\\"generated_at\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n }\\n },\\n \\\"definitions\\\": {\\n \\\"TestCaseGroup\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"category\\\",\\n \\\"cases\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"category\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"levenshtein\\\",\\n \\\"damerau_osa\\\",\\n \\\"damerau_unrestricted\\\",\\n \\\"jaro_winkler\\\",\\n \\\"substring\\\",\\n \\\"normalization_presets\\\",\\n \\\"suggestions\\\"\\n ],\\n \\\"description\\\": \\\"Test case category by metric type\\\"\\n },\\n \\\"cases\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Test cases in this category\\\",\\n \\\"items\\\": {\\n \\\"anyOf\\\": [\\n {\\n \\\"$ref\\\": \\\"#/definitions/LevenshteinTestCase\\\"\\n },\\n {\\n \\\"$ref\\\": \\\"#/definitions/DamerauOSATestCase\\\"\\n },\\n {\\n \\\"$ref\\\": \\\"#/definitions/DamerauUnrestrictedTestCase\\\"\\n },\\n {\\n \\\"$ref\\\": \\\"#/definitions/JaroWinklerTestCase\\\"\\n },\\n {\\n \\\"$ref\\\": \\\"#/definitions/SubstringTestCase\\\"\\n },\\n {\\n \\\"$ref\\\": \\\"#/definitions/NormalizationTestCase\\\"\\n },\\n {\\n \\\"$ref\\\": \\\"#/definitions/SuggestionTestCase\\\"\\n }\\n ]\\n },\\n \\\"minItems\\\": 1\\n }\\n }\\n },\\n \\\"LevenshteinTestCase\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"input_a\\\",\\n \\\"input_b\\\",\\n \\\"expected_distance\\\",\\n \\\"expected_score\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"input_a\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"First input string\\\"\\n },\\n \\\"input_b\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Second input string\\\"\\n },\\n \\\"expected_distance\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"description\\\": \\\"Expected Levenshtein distance\\\"\\n },\\n \\\"expected_score\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 1,\\n \\\"description\\\": \\\"Expected similarity score (0.0-1.0)\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Human-readable test case description\\\"\\n },\\n \\\"tags\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": \\\"Optional tags (e.g., 'unicode', 'emoji', 'edge_case')\\\"\\n }\\n },\\n \\\"additionalProperties\\\": false\\n },\\n \\\"DamerauOSATestCase\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"input_a\\\",\\n \\\"input_b\\\",\\n \\\"expected_distance\\\",\\n \\\"expected_score\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"input_a\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"input_b\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"expected_distance\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"description\\\": \\\"Expected Damerau-Levenshtein distance (Optimal String Alignment variant)\\\"\\n },\\n \\\"expected_score\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 1\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"tags\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n }\\n },\\n \\\"additionalProperties\\\": false\\n },\\n \\\"DamerauUnrestrictedTestCase\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"input_a\\\",\\n \\\"input_b\\\",\\n \\\"expected_distance\\\",\\n \\\"expected_score\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"input_a\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"input_b\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"expected_distance\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"description\\\": \\\"Expected Damerau-Levenshtein distance (unrestricted variant)\\\"\\n },\\n \\\"expected_score\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 1\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"tags\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n }\\n },\\n \\\"additionalProperties\\\": false\\n },\\n \\\"JaroWinklerTestCase\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"input_a\\\",\\n \\\"input_b\\\",\\n \\\"expected_score\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"input_a\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"input_b\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"expected_score\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 1,\\n \\\"description\\\": \\\"Expected Jaro-Winkler similarity score\\\"\\n },\\n \\\"prefix_scale\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 0.25,\\n \\\"default\\\": 0.1,\\n \\\"description\\\": \\\"Prefix scaling factor (if non-default)\\\"\\n },\\n \\\"max_prefix\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 1,\\n \\\"maximum\\\": 8,\\n \\\"default\\\": 4,\\n \\\"description\\\": \\\"Maximum prefix length (if non-default)\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"tags\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n }\\n },\\n \\\"additionalProperties\\\": false\\n },\\n \\\"SubstringTestCase\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"needle\\\",\\n \\\"haystack\\\",\\n \\\"expected_score\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"needle\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Substring to search for\\\"\\n },\\n \\\"haystack\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"String to search in\\\"\\n },\\n \\\"expected_score\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 1,\\n \\\"description\\\": \\\"Expected substring similarity score\\\"\\n },\\n \\\"expected_range\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"start\\\",\\n \\\"end\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"start\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"description\\\": \\\"Start index (inclusive, 0-based character position)\\\"\\n },\\n \\\"end\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"description\\\": \\\"End index (exclusive, one past last character)\\\"\\n }\\n },\\n \\\"description\\\": \\\"Expected matched range [start, end) in normalized haystack\\\"\\n },\\n \\\"normalize_preset\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"none\\\",\\n \\\"minimal\\\",\\n \\\"default\\\",\\n \\\"aggressive\\\"\\n ],\\n \\\"default\\\": \\\"none\\\",\\n \\\"description\\\": \\\"Normalization preset to apply before matching\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"tags\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n }\\n },\\n \\\"additionalProperties\\\": false\\n },\\n \\\"NormalizationTestCase\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"input\\\",\\n \\\"preset\\\",\\n \\\"expected\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"input\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Input string to normalize\\\"\\n },\\n \\\"preset\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"none\\\",\\n \\\"minimal\\\",\\n \\\"default\\\",\\n \\\"aggressive\\\"\\n ],\\n \\\"description\\\": \\\"Normalization preset to apply\\\"\\n },\\n \\\"expected\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Expected normalized output\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"tags\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n }\\n },\\n \\\"additionalProperties\\\": false\\n },\\n \\\"SuggestionTestCase\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"input\\\",\\n \\\"candidates\\\",\\n \\\"expected\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"input\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Input string to find suggestions for\\\"\\n },\\n \\\"candidates\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": \\\"Candidate strings to match against\\\",\\n \\\"minItems\\\": 1\\n },\\n \\\"options\\\": {\\n \\\"$ref\\\": \\\"#/definitions/SuggestOptions\\\",\\n \\\"description\\\": \\\"Suggestion options\\\"\\n },\\n \\\"expected\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"#/definitions/Suggestion\\\"\\n },\\n \\\"description\\\": \\\"Expected suggestions in order\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"tags\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n }\\n },\\n \\\"additionalProperties\\\": false\\n },\\n \\\"SuggestOptions\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"min_score\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 1,\\n \\\"default\\\": 0.6\\n },\\n \\\"max_suggestions\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"default\\\": 3\\n },\\n \\\"metric\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"levenshtein\\\",\\n \\\"damerau_osa\\\",\\n \\\"damerau_unrestricted\\\",\\n \\\"jaro_winkler\\\",\\n \\\"substring\\\"\\n ],\\n \\\"default\\\": \\\"levenshtein\\\",\\n \\\"description\\\": \\\"Distance metric to use\\\"\\n },\\n \\\"normalize_preset\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"none\\\",\\n \\\"minimal\\\",\\n \\\"default\\\",\\n \\\"aggressive\\\"\\n ],\\n \\\"default\\\": \\\"default\\\",\\n \\\"description\\\": \\\"Normalization preset\\\"\\n },\\n \\\"prefer_prefix\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"default\\\": false,\\n \\\"description\\\": \\\"Apply bonus for prefix matches\\\"\\n },\\n \\\"jaro_prefix_scale\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 0.25,\\n \\\"default\\\": 0.1,\\n \\\"description\\\": \\\"Jaro-Winkler prefix scale (only for jaro_winkler metric)\\\"\\n },\\n \\\"jaro_max_prefix\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 1,\\n \\\"maximum\\\": 8,\\n \\\"default\\\": 4,\\n \\\"description\\\": \\\"Jaro-Winkler max prefix length (only for jaro_winkler metric)\\\"\\n }\\n },\\n \\\"additionalProperties\\\": false\\n },\\n \\\"Suggestion\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"value\\\",\\n \\\"score\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"value\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Suggested candidate value\\\"\\n },\\n \\\"score\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 1,\\n \\\"description\\\": \\\"Similarity score (0.0-1.0)\\\"\\n },\\n \\\"matched_range\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"start\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0\\n },\\n \\\"end\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0\\n }\\n },\\n \\\"description\\\": \\\"Matched range for substring metric (optional)\\\"\\n },\\n \\\"reason\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Optional reason code (e.g., 'prefix_match', 'typo_correction')\\\"\\n },\\n \\\"normalized_value\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Result of applying normalization preset (optional)\\\"\\n }\\n },\\n \\\"additionalProperties\\\": false\\n }\\n }\\n}\\n\",\n \"schemas/crucible-ts/meta/draft-2019-09/offline.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2019-09/schema\\\",\\n \\\"$id\\\": \\\"https://json-schema.org/draft/2019-09/schema\\\",\\n \\\"title\\\": \\\"Offline meta-schema (subset)\\\",\\n \\\"description\\\": \\\"Subset of the JSON Schema 2019-09 meta-schema for offline validation.\\\",\\n \\\"type\\\": [\\n \\\"object\\\",\\n \\\"boolean\\\"\\n ],\\n \\\"$defs\\\": {\\n \\\"simpleType\\\": {\\n \\\"enum\\\": [\\n \\\"array\\\",\\n \\\"boolean\\\",\\n \\\"integer\\\",\\n \\\"null\\\",\\n \\\"number\\\",\\n \\\"object\\\",\\n \\\"string\\\"\\n ]\\n },\\n \\\"schemaArray\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"minItems\\\": 1,\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"#\\\"\\n }\\n },\\n \\\"stringArray\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"uniqueItems\\\": true,\\n \\\"default\\\": []\\n }\\n },\\n \\\"properties\\\": {\\n \\\"$id\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"$schema\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"$ref\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"$recursiveAnchor\\\": {\\n \\\"type\\\": [\\n \\\"boolean\\\",\\n \\\"string\\\"\\n ]\\n },\\n \\\"$recursiveRef\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"title\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"default\\\": {},\\n \\\"examples\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {}\\n },\\n \\\"type\\\": {\\n \\\"anyOf\\\": [\\n {\\n \\\"$ref\\\": \\\"#/$defs/simpleType\\\"\\n },\\n {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"#/$defs/simpleType\\\"\\n },\\n \\\"minItems\\\": 1,\\n \\\"uniqueItems\\\": true\\n }\\n ]\\n },\\n \\\"enum\\\": {\\n \\\"type\\\": \\\"array\\\"\\n },\\n \\\"allOf\\\": {\\n \\\"$ref\\\": \\\"#/$defs/schemaArray\\\"\\n },\\n \\\"anyOf\\\": {\\n \\\"$ref\\\": \\\"#/$defs/schemaArray\\\"\\n },\\n \\\"oneOf\\\": {\\n \\\"$ref\\\": \\\"#/$defs/schemaArray\\\"\\n },\\n \\\"not\\\": {\\n \\\"$ref\\\": \\\"#\\\"\\n },\\n \\\"definitions\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": {\\n \\\"$ref\\\": \\\"#\\\"\\n },\\n \\\"default\\\": {}\\n },\\n \\\"$defs\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": {\\n \\\"$ref\\\": \\\"#\\\"\\n },\\n \\\"default\\\": {}\\n },\\n \\\"properties\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": {\\n \\\"$ref\\\": \\\"#\\\"\\n },\\n \\\"default\\\": {}\\n },\\n \\\"items\\\": {\\n \\\"anyOf\\\": [\\n {\\n \\\"$ref\\\": \\\"#\\\"\\n },\\n {\\n \\\"$ref\\\": \\\"#/$defs/schemaArray\\\"\\n }\\n ],\\n \\\"default\\\": {}\\n },\\n \\\"required\\\": {\\n \\\"$ref\\\": \\\"#/$defs/stringArray\\\"\\n },\\n \\\"dependencies\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": {\\n \\\"anyOf\\\": [\\n {\\n \\\"$ref\\\": \\\"#\\\"\\n },\\n {\\n \\\"$ref\\\": \\\"#/$defs/stringArray\\\"\\n }\\n ]\\n },\\n \\\"default\\\": {}\\n }\\n }\\n}\\n\",\n \"schemas/crucible-ts/observability/logging/v1.0.0/definitions.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/observability/logging/v1.0.0/definitions.schema.json\\\",\\n \\\"title\\\": \\\"Logging Definitions\\\",\\n \\\"description\\\": \\\"Shared type definitions for logging schemas\\\",\\n \\\"$comment\\\": \\\"Runtime Contract: Implementations MUST convert severityName to severityLevel for comparison operations. Use severityMapping for the canonical name→level mapping. Config accepts strings, events emit both string and numeric values.\\\",\\n \\\"$defs\\\": {\\n \\\"severityName\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"TRACE\\\",\\n \\\"DEBUG\\\",\\n \\\"INFO\\\",\\n \\\"WARN\\\",\\n \\\"ERROR\\\",\\n \\\"FATAL\\\",\\n \\\"NONE\\\"\\n ],\\n \\\"description\\\": \\\"Severity level name (TRACE=0, DEBUG=10, INFO=20, WARN=30, ERROR=40, FATAL=50, NONE=60). User-facing string in configs.\\\"\\n },\\n \\\"severityLevel\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"enum\\\": [\\n 0,\\n 10,\\n 20,\\n 30,\\n 40,\\n 50,\\n 60\\n ],\\n \\\"description\\\": \\\"Numeric severity level for sorting and comparison\\\"\\n },\\n \\\"severityMapping\\\": {\\n \\\"description\\\": \\\"Standard mapping of severity names to numeric levels\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": false,\\n \\\"properties\\\": {\\n \\\"TRACE\\\": {\\n \\\"const\\\": 0\\n },\\n \\\"DEBUG\\\": {\\n \\\"const\\\": 10\\n },\\n \\\"INFO\\\": {\\n \\\"const\\\": 20\\n },\\n \\\"WARN\\\": {\\n \\\"const\\\": 30\\n },\\n \\\"ERROR\\\": {\\n \\\"const\\\": 40\\n },\\n \\\"FATAL\\\": {\\n \\\"const\\\": 50\\n },\\n \\\"NONE\\\": {\\n \\\"const\\\": 60\\n }\\n }\\n },\\n \\\"rfc3339Nano\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"date-time\\\",\\n \\\"pattern\\\": \\\"^\\\\\\\\d{4}-\\\\\\\\d{2}-\\\\\\\\d{2}T\\\\\\\\d{2}:\\\\\\\\d{2}:\\\\\\\\d{2}(\\\\\\\\.\\\\\\\\d{1,9})?Z$\\\",\\n \\\"description\\\": \\\"RFC3339 timestamp with nanosecond precision in UTC (e.g., 2025-10-02T12:34:56.789012345Z)\\\"\\n },\\n \\\"serviceName\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 256,\\n \\\"pattern\\\": \\\"^[a-z0-9][a-z0-9-]*[a-z0-9]$\\\",\\n \\\"description\\\": \\\"Service name (lowercase alphanumeric with hyphens, 1-256 chars)\\\"\\n },\\n \\\"componentName\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 256,\\n \\\"pattern\\\": \\\"^[a-z0-9][a-z0-9-]*[a-z0-9]$\\\",\\n \\\"description\\\": \\\"Component name (lowercase alphanumeric with hyphens, 1-256 chars)\\\"\\n },\\n \\\"loggerName\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 256,\\n \\\"description\\\": \\\"Logger name (typically component.subcomponent or hierarchical, 1-256 chars)\\\"\\n },\\n \\\"logMessage\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 32768,\\n \\\"description\\\": \\\"Log message text (non-empty, max 32KB)\\\"\\n },\\n \\\"tags\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 128\\n },\\n \\\"maxItems\\\": 50,\\n \\\"uniqueItems\\\": true,\\n \\\"description\\\": \\\"Searchable tags (max 50, unique, 1-128 chars each)\\\"\\n },\\n \\\"context\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"maxProperties\\\": 100,\\n \\\"description\\\": \\\"Contextual key-value pairs (max 100 fields)\\\"\\n },\\n \\\"uuidV7\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$\\\",\\n \\\"description\\\": \\\"UUIDv7 identifier (canonical lowercase hex)\\\"\\n },\\n \\\"requestId\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 128,\\n \\\"description\\\": \\\"Request identifier (UUIDv7 recommended)\\\"\\n },\\n \\\"contextId\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 128,\\n \\\"description\\\": \\\"Operation or execution context identifier\\\"\\n },\\n \\\"comparisonOperator\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"GE\\\",\\n \\\"LE\\\",\\n \\\"EQ\\\",\\n \\\"NE\\\",\\n \\\"GT\\\",\\n \\\"LT\\\"\\n ],\\n \\\"description\\\": \\\"Comparison operator: GE(>=), LE(<=), EQ(==), NE(!=), GT(>), LT(<). For severity comparisons, implementations MUST use numeric severityLevel values, not string comparison.\\\"\\n }\\n }\\n}\\n\",\n \"schemas/crucible-ts/observability/logging/v1.0.0/log-event.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/observability/logging/v1.0.0/log-event.schema.json\\\",\\n \\\"title\\\": \\\"LogEvent\\\",\\n \\\"description\\\": \\\"Structured log event envelope for consistent telemetry across Fulmen libraries\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"timestamp\\\": {\\n \\\"$ref\\\": \\\"https://schemas.fulmenhq.dev/crucible/observability/logging/v1.0.0/definitions.schema.json#/$defs/rfc3339Nano\\\"\\n },\\n \\\"severity\\\": {\\n \\\"$ref\\\": \\\"https://schemas.fulmenhq.dev/crucible/observability/logging/v1.0.0/definitions.schema.json#/$defs/severityName\\\"\\n },\\n \\\"severityLevel\\\": {\\n \\\"$ref\\\": \\\"https://schemas.fulmenhq.dev/crucible/observability/logging/v1.0.0/definitions.schema.json#/$defs/severityLevel\\\",\\n \\\"description\\\": \\\"Numeric severity for sorting/filtering (optional but recommended for runtime events)\\\"\\n },\\n \\\"message\\\": {\\n \\\"$ref\\\": \\\"https://schemas.fulmenhq.dev/crucible/observability/logging/v1.0.0/definitions.schema.json#/$defs/logMessage\\\"\\n },\\n \\\"service\\\": {\\n \\\"$ref\\\": \\\"https://schemas.fulmenhq.dev/crucible/observability/logging/v1.0.0/definitions.schema.json#/$defs/serviceName\\\"\\n },\\n \\\"component\\\": {\\n \\\"$ref\\\": \\\"https://schemas.fulmenhq.dev/crucible/observability/logging/v1.0.0/definitions.schema.json#/$defs/componentName\\\"\\n },\\n \\\"logger\\\": {\\n \\\"$ref\\\": \\\"https://schemas.fulmenhq.dev/crucible/observability/logging/v1.0.0/definitions.schema.json#/$defs/loggerName\\\"\\n },\\n \\\"environment\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 64,\\n \\\"description\\\": \\\"Deployment environment (e.g., 'dev', 'staging', 'production')\\\"\\n },\\n \\\"context\\\": {\\n \\\"$ref\\\": \\\"https://schemas.fulmenhq.dev/crucible/observability/logging/v1.0.0/definitions.schema.json#/$defs/context\\\"\\n },\\n \\\"contextId\\\": {\\n \\\"$ref\\\": \\\"https://schemas.fulmenhq.dev/crucible/observability/logging/v1.0.0/definitions.schema.json#/$defs/contextId\\\",\\n \\\"description\\\": \\\"Identifier for the broader execution context (workflow, job, batch, etc.)\\\"\\n },\\n \\\"requestId\\\": {\\n \\\"$ref\\\": \\\"https://schemas.fulmenhq.dev/crucible/observability/logging/v1.0.0/definitions.schema.json#/$defs/requestId\\\",\\n \\\"description\\\": \\\"Request identifier (HTTP X-Request-ID or CLI operation UUID)\\\"\\n },\\n \\\"correlationId\\\": {\\n \\\"$ref\\\": \\\"https://schemas.fulmenhq.dev/crucible/observability/logging/v1.0.0/definitions.schema.json#/$defs/uuidV7\\\",\\n \\\"description\\\": \\\"Cross-service correlation identifier (UUIDv7 propagated across boundaries)\\\"\\n },\\n \\\"error\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"message\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 8192,\\n \\\"description\\\": \\\"Error message\\\"\\n },\\n \\\"type\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"maxLength\\\": 256,\\n \\\"description\\\": \\\"Error type or class\\\"\\n },\\n \\\"stack\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"maxLength\\\": 65536,\\n \\\"description\\\": \\\"Stack trace (max 64KB)\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"message\\\"\\n ],\\n \\\"description\\\": \\\"Error information (required for ERROR/FATAL severity)\\\"\\n },\\n \\\"traceId\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 128,\\n \\\"description\\\": \\\"Distributed trace ID (REQUIRED when tracing is enabled)\\\"\\n },\\n \\\"spanId\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 128,\\n \\\"description\\\": \\\"Span ID within trace (REQUIRED when tracing is enabled)\\\"\\n },\\n \\\"parentSpanId\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 128,\\n \\\"description\\\": \\\"Parent span identifier for nested operations\\\"\\n },\\n \\\"tags\\\": {\\n \\\"$ref\\\": \\\"https://schemas.fulmenhq.dev/crucible/observability/logging/v1.0.0/definitions.schema.json#/$defs/tags\\\"\\n },\\n \\\"eventId\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 128,\\n \\\"description\\\": \\\"Unique event identifier (optional)\\\"\\n },\\n \\\"operation\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 128,\\n \\\"description\\\": \\\"Logical operation or handler name (CLI command, HTTP route, job step)\\\"\\n },\\n \\\"durationMs\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"minimum\\\": 0,\\n \\\"description\\\": \\\"Operation duration in milliseconds\\\"\\n },\\n \\\"userId\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 128,\\n \\\"description\\\": \\\"Authenticated user identifier when applicable\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"timestamp\\\",\\n \\\"severity\\\",\\n \\\"severityLevel\\\",\\n \\\"message\\\",\\n \\\"service\\\"\\n ],\\n \\\"examples\\\": [\\n {\\n \\\"timestamp\\\": \\\"2025-10-02T12:34:56.789012Z\\\",\\n \\\"severity\\\": \\\"INFO\\\",\\n \\\"severityLevel\\\": 20,\\n \\\"message\\\": \\\"Pathfinder scan completed\\\",\\n \\\"logger\\\": \\\"gofulmen.pathfinder\\\",\\n \\\"service\\\": \\\"gofulmen\\\",\\n \\\"component\\\": \\\"pathfinder\\\",\\n \\\"environment\\\": \\\"production\\\",\\n \\\"contextId\\\": \\\"pipeline-20251008\\\",\\n \\\"requestId\\\": \\\"req-01hcn7h3a6zyv4k73k4f4z6w7j\\\",\\n \\\"correlationId\\\": \\\"018db318-8c7f-7bc1-b3ff-b2e0e689a001\\\",\\n \\\"traceId\\\": \\\"0af7651916cd43dd8448eb211c80319c\\\",\\n \\\"spanId\\\": \\\"b7ad6b7169203331\\\",\\n \\\"operation\\\": \\\"pathfinder.scan\\\",\\n \\\"durationMs\\\": 2450,\\n \\\"context\\\": {\\n \\\"filesScanned\\\": 1234,\\n \\\"duration\\\": \\\"2.5s\\\"\\n },\\n \\\"tags\\\": [\\n \\\"scan\\\",\\n \\\"success\\\"\\n ]\\n },\\n {\\n \\\"timestamp\\\": \\\"2025-10-02T12:35:01.123456Z\\\",\\n \\\"severity\\\": \\\"ERROR\\\",\\n \\\"severityLevel\\\": 40,\\n \\\"message\\\": \\\"Failed to read file\\\",\\n \\\"logger\\\": \\\"gofulmen.pathfinder\\\",\\n \\\"service\\\": \\\"gofulmen\\\",\\n \\\"component\\\": \\\"pathfinder\\\",\\n \\\"environment\\\": \\\"production\\\",\\n \\\"requestId\\\": \\\"req-01hcn7h5a9ab1k0tpnttw40p2n\\\",\\n \\\"correlationId\\\": \\\"018db318-8d51-7f96-9f82-0d246bc4d4cb\\\",\\n \\\"error\\\": {\\n \\\"message\\\": \\\"permission denied\\\",\\n \\\"type\\\": \\\"PathAccessError\\\",\\n \\\"stack\\\": \\\"...\\\"\\n },\\n \\\"context\\\": {\\n \\\"path\\\": \\\"/restricted/file.txt\\\"\\n },\\n \\\"tags\\\": [\\n \\\"error\\\",\\n \\\"filesystem\\\"\\n ]\\n }\\n ]\\n}\\n\",\n \"schemas/crucible-ts/observability/logging/v1.0.0/logger-config.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/observability/logging/v1.0.0/logger-config.schema.json\\\",\\n \\\"title\\\": \\\"LoggerConfig\\\",\\n \\\"description\\\": \\\"Progressive logger configuration with profile-based complexity and policy enforcement\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"profile\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"SIMPLE\\\",\\n \\\"STRUCTURED\\\",\\n \\\"ENTERPRISE\\\",\\n \\\"CUSTOM\\\"\\n ],\\n \\\"default\\\": \\\"SIMPLE\\\",\\n \\\"description\\\": \\\"Logging profile for progressive complexity (SIMPLE=CLI tooling, STRUCTURED=services/APIs, ENTERPRISE=full production, CUSTOM=user-defined).\\\"\\n },\\n \\\"service\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 80,\\n \\\"description\\\": \\\"Service or application name (e.g., 'gofulmen', 'tsfulmen').\\\"\\n },\\n \\\"environment\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"default\\\": \\\"development\\\",\\n \\\"maxLength\\\": 32,\\n \\\"description\\\": \\\"Deployment environment identifier (development, staging, production, etc.).\\\"\\n },\\n \\\"policyFile\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"maxLength\\\": 512,\\n \\\"description\\\": \\\"Optional policy file path for organizational governance (search order: .goneat/logging-policy.yaml, /etc/fulmen/logging-policy.yaml, /org/logging-policy.yaml).\\\"\\n },\\n \\\"defaultLevel\\\": {\\n \\\"$ref\\\": \\\"#/$defs/logLevel\\\",\\n \\\"default\\\": \\\"INFO\\\",\\n \\\"description\\\": \\\"Default minimum log level.\\\"\\n },\\n \\\"sinks\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"#/$defs/sinkConfig\\\"\\n },\\n \\\"description\\\": \\\"Configured sinks for log output (required for STRUCTURED and ENTERPRISE profiles).\\\"\\n },\\n \\\"middleware\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"https://schemas.fulmenhq.dev/crucible/observability/logging/v1.0.0/middleware-config.schema.json\\\"\\n },\\n \\\"description\\\": \\\"Middleware pipeline applied to log events (required for ENTERPRISE profile).\\\"\\n },\\n \\\"throttling\\\": {\\n \\\"$ref\\\": \\\"#/$defs/throttlingConfig\\\",\\n \\\"description\\\": \\\"Throttling and backpressure configuration (available for ENTERPRISE/CUSTOM profiles).\\\"\\n },\\n \\\"staticFields\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": true,\\n \\\"description\\\": \\\"Static fields merged into every log event (e.g., version, region).\\\"\\n },\\n \\\"enableCaller\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"default\\\": false,\\n \\\"description\\\": \\\"Include caller information (file and line) in log events.\\\"\\n },\\n \\\"enableStacktrace\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"default\\\": false,\\n \\\"description\\\": \\\"Attach stack traces for ERROR and FATAL log entries.\\\"\\n },\\n \\\"customConfig\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": true,\\n \\\"description\\\": \\\"Custom configuration payload for CUSTOM profiles.\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"service\\\"\\n ],\\n \\\"allOf\\\": [\\n {\\n \\\"if\\\": {\\n \\\"properties\\\": {\\n \\\"profile\\\": {\\n \\\"const\\\": \\\"STRUCTURED\\\"\\n }\\n }\\n },\\n \\\"then\\\": {\\n \\\"required\\\": [\\n \\\"sinks\\\"\\n ]\\n }\\n },\\n {\\n \\\"if\\\": {\\n \\\"properties\\\": {\\n \\\"profile\\\": {\\n \\\"const\\\": \\\"ENTERPRISE\\\"\\n }\\n }\\n },\\n \\\"then\\\": {\\n \\\"required\\\": [\\n \\\"sinks\\\",\\n \\\"middleware\\\"\\n ]\\n }\\n },\\n {\\n \\\"if\\\": {\\n \\\"properties\\\": {\\n \\\"profile\\\": {\\n \\\"const\\\": \\\"CUSTOM\\\"\\n }\\n }\\n },\\n \\\"then\\\": {\\n \\\"required\\\": [\\n \\\"customConfig\\\"\\n ]\\n }\\n }\\n ],\\n \\\"additionalProperties\\\": false,\\n \\\"$defs\\\": {\\n \\\"logLevel\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"TRACE\\\",\\n \\\"DEBUG\\\",\\n \\\"INFO\\\",\\n \\\"WARN\\\",\\n \\\"ERROR\\\",\\n \\\"FATAL\\\",\\n \\\"NONE\\\"\\n ]\\n },\\n \\\"sinkConfig\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"type\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"console\\\",\\n \\\"file\\\",\\n \\\"rolling-file\\\",\\n \\\"external\\\"\\n ],\\n \\\"description\\\": \\\"Sink implementation type.\\\"\\n },\\n \\\"name\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Optional sink identifier.\\\"\\n },\\n \\\"level\\\": {\\n \\\"$ref\\\": \\\"#/$defs/logLevel\\\",\\n \\\"description\\\": \\\"Minimum level for this sink (overrides defaultLevel).\\\"\\n },\\n \\\"format\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"json\\\",\\n \\\"text\\\",\\n \\\"console\\\"\\n ],\\n \\\"default\\\": \\\"json\\\",\\n \\\"description\\\": \\\"Output format (console allows ANSI formatting).\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"type\\\"\\n ],\\n \\\"additionalProperties\\\": false,\\n \\\"allOf\\\": [\\n {\\n \\\"if\\\": {\\n \\\"properties\\\": {\\n \\\"type\\\": {\\n \\\"const\\\": \\\"console\\\"\\n }\\n }\\n },\\n \\\"then\\\": {\\n \\\"properties\\\": {\\n \\\"stream\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"stderr\\\"\\n ],\\n \\\"default\\\": \\\"stderr\\\",\\n \\\"description\\\": \\\"Output stream for console logs (stderr only).\\\"\\n },\\n \\\"colorize\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"default\\\": false,\\n \\\"description\\\": \\\"Enable ANSI color sequences (only when format=console).\\\"\\n }\\n }\\n }\\n },\\n {\\n \\\"if\\\": {\\n \\\"properties\\\": {\\n \\\"type\\\": {\\n \\\"const\\\": \\\"file\\\"\\n }\\n }\\n },\\n \\\"then\\\": {\\n \\\"properties\\\": {\\n \\\"path\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"minLength\\\": 1,\\n \\\"description\\\": \\\"File path for log output.\\\"\\n },\\n \\\"maxSize\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 1,\\n \\\"description\\\": \\\"Maximum file size in megabytes before rotation.\\\"\\n },\\n \\\"maxAge\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 1,\\n \\\"description\\\": \\\"Maximum file age in days before deletion.\\\"\\n },\\n \\\"maxBackups\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"description\\\": \\\"Number of rotated files to retain.\\\"\\n },\\n \\\"compress\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"default\\\": false,\\n \\\"description\\\": \\\"Compress rotated files with gzip.\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"path\\\"\\n ]\\n }\\n },\\n {\\n \\\"if\\\": {\\n \\\"properties\\\": {\\n \\\"type\\\": {\\n \\\"const\\\": \\\"rolling-file\\\"\\n }\\n }\\n },\\n \\\"then\\\": {\\n \\\"properties\\\": {\\n \\\"path\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"minLength\\\": 1,\\n \\\"description\\\": \\\"File path for rolling log output.\\\"\\n },\\n \\\"maxSize\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 1,\\n \\\"description\\\": \\\"Maximum file size in megabytes before rotation.\\\"\\n },\\n \\\"maxAge\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 1,\\n \\\"description\\\": \\\"Maximum file age in days before rotation.\\\"\\n },\\n \\\"maxBackups\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"description\\\": \\\"Number of rotated files to retain.\\\"\\n },\\n \\\"compress\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"default\\\": false,\\n \\\"description\\\": \\\"Compress rotated files with gzip.\\\"\\n },\\n \\\"rotationInterval\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 1,\\n \\\"description\\\": \\\"Optional rotation interval in minutes.\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"path\\\"\\n ]\\n }\\n },\\n {\\n \\\"if\\\": {\\n \\\"properties\\\": {\\n \\\"type\\\": {\\n \\\"const\\\": \\\"external\\\"\\n }\\n }\\n },\\n \\\"then\\\": {\\n \\\"properties\\\": {\\n \\\"endpoint\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"uri\\\",\\n \\\"description\\\": \\\"HTTP(S) endpoint for remote log ingestion.\\\"\\n },\\n \\\"method\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"POST\\\",\\n \\\"PUT\\\",\\n \\\"PATCH\\\"\\n ],\\n \\\"default\\\": \\\"POST\\\",\\n \\\"description\\\": \\\"HTTP method used for log delivery.\\\"\\n },\\n \\\"headers\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": \\\"Additional request headers.\\\"\\n },\\n \\\"batchSize\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 1,\\n \\\"default\\\": 500,\\n \\\"description\\\": \\\"Maximum number of log events per batch.\\\"\\n },\\n \\\"flushInterval\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 1,\\n \\\"default\\\": 60,\\n \\\"description\\\": \\\"Flush interval in seconds.\\\"\\n },\\n \\\"timeout\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 1,\\n \\\"description\\\": \\\"HTTP request timeout in seconds.\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"endpoint\\\"\\n ]\\n }\\n }\\n ]\\n },\\n \\\"throttlingConfig\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"enabled\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"default\\\": false,\\n \\\"description\\\": \\\"Enable throttling to protect downstream sinks.\\\"\\n },\\n \\\"maxRate\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 1,\\n \\\"description\\\": \\\"Maximum log events per second.\\\"\\n },\\n \\\"burstSize\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 1,\\n \\\"description\\\": \\\"Burst capacity for throttling buckets.\\\"\\n },\\n \\\"windowSize\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 1,\\n \\\"description\\\": \\\"Time window in seconds for rate limiting.\\\"\\n },\\n \\\"dropPolicy\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"drop-oldest\\\",\\n \\\"drop-newest\\\",\\n \\\"block\\\"\\n ],\\n \\\"default\\\": \\\"drop-oldest\\\",\\n \\\"description\\\": \\\"Handling strategy when throttling limits are exceeded.\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"enabled\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n }\\n },\\n \\\"examples\\\": [\\n {\\n \\\"profile\\\": \\\"SIMPLE\\\",\\n \\\"service\\\": \\\"mycli\\\",\\n \\\"environment\\\": \\\"development\\\",\\n \\\"defaultLevel\\\": \\\"INFO\\\"\\n },\\n {\\n \\\"profile\\\": \\\"STRUCTURED\\\",\\n \\\"service\\\": \\\"api-gateway\\\",\\n \\\"environment\\\": \\\"staging\\\",\\n \\\"defaultLevel\\\": \\\"INFO\\\",\\n \\\"sinks\\\": [\\n {\\n \\\"type\\\": \\\"console\\\",\\n \\\"format\\\": \\\"json\\\"\\n },\\n {\\n \\\"type\\\": \\\"file\\\",\\n \\\"path\\\": \\\"logs/gateway.log\\\"\\n }\\n ]\\n },\\n {\\n \\\"profile\\\": \\\"ENTERPRISE\\\",\\n \\\"service\\\": \\\"datawhirl\\\",\\n \\\"environment\\\": \\\"production\\\",\\n \\\"policyFile\\\": \\\"/org/logging-policy.yaml\\\",\\n \\\"defaultLevel\\\": \\\"DEBUG\\\",\\n \\\"sinks\\\": [\\n {\\n \\\"type\\\": \\\"console\\\",\\n \\\"level\\\": \\\"INFO\\\",\\n \\\"format\\\": \\\"json\\\"\\n },\\n {\\n \\\"type\\\": \\\"rolling-file\\\",\\n \\\"path\\\": \\\"logs/datawhirl.log\\\",\\n \\\"maxSize\\\": 100,\\n \\\"maxAge\\\": 7,\\n \\\"maxBackups\\\": 5,\\n \\\"compress\\\": true\\n },\\n {\\n \\\"type\\\": \\\"external\\\",\\n \\\"endpoint\\\": \\\"https://logs.company.com/api/v1/logs\\\",\\n \\\"batchSize\\\": 500,\\n \\\"flushInterval\\\": 60\\n }\\n ],\\n \\\"middleware\\\": [\\n {\\n \\\"name\\\": \\\"redact-secrets\\\",\\n \\\"order\\\": 1\\n },\\n {\\n \\\"name\\\": \\\"correlation\\\",\\n \\\"order\\\": 2,\\n \\\"config\\\": {\\n \\\"generator\\\": \\\"uuidv7\\\",\\n \\\"headerName\\\": \\\"X-Correlation-ID\\\"\\n }\\n },\\n {\\n \\\"name\\\": \\\"throttle\\\",\\n \\\"order\\\": 3,\\n \\\"config\\\": {\\n \\\"maxRate\\\": 1000,\\n \\\"burstSize\\\": 100,\\n \\\"dropPolicy\\\": \\\"drop-oldest\\\"\\n }\\n }\\n ],\\n \\\"throttling\\\": {\\n \\\"enabled\\\": true,\\n \\\"maxRate\\\": 1000,\\n \\\"burstSize\\\": 100,\\n \\\"windowSize\\\": 60,\\n \\\"dropPolicy\\\": \\\"drop-oldest\\\"\\n },\\n \\\"staticFields\\\": {\\n \\\"region\\\": \\\"us-east-1\\\",\\n \\\"version\\\": \\\"2025.10.2\\\"\\n }\\n },\\n {\\n \\\"profile\\\": \\\"CUSTOM\\\",\\n \\\"service\\\": \\\"lab-tooling\\\",\\n \\\"customConfig\\\": {\\n \\\"adapter\\\": \\\"experimental\\\",\\n \\\"options\\\": {\\n \\\"buffer\\\": 1024,\\n \\\"fanout\\\": [\\n \\\"console\\\",\\n \\\"in-memory\\\"\\n ]\\n }\\n }\\n }\\n ]\\n}\\n\",\n \"schemas/crucible-ts/observability/logging/v1.0.0/logging-policy.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/observability/logging/v1.0.0/logging-policy.schema.json\\\",\\n \\\"title\\\": \\\"LoggingPolicy\\\",\\n \\\"description\\\": \\\"Organizational logging policy for profile validation and governance\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"version\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Policy version identifier for compatibility tracking.\\\",\\n \\\"default\\\": \\\"1.0.0\\\"\\n },\\n \\\"allowedProfiles\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"SIMPLE\\\",\\n \\\"STRUCTURED\\\",\\n \\\"ENTERPRISE\\\",\\n \\\"CUSTOM\\\"\\n ]\\n },\\n \\\"uniqueItems\\\": true,\\n \\\"description\\\": \\\"Logging profiles permitted within the organization.\\\"\\n },\\n \\\"requiredProfiles\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"patternProperties\\\": {\\n \\\"^[a-zA-Z][a-zA-Z0-9_-]*$\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"SIMPLE\\\",\\n \\\"STRUCTURED\\\",\\n \\\"ENTERPRISE\\\",\\n \\\"CUSTOM\\\"\\n ]\\n },\\n \\\"uniqueItems\\\": true\\n }\\n },\\n \\\"description\\\": \\\"Required profiles by application type (e.g., workhorse, service, cli). Keys follow lower-case kebab or snake case.\\\"\\n },\\n \\\"environmentRules\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"patternProperties\\\": {\\n \\\"^[a-zA-Z][a-zA-Z0-9_-]*$\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"SIMPLE\\\",\\n \\\"STRUCTURED\\\",\\n \\\"ENTERPRISE\\\",\\n \\\"CUSTOM\\\"\\n ]\\n },\\n \\\"uniqueItems\\\": true\\n }\\n },\\n \\\"description\\\": \\\"Allowed profiles by deployment environment.\\\"\\n },\\n \\\"profileRequirements\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"patternProperties\\\": {\\n \\\"^(SIMPLE|STRUCTURED|ENTERPRISE|CUSTOM)$\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"minEnvironment\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"development\\\",\\n \\\"staging\\\",\\n \\\"production\\\"\\n ],\\n \\\"description\\\": \\\"Minimum environment required to enable the profile.\\\"\\n },\\n \\\"maxEnvironment\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"development\\\",\\n \\\"staging\\\",\\n \\\"production\\\"\\n ],\\n \\\"description\\\": \\\"Maximum environment where the profile is allowed.\\\"\\n },\\n \\\"requiredFeatures\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"uniqueItems\\\": true,\\n \\\"description\\\": \\\"Features that MUST be enabled for the profile.\\\"\\n },\\n \\\"forbiddenFeatures\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"uniqueItems\\\": true,\\n \\\"description\\\": \\\"Features that MUST NOT be enabled for the profile.\\\"\\n }\\n },\\n \\\"additionalProperties\\\": false\\n }\\n },\\n \\\"description\\\": \\\"Additional per-profile requirements and restrictions.\\\"\\n },\\n \\\"customRequirements\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": true,\\n \\\"description\\\": \\\"Organization-specific requirements to apply when profile=CUSTOM.\\\"\\n },\\n \\\"auditSettings\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"logPolicyViolations\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"default\\\": true,\\n \\\"description\\\": \\\"Emit log entries when configurations violate policy.\\\"\\n },\\n \\\"enforceStrictMode\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"default\\\": false,\\n \\\"description\\\": \\\"If true, applications MUST fail fast when policy violations occur.\\\"\\n },\\n \\\"requirePolicyFile\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"default\\\": false,\\n \\\"description\\\": \\\"If true, all applications MUST provide a policy file.\\\"\\n }\\n },\\n \\\"additionalProperties\\\": false\\n }\\n },\\n \\\"required\\\": [\\n \\\"allowedProfiles\\\"\\n ],\\n \\\"additionalProperties\\\": false,\\n \\\"examples\\\": [\\n {\\n \\\"version\\\": \\\"1.0.0\\\",\\n \\\"allowedProfiles\\\": [\\n \\\"SIMPLE\\\",\\n \\\"STRUCTURED\\\",\\n \\\"ENTERPRISE\\\"\\n ],\\n \\\"requiredProfiles\\\": {\\n \\\"workhorse\\\": [\\n \\\"ENTERPRISE\\\"\\n ],\\n \\\"service\\\": [\\n \\\"STRUCTURED\\\",\\n \\\"ENTERPRISE\\\"\\n ],\\n \\\"cli\\\": [\\n \\\"SIMPLE\\\",\\n \\\"STRUCTURED\\\"\\n ]\\n },\\n \\\"environmentRules\\\": {\\n \\\"production\\\": [\\n \\\"STRUCTURED\\\",\\n \\\"ENTERPRISE\\\"\\n ],\\n \\\"staging\\\": [\\n \\\"SIMPLE\\\",\\n \\\"STRUCTURED\\\",\\n \\\"ENTERPRISE\\\"\\n ],\\n \\\"development\\\": [\\n \\\"SIMPLE\\\",\\n \\\"STRUCTURED\\\",\\n \\\"ENTERPRISE\\\"\\n ]\\n },\\n \\\"profileRequirements\\\": {\\n \\\"ENTERPRISE\\\": {\\n \\\"requiredFeatures\\\": [\\n \\\"correlation\\\",\\n \\\"middleware\\\",\\n \\\"throttling\\\"\\n ],\\n \\\"minEnvironment\\\": \\\"staging\\\"\\n },\\n \\\"SIMPLE\\\": {\\n \\\"forbiddenFeatures\\\": [\\n \\\"correlation\\\",\\n \\\"middleware\\\",\\n \\\"throttling\\\"\\n ],\\n \\\"maxEnvironment\\\": \\\"development\\\"\\n }\\n },\\n \\\"auditSettings\\\": {\\n \\\"logPolicyViolations\\\": true,\\n \\\"enforceStrictMode\\\": false,\\n \\\"requirePolicyFile\\\": false\\n }\\n },\\n {\\n \\\"version\\\": \\\"1.0.0\\\",\\n \\\"allowedProfiles\\\": [\\n \\\"ENTERPRISE\\\"\\n ],\\n \\\"requiredProfiles\\\": {\\n \\\"*\\\": [\\n \\\"ENTERPRISE\\\"\\n ]\\n },\\n \\\"environmentRules\\\": {\\n \\\"*\\\": [\\n \\\"ENTERPRISE\\\"\\n ]\\n },\\n \\\"auditSettings\\\": {\\n \\\"logPolicyViolations\\\": true,\\n \\\"enforceStrictMode\\\": true,\\n \\\"requirePolicyFile\\\": true\\n }\\n }\\n ]\\n}\\n\",\n \"schemas/crucible-ts/observability/logging/v1.0.0/middleware-config.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/observability/logging/v1.0.0/middleware-config.schema.json\\\",\\n \\\"title\\\": \\\"MiddlewareConfig\\\",\\n \\\"description\\\": \\\"Configuration for log event middleware (redaction, filtering, augmentation)\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"type\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"redaction\\\",\\n \\\"filter\\\",\\n \\\"augmentation\\\",\\n \\\"sampling\\\",\\n \\\"custom\\\"\\n ],\\n \\\"description\\\": \\\"Middleware type\\\"\\n },\\n \\\"enabled\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"default\\\": true,\\n \\\"description\\\": \\\"Whether this middleware is active\\\"\\n },\\n \\\"priority\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"description\\\": \\\"Execution priority (lower runs first)\\\"\\n },\\n \\\"redaction\\\": {\\n \\\"$ref\\\": \\\"#/$defs/redactionConfig\\\"\\n },\\n \\\"filter\\\": {\\n \\\"$ref\\\": \\\"#/$defs/filterConfig\\\"\\n },\\n \\\"augmentation\\\": {\\n \\\"$ref\\\": \\\"#/$defs/augmentationConfig\\\"\\n },\\n \\\"sampling\\\": {\\n \\\"$ref\\\": \\\"#/$defs/samplingConfig\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"type\\\"\\n ],\\n \\\"$defs\\\": {\\n \\\"redactionConfig\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"patterns\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": \\\"Regex patterns to redact (e.g., credit cards, emails)\\\"\\n },\\n \\\"fields\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": \\\"Field names to redact completely\\\"\\n },\\n \\\"replacement\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"default\\\": \\\"[REDACTED]\\\",\\n \\\"description\\\": \\\"Replacement text for redacted content\\\"\\n }\\n }\\n },\\n \\\"filterConfig\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"minLevel\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"TRACE\\\",\\n \\\"DEBUG\\\",\\n \\\"INFO\\\",\\n \\\"WARN\\\",\\n \\\"ERROR\\\",\\n \\\"FATAL\\\"\\n ],\\n \\\"description\\\": \\\"Filter out events below this level (deprecated: use severityFilter for operator-based filtering)\\\"\\n },\\n \\\"severityFilter\\\": {\\n \\\"$ref\\\": \\\"https://schemas.fulmenhq.dev/crucible/observability/logging/v1.0.0/severity-filter.schema.json\\\",\\n \\\"description\\\": \\\"Advanced severity filtering with comparison operators\\\"\\n },\\n \\\"exclude\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"loggers\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": \\\"Logger names to exclude\\\"\\n },\\n \\\"components\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": \\\"Components to exclude\\\"\\n }\\n },\\n \\\"description\\\": \\\"Exclusion rules\\\"\\n }\\n }\\n },\\n \\\"augmentationConfig\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"fields\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": true,\\n \\\"description\\\": \\\"Fields to add to all events\\\"\\n },\\n \\\"dynamic\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": \\\"Names of dynamic field providers (implementation-specific)\\\"\\n }\\n }\\n },\\n \\\"samplingConfig\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"rate\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 1,\\n \\\"description\\\": \\\"Sampling rate (0.0 to 1.0)\\\"\\n },\\n \\\"byLevel\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 1\\n },\\n \\\"description\\\": \\\"Per-level sampling rates\\\"\\n }\\n }\\n }\\n },\\n \\\"examples\\\": [\\n {\\n \\\"type\\\": \\\"redaction\\\",\\n \\\"enabled\\\": true,\\n \\\"priority\\\": 10,\\n \\\"redaction\\\": {\\n \\\"patterns\\\": [\\n \\\"\\\\\\\\d{16}\\\",\\n \\\"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\\\\\\\.[a-zA-Z]{2,}\\\"\\n ],\\n \\\"fields\\\": [\\n \\\"password\\\",\\n \\\"token\\\",\\n \\\"apiKey\\\"\\n ],\\n \\\"replacement\\\": \\\"[REDACTED]\\\"\\n }\\n },\\n {\\n \\\"type\\\": \\\"sampling\\\",\\n \\\"enabled\\\": true,\\n \\\"priority\\\": 5,\\n \\\"sampling\\\": {\\n \\\"rate\\\": 0.1,\\n \\\"byLevel\\\": {\\n \\\"ERROR\\\": 1.0,\\n \\\"FATAL\\\": 1.0,\\n \\\"DEBUG\\\": 0.01\\n }\\n }\\n }\\n ]\\n}\\n\",\n \"schemas/crucible-ts/observability/logging/v1.0.0/severity-filter.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/observability/logging/v1.0.0/severity-filter.schema.json\\\",\\n \\\"title\\\": \\\"SeverityFilter\\\",\\n \\\"description\\\": \\\"Severity-based filtering with comparison operators for log event processing\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"operator\\\": {\\n \\\"$ref\\\": \\\"https://schemas.fulmenhq.dev/crucible/observability/logging/v1.0.0/definitions.schema.json#/$defs/comparisonOperator\\\"\\n },\\n \\\"level\\\": {\\n \\\"$ref\\\": \\\"https://schemas.fulmenhq.dev/crucible/observability/logging/v1.0.0/definitions.schema.json#/$defs/severityName\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"operator\\\",\\n \\\"level\\\"\\n ],\\n \\\"examples\\\": [\\n {\\n \\\"operator\\\": \\\"GE\\\",\\n \\\"level\\\": \\\"WARN\\\",\\n \\\"description\\\": \\\"Filter events with severity >= WARN (includes WARN, ERROR, FATAL)\\\"\\n },\\n {\\n \\\"operator\\\": \\\"LT\\\",\\n \\\"level\\\": \\\"ERROR\\\",\\n \\\"description\\\": \\\"Filter events with severity < ERROR (includes TRACE, DEBUG, INFO, WARN)\\\"\\n },\\n {\\n \\\"operator\\\": \\\"EQ\\\",\\n \\\"level\\\": \\\"ERROR\\\",\\n \\\"description\\\": \\\"Filter only ERROR events\\\"\\n }\\n ],\\n \\\"additionalProperties\\\": false,\\n \\\"$comment\\\": \\\"Implementation MUST convert severityName to severityLevel for numeric comparison. See definitions.schema.json#/$defs/severityMapping for canonical name→level mapping.\\\"\\n}\\n\",\n \"schemas/crucible-ts/observability/metrics/v1.0.0/metrics-event.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/observability/metrics/v1.0.0/metrics-event.schema.json\\\",\\n \\\"title\\\": \\\"Fulmen Metrics Event\\\",\\n \\\"description\\\": \\\"Schema for basic telemetry export (counter/gauge/histogram) emitted by Fulmen helper libraries.\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"timestamp\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"date-time\\\",\\n \\\"description\\\": \\\"RFC3339 timestamp of metric emission.\\\"\\n },\\n \\\"name\\\": {\\n \\\"$ref\\\": \\\"../../../../config/taxonomy/metrics.yaml#/$defs/metricName\\\",\\n \\\"description\\\": \\\"Metric identifier drawn from the metrics taxonomy.\\\"\\n },\\n \\\"value\\\": {\\n \\\"description\\\": \\\"Measurement payload (scalar counter/gauge or histogram summary).\\\",\\n \\\"oneOf\\\": [\\n {\\n \\\"type\\\": \\\"number\\\",\\n \\\"description\\\": \\\"Scalar measurement (e.g., counter increment, instantaneous gauge).\\\"\\n },\\n {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Histogram summary payload.\\\",\\n \\\"properties\\\": {\\n \\\"count\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0\\n },\\n \\\"sum\\\": {\\n \\\"type\\\": \\\"number\\\"\\n },\\n \\\"buckets\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"le\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"description\\\": \\\"Upper bound (less-than-or-equal) for the bucket.\\\"\\n },\\n \\\"count\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"description\\\": \\\"Cumulative count up to and including this bucket.\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"le\\\",\\n \\\"count\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n },\\n \\\"description\\\": \\\"Ordered buckets with cumulative counts (OTLP-compatible).\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"count\\\",\\n \\\"sum\\\",\\n \\\"buckets\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n }\\n ]\\n },\\n \\\"tags\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Key/value dimensions applied to the metric event.\\\",\\n \\\"additionalProperties\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n },\\n \\\"unit\\\": {\\n \\\"$ref\\\": \\\"../../../../config/taxonomy/metrics.yaml#/$defs/metricUnit\\\",\\n \\\"description\\\": \\\"Metric unit (defaults to taxonomy default when omitted).\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"timestamp\\\",\\n \\\"name\\\",\\n \\\"value\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n}\\n\",\n \"schemas/crucible-ts/pathfinder/v1.0.0/error-response.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/pathfinder/error-response-v1.0.0.json\\\",\\n \\\"title\\\": \\\"ErrorResponse\\\",\\n \\\"description\\\": \\\"Standardized error response structure for pathfinder operations\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"code\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Error code identifier\\\"\\n },\\n \\\"message\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Human-readable error message\\\"\\n },\\n \\\"details\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": true,\\n \\\"description\\\": \\\"Additional error details\\\"\\n },\\n \\\"path\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Path that caused the error (if applicable)\\\"\\n },\\n \\\"timestamp\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"date-time\\\",\\n \\\"description\\\": \\\"When the error occurred\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"code\\\",\\n \\\"message\\\"\\n ]\\n}\\n\",\n \"schemas/crucible-ts/pathfinder/v1.0.0/find-query.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/pathfinder/find-query-v1.0.0.json\\\",\\n \\\"title\\\": \\\"FindQuery\\\",\\n \\\"description\\\": \\\"Parameters for file discovery operations in pathfinder\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"root\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Root directory to search from\\\",\\n \\\"minLength\\\": 1\\n },\\n \\\"include\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Glob patterns to include\\\"\\n },\\n \\\"description\\\": \\\"Patterns to include in search\\\"\\n },\\n \\\"exclude\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Glob patterns to exclude\\\"\\n },\\n \\\"description\\\": \\\"Patterns to exclude from search\\\"\\n },\\n \\\"maxDepth\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"description\\\": \\\"Maximum directory depth (0 = unlimited)\\\",\\n \\\"minimum\\\": 0,\\n \\\"default\\\": 0\\n },\\n \\\"followSymlinks\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Whether to follow symbolic links\\\",\\n \\\"default\\\": false\\n },\\n \\\"includeHidden\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Whether to include hidden files/directories\\\",\\n \\\"default\\\": false\\n }\\n },\\n \\\"required\\\": [\\n \\\"root\\\"\\n ]\\n}\\n\",\n \"schemas/crucible-ts/pathfinder/v1.0.0/finder-config.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/pathfinder/finder-config-v1.0.0.json\\\",\\n \\\"title\\\": \\\"FinderConfig\\\",\\n \\\"description\\\": \\\"Configuration for pathfinder Finder instances\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"maxWorkers\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"description\\\": \\\"Maximum number of worker goroutines\\\",\\n \\\"minimum\\\": 1,\\n \\\"default\\\": 4\\n },\\n \\\"cacheEnabled\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Whether caching is enabled\\\",\\n \\\"default\\\": false\\n },\\n \\\"cacheTTL\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"description\\\": \\\"Cache TTL in seconds\\\",\\n \\\"minimum\\\": 0,\\n \\\"default\\\": 300\\n },\\n \\\"constraint\\\": {\\n \\\"$ref\\\": \\\"#/$defs/pathConstraint\\\",\\n \\\"description\\\": \\\"Path constraint configuration\\\"\\n },\\n \\\"loaderType\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Default loader type\\\",\\n \\\"enum\\\": [\\n \\\"local\\\",\\n \\\"remote\\\",\\n \\\"cloud\\\"\\n ],\\n \\\"default\\\": \\\"local\\\"\\n },\\n \\\"calculateChecksums\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Enable checksum calculation for discovered files using FulHash\\\",\\n \\\"default\\\": false\\n },\\n \\\"checksumAlgorithm\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Hash algorithm to use when calculateChecksums is enabled\\\",\\n \\\"enum\\\": [\\n \\\"xxh3-128\\\",\\n \\\"sha256\\\"\\n ],\\n \\\"default\\\": \\\"xxh3-128\\\"\\n },\\n \\\"checksumEncoding\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Encoding format for checksum output\\\",\\n \\\"enum\\\": [\\n \\\"hex\\\"\\n ],\\n \\\"default\\\": \\\"hex\\\"\\n }\\n },\\n \\\"$defs\\\": {\\n \\\"pathConstraint\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"type\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"repository\\\",\\n \\\"workspace\\\",\\n \\\"cloud\\\"\\n ],\\n \\\"description\\\": \\\"Type of path constraint\\\"\\n },\\n \\\"enforcementLevel\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"strict\\\",\\n \\\"warn\\\",\\n \\\"permissive\\\"\\n ],\\n \\\"description\\\": \\\"How strictly constraints are enforced\\\"\\n },\\n \\\"root\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Root path for constraint\\\"\\n }\\n }\\n }\\n }\\n}\\n\",\n \"schemas/crucible-ts/pathfinder/v1.0.0/metadata.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/pathfinder/metadata-v1.0.0.json\\\",\\n \\\"title\\\": \\\"Metadata\\\",\\n \\\"description\\\": \\\"Flexible metadata structure for path results\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"size\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"description\\\": \\\"File size in bytes\\\"\\n },\\n \\\"modified\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"date-time\\\",\\n \\\"description\\\": \\\"Last modification timestamp\\\"\\n },\\n \\\"permissions\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"File permissions (octal or symbolic)\\\"\\n },\\n \\\"mimeType\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"MIME type of the file\\\"\\n },\\n \\\"encoding\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Character encoding if applicable\\\"\\n },\\n \\\"checksum\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"File checksum in format 'algorithm:hex' (e.g., 'xxh3-128:abc123...'). Generated using FulHash when calculateChecksums enabled.\\\",\\n \\\"pattern\\\": \\\"^(xxh3-128|sha256):[a-f0-9]+$\\\"\\n },\\n \\\"checksumAlgorithm\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Algorithm used for checksum calculation\\\",\\n \\\"enum\\\": [\\n \\\"xxh3-128\\\",\\n \\\"sha256\\\"\\n ]\\n },\\n \\\"checksumError\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Error message if checksum calculation failed (e.g., permission denied)\\\"\\n },\\n \\\"tags\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": \\\"User-defined tags\\\"\\n },\\n \\\"custom\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": true,\\n \\\"description\\\": \\\"Custom metadata fields\\\"\\n }\\n },\\n \\\"additionalProperties\\\": true\\n}\\n\",\n \"schemas/crucible-ts/pathfinder/v1.0.0/path-constraint.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/pathfinder/path-constraint-v1.0.0.json\\\",\\n \\\"title\\\": \\\"PathConstraint\\\",\\n \\\"description\\\": \\\"Path constraint configuration for safety boundaries\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"root\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Root path for the constraint boundary\\\"\\n },\\n \\\"type\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"repository\\\",\\n \\\"workspace\\\",\\n \\\"cloud\\\"\\n ],\\n \\\"description\\\": \\\"Type of constraint defining the boundary scope\\\"\\n },\\n \\\"enforcementLevel\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"strict\\\",\\n \\\"warn\\\",\\n \\\"permissive\\\"\\n ],\\n \\\"description\\\": \\\"How strictly the constraint is enforced\\\"\\n },\\n \\\"allowedPatterns\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": \\\"Additional allowed path patterns\\\"\\n },\\n \\\"blockedPatterns\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": \\\"Blocked path patterns\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"root\\\",\\n \\\"type\\\",\\n \\\"enforcementLevel\\\"\\n ]\\n}\\n\",\n \"schemas/crucible-ts/pathfinder/v1.0.0/path-result.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/pathfinder/path-result-v1.0.0.json\\\",\\n \\\"title\\\": \\\"PathResult\\\",\\n \\\"description\\\": \\\"Result of a file discovery operation in pathfinder\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"relativePath\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Path relative to search root\\\"\\n },\\n \\\"sourcePath\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Absolute path to the file\\\"\\n },\\n \\\"logicalPath\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Logical path for consumer (defaults to relativePath)\\\"\\n },\\n \\\"loaderType\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Type of loader used\\\",\\n \\\"enum\\\": [\\n \\\"local\\\",\\n \\\"remote\\\",\\n \\\"cloud\\\"\\n ]\\n },\\n \\\"metadata\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Additional provider-specific information\\\",\\n \\\"additionalProperties\\\": true\\n }\\n },\\n \\\"required\\\": [\\n \\\"relativePath\\\",\\n \\\"sourcePath\\\",\\n \\\"loaderType\\\"\\n ]\\n}\\n\",\n \"schemas/crucible-ts/protocol/http/v1.0.0/error-response.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/protocol/http/v1.0.0/error-response.schema.json\\\",\\n \\\"title\\\": \\\"HttpErrorResponse\\\",\\n \\\"description\\\": \\\"Standard error envelope for Fulmen HTTP APIs\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"success\\\": {\\n \\\"const\\\": false\\n },\\n \\\"error\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"code\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"minLength\\\": 1,\\n \\\"description\\\": \\\"Machine-readable error code\\\"\\n },\\n \\\"message\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"minLength\\\": 1,\\n \\\"description\\\": \\\"Human-readable error message\\\"\\n },\\n \\\"details\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Optional structured details for diagnostics\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"code\\\",\\n \\\"message\\\"\\n ],\\n \\\"additionalProperties\\\": true\\n },\\n \\\"requestId\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Request identifier echoed back\\\"\\n },\\n \\\"correlationId\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Correlation identifier for cross-service tracing\\\"\\n },\\n \\\"timestamp\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"date-time\\\",\\n \\\"description\\\": \\\"UTC timestamp when the error was generated\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"success\\\",\\n \\\"error\\\"\\n ],\\n \\\"additionalProperties\\\": true\\n}\\n\",\n \"schemas/crucible-ts/protocol/http/v1.0.0/health-response.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/protocol/http/v1.0.0/health-response.schema.json\\\",\\n \\\"title\\\": \\\"HealthResponse\\\",\\n \\\"description\\\": \\\"Response envelope for health endpoints (/health/live, /health/ready, /health/startup)\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"service\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Service identifier\\\"\\n },\\n \\\"status\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"pass\\\",\\n \\\"warn\\\",\\n \\\"fail\\\"\\n ],\\n \\\"description\\\": \\\"Overall health status\\\"\\n },\\n \\\"timestamp\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"date-time\\\",\\n \\\"description\\\": \\\"UTC timestamp when health status was evaluated\\\"\\n },\\n \\\"uptimeSeconds\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"minimum\\\": 0,\\n \\\"description\\\": \\\"Service uptime in seconds\\\"\\n },\\n \\\"checks\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Component-level health checks\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"name\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"minLength\\\": 1\\n },\\n \\\"status\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"pass\\\",\\n \\\"warn\\\",\\n \\\"fail\\\"\\n ]\\n },\\n \\\"observedAt\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"date-time\\\"\\n },\\n \\\"details\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Optional structured details\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"name\\\",\\n \\\"status\\\"\\n ],\\n \\\"additionalProperties\\\": true\\n }\\n }\\n },\\n \\\"required\\\": [\\n \\\"status\\\"\\n ],\\n \\\"additionalProperties\\\": true\\n}\\n\",\n \"schemas/crucible-ts/protocol/http/v1.0.0/success-response.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/protocol/http/v1.0.0/success-response.schema.json\\\",\\n \\\"title\\\": \\\"HttpSuccessResponse\\\",\\n \\\"description\\\": \\\"Standard success envelope for Fulmen HTTP APIs\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"success\\\": {\\n \\\"const\\\": true\\n },\\n \\\"message\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Human-readable status text\\\"\\n },\\n \\\"data\\\": {\\n \\\"description\\\": \\\"Optional data payload\\\",\\n \\\"oneOf\\\": [\\n {\\n \\\"type\\\": \\\"object\\\"\\n },\\n {\\n \\\"type\\\": \\\"array\\\"\\n },\\n {\\n \\\"type\\\": \\\"string\\\"\\n },\\n {\\n \\\"type\\\": \\\"number\\\"\\n },\\n {\\n \\\"type\\\": \\\"boolean\\\"\\n },\\n {\\n \\\"type\\\": \\\"null\\\"\\n }\\n ]\\n },\\n \\\"requestId\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Request identifier echoed back\\\"\\n },\\n \\\"correlationId\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Correlation identifier for cross-service tracing\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"success\\\"\\n ],\\n \\\"additionalProperties\\\": true\\n}\\n\",\n \"schemas/crucible-ts/protocol/http/v1.0.0/version-response.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/protocol/http/v1.0.0/version-response.schema.json\\\",\\n \\\"title\\\": \\\"VersionResponse\\\",\\n \\\"description\\\": \\\"Response payload for service version endpoints\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"success\\\": {\\n \\\"const\\\": true\\n },\\n \\\"data\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"version\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"minLength\\\": 1,\\n \\\"description\\\": \\\"Service semantic or calendar version\\\"\\n },\\n \\\"commit\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"minLength\\\": 1,\\n \\\"description\\\": \\\"Commit SHA or VCS identifier\\\"\\n },\\n \\\"buildDate\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"date-time\\\",\\n \\\"description\\\": \\\"Build timestamp in UTC\\\"\\n },\\n \\\"buildHost\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Hostname or runner building the artifact\\\"\\n },\\n \\\"language\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Implementation language identifier\\\"\\n },\\n \\\"metadata\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Optional additional fields (git tag, go version, etc.)\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"version\\\",\\n \\\"commit\\\",\\n \\\"buildDate\\\"\\n ],\\n \\\"additionalProperties\\\": true\\n },\\n \\\"requestId\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"correlationId\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"success\\\",\\n \\\"data\\\"\\n ],\\n \\\"additionalProperties\\\": true\\n}\\n\",\n \"schemas/crucible-ts/schema-validation/v1.0.0/schema-registry.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/schema-validation/schema-registry-v1.0.0.json\\\",\\n \\\"title\\\": \\\"SchemaRegistry\\\",\\n \\\"description\\\": \\\"Configuration for schema registry management in Fulmen libraries\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"baseDir\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Base directory for schema storage\\\"\\n },\\n \\\"cache\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": \\\"Cached schema content (schema name/version -> content)\\\"\\n },\\n \\\"defaultRegistry\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Whether this is the default registry\\\"\\n },\\n \\\"autoReload\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Whether to automatically reload changed schemas\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"baseDir\\\"\\n ]\\n}\\n\",\n \"schemas/crucible-ts/schema-validation/v1.0.0/validator-config.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/schema-validation/validator-config-v1.0.0.json\\\",\\n \\\"title\\\": \\\"ValidatorConfig\\\",\\n \\\"description\\\": \\\"Configuration for JSON Schema validation across Fulmen libraries\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"schema\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Schema content as JSON string\\\"\\n },\\n \\\"schemaFile\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Path to schema file\\\"\\n },\\n \\\"baseURI\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"uri\\\",\\n \\\"description\\\": \\\"Base URI for schema resolution\\\"\\n },\\n \\\"formatValidators\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": \\\"Custom format validators\\\"\\n },\\n \\\"metaSchemas\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": \\\"Additional meta-schemas to load\\\"\\n }\\n }\\n}\\n\",\n \"schemas/crucible-ts/server/management/v1.0.0/server-management.schema.json\": \"{\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/server/management/v1.0.0/server-management.schema.json\\\",\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"title\\\": \\\"Fulmen Server Management Configuration\\\",\\n \\\"description\\\": \\\"Configuration schema for orchestrating local development, testing, and preview servers with predictable ports, health checks, and cleanup routines\\\",\\n \\\"properties\\\": {\\n \\\"envPrefix\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[A-Z][A-Z0-9_]*$\\\",\\n \\\"description\\\": \\\"Environment variable prefix derived from application identity (e.g., 'FULMEN_PULSAR'). Used to construct env var names like ${envPrefix}_DEV_PORT\\\",\\n \\\"default\\\": \\\"FULMEN_APP\\\"\\n },\\n \\\"configurations\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Named server configuration classes\\\",\\n \\\"properties\\\": {\\n \\\"dev\\\": {\\n \\\"$ref\\\": \\\"#/$defs/serverConfiguration\\\",\\n \\\"description\\\": \\\"Local development server configuration\\\"\\n },\\n \\\"test\\\": {\\n \\\"$ref\\\": \\\"#/$defs/serverConfiguration\\\",\\n \\\"description\\\": \\\"Test/CI server configuration\\\"\\n },\\n \\\"a11y\\\": {\\n \\\"$ref\\\": \\\"#/$defs/serverConfiguration\\\",\\n \\\"description\\\": \\\"Accessibility testing server configuration\\\"\\n },\\n \\\"preview\\\": {\\n \\\"$ref\\\": \\\"#/$defs/serverConfiguration\\\",\\n \\\"description\\\": \\\"Preview/staging server configuration\\\"\\n },\\n \\\"prod_like\\\": {\\n \\\"$ref\\\": \\\"#/$defs/serverConfiguration\\\",\\n \\\"description\\\": \\\"Production-like server configuration for final verification\\\"\\n }\\n },\\n \\\"additionalProperties\\\": false\\n },\\n \\\"additionalConfigurations\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"User-defined server configurations (keys must start with 'x-')\\\",\\n \\\"patternProperties\\\": {\\n \\\"^x-[a-z0-9][a-z0-9_-]*$\\\": {\\n \\\"$ref\\\": \\\"#/$defs/serverConfiguration\\\"\\n }\\n },\\n \\\"additionalProperties\\\": false\\n }\\n },\\n \\\"required\\\": [\\n \\\"configurations\\\"\\n ],\\n \\\"additionalProperties\\\": false,\\n \\\"$defs\\\": {\\n \\\"serverConfiguration\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Configuration for a single server class\\\",\\n \\\"properties\\\": {\\n \\\"preferredPort\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 1024,\\n \\\"maximum\\\": 65535,\\n \\\"description\\\": \\\"Preferred port number (must be within range)\\\"\\n },\\n \\\"range\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Allowed port range for this configuration\\\",\\n \\\"properties\\\": {\\n \\\"min\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 1024,\\n \\\"maximum\\\": 65535,\\n \\\"description\\\": \\\"Minimum port in range (inclusive)\\\"\\n },\\n \\\"max\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 1024,\\n \\\"maximum\\\": 65535,\\n \\\"description\\\": \\\"Maximum port in range (inclusive)\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"min\\\",\\n \\\"max\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n },\\n \\\"healthCheck\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Health check configuration for server readiness\\\",\\n \\\"properties\\\": {\\n \\\"method\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"GET\\\",\\n \\\"HEAD\\\",\\n \\\"POST\\\"\\n ],\\n \\\"default\\\": \\\"GET\\\",\\n \\\"description\\\": \\\"HTTP method for health check\\\"\\n },\\n \\\"path\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^/\\\",\\n \\\"description\\\": \\\"Health check endpoint path (must start with /)\\\"\\n },\\n \\\"timeout\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 100,\\n \\\"maximum\\\": 30000,\\n \\\"default\\\": 5000,\\n \\\"description\\\": \\\"Health check timeout in milliseconds\\\"\\n },\\n \\\"retries\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 10,\\n \\\"default\\\": 3,\\n \\\"description\\\": \\\"Number of retry attempts before declaring unhealthy\\\"\\n },\\n \\\"interval\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 100,\\n \\\"maximum\\\": 10000,\\n \\\"default\\\": 1000,\\n \\\"description\\\": \\\"Interval between retries in milliseconds\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"path\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n },\\n \\\"exitBehavior\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Exit code mappings for common server failure scenarios\\\",\\n \\\"properties\\\": {\\n \\\"portInUse\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 255,\\n \\\"description\\\": \\\"Exit code when port is already in use (maps to EXIT_PORT_IN_USE)\\\",\\n \\\"default\\\": 11\\n },\\n \\\"healthCheckFailed\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 255,\\n \\\"description\\\": \\\"Exit code when health check fails (maps to EXIT_HEALTH_CHECK_FAILED)\\\",\\n \\\"default\\\": 50\\n },\\n \\\"startupTimeout\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 255,\\n \\\"description\\\": \\\"Exit code when server startup times out (maps to EXIT_TIMEOUT)\\\",\\n \\\"default\\\": 52\\n }\\n },\\n \\\"additionalProperties\\\": false\\n },\\n \\\"envOverrides\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Environment variables that can override configuration settings\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[A-Z][A-Z0-9_]*$\\\",\\n \\\"description\\\": \\\"Environment variable name (uppercase with underscores)\\\"\\n },\\n \\\"uniqueItems\\\": true,\\n \\\"examples\\\": [\\n [\\n \\\"FULMEN_PULSAR_DEV_PORT\\\",\\n \\\"FULMEN_PULSAR_DEV_RANGE_MIN\\\",\\n \\\"FULMEN_PULSAR_DEV_RANGE_MAX\\\"\\n ]\\n ]\\n },\\n \\\"pidFile\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Path to PID file for process tracking (relative to project root)\\\",\\n \\\"pattern\\\": \\\"^[^/].*\\\\\\\\.pid$\\\"\\n },\\n \\\"logFile\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Path to log file for server output (relative to project root)\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"preferredPort\\\",\\n \\\"range\\\",\\n \\\"healthCheck\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n }\\n }\\n}\\n\",\n \"schemas/crucible-ts/standards/publishing/v1.0.0/spec-catalog.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/standards/publishing/v1.0.0/spec-catalog.schema.json\\\",\\n \\\"title\\\": \\\"Spec Catalog\\\",\\n \\\"description\\\": \\\"Machine-readable catalog of published specification artifacts for spec-host repositories\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"schema_version\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"const\\\": \\\"1.0.0\\\",\\n \\\"description\\\": \\\"Schema version for this catalog format\\\"\\n },\\n \\\"generated_at\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"date-time\\\",\\n \\\"description\\\": \\\"ISO 8601 timestamp when this catalog was generated\\\"\\n },\\n \\\"host_domain\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"hostname\\\",\\n \\\"description\\\": \\\"The HTTPS host domain under which canonical IDs resolve\\\",\\n \\\"examples\\\": [\\n \\\"schemas.fulmenhq.dev\\\",\\n \\\"specs.enact.fulmenhq.dev\\\"\\n ]\\n },\\n \\\"source\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Provenance information about the source repository\\\",\\n \\\"properties\\\": {\\n \\\"repository\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Source repository URL or identifier\\\",\\n \\\"examples\\\": [\\n \\\"github.com/fulmenhq/crucible\\\"\\n ]\\n },\\n \\\"commit\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[a-f0-9]{40}$\\\",\\n \\\"description\\\": \\\"Git commit SHA from which this catalog was generated\\\"\\n },\\n \\\"tag\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Git tag or version from which this catalog was generated\\\",\\n \\\"examples\\\": [\\n \\\"v0.2.26\\\",\\n \\\"v1.0.0\\\"\\n ]\\n }\\n },\\n \\\"additionalProperties\\\": false\\n },\\n \\\"assets\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"List of published specification assets\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"#/$defs/asset\\\"\\n }\\n }\\n },\\n \\\"required\\\": [\\n \\\"schema_version\\\",\\n \\\"generated_at\\\",\\n \\\"host_domain\\\",\\n \\\"assets\\\"\\n ],\\n \\\"additionalProperties\\\": false,\\n \\\"$defs\\\": {\\n \\\"asset\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"A single published specification asset\\\",\\n \\\"properties\\\": {\\n \\\"canonical_url\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"uri\\\",\\n \\\"description\\\": \\\"The canonical URL of this asset (must be HTTPS)\\\",\\n \\\"pattern\\\": \\\"^https://\\\"\\n },\\n \\\"spec_type\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"jsonschema\\\",\\n \\\"openapi\\\",\\n \\\"asyncapi\\\",\\n \\\"other\\\"\\n ],\\n \\\"description\\\": \\\"The type of specification\\\"\\n },\\n \\\"title\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Human-readable title extracted from the spec\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Description extracted from the spec\\\"\\n },\\n \\\"media_type\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"MIME type of the asset\\\",\\n \\\"examples\\\": [\\n \\\"application/schema+json\\\",\\n \\\"application/json\\\",\\n \\\"application/vnd.oai.openapi+json\\\"\\n ]\\n },\\n \\\"sha256\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[a-f0-9]{64}$\\\",\\n \\\"description\\\": \\\"SHA-256 digest of the published file bytes\\\"\\n },\\n \\\"size_bytes\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"description\\\": \\\"Size of the asset in bytes\\\"\\n },\\n \\\"version\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Version extracted from the canonical URL path\\\",\\n \\\"examples\\\": [\\n \\\"v1.0.0\\\",\\n \\\"v2025.12.0\\\"\\n ]\\n }\\n },\\n \\\"required\\\": [\\n \\\"canonical_url\\\",\\n \\\"spec_type\\\",\\n \\\"sha256\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n }\\n }\\n}\\n\",\n \"schemas/crucible-ts/taxonomy/devsecops/auth-methods/v1.0.0/auth-methods-key.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/taxonomy/devsecops/auth-methods/v1.0.0/auth-methods-key.schema.json\\\",\\n \\\"title\\\": \\\"Fulmen Auth Methods Key\\\",\\n \\\"description\\\": \\\"Enum of canonical authentication/MFA method identifiers for DevSecOps schemas\\\",\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"totp\\\",\\n \\\"webauthn\\\",\\n \\\"yubikey\\\",\\n \\\"sms\\\"\\n ],\\n \\\"examples\\\": [\\n \\\"totp\\\"\\n ]\\n}\\n\",\n \"schemas/crucible-ts/taxonomy/devsecops/auth-methods/v1.0.0/auth-methods-metadata.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/taxonomy/devsecops/auth-methods/v1.0.0/auth-methods-metadata.schema.json\\\",\\n \\\"title\\\": \\\"Fulmen Auth Methods Metadata\\\",\\n \\\"description\\\": \\\"Metadata object describing authentication/MFA method support and security characteristics\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"key\\\": {\\n \\\"$ref\\\": \\\"auth-methods-key.schema.json\\\"\\n },\\n \\\"name\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Full method name\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Brief overview including usage and implementation notes\\\",\\n \\\"minLength\\\": 10,\\n \\\"maxLength\\\": 200\\n },\\n \\\"securityLevel\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"NIST-aligned security classification\\\",\\n \\\"enum\\\": [\\n \\\"low\\\",\\n \\\"medium\\\",\\n \\\"high\\\",\\n \\\"phishing-resistant\\\"\\n ]\\n },\\n \\\"implLangs\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Supported implementation languages\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"../../../../language/v1.0.0/language-key.schema.json\\\"\\n },\\n \\\"uniqueItems\\\": true,\\n \\\"minItems\\\": 1\\n }\\n },\\n \\\"required\\\": [\\n \\\"key\\\",\\n \\\"name\\\",\\n \\\"description\\\",\\n \\\"securityLevel\\\",\\n \\\"implLangs\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n}\\n\",\n \"schemas/crucible-ts/taxonomy/devsecops/geo/v1.0.0/geo-key.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/taxonomy/devsecops/geo/v1.0.0/geo-key.schema.json\\\",\\n \\\"title\\\": \\\"Fulmen Geo Key\\\",\\n \\\"description\\\": \\\"Enum of canonical geographic identifiers (countries and region groups) for DevSecOps schemas\\\",\\n \\\"type\\\": \\\"string\\\",\\n \\\"oneOf\\\": [\\n {\\n \\\"title\\\": \\\"Country Keys (ISO 3166-1 alpha-2 lowercase)\\\",\\n \\\"enum\\\": [\\n \\\"us\\\",\\n \\\"gb\\\",\\n \\\"de\\\",\\n \\\"fr\\\",\\n \\\"ch\\\",\\n \\\"ca\\\"\\n ]\\n },\\n {\\n \\\"title\\\": \\\"Region Keys (grouped super-regions)\\\",\\n \\\"enum\\\": [\\n \\\"eu\\\",\\n \\\"na\\\"\\n ]\\n }\\n ],\\n \\\"examples\\\": [\\n \\\"us\\\",\\n \\\"eu\\\"\\n ]\\n}\\n\",\n \"schemas/crucible-ts/taxonomy/devsecops/geo/v1.0.0/geo-metadata.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/taxonomy/devsecops/geo/v1.0.0/geo-metadata.schema.json\\\",\\n \\\"title\\\": \\\"Fulmen Geo Metadata\\\",\\n \\\"description\\\": \\\"Metadata structure for geographic taxonomy including countries, grouped regions, and cloud-specific regions\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"countries\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"ISO 3166-1 alpha-2 countries\\\",\\n \\\"minItems\\\": 1,\\n \\\"uniqueItems\\\": true,\\n \\\"items\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"key\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Lowercase 2-letter country code\\\",\\n \\\"pattern\\\": \\\"^[a-z]{2}$\\\"\\n },\\n \\\"name\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Country name\\\"\\n },\\n \\\"isoAlpha2\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Official ISO 3166-1 alpha-2 code (uppercase)\\\",\\n \\\"pattern\\\": \\\"^[A-Z]{2}$\\\"\\n },\\n \\\"compliance\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Applicable regulatory frameworks\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"uniqueItems\\\": true\\n }\\n },\\n \\\"required\\\": [\\n \\\"key\\\",\\n \\\"name\\\",\\n \\\"isoAlpha2\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n }\\n },\\n \\\"regions\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Grouped super-regions (e.g., EU with practical conventions)\\\",\\n \\\"minItems\\\": 1,\\n \\\"uniqueItems\\\": true,\\n \\\"items\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"key\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Lowercase region identifier\\\",\\n \\\"pattern\\\": \\\"^[a-z0-9-]+$\\\"\\n },\\n \\\"name\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Region name\\\"\\n },\\n \\\"countries\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Included country keys\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[a-z]{2}$\\\"\\n },\\n \\\"uniqueItems\\\": true,\\n \\\"minItems\\\": 1\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Region description and conventions\\\",\\n \\\"minLength\\\": 10,\\n \\\"maxLength\\\": 200\\n },\\n \\\"compliance\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Applicable regulatory frameworks for region\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"uniqueItems\\\": true\\n }\\n },\\n \\\"required\\\": [\\n \\\"key\\\",\\n \\\"name\\\",\\n \\\"countries\\\",\\n \\\"description\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n }\\n }\\n },\\n \\\"required\\\": [\\n \\\"countries\\\",\\n \\\"regions\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n}\\n\",\n \"schemas/crucible-ts/taxonomy/devsecops/infra-phases/v1.0.0/infra-phases-key.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/taxonomy/devsecops/infra-phases/v1.0.0/infra-phases-key.schema.json\\\",\\n \\\"title\\\": \\\"Fulmen Infra Phases Key\\\",\\n \\\"description\\\": \\\"Enum of canonical infrastructure deployment phase identifiers for DevSecOps schemas\\\",\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"bootstrap\\\",\\n \\\"secrets\\\",\\n \\\"network\\\",\\n \\\"storage\\\",\\n \\\"compute\\\"\\n ],\\n \\\"examples\\\": [\\n \\\"bootstrap\\\"\\n ]\\n}\\n\",\n \"schemas/crucible-ts/taxonomy/devsecops/infra-phases/v1.0.0/infra-phases-metadata.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/taxonomy/devsecops/infra-phases/v1.0.0/infra-phases-metadata.schema.json\\\",\\n \\\"title\\\": \\\"Fulmen Infra Phases Metadata\\\",\\n \\\"description\\\": \\\"Metadata object describing infrastructure deployment phase characteristics and dependencies\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"key\\\": {\\n \\\"$ref\\\": \\\"infra-phases-key.schema.json\\\"\\n },\\n \\\"name\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Full phase name\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Overview of phase purpose and typical operations\\\",\\n \\\"minLength\\\": 10,\\n \\\"maxLength\\\": 200\\n },\\n \\\"order\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"description\\\": \\\"Execution sequence (0=first; same order indicates parallelizable phases)\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 99\\n },\\n \\\"parallel\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Allow concurrent execution within same order group\\\",\\n \\\"default\\\": true\\n },\\n \\\"deps\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Phase dependencies (references to other phase keys)\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"infra-phases-key.schema.json\\\"\\n },\\n \\\"uniqueItems\\\": true\\n },\\n \\\"procedural\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Allows script/SDK procedural calls beyond declarative IaC\\\",\\n \\\"default\\\": false\\n }\\n },\\n \\\"required\\\": [\\n \\\"key\\\",\\n \\\"name\\\",\\n \\\"description\\\",\\n \\\"order\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n}\\n\",\n \"schemas/crucible-ts/taxonomy/devsecops/infra-providers/v1.0.0/infra-providers-key.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/taxonomy/devsecops/infra-providers/v1.0.0/infra-providers-key.schema.json\\\",\\n \\\"title\\\": \\\"Fulmen Infra Providers Key\\\",\\n \\\"description\\\": \\\"Enum of canonical infrastructure provider identifiers for DevSecOps schemas\\\",\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"doc\\\",\\n \\\"aws\\\",\\n \\\"gcp\\\",\\n \\\"azure\\\",\\n \\\"cloudflare\\\",\\n \\\"hetzner\\\"\\n ],\\n \\\"examples\\\": [\\n \\\"doc\\\"\\n ]\\n}\\n\",\n \"schemas/crucible-ts/taxonomy/devsecops/infra-providers/v1.0.0/infra-providers-metadata.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/taxonomy/devsecops/infra-providers/v1.0.0/infra-providers-metadata.schema.json\\\",\\n \\\"title\\\": \\\"Fulmen Infra Providers Metadata\\\",\\n \\\"description\\\": \\\"Metadata object describing infrastructure provider characteristics and capabilities\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"key\\\": {\\n \\\"$ref\\\": \\\"infra-providers-key.schema.json\\\"\\n },\\n \\\"name\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Full provider name\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Brief overview of provider focus areas and capabilities\\\",\\n \\\"minLength\\\": 10,\\n \\\"maxLength\\\": 200\\n },\\n \\\"tofuSupport\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"OpenTofu provider availability status\\\",\\n \\\"enum\\\": [\\n \\\"official\\\",\\n \\\"community\\\",\\n \\\"none\\\"\\n ],\\n \\\"default\\\": \\\"community\\\"\\n },\\n \\\"regions\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Provider-specific regions with geographic mappings\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"key\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Provider-specific region identifier\\\",\\n \\\"pattern\\\": \\\"^[a-z0-9-]+$\\\"\\n },\\n \\\"geo\\\": {\\n \\\"$ref\\\": \\\"../../geo/v1.0.0/geo-key.schema.json\\\",\\n \\\"description\\\": \\\"Geographic reference (country or region group)\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Region location and characteristics\\\",\\n \\\"minLength\\\": 10,\\n \\\"maxLength\\\": 200\\n }\\n },\\n \\\"required\\\": [\\n \\\"key\\\",\\n \\\"geo\\\",\\n \\\"description\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n }\\n },\\n \\\"sdkLangs\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Supported SDK languages\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"../../../../language/v1.0.0/language-key.schema.json\\\"\\n },\\n \\\"uniqueItems\\\": true\\n }\\n },\\n \\\"required\\\": [\\n \\\"key\\\",\\n \\\"name\\\",\\n \\\"description\\\",\\n \\\"tofuSupport\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n}\\n\",\n \"schemas/crucible-ts/taxonomy/devsecops/modules/v1.0.0/devsecops-module-entry.schema.json\": \"{\\n \\\"$schema\\\": \\\"http://json-schema.org/draft-07/schema#\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/taxonomy/devsecops/modules/v1.0.0/devsecops-module-entry.schema.json\\\",\\n \\\"title\\\": \\\"DevSecOps Module Registry Entry\\\",\\n \\\"description\\\": \\\"Schema for DevSecOps module entries in the taxonomy registry. Tracks schemas, configs, and potential L'Orage-branded library implementations.\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"module_name\\\",\\n \\\"description\\\",\\n \\\"evidence\\\",\\n \\\"consumers\\\",\\n \\\"status\\\",\\n \\\"added_version\\\"\\n ],\\n \\\"additionalProperties\\\": false,\\n \\\"properties\\\": {\\n \\\"module_name\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[a-z][a-z0-9-]*$\\\",\\n \\\"description\\\": \\\"Kebab-case module identifier (e.g., lorage-central, secrets)\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"minLength\\\": 10,\\n \\\"description\\\": \\\"Brief description of the DevSecOps module's purpose\\\"\\n },\\n \\\"rationale\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Why this module exists and its role in the DevSecOps ecosystem\\\"\\n },\\n \\\"evidence\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"has_schema\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"has_schema\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Whether this module has JSON schemas\\\"\\n },\\n \\\"schema_path\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Path to schemas directory (e.g., schemas/devsecops/secrets/v1.0.0/)\\\"\\n },\\n \\\"has_config\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Whether this module has config defaults\\\"\\n },\\n \\\"config_path\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Path to config directory (e.g., config/devsecops/secrets/v1.0.0/)\\\"\\n },\\n \\\"has_docs\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Whether this module has documentation\\\"\\n },\\n \\\"docs_path\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Path to documentation (e.g., docs/standards/devsecops/project-secrets.md)\\\"\\n }\\n },\\n \\\"if\\\": {\\n \\\"properties\\\": {\\n \\\"has_schema\\\": {\\n \\\"const\\\": true\\n }\\n }\\n },\\n \\\"then\\\": {\\n \\\"required\\\": [\\n \\\"schema_path\\\"\\n ]\\n }\\n },\\n \\\"potential_libraries\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[a-z][a-z0-9-]*$\\\"\\n },\\n \\\"description\\\": \\\"L'Orage-branded or DevSecOps helper libraries that might implement this module (e.g., goloragecentral, pyloragecentral)\\\",\\n \\\"uniqueItems\\\": true\\n },\\n \\\"consumers\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": \\\"Applications, tools, or services that consume this module's schemas (e.g., fulmen-secrets, lorage-daemon)\\\",\\n \\\"minItems\\\": 1,\\n \\\"uniqueItems\\\": true\\n },\\n \\\"status\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"active\\\",\\n \\\"deprecated\\\",\\n \\\"experimental\\\"\\n ],\\n \\\"description\\\": \\\"Current lifecycle status of the module\\\"\\n },\\n \\\"added_version\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Crucible version when module was added\\\",\\n \\\"pattern\\\": \\\"^\\\\\\\\d+\\\\\\\\.\\\\\\\\d+\\\\\\\\.\\\\\\\\d+$\\\"\\n },\\n \\\"deprecated_version\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Crucible version when module was deprecated (if applicable)\\\",\\n \\\"pattern\\\": \\\"^\\\\\\\\d+\\\\\\\\.\\\\\\\\d+\\\\\\\\.\\\\\\\\d+$\\\"\\n },\\n \\\"notes\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Additional notes about the module, its usage, or architectural decisions\\\"\\n }\\n }\\n}\\n\",\n \"schemas/crucible-ts/taxonomy/fixture/v1.0.0/fixture-catalog.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/taxonomy/fixture/v1.0.0/fixture-catalog.schema.json\\\",\\n \\\"title\\\": \\\"Fixture Catalog Schema\\\",\\n \\\"description\\\": \\\"Schema for the Fulmen fixture catalog registry. Defines fixture names, categories, variants, and i18n metadata.\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"version\\\",\\n \\\"fixtures\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"$schema\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"JSON Schema reference\\\"\\n },\\n \\\"version\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[0-9]+\\\\\\\\.[0-9]+\\\\\\\\.[0-9]+$\\\",\\n \\\"description\\\": \\\"Catalog schema version (semver)\\\"\\n },\\n \\\"fixtures\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Map of fixture names to their definitions\\\",\\n \\\"additionalProperties\\\": {\\n \\\"$ref\\\": \\\"#/$defs/fixture\\\"\\n },\\n \\\"propertyNames\\\": {\\n \\\"pattern\\\": \\\"^[a-z][a-z0-9]{1,20}$\\\",\\n \\\"description\\\": \\\"Fixture name: ASCII lowercase, starts with letter, 2-21 chars\\\"\\n }\\n }\\n },\\n \\\"$defs\\\": {\\n \\\"fixture\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"category\\\",\\n \\\"mode\\\",\\n \\\"default_lang\\\",\\n \\\"summary\\\",\\n \\\"variants\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"category\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"proving\\\",\\n \\\"utility\\\",\\n \\\"chaos\\\"\\n ],\\n \\\"description\\\": \\\"Behavioral category of the fixture\\\"\\n },\\n \\\"mode\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"server\\\",\\n \\\"client\\\",\\n \\\"datastore\\\",\\n \\\"identity\\\"\\n ],\\n \\\"description\\\": \\\"Fixture mode (identity planned for v0.4.3)\\\"\\n },\\n \\\"default_lang\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[a-z]{2}$\\\",\\n \\\"description\\\": \\\"ISO 639-1 language code for primary language of summary/descriptions\\\"\\n },\\n \\\"summary\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"minLength\\\": 10,\\n \\\"maxLength\\\": 200,\\n \\\"description\\\": \\\"Brief description in default_lang\\\"\\n },\\n \\\"summary_i18n\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Translations of summary (keyed by ISO 639-1 code, excludes default_lang)\\\",\\n \\\"additionalProperties\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"minLength\\\": 10,\\n \\\"maxLength\\\": 200\\n },\\n \\\"propertyNames\\\": {\\n \\\"pattern\\\": \\\"^[a-z]{2}$\\\"\\n }\\n },\\n \\\"aliases\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Alternative names (UTF-8), typo corrections, i18n nicknames\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 50\\n },\\n \\\"uniqueItems\\\": true\\n },\\n \\\"variants\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Map of variant codes to their definitions\\\",\\n \\\"additionalProperties\\\": {\\n \\\"$ref\\\": \\\"#/$defs/variant\\\"\\n },\\n \\\"propertyNames\\\": {\\n \\\"pattern\\\": \\\"^[0-9]{3}$\\\",\\n \\\"description\\\": \\\"Variant code: 3-digit zero-padded (001-999, 000 reserved)\\\"\\n },\\n \\\"minProperties\\\": 1\\n },\\n \\\"status\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"active\\\",\\n \\\"planned\\\",\\n \\\"deprecated\\\"\\n ],\\n \\\"default\\\": \\\"active\\\",\\n \\\"description\\\": \\\"Lifecycle status of the fixture\\\"\\n }\\n },\\n \\\"additionalProperties\\\": false\\n },\\n \\\"variant\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"name\\\",\\n \\\"description\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"name\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[a-z][a-z0-9-]{0,30}$\\\",\\n \\\"description\\\": \\\"Short variant identifier (ASCII, kebab-case)\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"minLength\\\": 10,\\n \\\"maxLength\\\": 500,\\n \\\"description\\\": \\\"Description in fixture's default_lang\\\"\\n },\\n \\\"description_i18n\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Translations of description (keyed by ISO 639-1 code)\\\",\\n \\\"additionalProperties\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"minLength\\\": 10,\\n \\\"maxLength\\\": 500\\n },\\n \\\"propertyNames\\\": {\\n \\\"pattern\\\": \\\"^[a-z]{2}$\\\"\\n }\\n },\\n \\\"status\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"active\\\",\\n \\\"planned\\\",\\n \\\"deprecated\\\"\\n ],\\n \\\"default\\\": \\\"active\\\",\\n \\\"description\\\": \\\"Lifecycle status of the variant\\\"\\n }\\n },\\n \\\"additionalProperties\\\": false\\n }\\n },\\n \\\"additionalProperties\\\": false\\n}\\n\",\n \"schemas/crucible-ts/taxonomy/language/v1.0.0/language-key.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/taxonomy/language/v1.0.0/language-key.schema.json\\\",\\n \\\"title\\\": \\\"Fulmen Language Key\\\",\\n \\\"description\\\": \\\"Enum of canonical Fulmen helper language identifiers\\\",\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"go\\\",\\n \\\"python\\\",\\n \\\"typescript\\\",\\n \\\"rust\\\",\\n \\\"csharp\\\"\\n ],\\n \\\"examples\\\": [\\n \\\"go\\\"\\n ]\\n}\\n\",\n \"schemas/crucible-ts/taxonomy/language/v1.0.0/language-metadata.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/taxonomy/language/v1.0.0/language-metadata.schema.json\\\",\\n \\\"title\\\": \\\"Fulmen Language Metadata\\\",\\n \\\"description\\\": \\\"Metadata object describing Fulmen helper language support status\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"key\\\": {\\n \\\"$ref\\\": \\\"language-key.schema.json\\\"\\n },\\n \\\"name\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Human-readable language name\\\"\\n },\\n \\\"libraryName\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Canonical helper library package name (e.g., gofulmen, pyfulmen)\\\"\\n },\\n \\\"status\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Lifecycle status for the helper library\\\",\\n \\\"enum\\\": [\\n \\\"active\\\",\\n \\\"planned\\\",\\n \\\"deprecated\\\"\\n ]\\n },\\n \\\"minimumRuntime\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Minimum supported runtime or compiler version\\\"\\n },\\n \\\"notes\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Optional free-form notes about roadmap or support focus\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"key\\\",\\n \\\"name\\\",\\n \\\"libraryName\\\",\\n \\\"status\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n}\\n\",\n \"schemas/crucible-ts/taxonomy/library/foundry-catalogs/v1.1.0/catalog-entry.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/taxonomy/library/foundry-catalogs/v1.1.0/catalog-entry.schema.json\\\",\\n \\\"title\\\": \\\"Fulmen Foundry Catalog Entry\\\",\\n \\\"description\\\": \\\"Schema for individual catalog entries in the foundry reference data registry. v1.1.0 adds weight classification, default_inclusion, and feature_group for library feature gates.\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"catalog_name\\\",\\n \\\"description\\\",\\n \\\"schema_path\\\",\\n \\\"config_path\\\",\\n \\\"format\\\",\\n \\\"status\\\",\\n \\\"added_version\\\",\\n \\\"weight\\\",\\n \\\"default_inclusion\\\",\\n \\\"feature_group\\\"\\n ],\\n \\\"additionalProperties\\\": false,\\n \\\"properties\\\": {\\n \\\"catalog_name\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Unique identifier for the catalog (lowercase, hyphenated)\\\",\\n \\\"pattern\\\": \\\"^[a-z][a-z0-9-]*$\\\",\\n \\\"examples\\\": [\\n \\\"countries\\\",\\n \\\"http-statuses\\\",\\n \\\"exit-codes\\\",\\n \\\"signals\\\"\\n ]\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Brief description of catalog contents\\\",\\n \\\"minLength\\\": 10\\n },\\n \\\"schema_path\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Path to JSON Schema for catalog entries\\\",\\n \\\"pattern\\\": \\\"^schemas/\\\"\\n },\\n \\\"config_path\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Path to YAML catalog data file\\\",\\n \\\"pattern\\\": \\\"^config/\\\"\\n },\\n \\\"format\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"yaml\\\",\\n \\\"json\\\"\\n ],\\n \\\"description\\\": \\\"Data file format\\\"\\n },\\n \\\"weight\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"light\\\",\\n \\\"heavy\\\"\\n ],\\n \\\"default\\\": \\\"light\\\",\\n \\\"description\\\": \\\"Dependency footprint for consuming this catalog. light = serde-class only; heavy = requires regex, glob, or other significant deps\\\"\\n },\\n \\\"default_inclusion\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"default\\\": true,\\n \\\"description\\\": \\\"Whether catalog is included in default/standard builds. false = opt-in only\\\"\\n },\\n \\\"feature_group\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Feature gate group for library implementations (e.g., foundry-core, foundry-patterns)\\\",\\n \\\"pattern\\\": \\\"^[a-z][a-z0-9-]*$\\\",\\n \\\"examples\\\": [\\n \\\"foundry-core\\\",\\n \\\"foundry-patterns\\\",\\n \\\"foundry-mime\\\"\\n ]\\n },\\n \\\"status\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"active\\\",\\n \\\"deprecated\\\",\\n \\\"experimental\\\"\\n ],\\n \\\"description\\\": \\\"Current lifecycle status of the catalog\\\"\\n },\\n \\\"added_version\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Crucible version when catalog was added\\\",\\n \\\"pattern\\\": \\\"^\\\\\\\\d+\\\\\\\\.\\\\\\\\d+\\\\\\\\.\\\\\\\\d+$\\\"\\n },\\n \\\"notes\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Additional implementation notes or guidance\\\"\\n }\\n }\\n}\\n\",\n \"schemas/crucible-ts/taxonomy/library/fulencode/detection-confidence/v1.0.0/levels.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/taxonomy/library/fulencode/detection-confidence-v1.0.0.json\\\",\\n \\\"title\\\": \\\"Detection Confidence Taxonomy Schema\\\",\\n \\\"description\\\": \\\"Schema for encoding detection confidence levels taxonomy\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"confidence_levels\\\",\\n \\\"detection_sources\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"confidence_levels\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Confidence level definitions\\\",\\n \\\"patternProperties\\\": {\\n \\\"^(high|medium|low)$\\\": {\\n \\\"$ref\\\": \\\"#/$defs/confidenceLevel\\\"\\n }\\n }\\n },\\n \\\"detection_sources\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Detection source definitions\\\",\\n \\\"patternProperties\\\": {\\n \\\"^[a-z_]+$\\\": {\\n \\\"$ref\\\": \\\"#/$defs/detectionSource\\\"\\n }\\n }\\n },\\n \\\"ambiguous_cases\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Ambiguous detection cases\\\",\\n \\\"patternProperties\\\": {\\n \\\"^[a-z_]+$\\\": {\\n \\\"$ref\\\": \\\"#/$defs/ambiguousCase\\\"\\n }\\n }\\n },\\n \\\"confidence_calculation\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Confidence calculation formula and weights\\\",\\n \\\"required\\\": [\\n \\\"formula\\\",\\n \\\"weights\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"formula\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"weights\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"patternProperties\\\": {\\n \\\"^[a-z_]+$\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 1\\n }\\n }\\n },\\n \\\"example\\\": {\\n \\\"type\\\": \\\"object\\\"\\n }\\n }\\n },\\n \\\"telemetry_buckets\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Telemetry bucket definitions\\\",\\n \\\"properties\\\": {\\n \\\"high\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"medium\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"low\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"label_name\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"metric\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n }\\n }\\n },\\n \\\"$defs\\\": {\\n \\\"confidenceLevel\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"threshold_min\\\",\\n \\\"threshold_max\\\",\\n \\\"description\\\",\\n \\\"recommended_action\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"threshold_min\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 1\\n },\\n \\\"threshold_max\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 1\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"recommended_action\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"typical_sources\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n },\\n \\\"examples\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"encoding\\\",\\n \\\"confidence\\\",\\n \\\"reason\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"encoding\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"confidence\\\": {\\n \\\"type\\\": \\\"number\\\"\\n },\\n \\\"reason\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n }\\n }\\n }\\n }\\n },\\n \\\"detectionSource\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"type\\\",\\n \\\"confidence_contribution\\\",\\n \\\"description\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"type\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"definitive\\\",\\n \\\"structural\\\",\\n \\\"probabilistic\\\",\\n \\\"advanced\\\",\\n \\\"prefix\\\"\\n ]\\n },\\n \\\"confidence_contribution\\\": {\\n \\\"type\\\": [\\n \\\"number\\\",\\n \\\"string\\\"\\n ]\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"signatures\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"patternProperties\\\": {\\n \\\"^[a-z0-9_-]+$\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"integer\\\"\\n }\\n }\\n }\\n },\\n \\\"methods\\\": {\\n \\\"type\\\": \\\"object\\\"\\n },\\n \\\"techniques\\\": {\\n \\\"type\\\": \\\"object\\\"\\n },\\n \\\"algorithms\\\": {\\n \\\"type\\\": \\\"object\\\"\\n },\\n \\\"prefixes\\\": {\\n \\\"type\\\": \\\"object\\\"\\n },\\n \\\"notes\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"confidence_factors\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n },\\n \\\"availability\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n }\\n },\\n \\\"ambiguousCase\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"description\\\",\\n \\\"resolution_strategy\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"ambiguous_between\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n },\\n \\\"distinguishing_bytes\\\": {\\n \\\"type\\\": \\\"object\\\"\\n },\\n \\\"resolution_strategy\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n },\\n \\\"confidence\\\": {\\n \\\"type\\\": \\\"number\\\"\\n },\\n \\\"indicators\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n },\\n \\\"recommended_encoding\\\": {\\n \\\"type\\\": [\\n \\\"string\\\",\\n \\\"null\\\"\\n ]\\n },\\n \\\"handling\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n }\\n }\\n }\\n}\\n\",\n \"schemas/crucible-ts/taxonomy/library/fulencode/encoding-families/v1.0.0/families.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/taxonomy/library/fulencode/encoding-families-v1.0.0.json\\\",\\n \\\"title\\\": \\\"Encoding Families Taxonomy Schema\\\",\\n \\\"description\\\": \\\"Schema for encoding families taxonomy defining supported encodings\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"binary_to_text\\\",\\n \\\"character_encodings\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"binary_to_text\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Binary-to-text encoding definitions\\\",\\n \\\"patternProperties\\\": {\\n \\\"^[a-z0-9_]+$\\\": {\\n \\\"$ref\\\": \\\"#/$defs/binaryToTextEncoding\\\"\\n }\\n }\\n },\\n \\\"character_encodings\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Character encoding definitions\\\",\\n \\\"patternProperties\\\": {\\n \\\"^[a-z0-9_-]+$\\\": {\\n \\\"$ref\\\": \\\"#/$defs/characterEncoding\\\"\\n }\\n }\\n },\\n \\\"deferred_to_specialized\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Specialized modules for optional encodings\\\",\\n \\\"patternProperties\\\": {\\n \\\"^[a-z0-9_]+$\\\": {\\n \\\"$ref\\\": \\\"#/$defs/specializedModule\\\"\\n }\\n }\\n }\\n },\\n \\\"$defs\\\": {\\n \\\"binaryToTextEncoding\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"type\\\",\\n \\\"alphabet_size\\\",\\n \\\"use_case\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"type\\\": {\\n \\\"const\\\": \\\"binary_to_text\\\"\\n },\\n \\\"alphabet_size\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 2\\n },\\n \\\"padding\\\": {\\n \\\"type\\\": \\\"boolean\\\"\\n },\\n \\\"padding_char\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"maxLength\\\": 1\\n },\\n \\\"characters\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"case_variants\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"lowercase\\\",\\n \\\"uppercase\\\"\\n ]\\n }\\n },\\n \\\"use_case\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"rfc\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n }\\n },\\n \\\"characterEncoding\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"type\\\",\\n \\\"variable_width\\\",\\n \\\"use_case\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"type\\\": {\\n \\\"const\\\": \\\"character_encoding\\\"\\n },\\n \\\"variable_width\\\": {\\n \\\"type\\\": \\\"boolean\\\"\\n },\\n \\\"bytes_per_codepoint\\\": {\\n \\\"type\\\": [\\n \\\"integer\\\",\\n \\\"string\\\"\\n ]\\n },\\n \\\"bom_required\\\": {\\n \\\"type\\\": \\\"boolean\\\"\\n },\\n \\\"bom_bytes\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 255\\n }\\n },\\n \\\"max_codepoint\\\": {\\n \\\"type\\\": \\\"integer\\\"\\n },\\n \\\"endianness\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"little\\\",\\n \\\"big\\\"\\n ]\\n },\\n \\\"aliases\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n },\\n \\\"use_case\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"rfc\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"standard\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"note\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n }\\n },\\n \\\"specializedModule\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"tier\\\",\\n \\\"category\\\",\\n \\\"formats\\\",\\n \\\"use_case\\\",\\n \\\"module\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"tier\\\": {\\n \\\"const\\\": \\\"specialized\\\"\\n },\\n \\\"category\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"encoding_families\\\",\\n \\\"legacy_encodings\\\"\\n ]\\n },\\n \\\"formats\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n },\\n \\\"use_case\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"module\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^fulencode-[a-z0-9-]+$\\\"\\n },\\n \\\"note\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n }\\n }\\n }\\n}\\n\",\n \"schemas/crucible-ts/taxonomy/library/fulencode/normalization-profiles/v1.0.0/profiles.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/taxonomy/library/fulencode/normalization-profiles-v1.0.0.json\\\",\\n \\\"title\\\": \\\"Normalization Profiles Taxonomy Schema\\\",\\n \\\"description\\\": \\\"Schema for Unicode normalization profiles taxonomy\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"canonical_forms\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"canonical_forms\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Canonical Unicode normalization forms\\\",\\n \\\"patternProperties\\\": {\\n \\\"^nf[ckd]{1,2}$\\\": {\\n \\\"$ref\\\": \\\"#/$defs/canonicalForm\\\"\\n }\\n }\\n },\\n \\\"custom_profiles\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Custom normalization profiles\\\",\\n \\\"patternProperties\\\": {\\n \\\"^[a-z_]+$\\\": {\\n \\\"$ref\\\": \\\"#/$defs/customProfile\\\"\\n }\\n }\\n },\\n \\\"semantic_change_categories\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Categories of semantic changes in NFKC/NFKD\\\",\\n \\\"patternProperties\\\": {\\n \\\"^[a-z_]+$\\\": {\\n \\\"$ref\\\": \\\"#/$defs/semanticChangeCategory\\\"\\n }\\n }\\n },\\n \\\"zero_width_characters\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Zero-width character definitions\\\",\\n \\\"patternProperties\\\": {\\n \\\"^u_[0-9a-f]+$\\\": {\\n \\\"$ref\\\": \\\"#/$defs/zeroWidthCharacter\\\"\\n }\\n }\\n },\\n \\\"combining_mark_limits\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Combining mark limits and policy\\\",\\n \\\"required\\\": [\\n \\\"default_max\\\",\\n \\\"rationale\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"default_max\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 1\\n },\\n \\\"rationale\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"attack_example\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"legitimate_examples\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"text\\\",\\n \\\"marks\\\",\\n \\\"description\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"text\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"marks\\\": {\\n \\\"type\\\": \\\"integer\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n }\\n }\\n },\\n \\\"enforcement\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n }\\n }\\n },\\n \\\"$defs\\\": {\\n \\\"canonicalForm\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"full_name\\\",\\n \\\"type\\\",\\n \\\"semantic_preserving\\\",\\n \\\"use_case\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"full_name\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"unicode_version\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"type\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"canonical\\\",\\n \\\"compatibility\\\"\\n ]\\n },\\n \\\"composition\\\": {\\n \\\"type\\\": \\\"boolean\\\"\\n },\\n \\\"decomposition\\\": {\\n \\\"type\\\": \\\"boolean\\\"\\n },\\n \\\"compatibility\\\": {\\n \\\"type\\\": \\\"boolean\\\"\\n },\\n \\\"semantic_preserving\\\": {\\n \\\"type\\\": \\\"boolean\\\"\\n },\\n \\\"use_case\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"idempotent\\\": {\\n \\\"type\\\": \\\"boolean\\\"\\n },\\n \\\"unicode_std\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"warning\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n }\\n },\\n \\\"customProfile\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"based_on\\\",\\n \\\"use_case\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"based_on\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"restrictions\\\": {\\n \\\"type\\\": \\\"object\\\"\\n },\\n \\\"use_case\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"transformations\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n },\\n \\\"security\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"warning\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"platform_notes\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n }\\n }\\n },\\n \\\"semanticChangeCategory\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"examples\\\",\\n \\\"risk\\\",\\n \\\"affected_by\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"examples\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"original\\\",\\n \\\"normalized\\\",\\n \\\"codepoint\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"original\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"normalized\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"codepoint\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n }\\n }\\n },\\n \\\"risk\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"affected_by\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n }\\n }\\n },\\n \\\"zeroWidthCharacter\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"codepoint\\\",\\n \\\"name\\\",\\n \\\"security_risk\\\",\\n \\\"use_case\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"codepoint\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^U\\\\\\\\+[0-9A-F]{4,6}$\\\"\\n },\\n \\\"name\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"security_risk\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"use_case\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"rejected_by\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n }\\n }\\n }\\n }\\n}\\n\",\n \"schemas/crucible-ts/taxonomy/library/modules/v1.0.0/module-entry.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/taxonomy/library/modules/v1.0.0/module-entry.schema.json\\\",\\n \\\"title\\\": \\\"Fulmen Helper Library Module Entry\\\",\\n \\\"description\\\": \\\"Schema for individual module entries in the helper library module registry\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"module_name\\\",\\n \\\"tier\\\",\\n \\\"description\\\",\\n \\\"rationale\\\",\\n \\\"evidence\\\",\\n \\\"languages\\\",\\n \\\"dependencies\\\",\\n \\\"status\\\",\\n \\\"added_version\\\"\\n ],\\n \\\"additionalProperties\\\": false,\\n \\\"properties\\\": {\\n \\\"module_name\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Unique identifier for the module (lowercase, no spaces)\\\",\\n \\\"pattern\\\": \\\"^[a-z][a-z0-9-]*$\\\",\\n \\\"examples\\\": [\\n \\\"config\\\",\\n \\\"pathfinder\\\",\\n \\\"fulencoding\\\"\\n ]\\n },\\n \\\"tier\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"core\\\",\\n \\\"common\\\",\\n \\\"specialized\\\"\\n ],\\n \\\"description\\\": \\\"Default tier assignment for the module across all languages\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Brief description of module functionality\\\",\\n \\\"minLength\\\": 10\\n },\\n \\\"rationale\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Rationale for tier assignment\\\",\\n \\\"minLength\\\": 10\\n },\\n \\\"evidence\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Pointers to module artifacts for validation\\\",\\n \\\"required\\\": [\\n \\\"has_schema\\\",\\n \\\"has_config\\\"\\n ],\\n \\\"additionalProperties\\\": false,\\n \\\"properties\\\": {\\n \\\"has_schema\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Whether module has associated JSON schemas\\\"\\n },\\n \\\"schema_path\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Path to schema directory (required if has_schema is true)\\\",\\n \\\"pattern\\\": \\\"^schemas/\\\"\\n },\\n \\\"has_config\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Whether module has associated config files\\\"\\n },\\n \\\"config_path\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Path to config directory (required if has_config is true)\\\",\\n \\\"pattern\\\": \\\"^config/\\\"\\n }\\n },\\n \\\"allOf\\\": [\\n {\\n \\\"if\\\": {\\n \\\"properties\\\": {\\n \\\"has_schema\\\": {\\n \\\"const\\\": true\\n }\\n }\\n },\\n \\\"then\\\": {\\n \\\"required\\\": [\\n \\\"schema_path\\\"\\n ]\\n }\\n },\\n {\\n \\\"if\\\": {\\n \\\"properties\\\": {\\n \\\"has_config\\\": {\\n \\\"const\\\": true\\n }\\n }\\n },\\n \\\"then\\\": {\\n \\\"required\\\": [\\n \\\"config_path\\\"\\n ]\\n }\\n }\\n ]\\n },\\n \\\"languages\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Language-specific implementation status\\\",\\n \\\"required\\\": [\\n \\\"go\\\",\\n \\\"python\\\",\\n \\\"typescript\\\"\\n ],\\n \\\"additionalProperties\\\": false,\\n \\\"properties\\\": {\\n \\\"go\\\": {\\n \\\"$ref\\\": \\\"#/$defs/languageImplementation\\\"\\n },\\n \\\"python\\\": {\\n \\\"$ref\\\": \\\"#/$defs/languageImplementation\\\"\\n },\\n \\\"typescript\\\": {\\n \\\"$ref\\\": \\\"#/$defs/languageImplementation\\\"\\n }\\n }\\n },\\n \\\"dependencies\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Module dependencies\\\",\\n \\\"required\\\": [\\n \\\"required_modules\\\",\\n \\\"external_deps\\\"\\n ],\\n \\\"additionalProperties\\\": false,\\n \\\"properties\\\": {\\n \\\"required_modules\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Other Fulmen modules this module depends on\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[a-z][a-z0-9-]*$\\\"\\n },\\n \\\"uniqueItems\\\": true\\n },\\n \\\"external_deps\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"External dependencies per language\\\",\\n \\\"required\\\": [\\n \\\"go\\\",\\n \\\"python\\\",\\n \\\"typescript\\\"\\n ],\\n \\\"additionalProperties\\\": false,\\n \\\"properties\\\": {\\n \\\"go\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"uniqueItems\\\": true\\n },\\n \\\"python\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"uniqueItems\\\": true\\n },\\n \\\"typescript\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"uniqueItems\\\": true\\n }\\n }\\n }\\n }\\n },\\n \\\"graduation_metrics\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Metrics for graduation tracking (required for specialized modules)\\\",\\n \\\"additionalProperties\\\": false,\\n \\\"properties\\\": {\\n \\\"size_loc\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"description\\\": \\\"Lines of code\\\",\\n \\\"minimum\\\": 0\\n },\\n \\\"release_velocity\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"description\\\": \\\"Number of releases between helper releases\\\",\\n \\\"minimum\\\": 0\\n },\\n \\\"adoption_rate_pct\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"description\\\": \\\"Percentage of helper users who install this extension\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 100\\n },\\n \\\"internal_coupling_pct\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"description\\\": \\\"Percentage of code that uses helper internals\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 100\\n }\\n }\\n },\\n \\\"status\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"active\\\",\\n \\\"experimental\\\",\\n \\\"deprecated\\\",\\n \\\"graduated\\\"\\n ],\\n \\\"description\\\": \\\"Current lifecycle status of the module\\\"\\n },\\n \\\"added_version\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Version when module was added\\\",\\n \\\"pattern\\\": \\\"^\\\\\\\\d+\\\\\\\\.\\\\\\\\d+\\\\\\\\.\\\\\\\\d+$\\\"\\n },\\n \\\"sunset_date\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"date\\\",\\n \\\"description\\\": \\\"ISO 8601 date when module must graduate or be removed (specialized only)\\\"\\n }\\n },\\n \\\"allOf\\\": [\\n {\\n \\\"if\\\": {\\n \\\"properties\\\": {\\n \\\"tier\\\": {\\n \\\"const\\\": \\\"core\\\"\\n }\\n }\\n },\\n \\\"then\\\": {\\n \\\"properties\\\": {\\n \\\"languages\\\": {\\n \\\"properties\\\": {\\n \\\"go\\\": {\\n \\\"properties\\\": {\\n \\\"status\\\": {\\n \\\"not\\\": {\\n \\\"const\\\": \\\"na\\\"\\n }\\n },\\n \\\"tier_override\\\": {\\n \\\"not\\\": {}\\n }\\n }\\n },\\n \\\"python\\\": {\\n \\\"properties\\\": {\\n \\\"status\\\": {\\n \\\"not\\\": {\\n \\\"const\\\": \\\"na\\\"\\n }\\n },\\n \\\"tier_override\\\": {\\n \\\"not\\\": {}\\n }\\n }\\n },\\n \\\"typescript\\\": {\\n \\\"properties\\\": {\\n \\\"status\\\": {\\n \\\"not\\\": {\\n \\\"const\\\": \\\"na\\\"\\n }\\n },\\n \\\"tier_override\\\": {\\n \\\"not\\\": {}\\n }\\n }\\n }\\n }\\n }\\n }\\n }\\n },\\n {\\n \\\"if\\\": {\\n \\\"properties\\\": {\\n \\\"tier\\\": {\\n \\\"const\\\": \\\"specialized\\\"\\n }\\n }\\n },\\n \\\"then\\\": {\\n \\\"required\\\": [\\n \\\"graduation_metrics\\\",\\n \\\"sunset_date\\\"\\n ]\\n }\\n }\\n ],\\n \\\"$defs\\\": {\\n \\\"languageImplementation\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"status\\\"\\n ],\\n \\\"additionalProperties\\\": false,\\n \\\"properties\\\": {\\n \\\"status\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"available\\\",\\n \\\"planned\\\",\\n \\\"na\\\"\\n ],\\n \\\"description\\\": \\\"Implementation status for this language\\\"\\n },\\n \\\"tier_override\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"core\\\",\\n \\\"common\\\",\\n \\\"specialized\\\"\\n ],\\n \\\"description\\\": \\\"Override default tier for this language (not allowed for core modules)\\\"\\n },\\n \\\"package\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Package path/name (required if status is available)\\\"\\n },\\n \\\"version\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Version when module became available in this language\\\",\\n \\\"pattern\\\": \\\"^\\\\\\\\d+\\\\\\\\.\\\\\\\\d+\\\\\\\\.\\\\\\\\d+$\\\"\\n },\\n \\\"implementation\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"How this module is implemented (e.g., 'Wraps stdlib X', 'Custom implementation using Y', 'Wraps third-party Z')\\\",\\n \\\"minLength\\\": 10\\n },\\n \\\"extras\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Python extras that include this module\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"uniqueItems\\\": true\\n },\\n \\\"optional_deps\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"TypeScript optional dependencies needed for this module\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"uniqueItems\\\": true\\n },\\n \\\"rationale\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Rationale for tier_override or na status\\\",\\n \\\"minLength\\\": 10\\n }\\n },\\n \\\"allOf\\\": [\\n {\\n \\\"if\\\": {\\n \\\"properties\\\": {\\n \\\"status\\\": {\\n \\\"const\\\": \\\"available\\\"\\n }\\n }\\n },\\n \\\"then\\\": {\\n \\\"required\\\": [\\n \\\"package\\\",\\n \\\"version\\\"\\n ]\\n }\\n },\\n {\\n \\\"if\\\": {\\n \\\"anyOf\\\": [\\n {\\n \\\"properties\\\": {\\n \\\"tier_override\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n }\\n },\\n {\\n \\\"properties\\\": {\\n \\\"status\\\": {\\n \\\"const\\\": \\\"na\\\"\\n }\\n }\\n }\\n ]\\n },\\n \\\"then\\\": {\\n \\\"required\\\": [\\n \\\"rationale\\\"\\n ]\\n }\\n }\\n ]\\n }\\n }\\n}\\n\",\n \"schemas/crucible-ts/taxonomy/library/modules/v1.1.0/module-entry.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/taxonomy/library/modules/v1.1.0/module-entry.schema.json\\\",\\n \\\"title\\\": \\\"Fulmen Helper Library Module Entry\\\",\\n \\\"description\\\": \\\"Schema for individual module entries in the helper library module registry. v1.1.0 adds weight classification, default_inclusion, rust language support, and per-language notes.\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"module_name\\\",\\n \\\"tier\\\",\\n \\\"description\\\",\\n \\\"rationale\\\",\\n \\\"evidence\\\",\\n \\\"languages\\\",\\n \\\"dependencies\\\",\\n \\\"status\\\",\\n \\\"added_version\\\"\\n ],\\n \\\"additionalProperties\\\": false,\\n \\\"properties\\\": {\\n \\\"module_name\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Unique identifier for the module (lowercase, no spaces)\\\",\\n \\\"pattern\\\": \\\"^[a-z][a-z0-9-]*$\\\",\\n \\\"examples\\\": [\\n \\\"config\\\",\\n \\\"pathfinder\\\",\\n \\\"similarity\\\"\\n ]\\n },\\n \\\"tier\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"core\\\",\\n \\\"common\\\",\\n \\\"specialized\\\"\\n ],\\n \\\"description\\\": \\\"Default tier assignment for the module across all languages\\\"\\n },\\n \\\"weight\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"light\\\",\\n \\\"heavy\\\"\\n ],\\n \\\"default\\\": \\\"light\\\",\\n \\\"description\\\": \\\"Dependency footprint classification. light = stdlib or serde-class deps only; heavy = significant dependency tree\\\"\\n },\\n \\\"default_inclusion\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"default\\\": true,\\n \\\"description\\\": \\\"Whether module is included in default/standard builds. false = opt-in only\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Brief description of module functionality\\\",\\n \\\"minLength\\\": 10\\n },\\n \\\"rationale\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Rationale for tier assignment\\\",\\n \\\"minLength\\\": 10\\n },\\n \\\"evidence\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Pointers to module artifacts for validation\\\",\\n \\\"required\\\": [\\n \\\"has_schema\\\",\\n \\\"has_config\\\"\\n ],\\n \\\"additionalProperties\\\": false,\\n \\\"properties\\\": {\\n \\\"has_schema\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Whether module has associated JSON schemas\\\"\\n },\\n \\\"schema_path\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Path to schema directory (required if has_schema is true)\\\",\\n \\\"pattern\\\": \\\"^schemas/\\\"\\n },\\n \\\"has_config\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"description\\\": \\\"Whether module has associated config files\\\"\\n },\\n \\\"config_path\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Path to config directory (required if has_config is true)\\\",\\n \\\"pattern\\\": \\\"^config/\\\"\\n }\\n },\\n \\\"allOf\\\": [\\n {\\n \\\"if\\\": {\\n \\\"properties\\\": {\\n \\\"has_schema\\\": {\\n \\\"const\\\": true\\n }\\n }\\n },\\n \\\"then\\\": {\\n \\\"required\\\": [\\n \\\"schema_path\\\"\\n ]\\n }\\n },\\n {\\n \\\"if\\\": {\\n \\\"properties\\\": {\\n \\\"has_config\\\": {\\n \\\"const\\\": true\\n }\\n }\\n },\\n \\\"then\\\": {\\n \\\"required\\\": [\\n \\\"config_path\\\"\\n ]\\n }\\n }\\n ]\\n },\\n \\\"languages\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Language-specific implementation status. go/python/typescript required; rust optional in v1.1.0\\\",\\n \\\"required\\\": [\\n \\\"go\\\",\\n \\\"python\\\",\\n \\\"typescript\\\"\\n ],\\n \\\"additionalProperties\\\": false,\\n \\\"properties\\\": {\\n \\\"go\\\": {\\n \\\"$ref\\\": \\\"#/$defs/languageImplementation\\\"\\n },\\n \\\"python\\\": {\\n \\\"$ref\\\": \\\"#/$defs/languageImplementation\\\"\\n },\\n \\\"typescript\\\": {\\n \\\"$ref\\\": \\\"#/$defs/languageImplementation\\\"\\n },\\n \\\"rust\\\": {\\n \\\"$ref\\\": \\\"#/$defs/languageImplementation\\\"\\n }\\n }\\n },\\n \\\"dependencies\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Module dependencies\\\",\\n \\\"required\\\": [\\n \\\"required_modules\\\",\\n \\\"external_deps\\\"\\n ],\\n \\\"additionalProperties\\\": false,\\n \\\"properties\\\": {\\n \\\"required_modules\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Other Fulmen modules this module depends on\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[a-z][a-z0-9-]*$\\\"\\n },\\n \\\"uniqueItems\\\": true\\n },\\n \\\"external_deps\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"External dependencies per language\\\",\\n \\\"required\\\": [\\n \\\"go\\\",\\n \\\"python\\\",\\n \\\"typescript\\\"\\n ],\\n \\\"additionalProperties\\\": false,\\n \\\"properties\\\": {\\n \\\"go\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"uniqueItems\\\": true\\n },\\n \\\"python\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"uniqueItems\\\": true\\n },\\n \\\"typescript\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"uniqueItems\\\": true\\n },\\n \\\"rust\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"uniqueItems\\\": true\\n }\\n }\\n }\\n }\\n },\\n \\\"graduation_metrics\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Metrics for graduation tracking (required for specialized modules)\\\",\\n \\\"additionalProperties\\\": false,\\n \\\"properties\\\": {\\n \\\"size_loc\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"description\\\": \\\"Lines of code\\\",\\n \\\"minimum\\\": 0\\n },\\n \\\"release_velocity\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"description\\\": \\\"Number of releases between helper releases\\\",\\n \\\"minimum\\\": 0\\n },\\n \\\"adoption_rate_pct\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"description\\\": \\\"Percentage of helper users who install this extension\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 100\\n },\\n \\\"internal_coupling_pct\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"description\\\": \\\"Percentage of code that uses helper internals\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 100\\n }\\n }\\n },\\n \\\"status\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"active\\\",\\n \\\"experimental\\\",\\n \\\"deprecated\\\",\\n \\\"graduated\\\"\\n ],\\n \\\"description\\\": \\\"Current lifecycle status of the module\\\"\\n },\\n \\\"added_version\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Version when module was added\\\",\\n \\\"pattern\\\": \\\"^\\\\\\\\d+\\\\\\\\.\\\\\\\\d+\\\\\\\\.\\\\\\\\d+$\\\"\\n },\\n \\\"sunset_date\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"date\\\",\\n \\\"description\\\": \\\"ISO 8601 date when module must graduate or be removed (specialized only)\\\"\\n }\\n },\\n \\\"allOf\\\": [\\n {\\n \\\"if\\\": {\\n \\\"properties\\\": {\\n \\\"tier\\\": {\\n \\\"const\\\": \\\"core\\\"\\n }\\n }\\n },\\n \\\"then\\\": {\\n \\\"properties\\\": {\\n \\\"languages\\\": {\\n \\\"properties\\\": {\\n \\\"go\\\": {\\n \\\"properties\\\": {\\n \\\"status\\\": {\\n \\\"not\\\": {\\n \\\"const\\\": \\\"na\\\"\\n }\\n },\\n \\\"tier_override\\\": {\\n \\\"not\\\": {}\\n }\\n }\\n },\\n \\\"python\\\": {\\n \\\"properties\\\": {\\n \\\"status\\\": {\\n \\\"not\\\": {\\n \\\"const\\\": \\\"na\\\"\\n }\\n },\\n \\\"tier_override\\\": {\\n \\\"not\\\": {}\\n }\\n }\\n },\\n \\\"typescript\\\": {\\n \\\"properties\\\": {\\n \\\"status\\\": {\\n \\\"not\\\": {\\n \\\"const\\\": \\\"na\\\"\\n }\\n },\\n \\\"tier_override\\\": {\\n \\\"not\\\": {}\\n }\\n }\\n }\\n }\\n }\\n }\\n }\\n },\\n {\\n \\\"if\\\": {\\n \\\"properties\\\": {\\n \\\"tier\\\": {\\n \\\"const\\\": \\\"specialized\\\"\\n }\\n }\\n },\\n \\\"then\\\": {\\n \\\"required\\\": [\\n \\\"graduation_metrics\\\",\\n \\\"sunset_date\\\"\\n ]\\n }\\n }\\n ],\\n \\\"$defs\\\": {\\n \\\"languageImplementation\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"status\\\"\\n ],\\n \\\"additionalProperties\\\": false,\\n \\\"properties\\\": {\\n \\\"status\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"available\\\",\\n \\\"planned\\\",\\n \\\"na\\\"\\n ],\\n \\\"description\\\": \\\"Implementation status for this language\\\"\\n },\\n \\\"tier_override\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"core\\\",\\n \\\"common\\\",\\n \\\"specialized\\\"\\n ],\\n \\\"description\\\": \\\"Override default tier for this language (not allowed for core modules)\\\"\\n },\\n \\\"package\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Package path/name (required if status is available)\\\"\\n },\\n \\\"version\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Version when module became available in this language\\\",\\n \\\"pattern\\\": \\\"^\\\\\\\\d+\\\\\\\\.\\\\\\\\d+\\\\\\\\.\\\\\\\\d+$\\\"\\n },\\n \\\"implementation\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"How this module is implemented (e.g., 'Wraps stdlib X', 'Custom implementation using Y', 'Wraps third-party Z')\\\",\\n \\\"minLength\\\": 10\\n },\\n \\\"notes\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Language-specific build guidance (e.g., 'pulls jsonschema tree; must be feature-gated')\\\"\\n },\\n \\\"extras\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Python extras that include this module\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"uniqueItems\\\": true\\n },\\n \\\"optional_deps\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"TypeScript optional dependencies needed for this module\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"uniqueItems\\\": true\\n },\\n \\\"rationale\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Rationale for tier_override or na status\\\",\\n \\\"minLength\\\": 10\\n }\\n },\\n \\\"allOf\\\": [\\n {\\n \\\"if\\\": {\\n \\\"properties\\\": {\\n \\\"status\\\": {\\n \\\"const\\\": \\\"available\\\"\\n }\\n }\\n },\\n \\\"then\\\": {\\n \\\"required\\\": [\\n \\\"package\\\",\\n \\\"version\\\"\\n ]\\n }\\n },\\n {\\n \\\"if\\\": {\\n \\\"anyOf\\\": [\\n {\\n \\\"properties\\\": {\\n \\\"tier_override\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n }\\n },\\n {\\n \\\"properties\\\": {\\n \\\"status\\\": {\\n \\\"const\\\": \\\"na\\\"\\n }\\n }\\n }\\n ]\\n },\\n \\\"then\\\": {\\n \\\"required\\\": [\\n \\\"rationale\\\"\\n ]\\n }\\n }\\n ]\\n }\\n }\\n}\\n\",\n \"schemas/crucible-ts/taxonomy/repository-category/v1.0.0/category-key.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/taxonomy/repository-category/v1.0.0/category-key.schema.json\\\",\\n \\\"title\\\": \\\"Fulmen Repository Category Key\\\",\\n \\\"description\\\": \\\"Enum of canonical Fulmen repository category identifiers. Keys are opaque strings; hyphenated keys normalize to camelCase (spec-host → specHost) or SCREAMING_SNAKE (spec-host → SPEC_HOST) for code generation.\\\",\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"cli\\\",\\n \\\"codex\\\",\\n \\\"doc-host\\\",\\n \\\"fixture\\\",\\n \\\"library\\\",\\n \\\"microtool\\\",\\n \\\"missive\\\",\\n \\\"pipeline\\\",\\n \\\"sdk\\\",\\n \\\"service\\\",\\n \\\"spec-host\\\",\\n \\\"workhorse\\\"\\n ],\\n \\\"examples\\\": [\\n \\\"workhorse\\\",\\n \\\"fixture\\\",\\n \\\"spec-host\\\",\\n \\\"doc-host\\\",\\n \\\"missive\\\"\\n ]\\n}\\n\",\n \"schemas/crucible-ts/taxonomy/repository-category/v1.0.0/category-metadata.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/taxonomy/repository-category/v1.0.0/category-metadata.schema.json\\\",\\n \\\"title\\\": \\\"Fulmen Repository Category Metadata\\\",\\n \\\"description\\\": \\\"Metadata object describing Fulmen repository category requirements\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"key\\\": {\\n \\\"$ref\\\": \\\"category-key.schema.json\\\"\\n },\\n \\\"summary\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"One-line description of the category\\\"\\n },\\n \\\"primaryEntryPoints\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Primary binaries, commands, or endpoints exposed by this category\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n },\\n \\\"typicalConsumers\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Representative users or systems consuming repositories of this category\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n },\\n \\\"notes\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Optional free-form notes about additional requirements\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"key\\\",\\n \\\"summary\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n}\\n\",\n \"schemas/crucible-ts/tooling/external-tools/v1.0.0/external-tools-manifest.schema.yaml\": \"$schema: https://json-schema.org/draft/2020-12/schema\\n$id: https://schemas.fulmenhq.dev/tooling/external-tools/manifest-v1.0.0.json\\ntitle: Fulmen External Tools Manifest\\ndescription: Defines external tooling prerequisites for repositories.\\ntype: object\\nrequired:\\n - version\\n - tools\\nproperties:\\n version:\\n type: string\\n description: Manifest version identifier.\\n binDir:\\n type: string\\n description: Default directory for installed binaries (relative path allowed).\\n tools:\\n type: array\\n description: Tool requirements.\\n items:\\n $ref: '#/$defs/tool'\\nadditionalProperties: false\\n$defs:\\n tool:\\n type: object\\n required:\\n - id\\n - install\\n properties:\\n id:\\n type: string\\n pattern: '^[a-z0-9\\\\-]+$'\\n description: Unique identifier for the tool.\\n description:\\n type: string\\n required:\\n type: boolean\\n default: true\\n install:\\n $ref: '#/$defs/install'\\n additionalProperties: false\\n install:\\n type: object\\n required:\\n - type\\n properties:\\n type:\\n type: string\\n enum: [go, verify, download, link]\\n module:\\n type: string\\n description: Go module path (for type=go).\\n version:\\n type: string\\n description: Version tag for go install (SemVer or CalVer).\\n binName:\\n type: string\\n description: Binary name (defaults to tool id).\\n destination:\\n type: string\\n description: Directory for installed binary.\\n command:\\n type: string\\n description: Command to verify on PATH (for type=verify).\\n url:\\n type: string\\n format: uri\\n description: Remote artifact URL (for type=download).\\n source:\\n type: string\\n description: Local file path to copy from (for type=link).\\n checksum:\\n oneOf:\\n - type: string\\n pattern: '^[a-f0-9]{64}$'\\n description: Single checksum for all platforms\\n - type: object\\n patternProperties:\\n '^(darwin|linux|windows)-(amd64|arm64)$':\\n type: string\\n pattern: '^[a-f0-9]{64}$'\\n description: Platform-specific checksums keyed by os-arch\\n description: SHA-256 checksum(s) (hex) for downloaded artifacts. Highly recommended for security. Use object form for platform-specific binaries.\\n additionalProperties: false\\n\",\n \"schemas/crucible-ts/upstream/3leaps/crucible/schemas/agentic/v0/role-prompt.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.3leaps.dev/agentic/v0/role-prompt.schema.json\\\",\\n \\\"title\\\": \\\"Agentic Role Prompt\\\",\\n \\\"description\\\": \\\"Schema for AI coding agent role prompts. Defines structured role definitions that guide AI assistants working in repositories.\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\n \\\"slug\\\",\\n \\\"name\\\",\\n \\\"description\\\",\\n \\\"version\\\",\\n \\\"status\\\",\\n \\\"scope\\\",\\n \\\"responsibilities\\\",\\n \\\"escalates_to\\\",\\n \\\"does_not\\\"\\n ],\\n \\\"properties\\\": {\\n \\\"slug\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[a-z][a-z0-9]*$\\\",\\n \\\"minLength\\\": 2,\\n \\\"maxLength\\\": 16,\\n \\\"description\\\": \\\"Role identifier (lowercase letters/numbers, no hyphens). Examples: devlead, secrev, infoarch\\\"\\n },\\n \\\"name\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 64,\\n \\\"description\\\": \\\"Human-readable role name. Example: Development Lead\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"minLength\\\": 10,\\n \\\"maxLength\\\": 256,\\n \\\"description\\\": \\\"One-line description of the role's purpose\\\"\\n },\\n \\\"version\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[0-9]+\\\\\\\\.[0-9]+\\\\\\\\.[0-9]+$\\\",\\n \\\"description\\\": \\\"Semantic version for role prompt evolution\\\"\\n },\\n \\\"author\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"maxLength\\\": 64,\\n \\\"description\\\": \\\"Role prompt author (role slug or human identifier)\\\"\\n },\\n \\\"status\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\\"draft\\\", \\\"review\\\", \\\"approved\\\", \\\"deprecated\\\"],\\n \\\"description\\\": \\\"Role prompt lifecycle status\\\"\\n },\\n \\\"category\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"agentic\\\",\\n \\\"analytics\\\",\\n \\\"automation\\\",\\n \\\"consulting\\\",\\n \\\"governance\\\",\\n \\\"marketing\\\",\\n \\\"review\\\"\\n ],\\n \\\"description\\\": \\\"Role category for organization\\\"\\n },\\n \\\"tags\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[a-z][a-z0-9-]*$\\\"\\n },\\n \\\"description\\\": \\\"Searchable tags for the role\\\"\\n },\\n \\\"domains\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"analytics\\\",\\n \\\"architecture\\\",\\n \\\"automation\\\",\\n \\\"consulting\\\",\\n \\\"coordination\\\",\\n \\\"delivery\\\",\\n \\\"development\\\",\\n \\\"documentation\\\",\\n \\\"governance\\\",\\n \\\"implementation\\\",\\n \\\"marketing\\\",\\n \\\"product\\\",\\n \\\"quality\\\",\\n \\\"security\\\",\\n \\\"strategy\\\"\\n ]\\n },\\n \\\"minItems\\\": 1,\\n \\\"maxItems\\\": 3,\\n \\\"description\\\": \\\"Process domains this role operates in (1-3). Used for organizational categorization beyond technical functions.\\\"\\n },\\n \\\"extends\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"uri\\\",\\n \\\"description\\\": \\\"URL to base role this extends\\\"\\n },\\n \\\"context\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"When to use this role, distinct from similar roles\\\"\\n },\\n \\\"scope\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"minItems\\\": 1,\\n \\\"description\\\": \\\"What this role covers - boundaries of responsibility\\\"\\n },\\n \\\"mindset\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"focus\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": \\\"Key questions to ask, thinking patterns\\\"\\n },\\n \\\"principles\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": \\\"Guiding principles for this role\\\"\\n }\\n },\\n \\\"description\\\": \\\"Context engineering - shapes how the agent approaches problems\\\"\\n },\\n \\\"responsibilities\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"minItems\\\": 1,\\n \\\"description\\\": \\\"Specific tasks and duties\\\"\\n },\\n \\\"escalates_to\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"#/$defs/escalation\\\"\\n },\\n \\\"minItems\\\": 1,\\n \\\"description\\\": \\\"When and to whom to escalate\\\"\\n },\\n \\\"does_not\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"minItems\\\": 1,\\n \\\"description\\\": \\\"Explicit exclusions and out-of-scope items\\\"\\n },\\n \\\"examples\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"#/$defs/example\\\"\\n },\\n \\\"description\\\": \\\"Concrete examples of role application\\\"\\n },\\n \\\"checklists\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n },\\n \\\"description\\\": \\\"Named checklists for common tasks\\\"\\n },\\n \\\"pre_push_checklist\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": \\\"Checklist of validations to perform before pushing changes\\\"\\n },\\n \\\"required_reading\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Explanation of what should be read and why\\\"\\n },\\n \\\"pattern\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Guidance on where to find required reading (project-specific)\\\"\\n }\\n },\\n \\\"description\\\": \\\"Documents that must be read before starting work in this role\\\"\\n },\\n \\\"cross_role_note\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Guidance on coordination with other roles\\\"\\n }\\n },\\n \\\"additionalProperties\\\": false,\\n \\\"$defs\\\": {\\n \\\"escalation\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\\"target\\\", \\\"when\\\"],\\n \\\"properties\\\": {\\n \\\"target\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Who to escalate to (role slug, 'human maintainers', etc.)\\\"\\n },\\n \\\"when\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Conditions that trigger escalation\\\"\\n }\\n },\\n \\\"additionalProperties\\\": false\\n },\\n \\\"example\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\\"type\\\", \\\"content\\\"],\\n \\\"properties\\\": {\\n \\\"type\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\\"commit\\\", \\\"review\\\", \\\"checklist\\\", \\\"other\\\"],\\n \\\"description\\\": \\\"Type of example\\\"\\n },\\n \\\"title\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Example title\\\"\\n },\\n \\\"content\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Example content (may be multi-line)\\\"\\n }\\n },\\n \\\"additionalProperties\\\": false\\n }\\n }\\n}\\n\",\n \"schemas/crucible-ts/upstream/3leaps/crucible/schemas/ailink/v0/prompt.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.3leaps.dev/ailink/v0/prompt.schema.json\\\",\\n \\\"title\\\": \\\"AILink Prompt Configuration\\\",\\n \\\"description\\\": \\\"Schema for AILink prompt configuration files. Prompts define how AI backends process requests, including input variables, tools, and response validation.\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\\"slug\\\", \\\"name\\\", \\\"description\\\", \\\"version\\\"],\\n \\\"properties\\\": {\\n \\\"slug\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[a-z0-9][a-z0-9-]*[a-z0-9]$|^[a-z0-9]$\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 64,\\n \\\"description\\\": \\\"Unique identifier for the prompt (lowercase alphanumeric with hyphens)\\\"\\n },\\n \\\"name\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 128,\\n \\\"description\\\": \\\"Human-readable display name\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 512,\\n \\\"description\\\": \\\"Brief description of what this prompt does\\\"\\n },\\n \\\"version\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[0-9]+\\\\\\\\.[0-9]+\\\\\\\\.[0-9]+$\\\",\\n \\\"description\\\": \\\"Semantic version for prompt content evolution\\\"\\n },\\n \\\"author\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"maxLength\\\": 64,\\n \\\"description\\\": \\\"Prompt author or maintainer\\\"\\n },\\n \\\"updated\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"date\\\",\\n \\\"description\\\": \\\"Last update date (YYYY-MM-DD)\\\"\\n },\\n \\\"input\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Input specification for prompt variables\\\",\\n \\\"properties\\\": {\\n \\\"required_variables\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[a-z][a-z0-9_]*$\\\"\\n },\\n \\\"description\\\": \\\"Variables that must be provided\\\"\\n },\\n \\\"optional_variables\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[a-z][a-z0-9_]*$\\\"\\n },\\n \\\"description\\\": \\\"Optional variables with defaults\\\"\\n },\\n \\\"accepts_images\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"default\\\": false,\\n \\\"description\\\": \\\"Whether this prompt accepts image input\\\"\\n },\\n \\\"image_types\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\\"image/png\\\", \\\"image/jpeg\\\", \\\"image/webp\\\", \\\"image/gif\\\"]\\n },\\n \\\"description\\\": \\\"Accepted image MIME types (if accepts_images is true)\\\"\\n },\\n \\\"max_images\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 1,\\n \\\"maximum\\\": 20,\\n \\\"default\\\": 1,\\n \\\"description\\\": \\\"Maximum number of images allowed\\\"\\n }\\n },\\n \\\"additionalProperties\\\": false\\n },\\n \\\"system_template\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"minLength\\\": 1,\\n \\\"description\\\": \\\"System prompt template with {{variable}} placeholders\\\"\\n },\\n \\\"user_template\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"default\\\": \\\"{{input}}\\\",\\n \\\"description\\\": \\\"User prompt template (optional)\\\"\\n },\\n \\\"depth_variants\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": \\\"Keyed user prompt variants (e.g., quick, deep, thorough)\\\"\\n },\\n \\\"tools\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"#/$defs/tool\\\"\\n },\\n \\\"description\\\": \\\"Server-side tools the prompt may use\\\"\\n },\\n \\\"response_schema\\\": {\\n \\\"anyOf\\\": [\\n {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Inline JSONSchema for response validation\\\"\\n },\\n {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\\"$ref\\\"],\\n \\\"properties\\\": {\\n \\\"$ref\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Reference to external schema\\\"\\n }\\n },\\n \\\"additionalProperties\\\": false\\n }\\n ],\\n \\\"description\\\": \\\"JSONSchema for expected response structure\\\"\\n },\\n \\\"response_options\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"may_include_images\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"default\\\": false,\\n \\\"description\\\": \\\"Whether response may contain images\\\"\\n },\\n \\\"image_types\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": \\\"Expected image MIME types in response\\\"\\n }\\n },\\n \\\"additionalProperties\\\": false\\n },\\n \\\"provider_hints\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"preferred_models\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": \\\"Models known to work well with this prompt\\\"\\n },\\n \\\"min_context_window\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 1000,\\n \\\"description\\\": \\\"Minimum context window size needed\\\"\\n },\\n \\\"supports_tools\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"default\\\": true,\\n \\\"description\\\": \\\"Whether this prompt benefits from tool use\\\"\\n }\\n },\\n \\\"additionalProperties\\\": false\\n }\\n },\\n \\\"additionalProperties\\\": false,\\n \\\"$defs\\\": {\\n \\\"tool\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\\"type\\\"],\\n \\\"properties\\\": {\\n \\\"type\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Tool type identifier (e.g., web_search, x_search, code_execution)\\\"\\n },\\n \\\"config\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Tool-specific configuration\\\"\\n }\\n },\\n \\\"additionalProperties\\\": false\\n }\\n }\\n}\\n\",\n \"schemas/crucible-ts/upstream/3leaps/crucible/schemas/ailink/v0/search-response.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.3leaps.dev/ailink/v0/search-response.schema.json\\\",\\n \\\"title\\\": \\\"AILink Search Response\\\",\\n \\\"description\\\": \\\"Base schema for AILink search/analysis response validation. Extensible for domain-specific responses.\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\\"summary\\\"],\\n \\\"properties\\\": {\\n \\\"summary\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"minLength\\\": 1,\\n \\\"description\\\": \\\"Concise overall assessment\\\"\\n },\\n \\\"risk_level\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\\"low\\\", \\\"medium\\\", \\\"high\\\", \\\"critical\\\", \\\"unknown\\\"],\\n \\\"description\\\": \\\"Overall risk assessment\\\"\\n },\\n \\\"confidence\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 1,\\n \\\"description\\\": \\\"Model's confidence in the assessment (0-1)\\\"\\n },\\n \\\"insights\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": \\\"Key findings as bullet points\\\"\\n },\\n \\\"mentions\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"#/$defs/mention\\\"\\n },\\n \\\"description\\\": \\\"Relevant mentions found during search\\\"\\n },\\n \\\"recommendations\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": \\\"Actionable recommendations\\\"\\n },\\n \\\"attachments\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"#/$defs/attachment\\\"\\n },\\n \\\"description\\\": \\\"Images or other media in response\\\"\\n }\\n },\\n \\\"additionalProperties\\\": true,\\n \\\"$defs\\\": {\\n \\\"mention\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\\"source\\\", \\\"description\\\"],\\n \\\"properties\\\": {\\n \\\"source\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\\"web\\\", \\\"news\\\", \\\"social\\\", \\\"github\\\", \\\"registry\\\", \\\"trademark\\\", \\\"other\\\"],\\n \\\"description\\\": \\\"Source type of the mention\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Brief summary of the finding\\\"\\n },\\n \\\"url\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"uri\\\",\\n \\\"description\\\": \\\"URL to the source (if available)\\\"\\n },\\n \\\"relevance\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\\"high\\\", \\\"medium\\\", \\\"low\\\"],\\n \\\"description\\\": \\\"Relevance to the query\\\"\\n },\\n \\\"sentiment\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\\"positive\\\", \\\"neutral\\\", \\\"negative\\\", \\\"mixed\\\"],\\n \\\"description\\\": \\\"Sentiment of the mention\\\"\\n },\\n \\\"date\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"date-time\\\",\\n \\\"description\\\": \\\"When the mention was found or published\\\"\\n }\\n },\\n \\\"additionalProperties\\\": true\\n },\\n \\\"attachment\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\\"type\\\"],\\n \\\"properties\\\": {\\n \\\"type\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"IANA media type (e.g., image/png)\\\"\\n },\\n \\\"data\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"contentEncoding\\\": \\\"base64\\\",\\n \\\"description\\\": \\\"Base64-encoded binary data\\\"\\n },\\n \\\"url\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"uri\\\",\\n \\\"description\\\": \\\"URL reference (alternative to inline data)\\\"\\n },\\n \\\"name\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Filename if applicable\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Description or alt text\\\"\\n }\\n },\\n \\\"additionalProperties\\\": true\\n }\\n }\\n}\\n\",\n \"schemas/crucible-ts/upstream/3leaps/crucible/schemas/classifiers/v0/dimension-definition.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.3leaps.dev/classifiers/v0/dimension-definition.schema.json\\\",\\n \\\"title\\\": \\\"Classifier Dimension Definition\\\",\\n \\\"description\\\": \\\"Meta-schema for defining classifier dimensions. Dimensions are orthogonal classification axes that can be applied to datasets, artifacts, or other entities.\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\\"key\\\", \\\"name\\\", \\\"version\\\", \\\"status\\\", \\\"type\\\", \\\"description\\\"],\\n \\\"properties\\\": {\\n \\\"$schema\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"uri\\\",\\n \\\"description\\\": \\\"Reference to this meta-schema\\\"\\n },\\n \\\"key\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[a-z][a-z0-9-]*$\\\",\\n \\\"minLength\\\": 2,\\n \\\"maxLength\\\": 32,\\n \\\"description\\\": \\\"Machine-readable dimension identifier (lowercase, hyphens allowed)\\\"\\n },\\n \\\"name\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 64,\\n \\\"description\\\": \\\"Human-readable dimension name\\\"\\n },\\n \\\"version\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[0-9]+\\\\\\\\.[0-9]+\\\\\\\\.[0-9]+$\\\",\\n \\\"description\\\": \\\"Semantic version of the dimension definition\\\"\\n },\\n \\\"status\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\\"draft\\\", \\\"review\\\", \\\"stable\\\", \\\"deprecated\\\"],\\n \\\"description\\\": \\\"Lifecycle status of the dimension\\\"\\n },\\n \\\"type\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\\"categorical\\\", \\\"sortable\\\", \\\"numeric\\\", \\\"boolean\\\"],\\n \\\"description\\\": \\\"Dimension value type: categorical (unordered), sortable (ordered), numeric (continuous), boolean\\\"\\n },\\n \\\"cardinality\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\\"single\\\", \\\"multiple\\\"],\\n \\\"default\\\": \\\"single\\\",\\n \\\"description\\\": \\\"Whether entities can have one or multiple values for this dimension\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"minLength\\\": 10,\\n \\\"maxLength\\\": 512,\\n \\\"description\\\": \\\"Purpose and usage of this dimension\\\"\\n },\\n \\\"categorical\\\": {\\n \\\"$ref\\\": \\\"#/$defs/categorical_config\\\",\\n \\\"description\\\": \\\"Configuration for categorical dimensions\\\"\\n },\\n \\\"sortable\\\": {\\n \\\"$ref\\\": \\\"#/$defs/sortable_config\\\",\\n \\\"description\\\": \\\"Configuration for sortable (ordered) dimensions\\\"\\n },\\n \\\"transitions\\\": {\\n \\\"$ref\\\": \\\"#/$defs/transitions\\\",\\n \\\"description\\\": \\\"Valid state transitions between dimension values\\\"\\n },\\n \\\"governance\\\": {\\n \\\"$ref\\\": \\\"#/$defs/governance\\\",\\n \\\"description\\\": \\\"Ownership and review metadata\\\"\\n },\\n \\\"examples\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"#/$defs/example\\\"\\n },\\n \\\"description\\\": \\\"Usage examples\\\"\\n }\\n },\\n \\\"additionalProperties\\\": false,\\n \\\"$defs\\\": {\\n \\\"categorical_config\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\\"values\\\"],\\n \\\"properties\\\": {\\n \\\"values\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"#/$defs/categorical_value\\\"\\n },\\n \\\"minItems\\\": 2,\\n \\\"description\\\": \\\"Allowed values for this dimension\\\"\\n },\\n \\\"index_strategy\\\": {\\n \\\"$ref\\\": \\\"#/$defs/index_strategy\\\",\\n \\\"description\\\": \\\"Ordering and indexing configuration\\\"\\n }\\n },\\n \\\"additionalProperties\\\": false\\n },\\n \\\"categorical_value\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\\"key\\\", \\\"label\\\", \\\"description\\\", \\\"order\\\"],\\n \\\"properties\\\": {\\n \\\"key\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[a-z0-9][a-z0-9-]*$\\\",\\n \\\"description\\\": \\\"Machine-readable value identifier\\\"\\n },\\n \\\"label\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Human-readable display label\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Brief description of this value\\\"\\n },\\n \\\"order\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"description\\\": \\\"Sort order (lower = first)\\\"\\n },\\n \\\"is_none\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"default\\\": false,\\n \\\"description\\\": \\\"Whether this represents a null/none/default state\\\"\\n },\\n \\\"synonyms\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": \\\"Alternative names that map to this value\\\"\\n }\\n },\\n \\\"additionalProperties\\\": false\\n },\\n \\\"sortable_config\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\\"scale\\\", \\\"ordered_values\\\"],\\n \\\"properties\\\": {\\n \\\"scale\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\\"ordinal\\\", \\\"interval\\\", \\\"ratio\\\"],\\n \\\"description\\\": \\\"Measurement scale type\\\"\\n },\\n \\\"order_direction\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\\"asc\\\", \\\"desc\\\"],\\n \\\"default\\\": \\\"asc\\\",\\n \\\"description\\\": \\\"Default sort direction\\\"\\n },\\n \\\"ordered_values\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"#/$defs/categorical_value\\\"\\n },\\n \\\"minItems\\\": 2,\\n \\\"description\\\": \\\"Values in their natural order\\\"\\n }\\n },\\n \\\"additionalProperties\\\": false\\n },\\n \\\"index_strategy\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"default_order\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": \\\"Default sort order of value keys\\\"\\n },\\n \\\"ordinal_mapping\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": {\\n \\\"type\\\": \\\"integer\\\"\\n },\\n \\\"description\\\": \\\"Numeric ordinal for each value key\\\"\\n },\\n \\\"missing_handling\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\\"use_default\\\", \\\"error\\\", \\\"skip\\\"],\\n \\\"default\\\": \\\"use_default\\\",\\n \\\"description\\\": \\\"How to handle missing values\\\"\\n },\\n \\\"sentinel\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"description\\\": \\\"Ordinal value for missing/unknown\\\"\\n }\\n },\\n \\\"additionalProperties\\\": false\\n },\\n \\\"transitions\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"downgrade\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": \\\"Valid downgrade paths (e.g., '4-personal->2-blinded')\\\"\\n },\\n \\\"upgrade\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": \\\"Valid upgrade paths\\\"\\n }\\n },\\n \\\"additionalProperties\\\": false\\n },\\n \\\"governance\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"owner\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Owning team or individual\\\"\\n },\\n \\\"reviewers\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"description\\\": \\\"Required reviewers for changes\\\"\\n },\\n \\\"review_cycle\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\\"monthly\\\", \\\"quarterly\\\", \\\"semiannual\\\", \\\"annual\\\"],\\n \\\"description\\\": \\\"Review cadence\\\"\\n },\\n \\\"last_updated\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"date\\\",\\n \\\"description\\\": \\\"Last review/update date\\\"\\n }\\n },\\n \\\"additionalProperties\\\": false\\n },\\n \\\"example\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"required\\\": [\\\"value\\\"],\\n \\\"properties\\\": {\\n \\\"dataset\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Dataset identifier\\\"\\n },\\n \\\"path\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"File path\\\"\\n },\\n \\\"value\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Dimension value\\\"\\n }\\n },\\n \\\"additionalProperties\\\": false\\n }\\n }\\n}\\n\",\n \"schemas/crucible-ts/upstream/3leaps/crucible/schemas/classifiers/v0/sensitivity-level.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.3leaps.dev/classifiers/v0/sensitivity-level.schema.json\\\",\\n \\\"title\\\": \\\"Data Sensitivity Level\\\",\\n \\\"description\\\": \\\"Standardized sensitivity level enumeration for data classification across 3leaps ecosystems. Levels range from 0 (Public) to 6 (Eyes Only), with UNKNOWN for unclassified data.\\\",\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"unknown\\\",\\n \\\"0-public\\\",\\n \\\"1-confidential\\\",\\n \\\"2-blinded\\\",\\n \\\"3-proprietary\\\",\\n \\\"4-personal\\\",\\n \\\"5-privileged\\\",\\n \\\"6-eyes-only\\\"\\n ],\\n \\\"$defs\\\": {\\n \\\"labels\\\": {\\n \\\"description\\\": \\\"Human-readable labels for each sensitivity level\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"unknown\\\": {\\n \\\"const\\\": \\\"UNKNOWN\\\"\\n },\\n \\\"0-public\\\": {\\n \\\"const\\\": \\\"0 — Public\\\"\\n },\\n \\\"1-confidential\\\": {\\n \\\"const\\\": \\\"1 — Confidential\\\"\\n },\\n \\\"2-blinded\\\": {\\n \\\"const\\\": \\\"2 — Blinded\\\"\\n },\\n \\\"3-proprietary\\\": {\\n \\\"const\\\": \\\"3 — Proprietary\\\"\\n },\\n \\\"4-personal\\\": {\\n \\\"const\\\": \\\"4 — Personal/Secret\\\"\\n },\\n \\\"5-privileged\\\": {\\n \\\"const\\\": \\\"5 — Privileged/Sysadmin\\\"\\n },\\n \\\"6-eyes-only\\\": {\\n \\\"const\\\": \\\"6 — Eyes Only/Legal Hold\\\"\\n }\\n }\\n },\\n \\\"ordinal_mapping\\\": {\\n \\\"description\\\": \\\"Ordinal values for comparator operations (lte/gte). Higher values indicate more restrictive sensitivity.\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"unknown\\\": {\\n \\\"const\\\": 0,\\n \\\"description\\\": \\\"Sentinel for unclassified data\\\"\\n },\\n \\\"0-public\\\": {\\n \\\"const\\\": 1\\n },\\n \\\"1-confidential\\\": {\\n \\\"const\\\": 2\\n },\\n \\\"2-blinded\\\": {\\n \\\"const\\\": 3\\n },\\n \\\"3-proprietary\\\": {\\n \\\"const\\\": 4\\n },\\n \\\"4-personal\\\": {\\n \\\"const\\\": 5\\n },\\n \\\"5-privileged\\\": {\\n \\\"const\\\": 6\\n },\\n \\\"6-eyes-only\\\": {\\n \\\"const\\\": 7\\n }\\n }\\n },\\n \\\"level_descriptions\\\": {\\n \\\"description\\\": \\\"Brief descriptions of each sensitivity level\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"unknown\\\": {\\n \\\"const\\\": \\\"Unclassified; isolate until classified within 24 hours\\\"\\n },\\n \\\"0-public\\\": {\\n \\\"const\\\": \\\"Public domain or intended for public distribution\\\"\\n },\\n \\\"1-confidential\\\": {\\n \\\"const\\\": \\\"Internal but non-sensitive; NDA-level protection, access logged\\\"\\n },\\n \\\"2-blinded\\\": {\\n \\\"const\\\": \\\"Identities/source obfuscated; verify blinding effectiveness\\\"\\n },\\n \\\"3-proprietary\\\": {\\n \\\"const\\\": \\\"Enterprise-sensitive (MNPI, trade secrets); strict least-privilege\\\"\\n },\\n \\\"4-personal\\\": {\\n \\\"const\\\": \\\"NPPII or secrets; vault-managed only, real-time monitoring\\\"\\n },\\n \\\"5-privileged\\\": {\\n \\\"const\\\": \\\"Platform control data (sysadmin); HSM/air-gapped isolation\\\"\\n },\\n \\\"6-eyes-only\\\": {\\n \\\"const\\\": \\\"Legal hold or extreme restriction; immutable storage, exec authorization\\\"\\n }\\n }\\n }\\n }\\n}\\n\",\n \"schemas/crucible-ts/upstream/3leaps/crucible/schemas/foundation/v0/error-response.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.3leaps.dev/foundation/v0/error-response.schema.json\\\",\\n \\\"title\\\": \\\"Error Response\\\",\\n \\\"description\\\": \\\"Standard error response structure for APIs and CLIs across 3leaps ecosystems\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"code\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[A-Z][A-Z0-9_]*$\\\",\\n \\\"description\\\": \\\"Machine-readable error code (uppercase with underscores)\\\",\\n \\\"examples\\\": [\\\"VALIDATION_ERROR\\\", \\\"NOT_FOUND\\\", \\\"AUTHENTICATION_FAILED\\\", \\\"RATE_LIMITED\\\"]\\n },\\n \\\"message\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"minLength\\\": 1,\\n \\\"description\\\": \\\"Human-readable error message\\\"\\n },\\n \\\"details\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Additional structured error details (context-specific)\\\",\\n \\\"additionalProperties\\\": true\\n },\\n \\\"path\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Path to the field or resource that caused the error\\\",\\n \\\"examples\\\": [\\\"$.config.port\\\", \\\"/api/v1/users/123\\\"]\\n },\\n \\\"timestamp\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"date-time\\\",\\n \\\"description\\\": \\\"When the error occurred (ISO 8601)\\\"\\n },\\n \\\"requestId\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Correlation ID for tracing (if applicable)\\\"\\n }\\n },\\n \\\"required\\\": [\\\"code\\\", \\\"message\\\"],\\n \\\"additionalProperties\\\": false,\\n \\\"examples\\\": [\\n {\\n \\\"code\\\": \\\"VALIDATION_ERROR\\\",\\n \\\"message\\\": \\\"Invalid configuration\\\",\\n \\\"details\\\": {\\n \\\"field\\\": \\\"port\\\",\\n \\\"reason\\\": \\\"must be between 1 and 65535\\\"\\n },\\n \\\"path\\\": \\\"$.config.port\\\"\\n },\\n {\\n \\\"code\\\": \\\"NOT_FOUND\\\",\\n \\\"message\\\": \\\"Resource not found\\\",\\n \\\"path\\\": \\\"/api/v1/users/123\\\",\\n \\\"timestamp\\\": \\\"2024-12-28T10:30:00Z\\\",\\n \\\"requestId\\\": \\\"req_abc123\\\"\\n }\\n ]\\n}\\n\",\n \"schemas/crucible-ts/upstream/3leaps/crucible/schemas/foundation/v0/lifecycle-phases.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.3leaps.dev/foundation/v0/lifecycle-phases.schema.json\\\",\\n \\\"title\\\": \\\"Lifecycle Phases\\\",\\n \\\"description\\\": \\\"Schema defining repository and component lifecycle phases with canonical ordering\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"$schema\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"const\\\": \\\"https://schemas.3leaps.dev/foundation/v0/lifecycle-phases.schema.json\\\"\\n },\\n \\\"version\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[0-9]+\\\\\\\\.[0-9]+\\\\\\\\.[0-9]+$\\\",\\n \\\"description\\\": \\\"Schema version (SemVer)\\\"\\n },\\n \\\"phases\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Ordered list of lifecycle phases (index determines progression order)\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"#/$defs/phase\\\"\\n },\\n \\\"minItems\\\": 1\\n }\\n },\\n \\\"required\\\": [\\\"version\\\", \\\"phases\\\"],\\n \\\"additionalProperties\\\": false,\\n \\\"$defs\\\": {\\n \\\"phase\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"A lifecycle phase definition\\\",\\n \\\"properties\\\": {\\n \\\"id\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[a-z][a-z0-9-]*$\\\",\\n \\\"description\\\": \\\"Phase identifier (lowercase, used in LIFECYCLE_PHASE file)\\\"\\n },\\n \\\"order\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"description\\\": \\\"Explicit ordering for phase progression (0 = earliest)\\\"\\n },\\n \\\"label\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Human-readable label\\\"\\n },\\n \\\"description\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Detailed description of what this phase means\\\"\\n },\\n \\\"badge\\\": {\\n \\\"$ref\\\": \\\"#/$defs/badge\\\",\\n \\\"description\\\": \\\"Shields.io badge configuration\\\"\\n },\\n \\\"pr_policy\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\\"none\\\", \\\"internal\\\", \\\"invited\\\", \\\"community\\\", \\\"critical-only\\\"],\\n \\\"description\\\": \\\"Pull request acceptance policy\\\"\\n },\\n \\\"stability\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\\"unstable\\\", \\\"stabilizing\\\", \\\"stable\\\", \\\"frozen\\\"],\\n \\\"description\\\": \\\"API/schema stability expectation\\\"\\n }\\n },\\n \\\"required\\\": [\\\"id\\\", \\\"order\\\", \\\"label\\\", \\\"description\\\", \\\"badge\\\", \\\"pr_policy\\\", \\\"stability\\\"],\\n \\\"additionalProperties\\\": false\\n },\\n \\\"badge\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Shields.io badge configuration\\\",\\n \\\"properties\\\": {\\n \\\"color\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Badge color (shields.io color name or hex)\\\"\\n },\\n \\\"url\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"uri\\\",\\n \\\"description\\\": \\\"Pre-built badge URL\\\"\\n }\\n },\\n \\\"required\\\": [\\\"color\\\", \\\"url\\\"],\\n \\\"additionalProperties\\\": false\\n },\\n \\\"phase_id\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"planned\\\",\\n \\\"prototype\\\",\\n \\\"alpha\\\",\\n \\\"beta\\\",\\n \\\"stable\\\",\\n \\\"maintenance\\\",\\n \\\"deprecated\\\",\\n \\\"archived\\\"\\n ],\\n \\\"description\\\": \\\"Valid phase identifier\\\"\\n }\\n }\\n}\\n\",\n \"schemas/crucible-ts/upstream/3leaps/crucible/schemas/foundation/v0/release-phase.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.3leaps.dev/foundation/v0/release-phase.schema.json\\\",\\n \\\"title\\\": \\\"Release Phase\\\",\\n \\\"description\\\": \\\"Release cadence phase for distribution pipelines and policy gating. Tracks current deployment cycle state of a repository branch, complementing lifecycle-phases which tracks project maturity.\\\",\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\\"dev\\\", \\\"rc\\\", \\\"ga\\\", \\\"hotfix\\\"],\\n \\\"examples\\\": [\\\"dev\\\", \\\"rc\\\", \\\"ga\\\"],\\n \\\"$defs\\\": {\\n \\\"phase_descriptions\\\": {\\n \\\"dev\\\": \\\"Active development branch. CI runs tests but artifacts are not published to release channels.\\\",\\n \\\"rc\\\": \\\"Release candidate. Feature-frozen, undergoing final validation before GA. Artifacts may be published to pre-release channels.\\\",\\n \\\"ga\\\": \\\"General availability. Production-ready release. Artifacts published to stable release channels.\\\",\\n \\\"hotfix\\\": \\\"Urgent production fix. Bypasses normal release cadence for critical security or stability patches.\\\"\\n }\\n },\\n \\\"$comment\\\": \\\"Drives CI thresholds, artifact publishing, and policy gates. Unlike lifecycle-phases (project maturity), release-phase describes branch/tag state in the release pipeline.\\\"\\n}\\n\",\n \"schemas/crucible-ts/upstream/3leaps/crucible/schemas/foundation/v0/types.schema.json\": \"{\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"$id\\\": \\\"https://schemas.3leaps.dev/foundation/v0/types.schema.json\\\",\\n \\\"title\\\": \\\"3leaps Foundation Types\\\",\\n \\\"description\\\": \\\"Shared type definitions used across 3leaps and partner ecosystem schemas. Import via $ref.\\\",\\n \\\"$defs\\\": {\\n \\\"slug\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[a-z][a-z0-9]*(-[a-z0-9]+)*$\\\",\\n \\\"minLength\\\": 2,\\n \\\"maxLength\\\": 64,\\n \\\"description\\\": \\\"URL-safe lowercase identifier with hyphens\\\",\\n \\\"examples\\\": [\\\"my-project\\\", \\\"api-gateway\\\", \\\"user-service\\\"]\\n },\\n \\\"slugRef\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[a-z][a-z0-9]*(-[a-z0-9]+)*$\\\",\\n \\\"description\\\": \\\"Reference to a slug defined elsewhere\\\"\\n },\\n \\\"timestamp\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"date-time\\\",\\n \\\"description\\\": \\\"ISO 8601 timestamp with timezone (UTC preferred)\\\",\\n \\\"examples\\\": [\\\"2024-12-16T14:30:00Z\\\", \\\"2024-12-16T09:30:00-05:00\\\"]\\n },\\n \\\"semver\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^(0|[1-9]\\\\\\\\d*)\\\\\\\\.(0|[1-9]\\\\\\\\d*)\\\\\\\\.(0|[1-9]\\\\\\\\d*)(?:-((?:0|[1-9]\\\\\\\\d*|\\\\\\\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\\\\\\\.(?:0|[1-9]\\\\\\\\d*|\\\\\\\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\\\\\\\+([0-9a-zA-Z-]+(?:\\\\\\\\.[0-9a-zA-Z-]+)*))?$\\\",\\n \\\"description\\\": \\\"Semantic version string (SemVer 2.0.0)\\\",\\n \\\"examples\\\": [\\\"1.0.0\\\", \\\"2.1.0-beta.1\\\", \\\"18.1.3+build.456\\\"]\\n },\\n \\\"versionConstraint\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^(>=?|<=?|=|~|\\\\\\\\^)?\\\\\\\\d+(\\\\\\\\.\\\\\\\\d+)?(\\\\\\\\.\\\\\\\\d+)?$\\\",\\n \\\"description\\\": \\\"Version constraint for dependency resolution\\\",\\n \\\"examples\\\": [\\\">=1.0.0\\\", \\\"^2.0.0\\\", \\\"~18.1.0\\\", \\\"=3.0.0\\\"]\\n },\\n \\\"schemaVersion\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^\\\\\\\\d+\\\\\\\\.\\\\\\\\d+\\\\\\\\.\\\\\\\\d+$\\\",\\n \\\"description\\\": \\\"Semantic version of a schema this document conforms to\\\",\\n \\\"examples\\\": [\\\"1.0.0\\\", \\\"2.1.0\\\"]\\n },\\n \\\"url\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"uri\\\",\\n \\\"pattern\\\": \\\"^https?://\\\",\\n \\\"description\\\": \\\"HTTP or HTTPS URL\\\",\\n \\\"examples\\\": [\\\"https://example.com\\\", \\\"http://localhost:8000\\\"]\\n },\\n \\\"hostname\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"hostname\\\",\\n \\\"description\\\": \\\"Valid DNS hostname\\\",\\n \\\"examples\\\": [\\\"app.example.com\\\", \\\"api-01.internal\\\"]\\n },\\n \\\"domainName\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^([a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\\\\\\\.)+[a-zA-Z]{2,}$\\\",\\n \\\"description\\\": \\\"Fully qualified domain name\\\",\\n \\\"examples\\\": [\\\"example.com\\\", \\\"app.mycompany.io\\\"]\\n },\\n \\\"port\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 1,\\n \\\"maximum\\\": 65535,\\n \\\"description\\\": \\\"TCP/UDP port number\\\"\\n },\\n \\\"ipv4Address\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"ipv4\\\",\\n \\\"description\\\": \\\"IPv4 address\\\",\\n \\\"examples\\\": [\\\"192.168.1.1\\\", \\\"10.0.0.1\\\"]\\n },\\n \\\"ipv6Address\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"ipv6\\\",\\n \\\"description\\\": \\\"IPv6 address\\\"\\n },\\n \\\"cidrBlock\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^([0-9]{1,3}\\\\\\\\.){3}[0-9]{1,3}/[0-9]{1,2}$\\\",\\n \\\"description\\\": \\\"IPv4 CIDR notation\\\",\\n \\\"examples\\\": [\\\"10.0.0.0/8\\\", \\\"192.168.1.0/24\\\", \\\"0.0.0.0/0\\\"]\\n },\\n \\\"emailAddress\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"email\\\",\\n \\\"description\\\": \\\"Email address\\\"\\n },\\n \\\"filePath\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^/[^\\\\\\\\0]*$\\\",\\n \\\"description\\\": \\\"Absolute POSIX file path\\\",\\n \\\"examples\\\": [\\\"/etc/config.yaml\\\", \\\"/var/lib/data\\\"]\\n },\\n \\\"relativePath\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^\\\\\\\\.?/?[^\\\\\\\\0]+$\\\",\\n \\\"description\\\": \\\"Relative file path (may start with ./ or just filename)\\\",\\n \\\"examples\\\": [\\\"./config.yaml\\\", \\\"configs/main.yaml\\\", \\\"../shared/base.yaml\\\"]\\n },\\n \\\"anyPath\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^(\\\\\\\\.?/)?[^\\\\\\\\0]+$\\\",\\n \\\"description\\\": \\\"File path (absolute or relative)\\\",\\n \\\"examples\\\": [\\\"/etc/config.yaml\\\", \\\"./config.yaml\\\", \\\"config.yaml\\\"]\\n },\\n \\\"sha256Hash\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^sha256:[a-f0-9]{64}$\\\",\\n \\\"description\\\": \\\"SHA-256 hash with prefix\\\",\\n \\\"examples\\\": [\\\"sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\\\"]\\n },\\n \\\"nonEmptyString\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"minLength\\\": 1,\\n \\\"description\\\": \\\"String that cannot be empty\\\"\\n },\\n \\\"positiveInteger\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 1,\\n \\\"description\\\": \\\"Integer greater than zero\\\"\\n },\\n \\\"nonNegativeInteger\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"description\\\": \\\"Integer zero or greater\\\"\\n },\\n \\\"percentage\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"minimum\\\": 0,\\n \\\"maximum\\\": 100,\\n \\\"description\\\": \\\"Percentage value 0-100\\\"\\n },\\n \\\"durationSeconds\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"description\\\": \\\"Duration in seconds\\\"\\n },\\n \\\"durationMilliseconds\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"description\\\": \\\"Duration in milliseconds\\\"\\n },\\n \\\"byteSize\\\": {\\n \\\"type\\\": \\\"integer\\\",\\n \\\"minimum\\\": 0,\\n \\\"description\\\": \\\"Size in bytes\\\"\\n },\\n \\\"keyValuePair\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"key\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"value\\\": {\\n \\\"type\\\": \\\"string\\\"\\n }\\n },\\n \\\"required\\\": [\\\"key\\\", \\\"value\\\"],\\n \\\"additionalProperties\\\": false\\n },\\n \\\"labelSet\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"additionalProperties\\\": {\\n \\\"type\\\": \\\"string\\\"\\n },\\n \\\"propertyNames\\\": {\\n \\\"pattern\\\": \\\"^[a-z][a-z0-9_]*$\\\"\\n },\\n \\\"description\\\": \\\"Key-value labels for metadata and filtering\\\"\\n },\\n \\\"tagList\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"$ref\\\": \\\"#/$defs/slug\\\"\\n },\\n \\\"uniqueItems\\\": true,\\n \\\"description\\\": \\\"List of unique tag slugs\\\"\\n },\\n \\\"markdown\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Markdown-formatted text content\\\"\\n }\\n }\\n}\\n\",\n \"schemas/crucible-ts/web/branding/v1.0.0/site-branding.schema.json\": \"{\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/web/branding/v1.0.0/site-branding.schema.json\\\",\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"title\\\": \\\"Fulmen Site Branding\\\",\\n \\\"description\\\": \\\"Standardized branding configuration for Fulmen web templates\\\",\\n \\\"properties\\\": {\\n \\\"name\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Site or application name (e.g., 'Pulsar Codex')\\\",\\n \\\"minLength\\\": 1,\\n \\\"maxLength\\\": 50\\n },\\n \\\"tagline\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Short descriptive tagline (e.g., 'Production-grade docs template')\\\",\\n \\\"maxLength\\\": 120\\n },\\n \\\"logo\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Primary logo configuration\\\",\\n \\\"properties\\\": {\\n \\\"src\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"uri-reference\\\",\\n \\\"description\\\": \\\"Relative path or URL to logo image (SVG/PNG preferred, repo-local in public/)\\\"\\n },\\n \\\"alt\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Accessible alt text for the logo\\\",\\n \\\"minLength\\\": 1\\n },\\n \\\"width\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"minimum\\\": 32,\\n \\\"maximum\\\": 256,\\n \\\"description\\\": \\\"Preferred display width in pixels\\\"\\n },\\n \\\"height\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"minimum\\\": 32,\\n \\\"maximum\\\": 256,\\n \\\"description\\\": \\\"Preferred display height in pixels\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"src\\\",\\n \\\"alt\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n },\\n \\\"favicon\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"uri-reference\\\",\\n \\\"description\\\": \\\"Path/URL to favicon (ICO/SVG, 16x16+ pixels, in public/)\\\"\\n },\\n \\\"appIcon\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"uri-reference\\\",\\n \\\"description\\\": \\\"Path/URL to application icon for PWA/manifest (PNG/SVG, 192x192+)\\\"\\n },\\n \\\"logoPresentation\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"logo_only\\\",\\n \\\"logo_left_text_right\\\",\\n \\\"logo_top_text_bottom\\\",\\n \\\"text_only\\\",\\n \\\"gridbox_logo_text\\\"\\n ],\\n \\\"description\\\": \\\"Layout variant for logo and name/tagline: logo_only (logo includes text), logo_left_text_right (horizontal alignment), logo_top_text_bottom (vertical stack), text_only (no logo), gridbox_logo_text (flex/grid centered)\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"name\\\",\\n \\\"logoPresentation\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n}\\n\",\n \"schemas/crucible-ts/web/styling/v1.0.0/site-styling.schema.json\": \"{\\n \\\"$id\\\": \\\"https://schemas.fulmenhq.dev/crucible/web/styling/v1.0.0/site-styling.schema.json\\\",\\n \\\"$schema\\\": \\\"https://json-schema.org/draft/2020-12/schema\\\",\\n \\\"type\\\": \\\"object\\\",\\n \\\"title\\\": \\\"Fulmen Site Styling\\\",\\n \\\"description\\\": \\\"Standardized styling configuration for Fulmen web templates, including palettes, typography, and icons\\\",\\n \\\"properties\\\": {\\n \\\"themes\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Light and dark mode palettes\\\",\\n \\\"properties\\\": {\\n \\\"light\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Light theme color palette\\\",\\n \\\"properties\\\": {\\n \\\"background\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$\\\",\\n \\\"description\\\": \\\"Primary background (hex)\\\"\\n },\\n \\\"foreground\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$\\\",\\n \\\"description\\\": \\\"Primary text (hex)\\\"\\n },\\n \\\"accent\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$\\\",\\n \\\"description\\\": \\\"Accent color (hex)\\\"\\n },\\n \\\"success\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$\\\",\\n \\\"description\\\": \\\"Success indicator (green, hex)\\\"\\n },\\n \\\"failure\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$\\\",\\n \\\"description\\\": \\\"Failure/error (red, hex)\\\"\\n },\\n \\\"warning\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$\\\",\\n \\\"description\\\": \\\"Warning (yellow/orange, hex)\\\"\\n },\\n \\\"critical\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$\\\",\\n \\\"description\\\": \\\"Critical/alert (purple, hex)\\\"\\n },\\n \\\"info\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$\\\",\\n \\\"description\\\": \\\"Info callout (blue, hex, optional)\\\"\\n },\\n \\\"note\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$\\\",\\n \\\"description\\\": \\\"Note callout (cyan/teal, hex, optional)\\\"\\n },\\n \\\"caution\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$\\\",\\n \\\"description\\\": \\\"Caution callout (softer orange, hex, optional)\\\"\\n },\\n \\\"categorical\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"description\\\": \\\"Categorical colors for charts/graphs (5-12 accessible colors)\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$\\\"\\n },\\n \\\"minItems\\\": 5,\\n \\\"maxItems\\\": 12,\\n \\\"uniqueItems\\\": true\\n }\\n },\\n \\\"required\\\": [\\n \\\"background\\\",\\n \\\"foreground\\\",\\n \\\"accent\\\",\\n \\\"success\\\",\\n \\\"failure\\\",\\n \\\"warning\\\",\\n \\\"critical\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n },\\n \\\"dark\\\": {\\n \\\"$ref\\\": \\\"#/properties/themes/properties/light\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"light\\\",\\n \\\"dark\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n },\\n \\\"typography\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Font families and embedding options\\\",\\n \\\"properties\\\": {\\n \\\"fonts\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Font family definitions\\\",\\n \\\"properties\\\": {\\n \\\"body\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Body text font\\\",\\n \\\"properties\\\": {\\n \\\"family\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"CSS font-family string (e.g., 'Inter, sans-serif')\\\"\\n },\\n \\\"src\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"uri-reference\\\",\\n \\\"description\\\": \\\"Path/URL to font file (WOFF2 in public/fonts/, or external URL)\\\"\\n },\\n \\\"weights\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"minimum\\\": 100,\\n \\\"maximum\\\": 900\\n },\\n \\\"description\\\": \\\"Supported weights (e.g., [400, 700])\\\",\\n \\\"minItems\\\": 1\\n },\\n \\\"size\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"base\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^[0-9]+(\\\\\\\\.[0-9]+)?(px|rem|em)$\\\",\\n \\\"description\\\": \\\"Base font size\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"base\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n }\\n },\\n \\\"required\\\": [\\n \\\"family\\\",\\n \\\"src\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n },\\n \\\"code\\\": {\\n \\\"$ref\\\": \\\"#/properties/typography/properties/fonts/properties/body\\\"\\n },\\n \\\"heading\\\": {\\n \\\"$ref\\\": \\\"#/properties/typography/properties/fonts/properties/body\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"body\\\",\\n \\\"code\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n },\\n \\\"embed\\\": {\\n \\\"type\\\": \\\"boolean\\\",\\n \\\"default\\\": true,\\n \\\"description\\\": \\\"Embed fonts at build-time (true: WOFF2 from src; false: URL/CDN)\\\"\\n },\\n \\\"lineHeight\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"minimum\\\": 1.2,\\n \\\"maximum\\\": 2.0,\\n \\\"default\\\": 1.5,\\n \\\"description\\\": \\\"Base line-height\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"fonts\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n },\\n \\\"icons\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Icon configuration\\\",\\n \\\"properties\\\": {\\n \\\"registry\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"mdi\\\",\\n \\\"heroicons\\\",\\n \\\"lucide\\\",\\n \\\"tabler\\\"\\n ],\\n \\\"default\\\": \\\"mdi\\\",\\n \\\"description\\\": \\\"Icon set registry\\\"\\n },\\n \\\"prefix\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"default\\\": \\\"codex-\\\",\\n \\\"description\\\": \\\"CSS class prefix\\\"\\n },\\n \\\"size\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"default\\\": 24,\\n \\\"minimum\\\": 16,\\n \\\"maximum\\\": 48,\\n \\\"description\\\": \\\"Default size (px)\\\"\\n },\\n \\\"custom\\\": {\\n \\\"type\\\": \\\"array\\\",\\n \\\"items\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"properties\\\": {\\n \\\"name\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"description\\\": \\\"Icon name\\\"\\n },\\n \\\"src\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"format\\\": \\\"uri-reference\\\",\\n \\\"description\\\": \\\"Path to SVG in public/icons/\\\"\\n },\\n \\\"size\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"default\\\": 24,\\n \\\"description\\\": \\\"Icon size in pixels\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"name\\\",\\n \\\"src\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n },\\n \\\"description\\\": \\\"Custom icons\\\"\\n },\\n \\\"palette\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Icon fill colors for light/dark modes\\\",\\n \\\"properties\\\": {\\n \\\"light\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$\\\",\\n \\\"description\\\": \\\"Fill color for light mode\\\"\\n },\\n \\\"dark\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"pattern\\\": \\\"^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$\\\",\\n \\\"description\\\": \\\"Fill color for dark mode\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"light\\\",\\n \\\"dark\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n }\\n },\\n \\\"required\\\": [\\n \\\"registry\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n },\\n \\\"a11y\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Accessibility constraints for colors (WCAG 2.1 AA baseline; build-time validation)\\\",\\n \\\"properties\\\": {\\n \\\"minContrast\\\": {\\n \\\"type\\\": \\\"object\\\",\\n \\\"description\\\": \\\"Minimum contrast ratios for WCAG compliance\\\",\\n \\\"properties\\\": {\\n \\\"normal\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"minimum\\\": 3.0,\\n \\\"maximum\\\": 21.0,\\n \\\"default\\\": 4.5,\\n \\\"description\\\": \\\"Min ratio for normal text (AA: 4.5:1)\\\"\\n },\\n \\\"large\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"minimum\\\": 2.0,\\n \\\"maximum\\\": 21.0,\\n \\\"default\\\": 3.0,\\n \\\"description\\\": \\\"Min ratio for large text (AA: 3:1)\\\"\\n },\\n \\\"graphics\\\": {\\n \\\"type\\\": \\\"number\\\",\\n \\\"minimum\\\": 3.0,\\n \\\"maximum\\\": 21.0,\\n \\\"default\\\": 3.0,\\n \\\"description\\\": \\\"Min ratio for UI components/graphics\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"normal\\\",\\n \\\"large\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n },\\n \\\"level\\\": {\\n \\\"type\\\": \\\"string\\\",\\n \\\"enum\\\": [\\n \\\"AA\\\",\\n \\\"AAA\\\"\\n ],\\n \\\"default\\\": \\\"AA\\\",\\n \\\"description\\\": \\\"WCAG conformance level (build enforces ratios)\\\"\\n }\\n },\\n \\\"required\\\": [\\n \\\"minContrast\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n }\\n },\\n \\\"required\\\": [\\n \\\"themes\\\",\\n \\\"typography\\\"\\n ],\\n \\\"additionalProperties\\\": false\\n}\\n\",\n },\n};\n\nexport default manifest;\n","/**\n * Static per-subpath embedded-asset registration for the schema subpath (v0.4.0).\n *\n * The `./assets` core deliberately carries no SSOT corpus (so its dist entry stays\n * lean). Instead each feature subpath statically registers only the domains it\n * needs — here, the metaschemas/vocab, the schema corpus, and the taxonomy that\n * schemas `$ref` cross-tree. Importing only the per-domain generated modules (not\n * `generated/index`) keeps `foundry` out of the schema subpath's bundle.\n *\n * In filesystem mode (npm / `node dist` / source) the resolver reads the on-disk\n * trees and these registrations are simply unused; in a `bun --compile` binary\n * they are what makes schema discovery + validation work without a filesystem.\n */\n\nimport { manifest as metaschemaManifest } from \"../assets/generated/metaschema.generated.js\";\nimport { manifest as schemasManifest } from \"../assets/generated/schemas.generated.js\";\nimport { manifest as taxonomyManifest } from \"../assets/generated/taxonomy.generated.js\";\nimport { registerEmbeddedAssets } from \"../assets/index.js\";\n\nlet registered = false;\n\n/**\n * Register the schema subpath's embedded asset domains (idempotent). Called by\n * the registry/validator before resolving assets, so embedded mode has them.\n */\nexport function ensureSchemaAssetsRegistered(): void {\n if (registered) {\n return;\n }\n registerEmbeddedAssets(metaschemaManifest);\n registerEmbeddedAssets(schemasManifest);\n registerEmbeddedAssets(taxonomyManifest);\n registered = true;\n}\n","/**\n * Schema registry - implements schema discovery and metadata extraction\n */\n\nimport { extname } from \"node:path\";\nimport { parse as parseYAML } from \"yaml\";\nimport { type AssetResolver, getAssetResolver, resolveAssets } from \"../assets/index.js\";\nimport { ensureSchemaAssetsRegistered } from \"./embedded-assets.js\";\nimport { SchemaValidationError } from \"./errors.js\";\nimport type { SchemaFormat, SchemaMetadata, SchemaRegistryOptions } from \"./types.js\";\n\n/**\n * Default schema file patterns (relative to the logical base).\n */\nconst DEFAULT_PATTERNS = [\"**/*.schema.json\", \"**/*.schema.yaml\", \"**/*.schema.yml\"];\n\n/** Logical namespace of the package's own bundled schemas. */\nconst PACKAGE_SCHEMA_BASE = \"schemas/crucible-ts/\";\n\n/**\n * Schema registry class for managing schema discovery and metadata.\n *\n * Resolves schemas via the {@link AssetResolver} (filesystem or embedded), so it\n * works from npm/`node dist` AND inside a `bun --compile` binary. `SchemaMetadata.path`\n * is a logical (resolver-relative) path, read back through the resolver — not an\n * absolute filesystem path (v0.4.0).\n */\nexport class SchemaRegistry {\n private schemas: Map<string, SchemaMetadata> = new Map();\n private options: SchemaRegistryOptions;\n private resolver: AssetResolver | null = null;\n private logicalBase = \"\";\n\n constructor(options: SchemaRegistryOptions = {}) {\n this.options = {\n baseDir: options.baseDir, // undefined => the package's bundled crucible-ts schemas\n patterns: options.patterns || DEFAULT_PATTERNS,\n followSymlinks: options.followSymlinks ?? false,\n maxDepth: options.maxDepth ?? 10,\n };\n }\n\n /**\n * Resolve the asset source + logical base for the configured mode.\n * - custom `baseDir`: a consumer-owned tree, read directly (patterns relative to it);\n * - default: the package's bundled crucible-ts schemas (filesystem or embedded).\n */\n private resolveSource(): { resolver: AssetResolver; logicalBase: string } {\n if (this.options.baseDir) {\n return { resolver: resolveAssets({ baseDir: this.options.baseDir }), logicalBase: \"\" };\n }\n ensureSchemaAssetsRegistered();\n return { resolver: getAssetResolver(), logicalBase: PACKAGE_SCHEMA_BASE };\n }\n\n /**\n * Build logical schema ID from a logical path (strip the base + schema ext).\n */\n private buildSchemaId(logicalPath: string): string {\n const rel = logicalPath.startsWith(this.logicalBase)\n ? logicalPath.slice(this.logicalBase.length)\n : logicalPath;\n return rel.replace(/\\.(schema\\.(json|yaml|yml))$/, \"\").replace(/\\\\/g, \"/\");\n }\n\n /**\n * Extract schema format from file extension\n */\n private getSchemaFormat(logicalPath: string): SchemaFormat {\n const ext = extname(logicalPath).toLowerCase();\n return ext === \".yaml\" || ext === \".yml\" ? \"yaml\" : \"json\";\n }\n\n /**\n * Extract metadata from a schema asset (read via the resolver).\n */\n private async extractMetadata(logicalPath: string): Promise<SchemaMetadata> {\n if (!this.resolver) {\n throw SchemaValidationError.registryError(\"metadata extraction\", \"resolver not initialized\");\n }\n try {\n const content = await this.resolver.read(logicalPath);\n const format = this.getSchemaFormat(logicalPath);\n const parsed = (format === \"yaml\" ? parseYAML(content) : JSON.parse(content)) as Record<\n string,\n unknown\n >;\n\n const relativePath = logicalPath.startsWith(this.logicalBase)\n ? logicalPath.slice(this.logicalBase.length)\n : logicalPath;\n\n return {\n id: this.buildSchemaId(logicalPath),\n path: logicalPath,\n relativePath,\n format,\n version: (parsed.$schema as string) || (parsed.version as string),\n description: (parsed.title as string) || (parsed.description as string),\n schemaDraft: parsed.$schema as string,\n };\n } catch (error) {\n throw SchemaValidationError.registryError(\n \"metadata extraction\",\n `Failed to process ${logicalPath}: ${(error as Error).message}`,\n );\n }\n }\n\n /**\n * Discover and index all available schemas (via resolver.list — no FS walk).\n */\n async discoverSchemas(): Promise<void> {\n try {\n const patterns = this.options.patterns ?? [];\n if (patterns.length === 0) {\n this.schemas.clear();\n return;\n }\n\n const { resolver, logicalBase } = this.resolveSource();\n this.resolver = resolver;\n this.logicalBase = logicalBase;\n\n const effectivePatterns = patterns.map((p) => `${logicalBase}${p}`);\n const logicalPaths = await resolver.list(effectivePatterns);\n\n this.schemas.clear();\n for (const logicalPath of logicalPaths) {\n try {\n const metadata = await this.extractMetadata(logicalPath);\n this.schemas.set(metadata.id, metadata);\n } catch (error) {\n console.warn(`Warning: Failed to process schema ${logicalPath}:`, error);\n }\n }\n } catch (error) {\n throw SchemaValidationError.registryError(\"discovery\", (error as Error).message);\n }\n }\n\n /**\n * Read raw schema content by logical ID, via the configured resolver.\n */\n async readSchemaContent(id: string): Promise<string> {\n const metadata = await this.getSchema(id);\n if (!this.resolver) {\n throw SchemaValidationError.registryError(\"read\", \"resolver not initialized\");\n }\n return this.resolver.read(metadata.path);\n }\n\n /**\n * List available schemas with optional prefix filtering\n */\n async listSchemas(prefix?: string): Promise<SchemaMetadata[]> {\n if (this.schemas.size === 0) {\n await this.discoverSchemas();\n }\n\n const schemas = Array.from(this.schemas.values());\n\n if (prefix) {\n return schemas.filter((schema) => schema.id.startsWith(prefix));\n }\n\n return schemas;\n }\n\n /**\n * Get schema by logical ID\n */\n async getSchema(id: string): Promise<SchemaMetadata> {\n if (this.schemas.size === 0) {\n await this.discoverSchemas();\n }\n\n const schema = this.schemas.get(id);\n if (!schema) {\n throw SchemaValidationError.schemaNotFound(id);\n }\n\n return schema;\n }\n\n /**\n * Get schema by file path\n */\n async getSchemaByPath(filePath: string): Promise<SchemaMetadata> {\n if (this.schemas.size === 0) {\n await this.discoverSchemas();\n }\n\n // Paths are now logical (resolver-relative). Match the logical path or its\n // base-relative form, tolerating a leading \"./\" and separator differences.\n const norm = filePath.replace(/\\\\/g, \"/\").replace(/^\\.\\//, \"\");\n for (const schema of this.schemas.values()) {\n if (\n schema.path === norm ||\n schema.relativePath === norm ||\n schema.path.endsWith(`/${norm}`)\n ) {\n return schema;\n }\n }\n\n throw SchemaValidationError.schemaNotFound(filePath);\n }\n\n /**\n * Check if schema exists\n */\n async hasSchema(id: string): Promise<boolean> {\n if (this.schemas.size === 0) {\n await this.discoverSchemas();\n }\n\n return this.schemas.has(id);\n }\n\n /**\n * Get registry size\n */\n get size(): number {\n return this.schemas.size;\n }\n\n /**\n * Clear registry cache\n */\n clear(): void {\n this.schemas.clear();\n }\n}\n\n/**\n * Global schema registry instance with cached options\n */\nlet globalRegistry: SchemaRegistry | undefined;\nlet globalRegistryOptions: SchemaRegistryOptions | undefined;\n\n/**\n * Check if registry options have changed\n */\nfunction optionsChanged(newOptions?: SchemaRegistryOptions): boolean {\n if (!newOptions && !globalRegistryOptions) return false;\n if (!newOptions || !globalRegistryOptions) return true;\n\n return (\n newOptions.baseDir !== globalRegistryOptions.baseDir ||\n JSON.stringify(newOptions.patterns) !== JSON.stringify(globalRegistryOptions.patterns) ||\n newOptions.followSymlinks !== globalRegistryOptions.followSymlinks ||\n newOptions.maxDepth !== globalRegistryOptions.maxDepth\n );\n}\n\n/**\n * Get or create global schema registry, rebuilding if options change\n */\nexport function getSchemaRegistry(options?: SchemaRegistryOptions): SchemaRegistry {\n if (!globalRegistry || optionsChanged(options)) {\n globalRegistry = new SchemaRegistry(options);\n globalRegistryOptions = options;\n }\n return globalRegistry;\n}\n\n/**\n * List available schemas with optional prefix filtering\n */\nexport async function listSchemas(\n prefix?: string,\n options?: SchemaRegistryOptions,\n): Promise<SchemaMetadata[]> {\n const registry = getSchemaRegistry(options);\n return registry.listSchemas(prefix);\n}\n\n/**\n * Get schema by logical ID\n */\nexport async function getSchema(\n id: string,\n options?: SchemaRegistryOptions,\n): Promise<SchemaMetadata> {\n const registry = getSchemaRegistry(options);\n return registry.getSchema(id);\n}\n\n/**\n * Get schema by file path\n */\nexport async function getSchemaByPath(\n filePath: string,\n options?: SchemaRegistryOptions,\n): Promise<SchemaMetadata> {\n const registry = getSchemaRegistry(options);\n return registry.getSchemaByPath(filePath);\n}\n\n/**\n * Check if schema exists\n */\nexport async function hasSchema(id: string, options?: SchemaRegistryOptions): Promise<boolean> {\n const registry = getSchemaRegistry(options);\n return registry.hasSchema(id);\n}\n","/**\n * Schema validator - implements AJV-based schema validation with goneat integration\n */\n\nimport { readFile } from \"node:fs/promises\";\nimport type { AnySchema } from \"ajv\";\nimport Ajv from \"ajv\";\nimport Ajv2019 from \"ajv/dist/2019.js\";\nimport Ajv2020 from \"ajv/dist/2020.js\";\nimport AjvDraft04 from \"ajv-draft-04\";\nimport { parse as parseYAML } from \"yaml\";\nimport { getAssetResolver } from \"../assets/index.js\";\nimport { metrics } from \"../telemetry/index.js\";\nimport { applyFulmenAjvFormats } from \"./ajv-formats.js\";\nimport { ensureSchemaAssetsRegistered } from \"./embedded-assets.js\";\nimport { SchemaValidationError } from \"./errors.js\";\nimport { getSchemaRegistry } from \"./registry.js\";\nimport type {\n CompiledValidator,\n SchemaInput,\n SchemaRegistryOptions,\n SchemaValidationResult,\n} from \"./types.js\";\nimport { createDiagnostic } from \"./utils.js\";\n\n/**\n * Supported JSON Schema dialects for meta validation + compilation.\n */\ntype JsonSchemaDialect = \"draft-04\" | \"draft-06\" | \"draft-07\" | \"draft-2019-09\" | \"draft-2020-12\";\n\n/**\n * AJV instances by dialect\n */\nconst ajvInstances = new Map<JsonSchemaDialect, Ajv>();\n\n/**\n * Metaschema initialization promises by dialect\n */\nconst metaschemaReady = new Map<JsonSchemaDialect, Promise<void>>();\n\n/**\n * Schema cache for compiled validators\n */\nconst schemaCache = new Map<string, CompiledValidator>();\n\n/**\n * Load metaschema from Crucible SSOT\n */\nasync function loadMetaSchema(draft: JsonSchemaDialect): Promise<Record<string, unknown>> {\n ensureSchemaAssetsRegistered();\n const resolver = getAssetResolver();\n const content = await resolver.read(`schemas/crucible-ts/meta/${draft}/schema.json`);\n return JSON.parse(content) as Record<string, unknown>;\n}\n\n/**\n * Load vocabulary schemas (draft 2019-09 / 2020-12)\n */\nasync function loadVocabularySchemas(draft: JsonSchemaDialect): Promise<Record<string, unknown>[]> {\n if (draft !== \"draft-2019-09\" && draft !== \"draft-2020-12\") {\n return [];\n }\n\n ensureSchemaAssetsRegistered();\n const resolver = getAssetResolver();\n\n const vocabFiles =\n draft === \"draft-2020-12\"\n ? [\n \"core.json\",\n \"applicator.json\",\n \"unevaluated.json\",\n \"validation.json\",\n \"meta-data.json\",\n \"format-annotation.json\",\n \"content.json\",\n ]\n : [\n \"core.json\",\n \"applicator.json\",\n \"validation.json\",\n \"meta-data.json\",\n \"format.json\",\n \"content.json\",\n ];\n\n const schemas: Record<string, unknown>[] = [];\n for (const file of vocabFiles) {\n try {\n const content = await resolver.read(`schemas/crucible-ts/meta/${draft}/meta/${file}`);\n schemas.push(JSON.parse(content) as Record<string, unknown>);\n } catch {\n // Vocabulary schema not found, skip\n }\n }\n\n return schemas;\n}\n\n/**\n * Load referenced schemas (including YAML files) for AJV\n *\n * Resolves relative paths from schemas/ and config/ directories.\n * Handles both relative paths and https://schemas.fulmenhq.dev URIs.\n *\n * Per Canonical URI Resolution Standard (v0.4.2+), crucible-hosted schemas use:\n * https://schemas.fulmenhq.dev/crucible/<topic>/<version>/<filename>\n *\n * We only embed crucible schemas locally. Other modules (goneat/, enact/, etc.)\n * are not embedded and cannot be resolved offline.\n */\nasync function loadReferencedSchema(uri: string): Promise<Record<string, unknown>> {\n ensureSchemaAssetsRegistered();\n const resolver = getAssetResolver();\n\n let logicalPath: string;\n\n // Handle https://schemas.fulmenhq.dev/ URIs - map to logical asset paths\n if (uri.startsWith(\"https://schemas.fulmenhq.dev/\")) {\n let relativePath = uri.replace(\"https://schemas.fulmenhq.dev/\", \"\");\n\n // Strip crucible/ module prefix if present (v0.4.2+ canonical URIs).\n // Only crucible schemas are embedded; other modules cannot resolve offline.\n if (relativePath.startsWith(\"crucible/\")) {\n relativePath = relativePath.slice(\"crucible/\".length);\n }\n\n if (relativePath.startsWith(\"config/taxonomy/\")) {\n const file = relativePath.split(\"/\").pop() || \"\";\n logicalPath = `config/crucible-ts/taxonomy/${file}`;\n } else {\n logicalPath = `schemas/crucible-ts/${relativePath}`;\n }\n }\n // Handle relative refs that cross into the config taxonomy tree\n // (e.g. \"../../../../config/taxonomy/metrics.yaml\" from a schemas/ schema).\n else if (uri.includes(\"config/taxonomy/\")) {\n const file = uri.split(\"/\").pop() || \"\";\n logicalPath = `config/crucible-ts/taxonomy/${file}`;\n }\n // Handle other relative schema refs → resolve under schemas/crucible-ts/.\n else if (uri.startsWith(\"../\") || uri.startsWith(\"./\")) {\n const cleaned = uri.replace(/^(\\.\\.\\/)+/, \"\").replace(/^\\.\\//, \"\");\n logicalPath = `schemas/crucible-ts/${cleaned}`;\n }\n // Unhandled URI scheme (remote http(s) other than fulmenhq, file://, etc.)\n else {\n throw new Error(`Cannot load remote schema: ${uri}`);\n }\n\n const content = await resolver.read(logicalPath);\n const ext = logicalPath.split(\".\").pop()?.toLowerCase();\n if (ext === \"yaml\" || ext === \"yml\") {\n return parseYAML(content) as Record<string, unknown>;\n }\n return JSON.parse(content) as Record<string, unknown>;\n}\n\n/**\n * Resolve JSON Schema dialect from schema content.\n */\nfunction detectDialect(schema: unknown): JsonSchemaDialect {\n if (schema && typeof schema === \"object\" && !Array.isArray(schema)) {\n const maybeSchema = schema as Record<string, unknown>;\n const declared = (maybeSchema as { $schema?: unknown }).$schema;\n\n if (typeof declared === \"string\") {\n if (declared.includes(\"draft-04\")) return \"draft-04\";\n if (declared.includes(\"draft-06\")) return \"draft-06\";\n if (declared.includes(\"draft-07\")) return \"draft-07\";\n if (declared.includes(\"draft/2019-09\")) return \"draft-2019-09\";\n if (declared.includes(\"draft/2020-12\")) return \"draft-2020-12\";\n }\n }\n\n // Default to 2020-12 in Fulmen ecosystem.\n return \"draft-2020-12\";\n}\n\n/**\n * Create AJV instance for a specific dialect\n */\nfunction createAjv(dialect: JsonSchemaDialect): Ajv {\n const AjvCtor =\n dialect === \"draft-2020-12\"\n ? Ajv2020\n : dialect === \"draft-2019-09\"\n ? Ajv2019\n : dialect === \"draft-04\"\n ? (AjvDraft04 as unknown as typeof Ajv)\n : Ajv;\n\n const ajv = new AjvCtor({\n strict: false,\n allErrors: true,\n verbose: true,\n // Allow schemas with $id to be added without replacing existing ones\n addUsedSchema: false,\n // draft-04 uses \"id\"; later drafts use \"$id\"\n schemaId: dialect === \"draft-04\" ? \"id\" : \"$id\",\n // Enable async schema loading for YAML references\n loadSchema: loadReferencedSchema,\n });\n\n applyFulmenAjvFormats(ajv);\n\n return ajv;\n}\n\n/**\n * Get or create AJV instance for a dialect, ensuring metaschemas are loaded.\n */\nasync function getAjv(dialect: JsonSchemaDialect): Promise<Ajv> {\n const existing = ajvInstances.get(dialect);\n if (existing) {\n const ready = metaschemaReady.get(dialect);\n if (ready) await ready;\n return existing;\n }\n\n const ajv = createAjv(dialect);\n ajvInstances.set(dialect, ajv);\n\n const readyPromise = Promise.all([loadVocabularySchemas(dialect), loadMetaSchema(dialect)])\n .then(([vocabSchemas, metaSchema]) => {\n // Add vocabulary schemas first (referenced by meta schema)\n for (const vocabSchema of vocabSchemas) {\n try {\n ajv.addMetaSchema(vocabSchema);\n } catch {\n // Already added or incompatible with Ajv's built-ins\n }\n }\n\n try {\n ajv.addMetaSchema(metaSchema);\n } catch {\n // Already added or incompatible with Ajv's built-ins\n }\n })\n .catch((error) => {\n throw new Error(`Failed to load metaschemas (${dialect}): ${error}`);\n });\n\n metaschemaReady.set(dialect, readyPromise);\n await readyPromise;\n\n return ajv;\n}\n\n/**\n * Compile a schema for validation\n */\nexport async function compileSchema(\n schema: SchemaInput,\n options: { aliases?: string[] } = {},\n): Promise<CompiledValidator> {\n const baseKey = typeof schema === \"string\" ? schema : JSON.stringify(schema);\n\n let parsedSchema: unknown;\n if (typeof schema === \"string\") {\n try {\n parsedSchema = JSON.parse(schema);\n } catch {\n // Try YAML if JSON parsing fails\n parsedSchema = parseYAML(schema);\n }\n } else if (Buffer.isBuffer(schema)) {\n const content = schema.toString(\"utf-8\");\n try {\n parsedSchema = JSON.parse(content);\n } catch {\n parsedSchema = parseYAML(content);\n }\n } else {\n parsedSchema = schema;\n }\n\n const dialect = detectDialect(parsedSchema);\n const ajv = await getAjv(dialect);\n\n const cacheKey = `${dialect}:${baseKey}`;\n const cached = schemaCache.get(cacheKey);\n if (cached !== undefined) {\n return cached;\n }\n\n try {\n // Register schema aliases (e.g., alternate $id values) before compile to support relative refs\n if (options.aliases && options.aliases.length > 0) {\n for (const alias of options.aliases) {\n if (alias && ajv.getSchema(alias) === undefined) {\n try {\n if (typeof parsedSchema === \"object\" && parsedSchema !== null) {\n ajv.addSchema(parsedSchema as Record<string, unknown>, alias);\n }\n } catch {\n // Ignore if alias already registered or invalid\n }\n }\n }\n }\n\n const validator =\n typeof parsedSchema === \"boolean\"\n ? ajv.compile(parsedSchema)\n : await ajv.compileAsync(parsedSchema as Record<string, unknown>);\n\n // Cache the compiled validator\n schemaCache.set(cacheKey, validator as CompiledValidator);\n\n return validator as CompiledValidator;\n } catch (error) {\n throw SchemaValidationError.parseFailed(\n {\n type: \"string\",\n content: typeof schema === \"string\" ? schema : JSON.stringify(schema),\n },\n error as Error,\n );\n }\n}\n\n/**\n * Validate data against a compiled schema\n */\nexport function validateData(data: unknown, validator: CompiledValidator): SchemaValidationResult {\n const valid = validator(data);\n\n const result: SchemaValidationResult = {\n valid,\n diagnostics: [],\n source: \"ajv\",\n };\n\n if (!valid && validator.errors) {\n const errors = validator.errors;\n if (Array.isArray(errors)) {\n result.diagnostics = errors.map((error) =>\n createDiagnostic(\n error.instancePath || \"\",\n error.message || \"Validation failed\",\n error.keyword || \"unknown\",\n \"ERROR\",\n \"ajv\",\n ),\n );\n }\n metrics.counter(\"schema_validation_errors\").inc();\n } else {\n metrics.counter(\"schema_validations\").inc();\n }\n\n return result;\n}\n\n/**\n * Validate file against a schema\n */\nexport async function validateFile(\n filePath: string,\n validator: CompiledValidator,\n): Promise<SchemaValidationResult> {\n try {\n const content = await readFile(filePath, \"utf-8\");\n let data: unknown;\n\n try {\n data = JSON.parse(content);\n } catch {\n // Try YAML if JSON parsing fails\n data = parseYAML(content);\n }\n\n return validateData(data, validator);\n } catch (error) {\n if (error instanceof SchemaValidationError) {\n throw error;\n }\n throw SchemaValidationError.validationFailed(\n filePath,\n [\n createDiagnostic(\n \"\",\n `Failed to read or parse file: ${(error as Error).message}`,\n \"file-read\",\n \"ERROR\",\n \"ajv\",\n ),\n ],\n { type: \"file\", id: filePath },\n );\n }\n}\n\n/**\n * Validate a schema document itself\n */\nexport async function validateSchema(schema: SchemaInput): Promise<SchemaValidationResult> {\n try {\n // Parse schema so we can both meta-validate and compile with dialect-specific Ajv.\n let parsedSchema: unknown;\n if (typeof schema === \"string\") {\n try {\n parsedSchema = JSON.parse(schema);\n } catch {\n parsedSchema = parseYAML(schema);\n }\n } else if (Buffer.isBuffer(schema)) {\n const content = schema.toString(\"utf-8\");\n try {\n parsedSchema = JSON.parse(content);\n } catch {\n parsedSchema = parseYAML(content);\n }\n } else {\n parsedSchema = schema;\n }\n\n const dialect = detectDialect(parsedSchema);\n const ajv = await getAjv(dialect);\n\n // 1) Meta validation against declared dialect\n const metaValid = ajv.validateSchema(parsedSchema as AnySchema);\n if (!metaValid && ajv.errors) {\n const diagnostics = ajv.errors.map((error) =>\n createDiagnostic(\n error.instancePath || \"\",\n error.message || \"Schema meta-validation failed\",\n error.keyword || \"unknown\",\n \"ERROR\",\n \"ajv\",\n ),\n );\n\n return { valid: false, diagnostics, source: \"ajv\" };\n }\n\n // 2) Compilation check (refs resolvable, keywords supported)\n await compileSchema(parsedSchema as SchemaInput);\n\n return {\n valid: true,\n diagnostics: [],\n source: \"ajv\",\n };\n } catch (error) {\n if (error instanceof SchemaValidationError) {\n return {\n valid: false,\n diagnostics: error.diagnostics,\n source: \"ajv\",\n };\n }\n\n return {\n valid: false,\n diagnostics: [\n createDiagnostic(\n \"\",\n `Schema validation failed: ${(error as Error).message}`,\n \"schema-validation\",\n \"ERROR\",\n \"ajv\",\n ),\n ],\n source: \"ajv\",\n };\n }\n}\n\n/**\n * Clear schema cache\n */\nexport function clearCache(): void {\n schemaCache.clear();\n // Keep Ajv instances cached; they hold metaschemas. Tests can still clear schema cache.\n}\n\n/**\n * Get schema cache size\n */\nexport function getCacheSize(): number {\n return schemaCache.size;\n}\n\n/**\n * Load schema by ID from registry and compile\n */\nexport async function compileSchemaById(\n schemaId: string,\n registryOptions?: SchemaRegistryOptions,\n): Promise<CompiledValidator> {\n try {\n const registry = getSchemaRegistry(registryOptions);\n const metadata = await registry.getSchema(schemaId);\n\n // Read via the registry's resolver (logical path; fs or embedded).\n const content = await registry.readSchemaContent(schemaId);\n const aliases: string[] = [];\n\n const normalizedRelativePath = metadata.relativePath.replace(/\\\\/g, \"/\");\n if (normalizedRelativePath) {\n // Per Canonical URI Resolution Standard (v0.4.2+), include crucible/ module prefix\n aliases.push(\n new URL(`crucible/${normalizedRelativePath}`, \"https://schemas.fulmenhq.dev/\").toString(),\n );\n }\n\n return compileSchema(content, { aliases });\n } catch (error) {\n metrics.counter(\"schema_validation_errors\").inc();\n throw error;\n }\n}\n\n/**\n * Validate data against a schema ID from registry\n */\nexport async function validateDataBySchemaId(\n data: unknown,\n schemaId: string,\n registryOptions?: SchemaRegistryOptions,\n): Promise<SchemaValidationResult> {\n try {\n const validator = await compileSchemaById(schemaId, registryOptions);\n return validateData(data, validator);\n } catch (error) {\n metrics.counter(\"schema_validation_errors\").inc();\n throw error;\n }\n}\n\n/**\n * Validate file against a schema ID from registry\n */\nexport async function validateFileBySchemaId(\n filePath: string,\n schemaId: string,\n registryOptions?: SchemaRegistryOptions,\n): Promise<SchemaValidationResult> {\n try {\n const validator = await compileSchemaById(schemaId, registryOptions);\n return validateFile(filePath, validator);\n } catch (error) {\n metrics.counter(\"schema_validation_errors\").inc();\n throw error;\n }\n}\n","/**\n * Schema CLI - Commander-based CLI for schema operations\n *\n * Provides command-line interface for schema discovery, validation,\n * and normalization operations. This is a developer tool for exploration\n * and testing, not for production use.\n */\n\nimport { readFile, writeFile } from \"node:fs/promises\";\nimport { Command } from \"commander\";\nimport { isGoneatAvailable, runGoneatValidation } from \"./goneat-bridge.js\";\nimport { compareSchemas, normalizeSchema } from \"./normalizer.js\";\nimport { getSchemaRegistry, listSchemas } from \"./registry.js\";\nimport type { CLIOptions, SchemaValidationResult } from \"./types.js\";\nimport { formatDiagnostics } from \"./utils.js\";\nimport { validateFileBySchemaId } from \"./validator.js\";\n\n/**\n * Create CLI command structure\n */\nexport function createCLI(options: CLIOptions = {}): Command {\n const program = new Command();\n\n program\n .name(\"tsfulmen-schema\")\n .description(\"Schema validation and discovery CLI for Fulmen (developer tool)\")\n .version(\"0.1.0\");\n\n // List schemas command\n program\n .command(\"list\")\n .description(\"List available schemas from registry\")\n .argument(\"[prefix]\", \"Filter schemas by prefix\")\n .option(\"--base-dir <path>\", \"Override schema base directory\")\n .action(async (prefix?: string, cmdOptions?: { baseDir?: string }) => {\n try {\n const schemas = await listSchemas(prefix, {\n baseDir: cmdOptions?.baseDir || options.baseDir,\n });\n\n if (schemas.length === 0) {\n console.log(\"No schemas found\");\n return;\n }\n\n console.log(`Found ${schemas.length} schema(s):\\n`);\n for (const schema of schemas) {\n console.log(` ${schema.id}`);\n console.log(` Format: ${schema.format}`);\n console.log(` Path: ${schema.relativePath}`);\n if (schema.description) {\n console.log(` Description: ${schema.description}`);\n }\n console.log();\n }\n } catch (error) {\n console.error(\"Error listing schemas:\", (error as Error).message);\n process.exit(1);\n }\n });\n\n // Show schema command\n program\n .command(\"show\")\n .description(\"Show schema details\")\n .requiredOption(\"--schema-id <id>\", \"Schema ID to show\")\n .option(\"--base-dir <path>\", \"Override schema base directory\")\n .action(async (cmdOptions: { schemaId: string; baseDir?: string }) => {\n try {\n const registry = getSchemaRegistry({\n baseDir: cmdOptions.baseDir || options.baseDir,\n });\n const schema = await registry.getSchema(cmdOptions.schemaId);\n\n console.log(\"Schema Details:\\n\");\n console.log(` ID: ${schema.id}`);\n console.log(` Format: ${schema.format}`);\n console.log(` Path: ${schema.path}`);\n console.log(` Relative Path: ${schema.relativePath}`);\n if (schema.version) {\n console.log(` Version: ${schema.version}`);\n }\n if (schema.description) {\n console.log(` Description: ${schema.description}`);\n }\n if (schema.schemaDraft) {\n console.log(` Schema Draft: ${schema.schemaDraft}`);\n }\n\n // Read and display schema content\n const content = await readFile(schema.path, \"utf-8\");\n console.log(\"\\nSchema Content:\");\n console.log(content);\n } catch (error) {\n console.error(\"Error showing schema:\", (error as Error).message);\n process.exit(1);\n }\n });\n\n // Validate data command\n program\n .command(\"validate\")\n .description(\"Validate data file against schema\")\n .requiredOption(\"--schema-id <id>\", \"Schema ID to validate against\")\n .argument(\"<file>\", \"Data file to validate\")\n .option(\"--use-goneat\", \"Use goneat for validation (requires goneat binary)\")\n .option(\"--goneat-path <path>\", \"Path to goneat binary\")\n .option(\"--base-dir <path>\", \"Override schema base directory\")\n .action(\n async (\n file: string,\n cmdOptions: {\n schemaId: string;\n useGoneat?: boolean;\n goneatPath?: string;\n baseDir?: string;\n },\n ) => {\n try {\n let result: SchemaValidationResult;\n\n if (cmdOptions.useGoneat) {\n // Check goneat availability\n const available = await isGoneatAvailable(cmdOptions.goneatPath);\n if (!available) {\n console.error(\"❌ goneat not available. Install goneat or remove --use-goneat flag.\");\n console.error(\" AJV validation (default) works without external dependencies.\");\n process.exit(1);\n }\n\n // Get schema path\n const registry = getSchemaRegistry({\n baseDir: cmdOptions.baseDir || options.baseDir,\n });\n const schema = await registry.getSchema(cmdOptions.schemaId);\n\n console.log(\"Using goneat validation...\");\n result = await runGoneatValidation(schema.path, file, cmdOptions.goneatPath);\n } else {\n // Use AJV validation (default, library implementation)\n console.log(\"Using AJV validation...\");\n result = await validateFileBySchemaId(file, cmdOptions.schemaId, {\n baseDir: cmdOptions.baseDir || options.baseDir,\n });\n }\n\n if (result.valid) {\n console.log(`✅ Validation passed (${result.source})`);\n process.exit(0);\n } else {\n console.log(`❌ Validation failed (${result.source})`);\n console.log(\"\\nDiagnostics:\");\n console.log(formatDiagnostics(result.diagnostics));\n process.exit(1);\n }\n } catch (error) {\n console.error(\"Error validating file:\", (error as Error).message);\n process.exit(1);\n }\n },\n );\n\n // Validate schema command\n program\n .command(\"validate-schema\")\n .description(\"Validate a schema file itself\")\n .argument(\"<file>\", \"Schema file to validate\")\n .action(async (file: string) => {\n try {\n const content = await readFile(file, \"utf-8\");\n const { validateSchema } = await import(\"./validator.js\");\n const result = await validateSchema(content);\n\n if (result.valid) {\n console.log(\"✅ Schema is valid\");\n process.exit(0);\n } else {\n console.log(\"❌ Schema is invalid\");\n console.log(\"\\nDiagnostics:\");\n console.log(formatDiagnostics(result.diagnostics));\n process.exit(1);\n }\n } catch (error) {\n console.error(\"Error validating schema:\", (error as Error).message);\n process.exit(1);\n }\n });\n\n // Normalize schema command\n program\n .command(\"normalize\")\n .description(\"Normalize schema to canonical JSON format\")\n .argument(\"<file>\", \"Schema file to normalize\")\n .option(\"--compact\", \"Output compact JSON (no formatting)\")\n .option(\"-o, --output <file>\", \"Write to output file instead of stdout\")\n .action(async (file: string, cmdOptions: { compact?: boolean; output?: string }) => {\n try {\n const content = await readFile(file, \"utf-8\");\n const normalized = normalizeSchema(content, {\n compact: cmdOptions.compact,\n });\n\n if (cmdOptions.output) {\n await writeFile(cmdOptions.output, normalized, \"utf-8\");\n console.log(`✅ Normalized schema written to ${cmdOptions.output}`);\n } else {\n console.log(normalized);\n }\n } catch (error) {\n console.error(\"Error normalizing schema:\", (error as Error).message);\n process.exit(1);\n }\n });\n\n // Compare schemas command\n program\n .command(\"compare\")\n .description(\"Compare two schemas for semantic equality\")\n .argument(\"<file1>\", \"First schema file\")\n .argument(\"<file2>\", \"Second schema file\")\n .option(\"--show-normalized\", \"Show normalized outputs\")\n .action(async (file1: string, file2: string, cmdOptions: { showNormalized?: boolean }) => {\n try {\n const content1 = await readFile(file1, \"utf-8\");\n const content2 = await readFile(file2, \"utf-8\");\n\n const result = compareSchemas(content1, content2);\n\n if (result.equal) {\n console.log(\"✅ Schemas are semantically equal\");\n } else {\n console.log(\"❌ Schemas differ\");\n }\n\n if (cmdOptions.showNormalized) {\n console.log(\"\\nNormalized Schema 1:\");\n console.log(result.normalizedA);\n console.log(\"\\nNormalized Schema 2:\");\n console.log(result.normalizedB);\n }\n\n process.exit(result.equal ? 0 : 1);\n } catch (error) {\n console.error(\"Error comparing schemas:\", (error as Error).message);\n process.exit(1);\n }\n });\n\n // Export schema command\n program\n .command(\"export\")\n .description(\"Export schema from registry to file with provenance\")\n .requiredOption(\"--schema-id <id>\", \"Schema ID to export\")\n .requiredOption(\"--out <path>\", \"Output file path\")\n .option(\"--force\", \"Overwrite existing file\", false)\n .option(\"--no-provenance\", \"Exclude provenance metadata\")\n .option(\"--no-validate\", \"Skip schema validation before export\")\n .option(\"--format <format>\", \"Export format (json|yaml|auto)\", \"auto\")\n .option(\"--base-dir <path>\", \"Override schema base directory\")\n .action(\n async (cmdOptions: {\n schemaId: string;\n out: string;\n force?: boolean;\n provenance?: boolean;\n validate?: boolean;\n format?: string;\n baseDir?: string;\n }) => {\n try {\n const { exportSchema } = await import(\"./export.js\");\n const { exitCodes } = await import(\"../foundry/index.js\");\n\n const result = await exportSchema({\n schemaId: cmdOptions.schemaId,\n outPath: cmdOptions.out,\n includeProvenance: cmdOptions.provenance ?? true,\n validate: cmdOptions.validate ?? true,\n overwrite: cmdOptions.force ?? false,\n format: (cmdOptions.format as \"json\" | \"yaml\" | \"auto\") ?? \"auto\",\n baseDir: cmdOptions.baseDir || options.baseDir,\n });\n\n console.log(\"✅ Schema exported successfully\");\n console.log(` Schema ID: ${result.schemaId}`);\n console.log(` Output: ${result.outPath}`);\n console.log(` Format: ${result.format}`);\n\n if (result.provenance) {\n console.log(\"\\nProvenance:\");\n console.log(` Crucible: ${result.provenance.crucible_version}`);\n console.log(` Library: ${result.provenance.library_version}`);\n if (result.provenance.revision) {\n console.log(` Revision: ${result.provenance.revision}`);\n }\n console.log(` Exported: ${result.provenance.exported_at}`);\n }\n\n process.exit(exitCodes.EXIT_SUCCESS);\n } catch (error) {\n const { exitCodes } = await import(\"../foundry/index.js\");\n const { SchemaExportError, SchemaValidationError, ExportErrorReason } = await import(\n \"./errors.js\"\n );\n\n console.error(\"❌ Schema export failed:\", (error as Error).message);\n\n // Map specific error types to appropriate exit codes\n if (error instanceof SchemaExportError) {\n if (error.outPath) {\n console.error(` Output path: ${error.outPath}`);\n }\n\n // Use error reason for type-safe exit code mapping\n switch (error.reason) {\n case ExportErrorReason.FILE_EXISTS:\n case ExportErrorReason.WRITE_FAILED:\n process.exit(exitCodes.EXIT_FILE_WRITE_ERROR);\n break;\n\n case ExportErrorReason.INVALID_FORMAT:\n process.exit(exitCodes.EXIT_INVALID_ARGUMENT);\n break;\n\n default:\n // PROVENANCE_FAILED, UNKNOWN, and any future reasons\n process.exit(exitCodes.EXIT_FAILURE);\n }\n }\n\n if (error instanceof SchemaValidationError) {\n // Schema not found or validation failed\n const errorMsg = error.message.toLowerCase();\n\n if (errorMsg.includes(\"not found\")) {\n process.exit(exitCodes.EXIT_FILE_NOT_FOUND);\n }\n\n // Validation failures\n process.exit(exitCodes.EXIT_DATA_INVALID);\n }\n\n process.exit(exitCodes.EXIT_FAILURE);\n }\n },\n );\n\n // Identity show command\n program\n .command(\"identity-show\")\n .description(\"Show application identity from .fulmen/app.yaml\")\n .option(\"--path <path>\", \"Explicit path to app.yaml\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (cmdOptions: { path?: string; json?: boolean }) => {\n try {\n const { loadIdentity } = await import(\"../appidentity/loader.js\");\n const { exitCodes } = await import(\"../foundry/index.js\");\n\n const identity = await loadIdentity({ path: cmdOptions.path });\n\n if (cmdOptions.json) {\n console.log(JSON.stringify(identity, null, 2));\n } else {\n console.log(\"Application Identity:\\n\");\n console.log(` Binary Name: ${identity.app.binary_name}`);\n console.log(` Vendor: ${identity.app.vendor}`);\n console.log(` Env Prefix: ${identity.app.env_prefix}`);\n console.log(` Config Name: ${identity.app.config_name}`);\n console.log(` Description: ${identity.app.description}`);\n\n if (identity.metadata) {\n console.log(\"\\nMetadata:\");\n if (identity.metadata.license) {\n console.log(` License: ${identity.metadata.license}`);\n }\n if (identity.metadata.repository_category) {\n console.log(` Category: ${identity.metadata.repository_category}`);\n }\n if (identity.metadata.telemetry_namespace) {\n console.log(` Telemetry: ${identity.metadata.telemetry_namespace}`);\n }\n if (identity.metadata.project_url) {\n console.log(` Project URL: ${identity.metadata.project_url}`);\n }\n }\n }\n\n process.exit(exitCodes.EXIT_SUCCESS);\n } catch (error) {\n const { exitCodes } = await import(\"../foundry/index.js\");\n const { AppIdentityError } = await import(\"../appidentity/errors.js\");\n\n console.error(\"❌ Failed to load identity:\", (error as Error).message);\n\n if (error instanceof AppIdentityError) {\n if (error.message.includes(\"not found\")) {\n process.exit(exitCodes.EXIT_FILE_NOT_FOUND);\n }\n if (error.message.includes(\"Invalid\") || error.message.includes(\"validation\")) {\n process.exit(exitCodes.EXIT_DATA_INVALID);\n }\n }\n\n process.exit(exitCodes.EXIT_FAILURE);\n }\n });\n\n // Identity validate command\n program\n .command(\"identity-validate\")\n .description(\"Validate application identity against schema\")\n .argument(\"[file]\", \"Path to app.yaml (defaults to discovery)\")\n .action(async (file?: string) => {\n try {\n const { loadIdentity } = await import(\"../appidentity/loader.js\");\n const { exitCodes } = await import(\"../foundry/index.js\");\n\n console.log(\"Validating application identity...\");\n\n const identity = await loadIdentity({ path: file });\n\n console.log(\"✅ Identity is valid\");\n console.log(` Binary: ${identity.app.binary_name}`);\n console.log(` Vendor: ${identity.app.vendor}`);\n\n process.exit(exitCodes.EXIT_SUCCESS);\n } catch (error) {\n const { exitCodes } = await import(\"../foundry/index.js\");\n const { AppIdentityError } = await import(\"../appidentity/errors.js\");\n\n console.error(\"❌ Identity validation failed:\", (error as Error).message);\n\n if (error instanceof AppIdentityError) {\n if (error.message.includes(\"not found\")) {\n process.exit(exitCodes.EXIT_FILE_NOT_FOUND);\n }\n if (error.message.includes(\"Invalid\") || error.message.includes(\"validation\")) {\n process.exit(exitCodes.EXIT_DATA_INVALID);\n }\n }\n\n process.exit(exitCodes.EXIT_FAILURE);\n }\n });\n\n return program;\n}\n","/**\n * Schema export utilities - implements schema export with provenance\n */\n\nimport { access, mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname, extname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { parse as parseYAML, stringify as stringifyYAML } from \"yaml\";\nimport { SchemaExportError, SchemaValidationError } from \"./errors.js\";\nimport { getSchemaRegistry } from \"./registry.js\";\nimport type {\n ExportSchemaOptions,\n ExportSchemaResult,\n SchemaExportFormat,\n SchemaProvenanceMetadata,\n} from \"./types.js\";\nimport { validateSchema } from \"./validator.js\";\n\n/**\n * Extract provenance metadata from Crucible sync metadata\n */\nasync function extractProvenanceMetadata(schemaId: string): Promise<SchemaProvenanceMetadata> {\n try {\n // Read Crucible metadata using proper path resolution\n const __filename = fileURLToPath(import.meta.url);\n const __dirname = dirname(__filename);\n const metadataPath = join(__dirname, \"..\", \"..\", \".crucible\", \"metadata\", \"metadata.yaml\");\n const metadataContent = await readFile(metadataPath, \"utf-8\");\n\n // Parse YAML properly to avoid brittle regex matching\n const metadata = parseYAML(metadataContent) as {\n sources?: Array<{\n name?: string;\n version?: string;\n commit?: string;\n }>;\n };\n\n // Extract Crucible source metadata (first source is typically 'crucible')\n const crucibleSource = metadata.sources?.[0];\n const crucibleVersion = crucibleSource?.version || \"unknown\";\n const revision = crucibleSource?.commit;\n\n // Read library version from package.json\n const pkgPath = join(__dirname, \"..\", \"..\", \"package.json\");\n const pkgContent = await readFile(pkgPath, \"utf-8\");\n const pkg = JSON.parse(pkgContent) as { version: string };\n\n return {\n schema_id: schemaId,\n crucible_version: crucibleVersion,\n library_version: pkg.version,\n revision: revision,\n exported_at: new Date().toISOString(),\n export_source: \"tsfulmen\",\n };\n } catch (error) {\n throw SchemaExportError.provenanceFailed((error as Error).message, error as Error);\n }\n}\n\n/**\n * Embed provenance metadata in schema content\n */\nfunction embedProvenance(\n schemaContent: Record<string, unknown>,\n provenance: SchemaProvenanceMetadata,\n format: SchemaExportFormat,\n): string {\n if (format === \"json\") {\n // For JSON: embed under $comment[\"x-crucible-source\"]\n const withProvenance = {\n ...schemaContent,\n $comment: {\n ...(typeof schemaContent.$comment === \"object\" ? schemaContent.$comment : {}),\n \"x-crucible-source\": provenance,\n },\n };\n return JSON.stringify(withProvenance, null, 2);\n }\n\n // For YAML: prepend comment block\n const yamlContent = stringifyYAML(schemaContent, {\n indent: 2,\n lineWidth: 0,\n });\n\n const provenanceComment = [\n \"# x-crucible-source:\",\n `# schema_id: ${provenance.schema_id}`,\n `# crucible_version: ${provenance.crucible_version}`,\n `# library_version: ${provenance.library_version}`,\n ...(provenance.revision ? [`# revision: ${provenance.revision}`] : []),\n `# exported_at: ${provenance.exported_at}`,\n `# export_source: ${provenance.export_source}`,\n \"\",\n ].join(\"\\n\");\n\n return provenanceComment + yamlContent;\n}\n\n/**\n * Detect export format from file extension or explicit option\n */\nfunction detectFormat(outPath: string, formatOption?: SchemaExportFormat): SchemaExportFormat {\n if (formatOption && formatOption !== \"auto\") {\n return formatOption;\n }\n\n const ext = extname(outPath).toLowerCase();\n switch (ext) {\n case \".json\":\n return \"json\";\n case \".yaml\":\n case \".yml\":\n return \"yaml\";\n default:\n throw SchemaExportError.invalidFormat(ext, outPath);\n }\n}\n\n/**\n * Export schema from registry to file with provenance\n *\n * @param options - Export options\n * @returns Export result with metadata\n *\n * @throws {SchemaExportError} If export fails\n * @throws {SchemaValidationError} If schema not found or validation fails\n *\n * @example\n * ```typescript\n * import { exportSchema } from '@fulmenhq/tsfulmen/schema';\n *\n * await exportSchema({\n * schemaId: 'library/foundry/v1.0.0/exit-codes',\n * outPath: './schemas/exit-codes.schema.json',\n * includeProvenance: true,\n * validate: true,\n * });\n * ```\n */\nexport async function exportSchema(options: ExportSchemaOptions): Promise<ExportSchemaResult> {\n const {\n schemaId,\n outPath,\n includeProvenance = true,\n validate = true,\n overwrite = false,\n format: formatOption,\n baseDir,\n } = options;\n\n // Detect output format\n const format = detectFormat(outPath, formatOption);\n\n // Check if file exists\n if (!overwrite) {\n try {\n await access(outPath);\n throw SchemaExportError.fileExists(outPath);\n } catch (error) {\n // File doesn't exist - proceed\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n }\n\n // Get schema from registry\n const registry = getSchemaRegistry({ baseDir });\n const schema = await registry.getSchema(schemaId);\n\n // Read schema content\n const schemaContent = await readFile(schema.path, \"utf-8\");\n\n // Validate if requested\n if (validate) {\n const validationResult = await validateSchema(schemaContent);\n if (!validationResult.valid) {\n throw SchemaValidationError.validationFailed(schemaId, validationResult.diagnostics, {\n type: \"file\",\n id: schema.path,\n });\n }\n }\n\n // Parse schema content\n let schemaObject: Record<string, unknown>;\n try {\n schemaObject = JSON.parse(schemaContent) as Record<string, unknown>;\n } catch {\n schemaObject = parseYAML(schemaContent) as Record<string, unknown>;\n }\n\n // Freeze schema object to prevent mutation\n Object.freeze(schemaObject);\n\n let provenance: SchemaProvenanceMetadata | undefined;\n let outputContent: string;\n\n if (includeProvenance) {\n // Extract provenance metadata\n provenance = await extractProvenanceMetadata(schemaId);\n\n // Embed provenance in output\n outputContent = embedProvenance(schemaObject, provenance, format);\n } else {\n // Export without provenance\n if (format === \"json\") {\n outputContent = JSON.stringify(schemaObject, null, 2);\n } else {\n outputContent = stringifyYAML(schemaObject, { indent: 2, lineWidth: 0 });\n }\n }\n\n // Ensure output directory exists\n await mkdir(dirname(outPath), { recursive: true });\n\n // Write to file\n try {\n await writeFile(outPath, outputContent, \"utf-8\");\n } catch (error) {\n throw SchemaExportError.writeFailed(outPath, error as Error);\n }\n\n return {\n success: true,\n schemaId,\n outPath,\n format,\n includeProvenance,\n provenance,\n };\n}\n\n/**\n * Strip provenance metadata from schema content\n *\n * This helper is useful for comparing exported schemas with runtime\n * schemas or validating that provenance doesn't affect schema semantics.\n *\n * @param content - Schema content (JSON or YAML string)\n * @returns Schema content without provenance metadata\n *\n * @example\n * ```typescript\n * import { stripProvenance } from '@fulmenhq/tsfulmen/schema';\n *\n * const exported = await readFile('./schema.json', 'utf-8');\n * const withoutProvenance = stripProvenance(exported);\n * ```\n */\nexport function stripProvenance(content: string): string {\n try {\n // Try parsing as JSON\n const parsed = JSON.parse(content) as Record<string, unknown>;\n\n // Remove provenance from $comment\n if (parsed.$comment && typeof parsed.$comment === \"object\") {\n const comment = { ...parsed.$comment } as Record<string, unknown>;\n delete comment[\"x-crucible-source\"];\n\n // Remove $comment entirely if it's now empty\n if (Object.keys(comment).length === 0) {\n delete parsed.$comment;\n } else {\n parsed.$comment = comment;\n }\n }\n\n return JSON.stringify(parsed, null, 2);\n } catch {\n // YAML format - strip comment lines\n const lines = content.split(\"\\n\");\n const filtered = lines.filter((line) => {\n const trimmed = line.trim();\n return !(\n trimmed.startsWith(\"# x-crucible-source:\") ||\n (trimmed.startsWith(\"# \") &&\n /^#\\s+(schema_id|crucible_version|library_version|revision|exported_at|export_source):/.test(\n trimmed,\n ))\n );\n });\n\n // Remove leading blank lines\n while (filtered.length > 0 && filtered[0]?.trim() === \"\") {\n filtered.shift();\n }\n\n return filtered.join(\"\\n\");\n }\n}\n","/**\n * Schema validation module - implements Fulmen Schema Validation Standard\n *\n * Provides schema discovery, validation, and normalization utilities for Crucible schemas\n * with JSON Schema 2020-12 support and optional goneat integration.\n */\n\nexport const VERSION = \"0.1.0\";\n\nexport {\n applyFulmenAjvFormats,\n type FulmenAjvFormatsOptions,\n} from \"./ajv-formats.js\";\n\n// CLI exports\nexport { createCLI } from \"./cli.js\";\n// Error exports\nexport * from \"./errors.js\";\n// Export exports\nexport { exportSchema, stripProvenance } from \"./export.js\";\n// Goneat bridge exports (CLI-only, optional)\nexport {\n detectGoneat,\n isGoneatAvailable,\n runGoneatValidation,\n} from \"./goneat-bridge.js\";\n// Normalizer exports\nexport { compareSchemas, normalizeSchema } from \"./normalizer.js\";\n// Registry exports\nexport {\n getSchema,\n getSchemaByPath,\n getSchemaRegistry,\n hasSchema,\n listSchemas,\n SchemaRegistry,\n} from \"./registry.js\";\n// Core exports\nexport type {\n AjvError,\n CLIOptions,\n CompiledValidator,\n ExportSchemaOptions,\n ExportSchemaResult,\n SchemaComparisonResult,\n SchemaExportFormat,\n SchemaFormat,\n SchemaInput,\n SchemaMetadata,\n SchemaNormalizationOptions,\n SchemaProvenanceMetadata,\n SchemaRegistryOptions,\n SchemaSource,\n SchemaValidationDiagnostic,\n SchemaValidationOptions,\n SchemaValidationResult,\n} from \"./types.js\";\n// Utility exports\nexport {\n countDiagnostics,\n createDiagnostic,\n formatDiagnostics,\n formatValidationResult,\n groupDiagnosticsBySeverity,\n isValidationError,\n normalizePointer,\n} from \"./utils.js\";\n// Validator exports\nexport {\n clearCache,\n compileSchema,\n compileSchemaById,\n getCacheSize,\n validateData,\n validateDataBySchemaId,\n validateFile,\n validateFileBySchemaId,\n validateSchema,\n} from \"./validator.js\";\n","/**\n * Metrics event validators\n *\n * Schema validation for metrics events using existing src/schema infrastructure\n */\n\nimport { compileSchemaById } from \"../schema/index.js\";\nimport type { CompiledValidator } from \"../schema/types.js\";\n\n/**\n * Singleton validator for metrics events\n *\n * Pre-compiles the metrics-event schema at first access for optimal performance.\n * Reuses existing AJV setup from src/schema module.\n */\nclass MetricsValidator {\n private static instance: MetricsValidator;\n private validateFn: CompiledValidator | null = null;\n private initPromise: Promise<void> | null = null;\n private initError: Error | null = null;\n\n private constructor() {\n // Private constructor for singleton\n }\n\n /**\n * Get singleton instance\n */\n static getInstance(): MetricsValidator {\n if (!MetricsValidator.instance) {\n MetricsValidator.instance = new MetricsValidator();\n }\n return MetricsValidator.instance;\n }\n\n /**\n * Initialize validator (lazy load, async)\n */\n private async init(): Promise<void> {\n if (this.validateFn !== null || this.initError !== null) {\n return; // Already initialized\n }\n\n if (this.initPromise) {\n return this.initPromise; // Already initializing\n }\n\n this.initPromise = (async () => {\n try {\n // Compile schema using existing schema infrastructure\n this.validateFn = await compileSchemaById(\"observability/metrics/v1.0.0/metrics-event\");\n } catch (err) {\n this.initError = err instanceof Error ? err : new Error(String(err));\n throw new Error(`Failed to initialize metrics validator: ${this.initError.message}`);\n }\n })();\n\n return this.initPromise;\n }\n\n /**\n * Validate metrics event against schema\n *\n * @param event - Metrics event to validate\n * @returns Promise resolving to true if valid, false otherwise\n */\n async validate(event: unknown): Promise<boolean> {\n if (this.validateFn === null) {\n await this.init();\n }\n\n if (this.initError) {\n throw this.initError;\n }\n\n if (!this.validateFn) {\n throw new Error(\"Validator not initialized\");\n }\n\n return this.validateFn(event);\n }\n\n /**\n * Get validation errors from last validation\n */\n getErrors() {\n if (!this.validateFn) {\n return null;\n }\n return this.validateFn.errors;\n }\n\n /**\n * Reset validator state (for testing)\n * @internal\n */\n static _reset(): void {\n MetricsValidator.instance = new MetricsValidator();\n }\n}\n\n/**\n * Validate metrics event against schema\n *\n * Uses pre-compiled validator singleton for optimal performance.\n *\n * @param event - Metrics event to validate\n * @returns Promise resolving to true if valid\n *\n * @example\n * ```typescript\n * const event: MetricsEvent = {\n * timestamp: new Date().toISOString(),\n * name: 'schema_validations',\n * value: 42\n * };\n *\n * if (await validateMetricsEvent(event)) {\n * // Event is schema-compliant\n * } else {\n * const errors = getValidationErrors();\n * console.error('Validation failed:', errors);\n * }\n * ```\n */\nexport async function validateMetricsEvent(event: unknown): Promise<boolean> {\n return MetricsValidator.getInstance().validate(event);\n}\n\n/**\n * Validate array of metrics events\n *\n * @param events - Array of metrics events\n * @returns Promise resolving to true if all valid\n */\nexport async function validateMetricsEvents(events: unknown[]): Promise<boolean> {\n for (const event of events) {\n if (!(await validateMetricsEvent(event))) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Get validation errors from last validation\n */\nexport function getValidationErrors() {\n return MetricsValidator.getInstance().getErrors();\n}\n\n/**\n * Format validation errors as human-readable string\n */\nexport function formatValidationErrors(\n errors: Array<{ instancePath?: string; message?: string }>,\n): string {\n return errors\n .map((err) => {\n const path = err.instancePath || \"(root)\";\n const message = err.message || \"validation failed\";\n return `${path}: ${message}`;\n })\n .join(\"; \");\n}\n\n/**\n * Assert that metrics event is valid (throws if not)\n *\n * @param event - Metrics event to validate\n * @throws {Error} If validation fails\n */\nexport async function assertValidMetricsEvent(event: unknown): Promise<void> {\n if (!(await validateMetricsEvent(event))) {\n const errors = getValidationErrors();\n const message = errors ? formatValidationErrors(errors) : \"Metrics event validation failed\";\n throw new Error(`Invalid metrics event: ${message}`);\n }\n}\n\n// Export for testing\nexport { MetricsValidator };\n","/**\n * Telemetry module - metrics collection and export\n *\n * Provides counter, gauge, and histogram metrics with schema validation\n * and taxonomy-based defaults (ADR-0007).\n */\n\nexport const VERSION = \"1.0.0\";\n\n// Core registry and singleton\nexport { MetricsRegistry } from \"./registry.js\";\n\nimport { MetricsRegistry } from \"./registry.js\";\n\n/**\n * Default singleton metrics registry\n *\n * Use this for application-wide metrics collection.\n *\n * @example\n * ```typescript\n * import { metrics } from '@fulmenhq/tsfulmen/telemetry';\n *\n * // Increment counter\n * metrics.counter('schema_validations').inc();\n *\n * // Record histogram observation\n * metrics.histogram('config_load_ms').observe(42.5);\n *\n * // Export all metrics\n * const events = await metrics.export();\n * ```\n */\nexport const metrics = new MetricsRegistry();\n\n// Metric types\nexport { Counter } from \"./counter.js\";\nexport { Gauge } from \"./gauge.js\";\nexport { Histogram } from \"./histogram.js\";\n// Taxonomy\nexport type { MetricDefinition, MetricsTaxonomy } from \"./taxonomy.js\";\nexport {\n DEFAULT_MS_BUCKETS,\n getDefaultBuckets,\n getDefaultUnit,\n getMetric,\n getTaxonomy,\n isValidMetricName as isValidMetricNameTaxonomy,\n} from \"./taxonomy.js\";\n// Types\nexport type {\n FlushOptions,\n HistogramBucket,\n HistogramOptions,\n HistogramSummary,\n MetricName,\n MetricsEvent,\n MetricUnit,\n MetricValue,\n} from \"./types.js\";\nexport {\n isHistogramSummary,\n isValidMetricName,\n isValidMetricUnit,\n} from \"./types.js\";\n\n// Validators\nexport {\n assertValidMetricsEvent,\n formatValidationErrors,\n getValidationErrors,\n validateMetricsEvent,\n validateMetricsEvents,\n} from \"./validators.js\";\n"]}