Skip to content

Add change-timeline data layer (git-derived dates) - #91

Merged
VeryComplexAndLongName merged 2 commits into
mainfrom
feat/change-timeline-data-layer
Aug 26, 2026
Merged

Add change-timeline data layer (git-derived dates)#91
VeryComplexAndLongName merged 2 commits into
mainfrom
feat/change-timeline-data-layer

Conversation

@VeryComplexAndLongName

Copy link
Copy Markdown
Owner

Summary

  • First of three changes building the "change timeline" feature (single-change view, then a multi-change parallel log-scale view, come next).
  • Add packages/core/src/change-timeline.ts: getChangeTimeline/getChangeTimelines — best-effort created date, archived date (parsed from the YYYY-MM-DD-<name> archive folder name, no git needed), and a per-task completion date via git blame --line-porcelain on tasks.md.
  • A task's date is only ever surfaced when it's checked — blame reports "last touched," which for an unchecked task is just its creation date, not a completion date (caught by the real-git-repo test fixture, which initially expected null and found blame correctly returning the creation commit instead).
  • Matching REST routes (POST /api/change-timeline//api/change-timelines) in the standalone server and a webui client, following the existing /api/change-editor/read plain-JSON pattern rather than the Command/Event streaming protocol (a poor fit for an in-process computation with nothing to shell out to).
  • No UI in this change.
  • Versioned via a changeset: @openspec-ui/core 0.26.0 -> 0.27.0, @openspec-ui/server 1.8.0 -> 1.9.0, @openspec-ui/webui 1.10.0 -> 1.11.0 (all minor).

Real-data verification

Manually smoke-tested against this session's own repository: 2026-08-26-add-cli-help-flag's 8 tasks all correctly share one date (2026-08-26T11:23:59.000Z), matching that PR's squash-merge commit exactly — the accepted "2-3 milestone" outcome for squash-merged history.

Test plan

  • change-timeline.test.ts: real temp git repo fixture (not mocked) — separate-commit dates, one-commit-shared dates, unchecked-task-has-no-date, blame surviving an active-to-archive directory rename
  • REST handler tests in server.test.ts
  • change-timeline-client.test.ts in webui
  • npm run typecheck, npm run lint (including lint:english), npm run test workspace-wide
  • Manual REST smoke test against this repo's own real archived changes (single + batch endpoints)
  • openspec change validate --strict add-change-timeline-data-layer

🤖 Generated with Claude Code

VeryComplexAndLongName and others added 2 commits August 26, 2026 18:53
First of three changes building the "change timeline" feature: for a
given change (active or archived), best-effort created/archived dates
and a per-task completion date derived from git blame on tasks.md, plus
proposal/design/spec content in one read. Never errors on missing git
history -- undeterminable dates are null, matching the accepted "2-3
milestone" outcome for squash-merged history (verified against this
session's own real archived changes: all of add-cli-help-flag's tasks
correctly share one date, matching its squash-merge commit).

No UI in this change -- getChangeTimeline/getChangeTimelines in
@openspec-ui/core, matching REST routes in the standalone server, and a
webui client, following the existing change-editor read/REST pattern
rather than the Command/Event streaming protocol (a poor fit for an
in-process computation with nothing to shell out to).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
CI never triggered for this branch after the initial push (0 runs
recorded for either the push or pull_request event, despite the
Quality workflow being active and working for every other PR today) --
looks like a one-off webhook delivery miss, not a workflow config
issue. No code changes.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@VeryComplexAndLongName
VeryComplexAndLongName merged commit 6f75218 into main Aug 26, 2026
6 checks passed
@VeryComplexAndLongName
VeryComplexAndLongName deleted the feat/change-timeline-data-layer branch August 26, 2026 16:37
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.

1 participant