Skip to content

ref(cli): Drop unused installedAt timestamp from install manifest#43

Merged
thecodedrift merged 1 commit into
mainfrom
feat/drop-installed-at
Jun 15, 2026
Merged

ref(cli): Drop unused installedAt timestamp from install manifest#43
thecodedrift merged 1 commit into
mainfrom
feat/drop-installed-at

Conversation

@thecodedrift

Copy link
Copy Markdown
Member

Remove the installedAt timestamp from the install manifest. It was written into .taskless/taskless.json on every install but never read by anything, so it only produced spurious diffs in committed manifests (surfaced while dogfooding via pnpm build:self — see #42).

What

  • Drop installedAt from InstallState, the manifest type, the read path, and the write path.
  • Retire the injectable now option on applyInstallPlan — the timestamp was its only consumer, so manifest writes are now fully deterministic.
  • Schema migration v3 (0003-drop-installed-at.ts) strips the field from existing manifests; idempotent, and forward-migrates cleanly from every prior version.
  • Tests updated: fixtures/assertions dropped the field, a migration test now asserts v3 strips installedAt while preserving other install fields, the version matrix covers a v3 start, and the two fresh-install version assertions bump 2→3.

Why

installedAt had no readers — confirmed by tracing every reference (all writes/pass-through). Removing it eliminates the per-run churn the manifest produced on re-install/dogfood.

Scope

This addresses the timestamp specifically (per-run churn). A real install still rewrites cliVersion/target-modes when those actually change — that's the broader "separate stable config from volatile install metadata" question in #42, intentionally left out here. The repo's own committed taskless.json is not hand-migrated; it upgrades lazily on next install.

Review notes

  • Non-breaking → patch changeset. Existing manifests migrate automatically (v2 → v3).
  • A v3 manifest read by an older CLI is tolerated (its migration runner sees version >= max and no-ops).

Refs #42

The install manifest wrote an installedAt timestamp on every install but
nothing ever read it, so it only produced spurious diffs in committed
.taskless/taskless.json (e.g. on pnpm build:self). Remove it from the
install state and the manifest, retire the now-unused injectable `now`
option (making manifest writes deterministic), and add a v3 schema
migration that strips the field from existing manifests.

Refs #42
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings June 15, 2026 05:40

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Removes the unused installedAt timestamp from the Taskless CLI install manifest so installs stop producing noisy, non-deterministic diffs in .taskless/taskless.json, and adds a schema migration to strip the field from existing manifests.

Changes:

  • Remove installedAt from the install-state types and from the manifest read/write paths; drop the now injection from applyInstallPlan to make manifest writes deterministic.
  • Add schema migration v3 (0003-drop-installed-at) to delete install.installedAt from existing manifests.
  • Update CLI tests and migration/version expectations to reflect schema v3 and the removed field.

Reviewed changes

Copilot reviewed 12 out of 12 changed files in this pull request and generated no comments.

Show a summary per file
File Description
packages/cli/src/install/install.ts Removes now option and stops writing installedAt into the next install state.
packages/cli/src/install/state.ts Removes installedAt from InstallState and from manifest serialization/deserialization.
packages/cli/src/filesystem/migrate.ts Drops installedAt from manifest type and registers migration v3.
packages/cli/src/filesystem/migrations/0003-drop-installed-at.ts New migration that strips install.installedAt from existing manifests.
packages/cli/src/wizard/index.ts Stops including installedAt in the wizard’s computed “next state” for diffs.
packages/cli/test/migrate-install.test.ts Updates migration tests for v3 and asserts installedAt is removed while other fields persist.
packages/cli/test/onboard.test.ts Updates expected schema version and removes installedAt assertions/fixtures.
packages/cli/test/init-no-interactive.test.ts Updates expected manifest schema version to v3.
packages/cli/test/install-state.test.ts Removes installedAt from round-trip install-state fixtures.
packages/cli/test/apply-install-plan.test.ts Removes installedAt from install-state fixtures used by apply tests.
packages/cli/test/wizard-integration.test.ts Removes installedAt from seeded install state fixture.
.changeset/drop-installed-at.md Patch changeset documenting the removal and determinism improvement.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@thecodedrift thecodedrift merged commit defb670 into main Jun 15, 2026
4 checks passed
@thecodedrift thecodedrift deleted the feat/drop-installed-at branch June 15, 2026 05:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants