Skip to content

Commit e2bfa6c

Browse files
os-zhuangclaude
andauthored
feat(devx): 根 dev 入口新增构建完整性前置 check:dev-prereqs —— 一个前置条件一句修法 (#5795) (#5863)
* feat(devx): 根 dev 入口新增构建完整性前置 check:dev-prereqs —— 一个前置条件一句修法 (#5795) `dev` / `dev:*` 此前唯一的前置是 `check:console-sha`,工作区未构建时直接 放行进 boot。#5726 记下了那个现场:一个未满足的前置条件被呈现成十几个互不 相关的问题,而唯一可执行的建议指向错误的修法(改 datasource 配置 / 设 OS_ALLOW_DRIVER_CONNECT_FAILURE=1),一次 30 秒的构建被包装成一场追查。 判据取「声明即强制」:凡工作区包的解析入口(`exports["."]`,否则 `main`) 落在 `dist/` 下,该文件就必须在盘上 —— 按自己的声明未构建的包,修法恰好 就是 `pnpm build`。成员名单读 pnpm-workspace.yaml 而非硬编码路径: `packages/drivers/*` 的内容跨分支不同,手写驱动路径会正好漏掉 #5726 真正 出事的那个包。67 个包受判,全部有 build 脚本(即 turbo 会构建),因此那句 修法对每个能被点名的包都成立。 结构性排除而非按名排除:`packages/console`(dist 由 build-console.sh 构建、 `turbo run build` 不管,故 `pnpm build` 不是它的修法)、`@objectstack/docs` (被 `pnpm build` 过滤掉)、examples(入口是 .ts 源文件)都不声明 dist 下的 入口,天然不受判。只探 JS 入口不探 .d.ts,`OS_SKIP_DTS=1` 的快构建仍绿。 陈旧(非缺失)明确不在判据内:比对 src/ 与 dist/ 的 mtime 会在每次 `git worktree add` 后误报 —— 那半边是 AGENTS.md §9 的常备处方。 排在 `check:console-sha` 之前:未构建的 worktree 里后者会打出 「Build it with: pnpm objectui:build」,对本成因是竞争性的错误修法。先跑本 门禁,开发者读到一个前置条件、一句修法就停下。`dev` 链直接用 node 调用 (约 0.05s),不走 `pnpm check:dev-prereqs`(pnpm 每跳约 0.7s);后者保留 仓内 `--self-test &&` 惯例形态供人工与将来非 dev 调用。 `--self-test` 七例把两个方向都钉死(#4690:只见过绿的门禁与什么都不匹配的 门禁无法区分),并钉死上述三类排除、嵌套成员 glob 展开,以及无法展开的 成员 pattern 必须响亮失败而不是静默少覆盖。 CI 零变化:未接入任何 workflow;`.github/` 无一处引用 `pnpm dev` / `dev:*` / `check:dev-prereqs`,showcase 冒烟走 `working-directory: examples/app-showcase`, 且 CI 一律先构建,该条件在 CI 不可能成立。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GX3sL71LFq8m2usg6VqTSE * fix(devx): 红色输出不再把 #5726 的下游症状说成必然 原措辞写「It fails at 'datasource: connect failed'」,像是任何缺失都会这样。 不成立:门禁在任一 dist 入口缺失时就会红,而只缺 `packages/lint/dist` 时 boot 可能根本不碰 datasource。把一个只在部分场景成立的症状许诺成普遍规律, 正是本 PR 要治的那种误导的缩小版。 改为归因而非许诺:「Where that led once it was chased (#5726)」。判定、点名与 那一句修法都不变;`--self-test` 里「红输出中恰好只有一条命令」的断言仍然绿。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GX3sL71LFq8m2usg6VqTSE * fix(devx): 绿灯不再声称「工作区没问题」,并把陈旧那半边的单号写进文件头 判据只管产物存在性,绿灯却写成 `✓ Workspace is built`。对**陈旧** dist 的场景 这是反向保证:开发者刚被告知工作区是好的,紧随其后的假漂移就更像真 bug —— 正是 #5726 警告过的「在正确的代码上改出真的 bug」,只是多了一句绿灯替它作证。 改为 `✓ N package build artifacts present (existence, not freshness)`,只说 verify 过的事。陈旧那半边已另立观察类单 #5864(含三条方向),文件头的非目标 一节现在指向它,而不是把这个缺口留成隐含知识。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GX3sL71LFq8m2usg6VqTSE --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent 111695a commit e2bfa6c

2 files changed

Lines changed: 399 additions & 4 deletions

File tree

package.json

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@
55
"description": "ObjectStack Protocol & Specification - Monorepo for TypeScript Interfaces, JSON Schemas, and Convention Configurations",
66
"scripts": {
77
"build": "turbo run build --filter=!@objectstack/docs",
8-
"dev": "pnpm check:console-sha && pnpm --filter @objectstack/example-showcase dev",
9-
"dev:showcase": "pnpm check:console-sha && pnpm --filter @objectstack/example-showcase dev",
10-
"dev:crm": "pnpm check:console-sha && pnpm --filter @objectstack/example-crm dev",
11-
"dev:todo": "pnpm check:console-sha && pnpm --filter @objectstack/example-todo dev",
8+
"dev": "node scripts/check-dev-prereqs.mjs && pnpm check:console-sha && pnpm --filter @objectstack/example-showcase dev",
9+
"dev:showcase": "node scripts/check-dev-prereqs.mjs && pnpm check:console-sha && pnpm --filter @objectstack/example-showcase dev",
10+
"dev:crm": "node scripts/check-dev-prereqs.mjs && pnpm check:console-sha && pnpm --filter @objectstack/example-crm dev",
11+
"dev:todo": "node scripts/check-dev-prereqs.mjs && pnpm check:console-sha && pnpm --filter @objectstack/example-todo dev",
1212
"spec:rebuild": "turbo run build --filter=...@objectstack/spec",
1313
"test": "turbo run test",
1414
"test:e2e": "turbo run test:e2e",
@@ -50,6 +50,7 @@
5050
"check:durability-log-level": "node scripts/check-durability-degradation-log-level.mjs --self-test && node scripts/check-durability-degradation-log-level.mjs",
5151
"check:startup-registry-verdict": "node scripts/check-startup-registry-verdict.mjs --self-test && node scripts/check-startup-registry-verdict.mjs",
5252
"check:console-sha": "node scripts/check-console-sha.mjs",
53+
"check:dev-prereqs": "node scripts/check-dev-prereqs.mjs --self-test && node scripts/check-dev-prereqs.mjs",
5354
"check:objectui-changeset": "node scripts/objectui-changeset-digest.mjs --self-test && node scripts/objectui-range.mjs --self-test",
5455
"check:objectui-pin-fresh": "node scripts/check-objectui-pin-fresh.mjs --self-test && node scripts/check-objectui-pin-fresh.mjs",
5556
"check:prerelease-pins": "node scripts/check-prerelease-pin-watch.mjs --self-test && node scripts/check-prerelease-pin-watch.mjs",

0 commit comments

Comments
 (0)