PARTIAL values are lower bounds in Pulse and Debt without the subset proof Clutter now requires, and the derivation rewrites their cause
I maintainer di solito rispondono entro 9 giorni
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 35/100
Direzione di ricerca
Start with src/devostasis/vitals/pulse.py and _partial_lower_bound, then read src/devostasis/vitals/debt.py and normalize._derived; the issue also points to Clutter's observations.subset_count_problem as the existing proof check. Reproduce the listed cases with missing coverage and value_semantics=ESTIMATE, then inspect the accepted contracts and PROVENANCE.md for rule version decisions. Done means partial lower bounds require subset proof, provenance reasons and value-less partials are preserved correctly, and the release version question is recorded.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Found by the review of 2026-09-30, while repairing PV-REV-PR-031-003 in #31.
What happens
The research review of #31 (run 408, PV-REV-PR-031-003, CLU-PARTIAL-TRUST-01..08) found that clutter.bands.v1 read any fresh value-bearing PARTIAL count as an observed subset on its status alone. #31 now repairs that for Clutter: the derivation declares a count over an incomplete inventory an OBSERVED_SUBSET_COUNT in its coverage, and Clutter admits a PARTIAL count as a floor only with that proof.
Two more Vitals make the same inference and were outside that review's scope:
- Pulse (
pulse.bands.v1,_partial_lower_boundinsrc/devostasis/vitals/pulse.py): a required input that isPARTIAL, fresh and value-bearing is a lower bound for the bounded inference ofPV-PULSE-REQUIRED-LOWER-BOUND-001, which the accepted contract grants only "because a newest-first enumeration was capped". - Debt (
src/devostasis/vitals/debt.py): aPARTIALdebt.items.open_countgreater than zero isDEGRADED / PRESENT / CONSERVATIVE_LOWER_BOUND.
Neither looks at what the value is. Reproduced on the head of #31, where the proof now exists but is not asked for:
pulse [no coverage at all]: STEADY DEGRADED CONSERVATIVE_LOWER_BOUND ['REQUIRED_INPUT_PARTIAL:git.default_branch.commits.count_28d:PAGINATION_CAPPED', ...]
debt [no coverage at all]: PRESENT DEGRADED CONSERVATIVE_LOWER_BOUND ['PARTIAL_REGISTER:debt.items.open_count']
pulse [value_semantics=ESTIMATE]: STEADY DEGRADED CONSERVATIVE_LOWER_BOUND [...]
debt [value_semantics=ESTIMATE]: PRESENT DEGRADED CONSERVATIVE_LOWER_BOUND ['PARTIAL_REGISTER:debt.items.open_count']
A PARTIAL value that says outright it is an estimate is still a floor.
Two related provenance defects of normalize._derived, found by the same review:
- the reason of a
PARTIALaggregate is replaced bySOURCE_COVERAGE_INCOMPLETEwhatever the source said (PAGINATION_CAPPED,REQUEST_BUDGET_EXHAUSTED, a cause that is not a cap), so Pulse diagnosesREQUIRED_INPUT_PARTIAL:…:SOURCE_COVERAGE_INCOMPLETEand cannot tell the capped enumeration its contract covers from anything else; - a value-less
PARTIALinventory becomes anUNAVAILABLEaggregate, which means "the source does not exist": Clutter then reads the branch component as explicitly unavailable (COMPONENT_UNAVAILABLE:branches:REQUEST_BUDGET_EXHAUSTED) instead of unresolved.
Why it is not repaired in the release
On the live path nothing changes: every count observe derives from an incomplete inventory now carries the proof, so a live PARTIAL input to Pulse or Debt is always a proven subset. The difference is only for saved or hand-written observation sets. But pulse.bands.v1 has been released since 0.1.2, and whether a hardening that changes no live output moves the rule id (one RULE_VERSION_BOUNDARY per project in the fleet) is a question for the research side. Debt also has its own accepted repair pending (PV-DEBT-PARTIAL-001, #33) on the same branch of debt.py. The review PR does fix Debt's missing freshness check (a stale partial register was a PRESENT lower bound, which vitals.md never allowed).
Proposal
- Apply the Clutter check (
observations.subset_count_problem) to everyPARTIALvalue Pulse and Debt read as a lower bound, with the fail-closed outcome each Vital already has for an unusable input (Pulse:UNKNOWNfor a required input; Debt:UNKNOWN). - Carry the source's reason onto a
PARTIALaggregate, and never turn a value-lessPARTIALsource intoUNAVAILABLE(a value-lessPARTIAL, orERROR). - Do the Debt part together with the
PV-DEBT-PARTIAL-001adoption of #33, so Debt's rule version moves once; give Horizon's accepted partial repair (PV-HORIZON-PARTIAL-001, #33) the same proof from the start. - For the research side: does a fail-closed check that changes no live output need a Pulse rule version? If not, record the judgement in
PROVENANCE.md.
🤖 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à 1/5 Meno di un'ora Idoneità per principianti 80/100
521xueweihan/HelloGitHub#4063 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
Vanilla-OS/apx-gui#112 ·
-
Devstral and Voxtral: section 5 fails in us-east-1 with 400 "Model does not support audio modality"Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
aws-samples/sample-per-model-bedrock#409 ·
I maintainer di solito rispondono entro 1 giorno
-
DuckDB 2.0 breaks to_pyarrow_batchesForse già presa @DG47 l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
ibis-project/ibis#12196 ·
I maintainer di solito rispondono entro 1 giorno