Skip to content

finding(objectql): archiveObject's triple-declaration comment still calls a decided question undecided #10865

Description

@os-elon

Noticed while implementing #10528. Not touched by that diff — the comment sits just above the lines it restructures, but a stale cross-reference is a different defect class from the governance gap that card fixes, so it is recorded rather than fixed in passing.

The shape

packages/objectql/src/lifecycle/lifecycle-service.ts, in the archiveObject docblock (immediately above the dueField selection), still reads:

Deliberately NOT decided here: retention declared beside ttl + archive. The ttl cutoff selects, so the age window (archive.after, which the spec pins equal to retention.maxAge) no longer separately bounds the hot store for that triple. Whether the Archiver should union the two windows, or the triple be refused at parse time (a packages/spec accept-set question, outside this card's fence), is #10527 rather than a choice this diff makes silently.

That was accurate when #10347 wrote it. #10527 has since been answered: #10643 (5649efbf93) took the parse-time-refusal disposition, and LifecycleSchema now refuses a retention + ttl + archive triple unless ttl restates retention.maxAge on created_at.

Two consequences for a reader of that comment today:

  1. It reads as an open design question at the site, when the question is closed. A reader who does not follow the link inherits the wrong picture of what the Archiver is allowed to receive.
  2. Its warning describes a shape the spec no longer accepts. For any triple that parses now, ttl.expireAfter equals retention.maxAge and ttl.field is created_at, so the two windows are the same instant on the same column — the "the age bound no longer separately bounds the hot store" concern cannot arise.

Why it is filed rather than fixed

No behaviour is wrong; nothing is unenforced. It is comment accuracy at a spot #10347 deliberately made load-bearing, which is why it seems worth a line rather than silence — same class as #9781 (a cascade comment stating a premise that a later enforcement card made stale).

The natural fix is a few lines of prose in the same docblock, saying the triple is now refused at parse time and pointing at #10643 instead of an open question. Whoever picks it up should re-read the refine at packages/spec/src/data/object.zod.ts rather than trusting this summary.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions