scene-capability-engine 3.6.24 → 3.6.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -7,10 +7,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [3.6.25] - 2026-03-06
11
+
12
+ ### Added
13
+ - Capability inventory now exposes homepage summary stats for publish readiness and triad gap cards.
14
+ - Capability iteration schema and Magicball docs now define the homepage summary card contract.
15
+
10
16
  ## [3.6.24] - 2026-03-06
11
17
 
12
18
  ### Added
13
- - Capability inventory payload now exposes fixed homepage query metadata (`query`) and sorting metadata (`sort`).
19
+ - Capability inventory payload now exposes fixed homepage query metadata (`query`), summary stats (`summary_stats`), and sorting metadata (`sort`).
14
20
  - Capability iteration schema and Magicball docs now define the fixed homepage inventory protocol.
15
21
 
16
22
  ## [3.6.23] - 2026-03-06
package/README.md CHANGED
@@ -218,5 +218,5 @@ MIT. See [LICENSE](LICENSE).
218
218
 
219
219
  ---
220
220
 
221
- **Version**: 3.6.24
221
+ **Version**: 3.6.25
222
222
  **Last Updated**: 2026-03-05
package/README.zh.md CHANGED
@@ -218,5 +218,5 @@ MIT,见 [LICENSE](LICENSE)。
218
218
 
219
219
  ---
220
220
 
221
- **版本**:3.6.24
221
+ **版本**:3.6.25
222
222
  **最后更新**:2026-03-05
@@ -667,7 +667,8 @@
667
667
  "scene_total",
668
668
  "scene_count",
669
669
  "sort",
670
- "scenes"
670
+ "scenes",
671
+ "summary_stats"
671
672
  ],
672
673
  "properties": {
673
674
  "mode": {
@@ -801,6 +802,48 @@
801
802
  },
802
803
  "additionalProperties": false
803
804
  }
805
+ },
806
+ "summary_stats": {
807
+ "type": "object",
808
+ "required": [
809
+ "publish_ready_count",
810
+ "blocked_count",
811
+ "missing_triads"
812
+ ],
813
+ "properties": {
814
+ "publish_ready_count": {
815
+ "type": "integer",
816
+ "minimum": 0
817
+ },
818
+ "blocked_count": {
819
+ "type": "integer",
820
+ "minimum": 0
821
+ },
822
+ "missing_triads": {
823
+ "type": "object",
824
+ "required": [
825
+ "decision_strategy",
826
+ "business_rules",
827
+ "entity_relation"
828
+ ],
829
+ "properties": {
830
+ "decision_strategy": {
831
+ "type": "integer",
832
+ "minimum": 0
833
+ },
834
+ "business_rules": {
835
+ "type": "integer",
836
+ "minimum": 0
837
+ },
838
+ "entity_relation": {
839
+ "type": "integer",
840
+ "minimum": 0
841
+ }
842
+ },
843
+ "additionalProperties": false
844
+ }
845
+ },
846
+ "additionalProperties": false
804
847
  }
805
848
  },
806
849
  "additionalProperties": false
@@ -1875,7 +1875,7 @@ sce capability inventory --json
1875
1875
  sce capability inventory --release-ready false --missing-triad decision_strategy --json
