nightly improvement: make live usage accounting atomic #153

Merged
severus-snape merged 1 commit from proposal/nightly-20261028-atomic-usage into main 2026-10-31 04:19:44 +00:00
Collaborator

Nightly-Improvement-Vorschlag — nur PR, kein Merge/Deployment

Erster ausdrücklich gekennzeichneter Nightly-Vorschlag aus NIGHT 2026-10-28, Records 8 + 9 (0-basiert): snape-live-usage-atomic und snape-live-cost-atomic. Kein Sammelimport anderer Nachtarbeiten; Renderer und Default-Worker sind nicht enthalten. Die ursprünglichen improved-Receipts sind Herkunftsnachweise, kein unabhängiger Evaluator-PASS.

Problem und Nutzen

Live-Usage-Events konnten bisher Zähler bereits verändern, bevor ungültige weitere Token-/Kostenwerte auffielen: negative oder gebrochene Tokens, NaN/Infinity, nichtnumerische Werte und Überläufe konnten Verbrauchsanzeigen und Metadaten inkonsistent machen.

Dieser kleine Patch prüft alle vier Token-Deltas samt Summen und Kosten samt Kostensumme vor jeder Mutation. Ein ungültiges Usage-Event wird vollständig verworfen: keine teilweise beschädigten Zähler, keine vorgezogenen Modellmetadaten, keine neue Usage-Sequenz. Gültige Folgeevents und Text-/Abschlussverarbeitung bleiben möglich.

Beispiele vorher → nachher:

  • inputTokens: 5, aber outputTokens: -1: zuvor teilweise/falsche Verbrauchszählung möglich → gesamtes Usage-Update ohne Zustandsänderung verworfen.
  • Gültige Tokens, aber costUsd: NaN oder überlaufende Kostensumme: zuvor Tokens bereits addiert und Kosten beschädigt → weder Tokens noch Kosten noch Metadaten werden übernommen.
  • Gültige Null-Deltas und costUsd: 0 bzw. Bruchkosten bleiben gültig; bisherige Summen werden nicht zurückgesetzt.

Exakter geprüfter Umfang

Unabhängiges Exact-Review (ee2): keine offenen P0/P1 für genau diesen Commit/Tree/Patch. Review-Artefakt, SHA256 308df0e8e89603a78eb207168fa4267ff46acf4b519e876c7fd9da45ce021236. Vollpatch, Manifest, Handoff. Diese lokalen Evidence-Links sind keine öffentlich erreichbaren Forgejo-Artefakte; Pfade und Hashes dienen der exakten Zuordnung im Operator-Workspace.

Das Review-Plugin wurde auf seinen tatsächlichen Status geprüft, ist jedoch weiterhin an den fremden Dirty-Core-Changeset cbeaa734… gebunden. Kein Kandidaten-PASS dieses Plugins wird behauptet; weder Reviewbudget noch Schutz/Gates wurden verändert. Veröffentlichung erfolgt über den normalen Branch-/PR-Weg.

Tests — reale Ergebnisse, kein grünes Vollsuite-Etikett

Prüfung Ergebnis
Baseline: beide ursprünglichen Guard-Testdateien 28 RED, 0 bestanden
Kandidat: runs + beide Guard-Tests + neue Regression 46 GREEN, 0 fail / 0 cancelled
API-Nachbarschaft: api, api-keepalive, api-credential 28 bestanden, 0 fail / 0 cancelled
Typecheck und Build erfolgreich
Unabhängige Review-Stichprobe: review-boundary/runs/state/Regression/result-orchestration 65 bestanden
Vollsuite, timeout 300 npm test NICHT PASS: Exit 124; 683 pass / 3 fail / 49 cancelled (735 Tests)

Die drei expliziten Vollsuitefehler betreffen cron archive (prompts undefined), scheduled worker (running statt completed) und dedicated review (pending statt passed). Baseline-Vergleiche reproduzieren Archive-/Reviewprobleme; der Workerfehler ist zeitabhängig und ebenfalls auf Base dokumentiert.

