Commit 52db1d1
* docs(spec): re-derive the ttl.onlyWhen x archive refusal's stated reason against the post-#10347 Archiver (#10526)
The refine's rationale comment and its author-facing message both justified
the refusal with a runtime fact that #10347 (PR #10541) retired: "the ttl
sweep never runs ... the Archiver moves rows by age alone". Re-derived
against the merged Archiver on this base:
- `reapObject` still returns into `archiveObject` before the ttl reap branch
(lifecycle-service.ts), so the ttl sweep genuinely never runs under
`archive` — that half stands.
- `archiveObject` now selects candidates by the declared ttl cutoff
(`dueField = lc.ttl ? lc.ttl.field : 'created_at'`), so "moves rows by age
alone" is false whenever `ttl` is declared — that half is replaced.
- Its candidate read is `where: { [dueField]: { $lt: cutoff } }` and nothing
else: the WINDOW carries over to the Archiver, the `onlyWhen` FILTER does
not. That is the reason today, and the refusal stands on it.
Text only: the refusal itself, and every accepted/refused shape, is
unchanged (piece 2 of #10526 — whether the refusal should survive at all —
is explicitly out of scope and untouched).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01B4h3medzvhB9rpfoja9jcw
* docs(spec): state the enforced verb scope in the enable.files / enable.feeds describe strings (#10336)
Both `.describe()` strings said the flag rejects *creation*. Since #10170
(PR #10332) `plugin-audit` registers each capability gate on `beforeUpdate`
as well as `beforeInsert` (audit-writers.ts), so both refuse any write that
makes a row TARGET the walled object — a create and an update that re-points
a `sys_attachment` / re-threads a `sys_comment` alike, 403 FILES_DISABLED /
FEEDS_DISABLED. The strings now say that, which is what the docblocks
directly above them already said.
These strings are not inert prose: `.describe()` reaches the generated schema
output and the authoring surfaces built on it, so an author (or an LLM
authoring metadata) reading "otherwise creation is rejected" would conclude a
re-point is outside the flag's reach. It is not.
`enable.activities` is genuinely a mirror-on-write switch and is untouched.
Text only: no default, type, or key changes.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01B4h3medzvhB9rpfoja9jcw
* docs(spec): drop the same retired "archive acts on age alone" claim from ttl.onlyWhen's own describe string (#10526)
Bounded in-place extension of this PR's #10526 member, declared in the PR
body. The refine comment and rejection message were not the only places the
pre-#10347 rationale was written down: `ttl.onlyWhen`'s `.describe()` closed
with "Incompatible with rotation storage and archive, which act on whole
shards / age alone" — and by construction that sentence only ever applies
when `ttl` IS declared, which is exactly the case where the Archiver now
selects by the ttl cutoff rather than by age.
Same defect class, same file, same fix already derived for the message; the
correct wording is pinned by the merged Archiver read this PR's first commit
cites. Leaving it would have shipped a PR whose refine message and whose
describe string give contradictory reasons for one refusal.
`retention.onlyWhen`'s matching clause is NOT touched and is still accurate:
with `retention` and no `ttl` the Archiver moves rows by `created_at` age,
and when the triple is declared #10643's refine pins `ttl` to restate
`created_at`/`retention.maxAge`, so the ttl cutoff coincides with the age
bound in every shape that parses.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01B4h3medzvhB9rpfoja9jcw
* chore(spec): changeset + wholesale reference-projection regen for the prose family (#10526, #10336)
`content/docs/references/data/object.mdx` regenerated wholesale via
`pnpm --filter @objectstack/spec gen:docs` (never hand-edited). The projection
diff is exactly the two `enable` describe strings; the `default:` columns and
every other row are untouched, which is the generated-side echo of the
clause-(2) probe result.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01B4h3medzvhB9rpfoja9jcw
---------
Co-authored-by: Claude <noreply@anthropic.com>
1 parent a7ea328 commit 52db1d1
3 files changed
Lines changed: 28 additions & 8 deletions
File tree
- .changeset
- content/docs/references/data
- packages/spec/src/data
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
176 | 176 | | |
177 | 177 | | |
178 | 178 | | |
179 | | - | |
180 | | - | |
| 179 | + | |
| 180 | + | |
181 | 181 | | |
182 | 182 | | |
183 | 183 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
278 | 278 | | |
279 | 279 | | |
280 | 280 | | |
281 | | - | |
| 281 | + | |
282 | 282 | | |
283 | 283 | | |
284 | 284 | | |
| |||
287 | 287 | | |
288 | 288 | | |
289 | 289 | | |
290 | | - | |
| 290 | + | |
291 | 291 | | |
292 | 292 | | |
293 | 293 | | |
| |||
876 | 876 | | |
877 | 877 | | |
878 | 878 | | |
879 | | - | |
| 879 | + | |
880 | 880 | | |
881 | 881 | | |
882 | 882 | | |
| |||
977 | 977 | | |
978 | 978 | | |
979 | 979 | | |
980 | | - | |
981 | | - | |
| 980 | + | |
| 981 | + | |
| 982 | + | |
| 983 | + | |
| 984 | + | |
| 985 | + | |
| 986 | + | |
| 987 | + | |
| 988 | + | |
| 989 | + | |
| 990 | + | |
| 991 | + | |
| 992 | + | |
| 993 | + | |
982 | 994 | | |
983 | 995 | | |
984 | 996 | | |
| |||
988 | 1000 | | |
989 | 1001 | | |
990 | 1002 | | |
991 | | - | |
| 1003 | + | |
992 | 1004 | | |
993 | 1005 | | |
994 | 1006 | | |
| |||
0 commit comments