Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
c639e0e
ci(dx): re-measure the type-check DEBT/TEST_DEBT ledger on every run …
claude Aug 6, 2026
b8433ca
ci(dx): 补两处台账 note 与死代码清理 —— 根条目会随 showcase 动,measureDebt 的 || 分支不可达
claude Aug 6, 2026
5747fe9
Merge remote-tracking branch 'origin/main' into claude/issue-5278-deb…
claude Aug 6, 2026
738ae3e
ci(dx): rest 的 TEST_DEBT 重测到 143 —— 记录 merge-commit 竞态,那正是闸门起作用的证据
claude Aug 6, 2026
dc06633
Merge remote-tracking branch 'origin/main' into claude/issue-5278-deb…
claude Aug 6, 2026
63ef4d7
Merge remote-tracking branch 'origin/main' into claude/issue-5278-deb…
claude Aug 6, 2026
26de40c
ci(dx): objectql 的 TEST_DEBT 校准到 335,并把合并队列的竞态写进不变式文档
claude Aug 6, 2026
17d4766
Merge remote-tracking branch 'origin/main' into claude/issue-5278-deb…
claude Aug 6, 2026
0d35a11
ci(dx): objectql 的 TEST_DEBT 校准到 339 —— +4 全在 #5861 新增的那一个文件里
claude Aug 6, 2026
e8db1a2
Merge remote-tracking branch 'origin/main' into claude/issue-5278-deb…
claude Aug 7, 2026
5bccbf1
ci(dx): 按裁决(option A)在合并树上全量重校准,三个热包记档 +10 余量
claude Aug 7, 2026
4d693f7
Merge remote-tracking branch 'origin/main' into claude/issue-5278-deb…
claude Aug 7, 2026
77c7c88
ci(dx): 删掉空 frontmatter changeset,改走 skip-changeset —— #5471 / PR #60…
claude Aug 7, 2026
e576141
ci(dx): 第二个合并窗口的再校准 —— service-storage 转记档余量,objectql 余量按新实测抬回 +10
claude Aug 7, 2026
b61540b
Merge branch 'main' into claude/issue-5278-debt-ledger-ratchet
os-zhuang Aug 7, 2026
34558c2
Merge remote-tracking branch 'origin/main' into claude/issue-5278-deb…
claude Aug 7, 2026
cc5c69f
ci(dx): 第三个合并窗口的再校准 —— @objectstack/mcp 转记档余量(#5278 option A 第五条)
claude Aug 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 40 additions & 1 deletion .github/workflows/lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -509,7 +509,10 @@ jobs:
# failure: every package either declares `typecheck` (run by the turbo
# step below) or carries a measured DEBT/EXEMPT entry in the script's
# ledger, reconciled in both directions so the ledger can only shrink.
# Reads package.json files only; no build, sub-second.
# Reads package.json files only; no build, sub-second. The other half of
# this gate — re-running tsc against each ledger number — needs the built
# dist/*.d.ts and therefore lives after the build step, near the bottom of
# this job ("Re-measure the type-check DEBT / TEST_DEBT ledger").
- name: Check every package is type-check covered or ledgered
run: pnpm check:type-check-coverage

Expand Down Expand Up @@ -720,6 +723,42 @@ jobs:
- name: Type check workspace packages
run: pnpm exec turbo run typecheck --filter='./packages/*' --filter='./packages/*/*' --filter='./apps/*'

# The MEASURED half of the coverage gate (#5278). The cheap structural
# check near the top of this job asserts that a package without a
# `typecheck` script carries a DEBT/TEST_DEBT entry with a positive number
# written down — and, until now, nothing more: `errors: 28` and
# `errors: 1` were equally acceptable to it, because the ledger was never
# re-measured. So a ledgered package's real error count could grow without
# bound while the gate reported success. It had: metadata-protocol
# recorded 28 and reported 63, service-analytics 3 -> 7, service-automation
# 2 -> 5, and the wholesale re-measure this step ships with found 17 of the
# 34 entries understated and not one overstated. A number that has drifted
# 2.25x no longer describes the debt it claims to freeze.
#
# Asymmetric, on purpose: a count ABOVE its recorded number fails, a count
# below prints an informational "can be lowered / graduation candidate"
# line and stays green. Fixing errors must not also require editing a
# bookkeeping number before CI will go green, or the ledger charges a toll
# on exactly the work it exists to encourage.
#
# Here rather than beside its structural half because it runs the real
# compiler over ~34 projects, and tsc resolves workspace imports through
# each dependency's built `dist/*.d.ts` — so it needs the build steps
# above, which this job already pays for. The build filter is widened to
# the nested package groups (packages/services/*, packages/drivers/*,
# packages/plugins/*, …) because most ledgered packages have no
# `typecheck` script and therefore never entered the turbo task graph that
# would otherwise have built their dependencies; it is a superset of what
# the steps above already built, so it is cache hits plus the remainder.
# Measured cost of the re-measure itself: ~4 min, sequential by design
# (parallel tsc processes trade wall clock for an OOM risk on a job that
# has just built the whole workspace).
- name: Build the ledgered packages' dependencies
run: pnpm exec turbo run build --filter='./packages/*' --filter='./packages/*/*'

- name: Re-measure the type-check DEBT / TEST_DEBT ledger
run: pnpm check:type-check-debt

- name: Type check example apps
run: pnpm --filter './examples/*' run typecheck

Expand Down
9 changes: 9 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,15 @@ workspace package declares a `typecheck` script or carries a measured DEBT/EXEMP
in `scripts/check-type-check-coverage.mjs`. New packages must arrive covered; a package
that graduates deletes its ledger entry in the same PR.

The ledger numbers are ratcheted too (`pnpm check:type-check-debt`, run in the same CI
job after its build step): every DEBT/TEST_DEBT count is re-run through `tsc --noEmit`,
and a count ABOVE its recorded number fails. Below is only an informational
"can be lowered" line — improvements never owe CI a bookkeeping edit. Before #5278 the
gate asserted only that *some* positive number was written down, so the real counts had
drifted up to 2.25x while it reported success. When a re-measure makes you raise an
entry, rewrite its `note` as well: the composition drifts too, and a note that still
names only the old errors reads as "nearly graduated" to the next author.

**Do not `exclude` `*.test.ts` / `*.spec.ts` from a package's `tsconfig.json`.** `tsc
--noEmit` reads that config, so an exclusion there hides the tests from the check the
`typecheck` script advertises — a green gate over source nothing read, which is the
Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@
"check:workflow-status-functions": "node scripts/check-workflow-status-functions.mjs --self-test && node scripts/check-workflow-status-functions.mjs",
"check:published-files": "node scripts/check-published-files.mjs --self-test && node scripts/check-published-files.mjs",
"check:type-check-coverage": "node scripts/check-type-check-coverage.mjs --self-test && node scripts/check-type-check-coverage.mjs",
"check:type-check-debt": "node scripts/check-type-check-coverage.mjs --self-test && node scripts/check-type-check-coverage.mjs --re-measure",
"check:driver-conformance": "node scripts/check-driver-conformance.mjs --self-test && node scripts/check-driver-conformance.mjs",
"check:engine-double-contract": "node scripts/check-engine-double-contract.mjs --self-test && node scripts/check-engine-double-contract.mjs",
"check:resume-authority-declared": "node scripts/check-resume-authority-declared.mjs --self-test && node scripts/check-resume-authority-declared.mjs",
Expand Down
Loading
Loading