avorelo 0.1.0 → 0.3.0

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 (260) hide show
  1. package/LICENSE +23 -16
  2. package/README.md +90 -51
  3. package/bin/avorelo.mjs +7 -0
  4. package/dist/avorelo.mjs +19741 -0
  5. package/package.json +135 -120
  6. package/bin/avorelo +0 -9
  7. package/scripts/README.md +0 -40
  8. package/scripts/cco-dashboard.js +0 -252
  9. package/scripts/cco-status.js +0 -430
  10. package/scripts/lib/activation/account-state.js +0 -37
  11. package/scripts/lib/activation/activation-runner.js +0 -546
  12. package/scripts/lib/activation/activation-self-healing.js +0 -480
  13. package/scripts/lib/activation/activation-state.js +0 -83
  14. package/scripts/lib/activation/activation-summary.js +0 -191
  15. package/scripts/lib/activation/adapters/claude-code.js +0 -77
  16. package/scripts/lib/activation/adapters/codex-cli.js +0 -52
  17. package/scripts/lib/activation/adapters/cursor.js +0 -37
  18. package/scripts/lib/activation/adapters/github-agent.js +0 -39
  19. package/scripts/lib/activation/adapters/terminal.js +0 -42
  20. package/scripts/lib/activation/adapters/vscode.js +0 -39
  21. package/scripts/lib/activation/adapters/windsurf.js +0 -37
  22. package/scripts/lib/activation/ai-surface-detector.js +0 -151
  23. package/scripts/lib/activation/connect-account.js +0 -145
  24. package/scripts/lib/activation/detect-environment.js +0 -75
  25. package/scripts/lib/activation/detect-hosts.js +0 -62
  26. package/scripts/lib/activation/format-activation-output.js +0 -109
  27. package/scripts/lib/activation/next-action.js +0 -43
  28. package/scripts/lib/activation/repair-engine.js +0 -219
  29. package/scripts/lib/activation-distribution-readiness.js +0 -507
  30. package/scripts/lib/adapter-conformance.js +0 -176
  31. package/scripts/lib/adapter-readiness.js +0 -417
  32. package/scripts/lib/adapter-safety-boundaries.js +0 -335
  33. package/scripts/lib/adapter-technical-readiness-gate.js +0 -205
  34. package/scripts/lib/agent-access-governance.js +0 -455
  35. package/scripts/lib/agent-enforcement.js +0 -765
  36. package/scripts/lib/agent-policy-profile.js +0 -210
  37. package/scripts/lib/agent-security/action-evaluator.js +0 -507
  38. package/scripts/lib/agent-security/adapter-registry.js +0 -98
  39. package/scripts/lib/agent-security/auto-policy.js +0 -139
  40. package/scripts/lib/agent-security/bounded-scan.js +0 -93
  41. package/scripts/lib/agent-security/enforcement-adapter.js +0 -174
  42. package/scripts/lib/agent-security/enforcement-engine.js +0 -1129
  43. package/scripts/lib/agent-security/file-write-adapter.js +0 -183
  44. package/scripts/lib/agent-security/file-write-rules.js +0 -178
  45. package/scripts/lib/agent-security/index.js +0 -3342
  46. package/scripts/lib/agent-security/instruction-risk.js +0 -181
  47. package/scripts/lib/agent-security/mcp-action-adapter.js +0 -185
  48. package/scripts/lib/agent-security/mcp-action-rules.js +0 -184
  49. package/scripts/lib/agent-security/package-action-adapter.js +0 -175
  50. package/scripts/lib/agent-security/package-action-rules.js +0 -233
  51. package/scripts/lib/agent-security/performance.js +0 -148
  52. package/scripts/lib/agent-security/permission-minimizer.js +0 -403
  53. package/scripts/lib/agent-security/scan-cache.js +0 -74
  54. package/scripts/lib/agent-security/source-trust.js +0 -146
  55. package/scripts/lib/ai-install-prompt.js +0 -288
  56. package/scripts/lib/ai-workspace-hygiene.js +0 -1499
  57. package/scripts/lib/alpha-activation.js +0 -520
  58. package/scripts/lib/alpha-feedback.js +0 -263
  59. package/scripts/lib/alpha-readiness-gate.js +0 -332
  60. package/scripts/lib/anti-gaming.js +0 -169
  61. package/scripts/lib/artifact-health.js +0 -431
  62. package/scripts/lib/attribution.js +0 -180
  63. package/scripts/lib/audit.js +0 -289
  64. package/scripts/lib/avorelo-skill-registry.js +0 -810
  65. package/scripts/lib/batch-jobs.js +0 -71
  66. package/scripts/lib/brain-pack.js +0 -578
  67. package/scripts/lib/brand-boundary.js +0 -424
  68. package/scripts/lib/brand.js +0 -74
  69. package/scripts/lib/browser-capability.js +0 -1048
  70. package/scripts/lib/browser-proof-preflight.js +0 -321
  71. package/scripts/lib/cache-readiness.js +0 -187
  72. package/scripts/lib/canonical-reentry.js +0 -162
  73. package/scripts/lib/capability-packs.js +0 -314
  74. package/scripts/lib/capability-recommender.js +0 -512
  75. package/scripts/lib/capability-registry.js +0 -1059
  76. package/scripts/lib/carry-forward-surfacing.js +0 -194
  77. package/scripts/lib/ccusage-adapter.js +0 -188
  78. package/scripts/lib/company-loop.js +0 -1149
  79. package/scripts/lib/config.js +0 -637
  80. package/scripts/lib/context-acquisition-plan.js +0 -287
  81. package/scripts/lib/context-budget-guard.js +0 -170
  82. package/scripts/lib/context-budget-scanner.js +0 -257
  83. package/scripts/lib/context-optimizer.js +0 -715
  84. package/scripts/lib/context-reduction-plan.js +0 -178
  85. package/scripts/lib/context-safety.js +0 -88
  86. package/scripts/lib/context-savings-engine.js +0 -158
  87. package/scripts/lib/cost-evidence.js +0 -254
  88. package/scripts/lib/cross-host-install-plan.js +0 -308
  89. package/scripts/lib/cross-host-install-readiness.js +0 -237
  90. package/scripts/lib/cross-host-value-flow.js +0 -268
  91. package/scripts/lib/dashboard.js +0 -900
  92. package/scripts/lib/design-partner-feedback.js +0 -346
  93. package/scripts/lib/entitlements.js +0 -100
  94. package/scripts/lib/execution-packet.js +0 -559
  95. package/scripts/lib/experimentation-events.js +0 -547
  96. package/scripts/lib/external-capability-compliance.js +0 -107
  97. package/scripts/lib/external-user-simulation.js +0 -166
  98. package/scripts/lib/failure-recovery-readiness.js +0 -81
  99. package/scripts/lib/failure-recovery.js +0 -419
  100. package/scripts/lib/feedback-intelligence.js +0 -537
  101. package/scripts/lib/feedback-signals.js +0 -205
  102. package/scripts/lib/file-integrity.js +0 -68
  103. package/scripts/lib/fsx.js +0 -127
  104. package/scripts/lib/full-readiness-gate.js +0 -451
  105. package/scripts/lib/guidance-builder.js +0 -174
  106. package/scripts/lib/hook-apply.js +0 -1019
  107. package/scripts/lib/hook-baseline.js +0 -310
  108. package/scripts/lib/hook-config-preview.js +0 -275
  109. package/scripts/lib/hook-contracts.js +0 -290
  110. package/scripts/lib/hook-safety-boundary-readiness.js +0 -80
  111. package/scripts/lib/host-capability-matrix.js +0 -351
  112. package/scripts/lib/host-support-context.js +0 -254
  113. package/scripts/lib/http-hook-action.js +0 -538
  114. package/scripts/lib/install-ai-readiness.js +0 -84
  115. package/scripts/lib/install-intake-risk.js +0 -1037
  116. package/scripts/lib/install-journey-intelligence.js +0 -329
  117. package/scripts/lib/intervention-guidance.js +0 -57
  118. package/scripts/lib/known-limitations.js +0 -115
  119. package/scripts/lib/l8-path-truth.js +0 -146
  120. package/scripts/lib/launch-hardening-gate.js +0 -436
  121. package/scripts/lib/launch-readiness.js +0 -628
  122. package/scripts/lib/learning-memory.js +0 -686
  123. package/scripts/lib/lifecycle-hooks.js +0 -802
  124. package/scripts/lib/local-package-smoke.js +0 -423
  125. package/scripts/lib/local-pricing.js +0 -299
  126. package/scripts/lib/mcp-enforcement.js +0 -311
  127. package/scripts/lib/mcp-least-privilege-policy.js +0 -303
  128. package/scripts/lib/mcp-tool-inventory.js +0 -388
  129. package/scripts/lib/mcp-tool-risk.js +0 -0
  130. package/scripts/lib/memory.js +0 -335
  131. package/scripts/lib/metrics.js +0 -699
  132. package/scripts/lib/micro-proof.js +0 -133
  133. package/scripts/lib/next-run-context.js +0 -436
  134. package/scripts/lib/operating-value.js +0 -1648
  135. package/scripts/lib/optimization-v3.js +0 -122
  136. package/scripts/lib/orchestration/adapters/_shared.js +0 -49
  137. package/scripts/lib/orchestration/adapters/aider.js +0 -18
  138. package/scripts/lib/orchestration/adapters/claude-code.js +0 -35
  139. package/scripts/lib/orchestration/adapters/codex.js +0 -35
  140. package/scripts/lib/orchestration/adapters/gemini-cli.js +0 -18
  141. package/scripts/lib/orchestration/adapters/git.js +0 -25
  142. package/scripts/lib/orchestration/adapters/index.js +0 -31
  143. package/scripts/lib/orchestration/adapters/lm-studio.js +0 -18
  144. package/scripts/lib/orchestration/adapters/ollama.js +0 -18
  145. package/scripts/lib/orchestration/adapters/opencode.js +0 -18
  146. package/scripts/lib/orchestration/adapters/openrouter.js +0 -18
  147. package/scripts/lib/orchestration/adapters/test-runner.js +0 -25
  148. package/scripts/lib/orchestration/cli.js +0 -438
  149. package/scripts/lib/orchestration/execution-manager.js +0 -279
  150. package/scripts/lib/orchestration/handoff.js +0 -314
  151. package/scripts/lib/orchestration/index.js +0 -456
  152. package/scripts/lib/orchestration/inventory.js +0 -47
  153. package/scripts/lib/orchestration/model-discovery.js +0 -498
  154. package/scripts/lib/orchestration/model-profiler.js +0 -170
  155. package/scripts/lib/orchestration/model-profiles.js +0 -252
  156. package/scripts/lib/orchestration/model-refresh-policy.js +0 -72
  157. package/scripts/lib/orchestration/proof-writer.js +0 -349
  158. package/scripts/lib/orchestration/provider-discovery/aider.js +0 -49
  159. package/scripts/lib/orchestration/provider-discovery/claude-code.js +0 -56
  160. package/scripts/lib/orchestration/provider-discovery/codex.js +0 -49
  161. package/scripts/lib/orchestration/provider-discovery/common.js +0 -186
  162. package/scripts/lib/orchestration/provider-discovery/gemini.js +0 -106
  163. package/scripts/lib/orchestration/provider-discovery/lm-studio.js +0 -118
  164. package/scripts/lib/orchestration/provider-discovery/models-dev.js +0 -12
  165. package/scripts/lib/orchestration/provider-discovery/ollama.js +0 -100
  166. package/scripts/lib/orchestration/provider-discovery/opencode.js +0 -47
  167. package/scripts/lib/orchestration/provider-discovery/openrouter.js +0 -44
  168. package/scripts/lib/orchestration/risk-classifier.js +0 -130
  169. package/scripts/lib/orchestration/routing-policy.js +0 -486
  170. package/scripts/lib/orchestration/settings.js +0 -112
  171. package/scripts/lib/orchestration/state.js +0 -165
  172. package/scripts/lib/orchestration/verification-manager.js +0 -138
  173. package/scripts/lib/output-profiles.js +0 -146
  174. package/scripts/lib/package-content-audit.js +0 -368
  175. package/scripts/lib/package-runtime.js +0 -278
  176. package/scripts/lib/plan-surface.js +0 -53
  177. package/scripts/lib/plans.js +0 -2318
  178. package/scripts/lib/policy-provider.js +0 -27
  179. package/scripts/lib/prelaunch-activation-readiness.js +0 -409
  180. package/scripts/lib/prelaunch-evidence-store.js +0 -816
  181. package/scripts/lib/prelaunch-intelligence.js +0 -869
  182. package/scripts/lib/pricing-experiment.js +0 -118
  183. package/scripts/lib/pro-moment-events.js +0 -77
  184. package/scripts/lib/pro-moment-state.js +0 -227
  185. package/scripts/lib/pro-moments.js +0 -1216
  186. package/scripts/lib/product-learning-events.js +0 -629
  187. package/scripts/lib/project-profile.js +0 -555
  188. package/scripts/lib/prompt-compiler.js +0 -280
  189. package/scripts/lib/prompt-lint.js +0 -32
  190. package/scripts/lib/prompt-suggestions.js +0 -52
  191. package/scripts/lib/proof-canonical.js +0 -398
  192. package/scripts/lib/proof-drilldown.js +0 -383
  193. package/scripts/lib/proof-events.js +0 -342
  194. package/scripts/lib/proof-history.js +0 -243
  195. package/scripts/lib/proof-metrics.js +0 -296
  196. package/scripts/lib/proof-outcome-evidence.js +0 -134
  197. package/scripts/lib/proof-receipt.js +0 -335
  198. package/scripts/lib/proof-record.js +0 -461
  199. package/scripts/lib/public-activation-distribution-gate.js +0 -258
  200. package/scripts/lib/public-cli.js +0 -3891
  201. package/scripts/lib/public-distribution-truth.js +0 -211
  202. package/scripts/lib/public-install-claim-checker.js +0 -294
  203. package/scripts/lib/publish-provenance-readiness.js +0 -283
  204. package/scripts/lib/readiness-delta.js +0 -218
  205. package/scripts/lib/readiness-evidence-closure.js +0 -196
  206. package/scripts/lib/reentry-memory-capture.js +0 -241
  207. package/scripts/lib/reentry-memory-retrieval.js +0 -302
  208. package/scripts/lib/reentry-memory-status.js +0 -146
  209. package/scripts/lib/reentry-memory-store.js +0 -178
  210. package/scripts/lib/reentry-state.js +0 -66
  211. package/scripts/lib/release-candidate-bundle.js +0 -166
  212. package/scripts/lib/remediation.js +0 -81
  213. package/scripts/lib/repo-map.js +0 -391
  214. package/scripts/lib/run-improvements-lifecycle.js +0 -330
  215. package/scripts/lib/run-improvements.js +0 -789
  216. package/scripts/lib/runtime-decision-policy.js +0 -387
  217. package/scripts/lib/safe-path-engine.js +0 -705
  218. package/scripts/lib/safe-run-controller.js +0 -887
  219. package/scripts/lib/score.js +0 -262
  220. package/scripts/lib/seamless-enforcement.js +0 -329
  221. package/scripts/lib/seamless-outcome.js +0 -689
  222. package/scripts/lib/seamless-reality-gate.js +0 -5043
  223. package/scripts/lib/security-risk-classifier.js +0 -511
  224. package/scripts/lib/security-scan.js +0 -384
  225. package/scripts/lib/session-context-optimizer.js +0 -1211
  226. package/scripts/lib/session-timing.js +0 -315
  227. package/scripts/lib/skill-hygiene.js +0 -805
  228. package/scripts/lib/skill-packs.js +0 -161
  229. package/scripts/lib/skills-operating-layer.js +0 -580
  230. package/scripts/lib/smart-work-routing.js +0 -768
  231. package/scripts/lib/source-catalog.js +0 -700
  232. package/scripts/lib/status-value-summary.js +0 -32
  233. package/scripts/lib/support-bundle.js +0 -578
  234. package/scripts/lib/task-continuation.js +0 -440
  235. package/scripts/lib/test-helpers.js +0 -15
  236. package/scripts/lib/tier.js +0 -38
  237. package/scripts/lib/token-context-quality-gate.js +0 -370
  238. package/scripts/lib/token-cost-capture.js +0 -187
  239. package/scripts/lib/token-cost-intelligence.js +0 -358
  240. package/scripts/lib/token-efficiency-evidence.js +0 -213
  241. package/scripts/lib/token-evidence.js +0 -699
  242. package/scripts/lib/tokenish.js +0 -17
  243. package/scripts/lib/tool-output-sandbox.js +0 -304
  244. package/scripts/lib/trust-audit.js +0 -136
  245. package/scripts/lib/unified-events.js +0 -396
  246. package/scripts/lib/upgrade-interruption-recovery.js +0 -407
  247. package/scripts/lib/usage-ledger.js +0 -201
  248. package/scripts/lib/value-ledger.js +0 -130
  249. package/scripts/lib/value-proof-calibration.js +0 -531
  250. package/scripts/lib/visual-qa.js +0 -231
  251. package/scripts/lib/voice-alpha.js +0 -29
  252. package/scripts/lib/work-aware-orchestration.js +0 -976
  253. package/scripts/lib/work-control-receipts.js +0 -577
  254. package/scripts/lib/work-ledger.js +0 -1123
  255. package/scripts/lib/work-panel-preview.js +0 -352
  256. package/scripts/lib/workflow-discipline.js +0 -280
  257. package/scripts/lib/workflow-signals.js +0 -419
  258. package/scripts/lib/workspace-map.js +0 -281
  259. package/scripts/lib/workspace-registry.js +0 -1367
  260. package/scripts/lib/workspace-resolver.js +0 -480