Timeout-A/B-Evidenz: Base und Kandidat wurden unabhängig mit demselben begrenzten 45s-Lauf (result-orchestration, result-tool-hook, usage-atomic-regression, seriell) geprüft. Beide Exit 124, jeweils 14 pass / 0 fail / 2 cancelled. Der globale Timeout bricht laufende und noch wartende Dateien ab; Hook allein ist auf beiden Seiten 2/2 grün, eine größere Kandidatenstichprobe ebenfalls grün. Das belegt den Abbruchmechanismus, nicht, dass alle 49 abgebrochenen Tests isoliert bestehen. Die genaue Durchsatzursache der Vollsuiteüberschreitung bleibt offen. Kein nachgewiesener P0/P1 dieses Kandidatendeltas, aber weiterhin kein erfolgreicher Vollsuiteabschluss.

Grenzen und Publikationsstatus

Keine Reparatur bereits beschädigter Records, kein allgemeiner Event-Decoder, keine neue Diagnose verworfener Events. costUsd: number ist Pflicht im Usage-Event; fehlende/null/String-Kosten sind keine gültigen optionalen Kosten. Shared node_modules ist nur ein ungetrackter lokaler Symlink, nicht im Commit.

Vor Veröffentlichung wurden sämtliche 152 vorhandenen offenen/geschlossenen PRs sowie Remote-Branches und main abgeglichen: kein passender bestehender PR/Branch, main entspricht obiger Base. Die vorhandenen Repository-Labels konnten mangels read:issue (HTTP 403) nicht gelesen werden; deshalb kein geratenes Label angelegt oder zugewiesen. Die Nightly-Kennzeichnung erfolgt ausdrücklich in Titel und diesem Text. Nur Vorschlag; kein Merge, kein Deployment, kein Image-Workflow.

