Repository navigation
Commit 247a088
test(dogfood): pin the route-generation tombstones on every door, tsc included (#26887)
<!-- claude-projects-attribution: {"github_login":"os-warren"} -->
_Requested by **Warren** · [project
thread](https://claude.ai/code/project/chan_01U5RdnAAmkSQmZbqh6FtqZ8?thread=cmsg_01U5RdnAAmkSQmZbqh6FtqZ8VsCYkn9rw8Z1i5vq5MHxL4)_
Fixes #26572 (slice 3, the last, item: rest-route-generation-tombstones;
slices 1 and 2 landed as #26787 and #26829)
Clause-②: no
Metadata-protocol: none
## 维护者速读
- 改了什么:给 api-backend 清单最后一个 PARTIAL 条目 rest-route-generation-tombstones
补钉子:四个已退役的 routes.* 键在真实 RestServer
构造器和插件启动路径上都被拒绝,退役提示指向的替代接口确实存在,TypeScript 编写这些键会在 tsc 报错,空的 routes
块仍可构造;并更新该条目的 automated.ref、revision 和 history。
- 为什么改:18.2.0 Tier 1 扫描把这条判为 PARTIAL(每个键只测一个值、提示的替代接口和 tsc 报错都无钉子);补上后
#26572 的 11 个条目全部在判据层有钉子。
- 风险与回滚:只加一个测试文件和清单文本,不改任何产品代码;回滚就是 revert 本 PR。
-
先看:`packages/qa/dogfood/test/rest-route-generation-tombstones.test.ts`(构造器、插件路径、tsc
子进程),`docs/qa/platform-checklist/areas/api-backend.json`。
- 两分钟验证:`pnpm --filter @objectstack/dogfood exec vitest run
--maxWorkers=2 test/rest-route-generation-tombstones.test.ts`,预期 10
个用例全绿。
- 需要你做的:无,席位落地。
## What changes
`api-backend.rest-route-generation-tombstones` was the last of the 11
items the release-18.2.0 Tier 1 sweep (#26468) scored PARTIAL on this
card. It now carries a pin at each clause's oracle layer. The new
`rest-route-generation-tombstones.test.ts` boots no stack: every
clause's oracle is `test` or `build`, and the item prescribes a
constructed `RestServer`.
| Clause | What the pin asserts |
|---|---|
| acceptance[0] | `includeObjects`, `excludeObjects`, `nameTransform` at
both former values (`'none'` and `'plural'`), and `overrides` each
refuse at construction on a real `RestServer`. Each refusal names
`RouteGenerationConfigSchema` and "`` `routes.KEY` was removed in
@objectstack/spec 17 ``". |
| acceptance[1] / negative[0] | The same five refusals happen through
`createRestApiPlugin(...).start()`, beside a control that boots. |
| acceptance[2] | Each prescription names a surface that exists.
`enable.apiEnabled` / `enable.apiMethods` are declared on the strict
`ObjectCapabilities`, and an undeclared key there is refused.
`crud.dataPrefix` moves a real server's data routes. The data routes
take `:object` as the path segment. `object_operation` parses as a
declarative endpoint type. The 404/405 enforcement itself is
`second-object-exposure.dogfood.test.ts`'s, over HTTP. |
| acceptance[3] | Each key, authored as a `RestServerConfig` in a
scratch TypeScript file, fails `tsc` with an error on the key's own line
naming `[REMOVED] Key retired`. An empty block beside it type-checks
clean. |
| acceptance[4] | `routes: {}` constructs and normalizes to `{}`, and an
unknown key inside `routes` is stripped rather than refused. |
The item's `automated.ref` names the pin and what it asserts,
`automated.kind` is `dogfood`, `revision` is bumped and a `history` row
cites #26572. No clause text changed. No product code changed.
## Why
The card's ruled scope (triage 6437722483) is to pin the 11 api-backend
Tier 1 clauses the 18.2.0 sweep scored PARTIAL at the layer their oracle
names. The pins go in `packages/qa/dogfood/**`, with the checklist item
revisions bumped, in slices of about five items, and with no new CI
lane. Slices 1 (#26787) and 2 (#26829) pinned ten items, and this slice
pins the eleventh, so no item is left and this PR closes the card. What
stays unpinned is what the items themselves already record as having no
stock door: the activation door's metadata-plane 503 and its 501/503
durability arms (`api-backend.action-activation-door-contract`
knownGaps), and the procedural scoring clauses the card excludes.
## Tests
The touched test file on head bbe0f12, after merging `main` (1a8b7eb)
and rebuilding the dogfood closure, under the verify lock:
```
pnpm --filter @objectstack/dogfood exec vitest run --maxWorkers=2 test/rest-route-generation-tombstones.test.ts
Test Files 1 passed (1)
Tests 10 passed (10)
```
Every expectation was first measured against the live answer (the
refusal texts, a `tsc` run over an authored key), then checked against
the clause text before it was written down. No ablation was run: the
diff changes no tested behaviour.
## Acceptance notes
- The tsc leg writes its scratch files to a temporary directory with
`@objectstack/spec` linked into a local `node_modules`, the pattern
`declarative-endpoint-authoring-refusal.dogfood.test.ts` uses for the
CLI. It runs the dogfood package's own `typescript` bin, so nothing is
written into the repository tree.
- `RestServer` and `createRestApiPlugin` come through
`@objectstack/runtime`'s re-export, as in slice 2. `@objectstack/rest`
is not a dogfood dependency, and adding one would move `pnpm-lock.yaml`.
- The file is named `*.test.ts`, not `*.dogfood.test.ts`, because it
boots no app. It runs in the `isolated` project like the package's other
non-boot conformance tests.
## Verification
<details><summary>Gates (dispatch-gates --commands, reconciled with
--ran)</summary>
- `node scripts/check-platform-checklist.mjs`: exit 0, `OK — 16 areas,
329 items (324 active, 1 planned)`.
- 55 derived commands on merge head a4e98b2 (main at 95f818d merged)
after a closure rebuild: all 55 exit 0. On the first pass, `pnpm
--filter @objectstack/dogfood run typecheck` caught a TS2339 in the new
pin (`.then` on `start()`'s `void | Promise<void>`). It was fixed in
a4e98b2, and the second pass was all green.
- `pnpm --filter @objectstack/dogfood run typecheck`: exit 0. eslint
over the touched file: exit 0.
- `dispatch-gates --ran`: 55 derived families accounted for, 55 run, 0
NOT-MEASURED, 0 unrun.
- After merging the next `main` (1a8b7eb), the derived list was
unchanged. The closure was rebuilt, and `check-platform-checklist`, the
dogfood typecheck and the test file were re-run on bbe0f12, all exit 0.
</details>
No changeset: `@objectstack/dogfood` is private and `docs/qa/**` ships
in no package, so this PR carries `skip-changeset`.
## Human Minimum
- [x] 1. Schemas start as Zod; `packages/spec` holds no runtime logic.
(not touched)
- [x] 2. Every name I added uses the casing for its kind.
- [x] 3. No formatter ran; `pnpm lint` passes. (eslint over the touched
file)
- [x] 4. One issue, one branch off an up-to-date `main`, one pull
request.
- [x] 5. A change that publishes carries a changeset. (nothing
publishes)
- [x] 6. `packages/spec` touched: n/a.
- [x] 7. No hand edits to `content/docs/references/`,
`packages/*/CHANGELOG.md` or `content/docs/releases/`.
- [x] 8. Title, body and comments are in English.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_01JQwxbWUpGqdpDRiD79LqXV
---
_Generated by [Claude
Code](https://claude.ai/code/session_01JQwxbWUpGqdpDRiD79LqXV)_
---------
Co-authored-by: Claude <noreply@anthropic.com>1 parent cea0871 commit 247a088
2 files changed
Lines changed: 247 additions & 3 deletions
File tree
- docs/qa/platform-checklist/areas
- packages/qa/dogfood/test
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2789 | 2789 | | |
2790 | 2790 | | |
2791 | 2791 | | |
2792 | | - | |
| 2792 | + | |
2793 | 2793 | | |
2794 | 2794 | | |
2795 | 2795 | | |
| |||
2861 | 2861 | | |
2862 | 2862 | | |
2863 | 2863 | | |
2864 | | - | |
2865 | | - | |
| 2864 | + | |
| 2865 | + | |
2866 | 2866 | | |
2867 | 2867 | | |
2868 | 2868 | | |
| |||
2890 | 2890 | | |
2891 | 2891 | | |
2892 | 2892 | | |
| 2893 | + | |
| 2894 | + | |
| 2895 | + | |
| 2896 | + | |
| 2897 | + | |
| 2898 | + | |
2893 | 2899 | | |
2894 | 2900 | | |
2895 | 2901 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
0 commit comments