@@ -1,1059 +0,0 @@
1
- "use strict";
2
-
3
- const { CAPABILITIES } = require("./plans");
4
-
5
- const VALID_FAMILY_IDS = new Set([
6
- "activation_readiness",
7
- "status_dashboard",
8
- "prompt_workflow_help",
9
- "context_token_cost_optimization",
10
- "model_worker_routing",
11
- "execution_work_control",
12
- "agent_security",
13
- "agent_access_governance",
14
- "install_intake_risk",
15
- "safe_path_engine",
16
- "workspace_map",
17
- "skills_skill_packs",
18
- "source_intake",
19
- "thin_adapters",
20
- "product_learning",
21
- "proof_evidence",
22
- "pricing_entitlements",
23
- "website_onboarding",
24
- "frontend_visual_qa",
25
- "ai_workspace_hygiene",
26
- "execution_packet",
27
- "lifecycle_hooks",
28
- "token_efficiency_hardening",
29
- "launch_hardening",
30
- "failure_recovery_hardening",
31
- "artifact_health_monitoring",
32
- // PR #145 — MCP Least-Privilege Tool Governance v1
33
- "mcp_tool_governance",
34
- // PR #146 — One-Prompt AI Install + Pre-Launch Activation Readiness v1
35
- "ai_install_onboarding",
36
- "prelaunch_activation_readiness",
37
- // PR #147 — Pre-Launch Intelligence Layer v1
38
- "prelaunch_intelligence",
39
- // PR #148 — Full Readiness / Release Candidate Gate v1
40
- "full_readiness_gate",
41
- // PR #149 — Activation Distribution Readiness v1
42
- "activation_distribution_readiness",
43
- // PR #160 — Design Partner Feedback + Readiness Delta v1
44
- "design_partner_feedback",
45
- "readiness_delta",
46
- // PR #161 — Public Activation Distribution Truth v1
47
- "public_distribution",
48
- // PR #162 — Plugin / Adapter Technical Readiness v1
49
- "adapter_technical_readiness",
50
- // PR #163 — Cross-Host Install Plan + Browser-Proof Preflight v1
51
- "cross_host_adapter_readiness",
52
- ]);
53
-
54
- const VALID_PRODUCT_STATUSES = new Set([
55
- "shipped",
56
- "partial",
57
- "foundation",
58
- "docs_only",
59
- "gap",
60
- ]);
61
-
62
- const VALID_STRENGTHS = new Set(["strong", "partial", "weak", "missing"]);
63
- const VALID_SURFACE_TYPES = new Set(["policy", "detection", "warning", "evidence", "docs_only", "block", "approval"]);
64
-
65
- const FAMILY_OVERRIDES = Object.freeze({
66
- local_activation: "activation_readiness",
67
- ai_coding_readiness: "activation_readiness",
68
- dynamic_skill_pack_selection: "skills_skill_packs",
69
- reference_source_intake_basic: "source_intake",
70
- skill_md_parser_basic: "skills_skill_packs",
71
- skill_pattern_extraction_basic: "skills_skill_packs",
72
- skill_trust_scan_basic: "source_intake",
73
- capability_binding_basic: "skills_skill_packs",
74
- source_backed_skill_router_basic: "skills_skill_packs",
75
- thin_adapter_guidance_sync_basic: "thin_adapters",
76
- install_intake_risk_basic: "install_intake_risk",
77
- mcp_intake_visibility_basic: "install_intake_risk",
78
- package_intake_visibility_basic: "install_intake_risk",
79
- extension_intake_visibility_basic: "install_intake_risk",
80
- connector_intake_visibility_basic: "install_intake_risk",
81
- skill_source_intake_risk_basic: "install_intake_risk",
82
- intake_safe_next_action_basic: "install_intake_risk",
83
- intake_receipt_basic: "install_intake_risk",
84
- workspace_map_basic: "workspace_map",
85
- approval_required_decisions: "agent_access_governance",
86
- least_privilege_profile: "agent_access_governance",
87
- zero_standing_permissions_posture: "agent_access_governance",
88
- scoped_jit_style_access: "agent_access_governance",
89
- zero_standing_permissions_policy: "agent_access_governance",
90
- safe_path_recommendation_basic: "safe_path_engine",
91
- least_privilege_scope_reduction_basic: "safe_path_engine",
92
- jit_temporary_scope_fields_basic: "safe_path_engine",
93
- approval_boundary_safe_path_basic: "safe_path_engine",
94
- safe_path_receipt_basic: "safe_path_engine",
95
- skill_route_context_safety_basic: "safe_path_engine",
96
- // Seamless Activation + Self-Healing Setup v1
97
- seamless_activation_basic: "activation_readiness",
98
- self_healing_setup_basic: "activation_readiness",
99
- activation_repair_loop_basic: "activation_readiness",
100
- activation_model_routing_detection_basic: "activation_readiness",
101
- activation_dashboard_ready_basic: "activation_readiness",
102
- activation_agent_repair_plan_basic: "activation_readiness",
103
- // Skill Hygiene & Routing Guard v1
104
- skill_hygiene_basic: "skills_skill_packs",
105
- skill_duplicate_activation_guard_basic: "skills_skill_packs",
106
- skill_shadow_contribution_basic: "skills_skill_packs",
107
- skill_conflict_guard_basic: "skills_skill_packs",
108
- skill_context_hygiene_basic: "context_token_cost_optimization",
109
- skill_security_hygiene_basic: "agent_security",
110
- skill_route_hygiene_basic: "skills_skill_packs",
111
- skill_intake_check_basic: "source_intake",
112
- // Prompt / Context / Token Optimization Foundation v1
113
- prompt_context_pack_basic: "context_token_cost_optimization",
114
- stage_context_budget_basic: "context_token_cost_optimization",
115
- token_budget_estimation_basic: "context_token_cost_optimization",
116
- context_compaction_basic: "context_token_cost_optimization",
117
- local_worker_context_boundary_basic: "context_token_cost_optimization",
118
- handoff_context_pack_basic: "context_token_cost_optimization",
119
- skill_context_lazy_loading_basic: "context_token_cost_optimization",
120
- no_secrets_context_boundary_basic: "context_token_cost_optimization",
121
- context_optimization_receipt_basic: "proof_evidence",
122
- context_product_learning_basic: "product_learning",
123
- // Measurement Evidence Foundation v1
124
- dogfood_reality_gate_basic: "proof_evidence",
125
- launch_ready_journey_dogfood_basic: "proof_evidence",
126
- local_pricing_source_basic: "context_token_cost_optimization",
127
- token_evidence_basic: "context_token_cost_optimization",
128
- session_timing_evidence_basic: "context_token_cost_optimization",
129
- cost_evidence_basic: "context_token_cost_optimization",
130
- measurement_evidence_foundation_basic: "context_token_cost_optimization",
131
- cost_overclaim_guard_basic: "proof_evidence",
132
- // Task-Specific Continuation + Value Evidence Hardening v1
133
- task_specific_continuation_basic: "agent_security",
134
- task_specific_safe_next_action_basic: "agent_security",
135
- value_evidence_collection_basic: "proof_evidence",
136
- evidence_backed_value_summary_basic: "proof_evidence",
137
- command_value_summary_autowrite_basic: "proof_evidence",
138
- seamless_continuation_reality_gate_basic: "proof_evidence",
139
- // AI Workspace Hygiene + Capability Registry v1
140
- ai_workspace_hygiene_basic: "ai_workspace_hygiene",
141
- ai_workspace_asset_inventory_basic: "ai_workspace_hygiene",
142
- capability_registry_metadata_basic: "ai_workspace_hygiene",
143
- workspace_skill_hygiene_basic: "ai_workspace_hygiene",
144
- instruction_surface_hygiene_basic: "ai_workspace_hygiene",
145
- mcp_workspace_visibility_basic: "ai_workspace_hygiene",
146
- hook_surface_visibility_basic: "ai_workspace_hygiene",
147
- package_script_hygiene_basic: "ai_workspace_hygiene",
148
- orchestration_ready_capability_metadata_basic: "ai_workspace_hygiene",
149
- // Work-Aware Orchestration + Workspace Relevance v1
150
- work_aware_orchestration_basic: "model_worker_routing",
151
- stage_based_work_plan_basic: "model_worker_routing",
152
- stage_based_worker_selection_basic: "model_worker_routing",
153
- workspace_relevance_context_selection_basic: "context_token_cost_optimization",
154
- stage_aware_handoff_basic: "proof_evidence",
155
- orchestration_value_evidence_basic: "proof_evidence",
156
- // AI-Native Company Loop + Unified Work Ledger v1
157
- work_ledger_basic: "proof_evidence",
158
- ai_native_company_loop_basic: "proof_evidence",
159
- internal_persona_review_basic: "proof_evidence",
160
- dogfood_friction_clustering_basic: "proof_evidence",
161
- feedback_signal_schema_basic: "proof_evidence",
162
- next_pr_recommendation_basic: "proof_evidence",
163
- cost_cogs_quality_rollup_basic: "proof_evidence",
164
- // Execution Packet + Project Profile + Work Panel Preview v1
165
- project_profile_detection_basic: "execution_packet",
166
- execution_packet_basic: "execution_packet",
167
- execution_packet_scope_boundaries_basic: "execution_packet",
168
- agent_prompt_compiler_basic: "execution_packet",
169
- work_panel_preview_basic: "execution_packet",
170
- proof_requirements_packet_basic: "proof_evidence",
171
- diff_before_write_policy_basic: "execution_packet",
172
- // Seamless Smart Work Routing + Worker Handoff v1
173
- smart_route_hook_binding_basic: "lifecycle_hooks",
174
- execution_packet_hook_binding_basic: "lifecycle_hooks",
175
- safe_run_hook_binding_basic: "lifecycle_hooks",
176
- // Hook Baseline + Lifecycle Automation Preview v1
177
- hook_baseline_registry_basic: "lifecycle_hooks",
178
- adapter_readiness_basic: "lifecycle_hooks",
179
- hook_config_preview_basic: "lifecycle_hooks",
180
- lifecycle_hook_handler_basic: "lifecycle_hooks",
181
- pre_tool_use_guard_mapping_basic: "lifecycle_hooks",
182
- post_tool_use_ledger_mapping_basic: "lifecycle_hooks",
183
- stop_proof_gate_mapping_basic: "lifecycle_hooks",
184
- session_end_summary_handoff_mapping_basic: "lifecycle_hooks",
185
- // PR #141 — Explicit Hook Apply + Lifecycle Live v1
186
- explicit_hook_apply_basic: "lifecycle_hooks",
187
- hook_apply_dry_run_basic: "lifecycle_hooks",
188
- hook_config_backup_basic: "lifecycle_hooks",
189
- hook_apply_validation_basic: "lifecycle_hooks",
190
- hook_rollback_basic: "lifecycle_hooks",
191
- hook_uninstall_basic: "lifecycle_hooks",
192
- hook_doctor_basic: "lifecycle_hooks",
193
- hook_recursion_guard_basic: "lifecycle_hooks",
194
- lifecycle_live_smoke_basic: "lifecycle_hooks",
195
- e2e_value_dogfood_gate_basic: "proof_evidence",
196
- // PR #142 — Activation Alpha Readiness + First Value v1
197
- alpha_activation_basic: "activation_readiness",
198
- first_value_path_basic: "activation_readiness",
199
- alpha_readiness_gate_basic: "activation_readiness",
200
- local_feedback_capture_basic: "proof_evidence",
201
- support_bundle_basic: "proof_evidence",
202
- activation_company_loop_integration_basic: "proof_evidence",
203
- e2e_value_dogfood_gate_basic_pr142: "proof_evidence",
204
- // PR #143 — Token Efficiency + Context Quality Hardening v1
205
- tool_output_sandbox_basic: "token_efficiency_hardening",
206
- tool_output_budget_basic: "token_efficiency_hardening",
207
- repo_map_basic: "token_efficiency_hardening",
208
- symbol_map_basic: "token_efficiency_hardening",
209
- context_acquisition_plan_basic: "token_efficiency_hardening",
210
- token_count_tree_basic: "token_efficiency_hardening",
211
- token_efficiency_evidence_basic: "token_efficiency_hardening",
212
- context_quality_gate_basic: "token_efficiency_hardening",
213
- cache_readiness_checker_basic: "token_efficiency_hardening",
214
- compact_output_policy_basic: "token_efficiency_hardening",
215
- // PR #144 — Launch Hardening + Failure Recovery v1
216
- launch_hardening_gate_basic: "launch_hardening",
217
- failure_recovery_taxonomy_basic: "failure_recovery_hardening",
218
- doctor_recovery_basic: "failure_recovery_hardening",
219
- artifact_health_basic: "artifact_health_monitoring",
220
- artifact_cleanup_basic: "artifact_health_monitoring",
221
- support_bundle_hardening_basic: "proof_evidence",
222
- cross_platform_sanity_basic: "launch_hardening",
223
- non_interactive_ci_mode_basic: "launch_hardening",
224
- e2e_launch_hardening_dogfood_basic: "proof_evidence",
225
- // PR #145 — MCP Least-Privilege Tool Governance v1
226
- mcp_tool_inventory_basic: "mcp_tool_governance",
227
- mcp_tool_risk_classification_basic: "mcp_tool_governance",
228
- mcp_least_privilege_policy_basic: "mcp_tool_governance",
229
- mcp_config_preview_basic: "mcp_tool_governance",
230
- mcp_pre_tool_use_enforcement_basic: "mcp_tool_governance",
231
- mcp_metadata_safety_scan_basic: "mcp_tool_governance",
232
- mcp_support_bundle_redaction_basic: "proof_evidence",
233
- e2e_mcp_risk_dogfood_basic: "proof_evidence",
234
- // PR #146 — One-Prompt AI Install + Pre-Launch Activation Readiness v1
235
- ai_install_prompt_basic: "ai_install_onboarding",
236
- one_prompt_install_basic: "ai_install_onboarding",
237
- ai_install_safety_boundaries_basic: "ai_install_onboarding",
238
- ai_install_support_bundle_integration_basic: "ai_install_onboarding",
239
- prelaunch_activation_readiness_basic: "prelaunch_activation_readiness",
240
- first_value_journey_basic: "prelaunch_activation_readiness",
241
- e2e_ai_install_dogfood_basic: "proof_evidence",
242
- // PR #147 — Pre-Launch Intelligence Layer v1
243
- prelaunch_intelligence_basic: "prelaunch_intelligence",
244
- feedback_intelligence_basic: "prelaunch_intelligence",
245
- friction_clustering_basic: "prelaunch_intelligence",
246
- token_cost_intelligence_basic: "prelaunch_intelligence",
247
- install_journey_intelligence_basic: "prelaunch_intelligence",
248
- company_loop_prelaunch_signal_integration_basic: "prelaunch_intelligence",
249
- support_bundle_prompt_readiness_summary_basic: "prelaunch_intelligence",
250
- e2e_prelaunch_intelligence_dogfood_basic: "proof_evidence",
251
- // PR #148 — Full Readiness / Release Candidate Gate v1
252
- full_readiness_gate_basic: "full_readiness_gate",
253
- readiness_evidence_closure_basic: "full_readiness_gate",
254
- known_limitations_register_basic: "full_readiness_gate",
255
- external_user_simulation_basic: "full_readiness_gate",
256
- release_candidate_bundle_basic: "full_readiness_gate",
257
- company_loop_readiness_recommendation_basic: "full_readiness_gate",
258
- e2e_full_readiness_dogfood_basic: "proof_evidence",
259
- // PR #149 — Activation Distribution Readiness v1
260
- activation_distribution_readiness_basic: "activation_distribution_readiness",
261
- activation_distribution_install_check_basic: "activation_distribution_readiness",
262
- activation_distribution_recovery_check_basic: "activation_distribution_readiness",
263
- activation_distribution_first_value_check_basic: "activation_distribution_readiness",
264
- activation_distribution_no_public_launch_check_basic: "activation_distribution_readiness",
265
- // PR #160 — Design Partner Feedback + Readiness Delta v1
266
- design_partner_feedback_session_basic: "design_partner_feedback",
267
- design_partner_feedback_import_basic: "design_partner_feedback",
268
- design_partner_feedback_summary_basic: "design_partner_feedback",
269
- design_partner_feedback_pack_basic: "design_partner_feedback",
270
- design_partner_no_public_launch_check_basic: "design_partner_feedback",
271
- readiness_delta_basic: "readiness_delta",
272
- readiness_delta_score_movement_basic: "readiness_delta",
273
- // PR #161 — Public Activation Distribution Truth v1
274
- public_distribution_truth_basic: "public_distribution",
275
- package_content_audit_basic: "public_distribution",
276
- local_package_smoke_basic: "public_distribution",
277
- public_install_claim_check_basic: "public_distribution",
278
- publish_provenance_readiness_basic: "public_distribution",
279
- public_activation_distribution_gate_basic: "public_distribution",
280
- package_bin_truth_basic: "public_distribution",
281
- pack_content_safety_basic: "public_distribution",
282
- e2e_public_distribution_dogfood_basic: "proof_evidence",
283
- // PR #162 — Plugin / Adapter Technical Readiness v1
284
- host_capability_matrix_basic: "adapter_technical_readiness",
285
- cross_host_install_readiness_basic: "adapter_technical_readiness",
286
- cross_host_value_flow_basic: "adapter_technical_readiness",
287
- adapter_safety_boundaries_basic: "adapter_technical_readiness",
288
- host_support_context_basic: "adapter_technical_readiness",
289
- browser_proof_preflight_basic: "adapter_technical_readiness",
290
- adapter_readiness_technical_gate_basic: "adapter_technical_readiness",
291
- e2e_adapter_technical_readiness_dogfood_basic: "proof_evidence",
292
- // PR #163 — Cross-Host Install Plan + Browser-Proof Preflight v1
293
- cross_host_install_plan_basic: "cross_host_adapter_readiness",
294
- cross_host_adapter_readiness_surface_basic: "cross_host_adapter_readiness",
295
- no_works_everywhere_claim_basic: "cross_host_adapter_readiness",
296
- hooks_approval_cross_host_basic: "cross_host_adapter_readiness",
297
- mcp_governance_cross_host_basic: "cross_host_adapter_readiness",
298
- browser_automation_not_required_basic: "cross_host_adapter_readiness",
299
- cross_host_host_support_context_basic: "cross_host_adapter_readiness",
300
- e2e_cross_host_adapter_dogfood_basic: "proof_evidence",
301
- });
302
-
303
- const EVIDENCE_HINTS = Object.freeze({
304
- activation_readiness: ".claude/cco/state/",
305
- prompt_workflow_help: ".claude/cco/state/",
306
- context_token_cost_optimization: ".claude/cco/state/",
307
- frontend_visual_qa: ".claude/cco/reports/",
308
- agent_security: ".claude/cco/security/",
309
- agent_access_governance: ".claude/cco/security/",
310
- install_intake_risk: ".claude/cco/security/install-intake/",
311
- workspace_map: ".claude/cco/state/workspace-map.json",
312
- skills_skill_packs: "skills/avorelo/",
313
- proof_evidence: ".claude/cco/receipts/",
314
- ai_workspace_hygiene: ".claude/cco/orchestration/ai-workspace-hygiene/",
315
- work_ledger: ".claude/cco/orchestration/work-ledger/",
316
- company_loop: ".claude/cco/orchestration/company-loop/",
317
- execution_packet: ".claude/cco/orchestration/execution-packet/",
318
- lifecycle_hooks: ".claude/cco/orchestration/hook-baseline/",
319
- token_efficiency_hardening: ".claude/cco/orchestration/token-efficiency/",
320
- mcp_tool_governance: ".claude/cco/orchestration/mcp-tool-governance/",
321
- ai_install_onboarding: ".claude/cco/orchestration/ai-install/",
322
- prelaunch_activation_readiness: ".claude/cco/orchestration/prelaunch-readiness/",
323
- prelaunch_intelligence: ".claude/cco/orchestration/prelaunch-intelligence/",
324
- full_readiness_gate: ".claude/cco/orchestration/full-readiness/",
325
- activation_distribution_readiness: ".claude/cco/orchestration/activation-distribution/",
326
- design_partner_feedback: ".claude/cco/feedback/design-partner/",
327
- readiness_delta: ".claude/cco/orchestration/readiness-delta/",
328
- public_distribution: ".claude/cco/orchestration/public-distribution/",
329
- });
330
-
331
- const STATUS_VISIBLE_IDS = new Set([
332
- "local_activation",
333
- "ai_coding_readiness",
334
- "context_cost_basic",
335
- "session_handoff_basic",
336
- "workspace_map_basic",
337
- "reference_source_intake_basic",
338
- "skill_md_parser_basic",
339
- "skill_pattern_extraction_basic",
340
- "skill_trust_scan_basic",
341
- "capability_binding_basic",
342
- "source_backed_skill_router_basic",
343
- "thin_adapter_guidance_sync_basic",
344
- "visual_qa_weekly",
345
- "browser_capability_basic",
346
- "skills_security_basic",
347
- "instruction_risk_basic",
348
- "prompt_injection_basic",
349
- "source_trust_basic",
350
- "tool_risk_basic",
351
- "mcp_tool_risk_basic",
352
- "sensitive_file_guard",
353
- "secret_exposure_guard",
354
- "destructive_command_guard",
355
- "scoped_action_guard_basic",
356
- "approval_required_decisions",
357
- "safe_path_recommendation_basic",
358
- "least_privilege_scope_reduction_basic",
359
- "jit_temporary_scope_fields_basic",
360
- "approval_boundary_safe_path_basic",
361
- "safe_path_receipt_basic",
362
- "skills_security_dogfood_basic",
363
- "skill_route_context_safety_basic",
364
- "install_intake_risk_basic",
365
- "mcp_intake_visibility_basic",
366
- "package_intake_visibility_basic",
367
- "extension_intake_visibility_basic",
368
- "connector_intake_visibility_basic",
369
- "skill_source_intake_risk_basic",
370
- "intake_safe_next_action_basic",
371
- "intake_receipt_basic",
372
- "enforcement_evidence",
373
- "evidence_latest",
374
- "ai_workspace_hygiene_basic",
375
- "mcp_workspace_visibility_basic",
376
- "instruction_surface_hygiene_basic",
377
- ]);
378
-
379
- const DASHBOARD_VISIBLE_IDS = new Set(STATUS_VISIBLE_IDS);
380
-
381
- const PRODUCT_STATUS_OVERRIDES = Object.freeze({
382
- workspace_map_basic: "foundation",
383
- reentry_memory_full: "partial",
384
- visual_qa_advanced: "partial",
385
- browser_governance_advanced: "partial",
386
- browser_domain_boundary_readiness: "partial",
387
- skills_security_advanced: "partial",
388
- instruction_risk_advanced: "partial",
389
- prompt_injection_advanced: "partial",
390
- source_trust_advanced: "partial",
391
- intent_mismatch_advanced: "partial",
392
- tool_risk_advanced: "partial",
393
- mcp_tool_risk_advanced: "partial",
394
- scoped_action_guard_advanced: "partial",
395
- scoped_jit_style_access: "partial",
396
- least_privilege_profile: "partial",
397
- zero_standing_permissions_posture: "partial",
398
- approval_required_decisions: "partial",
399
- safe_path_recommendation_basic: "foundation",
400
- least_privilege_scope_reduction_basic: "foundation",
401
- jit_temporary_scope_fields_basic: "partial",
402
- approval_boundary_safe_path_basic: "foundation",
403
- safe_path_receipt_basic: "foundation",
404
- skills_security_dogfood_basic: "foundation",
405
- skill_route_context_safety_basic: "foundation",
406
- install_intake_risk_basic: "foundation",
407
- mcp_intake_visibility_basic: "foundation",
408
- package_intake_visibility_basic: "foundation",
409
- extension_intake_visibility_basic: "foundation",
410
- connector_intake_visibility_basic: "foundation",
411
- skill_source_intake_risk_basic: "foundation",
412
- intake_safe_next_action_basic: "foundation",
413
- intake_receipt_basic: "foundation",
414
- // AI Workspace Hygiene + Capability Registry v1
415
- ai_workspace_hygiene_basic: "foundation",
416
- ai_workspace_asset_inventory_basic: "foundation",
417
- capability_registry_metadata_basic: "foundation",
418
- workspace_skill_hygiene_basic: "foundation",
419
- instruction_surface_hygiene_basic: "foundation",
420
- mcp_workspace_visibility_basic: "foundation",
421
- hook_surface_visibility_basic: "foundation",
422
- package_script_hygiene_basic: "foundation",
423
- orchestration_ready_capability_metadata_basic: "foundation",
424
- // Execution Packet + Project Profile + Work Panel Preview v1
425
- project_profile_detection_basic: "foundation",
426
- execution_packet_basic: "foundation",
427
- execution_packet_scope_boundaries_basic: "foundation",
428
- agent_prompt_compiler_basic: "foundation",
429
- work_panel_preview_basic: "foundation",
430
- proof_requirements_packet_basic: "foundation",
431
- diff_before_write_policy_basic: "foundation",
432
- // Hook Baseline + Lifecycle Automation Preview v1
433
- hook_baseline_registry_basic: "foundation",
434
- adapter_readiness_basic: "foundation",
435
- hook_config_preview_basic: "foundation",
436
- lifecycle_hook_handler_basic: "foundation",
437
- smart_route_hook_binding_basic: "foundation",
438
- execution_packet_hook_binding_basic: "foundation",
439
- safe_run_hook_binding_basic: "foundation",
440
- pre_tool_use_guard_mapping_basic: "foundation",
441
- post_tool_use_ledger_mapping_basic: "foundation",
442
- stop_proof_gate_mapping_basic: "foundation",
443
- session_end_summary_handoff_mapping_basic: "foundation",
444
- });
445
-
446
- const BASE_FAMILY_METADATA = Object.freeze([
447
- {
448
- id: "activation_readiness",
449
- name: "Activation / Readiness",
450
- strength: "strong",
451
- productStatus: "shipped",
452
- mainFiles: ["scripts/lib/activation/*", "scripts/wuz-activate.js", "scripts/wuz-doctor.js"],
453
- statusSurface: "status/dashboard/doctor",
454
- evidence: ".claude/cco/state/activation.json, .claude/cco/state/readiness.json",
455
- tests: "wuz-activation, wuz-doctor, activation summary",
456
- notes: "Core first-value loop is already real and should not be rebuilt.",
457
- },
458
- {
459
- id: "status_dashboard",
460
- name: "Status / Dashboard",
461
- strength: "strong",
462
- productStatus: "shipped",
463
- mainFiles: ["status CLI surface", "dashboard CLI surface", "scripts/lib/dashboard.js"],
464
- statusSurface: "status/dashboard",
465
- evidence: "proof and current-state summaries",
466
- tests: "status/dashboard tests",
467
- notes: "User-facing truth surface; keep bounded and honest.",
468
- },
469
- {
470
- id: "prompt_workflow_help",
471
- name: "Prompt / Workflow Help",
472
- strength: "strong",
473
- productStatus: "shipped",
474
- mainFiles: ["scripts/lib/prompt-compiler.js", "scripts/lib/workflow-discipline.js"],
475
- statusSurface: "prompt, status, dashboard",
476
- evidence: ".claude/cco/state/context-budget.json and prompt outputs",
477
- tests: "prompt compiler and workflow discipline tests",
478
- notes: "Prompt compiler is real product behavior, not docs-only guidance.",
479
- },
480
- {
481
- id: "context_token_cost_optimization",
482
- name: "Context / Token / Cost Optimization",
483
- strength: "strong",
484
- productStatus: "shipped",
485
- mainFiles: ["scripts/lib/context-*", "scripts/lib/value-ledger.js", "scripts/lib/dashboard.js"],
486
- statusSurface: "status/dashboard",
487
- evidence: ".claude/cco/state/, value ledger, proof metrics",
488
- tests: "context budget, context safety, value ledger, reentry tests",
489
- notes: "One of the strongest existing product loops.",
490
- },
491
- {
492
- id: "model_worker_routing",
493
- name: "Model / Worker Routing",
494
- strength: "strong",
495
- productStatus: "shipped",
496
- mainFiles: ["scripts/lib/orchestration/*"],
497
- statusSurface: "route/run/models/orchestration/proof",
498
- evidence: ".claude/cco/orchestration/current-proof.json",
499
- tests: "orchestration CLI/core/model discovery",
500
- notes: "Already merged through recent orchestration and model-discovery PRs.",
501
- },
502
- {
503
- id: "execution_work_control",
504
- name: "Execution / Work Control",
505
- strength: "partial",
506
- productStatus: "partial",
507
- mainFiles: ["scripts/lib/orchestration/*", "scripts/lib/dashboard.js"],
508
- statusSurface: "run/proof/status",
509
- evidence: ".claude/cco/orchestration/, receipts",
510
- tests: "orchestration and proof tests",
511
- notes: "Fragments exist, but a unified work-item/routine/receipt model is still later work.",
512
- },
513
- {
514
- id: "agent_security",
515
- name: "Agent Security",
516
- strength: "strong",
517
- productStatus: "shipped",
518
- mainFiles: ["scripts/lib/agent-enforcement.js", "scripts/lib/agent-security/*"],
519
- statusSurface: "guard/status/dashboard/proof",
520
- evidence: ".claude/cco/security/",
521
- tests: "agent-security, guard, trust-audit, browser-capability",
522
- notes: "Keep as the current trust boundary; do not split out a new governance engine in this PR.",
523
- },
524
- {
525
- id: "agent_access_governance",
526
- name: "Agent Access Governance",
527
- strength: "partial",
528
- productStatus: "foundation",
529
- mainFiles: ["scripts/lib/agent-access-governance.js", "scripts/lib/agent-enforcement.js", "scripts/lib/agent-security/*"],
530
- statusSurface: "guard/status/dashboard/proof",
531
- evidence: ".claude/cco/security/agent-access-governance/, local governance receipts",
532
- tests: "agent-access-governance, guard, status/dashboard, product-learning",
533
- notes: "Foundation slice only: deterministic subject/scope/approval-boundary/receipt modeling. Safe Path and intake breadth remain later work.",
534
- },
535
- {
536
- id: "install_intake_risk",
537
- name: "Install / Intake Risk",
538
- strength: "partial",
539
- productStatus: "foundation",
540
- mainFiles: ["scripts/lib/install-intake-risk.js", "scripts/cco-skill-intake.js", "scripts/lib/agent-security/*"],
541
- statusSurface: "intake/status/dashboard/proof",
542
- evidence: ".claude/cco/security/install-intake/, .claude/cco/security/skill-intake-*.json",
543
- tests: "install-intake-risk, guard, status/dashboard, validator tests",
544
- notes: "Foundation slice only: deterministic local intake visibility for packages, MCP, extensions, guidance, skills, and connectors. No registry lookups, malware claims, or universal install enforcement.",
545
- },
546
- {
547
- id: "safe_path_engine",
548
- name: "Safe Path Engine",
549
- strength: "partial",
550
- productStatus: "foundation",
551
- mainFiles: ["scripts/lib/safe-path-engine.js", "scripts/lib/agent-enforcement.js", "scripts/lib/orchestration/*"],
552
- statusSurface: "guard/status/dashboard/proof",
553
- evidence: ".claude/cco/security/safe-path/, enforcement decisions, proof receipts",
554
- tests: "safe-path, guard, orchestration, status/dashboard tests",
555
- notes: "Foundation slice only: deterministic local reduced-scope recommendations, approval boundaries, and JIT-style fields where supported. No universal enforcement or automatic remediation claims.",
556
- },
557
- {
558
- id: "workspace_map",
559
- name: "Workspace Map",
560
- strength: "partial",
561
- productStatus: "foundation",
562
- mainFiles: ["scripts/lib/workspace-map.js", "scripts/lib/public-cli.js"],
563
- statusSurface: "workspace-map command, status/dashboard summary",
564
- evidence: ".claude/cco/state/workspace-map.json",
565
- tests: "workspace-map tests",
566
- notes: "Useful foundation. Keep exposure honest as compact navigation support, not product identity.",
567
- },
568
- {
569
- id: "skills_skill_packs",
570
- name: "Skills / Skill Packs",
571
- strength: "partial",
572
- productStatus: "foundation",
573
- mainFiles: ["scripts/avorelo-skills.js", "scripts/lib/avorelo-skill-registry.js", "skills/avorelo/*", "vendor/skillpacks/*"],
574
- statusSurface: "skills CLI, status/dashboard/proof summary",
575
- evidence: ".avorelo/skills/registry.json, .claude/cco/skills/latest-route.json",
576
- tests: "avorelo-skills tests",
577
- notes: "Keep source-backed and local-first. This is not a marketplace and should never dump full skill bodies into context or adapters.",
578
- },
579
- {
580
- id: "source_intake",
581
- name: "Source Intake",
582
- strength: "partial",
583
- productStatus: "foundation",
584
- mainFiles: ["scripts/lib/source-catalog.js", "docs/references/*", "vendor/skillpacks/*/SOURCE.json"],
585
- statusSurface: "skills CLI, status/dashboard/proof summary",
586
- evidence: "docs/references/references.json, .claude/cco/skills/latest-source-adoption.json",
587
- tests: "source-catalog tests",
588
- notes: "Owns source/reference metadata and reviewed/deferred/blocked adoption truth, not runtime execution.",
589
- },
590
- {
591
- id: "thin_adapters",
592
- name: "Thin Adapters",
593
- strength: "partial",
594
- productStatus: "foundation",
595
- mainFiles: ["scripts/avorelo-sync-adapters.js"],
596
- statusSurface: "generator plus status/proof summary",
597
- evidence: ".avorelo/generated/ (generated locally), .claude/cco/skills/latest-adapter-sync.json",
598
- tests: "operating-layer validation and adapter guidance tests",
599
- notes: "Thin, public-safe adapter guidance only. Core logic must stay in shared modules.",
600
- },
601
- {
602
- id: "product_learning",
603
- name: "Product Learning / AI-Native Loop",
604
- strength: "partial",
605
- productStatus: "foundation",
606
- mainFiles: ["scripts/lib/product-learning-events.js"],
607
- statusSurface: "status/dashboard summary only",
608
- evidence: ".claude/cco/events/product-learning.jsonl",
609
- tests: "product-learning-events tests",
610
- notes: "Local, redacted event logging exists; the full product loop is still later.",
611
- },
612
- {
613
- id: "proof_evidence",
614
- name: "Proof / Evidence",
615
- strength: "strong",
616
- productStatus: "shipped",
617
- mainFiles: ["scripts/lib/orchestration/proof-writer.js", "scripts/lib/dashboard.js"],
618
- statusSurface: "proof/status/dashboard",
619
- evidence: ".claude/cco/receipts/, orchestration proof",
620
- tests: "proof tests",
621
- notes: "Real today, but unified receipts across all families are later work.",
622
- },
623
- {
624
- id: "pricing_entitlements",
625
- name: "Pricing / Entitlements",
626
- strength: "strong",
627
- productStatus: "shipped",
628
- mainFiles: ["scripts/lib/plans.js", "scripts/lib/entitlements.js", "docs/Pricing-Capability-Mapping.md"],
629
- statusSurface: "status/dashboard/website/docs",
630
- evidence: "plan surface and pricing mapping doc",
631
- tests: "avorelo-plans and plan-surface tests",
632
- notes: "Free/Pro is real. Teams remains deferred and non-selectable.",
633
- },
634
- {
635
- id: "website_onboarding",
636
- name: "Website / Onboarding",
637
- strength: "strong",
638
- productStatus: "shipped",
639
- mainFiles: ["apps/public-web/src/index.html", "docs/INSTALL.md", "docs/avorelo-local-usage.md"],
640
- statusSurface: "public website/docs",
641
- evidence: "public-web source-of-record and activation docs",
642
- tests: "public web and website readiness tests",
643
- notes: "Must follow product truth and avoid category drift.",
644
- },
645
- {
646
- id: "frontend_visual_qa",
647
- name: "Frontend / Visual QA",
648
- strength: "strong",
649
- productStatus: "shipped",
650
- mainFiles: ["scripts/lib/visual-qa.js", "scripts/lib/browser-capability.js"],
651
- statusSurface: "visual-qa/status/dashboard",
652
- evidence: ".claude/cco/reports/visual-qa-latest.json",
653
- tests: "visual-qa and browser-capability tests",
654
- notes: "Supporting capability family only; not the product center.",
655
- },
656
- {
657
- id: "ai_workspace_hygiene",
658
- name: "AI Workspace Hygiene",
659
- strength: "partial",
660
- productStatus: "foundation",
661
- mainFiles: ["scripts/lib/ai-workspace-hygiene.js"],
662
- statusSurface: "workspace-hygiene command, status/dashboard/proof compact summary",
663
- evidence: ".claude/cco/orchestration/ai-workspace-hygiene/latest-report.json",
664
- tests: "ai-workspace-hygiene tests",
665
- notes: "Foundation slice: deterministic local scan of AI workspace assets, hygiene findings, and orchestration-ready capability metadata. Does not clone OpenHands, install hooks, patch MCP configs, or auto-modify user files in v1. Prepares data for future orchestration, Hook Baseline Pack, MCP cleanup, and plugin readiness.",
666
- },
667
- {
668
- id: "execution_packet",
669
- name: "Execution Packet / Project Profile",
670
- strength: "partial",
671
- productStatus: "foundation",
672
- mainFiles: ["scripts/lib/execution-packet.js", "scripts/lib/project-profile.js", "scripts/lib/work-panel-preview.js"],
673
- statusSurface: "project-profile, execution-packet, work-panel commands, status/dashboard/proof compact summary",
674
- evidence: ".claude/cco/orchestration/execution-packet/latest-packet.json, .claude/cco/orchestration/project-profile/latest-profile.json",
675
- tests: "execution-packet, project-profile, work-panel-preview tests",
676
- notes: "Foundation slice: deterministic project profile detection, scoped execution packet compiler, agent prompt compiler, and local work panel preview. No CSS editor, no browser injection, no Visual QA Bridge full implementation, no deploy automation. Blocked scope always overrides allowed scope. Proof-first workflow.",
677
- },
678
- {
679
- id: "lifecycle_hooks",
680
- name: "Lifecycle Hook Baseline + Automation Preview",
681
- strength: "partial",
682
- productStatus: "foundation",
683
- mainFiles: ["scripts/lib/hook-baseline.js", "scripts/lib/lifecycle-hooks.js", "scripts/lib/adapter-readiness.js", "scripts/lib/hook-config-preview.js"],
684
- statusSurface: "hooks, adapter-readiness, lifecycle-hook commands, status/dashboard/proof compact summary",
685
- evidence: ".claude/cco/orchestration/hook-baseline/latest-baseline.json, .claude/cco/orchestration/adapter-readiness/latest-readiness.json, .claude/cco/orchestration/hook-baseline/latest-preview.json",
686
- tests: "hook-baseline, lifecycle-hooks, adapter-readiness, hook-config-preview tests",
687
- notes: "Preview/readiness slice only. Lifecycle handlers exist but are NOT auto-installed. No user config is modified. No global hook install. No full Claude plugin. No full OpenHands adapter. No ACP/A2A implementation. Hook apply requires explicit user approval in a future PR. Intended to make Avorelo seamless, not noisier.",
688
- },
689
- {
690
- id: "launch_hardening",
691
- name: "Launch Hardening",
692
- label: "Launch Hardening",
693
- description: "Gate checks and hardening for alpha launch readiness.",
694
- productStatus: "foundation",
695
- strength: "partial",
696
- mainFiles: ["scripts/lib/launch-hardening-gate.js"],
697
- statusSurface: "launch-hardening command, status/dashboard compact summary",
698
- evidence: ".claude/cco/orchestration/launch-hardening/latest-gate.json",
699
- tests: "launch-hardening gate checks",
700
- notes: "Foundation slice: deterministic gate checks for alpha launch readiness. Checks activation, hooks, token gate, support bundle, proof, artifact health, and CI mode. Does not make launch-ready claims.",
701
- },
702
- {
703
- id: "failure_recovery_hardening",
704
- name: "Failure Recovery",
705
- label: "Failure Recovery",
706
- description: "Taxonomy, classification, and safe recovery actions for all failure modes.",
707
- productStatus: "foundation",
708
- strength: "partial",
709
- mainFiles: ["scripts/lib/failure-recovery.js"],
710
- statusSurface: "failure recovery receipt, doctor command",
711
- evidence: ".claude/cco/orchestration/failure-recovery/latest-recovery.json",
712
- tests: "failure recovery taxonomy checks",
713
- notes: "Foundation slice: classifies every failure mode with a safe next action, severity, and recoverability flag. No raw logs, prompts, code, or secrets in receipts.",
714
- },
715
- {
716
- id: "artifact_health_monitoring",
717
- name: "Artifact Health",
718
- label: "Artifact Health",
719
- description: "Scan, classify, and clean local orchestration artifacts safely.",
720
- productStatus: "foundation",
721
- strength: "partial",
722
- mainFiles: ["scripts/lib/artifact-health.js"],
723
- statusSurface: "artifacts command, status/dashboard compact summary",
724
- evidence: ".claude/cco/orchestration/artifact-health/latest-health.json",
725
- tests: "artifact health scan checks",
726
- notes: "Foundation slice: scans .claude/cco artifacts for invalid JSON, stale receipts, oversized files. Plans and applies safe cleanup. Never deletes latest-*.json or outside .claude/cco.",
727
- },
728
- // PR #145 — MCP Least-Privilege Tool Governance v1
729
- {
730
- id: "mcp_tool_governance",
731
- name: "MCP Tool Governance",
732
- label: "MCP Tool Governance",
733
- description: "Local static MCP tool inventory, risk classification, least-privilege policy, and PreToolUse enforcement.",
734
- productStatus: "foundation",
735
- strength: "partial",
736
- mainFiles: [
737
- "scripts/lib/mcp-tool-inventory.js",
738
- "scripts/lib/mcp-tool-risk.js",
739
- "scripts/lib/mcp-least-privilege-policy.js",
740
- "scripts/lib/mcp-enforcement.js",
741
- ],
742
- statusSurface: "mcp CLI (inventory, risk, policy, preview, doctor), PreToolUse hook, ledger, support-bundle",
743
- evidence: ".claude/cco/orchestration/mcp-tool-governance/",
744
- tests: "mcp-tool-inventory, mcp-tool-risk, mcp-least-privilege-policy, mcp-enforcement tests",
745
- notes: "Foundation slice: static local governance only. No MCP server execution. No full MCP client/server. No external scanner. Preview only — config not modified. Unknown tools not auto-allowed. Every block has safeNextAction.",
746
- },
747
- // PR #146 — One-Prompt AI Install + Pre-Launch Activation Readiness v1
748
- {
749
- id: "ai_install_onboarding",
750
- name: "AI Install Onboarding",
751
- label: "AI Install Onboarding",
752
- description: "One-prompt AI install experience. User copies a single prompt into Claude Code, Codex, Cursor, or VS Code. AI guides activation, readiness, hooks, MCP governance, and first-value summary.",
753
- productStatus: "foundation",
754
- strength: "partial",
755
- mainFiles: [
756
- "scripts/lib/ai-install-prompt.js",
757
- ],
758
- statusSurface: "install-ai CLI (--prompt, --json, --dry-run), ai-install-prompt receipt",
759
- evidence: ".claude/cco/orchestration/ai-install/latest-prompt.json",
760
- tests: "ai-install-prompt tests",
761
- notes: "Inspired by PostHog install-with-AI pattern. Hook apply still requires explicit --yes approval. MCP config not auto-modified. Global config not modified. No public website or pricing here.",
762
- },
763
- {
764
- id: "prelaunch_activation_readiness",
765
- name: "Pre-Launch Activation Readiness",
766
- label: "Pre-Launch Activation Readiness",
767
- description: "Gate that checks all required surfaces for the one-prompt AI install flow: activation, safe-run, hooks, MCP governance, token/context, launch hardening, support bundle, failure recovery.",
768
- productStatus: "foundation",
769
- strength: "partial",
770
- mainFiles: [
771
- "scripts/lib/prelaunch-activation-readiness.js",
772
- ],
773
- statusSurface: "prelaunch-readiness CLI, first-value-check CLI, prelaunch readiness receipt",
774
- evidence: ".claude/cco/orchestration/prelaunch-readiness/latest-activation-readiness.json",
775
- tests: "prelaunch-activation-readiness tests",
776
- notes: "Not a public launch claim. Pre-launch activation readiness only.",
777
- },
778
- // PR #147 — Pre-Launch Intelligence Layer v1
779
- {
780
- id: "prelaunch_intelligence",
781
- name: "Pre-Launch Intelligence Layer",
782
- label: "Pre-Launch Intelligence",
783
- description: "Local-first intelligence layer that aggregates install, activation, feedback, token/cost, MCP, hardening, support signals into actionable pre-launch insight. Not a release candidate gate.",
784
- productStatus: "foundation",
785
- strength: "partial",
786
- mainFiles: [
787
- "scripts/lib/prelaunch-intelligence.js",
788
- "scripts/lib/feedback-intelligence.js",
789
- "scripts/lib/token-cost-intelligence.js",
790
- "scripts/lib/prelaunch-evidence-store.js",
791
- "scripts/lib/proof-outcome-evidence.js",
792
- "scripts/lib/install-journey-intelligence.js",
793
- ],
794
- statusSurface: "prelaunch-intelligence CLI, feedback insights CLI, token-cost CLI, token-cost capture/summary/validate/import CLI, proof outcome/readiness CLI, install-journey CLI",
795
- evidence: ".claude/cco/orchestration/prelaunch-intelligence/, .claude/cco/evidence/feedback/, .claude/cco/evidence/token-cost/, .claude/cco/orchestration/seamless-outcome/latest-proof-outcome-evidence.json",
796
- tests: "prelaunch-intelligence, prelaunch-evidence-store, token-cost-intelligence, token-cost-capture, proof-outcome-evidence tests",
797
- notes: "Local-only. Not a public launch claim. Not a release candidate gate. Measured/estimated/heuristic/missing stay separate. Feedback clustered, not raw-exposed. Token-cost capture, feedback evidence import, proof outcome evidence, and readiness evidence closure remain redacted and local-first.",
798
- },
799
- ]);
800
- const FAMILY_METADATA_MAP = new Map(BASE_FAMILY_METADATA.map((family) => [family.id, family]));
801
-
802
- function familyFromBucket(capability) {
803
- if (FAMILY_OVERRIDES[capability.id]) return FAMILY_OVERRIDES[capability.id];
804
- if (capability.bucket === "better_ai_coding_tasks") return "prompt_workflow_help";
805
- if (capability.bucket === "automatic_context_cost_optimization") return "context_token_cost_optimization";
806
- if (capability.bucket === "visual_qa_with_screenshots") return "frontend_visual_qa";
807
- if (capability.bucket === "seamless_agent_security") return "agent_security";
808
- if (capability.bucket === "evidence_and_history") return "proof_evidence";
809
- return "execution_work_control";
810
- }
811
-
812
- function productStatusForCapability(capability) {
813
- if (PRODUCT_STATUS_OVERRIDES[capability.id]) return PRODUCT_STATUS_OVERRIDES[capability.id];
814
- if (capability.implementationStatus === "partial") return "partial";
815
- if (capability.surfaceType === "docs_only") return "docs_only";
816
- return "shipped";
817
- }
818
-
819
- function buildCapabilityEntry(capability) {
820
- const familyId = familyFromBucket(capability);
821
- const familyMetadata = FAMILY_METADATA_MAP.get(familyId);
822
- return Object.freeze({
823
- id: capability.id,
824
- name: capability.label,
825
- familyId,
826
- familyName: familyMetadata?.name || familyId,
827
- bucket: capability.bucket,
828
- shortDescription: capability.description,
829
- customerFacingDescription: capability.customerFacingDescription || capability.description,
830
- planAvailability: capability.availability || { free: false, pro: false },
831
- implementationStatus: capability.implementationStatus || "supported",
832
- productStatus: productStatusForCapability(capability),
833
- surfaceType: capability.surfaceType || "detection",
834
- safeForPublicCopy: capability.safeForPublicCopy !== false,
835
- sourceOfTruth: "scripts/lib/plans.js",
836
- statusVisibility: STATUS_VISIBLE_IDS.has(capability.id),
837
- dashboardVisibility: DASHBOARD_VISIBLE_IDS.has(capability.id),
838
- evidencePathHint: EVIDENCE_HINTS[familyId] || null,
839
- notes: familyMetadata?.notes || "",
840
- });
841
- }
842
-
843
- const CAPABILITY_REGISTRY = Object.freeze(CAPABILITIES.map(buildCapabilityEntry));
844
- const REGISTRY_MAP = new Map(CAPABILITY_REGISTRY.map((entry) => [entry.id, entry]));
845
-
846
- function buildFamilyInventory() {
847
- const capabilitiesByFamily = new Map(BASE_FAMILY_METADATA.map((family) => [family.id, []]));
848
- CAPABILITY_REGISTRY.forEach((entry) => {
849
- if (!capabilitiesByFamily.has(entry.familyId)) {
850
- capabilitiesByFamily.set(entry.familyId, []);
851
- }
852
- capabilitiesByFamily.get(entry.familyId).push(entry.id);
853
- });
854
-
855
- return Object.freeze(
856
- BASE_FAMILY_METADATA.map((family) => Object.freeze({
857
- ...family,
858
- capabilityIds: Object.freeze((capabilitiesByFamily.get(family.id) || []).slice().sort()),
859
- }))
860
- );
861
- }
862
-
863
- const CAPABILITY_FAMILIES = buildFamilyInventory();
864
- const FAMILY_MAP = new Map(CAPABILITY_FAMILIES.map((family) => [family.id, family]));
865
-
866
- const REQUIRED_CAPABILITY_FIELDS = [
867
- "id",
868
- "name",
869
- "familyId",
870
- "shortDescription",
871
- "planAvailability",
872
- "implementationStatus",
873
- "productStatus",
874
- "surfaceType",
875
- "sourceOfTruth",
876
- "statusVisibility",
877
- "dashboardVisibility",
878
- ];
879
-
880
- const REQUIRED_FAMILY_FIELDS = [
881
- "id",
882
- "name",
883
- "strength",
884
- "productStatus",
885
- "mainFiles",
886
- "capabilityIds",
887
- "statusSurface",
888
- "evidence",
889
- "tests",
890
- "notes",
891
- ];
892
-
893
- function validateCapability(entry) {
894
- const errors = [];
895
- for (const field of REQUIRED_CAPABILITY_FIELDS) {
896
- if (entry[field] === undefined || entry[field] === null) {
897
- errors.push(`Missing required field: ${field}`);
898
- }
899
- }
900
- if (!VALID_FAMILY_IDS.has(entry.familyId)) {
901
- errors.push(`Unknown familyId: ${entry.familyId}`);
902
- }
903
- if (!VALID_PRODUCT_STATUSES.has(entry.productStatus)) {
904
- errors.push(`Invalid productStatus: ${entry.productStatus}`);
905
- }
906
- if (!VALID_SURFACE_TYPES.has(entry.surfaceType)) {
907
- errors.push(`Invalid surfaceType: ${entry.surfaceType}`);
908
- }
909
- if (entry.productStatus === "docs_only" && (entry.statusVisibility || entry.dashboardVisibility)) {
910
- errors.push("docs_only capabilities cannot be shown as shipped in status or dashboard");
911
- }
912
- return { valid: errors.length === 0, errors };
913
- }
914
-
915
- function validateRegistry() {
916
- const errors = [];
917
- const seenIds = new Set();
918
- const planIds = new Set(CAPABILITIES.map((capability) => capability.id));
919
-
920
- for (const entry of CAPABILITY_REGISTRY) {
921
- if (seenIds.has(entry.id)) {
922
- errors.push(`Duplicate capability ID: ${entry.id}`);
923
- }
924
- seenIds.add(entry.id);
925
- if (!planIds.has(entry.id)) {
926
- errors.push(`Registry capability is not owned by plans.js: ${entry.id}`);
927
- }
928
- const result = validateCapability(entry);
929
- result.errors.forEach((error) => errors.push(`[${entry.id}] ${error}`));
930
- }
931
-
932
- for (const capability of CAPABILITIES) {
933
- if (!seenIds.has(capability.id)) {
934
- errors.push(`plans.js capability missing from registry: ${capability.id}`);
935
- }
936
- }
937
-
938
- return { valid: errors.length === 0, errors };
939
- }
940
-
941
- function validateFamilyInventory() {
942
- const errors = [];
943
- const seenIds = new Set();
944
- const knownCapabilityIds = new Set(CAPABILITIES.map((capability) => capability.id));
945
- const seenCapabilityAssignments = new Map();
946
- const expectedByFamily = new Map(CAPABILITY_FAMILIES.map((family) => [family.id, family.capabilityIds.slice().sort()]));
947
-
948
- for (const family of CAPABILITY_FAMILIES) {
949
- if (seenIds.has(family.id)) {
950
- errors.push(`Duplicate family ID: ${family.id}`);
951
- }
952
- seenIds.add(family.id);
953
- for (const field of REQUIRED_FAMILY_FIELDS) {
954
- if (family[field] === undefined || family[field] === null || family[field] === "") {
955
- errors.push(`[${family.id}] Missing required field: ${field}`);
956
- }
957
- }
958
- if (!VALID_FAMILY_IDS.has(family.id)) {
959
- errors.push(`[${family.id}] Unknown family ID`);
960
- }
961
- if (!VALID_STRENGTHS.has(family.strength)) {
962
- errors.push(`[${family.id}] Invalid strength: ${family.strength}`);
963
- }
964
- if (!VALID_PRODUCT_STATUSES.has(family.productStatus)) {
965
- errors.push(`[${family.id}] Invalid productStatus: ${family.productStatus}`);
966
- }
967
- if (!Array.isArray(family.capabilityIds)) {
968
- errors.push(`[${family.id}] capabilityIds must be an array`);
969
- } else {
970
- const familyCapabilityIds = family.capabilityIds.slice().sort();
971
- family.capabilityIds.forEach((capabilityId) => {
972
- if (!knownCapabilityIds.has(capabilityId)) {
973
- errors.push(`[${family.id}] Unknown capability ID: ${capabilityId}`);
974
- }
975
- if (seenCapabilityAssignments.has(capabilityId)) {
976
- errors.push(`[${family.id}] Capability appears in more than one family: ${capabilityId} already assigned to ${seenCapabilityAssignments.get(capabilityId)}`);
977
- } else {
978
- seenCapabilityAssignments.set(capabilityId, family.id);
979
- }
980
- const registryEntry = getCapability(capabilityId);
981
- if (registryEntry && registryEntry.familyId !== family.id) {
982
- errors.push(`[${family.id}] Capability ownership drift: ${capabilityId} derives to ${registryEntry.familyId}`);
983
- }
984
- });
985
- const expectedIds = expectedByFamily.get(family.id) || [];
986
- if (JSON.stringify(familyCapabilityIds) !== JSON.stringify(expectedIds)) {
987
- errors.push(`[${family.id}] Family capabilityIds drift from derived ownership`);
988
- }
989
- }
990
- if (family.productStatus === "docs_only" && /status|dashboard/i.test(family.statusSurface)) {
991
- errors.push(`[${family.id}] docs_only family cannot be marked as status/dashboard surfaced`);
992
- }
993
- if (family.productStatus !== "gap" && !family.tests) {
994
- errors.push(`[${family.id}] Missing tests metadata`);
995
- }
996
- if (family.productStatus !== "gap" && !family.evidence) {
997
- errors.push(`[${family.id}] Missing evidence metadata`);
998
- }
999
- }
1000
-
1001
- CAPABILITY_REGISTRY.forEach((entry) => {
1002
- const family = getFamily(entry.familyId);
1003
- if (!family) {
1004
- errors.push(`Registry entry ${entry.id} points to missing family ${entry.familyId}`);
1005
- return;
1006
- }
1007
- if (!family.capabilityIds.includes(entry.id)) {
1008
- errors.push(`Derived family inventory is missing capability ${entry.id} in ${entry.familyId}`);
1009
- }
1010
- });
1011
-
1012
- return { valid: errors.length === 0, errors };
1013
- }
1014
-
1015
- function validateTaxonomy() {
1016
- const errors = [];
1017
- const registry = validateRegistry();
1018
- const families = validateFamilyInventory();
1019
- errors.push(...registry.errors, ...families.errors);
1020
- return { valid: errors.length === 0, errors };
1021
- }
1022
-
1023
- function getCapability(id) {
1024
- return REGISTRY_MAP.get(String(id || "").trim()) || null;
1025
- }
1026
-
1027
- function listCapabilities() {
1028
- return Array.from(CAPABILITY_REGISTRY);
1029
- }
1030
-
1031
- function listByFamily(familyId) {
1032
- return CAPABILITY_REGISTRY.filter((entry) => entry.familyId === familyId);
1033
- }
1034
-
1035
- function listFamilies() {
1036
- return Array.from(CAPABILITY_FAMILIES);
1037
- }
1038
-
1039
- function getFamily(familyId) {
1040
- return FAMILY_MAP.get(String(familyId || "").trim()) || null;
1041
- }
1042
-
1043
- module.exports = {
1044
- CAPABILITY_REGISTRY,
1045
- CAPABILITY_FAMILIES,
1046
- VALID_FAMILY_IDS,
1047
- VALID_PRODUCT_STATUSES,
1048
- VALID_STRENGTHS,
1049
- VALID_SURFACE_TYPES,
1050
- validateCapability,
1051
- validateRegistry,
1052
- validateFamilyInventory,
1053
- validateTaxonomy,
1054
- getCapability,
1055
- listCapabilities,
1056
- listByFamily,
1057
- listFamilies,
1058
- getFamily,
1059
- };