ref(cli): Drop unused installedAt timestamp from install manifest#43
Merged
Conversation
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>
Contributor
There was a problem hiding this comment.
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
installedAtfrom the install-state types and from the manifest read/write paths; drop thenowinjection fromapplyInstallPlanto make manifest writes deterministic. - Add schema migration v3 (
0003-drop-installed-at) to deleteinstall.installedAtfrom 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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Remove the
installedAttimestamp from the install manifest. It was written into.taskless/taskless.jsonon every install but never read by anything, so it only produced spurious diffs in committed manifests (surfaced while dogfooding viapnpm build:self— see #42).What
installedAtfromInstallState, the manifest type, the read path, and the write path.nowoption onapplyInstallPlan— the timestamp was its only consumer, so manifest writes are now fully deterministic.0003-drop-installed-at.ts) strips the field from existing manifests; idempotent, and forward-migrates cleanly from every prior version.installedAtwhile preserving other install fields, the version matrix covers a v3 start, and the two fresh-install version assertions bump 2→3.Why
installedAthad 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 committedtaskless.jsonis not hand-migrated; it upgrades lazily on next install.Review notes
version >= maxand no-ops).Refs #42