Repository navigation
fix: keep published update measurements unchanged - #1604
Conversation
Assisted-by: GPT-6.1 via GitHub Copilot Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Hive-Run: projectbluefin#1516 Hive-Plan: freeze-published-churn Hive-Spec: issue-1516#maintainer-freeze-published-points Signed-off-by: mendezr <mendezr@users.noreply.github.com>
There was a problem hiding this comment.
Summary: This change stops the update-size report from silently rewriting measurements it has already published, which is what the linked issue asked for. It works for the images that publish one dated tag per release. It does not fit Dakota, whose only tracked tag is a floating name that always points at today's build: after this change Dakota's single size figure is frozen at the day it was first measured and will never move again. One sentence in the pipeline guide is also now out of date.
What I need from you: Recompute floating-tag points (Dakota) instead of freezing them, and fix the stale guide sentence.
correctness
- Dakota's floating
stablepoint is frozen permanently (scripts/fetch-update-churn.js:860-872,:448-476). Dakota hasdefaultTags: ["stable"]and notagSeries(scripts/fetch-update-churn.js:118-126). Its published record is{tag:"stable", previousTag:null, isBaseline:true, totalMB:3507.4, date:"2026-10-22"}(static/data/update-churn.json). On the next runappendTagsis["stable"],lastTagis"stable",startbecomes1 === tags.length, soappendReleaseChurnreturnspublisheduntouched andgetPlatformLayersis never called. The guide itself says a floating name "point[s] at the newest manifest" (docs/skills/update-churn-pipeline.md:75-76), so this record is a snapshot, not history; the issue's decision was about re-pushed dated tags. Before this PR the point was recomputed each run (mainat merge-base, oldreleaseManifestsloop). Suggested fix — only freeze images that have a dated series:
--- a/scripts/fetch-update-churn.js
+++ b/scripts/fetch-update-churn.js
@@ -828,10 +828,13 @@ async function main() {
.slice(tagSeries && seriesListed ? -tagSeries.limit : undefined);
- if (
- tagsToInspect.length === 0 &&
- !existingData?.images?.[id]?.releases?.length
- ) {
+ // A floating tag (`stable` on Dakota) names the newest manifest, so its
+ // published point is a snapshot, not history: recompute it every run.
+ // Only dated series are append-only.
+ const published = tagSeries
+ ? existingData?.images?.[id]?.releases || []
+ : [];
+
+ if (tagsToInspect.length === 0 && published.length === 0) {
imagesOutput[id] = {
@@ -847,7 +850,6 @@ async function main() {
continue;
}
- const published = existingData?.images?.[id]?.releases || [];
// Keep the published tail in the sequence even after it leaves the discoveryPlus one test: appendReleaseChurn(["stable"], [], load) must call load("stable"), and a main-level check that a tagSeries-less image passes [] as published.
- Series now grows without bound (
scripts/fetch-update-churn.js:449,:860-872).results = [...published, ...new]is never trimmed, soUTAH_TAG_LIMIT = 14/BLUEFIN_TAG_LIMIT = 30(:83,:93) now only bound how many new tags are inspected. Utah ships up to ~20 builds a day (docs/skills/update-churn-pipeline.md:70-71); the committed JSON will add that many points per day indefinitely, with no/analyticsconsumer today (docs/skills/update-churn-pipeline.md:21-23). Not blocking — retaining history is the PR's stated choice — but worth a deliberate cap or a note that the file is expected to grow.
docs-currency
- Step 1 still says "
limitthen trims the merged list, so a seed older than the discovered window cannot push the series past the limit" (docs/skills/update-churn-pipeline.md:98-100), which the new step 2 ("Retain published history outside the discovery window",:107) contradicts: the written series can and will exceedlimit.
is never trimmed against the order used for diffing. `limit` then trims the
list of tags inspected this run, so a seed older than the discovered window
cannot add new points past the limit; published history retained by step 2
is not subject to it.
No findings from: security, intent-alignment, style.
Confidence: 3/5 (needs attention) — 1 medium finding; 2 perspectives requested changes
— hive: agent=reviewer backend=copilot model=claude-fable-5.1 copilot=1.0.88
|
Reviewed at |
Summary: Bluefin’s update-size reports could silently change older measurements when a published release was replaced. This change keeps published measurements unchanged and adds measurements only for newer releases, so readers can trust the history they have already seen.
Changes
Fixes #1516. The unrelated bot-list finding folded into that issue is tracked separately in #1603; #1602 only changes the contributor metrics tracker.
Validation
node --test scripts/fetch-update-churn.test.js: 31 passed.npm test: 1,358 passed.npm run lint: passed with 269 existing warnings, no errors.git diff --check: passed.just check: blocked at typecheck because this fresh checkout lacks six generated JSON imports: image-releases, playlist-metadata, file-contributors, github-repos, portal-contributors, and blog-posts. Lint and tests were then run separately.No generated data was edited. Existing published values are frozen as found; this does not attempt to reconstruct values overwritten by earlier runs.
— hive: backend=pi model=openai-codex/gpt-6.1-sol
🐝 Hive Agent:
contributor| SHA:b6b55b00