父 Issue:#3(M1 自拆解简报 · 入口级交付)· WP4
目标
入口级交付收尾:端口规整到基线、刷新本仓契约块、CI 推镜像入 ghcr。三者皆低风险部署/元数据收尾,统一一项。
范围(文件清单)
- 端口规整(基线:App=8081 / 管理=9081)
application.yml:server.port: ${SERVER_PORT:8081}、management.server.port: ${MANAGEMENT_SERVER_PORT:9081}(现无 server.port → 默认 8080,错)。
Dockerfile:EXPOSE、HEALTHCHECK 由 8080 → 8081(liveness 探针走管理端口 9081 时一并改)。
docker-compose.local.yml:Keycloak 映射由 8081:8080 改为 8180:8080 —— 现与本服务 App 8081 冲突;基线 Keycloak=8180。本地 profile 连接项随之对齐。
- 契约块(本仓
CLAUDE.md)
- producer 由「暂无」改为
openapi/control-plane-v1 + icd/control-plane-provisioning(主仓 registry 已声明本仓为 producer)。
- ⚠️ 顺手登记已存在的契约↔实现漂移(声明 producer 时正好碰到,不在本 PR reconcile,仅标注为 known-drift / follow-up,免得「契约块声明合规」却掩盖端点已偏):
- 审批端点形态:契约是单端点
POST /v1/tenants/{id}/approval(decideApproval,action: approve|reject,reject→deleted);实现是 /approve + /reject 两端点且 reject→REGISTERED。
/api 前缀约定:实现统一 /api/v1/...,契约是 /v1/...(server 注释「经网关路由暴露」,推定网关 strip /api,但契约/网关侧未写明——需补一条约定,否则消费方对不上)。
- CI 镜像(净新增,本仓无
.github)
- 新建
.github/workflows/*.yml:构建并推 ghcr.io/hashmatrixdata/control-plane:<semver>;制品仓凭据经 secret 注入、不入库(红线)。
起点(精确路径 + 真/stub/缺失)
- 缺失:
server.port/management.server.port、.github/ CI(确认本仓无 .github)。
- 现状:
application.yml 无端口;Dockerfile:26,29 EXPOSE/HEALTHCHECK=8080;docker-compose.local.yml:36 Keycloak 8081:8080(冲突源);CLAUDE.md 契约块 producer 写「暂无」。
预估 LOC
~90–150(多为 YAML/CI)。
测试
- 启动后 App 8081、管理 9081;
/actuator/health/readiness 绿。
- CI workflow 构建出镜像并推 ghcr(dry-run / tag 校验)。
- 本地 compose:Keycloak 8180、control-plane 8081 无端口冲突。
依赖
- Blocked by:无(与 WP1/WP2 并行)。
- Blocks:无。
可独立 ship
✅ 纯配置/文档/CI,与 WP1/WP2/WP3 功能解耦。
验收
目标
入口级交付收尾:端口规整到基线、刷新本仓契约块、CI 推镜像入 ghcr。三者皆低风险部署/元数据收尾,统一一项。
范围(文件清单)
application.yml:server.port: ${SERVER_PORT:8081}、management.server.port: ${MANAGEMENT_SERVER_PORT:9081}(现无server.port→ 默认 8080,错)。Dockerfile:EXPOSE、HEALTHCHECK由 8080 → 8081(liveness 探针走管理端口 9081 时一并改)。docker-compose.local.yml:Keycloak 映射由8081:8080改为8180:8080—— 现与本服务 App 8081 冲突;基线 Keycloak=8180。本地 profile 连接项随之对齐。CLAUDE.md)openapi/control-plane-v1+icd/control-plane-provisioning(主仓 registry 已声明本仓为 producer)。POST /v1/tenants/{id}/approval(decideApproval,action: approve|reject,reject→deleted);实现是/approve+/reject两端点且 reject→REGISTERED。/api前缀约定:实现统一/api/v1/...,契约是/v1/...(server 注释「经网关路由暴露」,推定网关 strip/api,但契约/网关侧未写明——需补一条约定,否则消费方对不上)。.github).github/workflows/*.yml:构建并推ghcr.io/hashmatrixdata/control-plane:<semver>;制品仓凭据经 secret 注入、不入库(红线)。起点(精确路径 + 真/stub/缺失)
server.port/management.server.port、.github/CI(确认本仓无.github)。application.yml无端口;Dockerfile:26,29EXPOSE/HEALTHCHECK=8080;docker-compose.local.yml:36Keycloak8081:8080(冲突源);CLAUDE.md契约块 producer 写「暂无」。预估 LOC
~90–150(多为 YAML/CI)。
测试
/actuator/health/readiness绿。依赖
可独立 ship
✅ 纯配置/文档/CI,与 WP1/WP2/WP3 功能解耦。
验收
ghcr.io/hashmatrixdata/control-plane:<semver>)。CLAUDE.md契约块 producer 更新。/apistrip 约定)——标注为 known-drift / follow-up,本 PR 不 reconcile。