## Nightly-Improvement-Vorschlag — nur PR, kein Merge/Deployment Erster ausdrücklich gekennzeichneter Nightly-Vorschlag aus **NIGHT 2026-10-28, Records 8 + 9 (0-basiert)**: `snape-live-usage-atomic` und `snape-live-cost-atomic`. Kein Sammelimport anderer Nachtarbeiten; Renderer und Default-Worker sind nicht enthalten. Die ursprünglichen `improved`-Receipts sind Herkunftsnachweise, kein unabhängiger Evaluator-PASS. ### Problem und Nutzen Live-Usage-Events konnten bisher Zähler bereits verändern, bevor ungültige weitere Token-/Kostenwerte auffielen: negative oder gebrochene Tokens, NaN/Infinity, nichtnumerische Werte und Überläufe konnten Verbrauchsanzeigen und Metadaten inkonsistent machen. Dieser kleine Patch prüft **alle vier Token-Deltas samt Summen und Kosten samt Kostensumme vor jeder Mutation**. Ein ungültiges Usage-Event wird vollständig verworfen: keine teilweise beschädigten Zähler, keine vorgezogenen Modellmetadaten, keine neue Usage-Sequenz. Gültige Folgeevents und Text-/Abschlussverarbeitung bleiben möglich. Beispiele vorher → nachher: - `inputTokens: 5`, aber `outputTokens: -1`: zuvor teilweise/falsche Verbrauchszählung möglich → gesamtes Usage-Update ohne Zustandsänderung verworfen. - Gültige Tokens, aber `costUsd: NaN` oder überlaufende Kostensumme: zuvor Tokens bereits addiert und Kosten beschädigt → weder Tokens noch Kosten noch Metadaten werden übernommen. - Gültige Null-Deltas und `costUsd: 0` bzw. Bruchkosten bleiben gültig; bisherige Summen werden nicht zurückgesetzt. ### Exakter geprüfter Umfang - Head: [`86053ba8d0507ba5055930a808884845078ced2e`](https://git.vanillacore.net/harness/core/commit/86053ba8d0507ba5055930a808884845078ced2e) - Base: [`e4ebb7bbd622016aabaf646130e0ddb87be43337`](https://git.vanillacore.net/harness/core/commit/e4ebb7bbd622016aabaf646130e0ddb87be43337) - Tree: `925a71aab4559ac87d53b5ea03d69050300c0406` - Vollpatch (binary/full-index) SHA256: **`972ed8af68488f8a6bfa8400d596887ffc99eb323302c3882d4dbf591e894799`** - Genau vier Dateien: `src/api/runs.ts`, `test/live-cost-atomic.test.ts`, `test/live-usage-atomic.test.ts`, `test/usage-atomic-regression.test.ts`. Unabhängiges Exact-Review (ee2): **keine offenen P0/P1** für genau diesen Commit/Tree/Patch. [Review-Artefakt](file:///home/node/.vanillacore-harness/development-evidence/nightly-atomic-usage-INDEPENDENT-REVIEW.md), SHA256 `308df0e8e89603a78eb207168fa4267ff46acf4b519e876c7fd9da45ce021236`. [Vollpatch](file:///home/node/.vanillacore-harness/development-evidence/night-proposals-20261028/candidate.patch), [Manifest](file:///home/node/.vanillacore-harness/development-evidence/night-proposals-20261028/manifest.json), [Handoff](file:///home/node/.vanillacore-harness/development-evidence/night-proposals-20261028-PR-HANDOFF.md). Diese lokalen Evidence-Links sind **keine öffentlich erreichbaren Forgejo-Artefakte**; Pfade und Hashes dienen der exakten Zuordnung im Operator-Workspace. Das Review-Plugin wurde auf seinen tatsächlichen Status geprüft, ist jedoch weiterhin an den fremden Dirty-Core-Changeset `cbeaa734…` gebunden. Kein Kandidaten-PASS dieses Plugins wird behauptet; weder Reviewbudget noch Schutz/Gates wurden verändert. Veröffentlichung erfolgt über den normalen Branch-/PR-Weg. ### Tests — reale Ergebnisse, kein grünes Vollsuite-Etikett | Prüfung | Ergebnis | | --- | --- | | Baseline: beide ursprünglichen Guard-Testdateien | **28 RED**, 0 bestanden | | Kandidat: runs + beide Guard-Tests + neue Regression | **46 GREEN**, 0 fail / 0 cancelled | | API-Nachbarschaft: api, api-keepalive, api-credential | **28 bestanden**, 0 fail / 0 cancelled | | Typecheck und Build | erfolgreich | | Unabhängige Review-Stichprobe: review-boundary/runs/state/Regression/result-orchestration | 65 bestanden | | Vollsuite, `timeout 300 npm test` | **NICHT PASS**: Exit 124; 683 pass / 3 fail / 49 cancelled (735 Tests) | Die drei expliziten Vollsuitefehler betreffen cron archive (`prompts` undefined), scheduled worker (running statt completed) und dedicated review (pending statt passed). Baseline-Vergleiche reproduzieren Archive-/Reviewprobleme; der Workerfehler ist zeitabhängig und ebenfalls auf Base dokumentiert. **Timeout-A/B-Evidenz:** Base und Kandidat wurden unabhängig mit demselben begrenzten 45s-Lauf (result-orchestration, result-tool-hook, usage-atomic-regression, seriell) geprüft. Beide Exit 124, jeweils 14 pass / 0 fail / 2 cancelled. Der globale Timeout bricht laufende und noch wartende Dateien ab; Hook allein ist auf beiden Seiten 2/2 grün, eine größere Kandidatenstichprobe ebenfalls grün. Das belegt den Abbruchmechanismus, **nicht**, dass alle 49 abgebrochenen Tests isoliert bestehen. Die genaue Durchsatzursache der Vollsuiteüberschreitung bleibt offen. Kein nachgewiesener P0/P1 dieses Kandidatendeltas, aber weiterhin kein erfolgreicher Vollsuiteabschluss. ### Grenzen und Publikationsstatus Keine Reparatur bereits beschädigter Records, kein allgemeiner Event-Decoder, keine neue Diagnose verworfener Events. `costUsd: number` ist Pflicht im Usage-Event; fehlende/null/String-Kosten sind keine gültigen optionalen Kosten. Shared node_modules ist nur ein ungetrackter lokaler Symlink, nicht im Commit. Vor Veröffentlichung wurden sämtliche 152 vorhandenen offenen/geschlossenen PRs sowie Remote-Branches und main abgeglichen: kein passender bestehender PR/Branch, main entspricht obiger Base. Die vorhandenen Repository-Labels konnten mangels `read:issue` (HTTP 403) nicht gelesen werden; deshalb kein geratenes Label angelegt oder zugewiesen. Die Nightly-Kennzeichnung erfolgt ausdrücklich in Titel und diesem Text. **Nur Vorschlag; kein Merge, kein Deployment, kein Image-Workflow.**
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
harness/core!153
No description provided.