| Age | Commit message (Collapse) | Author |
|
0.18.5
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Both the rank-history SVG and the gemtext showcase now use the same rule:
inactive = AvgCommitAge (last 42 commits on HEAD) > 730 days (~2 years)
Changes:
- SVG subtitle: 'no meaningful commits in 1+ years' → 'avg commit age > 2 years'
- SVG struct comment: updated to describe the 730-day/42-commit rule accurately
- gemtext: dropped the secondary 'lastCommit > 365 days' guard (it allowed
projects like muttdelay to escape despite a single stray recent commit)
- gemtext notice text: 'Last meaningful activity was over 2 years ago' →
'The average age of its last 42 commits exceeds 2 years'
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
last-activity guard
The previous condition (AvgCommitAge>730 AND lastActivityDate>365d) allowed
projects like muttdelay to slip through: a single 'add deprecation notice'
commit in March 2026 made LastActivityDate recent while AvgCommitAge remained
4228 days (~11.6 years).
New rule: AvgCommitAge>730 alone. AvgCommitAge is the mean age of the last
42 commits, so a genuinely revived project needs ~42 recent commits before
the average drops below the threshold — one stray commit cannot mask decay.
LastActivityDate (all-branches) is kept in the struct for potential future use.
Also removes the now-unused 'time' import from rank_history_svg.go.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Add Score float64 to svgProjectData (serialised as JSON) so the JS tooltip
can display it. A 'score: X.X' line is inserted into the tooltip body just
below the project name title and above the weekly snapshot rows, rendered in
a dimmer grey (#888) to visually separate it from the rank-history data.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
inactivity
Problem: projects with active development on a non-default branch (e.g. all
recent work on 'master' while the workdir HEAD is on 'screenshots') were
being greyed out in the rank-history SVG despite recent commits.
Fix:
- Add LastActivityDate string to RepoMetadata, computed with
'git log --all -1 --pretty=format:%ai' (all local branches, no fetch).
Code stats (AvgCommitAge, CommitCount, LOC, score) remain HEAD-only per
the configured-branch rules.
- SVG inactivity check uses LastActivityDate (falling back to LastCommitDate
if the field is absent in older cache entries).
- getLastActivityDate() added to metadata.go alongside getLastCommitDate().
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Inactive projects (avgCommitAge > 730 days AND last commit > 365 days ago,
matching the gemtext inactivity notice) are now visually distinguished:
Default state
- Plot line: rendered as #555 grey at 0.3 opacity so it is visible but does
not compete with active coloured lines.
- Legend entry: dimmed to 0.35 opacity.
On legend-entry hover
- The line snaps to its project colour and is bolded (stroke-width 3) at
full opacity — identical behaviour to active projects.
- Other inactive lines remain at their grey resting state (not dimmed to
0.08 alongside active ones) so they stay readable.
On leave
- Both stroke colour and opacity are restored per-project: grey+0.3 for
inactive, colour+0.55 for active.
The inactivity flag is stored in the PROJECTS JSON (inactive:true/false) so
all JS state transitions can consult it without touching the DOM attributes.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Previously the graph was fixed at 5 weekly data points. Now:
- rankHistoryPoints raised from 5 → 32 so the store accumulates up to 32
weekly snapshots and each project carries 32 history entries.
- GenerateRankHistorySVG trims all leading all-zero columns before layout,
so the graph only spans from the oldest week that any project actually
has data — no empty space on the left when history is short.
- displayPoints (trimmed width) drives all layout math: xPos(), xLabels,
and the X-axis loop; numPoints is only used for the reversal placement.
- xLabelStep() thins X-axis text labels when many columns are visible
(step 1 for ≤6, 2 for ≤12, 4 for ≤24, 8 for >24 columns) while still
drawing a grid line at every column and always labelling 'now'.
- Test: give alpha a Spot at '4w' so trimming keeps that column and the
time-axis label test still finds '4w ago' in the output.
- New TestXLabelStep_ReturnsSensibleSteps covers the new helper.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Replace the uniform min(W/CHART_W, H/CHART_H) scale — which left blank bars
along the shorter axis — with independent x/y scales:
sx = W / CHART_W
sy = H / CHART_H
This maps the fixed CHART_W × CHART_H design coordinate space exactly onto
the current window dimensions, filling every pixel with no letterboxing.
The centering translate is no longer needed and is removed.
chartEl.getScreenCTM().inverse() handles the two-component transform
correctly, so tooltip hit-testing remains accurate at any window shape.
Tooltip boundary clamping still uses CHART_W / CHART_H (chart coordinates).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|