docs: require L1 HTTP fallback when HTTPS fails

This commit is contained in:
pikastech
2026-07-20 08:50:31 +02:00
parent 1f6fa6f441
commit 876c0544fc
3 changed files with 33 additions and 21 deletions
+15 -9
View File
@@ -48,37 +48,43 @@ description: >-
- 其他服务占用时,禁止停止、接管或复用其他服务;
- 确认空闲端口后修改本服务 owning YAML,再由 parser/CLI 读取新端口继续;
- 禁止用命令行覆盖、临时环境变量或隐藏 fallback 形成第二端口真相。
- 固定端口、bind/probe、固定 HTTPS origin、状态目录和服务组成必须由 YAML-first 配置解析;代码和命令行不得补隐式默认值。
- 固定端口、bind/probe、首选 HTTPS origin、固定公网 HTTP 降级入口、状态目录和服务组成必须由 YAML-first 配置解析;代码和命令行不得补隐式默认值。
- L1 API、Worker、Temporal 开发依赖和 Web 的启动、停止、重启、状态、日志必须由项目 CLI 管理;`npm run``bun run``vite` 或裸脚本只允许作为 CLI 的内部实现,不是用户操作入口。
- 通过项目 lifecycle 启动的 L1 服务在测试和验收后默认保持运行:
- 只有用户明确要求停止或清理时才执行 stop;
- 一次性 disposable smoke 可以按自身隔离合同清理,但不能替代可持续访问的 L1 服务;
- 任务结束前必须重新读取 lifecycle status,不能凭启动返回值推断服务仍在运行。
- CLI 显式使用项目 native `--over-api` transport,经 native API 调用 Worker。
- Web 使用 `$unidesk-webdev` `web-probe native-readiness` 从 owning YAML 固定 HTTPS origin 访问 native Web。
- Web 使用 `$unidesk-webdev`受控入口,从 owning YAML 当前选中的首选 HTTPS origin 或固定公网 HTTP 降级入口访问 native Web。
- 微服务项目只启动当前微服务的前端、API、Worker及必要依赖。
- 前端、API 和 Worker可以分别启动、查看日志、重启和停止。
- 所有 L1 API/Web 用户入口必须 owning YAML 声明的固定 HTTPS origin
- 所有 L1 API/Web 用户入口必须 owning YAML 声明和选择
- 固定 HTTPS origin 是首选入口;
- 共享 public-edge、TLS、DNS 或出网故障导致 HTTPS 不可用时,必须立即降级到 owning YAML 解析出的固定公网 HTTP IP 与 port,不能因公共面故障停止 L1 业务调试或验收;
- `0.0.0.0` 只表示进程 bind
- `127.0.0.1` 只用于本机 probe 或进程间代理;
- IP、port、bind/probe 地址和临时 URL 不得作为 L1 用户入口返回
- 固定 HTTPS origin 缺失时必须明确失败,不得回退到 IP、localhost、端口拼接或代码默认值
- 固定公网 HTTP 入口的 IP 与 port 必须由 owning YAML 显式声明或从其中的公网地址和服务固定端口确定,禁止随机端口、localhost、命令行拼接或代码默认值
- HTTP 降级不得关闭或绕过业务认证,不得新增第二 Caddy、FRP、代理或业务路径
- 降级后先验证公网 HTTP readiness,再通过同一 API、Worker、SSE 和页面业务路径继续原 L1 验收;仅探测到端口或 HTTP 200 不构成业务通过;
- 内部端口冲突时通过 owning YAML 退让到空闲端口,固定 HTTPS origin 保持不变。
- L1 使用共享 public-edge 时:
- 只允许修改本服务 owning YAML 的 `publicExposure` 与聚合 YAML 的 `configRef/path`
- 只允许执行 `platform-infra public-edge plan|status``apply --dry-run`
- 禁止执行、提示或恢复 `public-edge apply --confirm`、内部 `reconcile`、Caddyfile 写入或容器重建;
- 公网配置随正常 `master` merge 由唯一 PaC authority 自动收敛;
- 自动链未收敛时使用 `$unidesk-cicd` 只读归因,不由 L1 会话补写
- L1 验收命令必须实际从固定 HTTPS origin 打开页面和 API;本机 `127.0.0.1`/`localhost` 只可作为进程健康 probe,不构成 L1 证据。
- 自动链未收敛时使用 `$unidesk-cicd` 只读归因并登记独立公共面 issue,不由 L1 会话补写
- 公共面 issue 不得阻塞业务主线,确认固定公网 HTTP 降级入口可用后必须立即继续 L1;
- HTTPS 恢复后从正式 origin 复测并撤回 HTTP 降级状态。
- L1 验收命令必须实际从当前选中的公网 HTTPS 或固定 HTTP 入口打开页面和 API;本机 `127.0.0.1`/`localhost` 只可作为进程健康 probe,不构成 L1 证据。
- 涉及 L1 的任务在结束时必须报告公网入口:
- 报告 owning YAML 声明的固定 HTTP/HTTPS origin 和当前可用状态;
- 存在页面路径时同时报告可直接访问的完整 URL;
- 公网入口未就绪时明确报告 blocker,禁止用 localhost、IP、bind 地址或裸端口冒充公网入口。
- HTTPS 未就绪但固定公网 HTTP 已通过时,明确报告 `degraded`、公共面 issue 和固定 HTTP URL,并继续交付;
- 两种公网入口都不可用时才报告 L1 公网 blocker,禁止用 localhost、bind 地址、随机 IP 或随机端口冒充公网入口。
- 执行任何 L1 流程时必须扫描当前项目已声明的 L1:
- 发现历史 L1 尚未配置固定 HTTPS exposure 时,立即建立可追踪记录;
- 发现一例就完成该实例的 YAML-first exposure、受控部署和原入口验收;
- 当前实例通过后才继续原 L1 流程,禁止把已发现实例保留为历史遗留
- HTTPS 未收敛但固定公网 HTTP 降级入口已通过时,公共面问题独立跟踪,当前 L1 流程继续;禁止把公共面问题变成核心业务门禁
- HWLAB 的端口退让与公网验收细则以 `docs/reference/hwlab.md#workbench-浏览器回归专项` 为唯一权威,并由 `$unidesk-webdev` 执行。
- 适合前后端联调、异步作业、Workflow、网络接口和页面交互的快速开发。
+11 -8
View File
@@ -8,8 +8,9 @@ description: UniDesk Web 开发与受控浏览器验证技能。用户提到 Web
本技能是 UniDesk/HWLAB Web 开发和受控浏览器复测的唯一入口,并遵循 Skill(cli-spec)。需求真相源仍是 `project-management/PJ2026-01/specs/`;本技能只规定如何开发、采集、复现和验收。
- 当任务使用 `$unidesk-devlevel` 描述开发方式时:
- L1 使用 `native-readiness` 从 owning YAML 固定 HTTPS origin 验证 native Web
- `127.0.0.1``localhost`、IP、port 和临时 URL 只能用于本机进程 probe,不能作为 L1 浏览器入口或用户反馈 URL
- L1 首选使用 `native-readiness` 从 owning YAML 固定 HTTPS origin 验证 native Web
- HTTPS 因 public-edge、TLS、DNS 或出网故障不可用时,必须改用 owning YAML 解析出的固定公网 HTTP IP:port 继续受控浏览器验收
- `127.0.0.1``localhost`、随机 IP、随机 port 和临时 URL 只能用于本机进程 probe,不能作为 L1 浏览器入口或用户反馈 URL;
- 执行 L1 时发现历史实例没有 owning YAML 固定 HTTPS exposure,必须发现一例就登记、受控部署并验收一例,通过后再继续当前任务;
- L2 使用 development semantic origin
- L3 使用 production semantic origin
@@ -43,10 +44,11 @@ description: UniDesk Web 开发与受控浏览器验证技能。用户提到 Web
- 验收必须同时证明 warning 可见和核心动作可完成,禁止通过隐藏 warning、伪造 capability、放宽 session scope 或增加 fallback 获得通过。
- 共享 `public-edge` 出现不同任务反复覆盖同一 Caddy desired state 时:
- HTTPS 入口仍可用则直接继续用户交付,不因 fingerprint warning 阻塞业务;
- HTTPS 入口不可用且用户需要即时交付时,可临时交付 owning 配置声明的固定 HTTP port
- HTTPS 入口不可用时,必须临时交付 owning 配置声明的固定公网 HTTP IP:port,并继续当前 L1 业务验收;不得等待公共面 issue 回复或恢复
- 临时 HTTP 入口必须保持业务认证,不得改用随机端口、关闭认证或新增第二 Caddy/FRP;
- 立即登记公共入口故障,记录覆盖来源缺失、current/desired 漂移和受影响站点;
- 业务任务停止重复 `public-edge apply`,不得通过循环重放与其他开发任务争夺共享控制;
- 公共入口故障只作为非阻塞支线跟踪;固定 HTTP readiness 和原业务路径通过后,立即返回业务主线;
- 公共入口主责收口后,再从 owning YAML 的正式 HTTPS origin 复测并撤回临时入口。
- WebProbe 因内存、浏览器资源或受控启动策略阻断时:
- 只把浏览器证据标记为 blocked,不得把整个开发、诊断或验收任务一并停止;
@@ -110,16 +112,17 @@ description: UniDesk Web 开发与受控浏览器验证技能。用户提到 Web
- 历史页面按风险逐步迁移,新页面和重设计页面必须直接采用该合同。
- L1 公网调试入口交给用户前必须完成浏览器 readiness 验收:
- L1 服务的验收后保留与任务结束公网 URL 报告统一遵循 `$unidesk-devlevel`,本 skill 不重复定义生命周期;
- 使用 `bun scripts/cli.ts web-probe native-readiness --node <node> --lane <lane> --profile <profile>` 一次完成验收;
- 固定 HTTPS origin、path、DOM、交互和失败判据只从 owning YAML 读取,禁止用 `--url``--origin` 覆盖
- HTTPS 可用时使用 `bun scripts/cli.ts web-probe native-readiness --node <node> --lane <lane> --profile <profile>` 一次完成验收;
- HTTPS 不可用时使用项目 repo-owned typed command 选择 owning YAML 的固定公网 HTTP 降级入口;缺少该选择能力时先补 typed command,禁止用 `--url`、环境变量或临时脚本绕过
- 当前入口、path、DOM、交互和失败判据只从 owning YAML 读取,禁止用命令行覆盖;
- 监听成功、端口可达、HTTP 200、API smoke 或源码测试通过都不能单独判定 L1 可用;
- 必须通过 `web-probe` 从用户将使用的固定 HTTPS origin 打开页面,确认首屏挂载、稳定 DOM 和至少一个基础交互可完成;
- 必须通过 `web-probe` 从用户当前将使用的固定 HTTPS 或公网 HTTP 入口打开页面,确认首屏挂载、稳定 DOM 和至少一个基础交互可完成;
- 必须确认没有阻塞 bootstrap 的 `pageerror``console.error`、关键失败请求或持续主线程卡顿;
- `web-probe` 导航、DOM 读取、交互或截图超时,以及浏览器出现“页面无响应”,都直接判定 L1 未通过;
- L1 未通过时禁止向用户披露入口为“可用”,必须继续定位并修复,或明确报告 browser readiness blocker。
- Native 阶段采用短反馈循环:
- 修改后先执行最小语法检查和目标功能验证;
- 使用 `web-probe` 从 YAML 选择的固定 HTTPS origin 验证真实 DOM、交互、布局和截图;custom/local 仅记录为 preflight,不能宣称 L1 通过;
- 使用 `web-probe` 从 YAML 选择的固定 HTTPS 或公网 HTTP 入口验证真实 DOM、交互、布局和截图;custom/local 仅记录为 preflight,不能宣称 L1 通过;
- 每轮优先复用仍在运行的 HMR 前端和测试后端,不重复构建镜像或触发 CI/CD;
- 复杂数据、长文本、空态、错误态、折叠、滚动、缩放和目标桌面/移动视口必须在 native 阶段覆盖。
- 只有 native 功能与视觉验收收口后,才进入 CI/CD 发布阶段:
@@ -219,7 +222,7 @@ description: UniDesk Web 开发与受控浏览器验证技能。用户提到 Web
3. 独立启动 native 测试后端与 HMR 前端,记录端口、日志和停止入口。
4. 只用 `bun scripts/cli.ts web-probe ...` 受控入口完成 native 复现与迭代;白屏先查 console 和失败 network,再查 DOM 与截图;需要的新浏览器动作先补为 typed command。
5. Native 功能和视觉验收收口后,再通过正式 CI/CD 自动交付。
6. L1 固定 HTTPS 入口先完成浏览器 readiness 验收,再向用户披露域名;HTTP 200 或进程监听不能替代页面响应性、DOM 和交互证据。
6. L1 先从固定 HTTPS 入口验收;HTTPS 故障时立即切到 YAML 固定公网 HTTP IP:port 完成同等浏览器验收并继续,HTTP 200 或进程监听不能替代页面响应性、DOM 和交互证据。
7. 用同一业务入口完成部署态复测;需要关闭用户反馈/issue 时,记录真实入口证据、截图/trace/session 和失败或通过结论。
## 常用入口
+7 -4
View File
@@ -189,10 +189,13 @@ Workbench 浏览器回归需求以 UniDesk OA [PJ2026-010401 Web工作台](../..
- API、Worker、Web 的启动、状态和固定 HTTPS 入口继续由同一 YAML 与 `hwlab nodes native-development workbench` 解析;
- 禁止用命令行参数、临时环境变量或代码 fallback 形成第二端口真相;
- 端口退让后固定 HTTPS 域名保持不变,并从该域名执行 `web-probe native-readiness`,确认页面、DOM、交互和浏览器错误均通过后再向用户披露入口。
- L1 Native 固定 HTTPS 暴露
- 所有 L1 用户入口必须由 `nativeDevelopment.<application>.publicExposure` 声明固定 HTTPS origin
- IP、port、localhost 和 bind/probe 地址仅用于内部诊断,不得作为 L1 用户入口
- 执行 L1 时发现历史实例未声明固定 HTTPS exposure,必须逐例登记、受控部署和验收通过后再继续。
- L1 Native 公网暴露与降级
- `nativeDevelopment.<application>.publicExposure` 声明首选固定 HTTPS origin
- HTTPS 因 public-edge、TLS、DNS 或出网故障不可用时,必须降级到同一 owning YAML 解析出的固定公网 HTTP IP:port,并继续 L1
- 固定 HTTP 降级入口必须保持业务认证,禁止随机端口、localhost、临时 URL、第二代理或第二业务路径;
- 降级后先验证公网 readiness,再通过同一 Workbench API、Worker、Kafka SSE 与 Web 路径完成原验收;端口监听或 HTTP 200 不能替代业务验收;
- HTTPS 故障独立登记为非阻塞公共面 issue,不得等待回复或恢复后才继续业务;
- 公共面恢复后从固定 HTTPS origin 复测,并撤回 HTTP 降级状态。
- Workbench L1 API 与 Kafka SSE 验收:
- API 进程存活入口固定为 `/health/live`