1876
1876
  ```
1877
1877
 
1878
- `capability inventory` returns fixed homepage query metadata in `query` and sorting metadata in `sort`.
1878
+ `capability inventory` returns fixed homepage query metadata in `query`, summary cards in `summary_stats`, and sorting metadata in `sort`.
1879
1879
 
1880
1880
 
1881
1881
  Capability candidates are now evaluated against the ontology core triad by default:
@@ -186,5 +186,7 @@ sce capability register --input <template_file> --risk-level <level> --difficult
186
186
  - `query.sample_limit`:每个 spec 抽样任务上限
187
187
  - `query.filters.release_ready`:发布可用性过滤
188
188
  - `query.filters.missing_triad`:triad 缺口过滤
189
+ - `summary_stats.publish_ready_count` / `summary_stats.blocked_count`:顶部统计卡
190
+ - `summary_stats.missing_triads.*`:triad 缺口计数卡
189
191
  - `sort.strategy`:默认排序策略说明
190
192
  - `sort.triad_priority`:triad 优先级数组
@@ -205,4 +205,12 @@ sce capability register --input <template.json> --json
205
205
  - 使用 `capability-inventory` 返回的 `query` 作为首页请求回显
206
206
  - 使用 `sort` 作为排序策略展示来源
207
207
  - 首页筛选器应直接映射:`query.filters.release_ready`、`query.filters.missing_triad`
208
- - 首页顶部可显示:`scene_total` / `scene_count`
208
+ - 首页顶部可显示:`scene_total` / `scene_count` / `summary_stats`
209
+
210
+ ## 12. 顶部统计卡
211
+
212
+ - `summary_stats.publish_ready_count`:可发布 scene 数
213
+ - `summary_stats.blocked_count`:被阻断 scene 数
214
+ - `summary_stats.missing_triads.decision_strategy`:缺决策策略数量
215
+ - `summary_stats.missing_triads.business_rules`:缺业务规则数量
216
+ - `summary_stats.missing_triads.entity_relation`:缺实体关系数量
@@ -836,6 +836,39 @@ function resolveCapabilityTriadPriority(entry) {
836
836
  return 3;
837
837
  }
838
838
 
839
+ function buildCapabilityInventorySummaryStats(entries) {
840
+ const items = Array.isArray(entries) ? entries : [];
841
+ const summary = {
842
+ publish_ready_count: 0,
843
+ blocked_count: 0,
844
+ missing_triads: {
845
+ decision_strategy: 0,
846
+ business_rules: 0,
847
+ entity_relation: 0
848
+ }
849
+ };
850
+
851
+ for (const entry of items) {
852
+ const ready = Boolean(entry && entry.release_readiness_ui && entry.release_readiness_ui.publish_ready);
853
+ if (ready) {
854
+ summary.publish_ready_count += 1;
855
+ } else {
856
+ summary.blocked_count += 1;
857
+ }
858
+
859
+ const missing = Array.isArray(entry && entry.release_readiness_ui && entry.release_readiness_ui.blocking_missing)
860
+ ? entry.release_readiness_ui.blocking_missing
861
+ : [];
862
+ for (const triad of Object.keys(summary.missing_triads)) {
863
+ if (missing.includes(triad)) {
864
+ summary.missing_triads[triad] += 1;
865
+ }
866
+ }
867
+ }
868
+
869
+ return summary;
870
+ }
871
+
839
872
  function sortCapabilityInventoryEntries(entries) {
840
873
  return [...(Array.isArray(entries) ? entries : [])].sort((left, right) => {
841
874
  const leftReady = Boolean(left && left.release_readiness_ui && left.release_readiness_ui.publish_ready);
@@ -930,6 +963,7 @@ async function runCapabilityInventoryCommand(options = {}, dependencies = {}) {
930
963
  },
931
964
  scene_total: scenes.length,
932
965
  scene_count: filteredScenes.length,
966
+ summary_stats: buildCapabilityInventorySummaryStats(filteredScenes),
933
967
  sort: {
934
968
  strategy: 'publish_ready -> missing_triad_priority -> value_score_desc -> scene_id',
935
969
  triad_priority: ['decision_strategy', 'business_rules', 'entity_relation']
@@ -1717,5 +1751,6 @@ module.exports = {
1717
1751
  buildCapabilityReleaseReadinessUi,
1718
1752
  filterCapabilityCatalogEntries,
1719
1753
  filterCapabilityInventoryEntries,
1720
- sortCapabilityInventoryEntries
1754
+ sortCapabilityInventoryEntries,
1755
+ buildCapabilityInventorySummaryStats
1721
1756
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "scene-capability-engine",
3
- "version": "3.6.24",
3
+ "version": "3.6.25",
4
4
  "description": "SCE (Scene Capability Engine) - A CLI tool and npm package for spec-driven development with AI coding assistants.",
5
5
  "main": "index.js",
6
6
  "bin": {