pomaster 0.1.0 → 0.2.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.
- package/README.md +393 -396
- package/TRADEMARKS.md +2 -2
- package/catalog/archetypes/archetype.api.error.json +55 -0
- package/catalog/archetypes/archetype.api.pagination.json +68 -0
- package/catalog/archetypes/archetype.api.resource.json +45 -0
- package/catalog/archetypes/archetype.backend.approval_workflow.json +63 -0
- package/catalog/archetypes/archetype.backend.audit.json +44 -0
- package/catalog/archetypes/archetype.backend.crud_resource.json +56 -0
- package/catalog/archetypes/archetype.backend.export.json +40 -0
- package/catalog/archetypes/archetype.backend.external_integration.json +89 -0
- package/catalog/archetypes/archetype.backend.idempotent_command.json +65 -0
- package/catalog/archetypes/archetype.backend.import.json +47 -0
- package/catalog/archetypes/archetype.backend.master_data.json +45 -0
- package/catalog/archetypes/archetype.backend.outbox_event.json +80 -0
- package/catalog/archetypes/archetype.backend.query_resource.json +40 -0
- package/catalog/archetypes/archetype.backend.scheduled_job.json +69 -0
- package/catalog/archetypes/archetype.backend.transactional_write.json +79 -0
- package/catalog/archetypes/archetype.component.button.json +53 -0
- package/catalog/archetypes/archetype.component.data_grid.json +78 -0
- package/catalog/archetypes/archetype.component.dialog.json +52 -0
- package/catalog/archetypes/archetype.component.search_input.json +34 -0
- package/catalog/archetypes/archetype.component.search_select.json +77 -0
- package/catalog/archetypes/archetype.data.hierarchy.json +71 -0
- package/catalog/archetypes/archetype.data.ledger.json +40 -0
- package/catalog/archetypes/archetype.data.master_data.json +43 -0
- package/catalog/archetypes/archetype.data.transaction.json +42 -0
- package/catalog/archetypes/archetype.data.versioned.json +43 -0
- package/catalog/archetypes/archetype.frontend.error_taxonomy.json +99 -0
- package/catalog/archetypes/archetype.frontend.feature_oriented.json +59 -0
- package/catalog/archetypes/archetype.frontend.modular.json +37 -0
- package/catalog/archetypes/archetype.frontend.spa_layered.json +48 -0
- package/catalog/archetypes/archetype.page.analysis.json +39 -0
- package/catalog/archetypes/archetype.page.master_data.json +63 -0
- package/catalog/archetypes/archetype.runtime.environment_parity.json +178 -0
- package/catalog/archetypes/archetype.runtime.observability_binding.json +93 -0
- package/catalog/archetypes/archetype.state.async_command.json +63 -0
- package/catalog/archetypes/archetype.state.background_refresh.json +45 -0
- package/catalog/archetypes/archetype.state.form_edit.json +45 -0
- package/catalog/archetypes/archetype.state.optimistic_mutation.json +48 -0
- package/catalog/archetypes/archetype.state.selection.json +35 -0
- package/catalog/archetypes/archetype.state.server_query.json +60 -0
- package/catalog/archetypes/archetype.state.url_filter.json +47 -0
- package/catalog/archetypes/archetype.state.wizard.json +46 -0
- package/catalog/catalog-lock.draft.json +349 -5
- package/catalog/gates/gate.new-entity.checks.json +106 -0
- package/catalog/knowledge/knowledge.web.browser.mcp_eyes.json +99 -0
- package/catalog/sensors/sensor.browser.deterministic.json +17 -6
- package/catalog/sensors/sensor.browser.interactive.json +16 -6
- package/catalog/tools/materialize_v06_relock.py +218 -0
- package/catalog/tools/seed_v06_archetypes.py +283 -0
- package/catalog/tools/seed_v06_batch2_materials.py +504 -0
- package/catalog/tools/seed_v06_batch3_materials.py +756 -0
- package/catalog/tools/seed_v06_batch4_materials.py +353 -0
- package/dist/bin.js +2920 -331
- package/package.json +1 -1
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
"""P-v06 批次 4:RUNTIME 物料落盘(2 份——研究裁剪后的诚实最小集)。
|
|
3
|
+
|
|
4
|
+
语义全部锚定联网核实报告(.trellis/tasks/09-02-vnext-prd-v06-governed-substrate/
|
|
5
|
+
research/runtime-references.md,2026-09-03 opentelemetry.io 官方文档/GitHub API/
|
|
6
|
+
12factor/Spring/kustomize/kubectl/Argo CD/OpenFeature/Liquibase 实抓,
|
|
7
|
+
OTel 现行语义 21 条 + Environment Parity 7 条全部当日实抓无一条来自训练数据推测):
|
|
8
|
+
- RUNTIME_ARCHETYPE.ENVIRONMENT_PARITY(layer=ARCHETYPE;PRD v0.6 §215 逐字六维):
|
|
9
|
+
Config=Spring profiles + kustomize base/overlays + kubectl diff(退出码 0/1/>1)、
|
|
10
|
+
Feature Flag=OpenFeature(CNCF incubating)+ feature_flag.* RC 求值属性族、
|
|
11
|
+
DB Schema=Liquibase diff/diff-changelog + Drift Report——三维有实锚;
|
|
12
|
+
Dependency/External Integration 两维如实标注 self-defined(research 差异表 §215 行:
|
|
13
|
+
无单点主流工具,仅 12factor 异构禁令原则——禁伪造「业界标准做法」引用)。
|
|
14
|
+
产出结构内置 severity + ignore_rules(research 建议:漂移噪声治理是 Argo CD 实证
|
|
15
|
+
必要组成——无 ignoreDifferences 则成功 Sync 后立即 OutOfSync,门禁因误报被关掉)。
|
|
16
|
+
deployment.environment 已废弃 → deployment.environment.name 新词形(Stable;
|
|
17
|
+
well-known 值 development/production/staging/test)写进 defaults;旧词形只允许
|
|
18
|
+
出现在 deprecated 改名注记(集成 spec 正则闸以负向先行断言排除新词形——
|
|
19
|
+
落盘前同款自检)。
|
|
20
|
+
- RUNTIME_ARCHETYPE.OBSERVABILITY_BINDING(layer=PATTERN;PRD §85-86/§102-§103):
|
|
21
|
+
OTel 是 Runtime Sensor Provider、POMaster 只建语义 Binding 不复制 APM(§85 逐字
|
|
22
|
+
「POMaster 不替代 APM,只建立语义 Binding。」);OTLP 四信号 traces/metrics/logs/
|
|
23
|
+
profiles(PRD §85 信号对象清单漏 profiles——差异注记如实落位,研究题 1 差异表行);
|
|
24
|
+
semconv 按域附 Status(HTTP/DB=Mixed、RPC=Release Candidate、Messaging=Development、
|
|
25
|
+
Service/Service Instance 经实体族 Stable——禁把六域当统一标准);resource 词形
|
|
26
|
+
service.name/service.version/deployment.environment.name(旧词形 deprecated 差异
|
|
27
|
+
注记);锚「semconv ≥ 现行版语义」禁硬编码版本号(semconv 月级发版——版本位入
|
|
28
|
+
x-research-anchors provenance,defaults 零版本号,集成 spec 正则闸);Collector
|
|
29
|
+
双版本线 v1.66.0/v0.160.0 现状记 defaults 之外字段(高频发版,同禁入 defaults)。
|
|
30
|
+
- layer 判定注记:ENVIRONMENT_PARITY 落 ARCHETYPE(PRD §215 是「环境集合 + 比对
|
|
31
|
+
维度 + 产出」的标准域形状定义,与批次 3 各原型同为域档位);OBSERVABILITY_BINDING
|
|
32
|
+
落 PATTERN(PRD §85 Binding 语义 + §86 Adapter 映射是可跨信号域复用的机制模式,
|
|
33
|
+
与批次 2 STATE_ARCHETYPE 八态族机制面落 PATTERN 同判例;七值词形闸
|
|
34
|
+
SUBSTRATE_LAYER_VALUES,PR-0006)。
|
|
35
|
+
- 裁定(写进头注的刻意缺席):不加 SENSOR.OTEL.TRACE 传感器物料——「禁止空壳仪式」
|
|
36
|
+
(PRD v0.6 §10):catalog sensor 物料的 availability_probe 只许声明式引用既有
|
|
37
|
+
单一事实源面的既有键(toolDetectors/gateAdapters/kernel 三面),OTel 无既有
|
|
38
|
+
探测器/probe 键可引,登记 sensor 即假绿;待真实 implementation 另批走
|
|
39
|
+
vocab/传感器 PR(RUNTIME family 保持派生缺席位,PRD §163 Phase C 逐批落)。
|
|
40
|
+
词形纪律(沿批次 3 ADR:物料 core 词面避开既有 repo 级 resolver/gate 断言的
|
|
41
|
+
need token;本批 core 词面零豁免——id 词形 RUNTIME_ARCHETYPE.* 不携带既有断言
|
|
42
|
+
token,锚位 URL 的 kustomize/master 词形只进 referenceTokens(refOnly 候选降位
|
|
43
|
+
alternatives,不动 matches/match_class——resolver-composable 真实 catalog 断言
|
|
44
|
+
alternatives 用 toContain 判卷,增量安全),落盘前跑 token 纪律自检,违禁显式爆。
|
|
45
|
+
幂等:同输入重跑 byte-stable。
|
|
46
|
+
"""
|
|
47
|
+
import json
|
|
48
|
+
import os
|
|
49
|
+
import re
|
|
50
|
+
import sys
|
|
51
|
+
|
|
52
|
+
try:
|
|
53
|
+
sys.stdout.reconfigure(encoding="utf-8")
|
|
54
|
+
except Exception:
|
|
55
|
+
pass
|
|
56
|
+
|
|
57
|
+
ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # .../catalog
|
|
58
|
+
OUT = os.path.join(ROOT, "archetypes")
|
|
59
|
+
FETCH = "2026-09-03"
|
|
60
|
+
|
|
61
|
+
RESEARCH_NOTE = ".trellis/tasks/09-02-vnext-prd-v06-governed-substrate/research/runtime-references.md"
|
|
62
|
+
PRD_V06_DOC_REF = "doc/POMaster-vNext-PRD-v0.6-Governed-Engineering-System.md"
|
|
63
|
+
|
|
64
|
+
materials = {}
|
|
65
|
+
|
|
66
|
+
# ============================================================
|
|
67
|
+
# RUNTIME_ARCHETYPE.ENVIRONMENT_PARITY(PRD v0.6 §215 逐字;layer=ARCHETYPE)
|
|
68
|
+
# ============================================================
|
|
69
|
+
|
|
70
|
+
materials["archetype.runtime.environment_parity.json"] = {
|
|
71
|
+
"id": "RUNTIME_ARCHETYPE.ENVIRONMENT_PARITY",
|
|
72
|
+
"kind": "archetype",
|
|
73
|
+
"layer": "ARCHETYPE",
|
|
74
|
+
"title_zh": "环境一致性原型",
|
|
75
|
+
"summary_zh": "六维环境比对原型(PRD §215 逐字):Runtime Version/Config/Feature Flag/DB Schema/Dependency/External Integration 逐维比对期望态与实际态,产出结构化 ENVIRONMENT_DRIFT(差异项 + severity + ignore_rules);与 Perception 的 Wrong Runtime Instance 机制直接结合。",
|
|
76
|
+
"semantic": {
|
|
77
|
+
"responsibility": "把『环境之间是否一致』从印象问题标准化为逐维比对:每维声明事实源与比对方式,差异以结构化漂移产物承载(差异项、严重度、忽略规则三件齐备),而非散落在人脑与聊天记录",
|
|
78
|
+
"when_to_use": "多环境部署(PRD §215 五环境 LOCAL/DEV/TEST/STAGING/PRODUCTION)需要回答『dev 过而 production 挂』类问题时;环境迁移/复制部署/升级前需要预检漂移时",
|
|
79
|
+
"when_not_to_use": "单环境本地开发(无第二环境可比);运行中服务的遥测观测(走观测语义绑定模式的信号面);代码版本管理本身(版本比对只是六维之一)",
|
|
80
|
+
},
|
|
81
|
+
"composition": {"requires": [], "optional": [], "incompatible": []},
|
|
82
|
+
"defaults": {
|
|
83
|
+
"comparison_dimensions": {
|
|
84
|
+
"runtime_version": {
|
|
85
|
+
"source": "部署视图/镜像 tag;OTel 资源属性(service.version、deployment.id)",
|
|
86
|
+
"status": "verified",
|
|
87
|
+
"wording_anchors": ["service.version"],
|
|
88
|
+
"note": "deployment.id/name/status 为 Development 级词形(非稳定锚,允许变更——research 2026-09-03 实抓)",
|
|
89
|
+
},
|
|
90
|
+
"config": {
|
|
91
|
+
"source": "应用 profile 分层(Spring profiles:spring.profiles.active/default/include/group + spring.config.activate.on-profile)+ k8s 分层渲染(kustomize base/overlays,template-free)+ 比对命令(kubectl diff:live vs would-be applied,恒输出 YAML,退出码 0=无差异/1=有差异/>1=出错)",
|
|
92
|
+
"status": "verified",
|
|
93
|
+
"wording_anchors": [
|
|
94
|
+
"spring.profiles.active",
|
|
95
|
+
"spring.profiles.group",
|
|
96
|
+
"spring.config.activate.on-profile",
|
|
97
|
+
"kustomize base/overlays",
|
|
98
|
+
"kubectl diff",
|
|
99
|
+
],
|
|
100
|
+
"note": "配置项本体承载为 PRD 自有词形(Config Key/Default/Environment Override,§73);OTel 无配置维度标准词形",
|
|
101
|
+
},
|
|
102
|
+
"feature_flag": {
|
|
103
|
+
"source": "OpenFeature(vendor-agnostic 标准层,CNCF incubating 现状,One SDK any backend)+ OTel 旗标求值属性族(全部 Release Candidate)",
|
|
104
|
+
"status": "verified",
|
|
105
|
+
"wording_anchors": [
|
|
106
|
+
"feature_flag.key",
|
|
107
|
+
"feature_flag.provider.name",
|
|
108
|
+
"feature_flag.result.value",
|
|
109
|
+
"feature_flag.result.reason",
|
|
110
|
+
],
|
|
111
|
+
"note": "生命周期卫生项(rollout 完成未删 Flag/无 Owner/永久实验——§74)是 POMaster 增值层非外部标准复制品:引用 OpenFeature 只声明求值语义锚,Owner/Expiry 保持 self-defined",
|
|
112
|
+
},
|
|
113
|
+
"db_schema": {
|
|
114
|
+
"source": "迁移工具 drift 检测(Liquibase:diff 比对单库当前态 vs 上一态、diff-changelog 比对两个目标库并可生成 missing changesets 回填、Drift Report 人可读可接 CI/CD;Drift Report 为 Liquibase Secure 商业版功能,diff/diff-changelog 在 Community 分册)",
|
|
115
|
+
"status": "verified",
|
|
116
|
+
"wording_anchors": ["diff", "diff-changelog", "Drift Report"],
|
|
117
|
+
"note": "Flyway 侧未核实,禁写入(research Caveats 明示)",
|
|
118
|
+
},
|
|
119
|
+
"dependency": {
|
|
120
|
+
"source": "self-defined——无单点主流工具(research 2026-09-03 如实裁定);12factor 只给原则:backing service 禁 dev/production 异构(resist the urge to use different backing services——即使适配器理论上抹平差异也会造成 dev/staging 过而 production 挂的细微不兼容)",
|
|
121
|
+
"status": "self-defined",
|
|
122
|
+
"wording_anchors": [],
|
|
123
|
+
"note": "禁伪造『业界标准做法』引用(research 差异表 §215 行裁定)",
|
|
124
|
+
},
|
|
125
|
+
"external_integration": {
|
|
126
|
+
"source": "self-defined——无单点主流工具(research 2026-09-03 如实裁定)",
|
|
127
|
+
"status": "self-defined",
|
|
128
|
+
"wording_anchors": [],
|
|
129
|
+
"note": "调用侧韧性/错误映射语义归 ARCHETYPE.BACKEND.EXTERNAL_INTEGRATION(八要素),本维只管跨环境一致性",
|
|
130
|
+
},
|
|
131
|
+
},
|
|
132
|
+
"environment_name": {
|
|
133
|
+
"wording": "deployment.environment.name",
|
|
134
|
+
"level": "Stable",
|
|
135
|
+
"well_known_values": ["development", "production", "staging", "test"],
|
|
136
|
+
"prd_environment_mapping": {
|
|
137
|
+
"LOCAL": "development",
|
|
138
|
+
"DEV": "development",
|
|
139
|
+
"TEST": "test",
|
|
140
|
+
"STAGING": "staging",
|
|
141
|
+
"PRODUCTION": "production",
|
|
142
|
+
},
|
|
143
|
+
"mapping_note": "PRD 五环境词形保留为主键(差异表 §215 行裁定);OTel 无 LOCAL/DEV——LOCAL/DEV 归并 development 或用 custom value(OTel 明文允许:otherwise, a custom value MAY be used);TEST↔test 直接映射;环境值不参与 service 唯一性约束(service.name=frontend 在 production 与 staging 仍视为同一 service——semconv 脚注逐字语义)",
|
|
144
|
+
},
|
|
145
|
+
"drift_output": {
|
|
146
|
+
"name": "ENVIRONMENT_DRIFT",
|
|
147
|
+
"binding": "与 Perception 的 Wrong Runtime Instance 机制直接结合(PRD §215 逐字)",
|
|
148
|
+
"shape": "期望态(Git/manifest/would-be applied/changelog)vs 实际态(live/DB)的持续或即时比对 + 结构化差异输出 + 退出码/状态机(kubectl diff 退出码 0/1、Argo CD OutOfSync 状态、Liquibase Drift Report 三者同构——research 跨工具归纳)",
|
|
149
|
+
"fields": ["dimension", "expected", "actual", "severity", "ignore_rules"],
|
|
150
|
+
"severity": {
|
|
151
|
+
"levels": ["CRITICAL", "MAJOR", "MINOR"],
|
|
152
|
+
"rule": "每条差异项必须带严重度:CRITICAL=影响正确性/安全(如 production 缺失 DB Schema 迁移);MAJOR=行为不一致(如 Flag 求值结果漂移、Config 覆盖缺失);MINOR=呈现性差异;严重度缺失的差异项不得静默入账",
|
|
153
|
+
"note": "分级词形为 POMaster 自有(self-defined)——业界工具给退出码/状态不给分级,分级是门禁消费所需增量",
|
|
154
|
+
},
|
|
155
|
+
"ignore_rules": {
|
|
156
|
+
"forms": [
|
|
157
|
+
"field_path(对照 Argo CD jsonPointers / jqPathExpressions)",
|
|
158
|
+
"manager(对照 Argo CD managedFieldsManagers)",
|
|
159
|
+
"value_pattern(随机值类——randAlphaNum 型模板函数每次生成不同值)",
|
|
160
|
+
],
|
|
161
|
+
"noise_sources": [
|
|
162
|
+
"controller/mutating webhook 改写对象",
|
|
163
|
+
"HPA 重排 spec.metrics",
|
|
164
|
+
"随机模板函数每次生成不同值",
|
|
165
|
+
"manifest 含 K8s 未知字段",
|
|
166
|
+
],
|
|
167
|
+
"rule": "忽略规则必须显式登记(字段路径 + 理由);未登记的忽略禁静默——漂移噪声治理是漂移检测的必要组成(Argo CD 实证:应用可在成功 Sync 后立即 OutOfSync,无 ignoreDifferences 则门禁因误报被关掉——research 题 2 关键结论)",
|
|
168
|
+
},
|
|
169
|
+
},
|
|
170
|
+
},
|
|
171
|
+
"deprecated_wording_note": "旧词形 deployment.environment 已废弃(Deprecated:Replaced by deployment.environment.name——semconv registry 部署属性族 2026-09-03 实抓);本物料全文以新词形 deployment.environment.name 为准,旧词形仅在本注记出现作改名映射锚(读到旧词形按新词形归一并记 drift 事件;semconv 当前有 schema 变换 moratorium 警告——勿做自动 schema 变换依赖)",
|
|
172
|
+
"constraints": [
|
|
173
|
+
"六维中 Dependency 与 External Integration 两维如实标注 self-defined(无单点主流工具)——禁伪造『业界标准做法』引用",
|
|
174
|
+
"环境名只写新词形 deployment.environment.name;旧词形仅限 deprecated 注记(集成 spec 正则闸 deployment\\.environment(?!\\.name))",
|
|
175
|
+
"四维实锚事实源引用与版本位以 x-research-anchors provenance 为准——物料正文不硬编码工具版本号(工具版本随 release 漂移,语义锚不随)",
|
|
176
|
+
],
|
|
177
|
+
"x-research-anchors": {
|
|
178
|
+
"note": "六维比对语义为 PRD §215 逐字;六维事实源锚(Spring profiles/kustomize/kubectl diff/Argo CD ignoreDifferences/OpenFeature/Liquibase drift)与 Dependency/External Integration 两维 self-defined 裁定均出自 runtime-references.md 题 2(2026-09-03 官方站点实抓);deployment.environment.name 词形与 well-known 四值出自 semconv deployment 属性族同日实抓;severity+ignore_rules 内置为 research 题 2 落点建议采纳",
|
|
179
|
+
"sources": [
|
|
180
|
+
{"url": RESEARCH_NOTE + " 题 2", "fetched": FETCH},
|
|
181
|
+
{"url": "https://12factor.net/dev-prod-parity", "fetched": FETCH},
|
|
182
|
+
{"url": "https://docs.spring.io/spring-boot/reference/features/profiles.html", "fetched": FETCH},
|
|
183
|
+
{"url": "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/README.md", "fetched": FETCH},
|
|
184
|
+
{"url": "https://kubernetes.io/docs/reference/kubectl/generated/kubectl_diff/", "fetched": FETCH},
|
|
185
|
+
{"url": "https://argo-cd.readthedocs.io/en/stable/user-guide/diffing/", "fetched": FETCH},
|
|
186
|
+
{"url": "https://openfeature.dev/", "fetched": FETCH},
|
|
187
|
+
{"url": "https://docs.liquibase.com/secure/user-guide-5-2-2/what-is-drift-detection", "fetched": FETCH},
|
|
188
|
+
{"url": "https://opentelemetry.io/docs/specs/semconv/registry/attributes/deployment/", "fetched": FETCH},
|
|
189
|
+
{"url": PRD_V06_DOC_REF + " §215", "fetched": FETCH},
|
|
190
|
+
],
|
|
191
|
+
},
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
# ============================================================
|
|
195
|
+
# RUNTIME_ARCHETYPE.OBSERVABILITY_BINDING(PRD §85-86/§102-§103;layer=PATTERN)
|
|
196
|
+
# ============================================================
|
|
197
|
+
|
|
198
|
+
materials["archetype.runtime.observability_binding.json"] = {
|
|
199
|
+
"id": "RUNTIME_ARCHETYPE.OBSERVABILITY_BINDING",
|
|
200
|
+
"kind": "archetype",
|
|
201
|
+
"layer": "PATTERN",
|
|
202
|
+
"title_zh": "观测语义绑定模式",
|
|
203
|
+
"summary_zh": "观测语义绑定模式(PRD §85/§86/§102-§103):OTel 是 Runtime Sensor Provider,POMaster 不替代 APM 只建立语义 Binding——信号对象、资源身份词形、按域成熟度三面绑定到 Runtime Graph,遥测本体留在 OTel/APM 侧。",
|
|
204
|
+
"semantic": {
|
|
205
|
+
"responsibility": "把 POMaster 对象系与 OTel 语义约定的对应关系单点化:每条绑定声明词形锚与成熟度档位(Stable/Release Candidate/Development/Mixed),禁把不同域当成统一标准引用——绑定是语义映射不是复制",
|
|
206
|
+
"when_to_use": "需要把 Runtime Graph/Deployment View 与遥测信号对齐时(§72 Version→service.version 一类映射);§103 Runtime Sensor(SENSOR.OTEL.TRACE/SENSOR.OTEL.METRIC 词形锚)的语义消费面",
|
|
207
|
+
"when_not_to_use": "自建 APM/自研语义约定(OTel 是 Provider,POMaster 不复制其语义);具体后端查询语句与仪表盘配置(APM 侧自有面);采集器部署与采样策略运维(OTel Collector 自有面)",
|
|
208
|
+
},
|
|
209
|
+
"composition": {"requires": [], "optional": [], "incompatible": []},
|
|
210
|
+
"defaults": {
|
|
211
|
+
"signals": {
|
|
212
|
+
"bound": ["traces", "metrics", "logs", "profiles"],
|
|
213
|
+
"wording_source": "OTLP 四信号(Collector component-stability 文档明文列 profiles;OTel spec 侧有 Profiles Mappings/Pprof Profiles Data Format 章节——research 题 1 实抓)",
|
|
214
|
+
"gap_note": "PRD §85 信号对象清单(Trace/Metric/Log Event/Correlation ID/Span/Alert/Dashboard/SLO)漏 profiles——差异注记如实落位,Profile 对象待对象系增补(不私扩)",
|
|
215
|
+
},
|
|
216
|
+
"domain_status": {
|
|
217
|
+
"http": "Mixed",
|
|
218
|
+
"rpc": "Release Candidate",
|
|
219
|
+
"database": "Mixed",
|
|
220
|
+
"messaging": "Development",
|
|
221
|
+
"service": "Stable(实体 service/service.namespace/service.instance——§86 Service/Service Instance 映射经实体族成立)",
|
|
222
|
+
"service_instance": "Stable(service.instance.id 与 service.namespace,service.name 组成全局唯一三元组)",
|
|
223
|
+
"rule": "逐域附 Status 禁当统一标准——PRD §86 六个映射域成熟度不齐(research 2026-09-03 逐域 index.md 自述实抓:HTTP Mixed/Database Mixed/RPC Release Candidate/Messaging Development/FaaS Development)",
|
|
224
|
+
},
|
|
225
|
+
"resource_identity": {
|
|
226
|
+
"service.name": "Stable——逻辑服务名;未指定时 SDK 回落 unknown_service:<进程名>;水平扩缩全实例 MUST 同值",
|
|
227
|
+
"service.version": "Stable——服务组件版本串(格式不定义:2.0.0 或 git SHA 皆可)",
|
|
228
|
+
"deployment.environment.name": "Stable——部署环境名(well-known 值 development/production/staging/test);不参与 service 唯一性约束",
|
|
229
|
+
"service.namespace": "Stable——命名空间(namespace 内 name 唯一)",
|
|
230
|
+
"service.instance.id": "Stable——全局唯一三元组成员;Collector 无法无歧义确定实例时不应代设(如按 pod.name 生成大概率错)",
|
|
231
|
+
},
|
|
232
|
+
"maturity_anchor": "semconv ≥ 现行版语义(禁硬编码版本号——semconv 月级发版,版本位入 x-research-anchors provenance;语义判卷以 registry attributes/entities 的 index.md 机器视图为准,/llms.txt 总索引可直接消费)",
|
|
233
|
+
"binding_form": "词形锚 + 成熟度档位 + 消费位三件式:每条绑定声明 OTel 词形、其 Status、以及 POMaster 侧消费对象(Runtime Graph 节点/Deployment View 字段)",
|
|
234
|
+
},
|
|
235
|
+
"binding_rule": "OTel 是 Runtime Sensor Provider:POMaster 只建立语义 Binding,不复制 APM(PRD §85 逐字:POMaster 不替代 APM,只建立语义 Binding。)——semconv 只定义属性/命名契约,观测本体(采集/存储/查询/告警)留在 OTel/APM 侧(研究题 1 差异表:与 OTel 定位一致,无冲突)",
|
|
236
|
+
"deprecated_wording_note": "resource 词形改名锚:deployment.environment(旧词形)已废弃(Deprecated:Replaced by deployment.environment.name——semconv deployment 属性族 2026-09-03 实抓);本物料全文以新词形为准,旧词形仅在本注记出现",
|
|
237
|
+
"collector_status": "Collector 双版本线 v1.66.0/v0.160.0(2026-09-02 release,高频发版;组件标 1.x 要求至少一个 signal stable——traces/metrics/logs/profiles 各自独立稳定级,Development/Alpha/Beta/Stable/Deprecated/Unmaintained 阶梯);代码基基于 OTLP protocol v1.10.0(Stable)构建——版本位随 provenance 更新,禁硬编码进 defaults",
|
|
238
|
+
"constraints": [
|
|
239
|
+
"§103 SENSOR.OTEL.TRACE/SENSOR.OTEL.METRIC 为 Runtime Sensor 词形锚(登记面)——本物料是语义 Binding 不登记 sensor 本体:OTel 无既有探测器/availability_probe 键可引,登记即假绿(『禁止空壳仪式』§10;真实 implementation 另批走 vocab/传感器 PR)",
|
|
240
|
+
"Config Hash/Migration Version/Traffic/Health 无 OTel 标准词形(research 差异表 §72 行)——Deployment View 后四项为 POMaster 自有词形(self-defined),禁误挂 semconv 锚",
|
|
241
|
+
"schema 变换引用须带 moratorium 意识(官方 Warning:暂停依赖 schema 变换实现遥测稳定性)——改名类变更以 schema 文件描述并发布,但消费面不做自动变换依赖;改名映射是单向注记不是自动变换(旧词形→新词形,见 deprecated 注记)",
|
|
242
|
+
"semconv 稳定性契约只保证属性 key/实体引用/span name 与 kind/metric name 与 unit/well-known 既有值——属性值本身、span links、metric description 不在保证范围(versioning-and-stability 官方原文语义)",
|
|
243
|
+
],
|
|
244
|
+
"x-research-anchors": {
|
|
245
|
+
"note": "四信号(traces/metrics/logs/profiles)/逐域 Status/resource 词形与稳定级/Collector 双版本线均出自 runtime-references.md 题 1(2026-09-03 opentelemetry.io 官方文档 + GitHub API 实抓);semconv 文档站与仓库 latest release 当时版本位 1.44.0(2026-08-04 发布)、Collector 当时 v0.160.0(2026-09-02 发布)记录于本注记作 provenance——按研究裁定禁入 defaults 硬编码(月级发版);『POMaster 不替代 APM 只建立语义 Binding』为 PRD §85 逐字,与 OTel 定位无冲突(差异表 §85 行)",
|
|
246
|
+
"sources": [
|
|
247
|
+
{"url": RESEARCH_NOTE + " 题 1", "fetched": FETCH},
|
|
248
|
+
{"url": "https://opentelemetry.io/docs/specs/semconv/", "fetched": FETCH},
|
|
249
|
+
{"url": "https://opentelemetry.io/docs/specs/otel/document-status/", "fetched": FETCH},
|
|
250
|
+
{"url": "https://opentelemetry.io/docs/specs/otel/versioning-and-stability/", "fetched": FETCH},
|
|
251
|
+
{"url": "https://opentelemetry.io/docs/specs/semconv/registry/attributes/service/index.md", "fetched": FETCH},
|
|
252
|
+
{"url": "https://opentelemetry.io/docs/specs/semconv/registry/attributes/deployment/", "fetched": FETCH},
|
|
253
|
+
{"url": "https://raw.githubusercontent.com/open-telemetry/opentelemetry-collector/main/docs/component-stability.md", "fetched": FETCH},
|
|
254
|
+
{"url": PRD_V06_DOC_REF + " §85/§86/§102/§103", "fetched": FETCH},
|
|
255
|
+
],
|
|
256
|
+
},
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
# ============================================================
|
|
260
|
+
# 词形纪律自检(落盘前硬闸;knowledgeQueryTokens 同法镜像——批次 3 同款)
|
|
261
|
+
# ============================================================
|
|
262
|
+
|
|
263
|
+
# core 词面 = title_zh + summary_zh + semantic 三槽(id 除外——本批 id 词形零豁免,
|
|
264
|
+
# RUNTIME_ARCHETYPE.* 不携带既有断言 need token,见模块头 ADR)。
|
|
265
|
+
FORBIDDEN_CORE_TOKENS = {
|
|
266
|
+
# 英文(lowercase token 精确等值)
|
|
267
|
+
"crud", "create", "update", "delete", "button", "select", "combobox",
|
|
268
|
+
"searchable", "master", "data", "supplier", "query", "color", "antd",
|
|
269
|
+
"grid", "table", "page",
|
|
270
|
+
# CJK(整段 run 精确等值)
|
|
271
|
+
"资源", "按钮", "动作", "触发", "主数据", "供应商管理页", "可搜索车型选择器",
|
|
272
|
+
"表格", "网格", "颜色",
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
def core_tokens(body):
|
|
277
|
+
text = " ".join(
|
|
278
|
+
[
|
|
279
|
+
body["title_zh"],
|
|
280
|
+
body["summary_zh"],
|
|
281
|
+
body.get("semantic", {}).get("responsibility") or "",
|
|
282
|
+
body.get("semantic", {}).get("when_to_use") or "",
|
|
283
|
+
body.get("semantic", {}).get("when_not_to_use") or "",
|
|
284
|
+
]
|
|
285
|
+
)
|
|
286
|
+
# knowledgeQueryTokens 同法镜像:lowercase 后按非字母数字/非 CJK 字符切段。
|
|
287
|
+
return [t for t in re.split(r"[^a-z0-9一-鿿]+", text.lower()) if t]
|
|
288
|
+
|
|
289
|
+
|
|
290
|
+
def token_discipline_check():
|
|
291
|
+
"""落盘前自检:core 词面禁词(违禁显式爆,禁静默落盘)。"""
|
|
292
|
+
violations = []
|
|
293
|
+
for name, body in materials.items():
|
|
294
|
+
tokens = set(core_tokens(body))
|
|
295
|
+
hit = sorted(tokens & FORBIDDEN_CORE_TOKENS)
|
|
296
|
+
if hit:
|
|
297
|
+
violations.append(f"{name} ({body['id']}): {hit}")
|
|
298
|
+
if violations:
|
|
299
|
+
raise SystemExit(
|
|
300
|
+
"[seed-batch4] 词形纪律自检失败(core 词面命中既有断言 need token):\n - "
|
|
301
|
+
+ "\n - ".join(violations)
|
|
302
|
+
)
|
|
303
|
+
|
|
304
|
+
|
|
305
|
+
def deprecated_wording_check():
|
|
306
|
+
"""落盘前自检:旧词形 deployment.environment 只允许出现在 deprecated 注记
|
|
307
|
+
(正则同集成 spec:deployment\\.environment(?!\\.name)——负向先行断言)。"""
|
|
308
|
+
pattern = re.compile(r"deployment\.environment(?!\.name)")
|
|
309
|
+
violations = []
|
|
310
|
+
for name, body in materials.items():
|
|
311
|
+
rest = {k: v for k, v in body.items() if k != "deprecated_wording_note"}
|
|
312
|
+
if pattern.search(json.dumps(rest, ensure_ascii=False)):
|
|
313
|
+
violations.append(f"{name} ({body['id']}): 旧词形泄漏到 deprecated 注记之外")
|
|
314
|
+
note = body.get("deprecated_wording_note", "")
|
|
315
|
+
if "deployment.environment" not in note:
|
|
316
|
+
violations.append(f"{name} ({body['id']}): deprecated 注记缺旧词形改名锚")
|
|
317
|
+
if violations:
|
|
318
|
+
raise SystemExit(
|
|
319
|
+
"[seed-batch4] 旧词形纪律自检失败:\n - " + "\n - ".join(violations)
|
|
320
|
+
)
|
|
321
|
+
|
|
322
|
+
|
|
323
|
+
def defaults_version_free_check():
|
|
324
|
+
"""落盘前自检:defaults 零硬编码工具版本号(semconv 月级发版——版本位只在
|
|
325
|
+
锚位注记/Collector 现状字段;正则同集成 spec)。"""
|
|
326
|
+
pattern = re.compile(r"1\.44|1\.60|v1\.66|v0\.160|1\.10\.0")
|
|
327
|
+
violations = []
|
|
328
|
+
for name, body in materials.items():
|
|
329
|
+
defaults_json = json.dumps(body.get("defaults", {}), ensure_ascii=False)
|
|
330
|
+
if pattern.search(defaults_json):
|
|
331
|
+
violations.append(f"{name} ({body['id']}): defaults 疑似硬编码版本号")
|
|
332
|
+
if violations:
|
|
333
|
+
raise SystemExit(
|
|
334
|
+
"[seed-batch4] defaults 版本号纪律自检失败:\n - " + "\n - ".join(violations)
|
|
335
|
+
)
|
|
336
|
+
|
|
337
|
+
|
|
338
|
+
def main():
|
|
339
|
+
token_discipline_check()
|
|
340
|
+
deprecated_wording_check()
|
|
341
|
+
defaults_version_free_check()
|
|
342
|
+
os.makedirs(OUT, exist_ok=True)
|
|
343
|
+
for name, body in materials.items():
|
|
344
|
+
path = os.path.join(OUT, name)
|
|
345
|
+
with open(path, "w", encoding="utf-8", newline="\n") as f:
|
|
346
|
+
json.dump(body, f, ensure_ascii=False, indent=2)
|
|
347
|
+
f.write("\n")
|
|
348
|
+
print("wrote", name, "id=", body["id"])
|
|
349
|
+
print(f"total: {len(materials)} materials")
|
|
350
|
+
|
|
351
|
+
|
|
352
|
+
if __name__ == "__main__":
|
|
353
|
+
main()
|