Repository navigation
docs(plugin-spec): Plugin Testing teaches bootStack and the in-process handle of @objectstack/verify, not the non-existent @objectstack/testing (#15952) - #22910
Conversation
…jectstack/verify; plugin-spec docs teach bootStack The blank template gains a `test` script, a vitest config and one starter test (`note.test.ts`) that boots the scaffolded app's own stack with `bootStack` and asserts one business fact through the in-process handle. The Plugin Testing section of plugin-spec.mdx is rewritten around what ships, and the ghost `@objectstack/testing` package is gone from it. Claude-Session: https://claude.ai/code/session_01VoSxBQujKLZKPwK2u5ehQ6 Co-authored-by: Claude <noreply@anthropic.com>
…ne's per-item registry log Claude-Session: https://claude.ai/code/session_01VoSxBQujKLZKPwK2u5ehQ6 Co-authored-by: Claude <noreply@anthropic.com>
…orkflow's script contract Claude-Session: https://claude.ai/code/session_01VoSxBQujKLZKPwK2u5ehQ6 Co-authored-by: Claude <noreply@anthropic.com>
📓 Docs Drift Check
What this run could not see
Coarse fallback — 12 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): |
…his PR; it lands docs-only The scaffold half (the blank template's test script, vitest config and starter test, create-objectstack's template exclude, the Scaffold E2E test step and the changeset) is held on claude/issue-15952-scaffold-held at 812d8db: `npm install` of a vitest-4 project crashes on npm 10 upstream, and two repo gates count the template payload test as the scaffolder's own suite. This branch keeps the plugin-spec.mdx rewrite only. Claude-Session: https://claude.ai/code/session_01VoSxBQujKLZKPwK2u5ehQ6 Co-authored-by: Claude <noreply@anthropic.com>
… drop the starter-test clause The blank starter's note.test.ts is held off this PR, so the sentence naming it described nothing a scaffolded project carries today. Claude-Session: https://claude.ai/code/session_01VoSxBQujKLZKPwK2u5ehQ6 Co-authored-by: Claude <noreply@anthropic.com>
⛔ merge queue 构建失败 — 先分诊,再决定要不要重排队列构建 38191350707 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集), 分类: 失败的 job(日志抽取,best effort):
跨 PR 相同签名(24h,按失败测试文件聚合):
历史信号:
分诊清单:
Generated by Claude Code · merge-queue-triage workflow (#4859) |
Queue ejection triage: re-queued once. A load-sensitive shard-timing measurement, not a test, and not this PR's
Signature (queue run 38191350707, merge group on base
The three facts for one re-queue:
Action: auto-merge is re-enabled once, on the same head The underlying cause is not this PR's. Generated by Claude Code |
⛔ merge queue 构建失败 — 先分诊,再决定要不要重排队列构建 38192817645 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集), 分类: 失败的 job(日志抽取,best effort):
跨 PR 相同签名(24h,按失败测试文件聚合):
历史信号:
分诊清单:
Generated by Claude Code · merge-queue-triage workflow (#4859) |
Second queue ejection, same signature: held out of the queue until #22917
Generated by Claude Code |
Hold lifted: back in the merge queue on the same head
|
Part of #15952
Clause-②: no
Docs-only. This PR lands the docs half of #15952; the card stays open for the scaffold half, which is held (see below).
What changed
content/docs/protocol/kernel/plugin-spec.mdx, "Plugin Testing" is the one file in the diff (git diff --stat origin/main...HEAD: 1 file, +84 / -62).@objectstack/testing/createTestContext/createTestEnvironmentmentions are gone.scripts/docs-audit/handwritten-docs.json, and no generator writes it.bootStack, the in-process handle (a method table), refusal assertions oncodeand status, a runtime plugin booted throughextraPlugins, andbootStackOnce.@objectstack/verify@17.7.0and onmain. Each was read frompackages/verify/src/handle.tsand from the 17.7.0 tarball's README and.d.ts.No changeset: nothing here publishes (
skip-changeset).The scaffold half is held
Branch
claude/issue-15952-scaffold-held, at812d8dbf94, keeps the full implementation. It has no PR of its own. It contains:testscript,@objectstack/verify+vitestdevDependencies,vitest.config.tsand the one starter testnote.test.ts;create-objectstack's template exclude;teststep;create-objectstackminor changeset.On that head a freshly scaffolded app runs
pnpm testgreen. The half is held, on the seat's order on the card, for two measured reasons:npm installof a scaffold that declaresvitest ^4.0.0(SCAFFOLD_VITEST_RANGE:objectstack init -t plugin,objectstack create plugin) crashes with "Cannot read properties of null (reading 'edgesOut')" #22912:npm installof a vitest-4 project crashes on npm 10 (upstream). Node 22's bundled npm 10.9.x fails withTypeError: Cannot read properties of null (reading 'edgesOut'). The one-line repro is a manifest holding only"vitest": "^4.0.0". Shipping the starter's vitest devDependency would breaknpm installfor the blank starter on Node 22. The half resumes when finding: on npm 10 (Node 22's bundled major),npm installof a scaffold that declaresvitest ^4.0.0(SCAFFOLD_VITEST_RANGE:objectstack init -t plugin,objectstack create plugin) crashes with "Cannot read properties of null (reading 'edgesOut')" #22912's one-line manifest installs on npm 10.plugin-spec.mdxstops promising the non-existent@objectstack/testingand points at@objectstack/verify; thecreate-objectstackblank template ships a test story (epic hotcrm#1579, step 5b) #15952: two required repo gates count the template payload test ascreate-objectstack's own suite. The gates arecheck-registry-log-declaredandcheck:test-source-alias. Both walk every*.test.tsunder a package without the tsconfigexcludepayload boundary thatcheck-undeclared-dep-importsalready reads, and both exited 1 at812d8dbf94. That question is deferred with the held half.Verification (head
dfead30310)git grep -n "objectstack/testing" -- content/ skills/ packages/finds 0 hits (exit 1). The three-symbol expressionobjectstack/testing\|createTestContext\|createTestEnvironmentalso finds 0 hits (exit 1). Before, at9fdb12752c, there were 7 hits, all in this page.dispatch-gates --commandswas derived with no paths atdfead30310: 40 families. All 40 were run, pluscheck-registry-log-declaredandcheck:test-source-alias, the two that were red with the payload test, and every one exited 0.--ranreconciles 40 run, 0 NOT-MEASURED, 0 UNRUN.check:doc-anchorsresolves every internal#fragmentlink, including the section's new#runtime-contractlink.Acceptance notes
LiteKerneltest (skills/objectstack-platform/references/operations.md, andreferences/plugin-development.mdunder "Testing Plugins"). None mentions@objectstack/testing, so the acceptance grep is clean. Pointing them atbootStackis a governed (Tier H)skills/**edit.Generated by Claude Code