Repository navigation
docs(changeset): correct two pending changesets whose present-tense claims a later PR falsified - #8994
Conversation
`.changeset/6794-notify-submitter-default.md` described the `escalation.enabled`
spec bump as *future* and called objectui#6620 an on-hold card. Installed
`@objectstack/spec` is 17.4.0 and `ApprovalEscalationSchema.safeParse({
timeoutHours: 24 })` returns `enabled: true`; PR objectui#8615 (b1a14f2) flipped
the table's declared default from `'false'` to `'true'` and closed objectui#6620.
The bump is past. The clause "installed spec and table agree on it today" was
re-measured and is still TRUE, so it is kept verbatim.
`.changeset/core-datascope-field-and-comparison-guards-7751.md` stated in the
present tense that `@object-ui/permissions`' `evaluateCondition` still returns
`true` for `{ field: 'toString', operator: 'neq' }`. PR objectui#8669 (2609812)
ported the three-case `readField` into that evaluator, so the read is refused and
the condition denies.
A changeset body publishes verbatim into the CHANGELOG, so both sentences would
have shipped false. Prose only: neither bump level, frontmatter nor any other
changeset is touched.
Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FhBNJcLRZLe8M87VcUgpKr
Armed — SQUASH, in the queue, probe written BEFORE the merge
CI on The probeBaselines on
⭐ A/B and C/D are two pairs, each the same claim read from both sides. On a card whose entire subject is a false sentence publishing verbatim, a one-sided leg would be the wrong instrument: appending a correction while leaving the falsehood standing beside it is precisely the failure mode, and only the pair distinguishes a replacement from an addition. Control: both files are present in the listing (2 of 2) at baseline, so each zero above is a reading of a file that exists, ⛔ not of a path that does not. ⇒ this card closes on the merge ( Generated by Claude Code |
Fixes #8617
Clause-②: noTwo unreleased changesets each carried a present-tense claim that a later, separate PR has since falsified. A changeset body publishes verbatim into the CHANGELOG, so both sentences would have shipped as published false statements. This PR corrects exactly those sentences and nothing else.
1. The window — re-measured by this seat, ⛔ no reading carried from the card
Triage's own correction (comment 5619376700) closes with 取卡时请自己重跑那条
git ls-tree,⛔ 不要沿用本卡任何一次的读数. So it was re-run on a freshly fetchedorigin/main:origin/maintip4d65991c5766b77bbc95b7b1ea93fb7154a8c7c7, commit date 2026-09-10T15:31:10+00:00.changeset/*.md+config.json); triage measured 1327 on 2026-09-10T13:11Z.changeset/6794-notify-submitter-default.md.changeset/core-datascope-field-and-comparison-guards-7751.mdThe control moved 1327 → 1338 across those ~2h45m, so the directory is genuinely being read and the two hits are readings, not a stuck listing. The window is open: neither changeset has been consumed by a release, so both sentences are still correctable.
Neither file had been touched since it was written —
git logon the two paths returns their original landing commits (21993e4a9#6831 and5aed9e4eb#8048) and nothing since.2. Instance one —
.changeset/6794-notify-submitter-default.mdBefore (lines 30-33, verbatim):
After:
The measurements that prove it was false
a. The spec bump is past, not future. Run against the installed package, through the
@objectstack/spec/automationsubpath the card names:ApprovalEscalationSchema.safeParse({ timeoutHours: 24 })yieldsenabled: trueon the version this tree actually installs (17.4.0 — the card was filed against 17.3.0; it has bumped again since). ⇒ "flips on a future spec bump" is false.b. The table has already been flipped to match.
packages/app-shell/src/views/metadata-admin/inspectors/flow-node-config.tsnow declaresdefaultValue: 'true'forescalation.enabled, and the commit that changed it is inmain:c.
objectui#6620is not on hold. It is closed as completed, 2026-09-08T17:09:45Z, closed by PR #8615. ⇒ "on-hold card" is false, and it is false by the same event.d. The tripwire clause. With spec
trueand table'true', generalising the reconciliation assertion across the block would now simply pass — it would arm nothing. Present tense "would arm" is false today; changed to "would have armed", which is what was true when the sentence was written.⭐ What was NOT edited, because it measures TRUE
This is the clause the card lists as false, and it is not. Measured: spec returns
enabled: true(a), table declares'true'(b) — they agree. What actually happened is that the pair went false when the spec bumped and true again when #8615 flipped the table, so the card's account of it (written before #8615 was read into the picture) does not hold. Per the fence — a sentence that is still true is reported, not edited — the clause is kept verbatim; only the surrounding false tense is repaired around it.3. Instance two —
.changeset/core-datascope-field-and-comparison-guards-7751.mdBefore (line 11, verbatim):
After:
The measurements that prove it was false
a. PR #8669 is in
main.b. The sibling no longer reads with
hasOwnPropertyalone.packages/permissions/src/evaluator.tsnow carries the identical three-case read, and its own header records it as "a port of the shape objectui#7751 landed inreadFieldinpackages/core/src/data-scope/DataScopeManager.ts":evaluateConditionturnsreadable: falseintoreturn false. ⇒{ field: 'toString', operator: 'neq' }denies today; "still returnstrue" is false. That also falsifies the two clauses in front of it in the same sentence — core's third case is no longer stricter than the sibling, andhasOwnPropertyalone is no longer the sibling's shape. All three were falsified by the one PR, so all three are put in the past tense together.c. Runtime confirmation, not only a source read — the pin that PR #8669 shipped:
It asserts
admits('toString', 'neq', 'x', record) === falsefor every unlisted prototype member.What was NOT edited in this file, because it measures TRUE
typeof === 'number'on both sides" — true:gt/gte/lt/lteinevaluator.tsstill testtypeof value === 'number' && typeof condition.value === 'number'.containsvalue) — true:typeof condition.value === 'string'.ne/ninhere versusneq/not_inin the sibling, and the sibling'sis_null/is_not_nullwhich this evaluator does not implement, remain exactly as they were" — true:DataScopeManagerstill spellsne/ninwith no null arms;evaluator.tsstill spellsneq/not_in/is_null/is_not_null. PR fix(permissions): evaluateCondition reads a condition's field in three cases, not two #8669 changed the field read, not the spellings.4. Scope
declared at base: @object-ui/app-shell: patch/declares now: @object-ui/app-shell: patch, and@object-ui/core: minor/@object-ui/core: minor.content/docs/releases/**untouched. ⛔ No release note written or re-framed.5. Checks — exit codes captured before any pipe
node scripts/check-changeset-presence.mjs✅ No source or published contract of a released package changed in this range, so no changeset is owed.(2 files changed, 0 published source)node scripts/check-changeset-fixed.mjs✅ All workspace packages are in the changeset fixed group.node scripts/check-changeset-no-major.mjsnode scripts/check-changeset-overwrite.mjsnode scripts/check-control-bytes.mjs✅ check-control-bytes: OK (scanned 7200 tracked text file(s); skipped 85 binary).node scripts/check-new-cross-file-line-citations.mjsVERDICT new-cross-file-line-citations: 0 new citation(s), enforcement report-only -> exit 0pnpm lint:root✖ 32 problems (0 errors, 32 warnings)— all pre-existing, none in this diffpnpm exec vitest run packages/permissions/src/__tests__/evaluator.prototype-guard-8044.test.tsTest Files 1 passed (1) / Tests 34 passed (34)— evidence for §3, not a gate this diff owesEvery
.changeset/**-triggered workflow (changeset-guard.yml,changeset-presence.yml) runs exactly the scripts above; all four ran locally green. ⛔ Nothing was skipped, disabled or quarantined.6. Fork not resolved
.changeset/6794-notify-submitter-default.mdline 9 reads "the installed@objectstack/spec(17.2.0) defaults the key totrue". Installed is now 17.4.0, so the parenthetical is stale — but the claim it carries (notifySubmitterdefaults totrue) is still true on 17.4.0, and the version reads as the provenance pin of the original measurement rather than a claim about today. Left unedited on the narrower reading; flagged so the release editor can settle it.Generated by Claude Code