Skip to content

I1982 — Plan stamps written before seals existed are re-sealed by a command that keeps their original times

Provide a migration step (for example `plan seal --backfill`) that seals the stamps an older tool wrote, keeping each stamp's original time and recording who sealed it and when. Make the seal cutoff a per-repository value rather than one global constant.

BLOCKED wave 1 · p1 · implementation profile · parallel safe

Part of adopter-upgrades — An adopting repository survives a Majordomus upgrade, and what the tool vendors into it is adopter-neutral.

Blocked. This issue cannot start until I1980 is done. The status is derived from that, not declared.

Objective

Provide a migration step (for example `plan seal --backfill`) that seals the stamps an older tool wrote, keeping each stamp's original time and recording who sealed it and when. Make the seal cutoff a per-repository value rather than one global constant.

Why

OSCILLA had to replay every plan transition with 0.12 to satisfy sealed stamps (34f967a), so its stamps now carry the replay time and the true times survive only in git. This repository excused its own pre-seal stamps by hand with unsealed_stamps (91080bd64f). SEALED_FROM = 2026-10-01T00:00:00Z is hard-coded in lib/project.awk:45 and apps/majordomus-cli/src/plan.rs:122, so a stamp a 0.11 tool wrote after that date can never be excused.

Current state

No command seals or excuses existing stamps; both engines share a fixed cutoff.

Desired state

One command, run by `migrate --layer` from I1980, that seals or excuses every unsealed stamp with provenance and leaves the times unchanged. Both engines read the cutoff from the repository.

Scope

  • lib/plan.sh
  • lib/project.awk
  • apps/majordomus-cli/src/plan.rs
  • docs/PLANNING.md
  • test/cases

Dependencies

Acceptance criteria

  • A fixture with stamps written before sealing passes plan validate after the backfill, with every stamp's time unchanged
  • Both engines agree on the cutoff read from the repository; case 582_the_done_guard_holds_in_both_engines still passes

Validation

  • bin/majordomus plan validate
  • MJ_TEST_JOBS=4 bash test/run.sh <the case this issue adds>

Evidence required

  • reseal_keeps_times_case
  • cutoff_per_repository

Evidence

None recorded. Every token above needs a command or an artifact behind it before this issue can be completed; narrative is refused.

Timeline

started
—
verified
—
completed
—

Those three fields, the evidence above and the state of the dependencies are all the status is made of. There is no status field to disagree with them.

Canonical record: .ai/repo/project/issues/I1982.yaml. Read it back with majordomus plan show I1982.

Searches the titles and descriptions of every page this site publishes.