The store commits a backfilled older observation as the newest, and an id-less build erases a recorded identity
I maintainer di solito rispondono entro 9 giorni
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 45/100
Direzione di ricerca
Start with commit() and _identity_problem, then read history-and-reports.md and the HISTORY-PUBLISH-06 contract. Trace how a backfilled bundle updates the index, project location, identity fields, and latest/; also check how offline builds handle missing IDs. Done when older observations preserve the current tail and recorded identity, with tests covering the reproduced history-gap cases.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Found by the review of 2026-09-30. Both are about what commit() does with a bundle that is not the new tail, and both are reproduced against a real store written by the current code.
1. An older observation is committed as if it were the newest
Since #17 an observation that is not later than the previous bundle is INCOMPARABLE (NON_MONOTONIC_OBSERVATION) and claims no direction; where such a bundle lands was left to the monotonic-write policy of #12 finding 6. Today it lands everywhere a newest bundle does, because commit() always relocates the project, overwrites the index header and republishes latest/:
- the index stays sorted, so its tail is still the newer bundle, but
latest/now holds the older one:index tail: 9ec829e6e113,latest/ copy bundle: a45db0c70eab (older); - the fleet entry names the tail (
bundle_id 9ec829e6e113, observed 2026-09-05) and links…/latest/report.md, which saysObserved at: 2026-09-01T12:00:00Z,Comparison: INCOMPARABLE: the fleet README and theobserve-selfjob summary show the older report as current; - after a compaction of the index (which the contract allows), the next run is
HISTORY_GAP(latest pointer a45db0… differs from index tail 9ec829…), where the same run without the backfill isCOMPARABLE; - a backfill under the old name of a renamed repository moves the whole history back: after
widget → gadgeton 2026-09-07 and a 2026-09-06 observation backfilled underwidget, the directory isgithub.com/acme/widget, the indexproject_keyiswidget, and once the next regular run relocates it again the genuine 2026-09-07 rename record is gone fromrenames.
This violates HISTORY-PUBLISH-06 ("index tail, latest view and immutable bundle mutually consistent") without anyone having decided the policy. A minimal repair that decides nothing: in commit(), a bundle becomes the tail only when its (observed_at, bundle_id) is greater than the current tail's; otherwise it is written where the project already lives, appended to the index without touching project_key, project_identity or renames, and latest/ is not republished. _report_path should use latest/ only when it holds the tail. Rejecting such bundles outright, or archiving them apart, stays the policy question of #12 finding 6.
2. A store without identities binds the tail to the current run, and an id-less commit erases a recorded id
history-and-reports.md says the tail must carry "the identity the index records (its locator, for a store without identities)". _identity_problem uses recorded or <the id of the current run> instead:
- the first id-bearing run over a locator-keyed history is
HISTORY_GAPwithPROJECT_IDENTITY_MISMATCH: … belongs to project None, this history is project 42, although nothing is wrong: the history simply predates identities; - after one id-less commit (an offline
buildfrom observations without an id) the index's recorded id isNone, the next id-bearing run is aHISTORY_GAP, and a rename of that project starts aBASELINE.
Only reachable through offline build; the live adapter always supplies an id. Repair: bind by locator whenever the index records no id, and never replace a recorded id with none.
🤖 Generated with Claude Code
- Lingua principale
- Python
- Stelle
- 4
- Fork
- 1
- Merge medio
- 5g 12h
- PR unite (30g)
- 3
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di drevendev/Devostasis
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 65/100
drevendev/Devostasis#25 ·
I maintainer di solito rispondono entro 9 giorni
-
good first issue hacktoberfest help wanted
Difficoltà 2/5 1-3 ore Idoneità per principianti 56/100
drevendev/Devostasis#78 ·
I maintainer di solito rispondono entro 9 giorni
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 30/100
drevendev/Devostasis#77 ·
I maintainer di solito rispondono entro 9 giorni
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
drevendev/Devostasis#76 ·
I maintainer di solito rispondono entro 9 giorni
-
Offline Git collection: isolate inherited repository context and credential environmentForse già presa @abogun-product l’ha presa 13 giorni fa. Aperta
Difficoltà 3/5 1-2 giorni Idoneità per principianti 25/100
drevendev/Devostasis#74 ·
I maintainer di solito rispondono entro 9 giorni
Tutte le issue di drevendev/Devostasis
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
zach-blumenfeld/aip#13 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 80/100
nathanmarlor/foxess_modbus#1287 ·
I maintainer di solito rispondono entro 4 giorni
-
bug good first issue help wanted
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
OpenLakeForge/openlakeforge#498 ·
I maintainer di solito rispondono entro 1 giorno
-
good first issue hacktoberfest help wanted python
Difficoltà 2/5 1-3 ore Idoneità per principianti 73/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 69/100
pollen-robotics/reachy_mini#1493 ·
I maintainer di solito rispondono entro 1 giorno