Skip to content

test(spec): tombstoned-row-status floor at two thirds of the measured population (48 → 32) - #26575

Merged
objectstack-fleet[bot] merged 1 commit into
mainfrom
claude/project-thread-vqqg6j
Oct 27, 2026
Merged

objectstack-fleet[bot] merged 1 commit into
mainfrom
claude/project-thread-vqqg6j

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Requested by Yibo Wang · project thread
Fixes #26541

Clause-②: no
Metadata-protocol: none

维护者速读

  • 改了什么:tombstoned-row-status 活性测试的防空底线从 40 降到 32,只改这一个测试文件。
  • 为什么改:底线等于实测墓碑数,按 ADR-0087 正常退役一个墓碑键就会误红;今天实测已是 48,底线取约三分之二。
  • 风险与回滚:只放宽一个下限,主断言(墓碑键必须 dead、必须 never 类型)不动;回滚即还原这一行。
  • 先看:packages/spec/scripts/liveness/tombstoned-row-status.test.ts 的 TOMBSTONE_FLOOR 一行。
  • 两分钟验证:pnpm --filter @objectstack/spec exec vitest run scripts/liveness/tombstoned-row-status.test.ts,预期 3 个用例全绿。
  • 需要你做的:无,席位落地。

What changes

TOMBSTONE_FLOOR in packages/spec/scripts/liveness/tombstoned-row-status.test.ts moves from 40 to 32, with a comment naming the measured value and the date. This follows the parent #26444 rule (about two thirds of the measured population, rounded down; precedent vite-dts-wiring-ratchet, measured 22, floor 15). The stale inline comment "40 was the measured population" is reworded. The file header's history paragraph (40 at pin time) is left as the historical record it is.

Measured population on base 1c632311: 48 top-level [REMOVED] keys, all 48 dead. The floor is floor(48 × 2/3) = 32. Margin: 16 tombstones (one third) can be retired before the floor is reached.

No changeset: the file lives under packages/spec/scripts/, which is not in @objectstack/spec's files[] (dist, json-schema, liveness, prompts, src/**/*.zod.ts, …), so nothing publishes. Labelled skip-changeset.

Tests

  • pnpm exec vitest run scripts/liveness/ in packages/spec on the change: Test Files 12 passed (12), Tests 358 passed (358).

Acceptance notes

Non-vacuity kept. Two one-off mutations of collectTombstones()'s return out; on the committed fix, each restored with git checkout HEAD -- and proved restored by an empty git diff HEAD (no test file left behind):

Mutation legs
Leg Mutation Result
population emptied return []; exit 1, AssertionError: expected 0 to be greater than or equal to 32, Tests 1 failed / 2 passed
one tombstone dropped return out.slice(1); (47) exit 0, Tests 3 passed

Verification

Local derived gate subset (node scripts/pm/dispatch-gates.mjs --commands) is reported in the os-dev report comment on #26541; every CI family reads from this PR's check-runs.

Human Minimum

  • 1. Schemas start as Zod; packages/spec holds no runtime logic.
  • 2. Every name I added uses the casing for its kind.
  • 3. No formatter ran; pnpm lint passes.
  • 4. One issue, one branch off an up-to-date main, one pull request.
  • 5. A change that publishes carries a changeset, and both declaration lines are filled in here and in the changeset.
  • 6. packages/spec touched: its generated artifacts are regenerated and committed.
  • 7. No hand edits to content/docs/references/, packages/*/CHANGELOG.md or content/docs/releases/.
  • 8. Title, body and comments are in English.
  • The Before Submitting list in CONTRIBUTING.md is done.

🤖 Generated with Claude Code

https://claude.ai/code/session_01WGufzf9arQbsfoQ2s2hFtP


Generated by Claude Code

… population (48 → 32)

Retiring one tombstoned key no longer reds the liveness non-vacuity check;
emptying the population still does.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WGufzf9arQbsfoQ2s2hFtP
@objectstack-fleet objectstack-fleet Bot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Oct 27, 2026
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

Nothing in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 0 changed package(s)), so this run has no opinion about the docs.

What this run could not see

Coarse fallback — 0 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): node scripts/docs-audit/affected-docs.mjs --json b53d9f32f7e623012f6967eb15aef0fdc1148a24 → packageMentionDocs.

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

席位核对 · ACCEPT · domain:spec seat 1 (#6017) · session session_01WGufzfhobWEgUUrjz4rrbh · 2026-10-27T09:10Z

Head 2a60259c793b660ff543c79c1c52b21336077f49. Card #26541 (part of #26444), claim 6437352104, dev report 6437913572.

  • Contract review: not owed. The diff is one test file under packages/spec/scripts/, outside packages/spec/src/** and outside the package's files[]. It moves no published schema and no governed text. This seat read it in full.
  • What it does: TOMBSTONE_FLOOR goes from 40 to 32, which is floor(48 × 2/3) on the measured population of 48 at base 1c632311. That leaves a margin of 16 tombstones. The main assertions (every tombstoned key is dead) are unchanged. The non-vacuity proof is in the body: an emptied population reds at 0 >= 32.
  • Shape: Fixes #26541, 1 file, +6 / -3, skip-changeset (nothing publishes). Clause-②: no and Metadata-protocol: none on the body and the claim. check-governed-merges --pr 26575: NOT governed, 9 changed lines.
  • Gates: check-runs on the head are 40 success, 13 skipped and 0 red. mergeable_state is clean.
  • Landing: Tier S. pr_ready + automerge_enable in this act.

@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review October 27, 2026 09:11
@objectstack-fleet
objectstack-fleet Bot enabled auto-merge October 27, 2026 09:11
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Oct 27, 2026
Merged via the queue into main with commit d399b9f Oct 27, 2026
54 checks passed
@objectstack-fleet
objectstack-fleet Bot deleted the claude/project-thread-vqqg6j branch October 27, 2026 09:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/xs skip-changeset PR has no user-facing published change; bypasses the changeset gate tests tooling

Projects

None yet

2 participants